Dimensions
This is an ancient page about Gnucash's code size.
Sovint pot ser molt interessant estudiar les mètriques de codi font darrere d'un projecte de desenvolupament de programari. No desperta un interès sorprenent: és comptabilitat al capdavall. Gnucash ha crescut, amb els anys, des d'una petita llista de verificació electrònica de butxaca cap a una aplicació d'escriptori bastant gran i amb moltes característiques.
Gnucash actualment consta de més d'un terç de milió de línies de codi repartits en més de mil arxius. Ha estat traduït a vint idiomes i als crèdits hi ha més de 139 autors i col·laboradors.
Si heu tingut problemes nedant a través d'aquella massa de codi font, penseu en ell d'aquesta manera: imprimit en paper i enquadernat en volums, vindria a ser diverses dotzenes de còpies de "Guerra i Pau" de Tolstoi, aproximadament una prestatgeria d'amplada dedicada al codi font.
Això sí, això és codi font (i documents) elaborat i depurat pels éssers humans reals, això *no* és codi generat automàticament. Eines (com glade o swig) poden generar moltíssims milions de línies de codi automàticament; aquests no els estic comptant. Cada final de línia comptada aquí ha estat teclejada, editada, sagnada, retocada, diverses vegades, per mans humanes.
Donat que tenim uns 400 errors destacats a bugzilla, que funciona sobre un error per cada mil línies de codi, o un error per 50 pàgines de la còpia impresa. Aquest recompte d'errors en realitat no és atípic per als projectes de programari; està a prop de la norma.
La taula següent mostra alguns indicadors històrics de línies de codi i nombre d'arxius per al projecte de desenvolupament del Gnucash. Tingueu en compte que no s'ha comptat tot el codi: per exemple, les Makefiles, els configure.in i els autogen.sh no s'han comptat. Tampoc es compten els arxius que es generen automàticament, ni els arxius "prestats" d'altres projectes. Tampoc compten els arxius experimentals, varis scripts de perl, diversos convertidors, afegitons i utilitats. Finalment, glade no es compten, encara que gran part de la GUI global són descrites a Glade.
Tingueu en compte també que els KLOC no són una bona mètrica de productivitat del programador, ni tan sols que wc és una bona manera de comptar els KLOC's. Moltes mesures millors són les mètriques de complexitat, que, per exemple, compten el nombre i la mida dels blocs si-llavors-sinó, o el nombre i la mida de tots els blocs o la quantitat d'operadors matemàtics per instrucció. Potser algun dia executarem una d'aquestes eines en aquest codi. De moment, això és el que tenim. D'altra banda, hem intentat comptar únicament aquells fitxers que continguin codi editat per persones, és a dir, fitxers que són editats directament per persones. La intenció de fer-ho és evitar inflar artificialment els recomptes de KLOC comptant el codi generat automàticament (és per això que els fitxers glade no es compten: són grans i es generen automàticament).
Taula 1. Estadístiques dels desenvolupaments anteriors
| Versió | engine | backend | register | ledger | motif | gnome | aplicacions diverses | import-export | reports | scheme | business | test | docs | txt intern | Total | Idiomes | Crèdits d'autor |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Cada cel·la mostra el següent:
número de fitxers *.c, *.h i *.scm (KLOCS en *.c + KLOCS en *.h + KLOCS en *.scm). Si no hi ha fitxers *.scm al directori, llavors només es mostren (KLOCS en *.c + KLOCS en *. h). Si hi ha només un nombre en el parèntesi, és el recompte KLOC d'arxiu per a aquesta estadística.
on KLOC == quilo-línies-de-codi, com informat per wc. Com s'ha dit anteriorment, el wc no és una terriblement bona mètrica de codi, però és el que tenim a la mà.
- engine
- Continguts de src/engine i els directoris continguts. El motor es va treure del codi motif a la versió 1.1. El rerefons d'emmagatzematge de dades (file-io, sql) es va treure fora en el decurs de la versió 1.5
- backend
- Contingut del directori src/backend (versió 1.7 i posterior) o de src/engine/file, src/engine/sql (versió 1.6 i anteriors)
- register
- Continguts del directori src/register (versió 1.6 i anteriors) o src/register/register-core (versió 1.7 i posterior). El registre es va extreure fora com un component separat del codi del motif a la versió 1.1. Com es pot veure a les estadístiques, el codi de register ha estat bastant estable. A la versió 1.7 i més tard, la cel·la mostra un segon recompte: el nombre de línies de codi a src/register/register-gnome (prèviament comptat com a part del gnome)
- ledger
- fitxers *.c, *.h al directori src únicament (versió 1.6 i anterior) o src/register/ledger-core (versió 1.7 i posterior)
- motif
- Continguts del directori src/motif (versió 1.2 i anteriors). La versió motif del codi es va suspendre després de la versió 1.2, després de que la majoria del codi no-gui es va traslladar al motor, al registre o al llibre major.
- gnome
- Continguts de src/gnome més src/register/gnome (versió 1.6 i anteriors). Per a la versió 1.7 i posteriors, consisteix en src/gnome, src/gnome-search i src/gnome-util
- aplicacions diverses
- Continguts de diversos directoris relacionats amb aplicacions (versió 1.7 i posteriors): src/app-file, src/app-utils, src/calculation, src/core-utils, src/gnc-module, src/network-utils, src/tax/us
- import-export
- Codi d'importació i exportació a diversos formats d'arxiu: contingut del directori src/import-export.
- reports
- Codi per generar informes i gràfics: contingut del directori src/reports.
- scheme
- esquema i codi de guile als directoris src/scm més src/guile (versió 1.6 i anteriors). A la versió 1.7 i posteriors, gran part d'aquest codi va anar a reports, import/export, i a mòduls individuals; per tant només queda codi heterogeni.
- business
- Codi per afegir característiques de petita empresa: contingut de src/business.
- test
- Codi per dur a terme proves de regressió automatitzades: contingut dels directoris src/*/test.
- docs
- Documentació per a usuari només-en-anglès, incloent-hi l'ajuda en línia i el manual (html, sgml o xml). Per a versió 1.8.4 i posteriors, el número de sota la barra compta els documents traduïts, documents en llengües diferents a l'anglès (actualment de, es, fr, pt_PT). Ambdós números són una mica difícils de comptar, per la elevada barreja de formats i diverses versions que competeixen.
- txt intern
- El nombre de documents de disseny i fitxers README adreçat a desenvolupadors. Això inclou arxius *.txt, arxius *.texinfo i arxius README.* en tots els subdirectoris. Per a la versió 1.7 i posteriors, només es compten aquells al subdirectori src (deixant fora alguna dotzena dispersa a d'altres llocs)
- Idiomes
- El nombre de llengües al que s'han traduït els missatges d'aplicació (el nombre de fitxers po/*.po). Al parèntesi, el nombre de missatges en els arxius de missatges (grep msgstr po/*.po |wc), en milers.
- Crèdits d'autor
- El nombre de persones que apareixen al fitxer AUTHORS (versió 1.6 i posteriors) o el fitxer README (versions anteriors). Aquests inclouen desenvolupadors principals, emissors de pedassos i traductors. Això inclou crèdits addicionals que figuren a l'arxiu gnucash-docs/AUTHORS que no surten a l'arxiu principal gnucash/AUTHORS.


