网志

代码指标-SLOC计数

斯蒂芬·弗里德里希斯2013年8月19日

许多程序员将在本文的标题处开始出现闪回,因为其中包含单词“ metrics”和“ SLOC”。 较新的程序员可能想知道所有这些大惊小怪的事-大多数可能对“代码度量”一词没有负面含义,有些甚至可能不知道SLOC是什么。  尽管指标和SLOC有很多负担,但是您不应该害怕从编程项目中收集基本有用的数据,例如SLOC计数,并且那里有(免费)工具可以帮助您做到这一点。

首先,给每个困惑的人一些背景。 SLOC代表源代码行。 从本质上讲,这是一个特定项目包含多少行有用的代码(即不是注释,不是空白)。它通常被用作项目复杂性的指标-SLOC越多,事情就越复杂。但是,我们到底在计算什么呢?

首先,我正在考虑使用C编程语言进行讨论。 尽管总会有C所没有的极端情况,但其他语言仍然可以使用一般思想。 我们拥有的代码行的第一个指标是文件大小。 源文件越大,它必须包含的越多。 没错,但这没有帮助。 在C中,一行通常是一个语句,一个动作。 我们的目标是大致统计特定代码位执行的操作数。文件大小仅告诉我们文件包含多少个字符,而不告诉我们多少行。 因此,让我们变得更加复杂-我们将通过计算文件中包含的换行符的数量来计算行数-绝对可以为我们提供行数,不是吗?不完全是。 请考虑以下两位源代码:

if(a==1) b=2;
if(a==1)
    b=2;

如果您假设这是C,那么训练有素的眼睛将能够确定这两位代码执行了等效的操作。 但是,第二个片段具有更多的换行符。 这增加了其物理代码行(PLOC)度量。 但是,由于它们都执行相同的操作,因此它们具有相同数量的逻辑代码行。逻辑代码行考虑了特殊语言实际上是如何工作的,从而确定了语句的数量,从而确定了复杂性。 C几乎不像Python那样关心空格。 结果,您无法像使用Python一样使用相同的策略来计算C的LLOC。 在计算代码行以确定复杂度时,LLOC比PLOC更好。  

刚才我说过,一个项目的SLOC越多,它通常就越复杂。这个简单的想法在一些商人的头脑中催生了各种令人反感的策略(这正是闪回的作用所在)。例如,如果您是一名程序员,并且编写了一百万本SLOC,那么显然比写一万本SLOC的人做的工作更多,对吗? 这似乎是有道理的。 如果团队中有两个程序员,一个月写1000个SLOC,另一个写500个谁获胜呢? 管理部门一直在寻找表现不佳的人。诸如SLOC计数之类的便捷工具通常可以为管理类型辩解拒绝奖金,加薪甚至解雇人员。 但是,就其便利性而言,SLOC计数并不能确定所有用途。 优秀的程序员比经验不足的(甚至敢说更糟糕)的程序员用更少的代码行就能解决问题。另外,编写代码时通常非常不希望复杂性。更多的代码意味着更多的错误机会,较差的,较大的(高SLOC)算法通常很慢且很困难。 如果唯一用于评估程序员的指标是SLOC,则管理趋向于推广由乏味且效率低下的程序员编写的缓慢,冗长的代码。如果坚持下去,足够长的时间来编写高效而简洁的代码的程序员就会受到严厉的惩罚,并最终在他们没有像同志那样做出“等级”时被解雇。排队生气的闪回。

尽管如此,SLOC并不是根本上有害的工具-尤其是当被意识到它的缺点的人使用时。 考虑到即使您是程序员,也不一定总是从头开始编写软件。有时您必须使用现有的代码库。 如果您是承包商或在负责合同谈判的公司工作,则需要SLOC之类的工具来确定使用代码库的相对难度,以便您可以向客户索要适当的金额。有了SLOC计数这样的指标,您就可以为向客户收取的完全合法(且非常有利可图)的价格辩护。

那么如何计算SLOC? 有很多程序可以为您做到这一点。有些是免费的,有些是付费的,有些是闭源的,有些是开源的。作为一个贫穷而缺乏耐心的程序员,我总是倾向于使用免费的(例如啤酒中的),开源的并且可以在SourceForge上轻松使用的实用程序。 在这种情况下,我首选的工具是CLOC(奇怪的是,它代表“计数行数”)。 You can find it 这里。除了上述原因之外,我还喜欢它,因为它是命令行,易于使用,可以生成各种不同的报告,并且可以使用多种语言。 有Windows和Linux可执行文件,当然还有源文件。

它非常易于使用。一旦可执行文件在您的计算机上,您只需要指定输入文件和选项,它将为您指定的文件生成原始PLOC计数:

cloc-1.5.8 ./*.c ./*.h

20个文本文件。

分类20个文件20个唯一文件。

1个文件被忽略。

http://cloc.sourceforge.net v 1.58 T = 1.0 s(19.0个文件/秒,7645.0行/秒)

-------------------------------------------------- -----------------------------

语言文件空白注释代码

-------------------------------------------------- -----------------------------

C 7 904 2252 1953

C / C ++标头9207605213

-------------------------------------------------- -----------------------------

总和:13 1111 2857 2166

-------------------------------------------------- -----------------------------

当然,还有更高级的输出选项。 虽然按文件类型细分了输出,但是您也可以按单个文件细分输出:

cloc-1.5.8 ./*.c ./*.h-按文件

20个文本文件。

分类20个文件20个唯一文件。

1个文件被忽略。

http://cloc.sourceforge.net v 1.58 T = 0.5 s(38.0文件/秒,15290.0行/秒)

-------------------------------------------------- --------------------------------------------

文件空白注释代码

-------------------------------------------------- --------------------------------------------

temp_const.c 18 40 1029

main.c 546 1414 630

crc.c 123262120

bit.c 10830584

main.h 2815073

common.h 50171 71

普通c 33 58 50

rs232.c 52 116 35

bit.h 22 50 16

编译.h 22 34 14

标定h 15 56 11

crc.h 23 55 11

rs232.h 15 31 9

ver.c 24 57 5

版本21 40 4

temp_const.h 11 18 4

-------------------------------------------------- --------------------------------------------

和:1111 2857 2166

-------------------------------------------------- --------------------------------------------

显然,这些命令在命令行或真实文本编辑器中看起来会更好。

如果需要,可以使用高级功能。您可以重新分配自动文件扩展名识别功能(以防万一您不使用标准扩展名,如C语言的C扩展名),您可以指定要忽略的文件,使用各种不同的输出格式,比较不同来源的差异以及更多选项。我鼓励您下载并试用。 SLOC是您可以用来帮助成为一名更好的程序员的基本指标,而CLOC可以帮助您做到这一点。

 


要发布对评论的回复,请单击每个评论所附的“回复”按钮。要发布新评论(而不是回复评论),请查看评论顶部的“写评论”标签。

注册后,您可以参加所有相关网站上的论坛,并获得所有pdf下载的访问权限。

注册

我同意 使用条款隐私政策.

试试我们偶尔但很受欢迎的时事通讯。非常容易退订。
或登录