一种按类组织执行轨迹的面向对象程序缺陷定位方法

文档序号:6603294阅读:179来源:国知局
专利名称:一种按类组织执行轨迹的面向对象程序缺陷定位方法
技术领域
本发明涉及面向对象软件程序测试中的自动化辅助缺陷定位,特别涉及存在较多 测试用例和大量测试记录的情况下,有效组织和利用测试用例的执行记录,通过比对代码 块覆盖轨迹定位软件程序中的缺陷位置。
背景技术
软件产品的质量和可靠性直接同软件程序中隐含的缺陷数量相关。传统手工的缺 陷定位方法要求程序员熟悉软件内部结构,效率低下。随着软件测试自动化的普遍应用,测 试阶段产生的大量测试信息都能被记录下来。自动化的软件缺陷定位技术可以充分利用这 些信息来辅助定位软件程序中的缺陷,提高软件产品的质量。基于执行轨迹的缺陷定位方法通过分析执行通过和未通过的测试用例对被测程 序的覆盖记录,以定位具有高怀疑率的缺陷位置。该方法不需要关于被测程序的预先知识, 而且能和自动化测试紧密结合。该方法的缺陷定位效果与测试用例的选择密切相关,如果 选择的测试用例太少,那么计算的误差较大,缺陷定位的效果较差;如果选择的测试用例太 多,存在大量不相干的测试用例,也会混淆缺陷定位的结果。在自动化测试环境下,存在大 量的测试用例和测试记录,有效的测试用例选择方法能够排除冗余测试用例的干扰,提高 缺陷定位的效果。在基于执行轨迹块相似度的软件缺陷定位方法中,测试用例的执行轨迹表示为一 维向量,利用向量余弦夹角判定测试用例间的相似度;然后分三种情况计算语句块的怀疑 率。该技术没有考虑面向对象程序中测试用例执行轨迹分层组织的特点,计算怀疑率分多 种情况,需要进一步考虑怀疑率计算的一致性。

发明内容
本发明的主要目的是针对自动化软件缺陷定位方法面临的大量测试记录筛选问 题和缺陷位置精确定位问题,提出一种按类组织执行轨迹的面向对象软件程序缺陷定位方 法,该方法可以辅助程序员快速定位软件程序中的缺陷,提高缺陷定位的效率。为实现上述目的,本发明采用如下的步骤1)首先对被测程序的代码进行插装,执行插装后的被测程序;之后收集测试用例 的执行记录,该执行记录的基本覆盖单元是语句块,被测程序视为语句块集合;根据执行记 录将测试用例按照通过与否分组;2)整理测试用例的执行记录并组织测试用例执行轨迹,按照类为单位将执行轨迹 划分成不同的段,当对于给定的某一类,测试用例执行了该类,则执行了该类的各测试用例 是相似的,反之则不相似;3)针对给定的语句块,按类相似度选择用于计算其怀疑率的测试用例,类相似度 是指测试用例执行到该语句块所在的同一个类,即执行到该类中的至少一个语句块;4)根据所选择的测试用例执行轨迹对该语句块的覆盖情况计算语句块的怀疑率;5)根据语句块怀疑率排序提交缺陷定位报告,记录每一个语句块的代码位置。上述步骤2)中确认测试用例执行了给定类,指测试用例覆盖该类,当且仅当该测 试用例执行到类中至少一个语句块,又称测试用例的执行轨迹包含该类。上述步骤3)的测试用例选择具体步骤是对于给定语句块bp找到语句块所在的 类,选择覆盖该类的所有测试用例,构成语句块的相关集S (bj),公式描述如下
|1若用例纟轨迹巧包含类 "7) = <[o轨迹化不包含类C 上述步骤4)中所述的覆盖情况分三种情况1,没有未通过的测试用例执行该语句块,此时语句块b/杯疑率sus (bp为0;情况2,只有未通过的测试用例执行到该语句块;情况3,同时有通过和未通过的测试用例执行到该语句块。当按情况2和情况3计算语句块怀疑率,此时NSf (bp是…相关集S(bj)中未通过 的测试用例总数;NSp(bp是h相关集S(bp中通过的测试用例总数;Nf(bp是覆盖语句块 bj但未通过的测试用例总数;Np(bp是覆盖语句块bj且通过的测试用例总数;按下述公式 计算怀疑率SUS(I3j),其中对于情况2,Rp(bp值为0,

