CN105528296B - 一种面向对象软件的类簇测试方法 - Google Patents

一种面向对象软件的类簇测试方法 Download PDF

Info

Publication number
CN105528296B
CN105528296B CN201610021303.0A CN201610021303A CN105528296B CN 105528296 B CN105528296 B CN 105528296B CN 201610021303 A CN201610021303 A CN 201610021303A CN 105528296 B CN105528296 B CN 105528296B
Authority
CN
China
Prior art keywords
class
node
test
complexity
loop
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610021303.0A
Other languages
English (en)
Other versions
CN105528296A (zh
Inventor
于海
王莹
朱志良
赵玉丽
张伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Northeastern University China
Original Assignee
Northeastern University China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Northeastern University China filed Critical Northeastern University China
Priority to CN201610021303.0A priority Critical patent/CN105528296B/zh
Publication of CN105528296A publication Critical patent/CN105528296A/zh
Application granted granted Critical
Publication of CN105528296B publication Critical patent/CN105528296B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种面向对象软件的类簇测试方法,将待测试软件系统构建为有向环路网络;遍历有向环路网络中的所有类节点计算测试重要度;遍历有向环路网络中的所有强连通分量,计算各环路中的各条边所对应的测试桩复杂度;对环路中的每一条边赋予权值并进行移除环路操作;生成类级集成测试序列对待测试软件系统进行类簇测试。本发明将软件系统中容易出错的类以及发生错误后波及范围较大的类视为重要测试节点,将类的复杂性和类的错误传播影响力结合起来,以尽早发现软件缺陷和有效控制错误的传播范围为测试目标,结合类的测试重要度打破软件系统网络的环路,生成集成测试序列,既保证测试重要度值高的节点优先被测试,又降低了测试桩总体复杂度。

Description

一种面向对象软件的类簇测试方法
技术领域
本发明涉及软件可靠性研究领域,特别涉及一种面向对象软件的类簇测试方法。
背景技术
集成测试序列是指在面向对象软件的类簇测试中,由于类之间的依赖关系所决定的类被先后测试的顺序。按照测试序列进行集成测试的主要思想是确保先测试不依赖于其他类的类节点,然后测试那些依赖于已经测试完毕的类的类节点,这样可以有效减少测试桩和测试驱动器的构建,从而达到降低测试成本的目的。如果软件系统的类间依赖关系不存在环路,则可以直接通过逆向拓扑排序生成集成测试序列。但在实际操作过程中,软件的复杂性使得测试人员需要通过删除类间的依赖关系来进行破环操作,同时引入软件测试桩来模拟两个类之间的对象交互行为,给待测试的类提供调用的属性和方法。为保证尽量做到模拟的类和实际功能执行过程中用到的真实类一致,测试桩中的输入值和期望输出值需要预先设定,由此可见,构造一个测试桩的代价是相当大的。为降低测试成本,传统的类级集成测试顺序研究策略大多围绕如何减少构建测试桩数量和降低测试桩总体复杂度两个方面。
Kung等人1996年在《On regression testing of object-oriented programs》首次提出了对象关系图的概念用于表示对象之间的有向依赖关系;并提出了其重要的观点——在继承、聚合和关联关系中,关联关系属于弱链接关系,在破环操作时可以考虑移除。他的观点对集成测试顺序的研究有着深远影响和意义,被运用于研究人员的集成测试策略中。Le Traon等人采用基于测试依赖图模型的方法进行集成测试,在不区分边依赖类型的情况下,减少测试桩的数量。但是该方法在生成测试顺序是具有不确定性,导致不同的检索方式下,构造的测试桩数目差异较大。Briand等人利用遗传方法,提出了生成测试序列的方法,并基于类间的耦合度量给出了估算测试桩复杂度的公式。Zhang等人提了一种新的度量测试桩复杂度的计算方法,同时考虑类间的属性、方法调用关系,传递参数个数以及返回参数类型。以确保测试桩复杂度最小为前提,基于图论的启发式方法打破环路,最终生成集成测试序列。
复杂性高的潜在故障率较高,若将这样的类排在较后位置测试,则会导致错误延迟被发现,影响软件的测试效率。而软件故障并非均匀分布,一些简单的代码片段也可能包含错误,且如果其在系统运行时被多处、多次直接或间接调用,则会导致整个系统的崩溃。因此考虑类节点的传播影响性问题,可以及早降低系统的风险。上述研究在生成测试序列的同时,均未考虑测试的高效性和风险问题,具有一定的局限性。一组高效的集成测试序列的生成方法在软件测试领域具有重要的研究价值。
发明内容
针对现有技术存在的不足,本发明提供一种面向对象软件的类簇测试方法,在移除环路操作时,同时考虑类节点的测试重要性和需要构建的测试桩的复杂度,在节约测试成本的前提下,保证测试的高效性。
一种面向对象软件的类簇测试方法,包括:
步骤1:以类为节点、以类间依赖关系为边,将待测试软件系统构建为有向环路网络;
步骤2:遍历有向环路网络中的所有类节点,根据每个类节点的拓扑结构特征计算描述该类节点的复杂程度与影响程度的测试重要度;
步骤3:遍历有向环路网络中的所有强连通分量,计算各强连通分量内各环路中的各条边所对应的测试桩复杂度,即为该条边的起始类节点模拟终止类节点构造的测试桩的难易程度;
步骤4:结合各类节点的测试重要度和各条边所对应的测试桩复杂度对环路中的每一条边赋予权值,并进行移除环路操作,将有向环路网络变成无环路网络;
步骤5:对无环路网络中存在依赖关系的类节点按照类节点的最大依赖深度值升序排序,最大依赖深度相同的类节点按照测试重要度值的降序排序,无环路网络中的孤立类节点随机排在最后,从而生成类级集成测试序列;
所述最大依赖深度的定义为无环路网络中经过每个类节点的所有依赖路径对应的依赖深度的最大值;无环网络中依赖路径经过的某类节点所对应的依赖深度为该类节点到依赖路径终止类节点的距离加1;
步骤6:按照类级集成测试序列对待测试软件系统进行类簇测试。
所述步骤1按如下步骤进行:
步骤1.1:读取待测试软件系统编译后的jar包,通过扫描分析语法分析树结构,导出存储待测试软件系统的类间依赖关系的XML文件;
步骤1.2:从XML文件中解析出待测试软件系统中类、模块、接口、函数、属性以及它们之间的依赖关系,过滤掉XML文件中包含的Java虚拟机中的工具类及方法,只保留待测试软件系统自身的类;
步骤1.3:构建以类为节点、类间关系为边的有向环路网络。
所述步骤2按如下步骤进行:
步骤2.1:遍历有向环路网络中的类节点,计算描述类节点的复杂程度的复杂性因子和描述类节点的影响程度的影响因子;
所述复杂性因子为类节点代码容量与由类间调用关系而引入的复杂性指标的加权和;
所述影响因子为与类节点及与其存在依赖关系的各类节点所形成的所有路径上各条边的传播概率之和的均值;
步骤2.2:对复杂性因子和影响因子进行加权求和得到当前类节点的测试重要度;
步骤2.3:若有向环路网络中的所有类节点的测试重要度值都已得到,则执行步骤3,否则返回执行步骤2.1。
所述步骤3按如下步骤进行:
步骤3.1:遍历有向环路网络中的所有强连通分量,查找强连通分量内包含的所有环路;
步骤3.2:查找每一个强连通分量内包含的所有环路;
步骤3.3:计算各强连通分量内各环路中的各条边所对应的测试桩复杂度,即为该条边的起始类节点模拟终止类节点构造的测试桩的难易程度。
所述步骤4按如下步骤进行:
步骤4.1:遍历所有强连通分量内包含的所有环路的每一条边,根据该条边经过的环路总数、起始类节点的测试重要度值及该条边所对应的测试桩复杂度,分别对环路中的每一条边赋予权值;
步骤4.2:若环路中权值最大的边只有一条,删除该条权值最大的边;若环路中权值最大的边不止一条且这些边的测试桩复杂度不相等,则删除权值最大的边中测试桩复杂度最低的边;若环路中权值最大的边不止一条且这些边的测试桩复杂度相等,则删除权值最大的边中起始类节点的测试重要度值最大的边;
步骤4.3:更新待测试软件系统的网络结构,判断网络结构中是否存在环路:如果不存在环路,则移除环路操作结束,将有向环路网络变成无环路网络,执行步骤5;否则返回步骤4.1继续移除环路操作。
有益效果:
本发明将软件系统中容易出错的类以及发生错误后波及范围较大的类视为重要测试节点,结合软件网络的结构特性将类的复杂性和类的错误传播影响力结合起来,提出度量面向对象软件系统类的测试重要度,以尽早发现软件缺陷和有效控制错误的传播范围为测试目标,结合类的测试重要度打破软件系统网络的环路,最终生成集成测试序列。本发明既保证了测试重要度值高的节点优先被测试,又降低了测试桩总体复杂度,再提高测试效率的同时,减少测试代价,节约测试成本。
附图说明
图1为本发明具体实施方式将待测试软件系统转化为有向环路网络示意图;
图2为本发明具体实施方式的面向对象软件的类簇测试方法流程图;
图3为本发明实施方式DNS软件系统节点测试重要度分布图;
图4为本发明实施方式ANT软件系统节点测试重要度分布图;
图5为本发明实施方式BCEL软件系统节点测试重要度分布图;
图6为本发明实施方式步骤4具体流程图。
具体实施方式
下面结合附图对本发明实施方式做进一步的详细说明。
一种面向对象软件的类簇测试方法,如图2所示,包括:
步骤1:以类为节点、以类间依赖关系为边,将待测试软件系统构建为有向环路网络;
步骤1.1:利用代码解析工具DependencyFinder读取待测试软件系统编译后的jar包,通过扫描分析语法分析树结构,导出存储待测试软件系统的类间依赖关系的XML文件;
步骤1.2:利用XMLParser解析器从XML文件中解析出待测试软件系统中类、模块、接口、函数、属性以及它们之间的依赖关系,过滤掉XML文件中包含的Java虚拟机中的工具类及方法,只保留待测试软件系统自身的类;
步骤1.3:构建以类为节点、类间关系为边的有向环路网络G=(V,E),其中V表示类节点集合,E表示类节点间依赖关系集合;
如图1所示的待测试软件系统由CA~CI九个类构成,其中,类CA中的函数A1()和A2()分别调用了类CB的属性b1和函数B1();类CB中的函数B1(),B2()分别调用了类CF的属性f1和类CC的属性c1;类CC中的函数C1()调用了类CD的函数D1();类CD中的函数D1()调用了类CE的属性e1;类CE中的函数E1()和E2()分别调用了类CA的属性a1和函数A1();类CF中的函数F1()和F3()分别调用了类CG的函数G3()和属性g3;类CG中的函数G2()和G3()分别调用了类CH的函数H1()和属性h3;类CG中的函数G2()和G3()分别调用了类CH的函数H1()和属性h3;类CG中的函数G2()和G3()分别调用了类CH的函数H1()和属性h3;类CH中的函数H2()和H3()分别调用了类CI的属性i1和i3。在本实施方式中,将待测试软件系统构建成如图1所示的有向环路网络,共包含9个类节点,11条边,边的方向由类节点间依赖关系决定,例如类CA依赖于类CB,在待测试软件系统中应该存在一条由CA指向类CB的边。
步骤2:遍历有向环路网络中的所有类节点,根据每个类节点的拓扑结构特征计算描述该类节点的复杂程度与影响程度的测试重要度;
步骤2.1:遍历有向环路网络中的类节点Ci∈V,计算描述类节点的复杂程度的复杂性因子CFi和描述类节点的影响程度的影响因子IFi
步骤2.1.1:扫描分析当前类节点Ci的源代码信息,统计该类节点内部使用过的操作符个数ηi和操作数个数以及使用这些操作符和操作数的总次数Ni,根据公式(1)求出当前类节点的代码容量VLi
步骤2.1.2:由步骤1.1生成的XML文件,解析出当前类节点Ci直接或间接依赖的类节点集合RT,并求出集合RT中每个类节点的代码容量;查找出当前类节点Ci到任意类节点Cj∈RT的所有路径集合及其路径上每条边的传播概率pk,定义如下,
式中,FECm→Cn表示该条边的起始类节点Cm中调用类节点Cn中的属性或方法的方法总数,FEm表示类节点Cm中方法和属性的总数;利用上述信息计算当前类节点Ci中由于类节点间调用关系而引入的复杂性指标CKi,定义如下:
式中,VLk'表示类节点Ck∈RT的代码容量VLk归一化后的结果;EPik表示类节点Ci到Ck∈RT的任意路径ptik∈Pathij中包含的边总数。
步骤2.1.3:结合当前类节点Ci的代码容量以及由于类节点间调用关系而引入的复杂性指标,根据公式(4)求得当前类节点的复杂性因子CFi,复杂性因子CFi为类节点代码容量与由类节点间调用关系而引入的复杂性指标的加权和;
CFi=α×VLi’+β×CKi (4)
其中,α+β=1,均取0.5。
影响因子为与类节点及与其存在依赖关系的各类节点所形成的所有路径上各条边的传播概率之和的均值;根据公式(5)求出当前类的影响因子IFi
步骤2.2:对复杂性因子和影响因子进行加权求和得到当前类节点的测试重要度;
由公式(6)计算其节点的测试重要度Wi
Wi=θ×CFi’+γ×IFi’ (6)
其中,CFi’和IFi’分别为类节点Ci的复杂因子归一化后的结果和影响因子归一化后的结果,且θ+γ=1,均取0.5。
步骤2.3:若有向环路网络中的所有类节点的测试重要度值都已得到,则执行步骤3,否则返回执行步骤2.1。
步骤3:遍历有向环路网络中的所有强连通分量,计算各强连通分量内各环路中的各条边所对应的测试桩复杂度,即为该条边的起始类节点模拟终止类节点构造的测试桩的难易程度;
步骤3.1:利用Tarjan算法搜索出系统中的全部强连通分量SCC,遍历有向环路网络中的所有强连通分量,查找强连通分量内包含的所有环路;
步骤3.1.1:基于深度优先搜索的思想遍历有向环路网络G中的每个类节点,并定义两个数组dfn(i)和low(i)记录节点,其中,利用dfn(i)记录深度优先遍历类节点Ci的时间,也叫时间戳。用low(i)数组记录类节点Ci或以类节点Ci为根节点的子树能追溯到的最早存储于栈中的类节点序号;
步骤3.1.2:当dfn(i)=low(i)时,以类节点Ci为根节点的搜索子树上的所有类节点构成一个强连通分量scci∈SCC;
本实施方式以图1所示的有向环路网络为例,共包含两个强连通分量,其中scc1={CA,CB,CC,CD,CE},scc2={CG,CH,CI}。
步骤3.2:依次遍历有向环路网络中的每一个强连通分量,查找每一个强连通分量内包含的所有环路,记录为环路集合P;
本实施方式以图1所示的强连通分量scc1为例,环路集合P共包含两条环路:CA→CB→CC→CD→CE→CA以及CE→CB→CC→CD→CE。
步骤3.3:计算各强连通分量内各环路中的各条边所对应的测试桩复杂度,即为该条边的起始类节点模拟终止类节点构造的测试桩的难易程度;
测试桩复杂度SCplxij定义如公式(7)所示:
其中,SAij表示类节点Ci使用类节点Cj的属性个数,SMij表示类节点Ci调用类节点Cj的方法个数,SAij’和SMij’分别表示SAij和SMij归一化后的结果值,且WA+WM=1,均取0.5。
步骤4:结合各类节点的测试重要度和各条边所对应的测试桩复杂度对环路中的每一条边赋予权值,并进行移除环路操作,将有向环路网络变成无环路网络;
如图6所示,具体流程如下:
步骤4.1:遍历所有强连通分量内包含的所有环路的每一条边,根据该条边经过的环路总数、起始类节点的测试重要度值及该条边所对应的测试桩复杂度,分别对环路中的每一条边赋予权值;
根据公式(8)对该条边eij赋予权值:
其中,Loopij表示在步骤3.2得到的环路集合P中查找同时包含该条边的环路总数,而Loopij’表示Loopij归一化后的结果;Wi’表示该条边的起始类节点测试重要度值归一化后结果;
步骤4.2:若环路中权值最大的边只有一条,删除该条权值最大的边;若环路中权值最大的边不止一条且这些边的测试桩复杂度不相等,则删除权值最大的边中测试桩复杂度最低的边;若环路中权值最大的边不止一条且这些边的测试桩复杂度相等,则删除权值最大的边中起始类节点的测试重要度值最大的边;
本实施方式以强连通分量scc1内的两条环路为例,其中共包含6条边:CA→CB,CB→CC,CC→CD,CD→CE,CE→CA及CE→CB。在scc1内的五个节点中,CB包含较多的函数和属性故其代码容量较高,且其入度和出度较大,导致节点CB由于调用关系引入的复杂度较高,且影响因子较大,因此,类节点CB的重要度值在该强连通分量中最高。同时,以类节点CB为起始类节点的边CB→CC同时经过两个环路,且其对应的测试桩仅包含一个属性。综合比较后,该条边的权值最高,选择删除,scc1破环结束。同理,强连通分量scc2中删除边CG→CH。
步骤4.3:更新待测试软件系统的网络结构,判断网络结构中是否存在环路:如果不存在环路,则移除环路操作结束,将有向环路网络变成无环路网络,执行步骤5;否则返回步骤4.1继续移除环路操作。
步骤5:对无环路网络中存在依赖关系的类节点按照类节点的最大依赖深度值升序排序,最大依赖深度相同的类节点按照测试重要度值的降序排序,无环路网络中的孤立类节点随机排在最后,从而生成类级集成测试序列;
最大依赖深度的定义为无环路网络中经过每个类节点的所有依赖路径对应的依赖深度的最大值;无环网络中依赖路径经过的某类节点的所对应的依赖深度为该类节点到依赖路径终止类节点的距离加1;
求解每个类节点的最大依赖深度过程如下:假设Vs为网络中所有入度不为零且出度不为0的类节点集合,VE为网络中所有出度为0且入度不为0的类节点集合,若有任意类节点Cp∈Vs,Cq∈Vs,且从Cp到Cq存在一条路径ptpq,则称该路径ptpq称为Cp与Cq之间的依赖路径,设ptpq={C1,C2,…,Ck,…,Cn},则类节点Ck的依赖深度满足Dk=|n-k|+1;在本实施方式中,经过类节点Ck的所有依赖路径对应的依赖深度的最大值,称为Ck的最大依赖深度;
以图1所示的网络为例,删除边CB→CC和CG→CH后得到的无环网络中,类节点CA~CI的最大依赖深度依次是:4,3,6,5,4,2,1,3,2。
针对于图1所示的网络,最终生成的集成测试序列为:
CB→CE→CG→CC→CA→CD→CH。
步骤6:按照类级集成测试序列对待测试软件系统进行类簇测试。
本发明可以直接应用于面向对象软件系统的集成测试序列中,提高大规模软件系统的测试效率,使得系统故障被尽早发现,降低测试成本及系统风险。为了便于验证所述方法的可行性和优势,此处从构造的测试桩总复杂度和测试效率的角度与传统的集成测试序列生成方法进行对比分析。
本发明以开源软件系统DNS,ANT和BCEL为例,对本发明的有效性进行验证,其中软件DNS包含61个类节点,276条依赖边,ANT包含25个类节点,83条依赖边,BCEL包含45个类节点,294条依赖边。根据本实施方式,求得的类节点的测试重要度值分布如图3~5所示。参与对比的集成测试序列生成方法包括:
(1)方法1:Briand等发表于《An Investigation of Graph-Based ClassIntegration Test Order Strategies》方法;
(2)方法2:Le等发表于《Efficient object-oriented integration andregression testing》方法;
(3)方法3:Briand等发表于《Experimenting with Genetic Algorithms toDevise Optimal Integration Test Orders》方法;
表1本实施方式得到的集成测试序列与传统方法结果对比分析
由于本发明在破环操作中,同时考虑了类节点的测试重要度,测试桩复杂度同时利用每条边同时经过环路的总条数来控制测试桩的数目。而方法1和3的目的在于使得测试桩总体复杂度最低,方法2的目的在于控制测试桩的数目。分别使用三种方法求出三个软件系统的集成测试序列,并对各自结果进行评估,如表格1所示,其中,NUMs表示建立的测试桩数目;表示平均测试桩复杂度;OCplx表示桩复杂度总和;NUMp表示当测试完类节点总数50%的时候,测试重要度排名前30%的类节点就已经被测试完毕的数目;We_sum表示所有被删除边的测试优先度的总和,则表示测试优先度的平均值,NUMm和NUMa分别表示需要为所有的测试桩模拟的方法和属性总数。
通过对比可发现,虽然由本实施方式得到集成测试序列构建的测试桩数目接近于甚至优于方法1、2、3的结果,且测试桩总复杂度OCplx低于其他方法,即仅需要构造少量简单的测试桩便可完成测试工作,并不需要模拟过多的属性和方法,从而节约了测试成本。同时,系统中测试重要度排名前30%的节点,优先被测试程度也远高于方法1、2、3。即,本实施方式可以保证相对重要的类节点优先进行测试。

Claims (3)

1.一种面向对象软件的类簇测试方法,包括:
步骤1:以类为节点、以类间依赖关系为边,将待测试软件系统构建为有向环路网络;
步骤1.1:读取待测试软件系统编译后的jar包,通过扫描分析语法分析树结构,导出存储待测试软件系统的类间依赖关系的XML文件;
步骤1.2:从XML文件中解析出待测试软件系统中类、模块、接口、函数、属性以及它们之间的依赖关系,过滤掉XML文件中包含的Java虚拟机中的工具类及方法,只保留待测试软件系统自身的类;
步骤1.3:构建以类为节点、类间关系为边的有向环路网络;
步骤2:遍历有向环路网络中的所有类节点,根据每个类节点的拓扑结构特征计算描述该类节点的复杂程度与影响程度的测试重要度;
所述步骤2按如下步骤进行:
步骤2.1:遍历有向环路网络中的类节点,计算描述类节点的复杂程度的复杂性因子和描述类节点的影响程度的影响因子;
所述复杂性因子为类节点代码容量与由类间调用关系而引入的复杂性指标的加权和;
所述影响因子为与类节点及与其存在依赖关系的各类节点所形成的所有路径上各条边的传播概率之和的均值;
步骤2.2:对复杂性因子和影响因子进行加权求和得到当前类节点的测试重要度;
步骤2.3:若有向环路网络中的所有类节点的测试重要度值都已得到,则执行步骤3,否则返回执行步骤2.1;
步骤3:遍历有向环路网络中的所有强连通分量,计算各强连通分量内各环路中的各条边所对应的测试桩复杂度,即为该条边的起始类节点模拟终止类节点构造的测试桩的难易程度;
步骤4:对环路中的每一条边赋予权值,并进行移除环路操作,将有向环路网络变成无环路网络;
步骤5:对无环路网络中存在依赖关系的类节点按照类节点的最大依赖深度值升序排序,最大依赖深度相同的类节点按照测试重要度值的降序排序,无环路网络中的孤立类节点随机排在最后,从而生成类级集成测试序列;
所述最大依赖深度的定义为无环路网络中经过每个类节点的所有依赖路径对应的依赖深度的最大值;无环路网络中依赖路径经过的某类节点的所对应的依赖深度为该类节点到依赖路径终止类节点的距离加1;
步骤6:按照类级集成测试序列对待测试软件系统进行类簇测试;
其特征在于,所述步骤2.1,包括:
步骤2.1.1:扫描分析当前类节点Ci的源代码信息,统计该类节点内部使用过的操作符个数ηi和操作数个数以及使用这些操作符和操作数的总次数Ni,根据公式(1)求出当前类节点的代码容量VLi
步骤2.1.2:由步骤1.1生成的XML文件,解析出当前类节点Ci直接或间接依赖的类节点集合RT,并求出集合RT中每个类节点的代码容量;查找出当前类节点Ci到任意类节点Cj∈RT的所有路径集合及其路径上每条边的传播概率pk,定义如下,
式中,FECm→Cn表示该条边的起始类节点Cm中调用类节点Cn中的属性或方法的总数,FEm表示类节点Cm中方法和属性的总数;利用上述信息计算当前类节点Ci中由于类节点间调用关系而引入的复杂性指标CKi,定义如下:
式中,VLk'表示类节点Ck∈RT的代码容量VLk归一化后的结果;EPik表示类节点Ci到Ck∈RT的任意路径ptik∈Pathij中包含的边总数;
步骤2.1.3:结合当前类节点Ci的代码容量以及由于类节点间调用关系而引入的复杂性指标,根据公式(4)求得当前类节点的复杂性因子CFi,复杂性因子CFi为类节点代码容量与由类节点间调用关系而引入的复杂性指标的加权和;
CFi=α×VLi′+β×CKi (4)
其中,α+β=1;
影响因子为与类节点及与其存在依赖关系的各类节点所形成的所有路径上各条边的传播概率之和的均值;根据公式(5)求出当前类的影响因子IFi
步骤4中所述对环路中的每一条边赋予权值,具体是根据边经过的环路总数、起始类节点的测试重要度值及该条边所对应的测试桩复杂度,分别对环路中的每一条边赋予权值。
2.根据权利要求1所述的面向对象软件的类簇测试方法,其特征在于,所述步骤3按如下步骤进行:
步骤3.1:遍历有向环路网络中的所有强连通分量,查找强连通分量内包含的所有环路;
步骤3.2:查找每一个强连通分量内包含的所有环路;
步骤3.3:计算各强连通分量内各环路中的各条边所对应的测试桩复杂度,即为该条边的起始类节点模拟终止类节点构造的测试桩的难易程度。
3.根据权利要求1所述的面向对象软件的类簇测试方法,其特征在于,所述步骤4按如下步骤进行:
步骤4.1:遍历所有强连通分量内包含的所有环路的每一条边,对环路中的每一条边赋予权值;
步骤4.2:若环路中权值最大的边只有一条,删除该条权值最大的边;若环路中权值最大的边不止一条且这些边的测试桩复杂度不相等,则删除权值最大的边中测试桩复杂度最低的边;若环路中权值最大的边不止一条且这些边的测试桩复杂度相等,则删除权值最大的边中起始类节点的测试重要度值最大的边;
步骤4.3:更新待测试软件系统的网络结构,判断网络结构中是否存在环路:如果不存在环路,则移除环路操作结束,将有向环路网络变成无环路网络,执行步骤5;否则返回步骤4.1继续移除环路操作。
CN201610021303.0A 2016-01-13 2016-01-13 一种面向对象软件的类簇测试方法 Active CN105528296B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610021303.0A CN105528296B (zh) 2016-01-13 2016-01-13 一种面向对象软件的类簇测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610021303.0A CN105528296B (zh) 2016-01-13 2016-01-13 一种面向对象软件的类簇测试方法

Publications (2)

Publication Number Publication Date
CN105528296A CN105528296A (zh) 2016-04-27
CN105528296B true CN105528296B (zh) 2018-10-23

Family

ID=55770539

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610021303.0A Active CN105528296B (zh) 2016-01-13 2016-01-13 一种面向对象软件的类簇测试方法

Country Status (1)

Country Link
CN (1) CN105528296B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106484401B (zh) * 2016-09-23 2019-07-23 东北大学 一种面向对象软件的自动化重构方法
CN110659199B (zh) * 2018-06-29 2021-07-30 中国矿业大学 一种基于传递依赖的类集成测试序列生成方法
CN113868113A (zh) * 2021-06-22 2021-12-31 中国矿业大学 一种基于Actor-Critic算法的类集成测试序列生成方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077228A (zh) * 2014-07-08 2014-10-01 浙江理工大学 一种基于谓词依赖图的efsm可执行测试序列生成方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100547562C (zh) * 2006-10-18 2009-10-07 国际商业机器公司 自动生成可再现运行时问题的单元测试用例的方法和系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077228A (zh) * 2014-07-08 2014-10-01 浙江理工大学 一种基于谓词依赖图的efsm可执行测试序列生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于复杂网络的类间集成测试序列生成方法;赵玉丽等;《东北大学学报(自然科学版)》;20151231;第36卷(第12期);第1697-1700页 *

Also Published As

Publication number Publication date
CN105528296A (zh) 2016-04-27

Similar Documents

Publication Publication Date Title
CN109739755A (zh) 一种基于程序追踪和混合执行的模糊测试系统
CN110569867A (zh) 基于决策树算法的输电线路故障原因判别方法、介质及设备
CN103116540B (zh) 基于全局超级块支配图的动态符号执行方法
CN108345544B (zh) 一种基于复杂网络的软件缺陷分布影响因素分析方法
CN106502892B (zh) 一种基于uml模型的测试用例优先排序方法
Dong et al. An Intrusion Detection Model for Wireless Sensor Network Based on Information Gain Ratio and Bagging Algorithm.
CN102938708B (zh) 基于告警传播模式的告警相关性分析系统及其分析方法
CN101866316B (zh) 一种基于相对冗余测试集约简的软件缺陷定位方法
CN106628097B (zh) 一种基于改进径向基神经网络的船舶设备故障诊断方法
CN102708045B (zh) 一种缓解路径爆炸的动态符号执行方法
CN106126413B (zh) 基于类不平衡学习和遗传算法的包裹式特征选择的软件缺陷预测方法
CN102968375B (zh) 基于关联规则挖掘的不可达路径检测方法
CN105528296B (zh) 一种面向对象软件的类簇测试方法
CN108959072A (zh) 一种基于复杂网络的集群系统弹性测评方法
CN110068741A (zh) 一种基于分类决策树的变压器故障诊断的方法
CN109117380A (zh) 一种软件质量评价方法、装置、设备及可读存储介质
CN104794059A (zh) 一种基于函数调用记录的缺陷定位方法及装置
CN105183796A (zh) 一种基于聚类的分布式链路预测方法
CN110188834A (zh) 一种电力通信网的故障诊断方法、装置及设备
CN106874950A (zh) 一种暂态电能质量录波数据的识别分类方法
Tonella et al. Finding the optimal balance between over and under approximation of models inferred from execution logs
CN109325062A (zh) 一种基于分布式计算的数据依赖挖掘方法及系统
CN105930900A (zh) 一种混合风力发电的预测方法及系统
CN112257784A (zh) 一种基于梯度提升决策树的窃电检测方法
CN105954650A (zh) 配电网故障定位方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant