蒋 剑,蒋志刚,欧阳超,蒋 鹏,陈 柯
(湖南中车时代通信信号有限公司,湖南 长沙 410005)
当今嵌入式系统在越来越广泛的领域得到应用,其高质量的运行对业务的完成甚至人类的安全往往是至关重要的。嵌入式系统的可靠性很大程度上要依赖于软件的可靠性,因此开发高质量的嵌入式软件对嵌入式系统的推广和应用具有重大的意义。软件质量是软件符合明确叙述的功能和性能等需求及文档中明确描述的开发标准的程度[1]。对软件质量进行评估是软件测试的一个重要的目的[2]。目前软件质量相关标准只是在理论上提供了指导规范,在实践中缺乏可行性方法;而现有软件质量的评价方法也存在对评价指标因素的权重赋值具有主观性、运用模糊综合评价方法建模复杂等不足。软件测试人员完成测试项目后,由于没有软件质量量化评价的统一标准,因此无法对软件质量给予一个科学客观的评价。对于软件测试人员而言,需要一种简单易行、科学客观、基于测试数据的软件质量度量方法。为此,本文基于层次分析法,提出一种比较客观可行的嵌入式软件外部质量评价方法。
建立嵌入式软件产品质量模型的依据一方面来自嵌入式软件本身固有的特点,另一方面来自应用对嵌入式软件的需求。标准GB/T 30961—2014《嵌入式软件质量度量》规定了嵌入式软件的内部质量模型、外部质量模型和使用质量模型。
内部质量是从软件内部角度观察到的软件属性的总和。嵌入式软件的内部质量不受其他软件及硬件的影响,是反映在软件本身的模块及架构满足软件明确和隐含需求的能力,因此白盒测试及静态分析的数据可以用于内部质量的评价[3]。
外部质量是从软件外部角度观察到的软件属性的总和。嵌入式软件的外部质量会受到其他软件及硬件的影响,评价嵌入式软件的外部质量需要把被评价软件与其他共存的软件及硬件作为一个整体来考虑,因此黑盒测试的统计分析数据可以用于外部质量的评价[3]。
使用质量是从用户角度观察到的软件属性的总和,它反映了软件在真实的系统环境下满足用户质量要求的能力,因此用户质量数据可以用来评价使用质量[3]。
本文针对外部质量模型,规定其应具备6种特性,即功能性、可靠性、易用性、效率、维护性和可移植性;这6种特性又可进一步细分为26种子特性(图1)。
图 1 嵌入式软件外部质量特性分层图Fig.1 Layered diagram of embedded software external quality characteristics
嵌入式软件的外部质量是该软件在执行时通过测量外部属性表现出来的质量[3]。因此,通过测试数据来评价软件质量的方法是科学、合理且客观可行的。由于嵌入式软件的外部质量会受到其他软件或硬件的影响,因此评价嵌入式软件外部质量时,必须把被评价的软件和与其共存的软件及硬件作为一个整体来考虑。
软件测试时,可根据标准GB/T 30961—2014的外部质量评价的测量元从外部质量评价的角度来设计嵌入式软件确认测试的测试用例。一般而言,嵌入式系统对软件的功能性、可靠性、效率和可维护性要求较高,测试时需要重点关注。不同类型的嵌入式系统对易用性和可移植性的需求可能不同。用户交互较多的浅度嵌入式系统(如显示器、键盘及鼠标)较之于用户交互较少的深度嵌入式系统,在易用性和可维护性方面要求更高。
在完成嵌入式软件的测试后,对该软件的外部质量评价过程大致可分为4步,即明确评价要求、设计评价方式、执行计算模型和求取评价结果[4]。下面将具体介绍如何使用该方法评价软件外部质量。
软件外部质量特性评分过程包括软件缺陷量化、缺陷计分、软件外部质量特性度量。
2.1.1 软件缺陷量化
软件缺陷是软件质量评价的直观依据。根据严重性程度,一般将嵌入式软件的缺陷分为4个等级,即致命、严重、一般和轻微。
致命是指不能正常工作或重要功能丧失或危及人身安全。
严重是指严重影响基本功能的实现且没有办法更正,如系统功能受到影响,或次要功能丧失。
一般是指影响系统要求或基本功能实现,但存在合理的更正办法,不影响用户使用,如提示信息不太准确或用户界面差或操作时间较长。
轻微是指使操作者不便或遇到麻烦,但不影响系统正常工作及功能执行。
2.1.2 缺陷计分
进行软件测试时,通常根据软件质量模型进行测试用例的设计。如此执行测试后,会形成一个缺陷矩阵。其中,i为软件质量特性数,a1i表示第i项质量特性缺陷等级为严重的缺陷数,a2i表示第i项质量特性缺陷等级为一般的缺陷数,a3i表示第i项质量特性缺陷等级为轻微的缺陷数。
在缺陷等级赋分矩阵k和缺陷矩阵a构造完成后,可以计算得出缺陷计分矩阵A=k×a。
2.1.3 软件外部质量特性度量
对软件各质量特性,参考文献[5]中的度量方法,采用式(1)进行度量:
式中:Xi——第i个软件外部质量特性的度量值;Ai——缺陷计分矩阵A第i个元素;Bi——第i个软件外部质量特性对应设计的用例数。
可以看出,0≤Xi≤1.0,Xi越接近1.0越好。
欧阳锋双腿发软,就差没跪在地上:“对不起,大哥,大姐,都怪我,我喝醉了酒,做了不该做的事,可我真的不是故意的,请原谅!”
计算出软件外部质量特性度量评分值后,使用矩阵X=[X1X2…Xi]来存储评分值。
软件质量整体评价是采用层次分析法(analytic hierarchy process,APH)对各软件质量特性进行两两比较赋予权重。APH由美国运筹学家Satty于20世纪70年代提出,是一种定性与定量相结合的网络系统权重决策方法[6]。
软件质量整体评价过程包括构造判断矩阵、确定权重、检验判断矩阵的一致性和软件质量综合评价。
2.2.1 构造判断矩阵
判断矩阵是相对比较法的改进,它将所有指标列出来,对各指标两两比较打分后组成一个方阵。根据人们日常对事物的比较心理,可以定义各指标两两比较的判断准则,具体如表1所示。依据表1,对质量特性进行层次级量化,构造判断矩阵C。
表 1 评判准则表Tab.1 Criteria table
2.2.2 确定权重
软件外部质量特性的权重是指软件外部质量特性占整个软件外部质量的比重,其反映了各质量特性对软件产品质量的影响程度[7],可采用求根法计算判断矩阵的权重。
首先,判断矩阵C按行求得几何平均数,得到判断矩阵特征向量M=[m1m2…mn],其中n为判断矩阵C的列数;然后对M进行归一化处理,就可得到判断矩阵的权重向量W=[w1w2…wn]T。
2.2.3 检验判断矩阵的一致性
由于判断矩阵自身存在主观性,可能与现实有误差,所以需要对判断矩阵进行一致性检验。当判断存在不一致时,就必须对判断矩阵进行修正。
表 2 平均随机一致性指标数值表Tab.2 Average random consistency index table
当CR<0.1时,认为判断矩阵具有可以接受的一致性;当CR≥0.1时,就需要调整判断矩阵,使其满足CR<0.1,从而具有满意的一致性。
判断矩阵的权重及其一致性检验的具体算法参见参考文献[8]。
2.2.4 软件质量综合评价
在算出软件外部质量特性评分值矩阵和外部质量特性判断矩阵的权重向量后,就可以计算出软件外部质量综合得分S=(XW)×100。本文采用标准GB/T 32904—2016《软件质量量化评价规范》和参考文献[9]的质量评价等级标准进行质量的综合评价划分,其中90≤S≤100为优秀,80≤S< 90为良好,60≤S< 80为合格,60分以下为不合格。
本文以LKJ-15型车载控制软件测试项目某轮次测试的情况为例,说明软件外部质量方法。该软件是深度嵌入式软件,对易用性和可移植性要求较低,但对功能性、可靠性、效率和可维护性有较高的要求,所以测试时根据需求及系统的特点有针对性地设计了测试用例。
针对功能性的测试,主要关注点在于:
(1)功能是否成功且稳定实现;
(2)与需求对应是否有功能遗漏;
(3)计算结果是否在预期结果的可接受范围内以及计算精度是否满足要求;
(4)功能是否遵从已发表的相关行业标准等文件的规定。
针对可靠性的测试,主要关注故障的检出情况、设备长时运行测试、容错性测试及失效发生后的复原性测试。
针对易用性的测试,主要关注用户使用帮助文档是否正确、是否易理解。
针对效率的测试,主要关注系统启动时间、系统周期响应时间、数据吞吐量。
针对可维护性的测试,主要关注测试软件记录信息是否正确且完全、测试设备自检及诊断信息是否正确、测试设备监控信息是否正确、测试软件更换是否方便。
针对可移植性的测试,主要关注软件在两种不同外围硬件配置下的运行情况。
进行质量特性评分时,首先需构造缺陷矩阵。经统计,该设计测试用例总数954个,其中功能性851,可靠性17,易用性1、效率10、可维护性74、可移植性1。发现缺陷总数152个,其中功能性126,可靠性17,易用性0、效率9、维护性0、可移植性0,缺陷按严重性等级分布如表3所示。
表 3 缺陷分布表Tab.3 Defect-distribution table
根据缺陷分布表,首先构造缺陷矩阵:
接着,构造缺陷等级赋分矩阵。根据以往测评经验,对该软件的严重、一般和轻微这3个缺陷等级赋分(其中严重等级为3.6,一般等级为2.5,轻微等级为1.0),则其缺陷等级赋分矩阵k= [3.6 2.5 1.0]。
然后,计算缺陷计分矩阵,得到A=ka= [ 296.6 6.0 0 3.0 22.0 0]。
最后,根据式(1)计算软件外部质量特性评分矩阵X,其中B=[851 17 1 10 74 1],得到X=[0.65 0.65 1.0 0.7 0.7 1.0]。即该软件的功能性和可靠性评分为0.65,易用性评分为1.00,效率和可维护性评分为0.70,可移植性评分为1.00。
对嵌入式软件质量进行综合评价时,首先计算判断矩阵权重。根据嵌入式软件固有特性及LKJ-15型车载控制软件需求,对外部质量特性的重要程度进行比较:功能性≥可靠性>效率>可维护性>易用性>可移植性,根据表1评判准则,对各质量特性进行层次级量化。如功能性与可靠性相较,认为重要性差不多,相对功能性更重要,比较后评分为2,而可靠性相较于功能性则评分为1/2;功能性与易用性相较,认为功能性相当重要,比较后评分为7,而易用性相较于功能性则评分为1/7。由此构造如表4所示的判断矩阵。计算判断矩阵的权重向量,得到
W=[0.382 0.303 0.043 0.164 0.083 0.024]T。
表 4 判断矩阵表Tab.4 Judgment matrix
接着,检验判断矩阵的一致性。根据计算,得到判断矩阵最大特征值,一致性指标。由此查表,得到RI=1.26,则一致性指标。由于CR<0.1,因此判断矩阵的一致性是可以接受的。
最后,进行质量评价。通过计算,得到质量综合评分S=(XW)×100=68.6。由于60≤S<80,可以判断此软件的外部质量评价为合格。
质量评价方法涉及矩阵运算。即使只分析一级质量特性,构造的判断矩阵也都是6阶矩阵,计算量较大,需要编程实现该评价方法。下面给出几种关键算法(伪代码):
图2示出本文实例的质量评分界面,对应的软件质量度量程序可以满足一级质量特性的外部度量计算,输入为各质量特性的用例数和缺陷数,输出为计算后的质量度量信息。
图 2 界面截图Fig.2 Screenshot of interface
本文依据标准GB/T 30961—2014的嵌入式软件质量模型,提出了一种嵌入式软件外部质量定量评价的方法。该方法科学客观地评价了软件的质量,并已通过使用C#编程而实现,为测试者提供了一个实用有效的软件质量评价手段。
软件质量的评价依赖于测试集数据,这要求在测试用例集设计时应考虑更多与质量相关的因素,如缺陷的严重性评价是否客观、用例设计是否充分合理等,这样才能使质量评分更准确、软件质量评价方法更客观和公正,这也是下一步工作中需要进行更深入研究的方面。