基于改进AHP-Fuzzy的面向测试的软件质量评价模型

2020-04-07 10:16
计算机测量与控制 2020年3期
关键词:软件测试节点评估

(中国人民解放军91404部队,河北 秦皇岛 066001)

0 引言

随着信息化程度的不断提高,软件在各行业、领域、系统中所占的比重逐渐增大,所发挥的作用日益重要,越来越多系统的功能界面主要通过软件形态呈现,软件质量水平的高低在某种程度上可直接影响或间接反映出系统整体质量状态[1]。软件度量学的概念最早由Hurtwick和Rubey于1968年提出[2],历经50多年发展,软件质量评价理论及相关技术的研究取得了长足进步。一方面多种效能分析或评估方法被大量借鉴和应用,例如:软件质量评价研究人员通常使用层次分析法(analytic hierarchy process,AHP)确定子特性在特性及子特性线性函数关系式中的权重[3],同时也有一部分研究人员采用模糊综合评价法(fuzzy synthetic evaluation)确定特性与子特性之间的关系;另一方面形成了由ISO/IEC 25010:2011、ISO/IEC 25051:2014等各类标准规范所构成的多个通用软件质量评价体系,不仅描述了软件产品的质量模型,还对软件产品质量评价的方法和过程进行了规定[4-5]。

软件测试是在有限的规定条件下,执行程序操作或触发程序运行,以尽可能暴露程序错误,评估软件能否满足需求的过程[6],故一定程度上可基于软件测试的执行对被测软件或系统实施质量评价。目前软件测试早已跳出最初仅对程序进行“调试”的局限,且成功借鉴了工程化的理念和方法,其在内涵上逐步引入“质量”的概念[7],出现了类似于“软件测试是实现对软件质量的度量,是将对某一程序或系统的相关属性进行评价作为目标的任一活动”的定义[8],开展“基于软件测试的软件质量评价(又称为面向测试的软件质量评价)”的意义和必要性得到普遍认可并不断强化。

然而与各类软件质量度量及评价的理论和模型不断推陈出新、受关注度不断提高形成鲜明对比的是,当前在工程实践中软件测试仍然以暴露、定位、分析并客观呈现各类具体问题为主,测试的首要任务和主要目的仍旧是验证软件是否满足规定的需求。正如IEEE在其软件工程术语的行业标准中对软件测试所下的定义“软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”[9],软件测试“测而不评”、“以测代评”的现象普遍存在,究其原因,主要包括:

1)通用软件质量评价标准体系不能直接应用于基于测试的软件质量评价。面向测试的软件质量评价主要面向软件测试过程,具有其自身特殊性,然而以ISO/IEC 25000系列标准为代表的通用软件质量评价体系均基于软件全寿命周期等全局视角对软件质量评价活动所进行的系统性规范。通用软件质量评价标准一方面不能满足面向测试的软件质量评价活动的特定要求,另一方面又显得过于庞大和复杂,无法直接使用。例如:GB/T 25000.10-2016就将软件的产品质量属性从“正向”视角划分为功能性、可靠性、易用性、性能效率、维护性、可移植行等8个特性,并将其进一步细化为多个子特性[10],而测试先天所具有的证伪性决定了其只能从“反向”视角检测出软件实现在各特性中是否存在问题,以及存在什么样的问题。

2)现有系统效能分析或评估方法也不能直接应用于基于测试的软件质量评价。例如:传统AHP虽然采用九级标度法(9标度法)实现了多个元素针对上层元素的定量排序且易于操作[11],但仅基于1~9级的单向标度无法满足面向测试的软件质量评价须同时涵盖正、反两个评价维度的特定要求;经典模糊综合评价方法虽然基于模糊数学理论实现了对定性问题域的定量分析及评价,但其通常首先需要利用人工评判打分或专家系统等方式定性地确定各评价因素在评判等级论域(评判等级集合)上的隶属度,且还需要采用专家直接赋值等方式确定权重以实现后续的模糊综合评价[12],因此受参与者主观因素的干扰较为显著,然而软件测试评价空间极为有限,不足以消除上述人为主观因素干扰(AHP方法在权重确定过程中也存在类似问题[13]),易导致评价过程受主观因素干扰从而降低评价的客观性和准确性。

为解决面向测试的软件质量评价不能有效开展的实际问题,在引入失效度、系统失效评估等概念的基础上,结合软件测试工程实践特点,对层次分析、模糊综合评价进行适当改进和拓展,提出一种可行性较强的面向测试的软件质量评价模型——SFSE模型(system failed state evaluating model,系统失效评估模型),该模型以软件测试执行所发现的问题规模等实测信息为输入,通过分析被测系统或软件的失效程度,从“反向”视角间接实现对被测系统及软件质量状态的量化评价。

1 相关定义说明

定义1(失效度 the Failure Level):失效度是评价因素或评估对象失效程度的量化表述,失效度的量化形式表述参见3.3.2所述。

定义2(系统失效评估system failed state evaluating):系统失效评估是基于系统运行过程中出现的各类缺陷或错误的严重等级、规模的分布特性,对系统运行失效性进行定量的分析和评价,并实现对系统质量状态的间接评估。

定义3(测试评价因素层次结构 layered structure for evaluating):基于对被测系统的理解与分析,参考层次分析法,从软件测试角度对被测系统功能、性能、接口等各项指标或特性,以及安全性、恢复性、边界、强度等软件测试需求进行逐层分解,抽取评价因素,建立与之对应的树状结构模型,即为被测系统的测试评价因素层次结构。可采用层次结构图图形化表述测试评价因素层次结构,其中节点表示评估对象或评价因素,由连接线表明从属关系。

测试评价因素层次结构分为两大部分:第一部分为顶层,仅包含单一的根节点,表示系统本身;第二部分为评价因素层,可包含多个子层,每个子层可包含多个节点(评价因素),为简化问题处理,本文将测试评价因素层次结构限制为二维树结构,即任意下层节点(子节点)仅归属于单一特定上层节点(母节点),如图1所示。

图1 测试评价因素层次结构示意图

定义4(评估对象 evaluating target):评估对象为对其实施失效评估的具体对象(可以是实体,也可以是属性、特性等抽象概念),评估对象的概念具有相对性,在测试评价因素层次结构中,除叶子节点(某一路径的最底层节点,该节点无任何子节点)外的各层中的各节点均可视为其下层子节点的评估对象,系统失效评估最终的评估对象为根节点即被测软件或系统,如图1所示。

定义5(综合评价集 synthetic evaluating set):实施模糊综合评价时任一评价者针对若干(单个或多个)因素实施模糊评价所能选用的评价结果全集构成的评判等级论域,称为评价集,设V为评价集:

V={v1,v2,…,vj,…,vm}

(1)

评价集V中包含的评价结果(评价分量)的规模(数量)称为该评价集的度,表示为deV(V)。例如:针对式(1)所表示的评价集V有deV(V)=m,称V为m度评价集,表示V的度为m,即V共包含m个(级)评价结果。

软件测试通常根据所发现问题的危害程度、整改开销等因素,将问题划分为多个严重性等级,可直接使用有关成熟的工程实践构建相应评价集,例如GJB2786/A从开发方视角根据软件问题对研发过程的影响程度、造成的危害性等方面将软件问题划分为4个严重性等级[14],基于此种软件问题严重性等级划分可构建通用软件问题评价集如下:

V2786/A={1级(致命),2级(严重),3级(一般),4级(轻微)}

(2)

如式(2)的通用软件问题评价集适用于对软件问题的分析和评价,但由于缺少对未发现问题情形的评判,故无法实现对被测系统或软件失效程度以及质量状态的评估,鉴于此,本文在系统失效评估中引入“综合评价集”的概念:

综合评价集(synthetic evaluating set)在通用软件问题严重性等级评价集的基础上,引入对“无问题(0问题)”状态的标定,构成系统失效评估所需评价分量的完整集,即为综合评价集,其一方面仍可用于标定软件问题严重等级,另一方面亦适用于对系统失效程度、质量状态实施评判。

设:Vs为基于通用软件问题严重性等级评价集V所构建的综合评价集,v∞为标定“无问题(0问题)”状态的评价分量(称为0项增量),则将Vs表示为:

Vs=V∪{v∞}={v1,v2,…,vj,…,vm,|v∞}

(3)

式(3)中“|”用于将V中各元素与v∞分量进行分割,以显性区分0项增量。为便于形式化描述,本文引入分量函数,将综合评价集Vs进一步简化表述为:

Vs=V∪{v∞}=(v(j)、v∞) 1≤j≤deV(V)

(4)

式(4)中v(j)为集合V的分量函数形式,既可表示V中的分量全集所构成的向量,亦可表示V中任意分量,(v(j)、v∞)为Vs的分量函数形式,用于表示Vs所含的全部分量(元素)。

综合评价集Vs的度定义为:

