שִׁדּוּד
זהו דף עתיק על שידוד קוד גנוקש.
לעתים, עשוי להיות מעניין למדי לחקור את מתווה קוד המקור שמאחורי מיזם פיתוח תוכנה. לא ממש מפתיע: זוהי חשבונאות אחרי הכול. תכנת גנוקאש גדלה במהלך השנים, מפנקס המחאות אלקטרוני קטן ושימושי, עד לכדי תכנת שולחן עבודה מקיפה ורבת־תכונות.
כיום תוכנת גנוקאש מכילה מעל שליש מיליון שורות קוד, אלו פזורות על פני יותר מאלף קבצים. התכנה תורגמה לעשרים ושלוש שפות ומזכה מעל 139 כותבים ותורמים.
אם התקשיתם לשחות בתוך המסה הזו של קוד מקור, חשבו על זה כך: מודפסים על נייר, וכרוכים לכרכים, זה היה מסתכם בכמה עשרות עותקים של "מלחמה ושלום" מאת טולסטוי, בערך אורך של מדף ספרים במונחים של קוד מקור.
לתשומת לב, זהו קוד מקור (ומסמכים) נבנה ונופה מתקלים על ידי אנשים בשר ודם, *אין* זה קוד שחולל באופן אוטומטי. כלים (כגון גלייד או סוויג) יכולים ליצור אין ספור שורות קוד באופן אוטומטי; שורות כאלו לא נלקחו בחשבון כמובן. כל שורה שנספרה כאן, עד האחרונה שבהן, הוקלדה, נערכה, הוזחה, עודנה, יותר מפעם אחת, בידיים אנושיות.
בהתחשב בכך שיש לנו כ־400 תקלים פתוחים בבוגזילה, זה שיוצא בערך תקל אחד לאלף שורות קוד, או תקל אחד לכל 50 עמודים של תדפיסים. כמות תקלים זו למעשה אינה חריגה במיזמי תוכנה; למעשה זה קרוב לתקן.
הטבלה שלהלן מציגה מדדי שורות קוד ומספר הקבצים במיזם פיתוח גנוקאש . לתשומת לב, לא כל הקוד נספר: למשל, Makefiles ו־configure.in ו־autogen.sh לא נספרים. כמו כן, קבצים שנוצרו אוטומטית לא נספרים, וגם לא קבצים אשר "הושאלו" ממיזמים אחרים. מן הסתם, גם לא נספרים קבצים ניסיוניים, תסריטים שונים בפרל, ממירים שונים, תוספים וכלי עזר. לבסוף,גם קבצי glade לא נספרים, למרות שחלקים גדולים במנשק המשתמש הכללי מתוארים בקבצי glade .
לתשומת לב, KLOC אינו מדד טוב למדידת תפוקת תכניתנים, אפילו wc
אינה דרך טובה לספור KLOC. מדדים טובים בהרבה הם מדדי מורכבות, אשר למשל סופרים את המספר והגודל של מקטעי אם־אז־אחר, או את המספר והגודל של כל המקטעים, או את מספר המפעילים המתמטיים לכל משפט. אולי מתישהו נפעיל את אחד הכלים הללו על הקוד שלנו. לעת עתה זה מה שיש לנו. מצד שני, ניסינו לספור רק את הקבצים המכילים קוד בעריכה אנושית, כלומר קבצים שנערכים ישירות על ידי בני אדם. המטרה היתה למנוע ניפוח מלאכותי של ספירות KLOC על ידי ספירת קוד שנוצר אוטומטית (ולכן קבצי glade לא נספרים: הם גדולים ומחוללים אוטומטית).
טבלה 1. מצב פיתוח הסטורי
גרסה | engine | backend | register | ledger | motif | gnome | ישומים שונים | import-export | reports | scheme | business | test | docs | TXT פנימי | סך־הכול | שפות | מזכה יוצרים |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
xacc-0.9 Sept 97 | - | - | - | - | 34 files (7.5+0.9) | - | - | - | - | - | - | - | 5 files (0.4) | 1 file (0.1) | 40 files (8.8) | 1 | 1 |
xacc-0.9w Dec 97 | - | - | - | - | 51 files (13.8+1.5) | - | - | - | - | - | - | - | 9 files (0.8) | 1 file (0.1) | 61 files (16.2) | 1 | 2 |
xacc-1.0.17 Feb 98 | - | - | - | - | 52 files (14.8+1.8) | - | - | - | - | - | - | - | 12 files (1.4) | 4 files (0.3) | 68 files (18.3) | 1 | 7 |
gnucash-1.1.15 Aug 98 | 24 files (6.2+1.5) | - | 31 files (6.1+1.7) | 5 files (1.4+0.4) | 30 files (7.4+0.7) | 17 files (3.4+0.5) | - | - | - | 3 files (0.3) | - | - | 16 files (1.9) | 17 files (1.8) | 159 files (34.7) | 1 (0.17) | 25 |
gnucash-1.2.2 Aug 99 | 41 files (10.2+3.6) | - | 28 files (5.5+1.7) | 14 files (2.4+0.6) | 26 files (8.7+0.5) | - | - | - | - | 14 files (1.4) | - | - | 30 files (2.6) | 15 files (1.8) | 168 files (39.0) | 3 (0.54) | 41 |
gnucash-1.3.6 April 2000 | 41 files (12.9+4.0) | - | 32 files (6.8+2.1) | 19 files (4.0+0.8) | - | 78 files (32.2+3.0) | - | - | - | 74 files (4.0+0.7+12.3) | - | - | 33 files (7.8) | 25 files (4.5) | 302 files (95.1) | 5 (4.3) | 61 |
gnucash-1.4.6 Sept 2000 | 43 files (13.0+3.6) | - | 27 files (5.9+2.0) | 24 files (5.4+1.8) | - | 82 files (33.8+3.0) | - | - | - | 68 files (4.0+0.7+15.5) | - | - | 36 files (9.3) | 36 files (4.8) | 316 files (101.9) | 7 (6.0) | 82 |
gnucash-1.4.12 April 2001 | 43 files (13.1+3.6) | - | 27 files (5.9+2.0) | 24 files (5.4+1.8) | - | 82 files (33.5+3.0) | - | - | - | 73 files (4.0+0.7+17.7) | - | - | 43 files (11.5) | 39 files (6.0) | 331 files (108.2) | 12 (17.8) | 97 |
gnucash-1.5.2 Sept 2000 | 46 files (14.9+3.7) | - | 29 files (6.3+2.0) | 25 files (5.7+1.8) | - | 83 files (35.8+2.9) | - | - | - | 73 files (4.6+0.8+16.8) | - | - | 37 files (10.7) | 48 files (8.2) | 341 files (114.2) | 8 (7.8) | 89 |
gnucash-1.6.0 June 2001 | 139 files (42.8+8.3) | - | 28 files (5.7+2.0) | 23 files (10.1+1.5) | - | 132 files (60.0+4.2) | - | - | - | 102 files (6.2+0.8+27.3) | - | - | 64 files (12.1) | 69 files (12.9) | 455 files (193.9) | 11 (18.7) | 123 |
gnucash-1.7.2 November 2002 | 104 files (28.7+7.8+3.3) | 89 files (30.0+3.3) | 34 files (5.2+2.0) 29 files (10.5+1.2) |
17 files (9.4+0.7) | - | 143 files (56.0+4.7+0.9) | 75 files (17.0+2.5+5.1) | 78 files (11.1+1.5+7.3) | 38 files (2.4+0.1+14.2) | 17 files (3.4) | 94 files (19.9+1.9+4.5) | 72 files (7.9+0.1+0.7) | 83 files (22.2) | 62 files (11.6) | 935 files (297.1) | 21 (56.1) | 130 |
gnucash-1.8.4 June 2003 | 100 files (29.7+8.3+3.4) | 89 files (30.1+3.3) | 35 files (5.3+2.0) 31 files (10.7+1.2) |
17 files (10.2+0.8) | - | 151 files (58.7+5.1+1.1) | 71 files (16.9+2.6+5.2) | 86 files (13.3+1.8+7.5) | 52 files (2.4+0.2+15.1) | 17 files (4.1) | 98 files (21.5+2.0+5.1) | 76 files (8.6+0.2+0.7) | 24 files (13.8) 199 files (80.3) |
69 files (14.3) | 1115 files (385.5) | 23 (62.4) | 139 |
כל תא מציג את הבאים:
מספר קובצי * c ו־* .h ו־* .scm (KLOCS ב * .c + KLOCS ב * .h + KLOCS ב * .scm). אם אין קובצי * .scm בספריה, רק (KLOCS ב * .c + KLOCS ב * .h) מוצגים. אם יש רק מספר אחד בסוגריים, זה ספירת KLOC המתאימה לנתון זה.
כאשר KLOC == קילו־שורות קוד, כפי שהזוכר מעלה wc
. כאמור, wc הוא לא מדד קוד מאוד טוב, אבל זה מה שיש לנו זמין.
- engine
- תוכן src/engine ותיקיות ה־include. המנוע פוצל מקוד motif בגרסה 1.1. שרת אחסון הנתונים (file-io, sql) פוצל במהלך יצירת גרסה 1.5.
- backend
- תוכן ספריית src/backend (גרסה 1.7 ואילך) או src/engine/file, src/engine/sql (גרסה 1.6 ומעלה).
- register
- תוכן ספריית src/register (גרסה 1.6 ומעלה) או src/register/register-core (גרסה 1.7 ואילך). היומן פוצל כרכיב נפרד מקוד ה־motif בגירסה 1.1. כפי שניתן לראות מהנתונים הסטטיסטיים, קוד יומן־התנועות היה יציב למדי. בגרסה 1.7 ואילך, התא מציג ספירה משנית: מספר שורות הקוד ב־src/register/register-gnome (נחשב בעבר לחלק מ־gnome).
- ledger
- קובצי *.c, *.h בספריית src בלבד (גרסה 1.6 ומטה) או src/register/ledger-core (גרסה 1.7 ואילך).
- motif
- תוכן ספריית src/motif (גרסה 1.2 ומעלה). גרסת המוטיב של הקוד הופסקה לאחר גרסה 1.2, לאחר שרוב הקוד שאינו gui הועבר למנוע, ליומן או לכרטסת.
- gnome
- Contents of src/gnome plus src/register/gnome (version 1.6 and earlier). For version 1.7 and later, this consists of src/gnome, src/gnome-search and src/gnome-util
- ישומים שונים
- תוכן ספריות שונות הקשורות ליישומים (גרסה 1.7 ואילך): src/app-file, src/app-utils, src/calculation, src/core-utils, src/gnc-module, src/network-utils, src/tax/us.
- import-export
- קוד לייבוא וייצוא במבני קובץ שונים: תוכן מחיצת src/ייבוא־ייצוא.
- reports
- קוד ליצירת דוחות ותרשימים: תוכן מחיצת src/דוחות.
- scheme
- סכמה וקוד guile בספריות src/scm יחד עם src/guile (גרסה 1.6 ומעלה). בגרסה 1.7 ואילך, חלק גדול מהקוד הזה נכנס לדוחות, לייבוא/לייצוא ופירקנים פרטניים; וכך נותר רק קוד 'אחר'.
- business
- קוד להוספת תכונות עסקיות קטנות: תוכן ספריית src/business.
- test
- קוד לביצוע בדיקות רגרסיה אוטומטיות: תוכן ספריות src/*/test.
- docs
- תיעוד משתמשים בשפה האנגלית בלבד, כולל עזרה מקוונת ומדריך (html, sgml או xml). בגירסה 1.8.4 ואילך, המספר שמתחת לסרגל סופר את המסמכים המתורגמים, שאינם באנגלית (כרגע de, es, fr, pt_PT). שני המספרים הללו קצת קשים לספירה בגלל חיבורים במבנה גדול למדי, וריבוי גרסאות מתחרות.
- TXT פנימי
- מספר מסמכי העיצוב וקובצי README המיועדים למפתחים. בכלל זה קובצי * .txt, * קובצי .texinfo וקובצי README. * בכל ספריות המשנה. מגירסה 1.7 ואילך נספרים רק אלה שבספריית המשנה src (לא נכללים כחצי תריסר המפוזרים במקומות אחרים).
- שפות
- מספר השפות שאליהן מסרי היישום תורגמו (מספר קובצי po/*.po ). בסוגריים, מספר המסרים בקובצי המסר (grep msgstr po/*.po |wc), באלפים.
- מזכה יוצרים
- מספר האנשים שזוכו בקובץ AUTHORS (גרסה 1.6 ואילך) או בקובץ README (גרסאות קודמות). אלה כוללים מפתחים מובילים, מגישי תיקונים ומתרגמים לשפות רב-לאומיות. בכולל זה זיכויים נוספים המופיעים בקובץ gnucash-docs/AUTHORS שלא רשומים בקובץ gnucash/AUTHORS הראשי.