2. 中国科学院 软件研究所, 北京, 100190
2. Institute of Software, Chinese Academy of Sciences, Beijing 100190, China
随着计算机技术的飞速发展, 笔记本电脑的功能越来越强大, 结构也越来越复杂, 各功能出现的错误种类也随之增加, 这无疑为其软硬件的测试带来诸多不便[1]. 传统的手工测试已逐渐不能满足日益增多的测试任务需求, 因此自动化任务分配就成了笔记本软硬件测试的必然方向, 是笔记本高质量、高可靠性的重要保障[2,3]. 在以往的手工测试过程中, 测试员需要自主区分笔记本的工作状态对每个检查点进行测试, 这无疑是对测试员体力和精力上的双重消耗[4].
近年来, 软件自动化测试技术的出现, 为传统的笔记本测试提供了很大帮助, 节省了更多的人力和财力, 同时也提高了测试的质量, 缩短了研发和上市的周期[5,6]. 但完整的自动化测试工具除了应该包含自动化测试功能外, 还应具有适应笔记本在多种状态下测试的任务自动分配功能. 任务自动分配是自动化测试中非常重要的一环, 可以进一步减少资源开销, 使得自动化测试更加有意义[7].
因此, 本文以笔记本测试的实际需求为切入点, 设计了适应笔记本不同状态和随机性测试的任务模型并实现了自动分配的算法. 使得每次测试任务与每组测试条件间形成一种映射. 这种任务分配方式既能满足测试过程中各种条件的约束, 真实的覆盖所有测试情况[8], 又能使测试员从复杂的任务分配中解放出来, 并且能更好的避免任务分配重复或不足的现象, 提高测试效率[9].
1 测试任务的模型构建笔记本测试的目的是通过较真实地模拟用户的使用场景, 以发现笔记本电脑中比较隐藏的问题和其发生的概率. 通过分析测试要求, 首先提出了用于构建模型的基础概念和条件, 然后再根据各种条件的叠加关系计算实际的任务数据, 最后再以表格的形式较直观的展示模型中数据的分布情况[10].
1.1 任务模型概念与条件由于测试任务的复杂性, 了解相关概念是进行模型构建的前提. 本文基于实际的测试场景, 提出了以下概念和条件:
(1) 检查点: 笔记本电脑每个测试周期中的测试点, 如相机、麦克风、触摸板、触摸屏等. 由于检查点具有扩展性, 因此本文将以十个检查点为例构建任务模型.
(2) 测试周期: 每个测试周期由多个仅测试一次的检查点构成. 测试周期是测试任务的重要组成部分, 也是笔记本完成一次测试的基本单位.
(3) 检查点测试百分比: 每个测试周期中, 某个检查点被测试的概率.
(4) 机器类型: 不同机器型号的笔记本, 测试的检查点不同. 机器类型为同一类型的机器所测试检查点的集合.
(5) 测试计划: 现阶段笔记本一般都有多种使用模式, 如正常笔记本模式和平板电脑模式等, 每种模式的测试可作为一个测试计划. 本文将以正常笔记本模式为例构建任务模型.
(6) 测试状态: 测试状态是指在执行每个测试周期前笔记本的状态, 常见的有睡眠、休眠、重启等. 一种测试计划是由多种测试状态组成.
(7) 状态属性: 状态属性描述的是笔记本以哪种方式进入测试状态, 例如笔记本可以通过电源按钮、开始菜单和关闭盖子等方式进行睡眠状态.
(8) 电量区间: 测试时该笔记本所处的电量区间. 电量区间可根据不同的测试需求进行动态调节, 本文将电量区间分为接通电源和断开电源下1%–50%, 51%–100%这4种情况.
(9) 测试任务: 一次测试任务由相应电量区间下的测试状态, 状态属性和测试周期3部分组成. 每部分的具体参数值可通过算法计算得出.
在笔记本测试过程中, 除了包含以上9种概念外, 任务分配还需要满足一定的条件, 即根据测试对象制定相应的策略[11], 具体如下:
(1) 在同一电量区间下, 测试状态共有集中测试, 随机测试和轮换测试3种测试策略. 集中测试是指连续多个测试周期均在一种测试状态下测试, 直至此种状态规定的次数测试完毕才进入下一种状态测试; 随机测试是指每个测试周期随机选择一种测试状态; 轮换测试是指每种测试状态根据测试周期依次选择.
(2) 在一种测试状态下进行测试时, 状态属性共有3种测试策略, 即集中测试, 随机测试和轮换测试, 形式与测试状态的选择类似.
1.2 测试项计算方法通过上述的概念可知, 测试周期虽然为一次测试的基本单位, 但由于检查点测试百分比和机器类型这两个因素的存在, 每个周期内实际测试的检查点也具有差异性. 在本节中, 暂且抛开测试周期之间的异同之处, 具体分析测试状态、测试属性和电量区间这3个因素在测试周期上的交互关系, 并将满足相同因素的所有测试周期的集合称为一个“测试项”. 文献[12]采用“成对测试算法”来降低测试条件组合数, 但笔记本测试是多条件组合且多次重复的测试, 因此该方法并不适用, 仍需考虑完整的条件覆盖.
为了方便描述, 不妨将测试状态的个数用Ns表示, 每种测试状态设为Si; 同理测试属性的个数为Na, 每种测试属性为Aj; 四种电量区间为B1–B4, 每个电量区间对应的电量数值大小分别为Nb1–Nb4. 再将一个测试计划的总测试周期数设为T, 满足这3种条件下的测试项包含的周期数设为Cijk, 则Cijk与Si、Aj、Bk和T的关系为:
$Cijk = T \times f\left( {Si,Aj,Bk} \right)$ |
其中,
$ f\left( {Si,Aj,Bk,} \right) = 1/Ns \times 1/Na \times Nbk/(2 \times 100) $ |
若因特殊的测试需求, 测试状态、测试属性和测试电量区间不再根据数值平均分配, 而是根据测试方提供的相应比率进行分配, 那么只需改变f(Si, Aj, Bk)的函数式即可. 不妨将不同测试状态下测试周期数所占比率的命名为Psi, 不同测试属性所占的比率为Paj, 4种电量区间所占的比率为Pb1–Pb4. 则f(Si, Aj, Bk)的函数式为:
$ f\left( {Si,Aj,Bk} \right) = Psi \times Paj \times Pbk $ |
其中,
通过以上的计算方法, 可以实现在满足不同的测试条件下将一个测试计划的总测试周期数分为Ns×Na×4种测试项, 每个测试项的测试周期数Cijk与测试条件Si、Aj、Bk相关.
1.3 生成模型数据表格为了方便数据的展示, 采用二维表格形式显示模型数据. 可将十个检查点设置成为二维表格的列, 测试项为表格的行. 并且将测试状态与状态属性两个条件进行合并, 然后再与电量区间条件进行组合. 通过以上分析, 将测试项和检查点测试数表示成一个10×( Ns×4)的二维测试数据表格(10表示为十个检查点), 如表1所示(注意: 数据可根据具体测试需求进行更改; “触控笔”检查点表示只有部分笔记本支持此项测试, 在分配任务时, 需要根据包含此检查点的机器类型, 将此检测点的测试次数100%的分配给特定的笔记本测试).
2 测试任务生成方法
在根据测试特点建立了测试任务模型之后, 则需要生成待测笔记本可以执行的测试任务. 依照测试条件, 电量区间由测试机决定, 不可改变, 因此不作计算; 测试状态和状态属性根据选择的测试策略动态调节; 测试周期将根据机器类型和检查点测试百分比计算生成. 经过上述过程, 生成一份完整的测试任务, 流程如图1.
2.1 生成测试状态测试状态有集中测试, 随机测试和轮换测试3种测试策略, 具体选择哪一种方式可根据测试需求而定. 可以采用一个十进制数来表示每次任务选择的测试状态. 可继续使用Ns, Na, Psi等变量的含义, 另外用S表示该十进制(S可取的值为1–Ns), 用SBik表示每种测试状态下每个电量区间内已测的周期数(表1中SBik的个数为数据行数, 即3×4, 共12种). 则3种策略下S的计算方式为:
(1) 集中测试: 测完一个测试状态的所以周期数再切换到下一个测试状态.
$S = \{ i|num\left( i \right) > 0,1 \leqslant i \leqslant Ns\} $ |
(2) 随机测试: 随机测试策略下状态的选择是根据Psi的值来选择的.
$ S = Min\{ i|Random(1) < \sum\limits_{{i} = 1}^{{Ns}} {Psi} \} $ |
其中, S等于满足
(3) 轮换测试: 根据当前已测的周期数对测试状态个数取模得到结果.
$ S = SBik\% Ns $ |
其中,
2.2 生成状态属性
测试属性也有集中测试, 随机测试和轮换测试3种策略. 可用一个十进制变量A表示每次任务所选择的状态属性, ABjk表示每种状态属性下每个电量区间内已测的周期数. 3种策略下A的计算方式如下:
(1) 集中测试:
$ A = \{ j|num\left( j \right) > 0,1 \leqslant j \leqslant Na\} $ |
(2) 随机测试:
$ A = Min\{ j|Random(1) < \sum\limits_{{j = }1}^{Na} {Paj} \} $ |
其中, A等于满足
(3) 轮换测试:
$A = ABjk\% Na$ |
其中,
机器类型是依据待测试的笔记本电脑的型号和功能, 选择所需测试的检查点集合, 一种集合即为一种机器类型. 该集合可用十位二进制数来描述, 每个检测点对应一位, 若对应二进制位的检查点属于此集合, 则该位为1, 反之为0. 通过上述描述不难发现, 机器类型与待测机之间为一种一对多的关系. 在所有测试开始之前, 可以根据待测笔记本电脑的特点, 设置多个机器类型, 然后在任务分配时, 根据待测笔记本特征选择一种机器类型进行计算.
2.4 生成测试周期生成测试周期首先根据当前测试机所属机器类型的二进制数, 选择测试的检查点. 若某个检查点对应位置为0, 则直接不测; 若为1, 则进一步考虑此检查点的测试概率. 可将当前分配任务的测试机所选择的机器类型中每个检查点的值用MTm表示, 相应地, 所生成的测试周期中每个检测点的值用CPm表示, 每个检测点测试百分比用Pcpm表示, 则CPm的计算方法为:
$CPm = MTm \times (Random(1) < Pcpm?1:0)$ |
其中,
通过上述算法, 可以发现无论是测试状态和状态属性在随机测试策略下的计算, 还是测试周期中每个检查点的计算, 都用到了随机数Random(1)作为参数. 由于随机概率具有不确定性的特点, 很难保证所有任务都能严格按照相应的百分比分布, 因此, 还需考虑设置一个阈值, 并且在每次生成任务时进行阈值判断. 由于测试状态和状态属性在计算测试任务时都会选择其中的一种, 且当某一种测试周期数测试完毕后, 之后的测试任务就只会在剩余的选项中选择, 故不会存在漏测的情况. 对于检查点的计算, 当一个检查点的测试百分比小于100%时, 每次任务中此检查点是否测试完全依照随机概率和测试百分比计算得出, 因此会出现漏测的情况. 可为每个测试项设置一个阈值TH=5, 在计算该测试项内某个检查点是否测试时, 若满足条件:
$ Remainder\left( {Cijk} \right) - Remainder\left( {CPm} \right) < = TH $ |
其中, Remainder(Cijk)为测试项剩余周期数, Remainder (CPm)为检查点剩余周期数
则在接下来的任务分配中, 该检查点的测试百分比会默认升至为100%, 即每次任务都会测试. 可重新计算CPm的值:
$ CPm = MTm $ |
通过上述算法, 可以在每一次任务分配时, 依据选择的测试策略计算出这次任务的测试状态和状态属性, 再根据机器类型和检查点测试百分比生成每个检测点的测试情况并组合成了一个测试周期. 为了表示方便, 测试周期也用十位十进制数替代二进制数来表示, 每位数只有0或1两种数值. 则每次测试任务的组成结构为:
$S\left| A \right|CP1CP2 \cdots CP10$ |
算法伪代码如下所示:
GetTask(battery) { //battery为电池电量区间
s, a=getPara(battery);//获取测试状态和状态属性参数
//生成测试状态state和状态属性attr
switch(strategy) {//选择的测试策略
case 1://集中测试
state=s;
attr=a;
case 2://随机测试
if(sum_p(s–1)<random(1)<=sum_p(s))
state=s;
if(sum_p(a–1)<random(1)<=sum_p(a))
attr=a;
case 3://轮换测试
state=(s++)%num(s);
atrr=(a++)%num(a);
}
while(c<num(c)) {//生成测试周期checkPoint[]
checkPoint[c] = MT[c]*(random(1)<p(c)?1:0);
if(getThreshold(c))//阈值判断
checkPoint[c]= MT[c];
}
task=state+attr+checkPoint[];//生成测试任务
}
3 实例应用与评估 3.1 系统应用目前,采用该模型和算法的系统已应用于上海企顺信息系统有限公司的实际项目中,该企业为联想、戴尔、英特尔等笔记本生产商提供测试服务.以某型号笔记本的测试为例,在测试中共有1台笔记本用作任务分配的服务器,18台用作领取测试任务的测试机. 测试状态为集中测试策略, 状态属性为轮换测试策略,测试检查点个数为15个.所采集的睡眠测试状态下测试任务总计数据如表2所示(该次测试有五种测试状态,大量数据无法全部展示,且数据格式也具有重复性),其中某1台测试机的测试任务如表3所示(该台测试机选择的机器类型中未包含检查点"触控笔").从表中可以看出, 测试任务数据分布能很好的满足实际测试的条件和需求. 除此之外, 该算法可以实现向多台测试机分配任务的同时, 保证一个测试计划中周期数的一致性约束.
3.2 模型与算法评估
任务自动分配的优点是使测试员从复杂的任务分配过程中解脱出来.为了综合评估该算法的实用性,将实现的任务自动分配功能与传统的人工分配做比较, 从一次任务分配时间、人力资源、用户体验、符合测试要求程度四个方面对任务分配进行评估. 表4为任务分配的比较.
通过上述比较可见, 自动任务分配效率远高于人工分配. 该算法的实现充分利用了计算机运算速度快, 处理能力强的特点, 有效的降低了任务分配时间和人力资源开销. 除此之外, 该算法相较于人工而言更能满足测试要求, 可以较真实的模拟测试的随机性和交替性. 总而言之, 自动化测试任务分配模型和算法的实现在自动化测试方面具有更高的优越性和实用性.
4 总结与展望
笔记本测试自动化任务分配是笔记本自动化测试的一个重要组成部分, 实现此部分功能也是迈向全自动化测试的一个重要阶段. 本文从笔记本电脑自动化测试出发, 设计了用于测试任务自动化分配的模型和算法, 从而进一步提升自动化测试的百分比. 从实际测试的效果可以看出, 该算法既能满足复杂条件下的测试需求, 也能进一步解放测试过程的劳动力, 提高测试效率. 当然, 本文设计的算法刚处于初步实用阶段, 在多客户端并发任务分配效率上还有很大的提升空间, 将在以后的研究中进一步改进和完善.
[1] |
陈江勇, 许力, 张辉. Web表单自动化测试工具的设计与实现. 计算机系统应用, 2011, 20(9): 241-244, 177. DOI:10.3969/j.issn.1003-3254.2011.09.057 |
[2] |
邓青华. 软件自动化测试工具研究. 软件导刊, 2011, 10(1): 57-59. |
[3] |
董娜. 自动化测试方法在笔记本代工企业软件测试中的应用. 科协论坛, 2012(6): 89-90. DOI:10.3969/j.issn.1007-3973.2012.06.053 |
[4] |
李玉, 尉双梅, 汪添生, 等. 基于QTP的企业级应用软件自动化测试方法. 计算机系统应用, 2016, 25(6): 219-224. DOI:10.15888/j.cnki.csa.005200 |
[5] |
王兴野. 基于QTP功能自动化测试工具及框架研究. 电脑编程技巧与维护, 2018(4): 52-53, 57. DOI:10.3969/j.issn.1006-4052.2018.04.019 |
[6] |
姜文, 刘立康. 基于Selenium的Web软件自动化测试. 计算机技术与发展, 2018, 28(9): 47-52, 58. DOI:10.3969/j.issn.1673-629X.2018.09.011 |
[7] |
刘金波, 黄海于. 耦合分布式系统多任务动态调度算法. 计算机技术与发展, 2017, 27(12): 16-19. DOI:10.3969/j.issn.1673-629X.2017.12.004 |
[8] |
Sattar H, Bajwa IS, Shafi UF, et al. Automated DD-path testing: A challenging task in software testing. Proceedings of the 9th International Conference on Digital Information Management. Phitsanulok, Thailand, 2014, 230-236. |
[9] |
张晓航, 李国良, 冯建华. 大数据群体计算中用户主题感知的任务分配. 计算机研究与发展, 2015, 52(2): 309-317. |
[10] |
Türkuzan M, Yildirim Y, Atakan HC, et al. A modular, extendible, and reusable test configuration for design verification testing of mission computers. Proceedings of 2016 IEEE Autotestcon. Anaheim, CA, USA, 2016, 1-4. |
[11] |
干晓鸣. 软件自动化测试的合理应用. 计算机应用与软件, 2010, 27(8): 172-174, 214. DOI:10.3969/j.issn.1000-386X.2010.08.052 |
[12] |
Monteiro CBAL, Dias LAV, da Cunha AM. A case study on pairwise testing application. Proceedings of the 11th International Conference on Information Technology: New Generations. Las Vegas, NV, USA, 2014, 639-640. |