本发明方法充分利用面向对象程序特点,按类组织测试用例执行轨迹。类是面向 对象程序的基本组成单位,通常具有高内聚性和低耦合性。类内代码间的相关性远远大于 类间代码。同传统基于执行轨迹缺陷定位方法相比较,不加区分的选择所有测试用例执行 轨迹完成缺陷定位势必降低缺陷定位效果;基于轨迹相似性如余弦夹角则一次性选定候选 测试用例,没有考虑程序结构和不同语句块的特殊性。对于给定语句块,适于该语句块怀疑 率计算的测试用例往往不同于其他的语句块。本发明方法反映了这一要求。根据开源软件 的缺陷定位实验表明本发明方法的缺陷定位效果优于基于执行轨迹相似性的缺陷定位方 法,而后者又优于传统不加选择的缺陷定位方法。


图1是按类组织执行轨迹完成软件缺陷定位方法的技术框架,图2是一个简单的被测程序和相关测试用例的执行记录,图3是一个示例程序中按类组织测试用例执行轨迹,图4是计算语句块怀疑率的流程图,图5是单缺陷版本软件缺陷定位效果的比较图,
图6是多缺陷版本软件缺陷定位效果的比较图。
具体实施例方式图1所示为按类组织执行轨迹完成软件缺陷定位方法的技术框架。框架的输入是 被测程序和测试用例;输出是缺陷定位报告。技术框架分成五个阶段通过插装代码收集 测试记录;组织测试用例执行轨迹;针对语句块选择测试用例;计算语句块的怀疑率;完成 缺陷定位报告。首先执行插装后的被测程序,收集测试执行记录。执行记录的基本覆盖单元是语 句块,一个语句块是在任何输入下执行情况都相同的程序代码块或表达式集合。被测程序 被视为语句块集合P= Ib1, b2,...bN},其中h代表第j个语句块。测试用例集T= It1, t2,...,tn},其中ti代表第i个测试用例。每个测试用例执行后有两种可能的结果通过 (Pass)或未通过(Fail)。按照测试用例是否通过,测试用例集T被分成两个互不相交的集 合Tp和Tf,Tp是通过的测试用例集合,Tf是未通过的测试用例集合。图2所示为一个简单 的被测程序及其测试用例的执行记录。按图2,测试用例、在被测程序P上的一个执行记录可以用执行轨迹汍来表示, tA是被、执行(覆盖)了的语句块序列。如图2中测试用例、对应的执行轨迹tri= (1, 1,1,1,0,1,1,0,0,0,0,0,1),其执行结果是通过(Pass);测试用例、对应的执行轨迹tr6 =(1,1,1,1,0,1,1,0,0,0,0,0,1),其执行结果是未通过(Fail)。当所有的测试用例执行 后,测试用例集τ对应一个执行轨迹集TR,TR可以表示为一个矩阵,矩阵的行代表组成被测 程序的语句块;矩阵的列代表单个测试用例。然后是对测试用例执行轨迹进行组织。考虑面向对象程序的特点,我们认为类是 面向对象程序的基本组成单位,良好编程的类具有高内聚性和低耦合性,同一类中代码间 的相关性远远大于不同类之间代码的相关性。根据这一思想,可以按照类为单位将执行轨 迹划分成不同的段,以此判断各个测试用例之间的相似性。一个测试用例执行(覆盖)了 一个类当且仅当这个测试用例的执行轨迹至少包含了该类中的一个语句块。图3所示为一 个示例程序中按类组织测试用例的执行轨迹。按图3,测试用例、的执行轨迹tri在类一级可表示为tri = (1,1,0),在语句块 一级可表示为 tr1= (1,1,1,0,1,1,1,0,0,0,0),或综合表示为 tri = ((1,1,1), (0,1,1, 1),(0,0,0,0))。类似的测试用例、的执行轨迹廿6可表示为类级-tr6= (0,1,1),语句 块级 _tr6= (0,0,0,0,1,1,1,0,0,1,1),或综合-tr6= ((0,0,0), (0,1,1,1), (0,0,1,1))。
通过比对执行轨迹可以发现,对类C2,用例、和t6是相似的;而对于类C1和C3,用例、和 t6是不相似的。再后是在语句块一级针对每一个语句块,选择用于计算语句块怀疑率的测试用 例。给定语句块,执行了该语句块所在类的测试用例都是与其相关的,而没有执行该语句块 所在类的测试用例都是与其无关的。根据这个特征为每一类(段)中的语句块选择与语句 块相关的测试用例,公式如下。 S(bj) = Ui I Si(J) == 1} (2)给定语句块…(bj属于类C),对每一个测试用例公式⑴的δ i (j)定义用例ti 是否与语句块h相关。而公式(2)的S(bp定义了一个测试用例集合,包含所有在类一级 同语句块h相关的测试用例,这些测试用例对于类C是相似的。接下来基于选定的测试用例计算语句块的怀疑率。针对语句块bp定义以下标记NSf (bj :bj相关集S(bp中未通过的测试用例总数;NSp (bj) :bj相关集S (bj)中通过的测试用例总数;Nf (bj)覆盖语句块…但未通过的测试用例总数;Np (bj)覆盖语句块bj且通过的测试用例总数;公式(3)显示了这些标记之间的关系。其中|S(bp I表示集合S(bp包含的测试
用例数量。NSf (bj)+NSp (bj) = S (bj)Nf (bj) ^ NSf (bj)(3)Np (bj) ^ NSp (bj)对于程序中的每一个语句块,计算它被通过的和未通过的测试用例执行的比例, 如果被未通过测试用例执行的比例大,则其含有缺陷的可能性就越大;反之,如果被通过的 测试用例执行的比例越大,则其含有缺陷的可能性就越小。计算怀疑率关注的重点在各语 句块间怀疑率的相对大小,而不是绝对大小。怀疑率计算需要满足以下四个准则1.当一个语句块没有被未通过测试用例执行时,它是安全的。在代码审查时,将不 会被审查,即缺陷只存在于未通过的测试用例执行轨迹中。2.当语句块只被未通过的测试用例执行,而没有被通过的测试用例执行时,则执 行了该语句块的未通过测试用例在所有相关的未通过测试用例中的比值越高,该语句块含 有缺陷的可能性就越大,应该优先被审查。3.当语句块被通过的和未通过的测试用例都执行了时,则查看其被通过的和未通 过的测试用例执行的比例,如果被未通过的测试用例执行的比例大于被通过的测试用例执 行的比例,则该语句块有可能含有缺陷,且大于量越多则含有缺陷的可能性越大。4.如果某个语句块只被未通过的测试用例执行,而没有被通过的测试用例执行, 而另外一个语句块被相同比例的未通过的测试用例执行,同时也被通过的测试用例执行, 那么前者应该比后者优先被审查。按照上面的四条准则,公式(4)计算执行了语句块的通过的测试用例在与其相关 的所有通过的测试用例中的比例Rp(bj ;公式(5)计算执行了语句块的未通过的测试用例 在与其相关的所有未通过的测试用例中的比例Rf (bp。
对应于准则1,Rf (bj)的值为0。对应于准则2,Rp (bj)的值为0,于是语句块bj的 怀疑率主要由Rf (bp决定。对应于准则3,需要综合考虑Rf (bp ^P Rp(bj)值的影响。为此 公式(6)计算Φ (b》,用以反映语句块被未通过测试用例执行的相对比例。计算Φ (b》不直接使用Np(bp iPNf(bj)是因为在测试用例中,往往通过的测试用例个数远远大于未通过
的测试用例个数,直接用绝对个数计算会产生较大的误差。

(6)对应于准则2的情况,Φ (bi)的值为最大值1。对应于准则4,同时考虑到怀疑率 计算的一致性,公式(7)给出语句块怀疑率SUs(I3j)的计算式。不难发现,公式(7)计算的 语句块怀疑率是一致的,符合四个准则的要求。
(7)图4所示为计算语句块怀疑率的流程图。流程图的输入条件是程序P至少包含一 个语句块,测试用例集T中至少包含一个未通过的测试用例。图4中情况①对应准则1,表 示语句块…没有被未通过的测试用例执行,此时语句块…的怀疑率为0。情况②对应准则 2,表示语句块bj仅被未通过的测试用例执行,此时Rp (bj的值为0,语句块bj的怀疑率等 于Rf (bp ;相对于同时被通过和未通过测试用例执行的语句块,其怀疑率值更高。按照怀疑率从大到小的顺序将语句块排序,程序员将按照顺序逐一审查语句块, 于是程序员是否能够尽快找到实际缺陷,与实际缺陷在序列中的位置直接相关。如果实际 缺陷在序列中越靠前,则该缺陷能够越早被找到,程序员找到该缺陷所付出的代价也越低; 反之,如果实际缺陷越靠后,则该缺陷被找到的也越迟,程序员找到该缺陷所付出的代价也 越大。如果给序列里面的每个语句块一个编号,实际缺陷语句块的编号可以反映出该报告 的定位效果。编号越小,定位效果越好;反之,编号越大,定位效果越差。根据实际缺陷语句块的编号来给定位报告打分,如公式(8)所示,其中N为程序中 语句块的总数,m为实际缺陷语句块在序列中的编号。Score的分数越高,表示缺陷定位的 效果越好。
(8)为说明本发明在技术上的先进性,我们采用开源程序NanoXML检验缺陷定位效 果。以其16个单缺陷版本做缺陷定位实验,同传统基于执行轨迹的缺陷定位方法做比较, 图5显示了软件缺陷定位效果的比较情况。可以看出,仅在3个版本中两个方法的得分相 同;而在其余版本中,本发明方法的缺陷定位效果都优于传统方法。为进一步检验,以10个3缺陷版本做缺陷定位实验。3个缺陷对应3个Score,取 其中的最优值(Max)和平均值(Mean)。图6显示了多缺陷版本软件缺陷定位效果的比较情 况。可以发现,除了在一个版本中存在例外,其他所有版本中本发明方法的最优Score和平 均Score都优于传统方法。图5和图6的最后一列分别显示的是全部实验的平均值(AVG); 根据平均值,本发明方法的缺陷定位效果优于传统方法。在以上实验中,本发明同传统方法之间的差别不是很大,主要原因是实验中测试 用例数量较少,相互冗余的测试用例数量不多。如果用自动化的测试用例生成方法生成测 试用例,为达到一定的测试覆盖强度,势必存在大量测试用例。在这种情况下,本发明的优 势会更大。
权利要求
一种按类组织执行轨迹的面向对象程序缺陷定位方法,其特征在于包括以下步骤1)首先对被测程序的代码进行插装,执行插装后的被测程序;之后收集测试用例的执行记录,该执行记录的基本覆盖单元是语句块,被测程序视为语句块集合;根据执行记录将测试用例按照通过与否分组;2)整理测试用例的执行记录并组织测试用例执行轨迹,按照类为单位将执行轨迹划分成不同的段,当对于给定的某一类,测试用例执行了该类,则执行了该类的各测试用例是相似的,反之则不相似;3)针对给定的语句块,按类相似度选择用于计算其怀疑率的测试用例,类相似度是指测试用例执行到该语句块所在的同一个类,即执行到该类中的至少一个语句块;4)根据所选择的测试用例执行轨迹对该语句块的覆盖情况计算语句块的怀疑率;5)根据语句块怀疑率排序提交缺陷定位报告,记录每一个语句块的代码位置。
2.根据权利要求1所述的按类组织执行轨迹的面向对象程序缺陷定位方法,其特征在 于步骤2)中确认测试用例执行了给定类,指测试用例覆盖该类,当且仅当该测试用例执行 到类中至少一个语句块。
3.根据权利要求1或2所述的按类组织执行轨迹的面向对象程序缺陷定位方法,其特 征在于步骤3)的测试用例选择。具体步骤是对于给定语句块bp找到语句块所在的类,选 择覆盖该类的所有测试用例,构成语句块的相关集S (bj),公式描述如下|1若用例(轨迹化包含类C C) = 轨迹…不包含类C S(bj) = ItiI δ , (j) ==1}。
4.根据权利要求1或2所述的按类组织执行轨迹的面向对象程序缺陷定位方法,其特 征在于步骤4)中所述的覆盖情况分三种情况1,没有未通过的测试用例执行该语句块,此时语句块比怀疑率sus (bp为0 ;情况2,只有未通过的测试用例执行到该语句块;情况3,同时有通过和未通过的测试用例执行到该语句块。
5.根据权利要求4所述的按类组织执行轨迹的面向对象程序缺陷定位方法,其特征在 于当按情况2和情况3计算语句块怀疑率,此时NSf(bp是h相关集S(bp中未通过的测试 用例总数;NSp (bp是h相关集S (bp中通过的测试用例总数;Nf(bp是覆盖语句块h但未 通过的测试用例总数;Np(bj)是覆盖语句块bj且通过的测试用例总数;按下述公式计算怀 疑率SUS(I3j),其中对于情况2,Rp (bp值为0,R ih、 NAbj)Λι)鄉/㈨SUSibi) = ~,RfSb'\、O
全文摘要
本发明公开了一种快速、准确的按类组织执行轨迹的面向对象程序缺陷定位方法,首先对被测程序的代码进行插装、执行,收集测试用例的执行记录,根据执行记录将测试用例按照通过与否分组;整理测试用例的执行记录并组织执行轨迹,按类为单位将执行轨迹划分成不同的段判断相似性;针对语句块按段相似性选择测试用例;计算语句块的怀疑率;完成缺陷定位报告。
文档编号G06F11/36GK101901185SQ20101018748
公开日2010年12月1日 申请日期2010年6月1日 优先权日2010年6月1日
发明者王新平, 陈道蓄, 顾庆 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1