A HierarchicalTest Case Prioritization Technique for Object Oriented Software

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)度量的平均百分比。分析表明,与随机测试用例优先级方法相比,所提出的技术更好。

如果还要考虑多重继承,则可以使第一级优先级更高效。如果基类和派生类具有相同名称的函数,则引入歧义。一些技术设计用于处理多重遗传的含糊之处,同时优先考虑测试用例。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pydata

Matlab C混合编程

在MATLAB中可调用的C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MAT...

1142
来自专栏图形学与OpenGL

机械版CG 实验1 像素点的生成

注:本博客实验教程的配套教材为《计算机图形学》(徐文鹏编)已由机械工业出版社于2009年2月出版。

963
来自专栏深度学习之tensorflow实战篇

Core-periphery decomposition--核心-外围模型R代码整理

SNA中:中心度及中心势诠释(不完整代码) Core-periphery decomposition--核心-外围模型R代码整理 本文是从网易博客搬家过来的,...

2793
来自专栏Python爬虫与数据挖掘

浅谈网络爬虫中深度优先算法和简单代码实现

我们今天要学习的内容,主要是给大家普及一下深度优先算法的基本概念,详情内容如下。

651
来自专栏企鹅号快讯

从图灵机开始

说到图灵机,我们首先要说说图灵这个人。笔者觉得我们这种搞计算机的人都应该知道并记得这个人。 图灵,1912年6月23日生于英国帕丁顿。是数学家、密码破译专家,当...

2178
来自专栏诸葛青云的专栏

教你利用Python把图片转字符画!代码哆啦A梦你见过嘛?

图片转字符画的关键是把图片的灰度值与自定义的字符集之间建立映射关系,不同区间的灰度值对应不同的字符,之后将图片每一个像素对应的字符打印出来,就是我们要的字符画。...

3964
来自专栏腾讯AlloyTeam的专栏

png的故事:获取图片信息和像素内容

现在时富媒体时代,图片的重要性对于数十亿互联网用户来说不言而喻,图片本身就是像素点阵的合集,但是为了如何更快更好的存储图片而诞生了各种各样的图片格式:jpeg、...

1.8K0
来自专栏Python爬虫与数据挖掘

浅谈网络爬虫中深度优先算法和简单代码实现

学过网站设计的小伙伴们都知道网站通常都是分层进行设计的,最上层的是顶级域名,之后是子域名,子域名下又有子域名等等,同时,每个子域名可能还会拥有多个同级域名,而且...

1604
来自专栏MyBlog

软件测试方法课程笔记(2)

为了产生少量的测试用例, 并且可以测试大部分的情况, 我们可以使用等价类划分的方法 比如对于输入值是范围值, 我们可以使用等价类划分成范围内的和不是范围内的两...

1472
来自专栏互联网大杂烩

String.hashcode 源码分析

接触编程这么久了,一直会遇到某些高频词,例如,哈希。hashtable,hashmap,hashset等等等。都有hash一次。那什么是哈希值呢?百度本科解释是...

934

扫码关注云+社区

领取腾讯云代金券