随着信息技术的发展,计算机软件已经渗透到国民经济的各个领域中,并与人们的 生产生活息息相关。因此,软件质量的好坏日益受到人们的关注。“软件产品的质量是 软件企业的生命”,这一观点已成为业界的共识。对软件实施软件质量评价,是继软件 质量管理和软件测试之后的又一个推动软件质量提高的重要手段。软件质量评价能够量 化地评价软件的质量水平,精确地控制、管理和改进软件的质量,为软件定型、验收、 鉴定和产业化提供客观、公正的科学依据。
北京航空航天大学的贾兴华,晏海华,在“计算机技术与应用进展”(2007年 Page545-551)“基于测试的软件外部质量评价方法研究”中,提出了一种基于测试 数据的软件质量评价方法。
该方法为每个质量子特性建立了三个默认的测试用例集(正常测试用例集TSD、非 法测试用例集TSF、边界测试用例集TST),通过它们与相应质量子特性关联。并且规 定他们对质量子特性评估的贡献率(也称为权重)分别Q1、Q2、Q3,在此有Q1+Q2+Q3=1。 评价人员也可以根据需要对测试用例集的分类进行相应的扩展,但要满足∑Qi=1, 0≤Qi≤1。
该方法将测试用例集分为功能性测试用例集和非功能性测试用例集两类,每个测试 用例集属于功能性测试用例集或者非功能性测试用例集。若该测试用例集所属质量子特 性所属质量特性为功能性,则该测试用例集为功能性测试用例集,反之为非功能性测试 用例集。
如图3所示,本发明基于测试数据的软件质量评价方法,首先确定功能性测试用例 集评价公式和非功能性测试用例集评价公式,根据测试用例集评价公式确定软件质量子 特性评价公式,根据软件质量子特性评价公式确定软件质量特性评价公式,根据软件质 量特性评价公式确定软件质量评价公式。本发明确定了软件质量评价置信度,并根据软 件质量评价结果和软件质量评价置信度确定软件质量综合评价公式,其具体步骤如下:
步骤1:确定测试用例集评价
本发明的质量评价指标体系与现有技术相同,如图2。
本发明基于国际标准ISO/IEC 9126标准给出可定制的软件质量模型,具体内容与 现有技术相同,相应的质量评价体系如图2所示。本发明基于测试数据将模型中的度量 元定义为测试用例集,通过对测试用例集及其执行结果的评价给出软件质量子特性、软 件质量特性和软件质量的评价。
本发明为每个质量子特性建立了三个默认的测试用例集(正常测试用例集TSD、非 法测试用例集TSF、边界测试用例集TST),通过它们与相应质量子特性关联。并且规 定他们对质量子特性评估的贡献率(也称为权重)分别Q1、Q2、Q3,在此有Q1+Q2+Q3=1。 评价人员也可以根据需要对测试用例集的分类进行相应的扩展,但要满足∑Qi=1, 0≤Qi≤1。
本发明将测试用例集分为功能性测试用例集和非功能性测试用例集两类,每个测试 用例集属于功能性测试用例集或者非功能性测试用例集。若该测试用例集所属质量子特 性所属质量特性为功能性,则该测试用例集为功能性测试用例集,反之为非功能性测试 用例集。
非功能性测试用例集评价公式与原有技术评价公式相同:
其中,N2 代表测试用例集中设计的测试用例的总数,M代表未通过的测试用例的数量,D代表测 试用例集中测试用例的差异度。
本发明对功能性测试用例集评价公式进行了改进。本发明考虑一个测试用例对应多 个软件问题的情况,改进功能性测试用例集评价公式为:
其中, N1表示实际测试用例数,当存在一个测试用例导致多个软件问题的情况时,将该测试用 例看成与软件问题个数对应数量的多个测试用例,在计算用例总数时其按对应问题个数 来计算。L表示软件问题的总数,pj表示第j个软件问题的严重性程度,xj表示第j个 软件问题对应测试用例的重要性程度。D表示测试用例集差异度,0≤D≤1,文献“基 于测试的软件外部质量评价方法研究”中此值由评价人员或测试人员对测试用例进行评 审后得出。本发明下面给出评价因素差异度的度量函数。
本发明首先介绍测试用例的差异度,然后给出测试用例集的差异度。
两个测试用例的差异度取值可以是0(没有差异)或者1(有差异)。下面将从黑 盒测试和白盒测试两个
角度给出测试用例差异度计算方法。
对于黑盒测试,测试用例差异度计算方法如下。
1、测试用例tc1和测试用例tc2在软件质量模型中,即图2中位于同一个测试用 例集。
2、如果tc1和tc2的所有输入点都在同一个等价类中,而且tc1和tc2中所有输 入点的输入顺序以及操作过程都相同,并且tc1和tc2均表示边界情况或者非边界的情 况,那么tc1与tc2的差异度为0,否则为1。
对于白盒测试,依据不同的测试覆盖准则,测试用例差异性判断准则不同,测试用 例差异度也会不同。下面给出针对不同白盒测试覆盖方法判断两个测试用例差异度的判 断准则。假设:
1、测试用例tc1和测试用例tc2在软件质量模型中,即图2中位于同一个测试用 例集。
2、对于集合A={a1,a2,…,an}和集合B={b1,b2,…,bm},A=B的充要条件为:
准则1:针对语句覆盖,假设tc1,tc2执行的语句序列分别为:
Sentencetc1={senta1,senta2,…,sentan}Sentencetc2={sentb1,sentb2,…,sentbm}
若Sentencetc1=Sentencetc2,则tc1与tc2的差异度为0,否则为1;
准则2:针对判定覆盖(或分支覆盖),假设tc1,tc2执行的分支序列分别为:
Decisiontc1={deca1,deca2,…,decan}Decisiontc2={decb1,decb2,…,decbm}
tc1,tc2执行的分支序列中对应分
支点的取值(Boolean值,以下同)序列分别为:
Value_dectc1={v_deca1,v_deca2,…,v_decan}Value_dectc2={v_decb1,v_decb2,…,v_decbm}
若Decisiontc1=Decisiontc2且Value_dectc1=Value_dectc2,则tc1与tc2的差异度为0, 否则为1;
准则3:针对条件覆盖,假设tc1,tc2执行的每个判定中的每个条件的取值序列分 别为:
Dec_contc1={dec_cona1,…,dec_conan}Dec_contc2={dec_conb1,…,dec_conbm}
若Dec_contc1=Dec_contc2,则tc1与tc2的差异度为0,否则为1;
准则4:针对判定/条件覆盖,假设tc1,tc2执行的每个判定的取值序列分别为:
Decisiontc1={deca1,deca2,…,decan}Decisiontc2={decb1,decb2,…,decbm}
tc1,tc2执行的每个判定中的每个条件的取值序列分别为:
Conditiontc1={cona1,cona2,…,conap}Conditiontc2={conb1,conb2,…,conbq}
若Decisiontc1=Decisiontc2且Conditiontc1=Conditiontc2,则tc1与tc2的差异度为0, 否则为1。
若两个测试用例从白盒测试和黑盒测试的角度都没有差异,则表明这两个测试用例 的差异度为0,否则为1。
在定义测试用例差异度的
基础上,测试用例集差异度的定义如下。
1.某测试用例集A为tcsetA={tc1,tc2,…,tcn};
2.测试用例tcai与测试用例tcaj的差异度为e(tcai,tcaj);
3.tcsetA的有效测试用例集为
tcsetEA={tca1,tca2,…,tcam|tcai∈tcsetA,e(tcai,tcaj)=1,i≠j且i,j∈[1,n]};
4.tcsetA的最大有效测试用例集为
tcsetEA_max={tcsetB|tcsetB=tcsetEA,|tcsetB|=max{|tcsetEA|}};
5.tcsetA的差异度为
步骤2:确定软件质量子特性评价
软件质量子特性评价为:
,其中,假设在质量子特性下边有n个测试 用例集,Qi为每个测试用例集对应的权重,其中
为每个测试用例集评价分 数,如果该质量子特性所属质量特性为功能性,那么按照步骤1中功能性测试用例集 评价公式计算,如果该质量子特性所属质量特性不是功能性,那么按照步骤1中非功 能性测试用例集评价公式计算;
步骤3:确定软件质量特性评价
软件质量特性评价为:
,其中,假设在质量特性下边有n个质量子特 性,第i个质量子特性的评价分数为Msi,按照步骤2软件质量子特性评价公式进行计算, 第i个质量子特性对应的权重为Ri,其中
步骤4:软件质量评价
软件质量评价为:
,其中,假设在软件质量下面有n个质量特性, 第i个质量特性的评价分数为Mci,按照步骤3软件质量子特性评6价公式进行计算,第i个 质量特性对应的权重为Ri,其中
步骤5:确定软件质量评价置信度
现有技术介绍的软件质量评价方法中没有考虑软件质量评价的置信度,这使得当测 试不充分时,使用该方法仍然能获得好的软件质量评价,这显然是不合理的。由于基于 测试数据来评价软件质量时是通过测试用例及其执行结果进行的,所以测试用例设计得 越充分,通过该评价方法得出的评价结果的置信度也越高。因此本发明用软件测试用例 的充分性来表示软件质量评价的置信度。
由于白盒测试是基于软件逻辑结构的,而黑盒测试是基于软件需求的,为了比较全 面地考查软件测试用例的充分性,本发明综合考虑白盒测试充分性和黑盒测试充分性来 对软件测试用例充分性进行度量。
软件白盒测试的充分性取决于对白盒测试类型的要求,如语句覆盖、分支覆盖、条 件覆盖及判定/条件覆盖等,一般体现在软件测试计划文档或软件的测试合同中(软件 的关键程度不同,软件的测试要求将会不同)。下面给出白盒测试充分性度量的步骤。
1.软件对白盒测试类型的要求为X覆盖。
2.X覆盖的覆盖率为,代码类型定义见表格2。
3.白盒测试充分性Swhite=CoverageX
表格2白盒测试中代码类型定义
测试类 型 总代码 执行代码 不可达代码 语句覆 盖 可执行语句的总 数 被执行的可执行语句数 目 不可达语句数目 分支覆 盖 总分支数目 执行的分支数目 不可达分支数目 条件覆 盖 总逻辑条件数目 执行的逻辑条件的数目 不可达逻辑条件数 目 路径覆 盖 总路径数目 执行的路径数目 不可达路径数目
黑盒测试的充分性基于测试用例所采取的设计策略来考虑。本发明根据图2来计算 软件黑盒测试充分性,计算过程如下。
1.首先,给出叶子节点(测试用例集)的充分性。
a、给出某测试用例集选用的测试策略{method1,method2,…,methodn},假定每个被选 用测试策略的权重相同。
b、判断所给出的每种测试策略是否有遗漏,从而给出对该测试用例集设计的测 试策略的充分性Stcset_method;
表格3充分性等级表
充分性等 级 不充分 较充分 充分 很充分 充分性数 值 [0, 0.7] (0.7, 0.8] (0.8, 0.9] (0.9, 1.0]
√若对该测试用例集设计的测试策略没有遗漏,则认为Stcset_method=1;
√若有遗漏,根据遗漏的测试策略的重要性,按照表格3给出测试策略的充 分性等级Stcset_method;
√若测试策略仅选择“其他”,基于
风险的考虑,建议Stcset_method选择0.5。
c、给出对该测试用例集设计的每种测试策略的充分性准则,并根据该准则给 出每种策略methodi(i∈[1,n])的充分性
表格4给出常用黑 盒测试策略等价类划分,边界值分析,
因果图的描述和覆盖率计算方法。
d、结合以上分析结果,按照下面度量公式计算出该测试用例集黑盒测试充分 性:
表格4常用黑盒测试策略覆盖率表
2.某非叶子节点x有n个儿子节点,每个儿子节点的权重为pi,相应的充分性等级 为si,则该非叶子节点充分性评价为
3.依此类推,可得软件黑盒测试的充分性Sblack。
结合以上得到的白盒测试充分性和黑盒测试充分性的度量函数,本发明给出软件测 试用例充分性度量函数为:S=Stcset=Swhite*Sblack
其中,S为软件质量评价分数的置信度,Stcset为软件测试用例的充分性,Swhite为软 件白盒测试充分性,Sblack为软件黑盒测试充分性。本发明定义软件测试用例充分性为软 件质量评价分数的置信度。在工程应用中,若白盒测试充分性或黑盒测试充分性在实际 过程中难以获得,可以假定该充分性默认为1。
步骤6:最后确定软件质量综合评价
本发明将软件质量评价的置信度因素加入到软件质量评价体系中,结合软件质量评 价分数给出软件质量综合评价公式:Etotal=Equality*S
其中,Etotal代表软件质量综合评价分数,Equality为软件质量评价分数,S为软件质量 评价分数的置信度。从该公式可知,软件质量的综合评价取决于对该软件质量进行评价 和所得评价分数的可信程度。
每个质量子特性的测试用例集的权重由测试人员依据每个测试用例集对软件质量 的重要程度给出,而质量子特性、质量特性的权重的确立采用AHP方法,其内容介绍见 附件2。
附件1:测试用例集定义
测试用例集通常是指为了测试或验证软件某一功能或测试项的测试用例集合。而测 试用例是用来描述某种特定的测试情况,通常由测试数据和与之相关的测试规程组成。
本发明中测试用例集有五个属性因素,即测试用例的通过数量X,未通过数量Y, 发现的软件问题报告数P,测试用例的差异性D,测试用例的基数B,用TS(X,Y,P,D,B) 来表示。其中B为测试用例集的基数,指测试用例集中至少要包含的测试用例数目。
附件2:AHP方法在软件质量评价中的应用
1).建立评判准则
采用成对比较法,建立的评判准则如下表:
表格5评判准则表
标度 含义 1 表示两个因素相比,具有相同重要性 3 表示两个因素相比,前者比后者稍重要 5 表示两个因素相比,前者比后者明显重 要 7 表示两个因素相比,前者比后者相当重 要 9 表示两个因素相比,前者比后者极端重 要 2,4,6,8 相邻判断的中间值
2).输入判断矩阵
在确定了比较准则后,需要比较若干个因素对同一目标的影响,从而确定它们在目 标中占的比重。假定目标层次的一个元素A对下一层次的元素A1,A2,……,Ai有支配关系, 那么可以建立各个元素之间的两两比较矩阵。这样对于质量特性Ai就可以得到一个n阶 的两两比较矩阵:S=(sij)n。
3).权重分析提取
在上边的步骤完成之后,得到了判断矩阵S,对判断矩阵进行权重的提取得到绝对 权重向量W`={W1`,W2`,……,Wn`}T,提取方法一般采用特征根法,求解公式如下: SW`=λmaxW`。其中λmax为矩阵S的最大特征根,W`就是相应的
特征向量,对W`进行归 一化处理,即得到权重向量W。同样的方法,也可以对质量子特性进行处理,构造判断 矩阵。
4).一致性检查
如果比较结果是前后完全一致的,则判断矩阵应具有以下性质:(1)sij>0,(2)
(3)sii=1;要得到这样的n阶矩阵,必须做n*(n-1)/2次判断,由于对质量 特性的判断带有主观性和复杂性,所以并不一定能使判断矩阵满足sij*sjk=sik,也就是 判断矩阵S不一定具有一致性,因此得到最大特征根后,要对判断矩阵做一致性检验。 需要检验构造出来的判断矩阵S是否严重地非一致,以便确定是否接受S。
定义1:满足关系式sij*sjk=sik,
的正互反矩阵称为一致矩阵。
定理1:正互反矩阵S的最大特征根λmax必为正实数,其对应特征向量的所有分量均 为正实数。S的其余特征值的模均严格小于λmax。
定理2:若S为一致矩阵,则:
(1)S必为正互反矩阵。
(2)S的转置矩阵AT也是一致矩阵。
(3)S的任意两行成比例,比例因子大于零,从而rank(S)=1(同样,S的任意两 列也成比例)。
(4)S的最大特征值n=λmax,其中n为矩阵S的阶。S的其余特征根均为零。
(5)若S的最大特征值λmax对应的特征向量为W=(w1,w2,w3,…,wn)T,则sij=wi/wj,
即:
定理3:n阶正互反矩阵S为一致矩阵当且仅当其最大特征根n=λmax,且当正互反矩阵 A非一致时,必有λmax>n。
根据定理3,可以由λmax是否等于n来检验判断矩阵S是否为一致矩阵。由于特征根 连续地依赖于sij,故λmax比n大得越多,S的非一致性程度也就越严重,λmax对应的标 准化特征向量也就越不能真实地反映出X={x1,…,xn}在对因素的影响中所占的比重。因 此,对决策者提供的判断矩阵有必要作一次一致性检验,以决定是否能接受它。
对判断矩阵的一致性检验的步骤如下:
(i)计算一致性指标CI:
(ii)查找相应的平均随机一致性指标RI。对n=1,…,9,Saaty给出了RI的值,如 下表所示:
表格6平均一致性指标RI
RI的值是这样得到的,用随机方法构造500个样本矩阵:随机地从1~9及其倒数 中
抽取数字构造正互反矩阵,求得最大特征根的平均值λmax`,并定义
(iii)计算一致性比例CR:
。当CR<0.10时,认为判断矩阵的一致性是可 以接受的,否则应对判断矩阵作适当修正。
5).层次总排序及一致性检验
上面得到的是一组元素对其上一层中某元素的权重向量。最终要得到各元素,特别 是最低层中各方案对于目标的排序权重,从而进行方案选择。总排序权重要
自上而下地 将单准则下的权重进行合成。
设上一层次(A层)包含A1,…,Am共m个因素,它们的层次总排序权重分别为a1,…,am。 又设其后的下一层次(B层)包含n个因素B1,…,Bm,它们关于Aj的层次单排序权重分 别为b1f,…,bnf(当Bi与Aj无关联时,bij=0)。求B层中各因素关于总目标的权重,即 B层各因素的层次总排序权重b1,…,bn,计算按下表所示方式进行,即
i=1,…,n。
表格7层次总排序表
对层次总排序也需作一致性检验,检验仍像层次总排序那样由高层到低层逐层进 行。
设B层中与Aj相关的因素的成对比较判断矩阵在单排序中已经完成一致性检验,求 得单排序一致性指标为CI(j),(j=1,…,m),相应的平均随机一致性指标为RI(j) (CI(j)、RI(j)在层次单排序时求得),则B层总排序随机一致性比例:
当CR<0.10时,认为层次总排序结果具有较满意的一致性并接受该分析结果。
对于某真实项目A,按照软件特点和质量要求,建立了相应的质量模型,并基于测 试数据按本方法进行质量评价。具体过程如下评价:
(1).A项目质量模型定制
质量特性 质量子特性 功能性 适合性、安全性、易安装性、互操作性、 边界特性 性能性 性能特性、强度特性、容量特性
(2).质量特性权重
按照AHP方法在软件质量评价中的应用(附件2),通过填写质量特性之间的相对 重要性,得到质量特性的绝对权重信息如下:
质量特性 功能性 性能性 功能性 1.0 3.0 性能性 0.333333 1.0 绝对权重信息 0.75 0.25
(3).质量子特性权重
按照AHP方法在软件质量评价中的应用(附件2),通过填写质量子特性之间的相 对重要性,得到质量子特性的绝对权重信息。
功能性的质量子特性权重分析:
质量子特 性 适合性 安全性 易安装性 互操作性 边界特性 适合性 1.0 1.0 1.0 1.0 1.0 安全性 1.0 1.0 1.0 1.0 1.0 易安装性 1.0 1.0 1.0 1.0 1.0 互操作性 1.0 1.0 1.0 1.0 1.0 边界特性 1.0 1.0 1.0 1.0 1.0 绝对权重 信息 0.2 0.2 0.2 0.2 0.2
用同样方法可以确定性能性的质量子特性权重。
(4).测试用例集权重设计
设计默认的测试用例集:
名字 权重 差异度 基础用例数 测试用例集 1.0 1.0 1
亦可单独为每个质量子特性的测试用例集分别设置权重。
(5).实施评价
以下通过对某真实项目A进行软件测试,得到测试结果数据,包括测试用例的失败 数、通过数、软件问题数,软件问题严重程度等信息,并按上述方法计算出每个测试用 例集的分数。
由测试用例集的分数,结合测试用例集在所属质量子特性中所占比重可以得出质量 子特性的分数如下:
质量 子特性 适合 性 安全 性 易安 装性 互操 作性 边界 特性 性能 特性 强度 特性 容量 特性 评价分 数 61.7 41.18 67.52 81.82 62.5 100 0.0 20.1
由质量子特性的分数,结合质量子特性在所属质量特性中所占比重可以得出质量特 性的分数如下:
质量特性 功能性 性能性 评价分数 62.94 39.6
由质量特性的分数,结合质量特性在软件总体质量评价中所占比重可以得出软件质 量的分数如下:
软件质量分数 57.11
由于该项目未进行白盒测试,未能获得白盒测试充分性,假定白盒测试充分性为1。 黑盒测试方面,下面以质量子特性“适合性”下测试用例集的黑盒测试充分性计算过程 为例给出该测试用例集的黑盒测试充分性。
1.该测试用例集选用的测试策略={等价类划分,边界值分析};
2.该测试用例集设计的测试策略的充分性Stcset_method=1;
3.根据表格3,给出每种测试策略的充分性为{0.95,0.93};
4.该测试用例集黑盒测试充分性为
其余测试用例集的黑盒测试充分性计算过程类似。最后根据
说明书的步骤5黑盒测 试充分性的计算过程得到项目A软件黑盒测试充分性为0.98。
从而,项目A软件质量评价置信度S=Swhite*Sblack=1*0.98=0.98。项目A软件质量 综合评价分数为57.11*0.98=55.9678。
上述实例对真实项目A进行了完整的软件质量评价。实例A基于国际标准ISO/IEC 9126标准中软件质量模型的三层结构,针对具体项目A给出满足该项目需求的质量模型, 从而实现了软件质量模型的可定制。
实例在考虑测试用例通过数、失败数、问题报告数、测试用例重要性、软件问题报 告严重性因素的情况下,计算出测试用例集的分数,质量子特性的分数,质量特性的分 数以及软件质量的分数,并结合软件测试用例的置信度,综合给出软件质量评价分数, 量化地评价了软件的质量水平。A项目最后得出的软件质量分数为55.9678,该评价结 果反映了A项目软件的质量状况。依据A项目的质量要求,可以对软件加以改进,修复 相应
缺陷,从而提高软件的质量。上述实例通过对软件质量进行量化的评价,从而为改 进软件的质量,最终为软件定型、验收、鉴定和产业化提供客观、公正的科学依据。
显而易见,在此描述的本发明内容可以有许多变化,这种变化不能认为偏离本发明 的精神和范围。因此,所有对本领域技术人员显而易见的改变,都包括在本
权利要求书 的涵盖范围之内。