在上文《嵌入式软件开发的十二大基本要素(四):调试》中,我们分析了如何减少调试时间,提升工作效率。
本文为白皮书系列第五部分,将分析代码质量是如何影响企业的投资回报率(ROI)和总拥有成本(TCO)。
平均来说,根据 Steve McConnell 的《Code Complete》,一个开发人员每写 1000 行代码会产生 70 个 Bug。其中大约 20%,即每 1000 行代码中的 15 个 Bug 会被客户发现。更糟的是,修复一个Bug 要比写一行代码多花 30 倍的时间。
通过在开发周期的早期引入代码质量控制,可以将错误的影响和消除错误的工作量降到最低。在每个开发人员的电脑上提供静态分析,并有明确的编码标准,可以帮助他们在开发过程中发现源代码中的问题,在此阶段犯错的成本比发布产品后才发现要小得多。
此外,很多人都在谈论设计他们的代码以便重用,但软件估算模型表示重用的代码所占的工作量至少是编写新代码的 50%。
如上图所示的 Boehm 的 COCOMO 方法,估计了编写代码的相对成本是如何被对虚线中的重用软件所做修改而影响的。X 轴是对打算重用的代码所做修改的百分比,而Y 轴代表了写新代码的百分比。请注意,对于三个数据样本中的两个代码,不需要对所谓的重用代码做太多的修改,就可以突然跳到从头开始重写代码的 50% 的工作量。AAM(自适应调整修改器)线显示,对重用产品中的小修改可以产生不成比例的大成本。这里的关键点是,如果真的想重复使用代码,它必须具有非常高的质量和良好的设计,以达到成本效益。
提高代码质量的最快方法是使用代码分析工具。事实上,如果正在创建一个功能安全认证的应用,你甚至会被强制要求使用静态分析工具。这些类型的工具可以帮助你找到代码中最常见的缺陷来源,也可以帮助你找到开发人员在试图编写代码时往往不会考虑的问题,特别是当他们为了让某些功能运行而加入支撑代码时。静态分析工具确实能帮助你开发出更好的代码,因为它们强制执行编码标准。根据你的静态分析解决方案的质量,它们可以在你还在写代码的时候检查出许多其它潜在的问题。
有几个原因能够证明代码质量是一个大问题。首先,根据开发组织的成熟度,开发人员可以把 90% 的时间花在调试上。如果能在缺陷进入正式构建之前快速隔离它们,你就会有较低的缺陷注入率,这意味着可以更快地达到组织的质量指标。其次,这也意味着你的代码总体上有较少的剩余缺陷,这使得它成为重用的合适候选者,因为再次使用该代码时,发现先前未被发现的缺陷的机会较低。高质量的代码由于缺陷较少而更容易维护,而且如果它遵循良好的软件工程原则,它将更容易扩展,因此重用它确实能提升后续项目的速度。
为什么质量很重要?
有趣的是,每个阶段的每个缺陷的成本都如预期的那样上升,但总成本却在下降,就像 Capers Jones 的《Estimating Software Costs》一书中所示,缺陷数量在减少。在实践中,发现和修复每个阶段的错误并不需要更长的时间,但是尽管数量减少了,成本仍然存在。值得注意的是,随着产品的成熟运行,由于服务于现场产品的影响,每个缺陷的维护成本要高很多。其他无形成本,如对品牌的损害和未来客户和收入的损失,也仍然是需要考虑的因素。
那么,考虑到这些因素,投资的回报是什么呢?静态分析可以减少软件开发中各个阶段的错误数量。一个简单的分析是利用上图中的数据来减少错误的数量。鉴于这种在开发过程中引入的错误的减少,我们可以看到成本的显著降低。
这个简单的分析得出每个 Bug 可以节省大约 126 美元,即假设在开发过程中每 1000 行代码平均有 15 个 Bug,则转化为每 1000 行代码节省 1900 美元。当然,结果会基于其他因素,如劳动率、缺陷检测和修复时间,以及缺陷密度,会有所不同。但由于许多系统使用 10 到 100 KLOC 或更多,因此静态分析的商业案例显而易见。
提高编码技能
此外,在 Dr. Dobbs 所做的另一项研究中,认为它将缺陷注入率降低了 41%,这节省了大量测试时间,既缩短了工程时间,还加速了上市时间。
在这项研究中,每个月的缺陷注入率是相当稳定的,直到该组织引入编码标准,然后缺陷率急速下降。随着开发人员对标准越来越熟悉,偏差越来越少,缺陷率直线下降。
Google 在 ACM 出版物上发表了一篇文章,探讨了代码分析的优点。虽然文章对他们的整个代码库,包括 C、C++ 和 Java 进行了全面的考察,但结果非常明显:“在开发过程的早期就能发现编译器错误,并且能够整合到开发人员的工作流程中。我们发现扩大编译器的检查集对提高 Google 的代码质量是有效的。”作者表示,将静态分析检查整合到编译器工作流程并使其作为错误出现,极大地提高了开发人员对工具信息的关注,最终大幅提升代码质量。
再往下看,他们谈到了向最近遇到编译时间错误的开发人员和已经收到修复同一问题的补丁的开发人员发出的调研。
“Google 的开发人员认为,在编译时标记的问题(相对于检查过的代码的补丁)能捕捉到更重要的错误;例如,调研参与者认为 74% 在编译时标记的问题属于真正的问题,而在检查过的代码中发现的问题只有 21%。”
此外,文章还谈到了将代码分析整合到工作流程的重要性,指出当他们通过静态分析工具自动运行提交的代码并邀请工程师查看分析结果时,很少有工程师跟进。但是,如果在编译过程中就能得到即时反馈,那么就会让更多人使用静态分析,且分析结果也更难被忽视。因此,Google 选择在每个人的工作流程中默认集成静态分析。他们认为要推广代码分析工具,开发人员必须感到能从中受益,并且喜欢使用这些工具。从中可以看出,编码标准确实对开发工作有影响。
-
JAVA
+关注
关注
19文章
2966浏览量
104701 -
代码
+关注
关注
30文章
4779浏览量
68521 -
编译器
+关注
关注
1文章
1623浏览量
49108
原文标题:嵌入式软件开发的十二大基本要素(五):代码质量
文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论