软件质量是指与软件产品满足规定和隐含的需求的能力和有关的特征的全体,即所有描述计算机软件优秀程度的特性的组合。
应用软件的质量依赖于问题需求的描述、解决方案的建模设计、可执行程序的编码的产生以及为发现错误而运行软件的测试。一个优秀的监理工程师应该能够使用定量的方法来评估软件开发过程中产生的分析及设计模型、源代码和测试用例(use case)的质量。
软件开发质量的定量监理
为了实现这种实时的质量评估,监理工程师们必须采用技术度量来客观地评估质量,而不能仅仅采用主观的方法进行评估。
在评估中,首先要明确的一点是,软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。
而在定量监理实践中,通常需要使用一种被称为尺度度量的方法,这种定量度量适用于一些能够直接度量的特性,比如,出错率定义为错误数/KLOC/单位时间等。
因而,对质量控制所应该建立的一些定量数据是:
(1)明确性(无二义性)、完全性、正确性、可理解性、可验证性、内部和外部一致性、可完成性、简洁性、可追踪性、可修改性、精确性和可复用性的数据。这些数据可以用来评价分析模型和相应的需求规约质量的特征。
公开的可能缺陷数与报告总缺陷数的对比则可以用来评价测试精确度和测试覆盖度,同时也可以预测项目发布时间。
(2)产品发布前清除的缺陷数在总缺陷数中所占的百分比,有助于评估产品的质量。
(3)按严重缺陷、子系统缺陷来划分,分类统计出平均修复时间,这样将有助于规划纠正缺陷的工作。
(4)利用测试的统计数据,估算可维护性、可靠性、可用性和原有故障总数等数据。这些数据将有助于评估应用软件的稳定程度和可能产生的失败。
在上述定量数据的基础上,就可以开始进行估算。
1、基本的定量估算
基本定量估算示例:
设 F为用功能点描述的软件规模;
D1为在开发过程(提交之前)中发现的所有缺陷数;
D2为提交后发现的缺陷数;
D为发现的总缺陷数。
因此, D=D1+D2
对于一个应用软件项目,则有如下计算方程式(可以从不同的角度估算软件的质量):
质量=D2/F;
缺陷注入率=D/F;
整体缺陷清除率=D1/D;
同样以上期中的CAD软件为例,根据上期计算所得结果,功能点F为366,而在开发过程中发现了15个错误,提交后又发现了4个错误,则:
D1=15,D2=4
D=D1 +D2=15+4=19
质量(每功能点的缺陷数)=D2/F=4/366=0.0109
缺陷注入率=D/F=19/366=0.05191
整体缺陷清除率=D1/D=15/19=0.7895
有资料报告,美国的平均整体缺陷清除率目前只达到大约85%。而像AT&T、IBM、摩托罗拉和惠普这样一些大公司的顶级项目,通过实施最佳实践,其缺陷清除率可以超过99%。
众所周知,清除软件缺陷的难易程度是不同的。需求错误、规格说明、设计问题及错误修改是最难清除的。表1给出了美国平均缺陷的情况:
表2反映的是CMM五个等级是如何影响软件质量的,其数据来源于美国空军1994年委托SPR(美国一家著名的调查公司)进行的一项研究。
从表中可以看出,CMM级别越高,缺陷清除率也越高。
在监理过程中,可以将这这些标准或指标结合起来使用,用以辨明可能存在的质量问题。
2、对软件需求的估算
假设在一个规约中有nr个需求,所以
nr=nf+nnf
其中,nf是功能需求的数目,nnf是非功能需求数目(例如性能)。
为了确定需求的确定性(无二义性),一种基于复审者对每个需求解释的一致性的度量方法为:
Q1=nui/nr
其中,Q1表示需求的确定性,nui是所有复审者都有相同解释的需求数目。当需求的模糊性越低时,Q1的值越接近1。
在CAD软件的例子中,假设计算机图形显示功能模块的功能性需求是10个,非功能性需求(响应速度和分辨率)是2个,所有复审者都有相同解释的需求数目是11个,则:
Q1=11/12=0.916667
而功能需求的完整性Q2则可以通过计算以下比率获得:
Q2=nu/(ni×ns)
其中,nu是唯一功能需求的数目,ni是由规约定义或包含的输入(刺激)的个数,ns是被表示的状态的个数。
Q2只是测度了一个系统所表示的必需的功能百分比,但是它并没有考虑非功能需求。为了把这些非功能需求结合到整体度量中以求完整,必须考虑已有需求已经被确认的程度。这可以用Q3来表示:
Q3=nc/(nc+nnv)
其中,nc是已经确认为正确的需求的个数,nnv是尚未被确认的需求的个数。
在CAD软件的例子中,假设数据库管理功能模块的唯一功能需求是10个,由规约定义或包含的输入个数也是10个,表示的状态的个数是1个,已经被确认的需求是8个,未被确认的需求是2个,则:
Q2=10/(10×1)=1.0
Q3=8 /(8+2)=0.8
3、估算验收测试阶段预期发现的缺陷数
(1)如果使用类似项目的数据,那么可以估计当前项目在验收测试时发现缺陷数,它等于在类似项目的验收测试阶段发现的缺陷数和这个项目估计的工作量与类似的总工作量比率的乘积。用如下公式表示:
验收测试缺陷的估计=验收测试缺陷数×工作量估计/实际工作量