deV(Vs)=deV(V)+deV({v∞})=deV(V)+1=m+1

(5)

称式(3)所述综合评价集Vs的度为m+1度。

综合评价集Vs可同时作为对测试评价因素层次结构中各评估对象进行定量评价、对全系统的失效程度进行评判的等级标尺,将测试过程中发现的具体软件问题或缺陷的严重性标定与系统整体失效程度及质量状态的评判统一至同一个评判维度。

定义6(评价因素集set-of-evaluating-elements):评价因素(evaluating element)为影响或制约评估对象的某一具体要素或特性。影响和制约某一评估对象的所有评价因素的全集构成评价因素集。

设U表示包含n个评价因素的评价因素集,则:

U={u1,u2,…,ui,…,un}

(6)

评价因素集U中所包含的评价因素的数量称为该评价因素集的度,表示为deU(U),称U为deU(U)度评价因素集,以式(6)为例,其表示U为n度。

评价因素在测试评价因素层次结构中同样具有相对性,测试评价因素层次结构中除顶层根节点外的任一节点均可视为其紧邻上一层母节点的评价因素(该母节点为该因素的评估对象),如图1所示。

定义7(评估原子集atomy evaluating scope):评估原子集定义了实施失效评估的最小分析范围(分析对象),包括评估对象及该其对应的评价因素集。

令ES为评估原子集,则ES可表示为序偶形式:

ES=[et,U]

(7)

其中:et为评估对象,集合U为et对应的评价因素集。在测试评价因素层次结构中,任意评估原子集表示某一非叶子节点et(评价对象)以及其下一层所有子节点集合U(评价因素集)所构成的有序偶。

2 单因素实测评价

(8)

若ui所发现的问题规模(数量)为si,令:

(9)

(10)

(11)

1)“0项增量”对应分量rti∞的取值范围为(0,1);

2)rti(j)与rti∞的取值呈现非零互斥性,即:

针对单因素ui的实测评价的实质是构建论域为综合评价集Vs的模糊子集,以此实现基于实测问题规模的单因素模糊评价。由于单因素实测评价是对具体评价因素实施的独立评价,故无需考虑评价因素的权重因素的影响。

3 单评估原子集失效评估

(12)

(13)

3.1 单评估原子集失效评估一般形式

设经测试,et所发现的软件问题规模为Set,则:

(14)

(15)

3.2 构建模糊评价矩阵

3.2.1 单因素模糊评价

(16)

3.2.2 模糊评价矩阵

评价因素集U中全部评价因素的单因素模糊评价结果为n个模糊子集:

(17)

(18)

(19)

3.3 动态权重集

当Set≠0时,综合各评价因素实测问题规模以及各类问题严重性(危害程度)等因素,通过量化各评价因素的失效程度,构建出基于实测的权重分布即为动态权重集。

3.3.1 拓展综合评价集向量

定义5阐述的综合评价集仅标定了测试过程中所发现的各问题的严重性等级,为实现对被测系统的失效度以及质量状态的定量评价,须将综合评价集中任意评价分量由单一语义表述向量化评估、评价等级等多个维度拓展,构建成相应的拓展综合评价集向量。

(20)

(21)

表1 拓展综合评价集分量描述

(22)

3.3.2 评价因素及评价因素集失效度

对∀ui∈U,定义评价因素ui的失效度FLui为:

(23)

评价因素集U的失效度FLU为:

(24)

3.3.3 构造动态权重集

(25)

式(25)中ai为评价因素ui对应的动态权重(1≤i≤n),且ai定义为:

(26)

显然,在Set≠0的情况下,动态权重ai满足非负性和归一化要求:

(27)

3.4 合成算子选取

根据模糊综合评价过程中所选取的合成算子。通常将评价模糊子集的求取分为“模式Ⅰ:M(∧,∨)”、“模式Ⅱ:M(·, ∨)”、“模式Ⅲ:M(∧, ⊕)”、“模式Ⅳ:M(·, ⊕)”、“模式Ⅴ:M(·, +)” 五种模式[16]。∧、∨、⊕运算在评价因素较多等情况下可能导致有用信息丢失,故模式Ⅰ~Ⅳ适用于关注评价对象极限值或突出其主要因素等场合。相比较而言模式Ⅴ:M(·, +)能够保留单因素评价的全部信息,适用于综合考虑各方面因素影响的场合,在实际工程应用中效果较好,但该模式要求参加评估的权重应具有归一化的属性[17]。综合上述分析,本文选取模式Ⅴ作为合成算子,且在动态权重集的设计上进行了归一化处理。

