Veličina programa
Ovo je stara stranica o količini kodova za program Gnucash.
Često je zanimljivo proučiti izvorni kod projekta u brojkama. To ne iznenađujuće: na kraju krajeva, radi se o računovodstvu. GnuCash se je tijekom godina razvio od male praktične elektronske čekovne knjižice u prilično veliki program s mnogim funkcijama.
GnuCash se trenutačno sastoji od više od 300.000 redaka koda, raspoređenih u više od 1000 datoteka. Preveden je na 23 jezika i ima preko 139 autora i suradnika.
Ako se izgubiš u ovoj masi izvornog koda, razmisli o tome na ovaj način: ispisano na papiru i vezano u sveske, izvorni kod bi iznosio nekoliko desetaka primjeraka Tolstojevog „Rata i mira”, otprilike širine knjižne police.
Imaj na umu, ovaj izvorni kod (i dokumenti) izrađeni su i ispravljeni od stvarnih ljudi, *nije* automatski generiran. Alati (kao što su glade ili swig) mogu generirati gazilione redaka koda automatski; njih ne uračunavam. Svaki ovdje izbrojani redak bio je utipkan, uređen, prerađen i višestruko prilagođen ljudskim rukama.
S obzirom na to da imamo oko 400 izvanrednih grešaka u bugzilli, radi se o otprilike jednoj grešci na 1000 redaka koda ili jednoj grešci na 50 ispisanih stranica. Ovaj broj grešaka zapravo nije netipičan za softverske projekte, već je u blizini norme.
Tablica u nastavku prikazuje neke povijesne podatke o brojčanom nizu koda i broju datoteka razvojnog projekta GnuCash. Imaj na umu da se ne računa cijeli kôd: npr., Makefiles i configure.in i autogen.sh se ne broje. Također, datoteke koje se automatski generiraju se ne broje, kao niti datoteke koje su „posuđene” iz drugih projekata. Također se ne broje eksperimentalne datoteke, razni perl skripti, različiti pretvarači, dodaci i pomoćni programi. Čak se i glade datoteke ne broje, iako su veliki dijelovi cjelokupnog grafičkog sučelja opisani u glade datotekama.
Imaj također na umu da KLOC‑ovi nisu dobri za produktivnost programera, kao što niie ni wc
dobar način brojanja KLOC‑a. Mnogo bolje mjere su metrike složenosti, koje na primjer, broje broj i veličinu blokova if‑then‑else, broj i veličinu svih blokova ili broj matematičkih operatora po izjavi. Možda ćemo jednog dana pokrenuti jedan od tih alata na ovom kodu. Za sada, to je ono što imamo. S druge strane, pokušali smo prebrojiti samo one datoteke koje sadrže ljudski uređen kôd, tj. datoteke koje ljudi izravno uređuju. Svrha toga je da se izbjegne umjetno napuhavanje KLOC brojeva prebrojavanjem automatski generiranog kôda (zbog čega se glade datoteke ne broje: one su velike i automatski se generiraju).
Tablica 1. Povijesne statistike razvoja
Verzija | engine | backend | register | ledger | motif | gnome | razni programi | import-export | reports | scheme | business | test | docs | interni tekst | Ukupno | Jezici | Autori |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
Svaka ćelija prikazuje sljedeće:
broj *c, *.h i *.scm datoteka (KLOCS u *.c + KLOCS u *.h + KLOCS u *.scm). Ako u mapi nema datoteka *.scm, prikazuje se samo (KLOCS u *.c + KLOCS u *.h). Ako postoji samo jedan broj u zagradi, to je odgovarajući KLOC zbroj za tu statistiku.
gdje je KLOC == kilo-lines-of-code (kilo‑redaka‑koda), izviješteno pomoću wc
. Kao što je gore već spomenuto, wc nije jako dobra kodna metrika, ali je to što imamo pri ruci.
- engine
- Sadržaj src/engine i uključenih direktorija. U verziji 1.1 je mehanizam razdvojen iz motif koda. Pozadinski sustav za spremanje podataka (file‑io, sql) razdvojen je tijekom verzije 1.5.
- backend
- Sadržaj direktorija src/backend (verzija 1.7 i novija) ili src/engine/file, src/engine/sql (verzija 1.6 i starija).
- register
- Sadržaj direktorija src/register (verzija 1.6 i starija) ili src/register/register‑core (verzija 1.7 i novija). Registar je razdijeljen kao zasebna komponenta iz motif koda u verziji 1.1. Kao što se može vidjeti iz statistike, registarski kod je prilično stabilan. U verziji 1.7 i novijoj, ova ćelija pokazuje jedan drugi zbroj: broj redaka koda u src/register/register‑gnome (prethodno računato kao dio gnomea).
- ledger
- *.c, *.h datoteke samo u src direktoriju (verzija 1.6 i starija) ili src/register/ledger‑core (verzija 1.7 i novija).
- motif
- Sadržaj direktorija src/motif (verzija 1.2 i ranija). Motif verzija koda je prekinuta nakon verzije 1.2, nakon što je većina ne‑gui koda premještena u engine (mehanizam), u register (registar) ili u ledger (knjigu).
- gnome
- Sadržaj src/gnome plus src/register/gnome (verzija 1.6 i ranija). Za verziju 1.7 i novije, ovo se sastoji od src/gnome, src/gnome‑search i src/gnome‑util
- razni programi
- Sadržaj raznih programskih direktorija (verzija 1.7 i novija): src/app‑file, src/app‑utils, src/calculation, src/core‑utils, src/gnc‑modul, src/network‑utils, src/tax/us.
- import-export
- Kôd za uvoz i izvoz različitih formata datoteka: sadržaj direktorija src/import‑export.
- reports
- Kôd za generiranje izvještaja i dijagrama: sadržaj direktorija src/reports.
- scheme
- shema i guile kôd u direktorijima src/scm plus src/guile (verzija 1.6 i ranije). U verziji 1.7 i novijima, veći dio tog koda ušao je u izvještaje, u uvoz/izvoz te u pojedinačne module; tako da ostaju samo razni kodovi.
- business
- Kôd za dodavanje funkcija za male tvrtke: sadržaj direktorija src/business.
- test
- Kôd za automatske testove regresije: sadržaj direktorija src/*/test.
- docs
- Korisnička dokumentacija samo na engleskom jeziku, uključujući online pomoć i priručnik (html, sgml ili xml). Za verziju 1.8.4 i novije, broj ispod stupca broji prevedene, ne‑engleske dokumente (trenutačno de, es, fr, pt_PT). Njihove zbrojeve je nešto teže dobiti, jer se u računicu miješaju prilično veliki formati i konkurirajuće verzije.
- interni tekst
- Broj dizajnerskih dokumenata i README datoteka namijenjenih programerima. To uključuje *.txt datoteke, *.texinfo datoteke i README.* datoteke u svim poddirektorijima. Za verziju 1.7 i novije, broje se samo one iz src poddirektorija (ostavljajući pola tuceta raspršenih negdje drugdje).
- Jezici
- Broj jezika, na koje su prevedene poruke programa (broj po/*.po datoteka). U zagradama, broj poruka u datotekama poruka (grep msgstr po/*.po |wc), u tisućama.
- Autori
- Broj osoba navedenih u datoteci AUTHORS (autori) (verzija 1.6 i novija) ili datoteci README (starije verzije). To uključuje vodeće programere, podnositelje ispravaka i prevoditelje. Uključuje dodatne zasluge, navedene u datoteci gnucash‑docs/AUTHORS, koje nisu navedene u glavnoj datoteci gnucash/AUTHORS.