软体度量
软体度量(software metric)是一个对于软体性质及其规格的量测。软体度量的目的是获得客观、可以复制及量化的量测结果,依软体度量性质及特性的不同,可以分别应用在软体开发的时程及预算规划、成本估算、品质保证测试、软体侦错、软体性能最佳化或专案人员配置的最佳化等领域。
举例
源代码行数简称SLOC,是最简单的一种软体度量,以下以包括注释的实体源代码行数(LOC)为准,说明软体度量的特性及一些限制。
以下的C程式码只有一行,其LOC为1:
for (i = 0; i < 10; i += 1) printf("hello"); /* How many lines of code is this? */
但程式码在重新排版为以下的程式码时,其LOC就从1改变为5,但实际的程式机能没有改变:
/* Now how many lines of code is this? */
for (i = 0; i < 10; i += 1)
{
printf("hello");
}
若不使用回圈的架构,直接呼叫10次printf,一般不建议以这种方式撰写程式,但其LOC为11,比上述二个程式的LOC都大:
/* It is not a good code style */
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
不同的软体度量可量测的软体性质也随之不同,像源代码行数适合量测软体的大小,但无法量测软体的模组化程度,而且此度量方式是要量测原代码的长度,不适合作为软体规划阶段进行度量。
常见的软体度量
以下是一些常见的软体度量:
- 平衡计分卡
- 每行程式的程式错误比率
- COCOMO(构造性成本模型)
- 代码覆盖率
- 内聚力
- 注解密度[1]
- 同步变化的软体元件
- 耦合力
- 循环复杂度
- DSQI(设计结构品质指标)
- 机能点分析
- 霍尔斯特德复杂度量测
- 指令路径长度
- 类别及介面的数量
- 源代码行数
- 客户需求行数
- 程式执行时间
- 程式载入时间
- 二进制档案长度
- 软体包装度量
- 加权微机能点
限制
软体的开发过程相当复杂,其方法论及目标都有高度的变异性,因此很难定义软体质或是量的数据,并确定一个有效的和及时的计量方式,尤其要在软体的细部设计前进行相关的预估,更加困难。另一个困难、常产生争议的是度量的定义,以及各度量之间的重要性[2][3]。 实务上的软体度量常常缩减为以下几个因素的组合:
度量的目标可能会针对是上述的一项因素或是多项因素。
评论
软体开发者指出过于简化的软体度量可能弊大于利[4]。有些软体开发者也注意到软体度量已成为软体开发过程中的一部份[2]。有些软体开发者注意到软体度量可能造成程式设计者的压力及焦虑,或是设法制造不实的度量,不过也有些软体开发者认为软体度量对程式设计者有正面影响,可以肯定自身工作的价值[5]。
有些软体开发者认为许多软体度量的定义不够精确,而在实务上也很难预估当软体完成时,其对应的软体度量的目标值为何[6],不过也有些软体开发者认为不精确的量测至少比没有量测要好“若对一个事物无法测量,也就无法控制这个事物。”[7]。
软体度量已广为政府机关、美国军方、美国国家航空航天局(NASA)[8]、资讯科技谘询机构、学术机构所使用[9],也有许多商用或学术使用的软体开发预估软体。
相关条目
注释
- ^ Descriptive Information (DI) Metric Thresholds. Land Software Engineering Centre. [19 October 2010]. (原始内容存档于2011-07-06).
- ^ 2.0 2.1 Binstock, Andrew. Integration Watch: Using metrics effectively. SD Times. BZ Media. [19 October 2010]. (原始内容存档于2012-09-13).
- ^ Kolawa, Adam. When, Why, and How: Code Analysis. The Code Project. [19 October 2010]. (原始内容存档于2011-11-14).
- ^ Kaner, Dr. Cem, Software Engineer Metrics: What do they measure and how do we know?, [2012-04-16], (原始内容存档于2020-04-26)
- ^ ProjectCodeMeter (2010) "ProjectCodeMeter Users Manual" page 65 (PDF). [2012-04-16]. (原始内容存档 (PDF)于2017-03-24).
- ^ Lincke, Rüdiger; Lundberg, Jonas; Löwe, Welf, Comparing software metrics tools (PDF), International Symposium on Software Testing and Analysis 2008, 2008: 131–142 [2012-04-16], (原始内容存档 (PDF)于2018-04-17)
- ^ DeMarco, Tom year =. Controlling Software Projects: Management, Measurement and Estimation. ISBN 0-13-171711-1.
- ^ NASA Metrics Planning and Reporting Working Group (MPARWG) 互联网档案馆的存档,存档日期2011-10-22.
- ^ USC Center for Systems and Software Engineering. [2012-04-16]. (原始内容存档于2017-12-11).
参考文献
- DeMarco, Tom. Controlling Software Projects: Management, Measurement and Estimation. 1982. ISBN 0-13-171711-1.