一种软件单元与部件与相结合的源代码变更影响分析与测试方法技术

技术编号:8215569 阅读:288 留言:0更新日期:2013-01-17 13:07
一种软件单元与部件与相结合的源代码变更影响分析与测试方法。单元级源代码变更影响分析和测试包括:构造程序单元流图;创建线性独立的测试路径集;查找修改的代码在流图中的节点并确定为变更点;使用路径选择器在线性独立测试路径集中选取包含了变更点的路径以形成受影响路径集;执行受影响路径集中的路径;将执行的结果和预期的结果进行比较。部件级源代码变更影响分析和测试包括:构造程序调用图,调用图使用节点和边描述程序的调用结构;创建线性独立的测试子树集;确定修改的代码所在的单元,作为变更点;使用子树选择器在线性独立测试子树集中选取包含变更点的子树形成受影响子树集;执行受影响子树集中的子树;比较执行结果和预期结果。

【技术实现步骤摘要】

本专利技术涉及程序开发测试领域,更具体地说,本专利技术涉及一种源代码变更影响分析方法,此外,本专利技术还涉及一种采用了该源代码变更影响分析之后实施测试的方法。
技术介绍
在现有系统源代码基础上的开发需要修改大量的软件代码,软件调试工作需要随时修改代码,而软件维护升级过程亦需要修改代码,代码变更时刻伴随着软件研发活动,在现代软件开发过程中越来越重要。代码的变更通常会产生“副作用”,可能会影响到软件的内外部接口、功能特性和性能等多方面的内容,如果没有对代码的变更影响面进行充分的分析与测试,可能导致程序运行时出现异常甚至崩溃。 圈复杂度(Cyclomatic Complexity)是一种为程序逻辑复杂性提供定量测度的软件度量,该度量的值代表了程序单元中的线性独立路径(Linearly Independent Path)数量,并提供了确保所有语句至少执行一次的测试数量的上界。线性独立路径是指程序中至少引进一个新的处理语句集合或一个新条件的任一路径。采用流图(与流程图不同,流图只有边和节点表示,用于圈复杂度的计算和独立路径的创建)的描述时,线性独立路径必须至少包含一条在定义路径之前不曾用到的边。线性独立路径集合代表了一个测试路径(TestPath)的集合,按照线性独立路径进行的测试是一种高强度的白盒测试。在对代码局部修改后,可能影响代码的范围包括程序单元内部和程序单元之间。在程序单元内部,如果代码的修改导致了程序控制流的变化,则影响的范围较大,甚至需要进行所有的独立路径的测试;如果代码的修改未导致程序控制流的变化,则影响的范围较小,没有必要对所有的独立路径进行测试,由此需要有一种方法排除没有受到影响的路径。代码的修改除了影响代码所在的单元本身,还会影响到该单元所属部件的其他程序单元。这时候的变更影响分析可以用该程序部件的集成子树(Integration Subtree)来实现。集成子树是程序中圈复杂度流程图的线性独立集成路径,通过对集成子树中的测试路径进行测试,可以不用测试单元的其它控制逻辑来测试单元的相互作用。在对部件的测试中同样需要有一种方法排除没有受到影响的集成子树。现行源代码变更影响分析与测试主要依赖编码人员凭经验进行人工分析,未利用圈复杂度、线性独立路径和集成子树等手段来确定变更的影响面,更没有将此应用到白盒测试过程中。除了人工分析,也有关于面向对象代码变更影响分析的研究,主要基于类成员依赖关系确定变更影响源和变更类型,依据一定的算法确定变更影响的范围。对代码变更进行影响分析与测试有很大的难度,目前缺乏系统的方法进行指导。传统的变更影响分析与测试方法依赖于编码人员的经验和对代码的熟悉程度,人工分析受变更影响的代码块或执行路径,难以对变更的影响面进行全面评估,也难以对代码进行充分的测试。依赖经验进行的分析方法的效果与编码调试人员的个人能力相关,具有较大的随机性和盲目性,并且无自动化工具支持,效率低下,不能提供具有系统性的解决方案。而关于面向对象代码变更影响分析的研究,分析的目标是类,局限于面向对象的代码,不能对非面向对象代码进行变更影响分析,并且该方法未对变更影响分析之后的测试流程及方法进行说明。
技术实现思路
本专利技术所要解决的技术问题是针对现有技术中存在上述缺陷,提供软件部件与单元相结合的源代码变更影响分析与测试方法。 本专利技术提供了一种源代码变更影响分析与测试方法,其包括单元级源代码变更影响分析和测试部分、以及部件级源代码变更影响分析和测试部分。优选地,所述单元级源代码变更影响分析和测试部分包括第一步构造程序单元的流图,所述流图使用节点和边描述逻辑控制流;第二步创建线性独立的测试路径集;第三步查找修改的代码在流图中的节点,并将其确定为变更点;第四步使用路径选择器在线性独立测试路径集中选取包含了变更点的路径,以形成受影响路径集;第五步执行受影响路径集中的路径;第六步将执行的结果和预期的结果进行比较。优选地,所述部件级源代码变更影响分析和测试部分包括第一步骤构造程序的调用图,所述调用图使用节点和边描述程序的调用结构,节点代表程序的单元,边表示调用关系;第二步骤创建线性独立的测试子树集;第三步骤确定修改的代码所在的单元,作为变更点;第四步骤使用子树选择器在线性独立测试子树集中选取包含了变更点的子树形成受影响子树集;第五步骤执行受影响子树集中的子树;第六步骤将执行的结果和预期的结果进行比较。优选地,在所述第六步中,在执行的结果和预期的结果一致时,则判断程序的修改是正确的。优选地,在所述第一步中,对代码的控制流分析,此后按照控制流的构造规则确定程序中流图的节点,然后根据程序中的控制条件将所述节点用边连接起来,从而构成程序的流图。优选地,在所述第四步中,路径选择器对于所有的变更点,在线性独立测试路径集中,检查每条路径的节点集,如果包含变更点,则将该路径添加到受影响路径集中。优选地,在第六步骤中,如果执行的结果和预期的结果一致,则判断程序的修改是正确的。优选地,在所述第四步骤中,子树选择器对于所有的变更点,在线性独立集成子树集中,检查每个子树的节点集,如果包含变更点,则将该子树添加到受影响子树集中。优选地,在所述第五步骤中,首先创建一个端到端的测试条件列表,从测试条件列表中选择数据以便在测试每个子树时设置判定节点的条件。本专利技术的源代码变更影响分析与测试方法相对于传统的凭经验分析源代码变更影响面并实施测试的方法,具有较强的系统性。本专利技术的源代码变更影响分析与测试方法能确定部件和/或单元级的代码变更的影响范围,不会遗漏测试路径和集成子树。对于软件单元,构造测试路径选择器获取到变更代码的有效测试路径集,排除无效测试路径;对于软件部件,构造集成子树选择器获取到变更代码的有效集成子树集,排除无效集成子树,提高白盒测试效率。而且,本专利技术的源代码变更影响分析与测试方法可以避免设计多余的、重复的测试用例。因为测试的范围缩小到了包含变更点测试路径或者测试子树,所以测试工作所需要的代价可以控制在一个合理的范围内,使用最少的测试用例来完成变更后的代码的测试,同时又能保证所有受影响的代码都能够被测试到,包括单元内部和单元之间的代码,从而达到变更后的代码测试覆盖率的最大化。本专利技术的方法所述源代码不限于面向对象的软件代码,也能对非面向对象软件代码进行变更影响分析,具有通用性。 附图说明结合附图,并通过参考下面的详细描述,将会更容易地对本专利技术有更完整的理解并且更容易地理解其伴随的优点和特征,其中图I示意性地示出了根据本专利技术实施例的源代码变更影响分析与测试方法的流程图。图2示意性地示出了根据本专利技术实施例的流图的示例。图3示意性地示出了根据本专利技术实施例的线性独立测试路径的示例。图4示意性地示出了根据本专利技术实施例的测试子树集的示例。图5示意性地示出了根据本专利技术实施例的测试子树集的示例。需要说明的是,附图用于说明本专利技术,而非限制本专利技术。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。具体实施例方式为了使本专利技术的内容更加清楚和易懂,下面结合具体实施例和附图对本专利技术的内容进行详细描述。图I示意性地示出了根据本专利技术实施例的源代码变更影响分析与测试方法的流程图。如图I所示,本专利技术实施例提出了软件部件与单元相结合的本文档来自技高网
...

【技术保护点】
一种软件单元与部件与相结合的源代码变更影响分析与测试方法,其特征在于包括:单元级源代码变更影响分析和测试部分以及部件级源代码变更影响分析和测试部分。

【技术特征摘要】

【专利技术属性】
技术研发人员:徐小春王礼生董超群张垚杨书轩黄东海望正气
申请(专利权)人:无锡江南计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1