CN105701016A - 一种针对异常处理代码的测试方法 - Google Patents
一种针对异常处理代码的测试方法 Download PDFInfo
- Publication number
- CN105701016A CN105701016A CN201610122013.5A CN201610122013A CN105701016A CN 105701016 A CN105701016 A CN 105701016A CN 201610122013 A CN201610122013 A CN 201610122013A CN 105701016 A CN105701016 A CN 105701016A
- Authority
- CN
- China
- Prior art keywords
- test
- exception handling
- pitching pile
- testing
- code
- 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.)
- Granted
Links
- 238000010998 test method Methods 0.000 title claims abstract description 15
- 238000012360 testing method Methods 0.000 claims abstract description 97
- 238000000034 method Methods 0.000 claims description 34
- 238000012549 training Methods 0.000 claims description 11
- 230000005856 abnormality Effects 0.000 claims description 7
- 238000002790 cross-validation Methods 0.000 claims description 6
- 230000002159 abnormal effect Effects 0.000 claims description 5
- 230000000694 effects Effects 0.000 claims description 4
- 238000011156 evaluation Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 claims description 3
- 238000003066 decision tree Methods 0.000 claims description 2
- 238000013461 design Methods 0.000 claims description 2
- 230000003068 static effect Effects 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 12
- 238000007796 conventional method Methods 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000005206 flow analysis Methods 0.000 description 2
- 230000002547 anomalous effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004575 stone Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
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
本发明公布了一种针对java异常处理代码的测试方法,该方法主要是通过评估不同插桩策略来解决使用插桩技术生成针对异常处理代码的测试可信度不高的问题,实现了针对异常处理代码的测试工具。包括以下步骤:步骤1:评价不同插桩策略对测试可信度的影响;步骤2:自动根据待测异常处理代码选择插桩策略;步骤3:开发测试工具来实现对异常处理代码的测试。本发明通过以上步骤可以实现一个针对java异常处理代码的测试方法,能产生测试用例对常规方法难以测试的异常处理结构进行测试。
Description
技术领域
本发明涉及一种基于代码插桩技术的针对异常处理代码的白盒测试方法,主要是利用错误植入技术来解决异常处理代码难以测试的问题,进而生成测试用例,完成测试任务。属于软件工程、白盒测试、错误植入交叉技术领域。
背景技术
随着越来越多的程序设计语言中引入了异常处理结构,软件设计者越来越多的体会到异常处理结构对于程序设计带来的便利。一方面,异常结构帮助理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解;另一方面,一些研究成果表明,异常处理结构相关代码的缺陷密度要远远高于软件的平均缺陷密度。然而通过常规的测试方法,难以满足异常的触发条件,从而使通过测试的来提高代码质量的方法在异常处理时有些乏力。
软件测试是工业界常用的确保软件质量的方法。软件测试是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题。软件测试在软件的生命周期里扮演着越来越重的角色。
目前的针对异常处理结构的测试工作,主要集中在构建程序表达和覆盖度准则。前者的工作是将异常处理结构加入到一些分析技术如控制流分析、数据流分析、控制依赖分析等;后者的工作是将结构加入到分析技术后,来评估已有的测试用例对于异常处理结构的覆盖情况。
异常处理结构的测试,相比于一般程序代码的测试有着固有的难点。对于常规的软件测试,对于预期的输入给出预期的输出,使用常规的黑盒白盒测试方法就可以完成测试任务,然而对于异常处理代码,这些方法生成的测试用例只能有非常低的覆盖率。原因是常规的测试输入难以达到异常产生的条件,很难覆盖到异常处理代码。
错误植入技术是通过动态修改运行程序创造错误,破坏程序的前置条件或后置条件的满足,通过这种方法人为的增加错误来改变程序的运行路径,可以使程序执行到原本执行不到的路径,从而提高测试覆盖率。通过错误植入技术可以将异常处理代码测试问题转换为常规的测试问题。
发明内容
技术问题:本发明的目的是针对异常处理代码进行测试,以错误植入技术为基础,通过分析开源项目在不同位置进行错误植入对于测试结果的影响,构造出分类器为待测代码选择最优的错误植入的插桩策略,最终生成测试用例完成测试任务。
技术方案:为了实现上述发明目的,本发明采用的技术方案为:一种针对异常处理代码的测试方法,首先选取有充足测试用例的开源项目,通过获取程序特征以及不同插桩策略的错误植入对测试用例运行石的程序路径的影响,构造出针对程序特征的插桩策略分类器,用于选出对测试路径影响最小的插桩策略;然后以分类器算法为核心完成测试工具,对待测项目生成对应错误植入集,选择语句覆盖测试工具生成测试用例覆盖错误植入集,最终完成测试任务。
针对异常处理代码的测试方法包括以下步骤:
步骤1:评价不同插桩策略对测试可信度的影响。
具体的步骤如下:
步骤1.1:获取程序执行路径;
步骤1.2:根据不同插桩策略生成插桩位置;
步骤1.3:对不同插桩位置插桩后运行得到程序路径;
步骤1.4:比较程序路径和未插桩是否相同,获得测试可信度。
本发明所述测试可信度是指在错误植入下进行的测试活动,由于错误植入修改了源码,有可能导致修改了某些系统条件,从而在接下来的测试过程中执行的路径和应该执行的路径不一致,这种情况下测试可信度就会降低。
本发明所述的插桩策略是指在错误植入时在若干位置加入某条语句能完成相同的使程序跳转到异常处理代码的功能,不同的插桩策略就是指在不同的位置完成错误植入。
步骤2:设计算法来自动根据待测异常处理代码选择插桩策略。
具体的步骤如下:
步骤2.1:由步骤1收集评价结果并获取开源项目的异常处理相关代码特征;
步骤2.2:构造分类器;
步骤2.3:使用交叉验证确定分类器精度。
步骤3:开发测试工具来实现对java异常处理代码的测试。
测试工具的功能包括扩展训练所需开源项目、对新项目进行针对异常处理代码测试两部分。扩展训练所需开源项目从而使分类器的结果可以更加准确,测试工具的主要功能是对新项目进行针对异常处理代码的测试。
有益效果:本发明所述的一种针对异常处理代码的测试方法实现了针对异常处理代码的测试。具体来说,本发明所述的方法具有如下的有益效果:
(1)在本发明所述的一种针对异常处理代码的测试方法中,通过错误植入的方法,实现了用于异常处理代码测试的测试用例生成。而这些用例使用常规的测试生成方法生成后并不能完成测试异常处理代码的测试。
(2)在本发明所述的一种针对异常处理代码的测试方法中,评价了不同插桩策略对于程序运行的影响,这种影响在进行测试活动时是无法忽略的。
(3)在本发明所述的一种针对异常处理代码的测试方法中,开发了针对java语言的测试工具。测试工具可以扩展训练所需的开源项目,因而可以使分类模型的精确度随着时间而更新。
附图说明
图1是本发明实施例的具体实施流程图。
图2是本发明实施例的错误植入示意图。
图3是用户在使用测试工具时和工具的交互示意图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。
使用错误植入技术来解决异常处理代码的测试问题时,在控制流图上可以找到很多的位置实现错误植入来达到同样的效果。在不同位置错误植入时对于程序的运行路径有时会有影响。本发明通过分析不同位置错误植入对于程序运行的影响,以分类器作为基础,给出最优的插桩策略,从而解决了错误植入技术会降低测试可信度的问题。本发明进而开发出基于java语言的测试工具,一方面可以针对Java语言进行针对异常处理代码的测试用例生成,另一方面可以根据用户的需求进一步进行训练分类器,提高分类器的精度。
下面对本发明的具体实施方式作更详细的描述。
一.评价不同插桩策略对测试可信度的影响
主要分为三部分,首先要获取不同插桩策略测试可信度,其次要能生成不同插桩策略,最后进行评价结果。大致流程如图1所示。以Java代码为例:
1、获取程序执行路径
首先使用jdt获取Java源码对应AST,在AST上对java源码进行基本块划分,对基本块进行插桩以收集程序运行路径,使得程序在执行测试用例时能够记录运行路径。
2、根据不同插桩策略生成插桩位置
选取开源项目中能触发异常的测试用例,运行用例来获得程序原本触发异常的运行路径,在路径中执行分析算法得到所有符合条件的插桩位置,并从其中选择有代表性的插桩位置作为评估使用,这些策略即为评估需要的不同的插桩策略,然后由插桩策略可以得到具体的插桩位置。插桩策略包含
(1)Try块入口
(2)方法入口:第一个调用方法入口
(3)方法入口:中间方法入口
(4)方法入口:最后一个调用方法入口
(5)Throw语句之前
3、对不同插桩位置插桩后运行得到程序路径
对程序再次进行插桩处理以便自由选择执行不同的插桩策略,通过系统属性来选择不同的插桩策略,记录下不同插桩位置时的程序执行路径。
4、评价结果
比较执行不同策略的错误植入对于测试可信度的影响,记录不同策略下程序执行路径和原始执行路径的相似程度。
二.自动根据待测异常处理代码选择插桩策略
由上述不同插桩策略对程序运行的影响,和代码的静态特征:异常类型、异常代码和外部资源数据依赖、异常代码和全局变量的数据依赖、异常距离方法入口的相对距离、所在方法的长度等信息,使用现在流行的分类算法决策树C4.5,经过训练和交叉验证,最终得出本发明所需的分类器。图2是错误植入示意图。
三.开发测试工具来实现对java异常处理代码的测试
测试工具的功能包括扩展训练所需开源项目、对新项目进行针对异常处理代码测试两部分。扩展训练所需开源项目从而使分类器的结果可以更加准确,测试工具的主要功能是对新项目进行针对异常处理代码的测试。
扩展训练所需开源项目:将步骤1的方法用于用户提供的项目,将收集新的数据加入,并修改分类器模型,重新进行交叉验证。
对新项目进行测试:输入用户提供的新项目,分析其中异常处理结构,提取其特征,由分类器得到对应插桩策略,进行错误植入,生成用例以触发异常,最终完成测试任务。图3是用户在使用测试工具时和工具的交互示意图。
本发明已以较佳实施例公开如上,但它们并不是用来限定本发明,凡不脱离本发明之精神和范围内,自当可作各种变化或润饰,因此本发明的保护范围应当以本申请的权利要求保护范围所界定的为准。
Claims (7)
1.一种针对异常处理代码的测试方法,其特征在于:首先选取有充足测试用例的开源项目,通过获取程序特征和不同插桩策略的错误植入对测试用例运行时路径的影响,构造出针对程序特征的插桩策略分类器,以选出对测试路径影响最小的插桩策略;然后以分类器算法为核心构造出测试工具,对待测项目生成对应错误植入集,选择语句覆盖测试工具生成测试用例覆盖错误植入集,最终完成测试任务。
2.根据权利要求1所述的针对异常处理代码测试方法,其特征在于,该方法所包含的步骤为:
步骤一:评价不同插桩策略对测试可信度的影响;
具体步骤为:
步骤1.1:获取程序执行路径;
步骤1.2:根据不同插桩策略生成插桩位置;
步骤1.3:对不同插桩位置插桩后运行得到程序路径;
步骤1.4:比较程序路径和未插桩是否相同,获得可信度;
步骤二:设计算法来自动根据待测异常处理代码选择插桩策略;
具体步骤为:
步骤2.1:由步骤一收集评价结果并获取开源项目的异常处理相关代码特征;
步骤2.2:构造分类器;
步骤2.3:使用交叉验证确定分类器精度;
步骤三:开发测试工具来实现对java异常处理代码的测试。
3.根据权利要求2所述的针对异常处理代码测试方法,其特征在于,步骤一中:
所述测试可信度是指在错误植入下进行的测试活动,由于错误植入修改了源码,有可能导致修改了某些系统条件,从而在接下来的测试过程中执行的路径和应该执行的路径不一致,这种情况下测试可信度就会降低。
4.根据权利要求2所述的针对异常处理代码测试方法,其特征在于,步骤一中:
所述插桩策略是指在错误植入时在若干位置加入某条语句能完成相同的使程序跳转到异常处理代码的功能,不同的插桩策略就是指在不同的位置完成错误植入。
5.根据权利要求2所述的针对异常处理代码测试方法,其特征在于,步骤二中:
由不同插桩策略对程序运行的影响,和代码的静态特征:异常类型、异常代码和外部资源数据依赖、异常代码和全局变量的数据依赖、异常距离方法入口的相对距离、所在方法的长度等信息,使用分类算法决策树,经过训练和交叉验证,最终得出所需的分类器。
6.根据权利要求2所述的针对异常处理代码测试方法,其特征在于,步骤三中:
测试工具的功能包括扩展训练所需开源项目、对新项目进行针对异常处理代码测试两部分;扩展训练所需开源项目使分类器的结果准确,测试工具对新项目进行针对异常处理代码的测试。
7.根据权利要求6所述的针对异常处理代码测试方法,其特征在于:
扩展训练所需开源项目:将步骤一的方法用于用户提供的项目,将收集新的数据加入,并修改分类器模型,重新进行交叉验证;
对新项目进行针对异常处理代码的测试:输入用户提供的新项目,分析其中异常处理结构,提取其特征,由分类器得到对应插桩策略,进行错误植入,生成用例以触发异常,最终完成测试任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610122013.5A CN105701016B (zh) | 2016-03-03 | 2016-03-03 | 一种针对异常处理代码的测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610122013.5A CN105701016B (zh) | 2016-03-03 | 2016-03-03 | 一种针对异常处理代码的测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105701016A true CN105701016A (zh) | 2016-06-22 |
CN105701016B CN105701016B (zh) | 2018-06-29 |
Family
ID=56219973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610122013.5A Active CN105701016B (zh) | 2016-03-03 | 2016-03-03 | 一种针对异常处理代码的测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105701016B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN110297989A (zh) * | 2019-06-25 | 2019-10-01 | 北京百度网讯科技有限公司 | 异常检测的测试方法、装置、设备和介质 |
CN111061644A (zh) * | 2019-12-25 | 2020-04-24 | 南京大学 | 一种检测并定位异常抛出处理缺陷的方法和装置 |
CN112612692A (zh) * | 2020-12-07 | 2021-04-06 | 中标软件有限公司 | 一种linux系统性能调优的方法 |
CN112687298A (zh) * | 2019-10-18 | 2021-04-20 | Oppo广东移动通信有限公司 | 语音唤醒优化方法及装置、系统、存储介质和电子设备 |
CN113791976A (zh) * | 2021-09-09 | 2021-12-14 | 南京大学 | 一种基于程序依赖增强缺陷定位的方法和装置 |
CN114185324A (zh) * | 2021-10-25 | 2022-03-15 | 华能澜沧江水电股份有限公司 | 自动发电控制程序的异常点检测方法、装置及计算机设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080134160A1 (en) * | 2006-06-22 | 2008-06-05 | Abhijit Belapurkar | Software fault injection in java enterprise applications |
CN101853189A (zh) * | 2010-05-26 | 2010-10-06 | 北京航空航天大学 | 一种基于Java的异常处理装置及其异常处理方法 |
-
2016
- 2016-03-03 CN CN201610122013.5A patent/CN105701016B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080134160A1 (en) * | 2006-06-22 | 2008-06-05 | Abhijit Belapurkar | Software fault injection in java enterprise applications |
CN101853189A (zh) * | 2010-05-26 | 2010-10-06 | 北京航空航天大学 | 一种基于Java的异常处理装置及其异常处理方法 |
Non-Patent Citations (2)
Title |
---|
GHANI A.KANAWATI ETC.: "FERRARI: A Flexible Software-Based Fault and Error Injection System", 《IEEE TRANSACTIONS ON COMPUTERS》 * |
王克朝 等: "面向程序分析的插桩技术研究", 《计算机应用研究》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN110297989A (zh) * | 2019-06-25 | 2019-10-01 | 北京百度网讯科技有限公司 | 异常检测的测试方法、装置、设备和介质 |
CN110297989B (zh) * | 2019-06-25 | 2021-07-23 | 北京百度网讯科技有限公司 | 异常检测的测试方法、装置、设备和介质 |
CN112687298A (zh) * | 2019-10-18 | 2021-04-20 | Oppo广东移动通信有限公司 | 语音唤醒优化方法及装置、系统、存储介质和电子设备 |
CN111061644A (zh) * | 2019-12-25 | 2020-04-24 | 南京大学 | 一种检测并定位异常抛出处理缺陷的方法和装置 |
CN112612692A (zh) * | 2020-12-07 | 2021-04-06 | 中标软件有限公司 | 一种linux系统性能调优的方法 |
CN112612692B (zh) * | 2020-12-07 | 2024-01-26 | 中标软件有限公司 | 一种linux系统性能调优的方法 |
CN113791976A (zh) * | 2021-09-09 | 2021-12-14 | 南京大学 | 一种基于程序依赖增强缺陷定位的方法和装置 |
CN113791976B (zh) * | 2021-09-09 | 2023-06-20 | 南京大学 | 一种基于程序依赖增强缺陷定位的方法和装置 |
CN114185324A (zh) * | 2021-10-25 | 2022-03-15 | 华能澜沧江水电股份有限公司 | 自动发电控制程序的异常点检测方法、装置及计算机设备 |
CN114185324B (zh) * | 2021-10-25 | 2024-04-02 | 华能澜沧江水电股份有限公司 | 自动发电控制程序的异常点检测方法、装置及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105701016B (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105701016A (zh) | 一种针对异常处理代码的测试方法 | |
CN109739755B (zh) | 一种基于程序追踪和混合执行的模糊测试系统 | |
CN108647520B (zh) | 一种基于脆弱性学习的智能模糊测试方法与系统 | |
Le et al. | Enhancing automated program repair with deductive verification | |
US8140911B2 (en) | Dynamic software tracing | |
CN103218296B (zh) | 一种充分检测空指针引用缺陷的方法 | |
Denisov et al. | Mull it over: mutation testing based on LLVM | |
US20170249234A1 (en) | Data-augmented software diagnosis method and a diagnoser therefor | |
CN110046089A (zh) | 一种基于路径覆盖充分性准则的智能合约测试方法 | |
CN103530228A (zh) | 一种基于模型的软件测试方法 | |
CN105653946A (zh) | 基于组合事件行为触发的Android恶意行为检测系统及其检测方法 | |
CN103279631A (zh) | 设计模式制导的爪哇代码评审方法 | |
CN103218297B (zh) | 测试数据的筛选方法及装置 | |
CN115906092A (zh) | 一种跨合约检测智能合约漏洞的符号执行方法 | |
CN113836023B (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 | |
CN103309805A (zh) | xUnit框架下面向对象软件中测试目标的自动化选择方法 | |
Ye et al. | Automatic regression test selection based on activity diagrams | |
CN114201754A (zh) | 一种基于符号抽象分析的智能合约安全审计方法 | |
CN113836009A (zh) | 一种基于强化学习的智能合约模糊测试方法及系统 | |
CN104536880A (zh) | 基于符号执行的gui程序测试用例扩增方法 | |
Saumya et al. | Xstressor: Automatic generation of large-scale worst-case test inputs by inferring path conditions | |
Mishra et al. | Analysis of test case prioritization in regression testing using genetic algorithm | |
CN104484266A (zh) | 一种锁使用模式自动化静态分析系统 | |
Zhao et al. | H-fuzzing: A new heuristic method for fuzzing data generation | |
CN109426612B (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 |