认识到谈论物理代码行毫无意义,这会更好。物理代码行(LoC)的数量非常依赖于编码样式,以至于一个开发人员到另一开发人员的数量级可能变化一个数量级。
在.NET世界中,有一种方便的方法来计算LoC。顺序点。顺序点是调试的单位,它是放置断点时以深红色突出显示的代码部分。通过序列点,我们可以讨论逻辑LoC,并且可以跨各种.NET语言比较此指标。大多数.NET工具都支持逻辑LoC代码度量标准,包括VisualStudio代码度量标准,NDepend或NCover。
例如,这是一种8 LoC方法(不考虑开始和结束括号的序列点):
长期生产LoC的时间必须计算在内。有时候,您会吐出200多个LoC,而另一些日子,您甚至要花费8个小时甚至不添加一个LoC就可以修复错误。有时,您将清理无效代码并删除LoC,有时,您将花费所有时间来重构现有代码,而不将任何新的LoC添加到总数中。
就个人而言,仅在以下情况下,我才在自己的生产率得分中计算单个LoC:
- 它包含在单元测试中
- 它与某种代码合同相关联(如果可能,合同当然不能检查所有LoC)。
在这种情况下,我过去五年为.NET开发人员编写NDepend工具的个人评分平均每天为80个物理LoC,而丝毫没有牺牲代码质量。这种节奏是持续的,我认为它不会很快消失。总而言之,NDepend是一个C#代码库,当前的权重约为115K物理LoC。
对于那些讨厌计算LoC的人(我在这里的评论中看到了很多),我证明一旦进行了充分的校准,计算LoC就是一个很好的估算工具。在对在我特定的开发环境中实现的许多功能进行编码和测量之后,我到达了可以精确估计LoC中任何TODO功能的大小以及将其交付生产所花费的时间。