CN104317706B - 一种基于预运算的程序变异软件错误定位方法 - Google Patents
一种基于预运算的程序变异软件错误定位方法 Download PDFInfo
- Publication number
- CN104317706B CN104317706B CN201410546540.XA CN201410546540A CN104317706B CN 104317706 B CN104317706 B CN 104317706B CN 201410546540 A CN201410546540 A CN 201410546540A CN 104317706 B CN104317706 B CN 104317706B
- Authority
- CN
- China
- Prior art keywords
- program
- version
- variation
- execution information
- software
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明属于软件测试领域,涉及一种基于预运算的程序变异软件错误定位方法,步骤包括:利用程序编写的过程中获得的中间版本的程序生成多个变异版本的程序;执行变异版本的程序,收集各个版本程序的执行信息,所述执行信息包括执行结果和次数;当程序编写完毕后,执行最终版本的程序,收集最终版本程序的执行信息;比较变异版本的程序与最终版本程序的各自的程序信息,定位软件错误位置。本发明在利用变异进行程序错误定位,准确率非常高,使用预计算策略进行加速,测试效率也非常高,比现有错误定位方法在准确率和效率都有提高。
Description
技术领域
本发明属于软件测试技术领域,涉及一种软件错误定位方法,特别提供了基于预运算的程序变异软件错误定位方法,可应用于动态的软件错误定位。
背景技术
在敏捷软件持续集成开发过程中,要求软件开发要在编码和测试迭代进行,即编写代码的工作人员每个周期提供一个版本,测试人员进行测试之后再交给编写代码工作人员进行下一个版本的编写,这样的持续集成开发环境可以有效的保证软件开发的效率。但是这样的迭代方式对于编写代码人员与测试人员都存在大量的空闲时间,降低了效率。我们利用在编写代码的过程中软件测试人员就开始进行预测试,将测试的任务在代码编写的过程中完成一部分,来加快软件开发的效率。
另外,为了修改软件中存在的错误,对错误进行定位是必要的步骤之一。软件测试中的错误定位是最困难、最耗时的任务,错误定位是软件测试的瓶颈,使用一种自动化的错误定位技术来协助程序员找到错误是解决软件测试问题的趋势。
学术界早在十年前已经提出了自动化错误定位的概念,最近许多的软件自动错误定位技术通过分析成功和失败测试用例的覆盖信息辅助程序员定位错误代码,Jaccard、Tarantula等人在2002年基于此类方法进行了研究,这类技术统称为基于覆盖信息的错误定位技术。要应用此类分析技术,必须具备两个关键因素:(1)一个(或一组)用于参考的程序执行信息特征,用以提供分析语句可疑度的信息;(2)一个评估函数,用以衡量语句的可疑度。
尽管基于覆盖信息的错误定位技术取得初步成功,但其准确率受到许多负面因素影响,Baudry等人在2006年研究表明了覆盖了程序错误代码的成功测试用例会显著影响基于覆盖信息的错误定位技术的准确率,目前这种错误定位方法的平均运行时间低于5秒,但是在检查5%代码的情况下对错误定位的平均准确率不超过30%。
Papadakis等学者利用程序变异提高错误定位的准确率,其方法是对于程序中的每一个可执行语句S应用不同的变异算子生成若干变异程序,然后对每个变异程序收集运行的覆盖信息,分析语句的可疑度,贺涛等研究人员对其进行了优化与集成并且制作了一款名为Muffler的自动化测试工具。这种错误定位方法在检查5%代码的情况下对错误定位的平均准确率超过60%,但是平均运行时间超过了500秒。
基于覆盖信息的自动化错误定位技术拥有较高的效率,但是准确率很低,基于程序变异的自动化错误定位技术拥有比较高的准确率,但是效率非常低,严重影响了实用性,有必要寻找一种准确率高并且效率也高的自动化错误定位技术。
发明内容
本发明技术解决问题:克服现有技术中存在的上述问题,提供一种基于预计算的程序变异软件错误定位方法,大大提高了准确率和效率。
本发明技术解决方案:一种基于预计算的程序变异软件错误定位方法,原理为:
软件开发需要在编写代码与测试这两个过程中进行迭代,如图(1)a所示,为了减少编写代码人员和测试人员的空闲时间,将测试的任务一部分提前在代码编写的过程中,即预测试可以有效的提高软件开发的效率,如图1(b)所示。
错误定位是软件测试的一个耗时最长、精确度要求高的一个瓶颈,提高错误定位的准确度和效率是加快软件测试的核心。目前基于覆盖信息的错误定位技术准确率低,并且必须在代码编写完成才能进行计算,不适合进行预测试;相反的是基于程序变异的错误定位方法有很高的准确率但是消耗的时间非常大,一个不完整的程序变异与完整程序的变异的本质都是变异,对结果的损失很小,可以进行预测试。
本发明的方法,其步骤包括(见图2与图3):
步骤1、利用程序编写的过程中获得的中间版本的程序生成多个变异版本的程序;
步骤2、执行变异版本的程序,收集各个版本程序的执行信息,所述执行信息包括执行结果(true或false)和次数;
步骤3、当程序编写完毕后,执行最终版本的程序,收集最终版本程序的执行信息;
步骤4、比较变异版本的程序与最终版本程序的各自的程序信息,定位软件错误位置。
本发明与现有技术相比的优点在于:
(1)将测试程序的过程的一部分与编写程序的过程并行执行,即在编写程序的过程中对测试进行预计算,减少了编写程序与测试程序这个过程的整体时间消耗。
(2)本发明在利用变异进行程序错误定位,准确率非常高,使用预计算策略进行加速,测试效率也非常高,比现有错误定位方法在准确率和效率都有提高。
附图说明
图1(a)和(b)分别为程序编写与测试在未应用预测试与应用预测试的对比;
图2为基于预计算的程序变异软件错误定位方法的简明框图;
图3为基于预计算的程序变异软件错误定位方法的具体流程图。
具体实施方式
如图2所示,本发明具体流程主要分为四个步骤,其中前两个步骤在编写程序的过程中进行,即为预运算的过程,进行预测试,后两个步骤在程序编写结束后进行。具体的步骤描述如图3所示:
步骤1、编程人员编程得到了中间版本代码,可能是没有完成的代码,也可能是一个功能不全的版本,这些版本都可以视为中间版本代码,可以用来做预运算测试,对这些代码进行变异,每一个变异的版本是指对中间版本的代码中的一条语句进行随机修改,例如对一个程序中的某条语句中的一个变量加1,这样就是获得的一个变异版本的程序;
步骤2、执行变异版本的程序,收集各个版本的变异版本程序的执行信息,所述执行信息包括执行结果和次数,通过gcov等测试代码覆盖率的工具获取程序对每一个语句的覆盖信息(每一条语句是否被执行),这样就得到了变异语句的位置与执行结果(包括覆盖信息)与这一对信息;
步骤3、当程序编写完毕后,执行最终版本的程序,收集最终版本程序的执行信息与覆盖信息,最终版本的含义是指需要在这个版本的程序上进行测试;
步骤4、比较变异版本的程序与最终版本程序的各自的执行信息与覆盖信息,与最终版本程序的信息相似度越高的变异版本,其变异语句的位置是错误位置的可能性越大,由此规律来定位软件错误位置。
提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。
Claims (1)
1.一种基于预运算的程序变异软件错误定位方法,其步骤包括:
(1)利用程序编写的过程中获得的中间版本生成多个变异版本的程序;
(2)执行变异版本的程序,收集各个版本程序的执行信息;所述执行信息包括执行结果和次数;
(3)当程序编写完毕后,执行最终版本的程序,收集最终版本程序的执行信息;
(4)比较变异版本的程序与最终版本程序的各自的执行信息,定位软件错误位置;
所述步骤(1)为在编写代码过程中利用生成的中间版本程序生成多个变异版本的程序;
所述步骤(2)为在编写代码过程中利用生成的多个变异版本的程序执行获取执行信息;
所述步骤(1)与步骤(2)中的操作为测试的预运算,即编写测试为在编写代码过程中并行的进行软件测试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410546540.XA CN104317706B (zh) | 2014-10-15 | 2014-10-15 | 一种基于预运算的程序变异软件错误定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410546540.XA CN104317706B (zh) | 2014-10-15 | 2014-10-15 | 一种基于预运算的程序变异软件错误定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104317706A CN104317706A (zh) | 2015-01-28 |
CN104317706B true CN104317706B (zh) | 2017-08-25 |
Family
ID=52372941
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410546540.XA Active CN104317706B (zh) | 2014-10-15 | 2014-10-15 | 一种基于预运算的程序变异软件错误定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104317706B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302719B (zh) * | 2015-10-26 | 2017-11-28 | 北京科技大学 | 一种变异测试方法及装置 |
CN116594870B (zh) * | 2023-04-26 | 2024-02-23 | 南通大学 | 一种基于可疑语句变异的错误定位方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106133A (zh) * | 2011-11-09 | 2013-05-15 | 阿里巴巴集团控股有限公司 | 软件缺陷定位方法及系统 |
CN103995780A (zh) * | 2014-05-30 | 2014-08-20 | 浙江理工大学 | 一种基于语句频度统计的程序错误定位方法 |
-
2014
- 2014-10-15 CN CN201410546540.XA patent/CN104317706B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106133A (zh) * | 2011-11-09 | 2013-05-15 | 阿里巴巴集团控股有限公司 | 软件缺陷定位方法及系统 |
CN103995780A (zh) * | 2014-05-30 | 2014-08-20 | 浙江理工大学 | 一种基于语句频度统计的程序错误定位方法 |
Non-Patent Citations (3)
Title |
---|
"边开发边测试"给测试带来的变化;zdlzx;《http://www.51testing.com/html/03/n-823303.html》;20120910;全文 * |
Using Mutants to Locate "Unknown" Faults;Mike Papadakis等;《2012 IEEE Fifth International Conference on Software Testing, Verification and Validation》;20120421;第691-700页 * |
一种基于程序变异的软件错误定位技术;贺韬等;《计算机学报》;20131209;第36卷(第11期);第2237-2240页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104317706A (zh) | 2015-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Software testing with large language models: Survey, landscape, and vision | |
Felix et al. | Integrated approach to software defect prediction | |
CN105843743B (zh) | 一种特殊自动化测试用例实际输出结果正确性的验证方法 | |
Chandra et al. | Improving software quality using machine learning | |
CN107797929A (zh) | 可编程逻辑仿真测试功能覆盖率的统计方法和装置 | |
CN101576850B (zh) | 一种改进的面向宿主的嵌入式软件白盒测试方法 | |
de Souza et al. | A novel fitness function for automated program repair based on source code checkpoints | |
CN107168868B (zh) | 一种基于采样和集成学习的软件更改缺陷预测方法 | |
Li et al. | Comparing programmer productivity in OpenACC and CUDA: An empirical investigation | |
Wan et al. | Software/hardware co-design for llm and its application for design verification | |
CN107622017B (zh) | 一种通用自动化软件测试的解析方法 | |
CN104317706B (zh) | 一种基于预运算的程序变异软件错误定位方法 | |
Pan et al. | Automatic noisy label correction for fine-grained entity typing | |
Usman et al. | NEUROSPF: A tool for the Symbolic Analysis of Neural Networks | |
Ojdanic et al. | On comparing mutation testing tools through learning-based mutant selection | |
CN114036040A (zh) | 基于细粒度信息同步的软件混合模糊测试方法及设备 | |
CN106598843A (zh) | 一种基于程序分析的软件日志行为自动识别方法 | |
Cipiti et al. | Bulk handling facility modeling and simulation for safeguards analysis | |
CN111474894B (zh) | 可变目标plc仿真调试方法、存储介质及功能模块 | |
Santiesteban et al. | Cirfix: Automated hardware repair and its real-world applications | |
Malhotra et al. | A new metric for predicting software change using gene expression programming | |
Jain et al. | Contextual Predictive Mutation Testing | |
Valueian et al. | Constructing automated test oracle for low observable software | |
Parasaram et al. | The Fact Selection Problem in LLM-Based Program Repair | |
CN105677966A (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 |