CN110515826A - 一种基于次数频谱与神经网络算法的软件缺陷定位方法 - Google Patents
一种基于次数频谱与神经网络算法的软件缺陷定位方法 Download PDFInfo
- Publication number
- CN110515826A CN110515826A CN201910594565.XA CN201910594565A CN110515826A CN 110515826 A CN110515826 A CN 110515826A CN 201910594565 A CN201910594565 A CN 201910594565A CN 110515826 A CN110515826 A CN 110515826A
- Authority
- CN
- China
- Prior art keywords
- program
- frequency spectrum
- test case
- sentence
- contingency
- 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
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/3676—Test management for coverage analysis
-
- 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
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于次数频谱与神经网络算法的软件缺陷定位方法,本发明所提出的方法考虑了由于循环等过程的存在引起语句多次执行,使用程序分支计数频谱对覆盖信息进行扩展,并将其作为BP神经网络的输入,实现运用机器学习的方法实现软件缺陷定位的目标。基于覆盖的程序缺陷定位方法利用覆盖信息来定位程序的缺陷语句。然而,这些方法可能会受到代码偶然性正确性的不利影响。偶然性正确是指在执行缺陷语句后,并没有触发错误的测试用例执行过程。本方法将会发生偶然性正确的测试用例的执行结果统一修正为错误的方法,在最大程度上避免偶然性正确对程序定位性能的影响。
Description
技术领域
本发明属于软件工程的自动化测试方法领域,涉及排除偶然性正确测试用例影响,基于次数频谱,运用神经网络算法,实现软件缺陷定位的方法,具体涉及一种基于次数频谱与神经网络算法的软件缺陷定位方法。
背景技术
软件缺陷是软件产品中会导致软件失效的瑕疵。可以基于对软件本身代码进行统计分析推断软件缺陷,也可以基于软件频谱信息软件自动化测试技术主要研究点包括软件缺陷预测和软件缺陷定位两个方向。软件缺陷定位的目是准确确定缺陷的位置。软件缺陷定位是一项非常繁琐且耗时,被认为是程序调试中最昂贵的活动之一。软件缺陷的行为算法旨在帮助开发人员更高效地发现缺陷。例如,基于程序切片的缺陷定位方法使用程序片进行有效的统计缺陷定位,基于不变量的缺陷定位方法,基于谓词的缺陷定位方法。
基于程序切片的缺陷定位方法可分为两个主要阶段:静态缺陷定位,动态缺陷定位。这些方法通过缩小搜索空间来定位缺陷。基于不变量的方法尝试在失败的程序执行中发现违反程序属性以定位缺陷。基于谓词的缺陷方法主要使用抽样方法在执行过程中收集谓词覆盖率数据。谓词根据其可疑分数划分优先级,这表明谓词和程序缺陷之间的关系。应首先检查具有较高分数的谓词,以帮助程序员找到缺陷。基于程序频谱的软件缺陷定位方法通过在某些方面记录程序的执行信息来跟踪程序行为,如代码的执行时间,分支或循环的信息。它可用于计算代码行的可疑值。基于程序频谱的软件缺陷定位方法是一种更有效的软件缺陷定位方法,因为没有必要考虑程序本身的内部结构而且执行成本低。基于程序频谱的软件缺陷定位方法是目前研究最为广泛的缺陷定位方法。程序频谱通常是指程序在执行期间代码覆盖信息的集合,它是程序动态行为特征的描述。程序频谱的收集通过以下3个步骤:首先,准备用于测试的测试用例集以及可执行的待测程序;然后,将测试用例集中的测试用例在待测程序中执行,并标记测试用例对程序语句的覆盖情况。最后,将测试用例的执行结果与预期结果进行比较,获得执行结果是否正确的标签信息。重复上述步骤,直到运行完全部测试用例,即可收集到程序语句执行覆盖信息以及测试用例的执行结果标签信息,获得覆盖信息表。覆盖信息表和一组测试用例标签可用于识别程序源代码的定量度量信息。程序语句根据可疑值进行优先排序,可通过覆盖率信息和标签计算。可疑值较高的代码行更有可能包含缺陷。基于频谱的故障定位方法的基本思想是一条语句的可疑值会随着被失败测试用例执行次数的增加而增加,与此相反,一条语句的可疑值会随着被成功测试用例执行次数的增加而减少。
发明内容
本发明的目的在于克服现有方法的不足,提供一种基于次数频谱与神经网络算法的软件缺陷定位方法。本发明通过收集程序分支计数频谱信息,排除偶然性正确测试用例的干扰,并使用神经网络模型提高软件缺陷定位效率。
本发明一种基于次数频谱与神经网络算法的软件缺陷定位方法,具体包括以下步骤:
步骤一:执行正确的测试用例,并得到执行结果;
在不同待测程序中分别包含有正确的测试用例,运行完正确的测试用例并保存相应的执行结果;
步骤二:执行所有的包含不同错误的测试用例集,并保存结果;
不同的待测程序中分别包含有各自带有不同错误的测试用例集,执行所有的错误测试用例集,得到对应的结果;
步骤三:根据程序运行,收集程序分支触发频谱和程序分支计数频谱;
在Ubuntun***中使用GCC对源程序进行编译处理,然后使用Gcov工具收集测试用例的语句覆盖信息和执行结果,得到程序分支触发频谱和程序语句计数频谱;其中程序分支触发频谱收集程序语句是否执行,程序分支触发频谱收集程序语句执行的次数;
步骤四:把收集到的程序频谱输入神经网络中,训练得到一个稳定的神经网络模型;
步骤五:设置虚拟单位矩阵,输出每条语句的可疑值;
在神经网络中设置一个等同于程序语句的单位矩阵作为虚拟矩阵,得到每条语句的可疑值;
步骤六:排除偶然性正确测试用例的干扰;
在成功测试用例集中查找与失败测试用例语句覆盖信息完全一致的测试用例,称之为偶然性正确测试用例,把偶然性正确测试用例的执行结果改为失败,或者删除偶然性正确测试用例;
步骤七:根据EXAM值对程序语句进行排序,从高到低依次检查程序语句是否包含错误,直到找到错误语句。
本发明较传统方法来说有以下显著优点
(1)突出了程序中由于循环等的存在程序语的执行次数对执行结果的影响。
(2)排除了偶然性正确测试用例对程序语句可疑值计算的干扰。
(3)使用神经网络代替传统的手工计算的方式。
本发明采用的具体实现方法是:
(1)执行正确的测试用例,并得到执行结果;
(2)执行所有的包含不同错误的测试用例集,并保存结果;
(3)根据程序运行,收集程序分支触发频谱和程序分支计数频谱;
(4)排除偶然性正确测试用例的干扰;
(5)把收集到的程序频谱输入神经网络中,训练得到一个稳定的神经网络模型;
(6)设置虚拟单位矩阵,输出每条语句的可疑值;
(7)依据EXAM值对程序语句进行排序,从高到低依次检查程序语句是否包含错误,直到找到错误语句。
有益效果:由本发明提出的方法,突出强调程序中由于循环等存在程序语句执行次数对测试用例执行结果的影响,并且排除偶然性正确测试用例对语句可疑值计算的干扰,使用神经网络模型代替传统的手工计算方式,使得程序员能够检查较少的程序语句就能够定位到错误语句,提高了软件缺陷定位的效率。
附图说明
图1是本发明的软件缺陷定位的流程图;
图2是本发明的神经网络结构图;
图3是本发明的实验结果综合示例图;
图4是本发明神经网络的BHS和BCS与传统方法对比的示例图;
图5是本发明修改偶然性正确测试用例执行结果与神经网络方法对比示例图;
图6是本发明删除偶然性正确测试用例结果示例图。
具体实施方式
下面结合实例附图进行进一步详细说明本发明的具体实现方法:
(1)执行正确的测试用例,并得到执行结果;
实例是在Siemens Suite数据集上进行,Siemens Suite数据集包含了print_tokens、print_tokens2、Schedule、Schedule2、replace、tcas、tot_info 7个子数据集,分别执行每个数据集正确版本的源代码,并得到执行结果。
(2)执行所有的包含不同错误的测试用例集,并保存结果;
在每个数据集中分别包含有不同错误版本的可执行代码,例如print_tokens包含有7个不同错误版本的源程序,每个错误版本中有4000多个测试用例。自动化执行完所有的测试用里,得到执行结果。
(3)根据程序运行,收集程序分支触发频谱和程序分支计数频谱;
在Linux***下,借助GCC工具,对源程序进行编译处理,然后,利用Gcov工具跟踪每条程序语句是否执行,以及每条语句执行了多少次。依次输出每个测试用例中语句的执行轨迹,以及最后执行结果标签,分别得到程序分支触发频谱和程序分支计数频谱。
图1是整个的软件缺陷定位的流程图;源程序和测试用例作为收集程序分支触发频谱和程序分支次数频谱的基础。
(4)把收集到的程序频谱输入神经网络中,训练得到一个稳定的神经网络模型;
把收集到的测试用例的程序分支触发频谱和程序分支计数频谱信息依次作为神经网络的输入向量。通过不断训练得到一个稳定的神经网络模型。
(5)设置虚拟单位矩阵,输出每条语句的可疑值;
根据每个数据集的程序语句数目分别设置一个虚拟测试用例,依次输出每条语句的可疑值。
图2为神经网络的结构图,输入神经元个数等于输入神经网络的程序频谱的语句数量,不断调整神经网络的权重和阈值,并依据程序频谱的语句数量设置虚拟单位矩阵输出每条语句的可疑值。
(6)排除偶然性正确测试用例的干扰;
理论上只要程序执行了错误语句,程序最后的执行结果就会失败。但是在实际程序运行中并不总是如此,经常会出现执行了错误语句结果仍然为正确的情况,这样的情况被称作偶然性正确。在测试时,一次测试用例运行失败时,通常是满足以下三个条件:第一,测试用例运行到某条错误代码行;第二,错误的程序状态被传播,并影响到后续的运行状态;第三,错误状态的传播影响到最后的输出。Masri等人通过统计分析发现了在很多的测试用例中偶然性正确是普遍存在的。
很多时候在同一程序执行不同的测试用例程序语句会有相同的执行轨迹,但是有的测试用例执行了错误语句执行结果有的是失败的而有的却是正确。偶然性正确测试用例的存在,确实会影响程序语句怀疑值的计算。因此人为的把执行结果为正确的改为失败,或者把偶然性正确的测试用例完全去掉,排除了偶然性正确测试用例的干扰,可以提高缺陷定位的效率。
(7)依据EXAM值对程序语句进行排序,从高到低依次检查程序语句是否包含错误,直到找到错误语句。
软件缺陷定位方法的有效性可以通过EXAM值来衡量,该值是指找到错误语句之前需要检查的语句的百分比。根据输出的语句可疑值,进行排序,依据EXAM值进行检查程序语句,直到定位到错误语句。
图3为本发明的结果综合示例图,图中展示了传统方法和本发明提出的方法进行比较,可以看出本发明提出的方法能够检查更少的错误语句找到更多的错误版本。
图4为本发明提出的基于次数频谱的神经网络定位方法与传统方法的比较,Tarantula、Ochiai、Dstar方法是基于频谱软件缺陷定位方法中比较有效的方法。
图5是把偶然性正确测试用例的执行结果修改为错误;
图6是把检查出来的偶然性正确测试用例全部删除,排除偶然性正确测试用例的干扰后,发明的方法提高了软件缺陷定位的效率。
Claims (1)
1.一种基于次数频谱与神经网络算法的软件缺陷定位方法,其特征在于,具体包括以下步骤:
步骤一:执行正确的测试用例,并得到执行结果;
在不同待测程序中分别包含有正确的测试用例,运行完正确的测试用例并保存相应的执行结果;
步骤二:执行所有的包含不同错误的测试用例集,并保存结果;
不同的待测程序中分别包含有各自带有不同错误的测试用例集,执行所有的错误测试用例集,得到对应的结果;
步骤三:根据程序运行,收集程序分支触发频谱和程序分支计数频谱;
在Ubuntun***中使用GCC对源程序进行编译处理,然后使用Gcov工具收集测试用例的语句覆盖信息和执行结果,得到程序分支触发频谱和程序语句计数频谱;其中程序分支触发频谱收集程序语句是否执行,程序分支触发频谱收集程序语句执行的次数;
步骤四:把收集到的程序频谱输入神经网络中,训练得到一个稳定的神经网络模型;
步骤五:设置虚拟单位矩阵,输出每条语句的可疑值;
在神经网络中设置一个等同于程序语句的单位矩阵作为虚拟矩阵,得到每条语句的可疑值;
步骤六:排除偶然性正确测试用例的干扰;
在成功测试用例集中查找与失败测试用例语句覆盖信息完全一致的测试用例,称之为偶然性正确测试用例,把偶然性正确测试用例的执行结果改为失败,或者删除偶然性正确测试用例;
步骤七:根据EXAM值对程序语句进行排序,从高到低依次检查程序语句是否包含错误,直到找到错误语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910594565.XA CN110515826B (zh) | 2019-07-03 | 2019-07-03 | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910594565.XA CN110515826B (zh) | 2019-07-03 | 2019-07-03 | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110515826A true CN110515826A (zh) | 2019-11-29 |
CN110515826B CN110515826B (zh) | 2022-12-02 |
Family
ID=68623156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910594565.XA Active CN110515826B (zh) | 2019-07-03 | 2019-07-03 | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110515826B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111367801A (zh) * | 2020-02-29 | 2020-07-03 | 杭州电子科技大学 | 一种面向跨公司软件缺陷预测的数据变换方法 |
CN111563044A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 一种基于程序变异的程序谱错误定位方法 |
CN112035345A (zh) * | 2020-08-20 | 2020-12-04 | 国家电网有限公司信息通信分公司 | 一种基于代码片段分析的混合深度缺陷预测方法 |
CN112965894A (zh) * | 2021-02-04 | 2021-06-15 | 重庆大学 | 一种基于上下文感知的缺陷定位方法 |
CN112965897A (zh) * | 2021-02-19 | 2021-06-15 | 浙江理工大学 | 一种基于mRMR算法挑选可疑度公式的程序错误定位方法 |
CN113688061A (zh) * | 2021-10-27 | 2021-11-23 | 南开大学 | 一种基于特征选择的程序缺陷定位方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104008051A (zh) * | 2014-05-16 | 2014-08-27 | 南京邮电大学 | 频谱信息去冗优化的软件缺陷定位方法 |
CN105975388A (zh) * | 2016-03-28 | 2016-09-28 | 南京邮电大学 | 基于频谱的增量式缺陷定位方法 |
US20180165182A1 (en) * | 2016-12-09 | 2018-06-14 | Fujitsu Limited | Automated software program repair |
-
2019
- 2019-07-03 CN CN201910594565.XA patent/CN110515826B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104008051A (zh) * | 2014-05-16 | 2014-08-27 | 南京邮电大学 | 频谱信息去冗优化的软件缺陷定位方法 |
CN105975388A (zh) * | 2016-03-28 | 2016-09-28 | 南京邮电大学 | 基于频谱的增量式缺陷定位方法 |
US20180165182A1 (en) * | 2016-12-09 | 2018-06-14 | Fujitsu Limited | Automated software program repair |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111367801A (zh) * | 2020-02-29 | 2020-07-03 | 杭州电子科技大学 | 一种面向跨公司软件缺陷预测的数据变换方法 |
CN111563044A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 一种基于程序变异的程序谱错误定位方法 |
CN111563044B (zh) * | 2020-05-11 | 2022-10-25 | 西安邮电大学 | 一种基于程序变异的程序谱错误定位方法 |
CN112035345A (zh) * | 2020-08-20 | 2020-12-04 | 国家电网有限公司信息通信分公司 | 一种基于代码片段分析的混合深度缺陷预测方法 |
CN112965894A (zh) * | 2021-02-04 | 2021-06-15 | 重庆大学 | 一种基于上下文感知的缺陷定位方法 |
CN112965894B (zh) * | 2021-02-04 | 2023-07-07 | 重庆大学 | 一种基于上下文感知的缺陷定位方法 |
CN112965897A (zh) * | 2021-02-19 | 2021-06-15 | 浙江理工大学 | 一种基于mRMR算法挑选可疑度公式的程序错误定位方法 |
CN112965897B (zh) * | 2021-02-19 | 2022-07-05 | 浙江理工大学 | 一种基于mRMR算法挑选可疑度公式的程序错误定位方法 |
CN113688061A (zh) * | 2021-10-27 | 2021-11-23 | 南开大学 | 一种基于特征选择的程序缺陷定位方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110515826B (zh) | 2022-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
Mao et al. | Slice-based statistical fault localization | |
US10678673B2 (en) | Software program fault localization | |
EP2960799A1 (en) | Defect localization in software integration tests | |
Perez et al. | Prevalence of single-fault fixes and its impact on fault localization | |
CN102831055B (zh) | 基于加权属性的测试用例选择方法 | |
US10902130B2 (en) | Guiding automated testing of binary programs | |
US20160342720A1 (en) | Method, system, and computer program for identifying design revisions in hardware design debugging | |
CN111061293B (zh) | 多参数耦合的飞行器故障定位方法、飞行器及存储介质 | |
US10761961B2 (en) | Identification of software program fault locations | |
CN103136103A (zh) | 一种面向错误定位需求的测试用例约简方法 | |
CN111400505A (zh) | 一种用电信息采集***匹配故障消缺方案的方法及*** | |
CN115629998B (zh) | 一种基于KMeans聚类和相似度的测试用例筛选方法 | |
Li et al. | Identify coincidental correct test cases based on fuzzy classification | |
CN104572474A (zh) | 一种基于动态切片的轻量级错误定位技术实现方法 | |
CN106933572B (zh) | 一种基于llvm中间表示程序切片的度量模型 | |
CN104536882A (zh) | 基于频繁子图挖掘的错误定位方法 | |
CN114153735A (zh) | 一种基于频谱技术和断言切换技术的缺陷定位方法 | |
CN111880957A (zh) | 一种基于随机森林模型的程序错误定位方法 | |
US10853051B2 (en) | Automated candidate repair patch generation | |
Motwani | High-quality automated program repair | |
Bodhe et al. | Diagnostic Fail Data Minimization Using an $ N $-Cover Algorithm | |
Chamoli et al. | Analysing software metrics for accurate dynamic defect prediction models | |
Sejfia et al. | Toward Improved Deep Learning-based Vulnerability Detection | |
CN111274129A (zh) | 一种基于动态程序失效执行块的程序错误定位方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |