Dimensionnement
Il est souvent intéressant de mesurer l'évolution du code source d'un projet de développement logiciel... après tout, c'est de la comptabilité. GnuCash s'est largement développé au cours des annèes, partant d'un pratique chéquier électronique pour devenir une grosse application bureautique avec de nombreuses fonctionnalités.
GnuCash dépasse 300,000 lignes de code et un millier de fichiers. Il est traduit dans 23 langues et mentionne 139 auteurs et contributeurs.
Si vous nagez un peu dans les sources, prennez le comme ça : imprimé sur papier et relier, ils représentent plusieurs douzaines d'exemplaires de Guerre et Paix de Tolstoy... une rangée d'étagère pleine.
Mind you, this is source code (and docs) crafted and debugged by actual humans, this is *not* autogenerated code. Tools (such as glade or swig) can generate gazillions of lines of code automatically; I'm not counting those. Every last line counted here was typed in, edited, indented, tweaked, multiple times, by human hands.
Compte tenu qu'il y a environ 400 anomalies en attente listés, cela fait un bogue toutes les 1000 lignes de code, un chiffre tout à fait dans la norme.
The table below shows some historical lines-of-code and number-of-files metrics for the GnuCash development project. Note that not all of the code is counted: for instance, the Makefiles and configure.in and autogen.sh are not counted. Also, files that are automatically generated are not counted, nor are files that have been 'borrowed' from other projects. Also not counted are experimental files, miscellaneous perl scripts, various converters, addons and utilities. Finally, glade files are not counted, although large parts of the overall GUI are described in glade files.
Attention, le KLOC (kilo de ligne de code:-) n'est pas une bonne mesure de la productivité des développeurs, mais il est facile à mesurer avec wc
. Il existe de meilleurs mesures qui seront peut-être, un jour, mises en oeuvre. En cas de désoeuvrement d'un développeur. Sait-on jamais. De plus, ne sont comptées que les lignes éditées manuellement, pas les codes générés automatiquement par certains outils.
Table 1. Statistiques sur les développements antérieurs
Version | engine | backend | register | ledger | motif | gnome | divers | import-export | reports | scheme | business | test | docs | txt interne | Total | Langues | Auteurs |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
Chaque cellule affiche l'information suivante:
number of *c and *.h and *.scm files (KLOCS in *.c + KLOCS in *.h + KLOCS in *.scm). If there are no *.scm files in the directory, then only (KLOCS in *.c + KLOCS in *.h) are displayed. If there is only one number in the parenthesis, it is the approriate KLOC count for that statistic.
where KLOC == kilo-lines-of-code, as reported by wc
. As noted above, wc is not a terribly good code metric, but its what we have handy.
- engine
- Contents of the src/engine and the include directories. The engine was split out from the motif code in version 1.1. The data storage backend (file-io, sql) was split out in the course of version 1.5
- backend
- Contents of the src/backend directory (version 1.7 and later) or of src/engine/file, src/engine/sql (version 1.6 and earlier)
- register
- Contents of the src/register directory (version 1.6 and earlier) or src/register/register-core (version 1.7 and later). The register was split out as a separate component from the motif code in version 1.1. As can be seen from the stats, the register code has been fairly stable. At version 1.7 and later, this cell shows a second count: the number of lines of code in src/register/register-gnome (previously counted as part of gnome)
- ledger
- les fichiers *.c, *.h sont seulement dans le répertoire src (version 1.6 et supérieure) ou src/register/ledger-core (version 1.7 et supérieure)
- motif
- Contents of the src/motif directory (version 1.2 and earlier). The motif version of the code was discontinued after version 1.2, after most of the non-gui code was moved to either the engine, the register or the ledger.
- 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
- divers
- Les répertoires avec les données de diverses applications-liées (version 1.7 et supérieure) : src/app-file, src/app-utils, src/calculation, src/core-utils, src/gnc-module, src/network-utils, src/tax/us
- import-export
- Code pour importer et exporter différents formats de fichier : données du répertoire src/import-export.
- reports
- Code pour générer des rapports et graphiques : données du répertoire src/reports.
- scheme
- scheme and guile code in directories src/scm plus src/guile (version 1.6 and earlier). In version 1.7 and later, much of this code went into reports, import/export, and into indiovidual modules; thus only miscellaneous code remains.
- business
- Code pour ajouter des fonctionnalités à la petite entreprise : données du répertoire src/business.
- test
- Code pour améliorer les tests automatisés de régression : données du répertoire src/*/test.
- docs
- English-language-only user documentation, including on-line help and manual (html, sgml or xml). For version 1.8.4 and later, the number below the bar counts the translated, non-english docs (currently de, es, fr, pt_PT). Both of these numbers are somewhat hard to count, because of fairly large format churns, and multiple competing versions.
- txt interne
- The number of design documents and README files aimed at developers. This includes *.txt files, *.texinfo files and README.* files in all subdirectories. For version 1.7 and later, only those in the src subdirectory are counted (leaving out some half-dozen scattered elsewhere)
- Langues
- The number of languages that the application messages have been translated to (the number of po/*.po files). In parenthesis, the number of messages in the message files (grep msgstr po/*.po |wc), in thousands.
- Auteurs
- The number of people credited in the AUTHORS file (version 1.6 and later) or the README file (earlier versions). These include lead developers, patch submitters and national-language translators. This includes additional credits listed in the gnucash-docs/AUTHORS file that are not listed in the main gnucash/AUTHORS file.