CN110825650A - 单元测试覆盖精度检测方法及装置 - Google Patents
单元测试覆盖精度检测方法及装置 Download PDFInfo
- Publication number
- CN110825650A CN110825650A CN201911201147.6A CN201911201147A CN110825650A CN 110825650 A CN110825650 A CN 110825650A CN 201911201147 A CN201911201147 A CN 201911201147A CN 110825650 A CN110825650 A CN 110825650A
- Authority
- CN
- China
- Prior art keywords
- function
- tested
- acquisition table
- unit test
- name
- 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
Images
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/3688—Test management for test execution, e.g. scheduling of test suites
Abstract
本发明公开了单元测试覆盖精度检测方法,包括:获取通过单元测试的待测函数;解析待测函数,获得抽象语法树,确定抽象语法树中各节点的类型;删除待测函数中与设定类型节点对应的语句,得到修改函数;对修改函数执行单元测试,若通过,则记录被删除语句的信息。本发明还提供了单元测试覆盖精度检测装置。本发明在现有单元测试的基础上,反复执行删除特定代码和执行单元测试,能够精确地检测代码缺陷。
Description
技术领域
本发明涉及计算机软件测试领域。更具体地说,本发明涉及一种单元测试覆盖精度检测方法及装置。
背景技术
单元测试的设计初衷是通过大量的测试用例对某个代码的最小运行单元进行测试,检测代码是否能够产生预期结果。但是,在单元测试过程中,难免产生测试用例不够全面,且可以通过单元测试的情况,例如条件判断测试不全面、语句顺带执行等问题都会导致单元测试通过但不精确的情况。因此,亟需设计一种能够一定程度克服上述缺陷的技术方案。
发明内容
本发明的一个目的是提供一种单元测试覆盖精度检测方法,其在现有单元测试的基础上,反复执行删除特定代码和执行单元测试,能够精确地检测代码缺陷。
为了实现根据本发明的这些目的和其它优点,提供了单元测试覆盖精度检测方法,包括:
获取通过单元测试的待测函数;
解析待测函数,获得抽象语法树,确定抽象语法树中各节点的类型;
删除待测函数中与设定类型节点对应的语句,得到修改函数;
对修改函数执行单元测试,若通过,则记录被删除语句的信息。
优选的是,所述的单元测试覆盖精度检测方法,通过遍历器确定抽象语法树中各节点的类型。
优选的是,所述的单元测试覆盖精度检测方法,设定类型节点包括判断结构节点、循环结构节点及方法调用节点。
优选的是,所述的单元测试覆盖精度检测方法,还包括:
若不通过,则将待测函数删除其它与设定类型节点对应的语句,重新获得修改函数,直至删除全部设定类型节点对应的语句。
优选的是,所述的单元测试覆盖精度检测方法,被删除语句的信息包括代码文件名称、代码文件路径、被删语句在代码中的位置、被删语句内容。
优选的是,所述的单元测试覆盖精度检测方法,还包括:
建立第一采集表,所述第一采集表用于存储待测代码的代码文件名称以及代码文件路径;
建立第二采集表,所述第二采集表用于存储待测函数的名称以及在待测代码中的位置;
建立第三采集表,所述第三采集表用于存储待测函数的名称以及待测函数中各语句的名称;
若修改函数通过单元测试,则读取被删除语句的信息,分别填充所述第一采集表、所述第二采集表以及所述第三采集表,并标记所述第三采集表中被删除语句的名称,并对应地标记所述第一采集表中的代码文件名称以及所述第二采集表中的待测函数的名称。
本发明还提供了单元测试覆盖精度检测装置,包括:
处理器;
存储器,其存储有可执行指令;
其中,所述处理器被配置为执行所述可执行指令,以执行所述的单元测试覆盖精度检测方法。
本发明至少包括以下有益效果:
本发明通过AST(抽象语法树)解析代码,将代码转换成可以被遍历的嵌套结构,使用遍历器找到对应类型的节点,例如:判断结构,循环结构,函数体等等,然后随机的删除某些文件的某些有意义的代码结构,即不破坏代码运行的前提下删除部分代码,反复运行单元测试然后还原代码再次删除,这样就可以进一步精确地检测代码的缺陷,并且在样本够大的情况下还可以测试出单元测试本身的不足之处。
本发明将所有修改过代码但通过单元测试(即单元测试未覆盖)的片段记录下来,包括代码文件名称、路径、起止行数列数、删除代码的具体内容,开发人员可以通过这些记录找到单元测试未覆盖的代码,改良代码,并可以对单元测试进行丰富。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1为本发明的流程图。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不排除一个或多个其它元件或其组合的存在或添加。
在一种技术方案中,如图1所示,单元测试覆盖精度检测方法,包括:
获取通过单元测试的待测函数;
解析待测函数,获得抽象语法树,确定抽象语法树中各节点的类型;
删除待测函数中与设定类型节点对应的语句,得到修改函数;
对修改函数执行单元测试,若通过,则记录被删除语句的信息。
在上述技术方案中,单元测试是指用测试用例对代码的可执行单元进行检测,检测代码是否依据开发人员的设想执行,以及是否能够产生预期效果。待测函数为待测代码中的测试单元,通过单元测试即是通过测试用例的检测。对于通过单元测试的待测函数,现有技术一般不会进一步处理。但是,通过单元测试的待测函数仍然可能存在一些问题,比如条件判断测试不全面、语句顺带执行(歪打正着通过)等。设定类型节点对应的语句是指不影响执行的语句。本技术方案对通过单元测试的待测函数进行删除操作,删除待测函数中不影响执行的语句。如果经过删除操作的得到的修改函数,仍然能够通过单元测试,那么表明删除的语句存在缺陷。通过多次删除待测函数中设定类型的语句,并判断是否能够通过单元测试,既可以发现待测函数内的所有缺陷,进而发现整个代码的缺陷。本技术方案还对被删除语句的信息进行记录,方便开发人员查找代码和单元测试的缺陷。可以看出,本技术方案在不破坏代码运行的前提下删除部分代码,反复运行单元测试然后还原代码再次删除,这样就可以精确地检测代码的缺陷,并且在样本够大的情况下还可以测试出单元测试本身的不足之处。
在另一种技术方案中,所述的单元测试覆盖精度检测方法,通过遍历器确定抽象语法树中各节点的类型。这里通过遍历器更加快捷的找出各类型的节点。
在另一种技术方案中,所述的单元测试覆盖精度检测方法,设定类型节点包括判断结构节点、循环结构节点及方法调用节点。这里列举了优选的设定类型节点,即优选删除的语句。
在另一种技术方案中,所述的单元测试覆盖精度检测方法,还包括:
若不通过,则将待测函数删除其它与设定类型节点对应的语句,重新获得修改函数,直至删除全部设定类型节点对应的语句。这里通过对待测函数反复执行删除语句及单元测试,最终找出待测函数的所有缺陷。
在另一种技术方案中,所述的单元测试覆盖精度检测方法,被删除语句的信息包括代码文件名称、代码文件路径、被删语句在代码中的位置、被删语句内容。这里提供了被删除语句的基本信息,方便开发人员找到代码的缺陷位置,优化代码,并丰富单元测试。
在另一种技术方案中,所述的单元测试覆盖精度检测方法,还包括:
建立第一采集表,所述第一采集表用于存储待测代码的代码文件名称以及代码文件路径;
建立第二采集表,所述第二采集表用于存储待测函数的名称以及在待测代码中的位置;
建立第三采集表,所述第三采集表用于存储待测函数的名称以及待测函数中各语句的名称;
若修改函数通过单元测试,则读取被删除语句的信息,分别填充所述第一采集表、所述第二采集表以及所述第三采集表,并标记所述第三采集表中被删除语句的名称,并对应地标记所述第一采集表中的代码文件名称以及所述第二采集表中的待测函数的名称。本技术方案提供了即时记录代码缺陷位置的方式,通过实时更新第一采集表、第二采集表及第三采集表,将各代码的缺陷位置标记出来,方便开发人员改良代码及单元测试过程。标记包括但不限于加粗字体、添加备注等。
本发明还提供了单元测试覆盖精度检测装置,包括:处理器;存储器,其存储有可执行指令;其中,所述处理器被配置为执行所述可执行指令,以执行所述的单元测试覆盖精度检测方法。本技术方案基于与单元测试覆盖精度检测方法相同的发明构思得到,可参考方法部分的描述。本技术方案的装置不限于PC、终端、服务器。比如此机制可以挂载到CI(Continuous Integration)即持续集成的一个子任务中,进而实现每次提交代码到远端都会自动运行,不需要手动运行,从而实现代码变动到上线发布间的检测目的,尽早的发现问题并修复问题减少线上出错的概率。
这里说明的设备数量和处理规模是用来简化本发明的说明的。对本发明单元测试覆盖精度检测方法及装置的应用、修改和变化对本领域的技术人员来说是显而易见的。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。
Claims (7)
1.单元测试覆盖精度检测方法,其特征在于,包括:
获取通过单元测试的待测函数;
解析待测函数,获得抽象语法树,确定抽象语法树中各节点的类型;
删除待测函数中与设定类型节点对应的语句,得到修改函数;
对修改函数执行单元测试,若通过,则记录被删除语句的信息。
2.如权利要求1所述的单元测试覆盖精度检测方法,其特征在于,通过遍历器确定抽象语法树中各节点的类型。
3.如权利要求1所述的单元测试覆盖精度检测方法,其特征在于,设定类型节点包括判断结构节点、循环结构节点及方法调用节点。
4.如权利要求1所述的单元测试覆盖精度检测方法,其特征在于,还包括:
若不通过,则将待测函数删除其它与设定类型节点对应的语句,重新获得修改函数,直至删除全部设定类型节点对应的语句。
5.如权利要求1所述的单元测试覆盖精度检测方法,其特征在于,被删除语句的信息包括代码文件名称、代码文件路径、被删语句在代码中的位置、被删语句内容。
6.如权利要求5所述的单元测试覆盖精度检测方法,其特征在于,还包括:
建立第一采集表,所述第一采集表用于存储待测代码的代码文件名称以及代码文件路径;
建立第二采集表,所述第二采集表用于存储待测函数的名称以及在待测代码中的位置;
建立第三采集表,所述第三采集表用于存储待测函数的名称以及待测函数中各语句的名称;
若修改函数通过单元测试,则读取被删除语句的信息,分别填充所述第一采集表、所述第二采集表以及所述第三采集表,并标记所述第三采集表中被删除语句的名称,并对应地标记所述第一采集表中的代码文件名称以及所述第二采集表中的待测函数的名称。
7.单元测试覆盖精度检测装置,其特征在于,包括:
处理器;
存储器,其存储有可执行指令;
其中,所述处理器被配置为执行所述可执行指令,以执行权利要求1~6任一所述的单元测试覆盖精度检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911201147.6A CN110825650B (zh) | 2019-11-29 | 2019-11-29 | 单元测试覆盖精度检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911201147.6A CN110825650B (zh) | 2019-11-29 | 2019-11-29 | 单元测试覆盖精度检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110825650A true CN110825650A (zh) | 2020-02-21 |
CN110825650B CN110825650B (zh) | 2023-04-11 |
Family
ID=69541903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911201147.6A Active CN110825650B (zh) | 2019-11-29 | 2019-11-29 | 单元测试覆盖精度检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110825650B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101334753A (zh) * | 2007-06-26 | 2008-12-31 | 中兴通讯股份有限公司 | 一种单元测试方法及其装置 |
US20100083240A1 (en) * | 2006-10-19 | 2010-04-01 | Checkmarx Ltd | Locating security vulnerabilities in source code |
US20150058675A1 (en) * | 2013-08-20 | 2015-02-26 | Yotam Kadishay | Software unit test immunity index |
CN106294156A (zh) * | 2016-08-11 | 2017-01-04 | 北京邮电大学 | 一种静态代码缺陷检测分析方法及装置 |
CN107402883A (zh) * | 2017-07-27 | 2017-11-28 | 腾讯科技(深圳)有限公司 | 一种数据测试处理方法和装置 |
WO2018159997A1 (ko) * | 2017-02-28 | 2018-09-07 | 주식회사 스페로우 | 테스트 케이스를 이용하여 테스트를 수행하는 방법 및 장치 |
CN109144882A (zh) * | 2018-09-19 | 2019-01-04 | 哈尔滨工业大学 | 一种基于程序不变量的软件故障定位方法及装置 |
CN110046089A (zh) * | 2019-03-01 | 2019-07-23 | 华南师范大学 | 一种基于路径覆盖充分性准则的智能合约测试方法 |
CN110109820A (zh) * | 2019-03-19 | 2019-08-09 | 深圳壹账通智能科技有限公司 | 回归测试用例确定方法、装置、计算机设备及存储介质 |
-
2019
- 2019-11-29 CN CN201911201147.6A patent/CN110825650B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100083240A1 (en) * | 2006-10-19 | 2010-04-01 | Checkmarx Ltd | Locating security vulnerabilities in source code |
CN101334753A (zh) * | 2007-06-26 | 2008-12-31 | 中兴通讯股份有限公司 | 一种单元测试方法及其装置 |
US20150058675A1 (en) * | 2013-08-20 | 2015-02-26 | Yotam Kadishay | Software unit test immunity index |
CN106294156A (zh) * | 2016-08-11 | 2017-01-04 | 北京邮电大学 | 一种静态代码缺陷检测分析方法及装置 |
WO2018159997A1 (ko) * | 2017-02-28 | 2018-09-07 | 주식회사 스페로우 | 테스트 케이스를 이용하여 테스트를 수행하는 방법 및 장치 |
CN107402883A (zh) * | 2017-07-27 | 2017-11-28 | 腾讯科技(深圳)有限公司 | 一种数据测试处理方法和装置 |
CN109144882A (zh) * | 2018-09-19 | 2019-01-04 | 哈尔滨工业大学 | 一种基于程序不变量的软件故障定位方法及装置 |
CN110046089A (zh) * | 2019-03-01 | 2019-07-23 | 华南师范大学 | 一种基于路径覆盖充分性准则的智能合约测试方法 |
CN110109820A (zh) * | 2019-03-19 | 2019-08-09 | 深圳壹账通智能科技有限公司 | 回归测试用例确定方法、装置、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
杨鹏: "基于Feed4JUnit架构的单元测试技术研究与应用", 《软件工程师》 * |
韩春晓: "单元测试中自动故障定位技术的研究与设计", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN110825650B (zh) | 2023-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104536883B (zh) | 一种静态缺陷检测方法及其系统 | |
CN109857641B (zh) | 对程序源文件进行缺陷检测的方法及装置 | |
US8397104B2 (en) | Creation of test plans | |
KR101581001B1 (ko) | 프로그램의 동적 분석 방법 및 그 장치 | |
US10229042B2 (en) | Detection of meaningful changes in content | |
US20130091490A1 (en) | Method to automatically discover whether new code is covered by tests | |
US10990514B2 (en) | Detecting problematic code changes | |
Haben et al. | A replication study on the usability of code vocabulary in predicting flaky tests | |
CN107045477B (zh) | 一种可进行多维度检测的质量评估平台 | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
US11327722B1 (en) | Programming language corpus generation | |
KR102269286B1 (ko) | 어노테이션 자동 진단 시스템 | |
CN112925524A (zh) | 一种检测驱动程序中不安全直接存储器访问的方法及装置 | |
Kristensen et al. | Inference and evolution of typescript declaration files | |
US9189372B2 (en) | Trace coverage analysis | |
US9298584B2 (en) | Artifact selection using textual reports | |
CN112579440A (zh) | 一种虚拟测试依赖对象的确定方法及装置 | |
US8464103B2 (en) | Generating a functional coverage model from a trace | |
CN110825650B (zh) | 单元测试覆盖精度检测方法及装置 | |
CN115269444B (zh) | 代码静态检测方法、装置及服务器 | |
US20230070393A1 (en) | Methods and devices for assessing generalizability of benchmarks | |
CN112631944A (zh) | 基于抽象语法树的源码检测方法及装置、计算机存储介质 | |
US8458523B2 (en) | Meta attributes in functional coverage models | |
CN112579152A (zh) | 一种面向Python语言的文档缺陷检测方法 | |
CN112035342B (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 |