叶勇健,谭 超
(厦门华天涉外职业技术学院,福建 厦门 361102)
软件程序规模与复杂程度的增长增加了软件应用的不确定性。为有效保证软件质量,软件测试逐渐成为软件研发中成本最高的项目[1]。软件测试能力、测试效率及测试特点的动态跟踪与定量分析,以及软件测试的持续优化成为目前软件研发中最为迫切需要解决的问题[2]。目前软件测试的研究侧重于如何开展测试过程组织、具体测试方法等,测试评价主要围绕软件缺陷报告、缺陷跟踪与测试进度评价等方面,缺少对软件的动态跟踪及在线评价[3]。导致软件测试中经常出现测试过程按照测试计划开展,但由于测试用例较大导致测试执行有效性缺失的问题,很难在测试过程中发现测试软件薄弱点[4]。根据这一问题,提出基于多维度覆盖率的嵌入式软件测试分析方法。多维度覆盖率的度量方法主要以各种覆盖率分别统计,充分度量测试软件,满足测试充分性原则的同时,综合利用多维度测试覆盖率动态变化特征,对测试方法与测试用例效果及薄弱点进行动态跟踪[5]。多维度覆盖指标以分支覆盖、条件覆盖、语句覆盖及c-use覆盖等十余种测试覆盖度量为指标,根据测试覆盖的不同,从多角度反映软件测试条件[6]。利用多维度覆盖率做出软件测试,试图从多方面阐述软件应用情况。
软件测试覆盖率作为度量软件测试程度的主要手段,其计算公式为
(1)
式中:item为测试因子实例数。
根据式(1),若要对item覆盖情况进行计算,为从不同角度度量软件测试的充分程度,提出多维度测试覆盖指标,用以表示度量测试充分程度[7]。
根据覆盖率指标,提取其特征属性与度量参数,设覆盖率维度为m,则有m种测试覆盖率[8]。由于测试成本与时间的限制,软件测试通常无法达到全覆盖率,根据软件安全关键等级、测试覆盖率难易程度、测试阶段以及开发方法等[9],在软件测试中,当执行完第nitem个测试用例后,为表现实际测试覆盖率所达到的期望值,当前满意度可表示为
Satj(m)=(Cj(m)/Cj)×100%.
(2)
式中:Cj为软件测试覆盖率;Cj(m)为当前测试覆盖率Cj的当前值,且j=1,…,m。
由于会出现实测覆盖率超过覆盖值的情况,即Satj(m)≥1[10],规定
if Satj(m)≥1,
then Satj(m)=1,
即0≤Satj(m)≤1.
(3)
因此,得到测试综合覆盖率定义为
Csyn=f(nitem,t,C,w,Type,θ,Sat).
(4)
式中:C为多维度测试覆盖率参数;w为多维度测试覆盖率优先级因子;Type为测试覆盖率类型;θ为所有软件模块关键性测试影响因子;Sat为所有维度测试覆盖率满意度参数。
通过计算结果与实际相关数据,判断软件测试多维度覆盖率[11]。
根据对软件测试多维度覆盖率的分析,定量描述软件系统测试可靠程度[12]。设定软件测试时在t=0时能够正常运行,那么在测试时间[t,0]时软件测试不发生失效概率,即软件测试可靠性[13]。设软件测试目标时刻为t,如果软件测试过程中失效时刻为a,则分析得到软件测试可靠度为
C(t)=M(a≥t).
(5)
式中:C(t)为软件测试可靠度。
测试中软件间隔时间小于等于目标时刻概率,则其失效概率为
P(t)=1-C(t).
(6)
在失效概率影响下,软件在测试时间内随机执行k个测试用例,得到测试覆盖率平均增长率为
(7)
根据式(7),计算出测试覆盖率的平均增长率,并对连续执行k个测试用例期间发现和排出的软件缺陷增长量作出排序,分析软件测试性能[14-15]。
在对比实验环境中运行基于多维度覆盖率的嵌入式软件测试分析方法,分析该测试方法的实际使用性能。为更好分析实验效果,在同一实验环境下将同样运行目前较为常用的基于目标码的嵌入式软件测试分析方法,通过对比两种实验方法的不同分析其结果。实验中(run-time sytem)系统在计算机程序中执行,提供实验所需运行机制及实验资源。实验采用VisualC++6.0作为运行环境,Intel公司MCS-51系列CPU8051软件进行仿真,虚拟机运行在X86CPU操作系统下。运行时,使用虚拟机为上层应用程序提供1个运行环境,由处理器自身执行程序命令。软件测试需要相关数据,以便针对具体连锁软件测试时能够实现调用相关信息。软件测试数据配置主要分为被测场相关数据与测试接口相关数据,涉及数据主要包括信号机静态数据、区段静态数据以及进路表数据,详细数据如表1—3所示。
表1 信号机静态数据
数据库记录原始测试数据案例、进路数据以及测试结果,根据测试序列生成解析测试结果,判定查询及记录存储与分析结果。测试仅针对软件进行,不依赖硬件采集设备信息,被测软件依据的接收信息来源于仿真平台生成序列关键点。实验中设置进路不能正常建立测试,存在多条路径,形成并联约束条件,根据迁移函数逐个设置信号机错误、道岔错误及区段错误,依据进路编号设置异常,逐步测试直到测试完成。
表2 区段静态数据
表3 道岔静态数据
结合实验自动执行数据,将起始数据作为软件初始状态,结束状态作为软件终止状态,将测试软件的150个测试用例作为实例,按执行顺序执行50个测试用例后,对比多次测试结果。对两种方法进行验证,分析测试软件全功能,其结果如图1所示。
图1 软件测试缺陷率分析结果对比
根据图1可以看出,在随机执行多次测试用例后,分析两组方法测试特点。相比于目标码的嵌入式软件测试分析方法,基于多维度覆盖率的嵌入式软件测试分析方法的测试结果对覆盖率增长效果显示更为明显,按照最优排序,即按照测试软件语句覆盖率大小排序,得到最理想的分析结果。
软件测试中,为了能够定量评价软件测试效果,及时发现软件测试中的薄弱点,需要对其进行测试分析,以保证软件测试的有效性。利用多维度测试覆盖率概念,在软件测试中基于多种覆盖指标度对软件测试可靠性与质量作出分析评价,进一步综合分析软件测试性能。