一种测试用例聚类取样方法

文档序号:6600205阅读:912来源:国知局

专利名称::一种测试用例聚类取样方法
技术领域
:本发明属于软件测试领域,涉及软件测试结果的验证,首先根据执行路径对测试用例进行聚类,然后从各个类簇中抽取测试用例来让人工检查测试结果,通过约简需要人工检查结果的测试用例集来节约人力。本发明主要应用于测试输入的产生和测试用例的执行可以自动完成,但测试结果需要人工比对的场景下,为一种测试用例聚类取样方法。
背景技术
:传统的软件测试方法包括三个步骤1)创建测试输入;2)执行测试用例;3)检查测试结果。软件测试需要耗费大量的时间和人力,但它是确保软件质量的重要手段。为了节约测试成本,研究人员设计出了一些自动化的工具来帮助生成测试输入,执行测试用例和检查测试结果。然而,在操作型测试(如beta测试,领域测试)中,测试结果多样化,无法事先精确的描述清楚,因此需要人工去验证,从而耗费大量的人力。针对这种测试输入的产生和测试用例的执行可以自动完成,但测试结果需要人工验证的情况,DavidLeon等人提出了基于观测的软件测试技术(Observation-BasedTesting),包括三个步骤1)为所有测试用例创建好测试输入;2)执行所有的测试用例,并记录下每个测试用例的执行路径;3)分析每个测试用例的执行路径信息,挑选测试用例来让人工检查其测试结果是否符合需求。因此,基于观测的软件测试技术是通过减少需要人工检查的测试用例数来节约人力,但同时尽可能挑出最多的失败用例以保持测试的有效性。2001年,WilliamDickinson等人用通过实验证明了聚类过滤技术是一种有效的基于观测的软件测试技术,主要包括以下三个步骤1.运行所有的测试用例,记录下执行路径信息。2.根据测试用例的执行路径来聚类,这样具有相似执行路径的测试用例就会被聚到同一个类簇中。3.从每个类簇中取样,挑选出来的测试用例构成了约简后的测试用例集。测试人员只需要对这些测试用例进行验证即可。其中第3步的取样方法会很大程度的影响测试用例集约简的效果。已经有学者提出了以下几种取样方法1)从每个类簇中随机挑选一个(One-per-clusterSampling)在最理想的情况下,相同程序错误导致的失败测试用例都聚在同一个类簇中。要找出所有的程序错误,只需要从每个类簇中随机挑选一个测试用例即可。但实际上聚类的效果不可能那么好,一个类簇中可能混杂了成功测试用例和不同的程序错误导致的失败测试用例。另外,仅根据该错误导致的一个失败测试用例,程序员很难进行错误定位。因此,取样的目标是尽可能找出最多的失败测试用例。2)从每个类簇中随机挑选多个(N-per-clusterSampling)该方法旨在通过挑选更多的测试用例来找出更多的失败用例。但是该方法只是“从每个类簇中随机挑选一个”的简单扩展,它们本质上都是简单的随机抽样,并没有利用任何信息来指导抽样。3)自适应取样(AdaptiveSampling)首先从每个类簇中随机挑选一个测试用例,然后对所有这些测试用例的执行结果进行验证。如果一个测试用例失败了,则它所在类簇中的所有剩余测试用例都会被挑选出来进行验证;否则,该测试用例成功了,则它所在类簇中所有剩余测试用例都被过滤掉。WilliamDickinson等人通过实验证明,该自适应挑选方法要比以上两种简单随机抽样更有效。在约简集大小一样的情况下,该方法能挑选出更多的失败测试用例。然而,这种自适应取样技术的效果很大程度上依赖于第一次随机挑选出的测试用例。如果从一个类簇中随机挑选出的测试用例验证结果为失败,那么整个类簇都会被选中,即使该类簇中成功测试用例占了大部分;同样,如果从一个类簇中随机挑选出的测试用例验证结果为成功,那么整个类簇都会被抛弃,即使该类簇中失败测试用例占了大部分。
发明内容本发明所要解决的技术问题是现有的基于观测的软件测试技术在测试结果检查上不够全面,需要改进现有的“自适应取样”技术,充分利用每个类簇中已被选中的测试用例的执行频谱信息来帮助挑选测试用例,并决定何时停止从该类簇中取样。本发明的技术方案为一种测试用例聚类取样方法,软件测试的测试用例执行后,根据测试用例的执行路径聚类得到多个类簇,在类簇中挑选测试用例进行验证,根据被选中的测试用例的验证结果,计算其所执行的语句的可信度,如果测试用例验证通过,语句可信度增加,反之则减少;如果一个语句的可信度低于给定的阈值,则该语句为可疑语句,可疑语句构成可疑语句集合;根据可疑语句集合计算该类簇中剩余的每个测试用例失败的可能性,某测试用例执行过越多可疑语句其失败可能性越高,挑选失败可能性最高的那个测试用例,然后根据该测试用例的验证结果重新计算各语句的可信度,更新可疑语句集合,并计算未验证的剩余测试用例失败的可能性,挑选下一个失败可能性最高的测试用例来验证其结果;整个取样过程如此重复下去,直到该类簇中所有剩余测试用例的失败可能性都为0,即剩余测试用例的所执行语句均不在可疑语句集合中,取样剩余的测试用例均不再验证其结果,实现测试用例的约简并确保被取样的测试用例中失败测试用例的比例。本发明具体步骤如下1)设聚类后得到m个类簇C1,C2...Cffl,j表示类簇编号,初始化j=1;2)初始化所有语句的可信度为0;从类簇Ci中挑选执行语句最多的测试用例t;3)验证测试用例测试人员验证测试用例t的执行结果,获取反馈信息该测试用例是失败,还是成功;4)计算执行语句可信度根据测试用例t的验证结果,计算语句的可信度,计算语句可信度的公式为confidence(s)=passed(s)-failed(s),即语句s的可信度等于执行过S并且通过的测试用例的个数,减去执行过S并且失败的测试用例个数,也就是如果t验证失败了,则t执行过的所有语句的可信度减1;否则,t成功了,则t执行过的所有语句的可信度加1;5)语句识别根据语句的可信度,将语句识别为可疑语句和可信语句两种,设定一个阈值ConfidenceThreshold,简写为CT,所有可信度小于CT的语句被识别为可疑语句,具体公式为suspicious(S)={seSIconfidence(s)<CT};所有可信度大于或等于CT的语句被识别为可信语句,具体公式为correct(S)={seS|confidence(s)>=CT};可疑语句集和可信语句集之间没有交集胃ΠCW(S)=0.6)测试用例失败可能性度量测试用例t执行过的语句集表示为t(S)={seSltexecutess},测试用例t失败的可能性为其执行过的可疑语句的个数,计算公式为failpossibiIity(t)=11(S)Πsuspicious(S)|;7)选取类簇剩余测试用例中失败可能性最大的测试用例根据计算出来的剩余测试用例的失败可能性,选取其中失败可能性最大的测试用例t’;如果多个测试用例拥有最大失败可能性,则采用随机挑选的方法,从中挑选出一个测试用例t’;8)如果t’的失败可能性值为0,则停止从类簇Cj中取样,j=j+1,如果j<=m则返回步骤2),开始从下一个类簇中取样;如果j>m,即所有类簇都取样完毕后,整个取样过程结束;如果t’的失败可能性值大于0,则返回步骤3),继续从当前类簇中取样。本发明基于观测的软件测试技术中的聚类过滤技术,为一种测试用例聚类取样技术。本发明通过约简需要人工验证的测试用例数来节约人力,同时确保挑选出尽可能多的失败测试用例。取样验证软件测试结果时,本发明取样剩余的测试用例均不再验证其结果,实现了测试用例的约简,节约了人工验证测试结果的时间和精力,同时又确保被取样的测试用例中失败测试用例占很大比例,语句的可信度值可以用来帮助测试人员进行错误定位。图1为本发明的流程示意图。2(a)%3-per-clustersampling,adaptivesampling及本发明ESBS在实验程序PrintTokens上的实验效果图。图2(b)%3-per-clustersampling,adaptivesampling及本发明ESBS在实验程序PrintTokens2上的实验效果图。2(c)%3-per-clustersampling,adaptivesampling及本发明ESBS在实验程序Schedule上的实验效果图。图2(d)%3-per-clustersampling,adaptivesampling及本发明ESBS在实验程序SChedule2上的实验效果图。图2(e)%3-per-clustersampling,adaptivesampling及本发明ESBS在实验程序R印Iace上的实验效果图。图2(f)%3-per-clustersampling,adaptivesampling及本发明ESBS在实验程序Space上的实验效果图。具体实施例方式本发明基于观测的软件测试技术中的聚类过滤技术,在类簇中挑选测试用例进行验证,根据被选中的测试用例的验证结果,计算其所执行的语句的可信度,如果测试用例验证通过,语句可信,反之则为可疑;根据语句可信度计算该类簇中剩余的每个测试用例失败的可能性,某测试用例执行过越多可疑语句其失败可能性越高,挑选失败可能性最高的那个测试用例,然后根据该测试用例的验证结果重新计算各语句的可信度,并计算未验证的剩余测试用例失败的可能性,挑选下一个测试用例;整个取样过程如此重复下去,直到该类簇中所有剩余测试用例的失败可能性都为0,即剩余测试用例的所执行语句均为可信,则经过取样验证的测试用例通过验证结果区分是成功测试用例还是失败测试用例,取样剩余的测试用例均为成功测试用例,实现该类簇测试用例的自动取样。通过或失败的测试用例的语句执行信息在错误定位领域被称为“执行频谱”,由于本发明是基于已被验证测试用例的执行频谱信息来挑选剩余测试用例的,所以可以称为基于执行频谱的取样方法ExecutionSpectraBasedSampling,后面简写为ESBS。如图1,本发明步骤如下1)设聚类后得到m个类簇C1,C2...Cffl,j表示类簇编号,初始化j=1;2)初始化所有语句的可信度为0;从类簇中挑选执行语句最多的测试用例t3)验证测试用例测试人员验证测试用例t的执行结果,获取反馈信息该测试用例是失败,还是成功;4)计算执行语句可信度根据测试用例t的验证结果,计算语句的可信度,计算语句可信度的公式为confidence(s)=passed(s)-failed(s),即语句s的可信度等于执行过S并且通过的测试用例的个数,减去执行过S并且失败的测试用例个数,也就是如果t验证失败了,则t执行过的所有语句的可信度减1;否则,t成功了,则t执行过的所有语句的可信度加1;5)语句识别根据语句的可信度,将语句识别为可疑语句和可信语句两种,设定一个阈值ConfidenceThreshold,简写为CT,所有可信度小于CT的语句被识别为可疑语句,具体公式为suspicious(S)={seSIconfidence(s)<CT};所有可信度大于或等于CT的语句被识别为可信语句,具体公式为correct(S)={seS|confidence(s)>=CT};可疑语句集和可信语句集之间没有交集-AW⑶Π⑶“^⑷=0;6)测试用例失败可能性度量测试用例t执行过的语句集表示为t(S)={seS|texecutess},测试用例t失败的可能性为其执行过的可疑语句的个数,计算公式为failpossibiIity(t)=11(S)Πsuspicious(S)|;7)选取类簇剩余测试用例中失败可能性最大的测试用例根据计算出来的剩余测试用例的失败可能性,选取其中失败可能性最大的测试用例t’;如果多个测试用例拥有最大失败可能性,则采用随机挑选的方法,从中挑选出一个测试用例t’;8)如果t’的失败可能性值为0,则停止从类簇Cj中取样,j=j+1,如果j<=m则返回步骤2),开始从下一个类簇中取样;如果j>m,即所有类簇都取样完毕后,整个取样过程结束。如果t’的失败可能性值大于0,则返回步骤3),继续从当前类簇中取样。所有未被取样出来的测试用例不用验证其结果,这样就实现了节约人力的目的。同时,语句的可信度值可以用来帮助程序员进行错误定位。下面将结合实际例子,说明本发明的具体实施。假设一个类簇中有6个测试用例,它们执行过的语句及将来的验证结果如表1所示,其中之所以叫“将来的验证结果”,是因为测试用例的验证结果只有挑选出来验证了才知道,但例子中为了说明挑选出的失败测试用例的百分比,在表1中列出了所有测试用例将来的验证结果。现在我们要用本发明中的取样方法从中挑选测试用例来让测试人员验证。目标是挑选出尽可能少的测试用例,但包含尽可能多的失败测试用例。具体的挑选过程如表2所示。1)刚开始,所有语句的可信度初始化为0。因为阈值CT=1,所有语句的可信度都小于CT,即所有语句都是可疑的。因此,t2被第一个挑选出来,因为它执行了最多的可疑语句,其失败的可能性值为5。如表2中次序为1的那行所示,t2验证后为通过,因此t2执行过的语句sl,s2,s4,s5,s6的可信度都加1,此时,只有s3的可信度小于CT,s3是唯一的可疑语句。在剩余的5个测试用例中,只有t3和t5执行了s3,因此它们拥有相同的失败可能性值1。2)如表2中次序为2的那行所示,从t3和t5中随机挑选一个测试用例,假设t3被选中,因为t3被验证为失败,t3执行过的语句s2,s3的可信度减1,此时的可疑语句为s2和S3。在剩余的4个测试用例tl,t4,t5,t6中,t4执行了s2,t5执行了s3,因此它们具有相同的失败可能性1。3)如表2中次序为3的那行所示,从t4和t5中随机挑选一个测试用例,假设t4被选中,因为t4被验证为失败,t4执行过的语句s2,s5的可信度减1,此时的可疑语句是s2,s3,s5,在剩余的测试用例tl,t5,t6中,只有t5执行了可疑语句s3,tl和t6没有执行任何可疑语句。因此只有t5具有失败可能性1。4)如表2中次序为4的那行所示,t5被选中,因为t5被验证为通过,t5执行过的语句sl,s3,s4的可信度加1,此时的可疑语句为s2,s3,s5,剩余的测试用例tl,t6都没有执行任何可疑语句,即失败可能性值都为0。该类簇取样结束。总结该类簇中共有6个测试用例如表1,我们选出了其中四个测试用例t2,t3,t4,t5,见表2,让测试人员验证其结果,另外两个测试用例(tl,t6)并未验证其结果,这样节约了测试人员验证测试结果的时间。表1中共有2个失败的测试用例(t3,t4),在表2中这2个失败的测试用例都被挑选出来了。也就是说,测试用例在只验证了4/6的测试用例的情况下,找到了100%的失败的测试用例,既节约了时间,又不影响测试效果。表1六个测试用例及它们执行过的语句和将来的验证结果测试用例执行过的语句将来的验证结果~~tlsl,s4,s6MM~t2sl,s2,s4,s5,s6Witt3s2,s3WMt4s2,s5WMt5sl,s3,s4通过““t6sl,s6MM表2基于表1测试用例的具体挑选过程<table>tableseeoriginaldocumentpage8</column></row><table>如图2(a)-(d),我们将现有的两种聚类取样技术3-per-clustersampling(每个簇中随机取3个样本)和adaptivesampling(自适应取样)及本发明ESBS(基于执行频谱的聚类取样技术)运行在6个经典的西门子实验程序上。每个图中,横坐标代表被挑选出来验证的测试用例数占原有测试用例数的百分比(%testsselected),纵坐标代表被挑选出的失败测试用例数占原有失败测试用例数的百分比(%failuresfound)。在被挑选出来的测试用例数相同的情况下,找到的失败测试用例数越多,说明该取样技术效果越好。即在横坐标值相同的情况下,纵坐表值越大,该取样技术越好。从图中可以看出,本发明ESBS方法在Printtokens,Printtokens,Schedule2,Replace,Space在5个实验程序上的效果者剛显好于3-per-clustersampling禾口adaptivesampling,只有在Schedule上的效果不及adaptivesampling。查找原因后发现,本发明ESBS的效果很大程度上依赖于错误定位的效果,而Schedule程序中的错误不容易定位,从而影响了测试用例挑选的效果。权利要求一种测试用例聚类取样方法,软件测试的测试用例执行后,根据测试用例的执行路径聚类得到多个类簇,其特征是在类簇中挑选测试用例进行验证,根据被选中的测试用例的验证结果,计算其所执行的语句的可信度,如果测试用例验证通过,语句可信度增加,反之则减少;如果一个语句的可信度低于给定的阈值,则该语句为可疑语句,可疑语句构成可疑语句集合;根据可疑语句集合计算该类簇中剩余的每个测试用例失败的可能性,某测试用例执行过越多可疑语句其失败可能性越高,挑选失败可能性最高的那个测试用例,然后根据该测试用例的验证结果重新计算各语句的可信度,更新可疑语句集合,并计算未验证的剩余测试用例失败的可能性,挑选下一个失败可能性最高的测试用例来验证其结果;整个取样过程如此重复下去,直到该类簇中所有剩余测试用例的失败可能性都为0,即剩余测试用例的所执行语句均不在可疑语句集合中,取样剩余的测试用例均不再验证其结果,实现测试用例的约简并确保被取样的测试用例中失败测试用例的比例。2.根据权利要求1所述的一种测试用例聚类取样方法,其特征是具体步骤如下1)设聚类后得到m个类簇C1,C2...Cffl,j表示类簇编号,初始化j=1;2)初始化所有语句的可信度为0;从类簇Cj中挑选执行语句最多的测试用例t;3)验证测试用例测试人员验证测试用例t的执行结果,获取反馈信息该测试用例是失败,还是成功;4)计算执行语句可信度根据测试用例t的验证结果,计算语句的可信度,计算语句可信度的公式为confidence(s)=passed(s)-failed(s),即语句s的可信度等于执行过s并且通过的测试用例的个数,减去执行过s并且失败的测试用例个数,也就是如果t验证失败了,则t执行过的所有语句的可信度减1;否则,t成功了,则t执行过的所有语句的可信度加1;5)语句识别根据语句的可信度,将语句识别为可疑语句和可信语句两种,设定一个阈值ConfidenceThreshold,简写为CT,所有可信度小于CT的语句被识别为可疑语句,具体公式为suspicious(S)={seSIconfidence(s)<CT};所有可信度大于或等于CT的语句被识别为可信语句,具体公式为correct(S)={seS|confidence(s)>=CT};可疑语句集和可信语句集之间没有交集ΠMn^(S)=0;6)测试用例失败可能性度量测试用例t执行过的语句集表示为t(S)={seS|texecutess},测试用例t失败的可能性为其执行过的可疑语句的个数,计算公式为failpossibiIity(t)=11(S)Πsuspicious(S)|;7)选取类簇剩余测试用例中失败可能性最大的测试用例根据计算出来的剩余测试用例的失败可能性,选取其中失败可能性最大的测试用例t’;如果多个测试用例拥有最大失败可能性,则采用随机挑选的方法,从中挑选出一个测试用例t’;8)如果t’的失败可能性值为0,则停止从类簇Cj中取样,j=j+1,如果j<=m则返回步骤2),开始从下一个类簇中取样;如果j>m,即所有类簇都取样完毕后,整个取样过程结束;如果t’的失败可能性值大于0,则返回步骤3),继续从当前类簇中取样。全文摘要一种测试用例聚类取样方法,基于观测的软件测试技术中的聚类过滤技术,在类簇中挑选测试用例进行验证,根据验证结果计算其所执行的语句的可信度,判断是否可疑语句,可疑语句构成可疑语句集合;根据可疑语句集合计算该类簇中剩余测试用例失败的可能性,挑选失败可能性最高的测试用例,验证结果并重新计算各语句的可信度,更新可疑语句集合,对未验证的测试用例重复取样过程,直到该类簇中所有剩余测试用例的失败可能性都为0。本发明取样剩余的测试用例均不再验证其结果,实现了测试用例的约简,节约了人工验证测试结果的时间和精力,同时确保被取样的测试用例中失败测试用例占很大比例,语句的可信度值可以用来帮助测试人员进行错误定位。文档编号G06F11/36GK101814055SQ201010139848公开日2010年8月25日申请日期2010年4月6日优先权日2010年4月6日发明者严莎莉,章宸,赵志宏,陈振宇申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1