同时LOC(#行代码)是一个有问题的测量的一个代码的复杂性,它是最受欢迎的一个,并使用时非常谨慎,可以提供一个粗略的估计至少相对复杂的码基地(即如果一个程序是10KLOC,另一个是100KLOC、写相同的语言,通过团队的大致相同的能力,第二个程序是几乎可以肯定复杂得多).

当计算代码行,做你喜欢数数意见?什么测试?

我已经看到各种办法。工具,如cloc和sloccount允许包括或排除的意见。其他人考虑的意见的一部分代码并且其复杂性。

同样的困境中存在的单元测试,有时可以达到的大小测试的代码本身,甚至超过它。

我已经看到的做法所通过的频谱,从计数只有"业务"非评论非空行,"XXX行测试,评价码",这是更喜欢运行的"厕所-我对所有代码文件中的项目"。

是什么你个人的喜好,为什么?

有帮助吗?

解决方案

在管理程序员方面,一位聪明人告诉我“你得到的是你所得到的”。

如果你在他们的LOC输出中对它们进行惊人的评分,你会得到很多代码。

如果你根据他们关闭的错误数量对它们进行评分,那么你会发现很多错误。

如果您对添加的功能进行评分,则会获得很多功能。

如果你根据圈复杂度对它们进行评分,你会得到非常简单的函数。

由于现在代码基础的一个主要问题是它们的增长速度以及它们一旦发展变化有多么难以改变,我倾向于回避使用LOC作为指标,因为它驱动了错误的基本行为。

也就是说,如果你必须使用它,那么无需评论和测试,并且需要一致的编码风格。

但是,如果你真的想要一个'代码大小'的度量,只需tar.gz代码库。它倾向于作为对“内容”的更好的粗略估计,而不是计算易受不同编程风格影响的行。

其他提示

也必须保持测试和评论。如果你打算使用LOC作为一个指标(我只是假设我不能告诉你),你应该给出所有三个(实际代码,注释,测试行)。

最重要的(也是显而易见的)事情是你保持一致。不要仅使用实际代码行报告一个项目,而将所有三个项目组合起来报告另一个项目。查找或创建一个工具,为您自动执行此过程并生成报告。

Lines of Code:       75,000
Lines of Comments:   10,000
Lines of Tests:      15,000
                  ---------
Total:              100,000

这样你就可以确定

  1. 完成。
  2. 每次都以同样的方式完成。

我个人认为LOC标准本身并不像其他一些代码指标那样有用。

NDepend 将为您提供LOC指标,但也会为您提供许多其他指标,例如周期性复杂性。而不是列出所有内容,这里是链接到列表。

CodeMetric加载项 www.red-gate.com/products/reflector/“rel =”nofollow noreferrer“>反射器

我不会直接回答你的问题,原因很简单:我讨厌代码行度量标准。无论你想要测量什么,都很难比LOC更糟糕;几乎任何你想到的其他指标都会更好。

特别是,您似乎希望衡量代码的复杂性。总的来说,周期性复杂度(也称为McCabe的复杂性)是更好的指标。

具有高周期复杂度的例程是您希望关注的例程。这些例程难以测试,因为存在缺陷而难以维护。

有许多工具可以衡量这种复杂性。快速谷歌搜索您最喜欢的语言将找到许多这种复杂性的工具。

代码行意味着:不计算任何评论或空行。并且为了使其与其他源代码相当(无论其中的度量标准是否有用),您至少需要类似的编码样式:

for (int i = 0; i < list.count; i++)
{
    // do some stuff
}

for (int i = 0; i < list.count; i++){
    // do some stuff
}

第二个版本完全相同,但有一个LOC少。当你有很多嵌套循环时,这可以总结一下。这就是发明功能点等指标的原因。

取决于您使用LOC的目的。

作为一项复杂措施 - 并非如此。也许100KLOC主要是从一个简单的表生成的代码,以及10KLOC kas 5KLOC regexps。

但是,我看到每行代码与运行成本相关联。只要程序存在,您就需要支付每一行:它需要在维护时读取,它可能包含需要修复的错误,它会增加编译时间,从源代码控制和备份时间,在您更改之前或者删除它你可能需要找出是否有人依赖它等。平均成本可能是每行和每天nanopennies,但它的东西加起来。

KLOC可以成为项目所需基础设施的第一个指标。在这种情况下,我会包含注释和测试 - 即使注释行的运行成本远低于第二个项目中的正则表达式之一。

[edit] [对代码大小有类似看法的人] 1个

我们只使用一行代码度量标准 - 函数 包含足够的代码行,无需滚动屏幕即可读取。大于此的函数通常难以阅读,即使它们的周期复杂度非常低。对于他的使用,我们会计算空白和评论。

在重构期间看到你已经删除了多少行代码也很高兴 - 在这里你只想计算实际的代码行数,这些空白空间无法提供可读性和评论没用的(无法自动化)。

最后是免责声明 - 智能地使用指标。充分利用度量标准有助于回答“代码的哪一部分将从重构中受益最多”或“最新签入的代码审查有多紧急?”这一问题。 - 一个1000线函数,圈复杂度为50,是一个闪烁的霓虹灯,上面写着“现在重构我”。指标的错误用法是“程序员X的效率如何”或“我的软件有多复杂”

摘录的文章: 你怎么指望你的线数码(LOC)? 相对于工具NDepend计数的逻辑 数字线路代码 为。净节目。


你怎么指望你的线数码(LOC)?

你计数的方法宣言》的签名?你最线只有架?你计数的几个线在一个单一的方法叫写几行,因为大量的参数?你最'的名字空间"和"使用名字空间的宣言?你最口和抽象的方法的宣言?你计领域分配时,他们宣布?你算的空白线?

根据编码风格的各个开发商和根据语言选择(C#VB.NET...)可以有明显的差异,通过测量LOC.

显然,测量的LOC从分析来源的文件看起来像一个复杂的问题。由于一个精明的存在着一个简单的方法来衡量什么是所谓的逻辑LOC.逻辑LOC有2显着优势的物理LOC(LOC是推断出从分析来源文件):

  • 编码风格的不干涉的逻辑LOC.例如LOC不会改变,因为方法的呼吁是产生于若干线,因为一个高数量的参数。
  • 逻辑的LOC是独立的语言。值得自组编写的与不同的语言是相当的和可以相加。

中。净的世界,逻辑LOC可以计算从PDB文件,文件使用的调试器链接的IL码的源码。该工具NDepend计算的逻辑LOC一种方法,这种方式:它等于该数目的顺序点找到一种方法在PDB文件。一序列的一点是用于标记一点,在IL代码对应一个特定的位置在原来源。更多信息序列的要点在这里。注意到序列分对应C#括号'{'and'}'不采取帐户。

显然,LOC一类型的总和,其方法'LOC,LOC一名称空间是其类型'LOC,LOC为一个组件是该和其名称空间'LOC和LOC应用程序的总和组件LOC.这里有一些意见:

  • 接口,抽象的方法和枚举的有LOC等于0。只有具体的代码,是有效地执行被认为是当计算LOC.
  • 命名空间、类型、领域和方法的声明不视为代码行,因为他们没有相应的序列分。
  • 当C#或VB.NET 编译器面临的一个内联的实例场初始化,它产生的顺序点对每个实例的构造(相同的话适用于联静态领域的初始化和静态constructor).
  • LOC计算从一个匿名的方法不会干扰的LOC其外声明的方法。
  • 整体比率之间的NbILInstructions和LOC(C#VB.NET)通常是围绕7.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top