软件开发
编程
代码
代码风格
代码质量

如何在软件开发工作量评估阶段确定代码行数以使用代码行数预估工作量?

看到很多资料都提到可以使用代码行数预估软件开发的工作量,不过不太明白在软件开发工作量评估阶段代码行数是如何确定的。有哪位大佬明白的帮忙回答下?
关注者
27
被浏览
23,620

10 个回答

不要相信什么“可以用代码行数预估工作量”之类的P话,那种资料如果不是上世纪扒出来的,就是没实践过的人异想天开。

假设现在有一个需求,对于给定数字N,计算出1+2+...+N,来吧,看看工作量吧。

有人这么写,总共5行:

def sum(n):
   result = 0
   for i in range(n+1):
     result += i  
   return result

有人这么写,总共2行:

def sum(n):
   return n * (n + 1) /2

还有的人这么写,又是5行:

def sum(n):
   '''
   sum of number sequence from 1 to n
   '''
   return n * (n + 1) /2

上面的代码功能都一样,行数差别好几倍,不同的实现方法有不同代码行数,不同代码风格有不同代码行数,不同数量的注释带来不同的代码行数。

这还只是简单的代码,你觉得对于复杂的程序,有可能给出一个靠谱的代码行数估计吗?

用代码行数来估计工作量,完全是缘木求鱼。

发布于 2019-10-16 21:47

代码工作量估算一直很难。也是业内难题。我自己用过一个方法,你可以尝试一下,但使用者需要比较强的管理和软件经验。

第一,在项目的不同阶段,估算误差会有很大的差异,如果在招投标阶段,误差会有50%~200%之间,如果已经对项目做了比较详细的调研,误差阶段也会有20%~50%。好的开发管理人员,是将这些误差尽量缩小。这基本上是一个行内的标准。

第二,要学会做项目分解,将你需要开发的软件系统进行比较详细的分解。最好能分解到一个具体的功能。

第三,最好开发过一些相类似的系统,这样子的话每个具体功能的代码量估算会比较容易。

第四,多找几个人有经验的工作人员,采用delphi估算工作方法进行估算,这样子的话,总体误差相对比较小。

具体说一下我们做的方法。

首先将一个大系统按照子系统、功能、模块进行划分,将所有的模块排列出来,我们当时找了5个比较熟练的开发人员,让他们对所有的模块依据自己的经验估算代码行数,在估算的时候不要彼此交流。估算完了以后将所有的估算结果进行列表统计,如果大家的估算误差在一定范围之内,这不用说那理由直接取平均数作为代码行数。如果偏差比较大,让估算量最大的和估算量最小的开发人员说明他们的理由。进行再次估算。如此循环,进行三遍。3遍以后,如果估算还是超过范围,由研发负责人确定代码行数。在这里需要说明的是,不要纠结于具体功能行数的准确性。

第2进行难度估算,所谓的难度估算,是所有的开发人员对不同模块的难度估算一个百分比,一般难写的代码,可以大于等于1,容易的写的代码可以小于1。三次估算以后,把这个系数和具体模块的代码行数做乘法,

第三,进行可服用率的估算,每个模块估算出可复用的代码行数,文化需要的开发的代码行数减去,可复用的代码行数,所得到的即为开发的代码行数。

将所有的代码行数相加就可以作为整个项目的开发工作量(用代码行表示),注意这个代码行数是项目,研发过程中所有的工作量,包括市场、需求、设计、代码、测试、实施。这个代码行数除以每天行业的每天工作行数(一般是10~15行,根据需要可以调整为20~30行),就可以统计出所有的工作日。当然这个工作日也是包含所有工作的。

实际效果,我们自己的估算可以将误差控制在20%左右。但是前提条件是比较有工作经验的研发人员进行估算,这个要求是比较高的。

发布于 2019-10-16 23:48

华为的做法是,找一个在该领域写了七八年以上代码的员工估计他写出来要多少代码量,然后在这个基础上乘以1.5就是普通员工的工作量。

对长期耕耘某个领域的程序员来说,估计出来的数量也是八九不离十的。

发布于 2019-10-22 10:27

你把资料扔了吧,外行写的。一般行业外的人喜欢拿代码量说事。

或者是外包的那种体力话,纯体力,没有任何智力成分。

我们一般是估算用多少“人月”,不过也是给别人看的。没任何人估的准。

发布于 2019-09-28 15:49

评估这个东西,就是要价用的,将想要的价格以某种貌似合理的度量展现出来。比如一个项目,乙方先估计甲方能掏多少钱,然后靠着这个数报价。

硬件多少是确定的,能查到,软件多少就不好说了。

其实软件的成本跟人相关,但是这个甲方又看不到,甲方只能看到最终提交的代码与文档,所以就用代码的行数来度量了。当然,由于大部分业务需求都是CRUD搞定,所以代码行也能说明一些问题,但是预估的方式肯定是不可能准的,最终只是一个给甲方看的数字罢了。

发布于 2019-10-22 08:08

没办法准确评估工期
估算代码量那属于扯淡的
实际意义没有那么大
估计工作量只能靠经验
然后留余量

需要注意的有两点
明确需求,不明确的地方是隐患
尽量细分,从上到下拆分成最小可执行单元
然后再估计工作时间就容易点了

当然了,怎么也没办法估计准确的

发布于 2019-10-12 14:07

无法预估。不同的人写法千差万别,不同的抽象层次代码量差好多倍。工作量可以根据功能点数量评估时间

发布于 2019-09-28 08:09

做软件开发和打字员是不同的,打字员打得好打的多就优秀,软件开发需要深度思考,研判解决方案,并不是代码行数多就是更好的方案,更不能说明效率高。不能据代码行数多少评判工作量。

发布于 2019-10-24 06:52

不同的CI(Continuous Integration)工具都可以实现自动统计代码量,例如Jekins,可以有这个插件:

如果不使用CI工具,想用一个简单独立的工具,可以用这个:

一个统计代码行数的小工具有八千多Star。它支持各种操作系统和平台。

例如,我自己的代码统计结果:


说到这里,开始进入正题了。其实不建议用代码行数预估工作量的,这种方法太简单粗暴。

编程有修改,有增加代码就有删除代码。代码有质量好坏,一行简单明了的代码比一百行思路混乱的代码更有价值。

如果是用Git,可以用下面命令查看一个Git账号历次Commit的代码增减:

git log --author="<authorname>" --oneline --shortstat

0b1c264 (HEAD -> master) test
 2 files changed, 2 deletions(-)
5a37ceb change README name
 1 file changed, 0 insertions(+), 0 deletions(-)
1ae10f9 (shared/master) Added shared comment to readme
 1 file changed, 1 insertion(+), 1 deletion(-)
85c76c1 Changed README in original repo
 1 file changed, 2 insertions(+)
bbc3b1d (shared/style, style) Hello uses style.css
 1 file changed, 1 insertion(+)
4c4abc9 Added css stylesheet
 1 file changed, 3 insertions(+)
a35beb2 Added index.html.
 1 file changed, 5 insertions(+)
1423619 Moved hello.html to lib
 1 file changed, 0 insertions(+), 0 deletions(-)
eb0aa6e Add an author/email comment
 1 file changed, 1 insertion(+)
e4cc1c5 (tag: v1) Added HTML header
 1 file changed, 2 insertions(+)
4e20ab2 (tag: v1-beta) Added standard HTML page tags
 1 file changed, 5 insertions(+), 1 deletion(-)
63ba00a Added h1 tag
 1 file changed, 1 insertion(+)
8d0e839 First Commit
 1 file changed, 0 insertions(+), 0 deletions(-)

刚简单直观的列表,可以用这个命令:

git log --author="<authorname>" --pretty=tformat: --numstat

-       -       .DS_Store
0       2       README.md
0       0       README => README.md
1       1       README
2       0       README
1       0       lib/hello.html
3       0       lib/style.css
5       0       index.html
0       0       hello.html => lib/hello.html
1       0       hello.html
2       0       hello.html
5       1       hello.html
1       0       hello.html
0       0       hello.html

最后,还是多做Code Review,写代码不是搬砖头,不是数量能够说明一切。

编辑于 2019-09-27 20:35
【公众号 “项目管理研究所” 将会第一时间更新文章并[分享行业分析报告]】

归档于软件项目管理初级学习路线

第六章 软件项目成本计划

《初级学习路线合集 》

前言


大家好,这节我们学习软件项目管理—代码行估算法。


一、软件项目规模


即工作量,例如:软件规划,软件管理,需求分析,系统设计,编码,测试,以及后期维护等任务的工作量总和即为项目规模。


代码行,功能点,人月,人天,人年等都可以是规模单位。


有了软件项目规模就可以表示出项目成本。完成软件规模相应付出的代价就是软件成本,我们可以采用货币单位来表示软件成本。


二、代码行估算法


代码行估算法就是从软件程序量的角度定义项目规模。


例如:某项目的规模是C语言1000代码行,那么代码行估算法与具体的编程语言相关。




例如C语言的1000代码行用JAVA语言可能是600代码行,另外代码行估算过程当中要求功能分解足够详细,可能需要分解到类,函数等等,这个方法需要一定的经验数据,只有这样才能比较准确的估算。


尽管现在很少使用这个方法直接评估规模,但是还是有优点的,一个软件项目需求规格,设计文档,测试文档可以不保留,但是代码这个产品一定得保留下来,而且代码比较直观。





当然代码行估算法的缺点比较明显:

1. 对代码行没有公认的可接受的标准定义。

2. 代码行数量依赖于所用的编程语言和个人的编程风格。

3. 在项目早期,需求不稳定,设计不成熟,实现不确定的情况下很难准确的估算代码量。

4. 代码行强调编码的工作量,只是项目实现阶段的一部分。

总结


总之 代码行估算虽然比较直观,但是误差也比较大,在一些规模估算方法中常常以代码行作为输入的。


到这里,第六章 代码行估算法就讲解完毕了!下一节介绍功能点估算法~


如果您觉得这篇文章有帮助到您的的话不妨点赞支持一下哟~~


后续将持续更新【软件项目管理初级学习路线】的全知识点,大家感兴趣的多多关注博主哟~
————————————————

发布于 2022-06-01 14:08