3.5 单评估原子集失效评估

取模式Ⅴ作为合成算子,则有:

(28)

其中:x=1,2,…,m,∞。

4 系统失效综合评估

单评估原子集失效评估本质上属于一级模糊综合评价。实际情况下,针对某一被测系统不仅需要考虑诸多具有模糊性的评价因素,各评价因素之间往往呈现出不同的层次结构(参见定义3所述)。因此对被测系统整体实施系统失效综合评估时,需采用多级模糊综合评价方法。

在图1所示的层次化系统结构中,设根节点为ESroot=[etroot,U1],其对应的评价因素集U1为:

U1={u1,u2,…,ui,…,un}

对U1任意分量ui(i=1,2,…,n)可进一步细分:

Ui={ui1,ui2,…,uij,…,uim}

对ui任意分量uij(i=1,2,…,n;j=1,2,…,m)继续进行细分:

Uij={uij1,uij2,…,uijk,…,uijp}

如此迭代划分,直至各叶子节点。

图2 SFSE模型(系统失效评估模型)总体流程

5 实验及分析

在某型系统软件测评过程中,以软件测试实测数据作为输入,采用SFSE模型实现对被测系统软件质量状态的量化评价。

首先,基于GJB2786构建综合评价集Vs:

Vs=V∪{v∞}={v1,v2,v3,v4,|v∞}=

{致命,严重,一般,轻微,|无问题}

之后,综合分析被测系统功能、技术性能指标以及被测软件各需求项,梳理出被测系统对应的测试评价因素层次结构,如图3所示。

图3 某型系统软件测试评价因素层次结构示意图

软件测试执行完毕后,汇总、分析测试问题,得到所有叶子节点相关实测数据(如表2所示),图3所述评价因素层次结构中其它非叶子节点的实测数据可由相关叶子节点实测数据汇总得到。

表2 某型系统软件测试问题分布分析

单因素实测评价所有叶子节点,结果如图4所示。

图4 单因素实测评价结果

自底向上逐层实施失效评估。最底层C层所有节点均为叶子节点,B层中B6、B8、B9、B10、B11、B12、B13、B15均为叶子节点,直接置单因素实测评价为相应节点评价结果即可(如图4、图5所示)。

对B2节点,根据2.2(2)节介绍的方法求取模糊评价矩阵为:

根据3.3(3)节介绍的方法,求取B2节点动态权重集:

节点B2的单评估原子集失效评估结果为:

同理,B5节点单评估原子集失效评估结果为:

按照上述方式单评估原子集失效评估B层其它所有非叶子节点。最终得B层失效评估结果如图5所示。

图5 第2层(B层)失效评估结果

同理可得A层失效评估结果如图6所示。

图6 第3层(A层)失效评估结果

完成根节点UTS下所有层节点的失效评估后,对被测系统实施失效评估。求取根节点模糊评价矩阵为:

根节点UTS的动态权重集为:

被测系统UTS的系统失效评估为:

4.032 3

最后根据量化评价获取被测系统UTS的评价等级及评价结语:由于ValUTS=4.032 3∈(2,5],故对UTS的评价级别为Ⅲ级,对应的质量状态评价结语为“一般”。

6 结语

SFSE模型通过引入动态权重集、拓展综合评价因素集等方式,以软件测试所发现的问题规模、问题严重等级作为输入,以拓展综合评价因素集评估量值等分量作为调节手段,充分利用软件测试过程中软件问题确认、软件问题严重等级确定等既有成果,消除了传统AHP-Fuzzy模型中人为主观因素的影响。验证实验采用MATLAB仿真实现了SFSE模型,并在无人工干预的情况下以自动化的方式对被测系统及软件的质量状态实施了量化评估。经实验验证,SFSE模型适用于软件编程的自动化实现,可行性好,可直接应用于软件测试活动工程化实践,具有较强的实用价值。

猜你喜欢
软件测试节点评估
基于RSSI测距的最大似然估计的节点定位算法
两款输液泵的输血安全性评估
软件测试方向人才培养“1+X”融合研究
分区域的树型多链的无线传感器网络路由算法
基于图连通支配集的子图匹配优化算法
大数据背景下软件测试技术的发展
核电工程建设管理同行评估实践与思考
第四代评估理论对我国学科评估的启示
基于点权的混合K-shell关键节点识别方法
铜川探索党建工作绩效第三方评估