CN102880547A - 一种软件单元与部件与相结合的源代码变更影响分析与测试方法 - Google Patents
一种软件单元与部件与相结合的源代码变更影响分析与测试方法 Download PDFInfo
- Publication number
- CN102880547A CN102880547A CN2012103252221A CN201210325222A CN102880547A CN 102880547 A CN102880547 A CN 102880547A CN 2012103252221 A CN2012103252221 A CN 2012103252221A CN 201210325222 A CN201210325222 A CN 201210325222A CN 102880547 A CN102880547 A CN 102880547A
- Authority
- CN
- China
- Prior art keywords
- test
- subtree
- source code
- path
- impact analysis
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种软件单元与部件与相结合的源代码变更影响分析与测试方法。单元级源代码变更影响分析和测试包括:构造程序单元流图;创建线性独立的测试路径集;查找修改的代码在流图中的节点并确定为变更点;使用路径选择器在线性独立测试路径集中选取包含了变更点的路径以形成受影响路径集;执行受影响路径集中的路径;将执行的结果和预期的结果进行比较。部件级源代码变更影响分析和测试包括:构造程序调用图,调用图使用节点和边描述程序的调用结构;创建线性独立的测试子树集;确定修改的代码所在的单元,作为变更点;使用子树选择器在线性独立测试子树集中选取包含变更点的子树形成受影响子树集;执行受影响子树集中的子树;比较执行结果和预期结果。
Description
技术领域
本发明涉及程序开发测试领域,更具体地说,本发明涉及一种源代码变更影响分析方法,此外,本发明还涉及一种采用了该源代码变更影响分析之后实施测试的方法。
背景技术
在现有系统源代码基础上的开发需要修改大量的软件代码,软件调试工作需要随时修改代码,而软件维护升级过程亦需要修改代码,代码变更时刻伴随着软件研发活动,在现代软件开发过程中越来越重要。代码的变更通常会产生“副作用”,可能会影响到软件的内外部接口、功能特性和性能等多方面的内容,如果没有对代码的变更影响面进行充分的分析与测试,可能导致程序运行时出现异常甚至崩溃。
圈复杂度(Cyclomatic Complexity)是一种为程序逻辑复杂性提供定量测度的软件度量,该度量的值代表了程序单元中的线性独立路径(Linearly Independent Path)数量,并提供了确保所有语句至少执行一次的测试数量的上界。线性独立路径是指程序中至少引进一个新的处理语句集合或一个新条件的任一路径。采用流图(与流程图不同,流图只有边和节点表示,用于圈复杂度的计算和独立路径的创建)的描述时,线性独立路径必须至少包含一条在定义路径之前不曾用到的边。线性独立路径集合代表了一个测试路径(Test Path)的集合,按照线性独立路径进行的测试是一种高强度的白盒测试。
在对代码局部修改后,可能影响代码的范围包括程序单元内部和程序单元之间。在程序单元内部,如果代码的修改导致了程序控制流的变化,则影响的范围较大,甚至需要进行所有的独立路径的测试;如果代码的修改未导致程序控制流的变化,则影响的范围较小,没有必要对所有的独立路径进行测试,由此需要有一种方法排除没有受到影响的路径。
代码的修改除了影响代码所在的单元本身,还会影响到该单元所属部件的其他程序单元。这时候的变更影响分析可以用该程序部件的集成子树(Integration Subtree)来实现。集成子树是程序中圈复杂度流程图的线性独立集成路径,通过对集成子树中的测试路径进行测试,可以不用测试单元的其它控制逻辑来测试单元的相互作用。在对部件的测试中同样需要有一种方法排除没有受到影响的集成子树。
现行源代码变更影响分析与测试主要依赖编码人员凭经验进行人工分析,未利用圈复杂度、线性独立路径和集成子树等手段来确定变更的影响面,更没有将此应用到白盒测试过程中。除了人工分析,也有关于面向对象代码变更影响分析的研究,主要基于类成员依赖关系确定变更影响源和变更类型,依据一定的算法确定变更影响的范围。
对代码变更进行影响分析与测试有很大的难度,目前缺乏系统的方法进行指导。传统的变更影响分析与测试方法依赖于编码人员的经验和对代码的熟悉程度,人工分析受变更影响的代码块或执行路径,难以对变更的影响面进行全面评估,也难以对代码进行充分的测试。依赖经验进行的分析方法的效果与编码调试人员的个人能力相关,具有较大的随机性和盲目性,并且无自动化工具支持,效率低下,不能提供具有系统性的解决方案。而关于面向对象代码变更影响分析的研究,分析的目标是类,局限于面向对象的代码,不能对非面向对象代码进行变更影响分析,并且该方法未对变更影响分析之后的测试流程及方法进行说明。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供软件部件与单元相结合的源代码变更影响分析与测试方法。
本发明提供了一种源代码变更影响分析与测试方法,其包括:单元级源代码变更影响分析和测试部分、以及部件级源代码变更影响分析和测试部分。
优选地,所述单元级源代码变更影响分析和测试部分包括:
第一步:构造程序单元的流图,所述流图使用节点和边描述逻辑控制流;
第二步:创建线性独立的测试路径集;
第三步:查找修改的代码在流图中的节点,并将其确定为变更点;
第四步:使用路径选择器在线性独立测试路径集中选取包含了变更点的路径,以形成受影响路径集;
第五步:执行受影响路径集中的路径;
第六步:将执行的结果和预期的结果进行比较。
优选地,所述部件级源代码变更影响分析和测试部分包括:
第一步骤:构造程序的调用图,所述调用图使用节点和边描述程序的调用结构,节点代表程序的单元,边表示调用关系;
第二步骤:创建线性独立的测试子树集;
第三步骤:确定修改的代码所在的单元,作为变更点;
第四步骤:使用子树选择器在线性独立测试子树集中选取包含了变更点的子树形成受影响子树集;
第五步骤:执行受影响子树集中的子树;
第六步骤:将执行的结果和预期的结果进行比较。
优选地,在所述第六步中,在执行的结果和预期的结果一致时,则判断程序的修改是正确的。
优选地,在所述第一步中,对代码的控制流分析,此后按照控制流的构造规则确定程序中流图的节点,然后根据程序中的控制条件将所述节点用边连接起来,从而构成程序的流图。
优选地,在所述第四步中,路径选择器对于所有的变更点,在线性独立测试路径集中,检查每条路径的节点集,如果包含变更点,则将该路径添加到受影响路径集中。
优选地,在第六步骤中,如果执行的结果和预期的结果一致,则判断程序的修改是正确的。
优选地,在所述第四步骤中,子树选择器对于所有的变更点,在线性独立集成子树集中,检查每个子树的节点集,如果包含变更点,则将该子树添加到受影响子树集中。
优选地,在所述第五步骤中,首先创建一个端到端的测试条件列表,从测试条件列表中选择数据以便在测试每个子树时设置判定节点的条件。
本发明的源代码变更影响分析与测试方法相对于传统的凭经验分析源代码变更影响面并实施测试的方法,具有较强的系统性。本发明的源代码变更影响分析与测试方法能确定部件和/或单元级的代码变更的影响范围,不会遗漏测试路径和集成子树。对于软件单元,构造测试路径选择器获取到变更代码的有效测试路径集,排除无效测试路径;对于软件部件,构造集成子树选择器获取到变更代码的有效集成子树集,排除无效集成子树,提高白盒测试效率。
而且,本发明的源代码变更影响分析与测试方法可以避免设计多余的、重复的测试用例。因为测试的范围缩小到了包含变更点测试路径或者测试子树,所以测试工作所需要的代价可以控制在一个合理的范围内,使用最少的测试用例来完成变更后的代码的测试,同时又能保证所有受影响的代码都能够被测试到,包括单元内部和单元之间的代码,从而达到变更后的代码测试覆盖率的最大化。
本发明的方法所述源代码不限于面向对象的软件代码,也能对非面向对象软件代码进行变更影响分析,具有通用性。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了根据本发明实施例的源代码变更影响分析与测试方法的流程图。
图2示意性地示出了根据本发明实施例的流图的示例。
图3示意性地示出了根据本发明实施例的线性独立测试路径的示例。
图4示意性地示出了根据本发明实施例的测试子树集的示例。
图5示意性地示出了根据本发明实施例的测试子树集的示例。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
图1示意性地示出了根据本发明实施例的源代码变更影响分析与测试方法的流程图。如图1所示,本发明实施例提出了软件部件与单元相结合的代码变更影响分析的系统方法,从测试路径和集成子树的角度阐述了代码变更的影响面分析与测试流程。该方法的顺序是先进行单元的代码变更影响分析与测试,当所有单元分析与测试工作完成后再进行部件的代码变更影响分析与测试。通过该方法可以获取到针对变更代码的有效测试路径集,排除无效测试路径集。
具体地说,如图1所示,本发明实施例的源代码变更影响分析与测试方法包括(1)单元级源代码变更影响分析和测试(S10),以及(2)部件级源代码变更影响分析和测试(S20)。
<单元级源代码变更影响分析和测试S10>
在进行单元内部的变更影响分析时,需确定程序的变更点,然后在已经创建的线性独立路径集合中进行查找,获取那些包含该变更点的线性独立测试路径,然后强制执行这些受影响的路径。在进行部件内部的单元之间的变更影响分析时,不用测试单元的内部控制逻辑来测试单元的相互作用。这种情况下的变更影响分析,先在线性独立集成子树中查找,获取包含该变更点线性独立集成子树,然后强制执行这些受影响的子树。
单元级的代码变更影响分析与测试主要考虑单元内部的影响面。其分析与测试流程是首先构造流图,然后创建线性独立的测试路径集、确定变更点、在线性独立路径集中选取包含了变更点的路径形成受影响路径集,最后是强制执行受影响的路径,得到测试结果并与预期结果进行对比,如图1所示。
为了描述的方便,如图2所示,将流图标记为G,线性独立测试路径集为P,测试集中的每一条测试路径为pi(1≤i≤np),np为测试集中的测试路径数,变更点记为c,受影响的路径集记为PI,其中的每一条测试路径为pii(1≤i≤npi),npi为受影响集中的测试路径数。
单元级代码变更影响分析与测试的第一步S11是要构造程序单元的流图G。流图使用节点和边描述逻辑控制流。其中,在对代码的控制流分析后,按照控制流的构造规则,可以确定程序中流图的节点,加以编号,然后根据程序中的控制条件将这些节点用边连接起来,则构成程序的流图。
第二步S12是创建线性独立的测试路径集P。流图G的圈复杂度v(G)的值提供了线性独立的测试路径集的上界,并由此得出覆盖所有程序语句和分支所需的测试设计数量的上界。通常情况下,测试路径集P的确定比较困难,尤其是在圈复杂度比较大的时候,因为需要人工地分析这些路径是否有重复。其中,图3示出了线性独立测试路径示意图。
第三步S13是确定变更点c。对照已经编号的源代码,分析其中修改的部分,查找修改的代码在流图G中的节点(即,变更点c)。这种变更点可能不止一个,在实施变更影响分析与测试时,可以对每一个变更点单独进行变更影响分析。
第四步S14是使用路径选择器在线性独立测试路径集中选取包含了变更点的路径,以形成受影响路径集PI。路径选择器的原理是对于所有的变更点ci,在线性独立测试路径集中,检查每条路径的节点集,如果包含变更点ci,则将该路径添加到受影响路径集PI中。受影响路径集PI可以表示为:
其中n是变更点的数量,k是满足c∈Vpj的pj的个数,Vpj代表构成pj的节点集。为表示修改不同的变更点对于代码的影响,用Pi(c0,c1...cn)表示变更点c0,c1...cn影响到的测试路径。
第五步S15是执行(强制执行)受影响路径集PI中的路径。测试人员可选择数据以便在测试每条路径时适当设置判定节点的条件。
最后第六步S16是将执行的结果和预期的结果进行比较。如果执行的结果和预期的结果一致,则判断程序的修改是正确的;如果执行的结果和预期的结果不一致,则说明程序可能修改有误,也有可能影响分析不全面,需要分析是否影响到其他单元的代码,进行部件级的变更影响分析与测试。
<部件级源代码变更影响分析和测试S20>
部件级的代码变更影响分析与测试主要考虑单元之间的影响面,其分析与测试流程与单元级的有部分内容相似。首先构造程序不同单元之间的调用图,然后创建线性独立的测试子树集、确定变更点、在线性独立测试子树集中选取包含了变更点的子树形成受影响子树集,最后是强制执行受影响的子树,得到测试结果并与预期结果进行对比,如图1所示。
将调用图标记为C,其单元数记为N,线性独立测试子树集为S,测试子树集中的每一个测试子树为ti(1≤i≤nt),nt为测试子树集中的测试子树数,变更点记为c,受影响的子树集记为TI,其中的每一个测试子树为tii(1≤i≤nti),nti为受影响集中的测试子树数。
部件级的代码变更影响分析与测试的首先第一骤S21是要构造程序的调用图C。调用图C使用节点和边描述程序的调用结构,节点代表程序的单元,边表示调用关系。
第二步骤S22是创建线性独立的测试子树集T(如图4所示)。要获得测试子树集T,例如就需要计算集成复杂度。集成复杂度(记为S1)度量为了预防错误而进行的集成测试的数量,即程序中线性独立子树的数目。一个子树是从一个单元到它的子单元调用和返回的序列。与圈复杂度定义所需要的测试路径的数目类似,集成复杂度S1定义程序或子系统所需要的基本集中线性独立子树测试的数目。程序的集成复杂度S1与单元的圈复杂度类似,必须计算完全测试程序所需要的集成测试的数目。S1通过下面的方法计算:
S1=∑iv(G)-N+1
设计复杂度iv(G)是所有不包含子单元调用的判定与循环从单元流图中移去后的圈复杂度,∑iv(G)为所有单元的设计复杂度之和。N为排除了通用库函数如open、printf和scanf后函数的数目。
第三步骤S23是确定变更点c。此处变更点的粒度提升到一个程序单元,修改的代码所在的单元即变更点。如果这种变更点不止一个,在实施变更影响分析与测试时,可以对每一个变更点单独进行变更影响分析。
第四步骤S24是使用子树选择器在线性独立测试子树集中选取包含了变更点的子树形成受影响子树集TI。子树选择器的原理是对于所有的变更点ci,在线性独立集成子树集中,检查每个子树的节点集,如果包含变更点ci,则将该子树添加到受影响子树集TI中。受影响子树集TI可以表示为:
其中n是变更点的数量,k是满足c∈Utj的tj的个数,Utj代表构成tj的节点集。
为清晰地表示修改不同的变更点对于代码的影响,用Ti(c1,c2...cn)表示变更点c1,c2...cn影响到的测试路径。
第五步骤S25步是执行(强制执行)受影响子树集TI中的子树。强制执行时可首先创建一个端到端的测试条件列表,测试人员可从测试条件列表中选择数据以便在测试每个子树时适当设置判定节点的条件。
最后第六步骤S26是将执行的结果和预期的结果进行比较。如果执行的结果和预期的结果一致,则说明(判断)程序的修改是正确的;如果不一致,则说明程序修改有误,可能是修改逻辑的问题,也可能是单元之间的接口存在问题,需作调试和分析。
【具体实例】
<单元级源代码变更影响分析和测试S10的方法的具体实例>
单元级的代码变更影响分析与测试的第一步S11是要构造程序单元的流图G。如图2所示,通过对程序单元istriangle进行标记和分析,可以构造出流图G。
第二步S12是创建线性独立的测试路径集P。从流图G中可以得知其共有边28个,节点22个,因此按照圈复杂度的计算公式v(G)=e-n+2=28-22+2=8得出G的圈复杂度为8。对于程序单元istriangle,P={pi|(1≤i≤8)},可以创建8条线性独立的测试路径。线性独立测试路径p1~p8如图3所示。图中的实线和实圆圈代表了测试路径。
第三步S13是确定变更点c。对照已经编号的源代码,分析其中修改的部分,查找修改的代码在流图G中的节点。这种变更点可能不止一个,在实施变更影响分析与测试时,可以对每一个变更点单独进行变更影响分析。
第四步S14是在线性独立测试路径集中选取包含了变更点的路径形成受影响路径集PI。对于程序单元istriangle,不同变更点受影响的路径集分别为:
Pi(0,1,2,19,20,21)={p1,p2,p3,p4,p5,p6,p7,p8}
Pi(3)={p2,p3,p4,p5,p6,p7,p8}
Pi(4)={p3,p4,p5,p6,p7,p8}
Pi(5,17)={p4,p5,p6,p7,p8}
Pi(6)={p5,p6}
Pi(7)={p5}
Pi(8)={p6}
Pi(9)={p5,p6}
Pi(10)={p4,p7,p8}
Pi(11)={p4}
Pi(12,15)={p7,p8}
Pi(13)={p7}
Pi(14)={p8}
Pi(16)={p4,p7,p8}
Pi(18)={p1,p2,p3}
第五步S15是强制执行受影响路径集PI中的路径。对于程序单元istriangle,若修改了节点11,其Pi(11)={p4},则强制执行路径p4(0-1-2-3-4-5-10-11-16-17-19-20-21),而不需要执行其它的路径,避免盲目地测试了其他的路径。强制执行时可以通过给x,y,z设置适当的值,如2,3,2,以满足节点2,3,4,5,10相应的判定条件:
(2):x<(y+z)==>TRUE
(3):y<(x+z)==>TRUE
(4):z<(x+y)==>TRUE
(5):x==y==>FALSE
(10):x==z==>TRUE
若修改了节点0,因为Pi(0)={p1,p2,p3,p4,p5,p6,p7,p8},所以所有的路径都需要进行测试。这说明对节点0的修改影响面比较大,在编码过程中,修改这种节点应慎重。
最后第六步S16是将执行的结果和预期的结果进行比较。如果两者结果一致,则说明程序的修改是正确的;如果不一致,则说明程序可能修改有误,也有可能影响分析不全面,需要分析是否影响到其他单元的代码,进行部件级的变更影响分析与测试。
<部件级源代码变更影响分析和测试S20的方法的具体示例>
部件级的代码变更影响分析与测试的首先第一步骤步骤S21是要构造程序的调用图C。调用图C使用节点和边描述程序的调用结构,节点代表程序的单元,边表示调用关系。如图4所示,通过对形状判断程序shape进行调用关系分析,可以构造出调用图C。
第二步骤S22是创建线性独立的测试子树集T。排除了库函数printf和scanf后函数之后,程序shape的集成复杂度为(1+1+1+1+1+5)-6+1=5。
对于程序shape,测试子树集T={ti|(1≤i≤5)},可以创建5条线性独立的测试子树。线性独立测试子树t1~t5如图5所示。图中的实线和实框代表了部件级的测试子树。
第三步骤S23是确定变更点c。此处变更点的粒度提升到一个程序单元,修改的代码所在的单元即变更点。如果这种变更点不止一个,在实施变更影响分析与测试时,可以对每一个变更点单独进行变更影响分析。
第四步骤S24是在线性独立测试子树集中选取包含了变更点的子树形成受影响子树集TI。
为清晰地表示修改不同的变更点对于代码的影响,用TI(c1,c2...cn)表示变更点c1,c2...cn影响到的测试路径。对于程序shape,其受影响的子树集分别为:
TI(1,2,8)={t1,t2,t3,t4,t5}
TI(3)={t2,t3,t4,t5}
TI(4)={t2}
TI(5)={t3}
TI(6)={t4}
TI(7)={t5}
第五步骤S25是强制执行受影响子树集TI中的子树。强制执行时需先创建一个端到端的测试条件列表,测试人员可选择数据以便在测试每个子树时适当设置判定节点的条件。对于程序shape,若修改了节点6,其Ti(6)={t4},则强制执行子树t4(1>2<1>8<1>3<1>6>8<6<1)即可,而不需要执行其它的子树,避免盲目地测试了其他的子树。测试执行时给子树的相关程序单元中的变量设置适当的值,以满足相应的判定条件:
1main13(5,6,7):a>0==>TRUE,b>0==>TRUE,c>0==>TRUE
3istriangle 41(2,3,4):x<(y+z)==>TRUE,y<(x+z)==>TRUE,z<(x+y)==>TRUE
3istriangle 43(5):x==y==>FALSE
3istriangle 50(10):x==z==>FALSE
3istriangle 55(12):y==z==>FALSE
1main20(14):isangle==>2
若修改了节点1,因为Ti(1)={t1,t2,t3,t4,t5},所以所有的子树都需要进行测试。这说明对节点1的修改影响面比较大,在编码过程中,修改这种节点应慎重。对于以固有库函数形式存在的节点,其Ti可以不考虑,因为其一般不会被修改。例如程序shape中的节点2和节点8都是库函数,Ti(2,8)可以忽略。
最后第六骤S26是将执行的结果和预期的结果进行比较。如果两者结果一致,则说明程序的修改是正确的;如果不一致,则说明程序修改有误,可能是修改逻辑的问题,也可能是单元之间的接口存在问题,需作调试和分析。
如上所述,该方法解决了如何进行软件部件和单元的源代码代码变更影响分析与测试的问题,分别从集成子树、独立测试路径的角度阐述了部件级和单元级的源代码变更的影响面分析与测试过程。通过该方法可以确定源代码变更的影响范围,获取到针对变更代码的有效测试路径集或子树集,排除无效测试路径或子树,确保变更影响分析与测试工作的高效性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
可以看出,本发明在软件单元的独立路径集合中选择受影响的路径;在软件部件的集成子树集中选择受到影响子树。
综上所述,本发明的方法相对于传统的凭经验分析源代码变更影响面并实施测试的方法,具有较强的系统性。该方法能确定部件和/或单元级的代码变更的影响范围,不会遗漏测试路径和集成子树。对于软件单元,构造测试路径选择器获取到变更代码的有效测试路径集,排除无效测试路径;对于软件部件,构造集成子树选择器获取到变更代码的有效集成子树集,排除无效集成子树,提高白盒测试效率。
本发明的方法相对于基于类成员依赖关系的变更影响分析方法,分析的目标不限于面向对象的软件代码,也能对非面向对象软件代码进行变更影响分析,具有通用性。本发明上述具体实施例的方法不仅说明了代码的变更影响分析的方法,而且对变更影响分析之后的测试流程及方法进行了详细的说明。
本发明的方法可以避免设计多余的、重复的测试用例。因为测试的范围缩小到了包含变更点测试路径或者测试子树,所以测试工作所需要的代价可以控制在一个合理的范围内,使用最少的测试用例来完成变更后的代码的测试,同时又能保证所有受影响的代码都能够被测试到,包括单元内部和单元之间的代码,从而达到变更后的代码测试覆盖率的最大化。
此外,本发明的另一优选实施例还提供了一种采用了该源代码变更影响分析与测试方法。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (10)
1.一种软件单元与部件与相结合的源代码变更影响分析与测试方法,其特征在于包括:单元级源代码变更影响分析和测试部分以及部件级源代码变更影响分析和测试部分。
2.根据权利要求1所述的源代码变更影响分析与测试方法,其特征在于,其中,所述单元级源代码变更影响分析和测试部分包括:
第一步:构造程序单元的流图,所述流图使用节点和边描述逻辑控制流;
第二步:创建线性独立的测试路径集;
第三步:查找修改的代码在流图中的节点,并将其确定为变更点;
第四步:使用路径选择器在线性独立测试路径集中选取包含变更点的路径,形成受影响路径集;
第五步:执行受影响路径集中的路径;
第六步:将执行的结果和预期的结果进行比较。
3.根据权利要求1所述的源代码变更影响分析与测试方法,其特征在于,其中,所述部件级源代码变更影响分析和测试部分包括:
第一步骤:构造程序的调用图,所述调用图使用节点和边描述程序的调用结构,节点代表程序的单元,边表示调用关系;
第二步骤:创建线性独立的测试子树集;
第三步骤:确定修改的代码所在的单元,作为变更点;
第四步骤:使用子树选择器在线性独立测试子树集中选取包含了变更点的子树形成受影响子树集;
第五步骤:执行受影响子树集中的子树;
第六步骤:将执行的结果和预期的结果进行比较。
4.根据权利要求2所述的源代码变更影响分析与测试方法,其特征在于,在所述第六步中,在测试执行的结果和预期的结果一致时,则判断程序的修改是正确的。
5.根据权利要求2或4所述的源代码变更影响分析与测试方法,其特征在于,在所述第一步中,对代码的控制流分析,此后按照控制流的构造规则确定程序中流图的节点,然后根据程序中的控制条件将所述节点用边连接起来,从而构成程序的流图。
6.根据权利要求2或4所述的源代码变更影响分析与测试方法,其特征在于,在所述第四步中,路径选择器对于所有的变更点,在线性独立测试路径集中,检查每条路径的节点集,如果包含变更点,则将该路径添加到受影响路径集中。
7.根据权利要求3所述的源代码变更影响分析与测试方法,其特征在于,在第六步骤中,如果测试执行的结果和预期的结果一致,则判断程序的修改是正确的。
8.根据权利要求1或2所述的源代码变更影响分析与测试方法,其特征在于,在所述第四步骤中,子树选择器对于所有的变更点,在线性独立集成子树集中,检查每个子树的节点集,如果包含变更点,则将该子树添加到受影响子树集中。
9.根据权利要求1或2所述的源代码变更影响分析与测试方法,其特征在于,在所述第五步骤中,首先创建一个端到端的测试条件列表,从测试条件列表中选择数据以便在测试每个子树时设置判定节点的条件。
10.一种采用了根据权利要求1至9之一所述的源代码变更影响分析与测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103252221A CN102880547A (zh) | 2012-09-05 | 2012-09-05 | 一种软件单元与部件与相结合的源代码变更影响分析与测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103252221A CN102880547A (zh) | 2012-09-05 | 2012-09-05 | 一种软件单元与部件与相结合的源代码变更影响分析与测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102880547A true CN102880547A (zh) | 2013-01-16 |
Family
ID=47481881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103252221A Pending CN102880547A (zh) | 2012-09-05 | 2012-09-05 | 一种软件单元与部件与相结合的源代码变更影响分析与测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102880547A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103778061A (zh) * | 2014-01-17 | 2014-05-07 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN104699602A (zh) * | 2013-12-06 | 2015-06-10 | 国际商业机器公司 | 用于检测影响的方法和计算机 |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN105760288A (zh) * | 2014-12-15 | 2016-07-13 | 阿里巴巴集团控股有限公司 | 测试改写后的应用程序的方法及装置 |
CN106484823A (zh) * | 2016-09-28 | 2017-03-08 | 山东浪潮商用系统有限公司 | 一种css文件的修改方法、装置及计算机可读介质 |
CN106557859A (zh) * | 2015-09-29 | 2017-04-05 | 阿里巴巴集团控股有限公司 | 一种验证方法和设备 |
CN106844218A (zh) * | 2017-02-13 | 2017-06-13 | 南通大学 | 一种基于演化切片的演化影响集预测方法 |
CN107229487A (zh) * | 2016-03-25 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 代码处理方法及装置 |
CN108255700A (zh) * | 2017-03-27 | 2018-07-06 | 平安科技(深圳)有限公司 | 测试结果生成方法和装置 |
CN109828909A (zh) * | 2018-12-21 | 2019-05-31 | 北京城市网邻信息技术有限公司 | 回归测试用例确定方法、装置、电子设备及存储介质 |
CN111008139A (zh) * | 2019-12-06 | 2020-04-14 | 北京京航计算通讯研究所 | 软件更改影响域分析辅助方法 |
CN111061634A (zh) * | 2019-12-06 | 2020-04-24 | 北京京航计算通讯研究所 | 软件更改影响域分析辅助系统 |
CN113688044A (zh) * | 2021-08-26 | 2021-11-23 | 中国工商银行股份有限公司 | 一种基于业务场景库的自动化测试方法及装置 |
CN114036781A (zh) * | 2022-01-04 | 2022-02-11 | 阿里云计算有限公司 | 数据处理方法、数据展示方法、装置以及电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070220486A1 (en) * | 2006-03-16 | 2007-09-20 | Microsoft Corporation | Complexity metrics for data schemas |
-
2012
- 2012-09-05 CN CN2012103252221A patent/CN102880547A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070220486A1 (en) * | 2006-03-16 | 2007-09-20 | Microsoft Corporation | Complexity metrics for data schemas |
Non-Patent Citations (2)
Title |
---|
WATSON A H: "Structured testing: A testing methodology using the cyclomatic complexity metric", 《NIST SPECIAL PUBLICATION》 * |
徐小春等: "基于圈复杂度的代码变更影响分析与测试方法", 《高性能计算技术》 * |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104699602B (zh) * | 2013-12-06 | 2017-06-23 | 国际商业机器公司 | 用于检测影响的方法和计算机 |
CN104699602A (zh) * | 2013-12-06 | 2015-06-10 | 国际商业机器公司 | 用于检测影响的方法和计算机 |
CN103778061B (zh) * | 2014-01-17 | 2016-08-24 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN103778061A (zh) * | 2014-01-17 | 2014-05-07 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN105760288A (zh) * | 2014-12-15 | 2016-07-13 | 阿里巴巴集团控股有限公司 | 测试改写后的应用程序的方法及装置 |
CN105760288B (zh) * | 2014-12-15 | 2019-02-01 | 阿里巴巴集团控股有限公司 | 测试改写后的应用程序的方法及装置 |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN105159715B (zh) * | 2015-09-01 | 2018-07-20 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN106557859A (zh) * | 2015-09-29 | 2017-04-05 | 阿里巴巴集团控股有限公司 | 一种验证方法和设备 |
CN106557859B (zh) * | 2015-09-29 | 2020-12-11 | 阿里巴巴集团控股有限公司 | 一种验证方法和设备 |
CN107229487A (zh) * | 2016-03-25 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 代码处理方法及装置 |
CN107229487B (zh) * | 2016-03-25 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 代码处理方法及装置 |
CN106484823A (zh) * | 2016-09-28 | 2017-03-08 | 山东浪潮商用系统有限公司 | 一种css文件的修改方法、装置及计算机可读介质 |
CN106844218A (zh) * | 2017-02-13 | 2017-06-13 | 南通大学 | 一种基于演化切片的演化影响集预测方法 |
CN106844218B (zh) * | 2017-02-13 | 2020-06-23 | 南通大学 | 一种基于演化切片的演化影响集预测方法 |
CN108255700A (zh) * | 2017-03-27 | 2018-07-06 | 平安科技(深圳)有限公司 | 测试结果生成方法和装置 |
CN108255700B (zh) * | 2017-03-27 | 2020-03-06 | 平安科技(深圳)有限公司 | 测试结果生成方法和装置 |
WO2018177202A1 (zh) * | 2017-03-27 | 2018-10-04 | 平安科技(深圳)有限公司 | 测试结果生成方法、装置、计算机设备和存储介质 |
CN109828909A (zh) * | 2018-12-21 | 2019-05-31 | 北京城市网邻信息技术有限公司 | 回归测试用例确定方法、装置、电子设备及存储介质 |
CN111008139A (zh) * | 2019-12-06 | 2020-04-14 | 北京京航计算通讯研究所 | 软件更改影响域分析辅助方法 |
CN111061634A (zh) * | 2019-12-06 | 2020-04-24 | 北京京航计算通讯研究所 | 软件更改影响域分析辅助系统 |
CN113688044A (zh) * | 2021-08-26 | 2021-11-23 | 中国工商银行股份有限公司 | 一种基于业务场景库的自动化测试方法及装置 |
CN114036781A (zh) * | 2022-01-04 | 2022-02-11 | 阿里云计算有限公司 | 数据处理方法、数据展示方法、装置以及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880547A (zh) | 一种软件单元与部件与相结合的源代码变更影响分析与测试方法 | |
Khan et al. | A comparative study of white box, black box and grey box testing techniques | |
Person et al. | Directed incremental symbolic execution | |
Chebaro et al. | Program slicing enhances a verification technique combining static and dynamic analysis | |
CN101286132B (zh) | 一种基于软件缺陷模式的测试方法及系统 | |
CN103116540B (zh) | 基于全局超级块支配图的动态符号执行方法 | |
CN103559122A (zh) | 基于程序行为切片的测试案例约减方法 | |
De Lucia et al. | Improving behavioral design pattern detection through model checking | |
CN102231134A (zh) | 基于静态分析的冗余代码缺陷检测方法 | |
CN102915271A (zh) | 基于控制流图的单元回归测试用例集合优化方法 | |
Lakhotia et al. | AUSTIN: A tool for search based software testing for the C language and its evaluation on deployed automotive systems | |
CN104360938A (zh) | 一种故障确认方法及其系统 | |
Jalbert et al. | Predicting mutation score using source code and test suite metrics | |
CN101937396B (zh) | 软件程序中变量的不安全使用的检测方法 | |
Mauborgne | Astrée: Verification of absence of runtime error | |
CN102073825A (zh) | 基于路径驱动的可执行程序安全性检测方法及系统 | |
CN103778062B (zh) | 基于抽象解释的多中断程序数据访问冲突检测方法 | |
Santelices et al. | Quantitative program slicing: Separating statements by relevance | |
Nakagawa et al. | A goal model elaboration for localizing changes in software evolution | |
Debbarma et al. | Static and dynamic software metrics complexity analysis in regression testing | |
Chen et al. | UnitFL: A fault localization tool integrated with unit test | |
Bu et al. | IIS-guided DFS for efficient bounded reachability analysis of linear hybrid automata | |
Gu et al. | Verification of nonblockingness in bounded Petri nets with min-max basis reachability graphs | |
Last et al. | Automated test reduction using an info-fuzzy network | |
CN104615535A (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 | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130116 |