1、成员组成
(1)组长:张俊怡
(2)组员:孟令军
2、文献基本情况介绍
(1)文献名称:A HierarchicalTest Case Prioritization Technique for Object Oriented Software
(2)文献作者:Vedpal,NareshChauhan,Harish Kumar
(3)发表时间:2014
(4)文献出处:International Conferenceon Contemporary Computing and Informatics(IC3I)
(5)文献页数:6
3、文献内容概述
这篇论文是IEEE Xplore Digital Library收录的发表在现代计算和信息学(IC3I),2014年国际会议上的论文,文献的主要内容是面向对象测试用例的优先级排序和选择。
文献内容概括:
软件重用是使用现有工件来创建新的软件。继承是重用的最重要的技术。但是由于在面向对象范式中发现的继承层次的内在复杂性也会影响测试。每当软件发生任何变化时,除了现有的测试套件之外,还添加了新的测试用例。因此,需要进行具有较少数量的测试用例的有效的回归测试来降低测试成本和时间。在本文中,提出了一种分层测试用例优先级技术,其中考虑了影响继承中的错误传播的各种因素。在本文中,测试用例的优先级分为两个层次。在第一级,类是优先级大是优先考虑的因素,在第二级中,再排序确定好优先级的类的测试用例。为了展示提出的技术的有效性,本文举了一个例子并且分析了一个C ++程序。
在本文中,提出了分级测试用例优先级,其中优先级处理在以下给出的两个级别上执行:
(1)根据继承属性/方法的数量,继承层次结构中的后代数量和类级别,首先确定类。
(2)以故障覆盖为基础,对优先级最高的类的测试用例进行排序。
文献内容结构:
文章第一部分给出了引言,介绍了本文研究的背景相关知识;第二部分介绍了一些学者的与该研究相关的研究成果;第三部分提出了本文的解决算法给出了相应算法和伪代码;第四部分将算法结合例子进行分析和评估。
4、主要技术、方法的详细阐述(最好结合具体实例阐述)
算法思想分析:
(1)在任何类中的更改之后,较低级别的继承层次结构与上级之间的相互依赖性。继承使子类依赖于超类,并且超类中的更改将直接影响从其继承的子类,即我们必须重新测试其所有子类。因此,它增加了类之间的依赖关系,导致低可测试性。所以,在这种情况下,最好先以类的形式检查控制流,然后优先考虑高度受影响的类,然后是其测试用例;
(2)每个测试用例检测到一些新的或先前检测到的故障:考虑一个类的所有测试用例,并计算每单位时间内检测到的故障数,然后选择第一个测试用例,然后计算每个测试的每单位时间的新故障案例,并选择最好的。新故障意味着被选中的测试用例没有发现。继续重复此过程,直到检测到百分之百的故障;
(3)所提出的工作包括两级优先级,其中第一级优先级涉及对继承层级进行优先级排序,而第二级优先级涉及对每个类的测试用例进行优先级排序;
(4)所提出的技术命令受影响的类旨在快速找到故障。继承层次中错误传播的概率取决于继承属性/方法的数量,继承层次中的类级别和后代类的数量。因此,第一级优先级包括根据该类的后代数量(descendents),继承属性(number of inherited attributes)/方法(methods)的数量以及继承层次结构中的级别来对类进行优先级排序。
算法1:一级优先级
第一级优先级技术使用继承层次结构优先考虑面向对象软件的类。在继承层次结构中,较低级别的类继承上级类的属性。因此,派生类依赖于基类。这种依赖性增加了通过继承层次结构的错误传播的概率。因此,这些类应该按照这样一个顺序进行测试,使得具有更高概率的错误传播的类首先被测试。
继承层次中错误传播的概率取决于继承属性/方法的数量,继承层次中的类级别和后代类的数量。应该为基类分配最高优先级,因为如果任何错误从这个类传播,将会影响整个层次结构。所以这些类应该以可以最小化错误传播的方式来排序。根据继承层次中的类级别,继承属性的数量和后代类的数量,下级的类分配优先级。该技术的核心算法如下:
如果级数小于或等于3,则测试工作可以计算为:Testing effort = (number of descendents + number of inherited attributes/methods) * (4 -level);
如果级数大于3,则测试工作可以计算为:Testing effort = (number of descendents + number of inherited attributes/methods) * (level - 3)。
(后代数量(descendents)、继承属性(number of inherited attributes)、方法(methods))
一级优先级算法伪代码
其中P是完整程序,n是继承层次结构中的级别数。
算法2:二级优先级
第二级优先级是基于每单位时间的故障覆盖率优先考虑测试用例的技术。第一级优先级优先排序的类被输入到第二级优先级,其中每个类别的测试用例被优先考虑。测试用例根据故障重量和故障覆盖进行优先排序。首先检测先前尚未发现并且更为关键的故障的测试用例。
假设有M个测试用例和N个故障,每个故障分配一些权重。
二级优先级算法伪代码解释:
T是原始测试组件,T'是优先测试组件
2.每个测试用例计算每单位时间的故障权重值。
3.按降序排列。
4.从T中删除最好的一个,并将其添加到T'。
5.重复步骤6和7,直到T不为空(也就是每次只添加一个,添加之后得重新计算测试用例的错误权重)。
6.计算每个测试用例每单位时间检测到的新故障的权重。
// New Fault是指T中没有被任何测试用例检测到的故障。
7.从T中删除最好的一个,并将其添加到T'。
8.转到步骤5。
7.返回T'。
具体实验分析与评估:
案例研究由四个类,study,lec_time,sports_time和usetime组成。类study由两个类继承,lec_time和sports_time,lec_time被usetime继承。
案例研究的继承层次一级优先排序:
程序的继承层次结构中有四个类,它们是互连的。所以在回归测试的时候,受影响较大的类将在受影响较小的类之前进行测试。
下表显示了每个类的测试工作以及分配给每个类的优先级。
较低的数字表示较高的优先级,所以从表中可以看出Study优先级最高,Usetime最低。
案例研究的继承层次二级优先排序:
在第二级优先级中,提出了基于每单位时间故障覆盖率的测试用例优先级技术,并说明了使用APFD度量来分析所提出的技术的示例。基于每单位时间的故障检测优先考虑测试套件。所有类的测试用例的优先级顺序如表下图所示。
优先测试用例与课程研究随机测试案例的比较结果实验截图:
5、学习总结
本次阅读英文文献本身就是一种进步,从这篇论文中我学习到了如何分析问题以及提出新的解决问题的方案,在提出解决方案的过程中学会了去大量查阅文献资料,在方案提出后学会了应该通过实验去验证自己提出的算法;
这篇论文比较清晰的提出了测试用例优先级计算的算法,也有实验数据,但美中不足的是它仅仅给出了算法和实验中的最后一步,中间的细节省略了;
使用继承层次和故障覆盖的“面向对象程序的回归测试案例优先级”的提出的技术是节省时间和成本等资源的有益技术。在提出的技术中,根据后代数量,继承属性数量和继承层级中的类级别对类进行优先级排序,以便在继承层次结构中具有高错误传播概率的类别优先。被证明是有效的,因为两级优先级,包括使用第一级优先化技术识别具有较高误差传播度的类别,并且使用每单位时间方法的故障覆盖率优先考虑接收类的测试用例。优先级更高,因为这些类的优先级高,首先将具有高错误传播级别的优先级排在首位,并且首先确定具有高故障检测速率的测试用例。实验评估也使用一个例子进行。为了说明提出的优先化技术的有效性,已经使用了故障检测(APFD)度量的平均百分比。分析表明,与随机测试用例优先级方法相比,所提出的技术更好。
如果还要考虑多重继承,则可以使第一级优先级更高效。如果基类和派生类具有相同名称的函数,则引入歧义。一些技术设计用于处理多重遗传的含糊之处,同时优先考虑测试用例。