下载

New Book: GnuCash 2.4 Small Business Accounting

GnuCash 2.4 small business accounting

The GnuCash development team received notice about a new book published by PacktPub, UK:

GnuCash 2.4 Small Business Accounting, by Ashok Ramachandran.

This is a Beginner's Guide for managing your accounts.

Our own developer Christian Stimming has been contributing to this book as a reviewer, and we can wholeheartly recommend the outcome of this fruitful collaboration. Feel free to have a look at this book over at packtpub.com, and, best of all, the publisher has committed to allocate some percentage of the book sales back to the GnuCash project. Have fun with this book!

大小

It can often be quite interesting to study the source code metrics behind a software development project. Not a surprising interest: its accounting afterall. GnuCash has grown, over the years, from a small handy electronic checkbook to a rather large and multi-featured desktop app.

GnuCash currently consists of over a third of a million lines of code spread over more than a thousand files. It has been translated into twenty-three languages and credits over 139 authors and contributors.

[code size graph]

如果您还是对如此巨大的源代码没有概念的话,可以换个角度想想,想想将其打印在纸上并且装订好,这将相当于数十本托尔斯泰的《战争与和平》,相当于整整一书架宽的源代码。

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.

基于我们的 Bugzilla 系统中有400个突出的 Bug,可以算出每一千行才会有一个 Bug,或者可以理解为每打印出50页代码才有一个 Bug。在软件项目中,这样的数量实际上并不特殊,可以说接近正常。

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.

还需要注意的是,KLOC(代码千行数)对于程序员生产力来说不是一个很好的描述,甚至wc也不是一个好的方式来计算代码行数。更好的方法是复杂一些的数据。比如,计算 if-then-else 的代码段大小和数量;所有代码段的大小和数量;每一个表达式操作符的数量等。也许那天我们将使用这样的工具来进行分析。但是现在,这些是我们所能做的。另一方面,我们已经尽力去统计那些只有由人编辑的代码。这么做是为了避免人为的夸大代码的数量(这就是为什么glade不被统计的原因,因为它们是自动产生的而且很大)。

表一:历史开发状态图

版本 engine backend register ledger motif gnome 其它应用 import-export reports scheme business test docs 内部文本文件 合计 语言 贡献的作者
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"文件的数量 (*.c 的代码量 + *.h 的代码量 + *.scm 的代码量),以千行为单位计算代码量。如果目录中没有*.scm文件,就不显示最后一部分“+ *.scm 的代码量”。如果括号中只有一个数字,那么这是一个适于该相的统计数字。

KLOC 是指 千行代码数,由wc报告。如上述说明的一样,wc虽然不是一个好的度量标准,但是这是我们手里现有的。

表栏说明



engine
src/engine 及 include 目录的内容。版本 1.1 中,引擎从 motif 中分离了。数据存储后台 (文件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 或以后) 的内容。账簿在版本 1.1 时从 motif 中分离出来。就像从统计中所看到的一样,账簿代码已经趋于稳定。在版本 1.7 和以后,这个单元格显示了第二个数字:即 src/register/register-gnome (之前作为 gnome 的一部分计算) 中的代码行数。

ledger
只在 src 目录(版本1.6或更早)或 src/register/ledger-core (版本1.7或以后) 下的 *.c 和 *.h 文件。

motif
src/motif 目录 (版本 1.2 或更早)下的内容。在版本 1.2 以后 motif 的代码就不再继续了,之后大多数非图形界面的代码,或者被移到了 engine,或者被移到了账簿或总账下。

gnome
src/gnome 和 src/register/gnome (版本1.6或更早),或者 src/gnome、src/gnome-search 和 src/gnome-util 目录(版本1.7及以后)下的内容。

其它应用
与应用程序相关的一些杂项的目录 (1.7及以后):src/app-file、src/app-utils、src/calculation、src/core-utils、src/gnu-module、src/network-utils 和 src/tax/us。

import-export
导入/导出各种文件格式的代码:src/import-export 目录下的内容。

reports
生成报告和图表的代码:src/reports 目录下的内容。

scheme
scheme 和 guile 的代码。在版本1.6或更早,是在 src/scm 和 src/guile 下;在1.7或以后,大部分代码进入到了 reports、导入/导出以及进入到独立的模块中了,因此这里只有一部分代码。

business
添加的小型企业功能的代码:src/business 目录的内容。

test
执行自动回归测试的代码:src/*/test 目录下的内容。

docs
英语文档,包括在线帮助和手册 (html, sgml 或 xml)。对于 1.8.4 及以后,计算了翻译的、非英语的文档 (包括 de, es, fr, pt_PT)。这些数字很难计算,因为大量的格式信息以及多种不同的版本。

内部文本文件
设计文档及面向开发人员的文档的数量。包括所有子目录的 *.txt、*.texinfo 以及 README。对于版本1.7及以后,只统计 src 子目录下的内容。

语言
程序被翻译成了多少种语言 (po/*.po文件的数量)。括号内是本地化消息文件中的字符串的个数(grep msgstr po/*.po |wc),以千为单位。

贡献的作者
在 AUTHORS 文件中显示的做出了贡献的人的个数 (版本 1.6及以后),对于早期版本,是来自于README中的人数。这包含了未能列在 gnucash/AUTHORS 中但列在了 gnucash-docs/AUTHORS 中的其他的贡献者。

Valid XHTML + RDFa

Copyright © 2001-2014 The GnuCash Project

Server & email outage reports to: gnucash-devel@gnucash.org

Translation problems? Contact: gnucash-devel@gnucash.org