CN105224460A - 一种基于插装技术统计测试覆盖率的方法 - Google Patents

一种基于插装技术统计测试覆盖率的方法 Download PDF

Info

Publication number
CN105224460A
CN105224460A CN201510694988.0A CN201510694988A CN105224460A CN 105224460 A CN105224460 A CN 105224460A CN 201510694988 A CN201510694988 A CN 201510694988A CN 105224460 A CN105224460 A CN 105224460A
Authority
CN
China
Prior art keywords
test
coverage rate
coverage
program
function
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.)
Pending
Application number
CN201510694988.0A
Other languages
English (en)
Inventor
赵霞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Inspur Electronic Information Industry Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Electronic Information Industry Co Ltd filed Critical Inspur Electronic Information Industry Co Ltd
Priority to CN201510694988.0A priority Critical patent/CN105224460A/zh
Publication of CN105224460A publication Critical patent/CN105224460A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于插装技术统计测试覆盖率的方法,所述方法在保证被测程序原有逻辑完整性的基础上在程序中***一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,获得程序的控制流和数据流信息,进而得到动态信息测试覆盖率,从而实现测试目的;所述测试覆盖率采用层次覆盖率,按照程序粒度划分为三个层次:api覆盖率、函数覆盖率、代码条件分支覆盖率,三个层次的覆盖率由粗到细,相互关联。本发明通过计算三个层次的测试覆盖率,三种覆盖率相结合,一定程度减少过度集中调用对数据的影响;根据项目测试阶段和覆盖率数据,有理有据的、灵活的判断测试的有效性,防止互相推诿、无视事实,提高项目管理的科学性。

Description

一种基于插装技术统计测试覆盖率的方法
技术领域
本发明涉及软件测试和项目管理技术领域,具体涉及一种基于插装技术统计测试覆盖率的方法,主要针对软件开发过程中质量反复,可控性差,问责困难等问题,通过在程序代码中***测试桩,监测该代码在某次测试中是否被执行,统计测试覆盖率,减少测试的随机性、随意性,提高项目管理的科学性,从而缩短项目测试时间,降低测试成本。
背景技术
从事软件项目管理及测试管理时,我们会发现在项目面对结项时间压力,此时软件质量反复、bug收敛度不如预期等问题,往往是项目结项面临的最大问题。项目经理通常采取的做法第一是bug分类追踪问责:将本次bug分类,新发现、修改导致、未修改等,以追究测试人员及开发人员的责任,期待开发人员修改bug质量及测试人员测试全面性的提高,第二是加班赶工。测试经理为了减少新发现bug的数量,往往采用固定模块测试人员的做法。
不可否认,这些做法会取得一定的效果。但是bug分类的统计过程,缺乏科学的、***的标准,依据开发及测试对于往期的测试印象而进行分类,这往往造成开发与测试互相推诿的现象。
总结这些矛盾的根本在于测试覆盖率的问题,如何保证在测试初期就进行全面的覆盖?作为管理人员如何在测试之后统计本次测试对于程序测试的全面性?
目前在项目工期紧、软件质量反复、bug收敛度不如预期的情况下,项目经理归结原因时往往缺乏科学性和可靠性,对项目其他人员来说此结论缺乏数据依据和说服力。
发明内容
本发明要解决的技术问题是:基于上述技术,本发明提供一种基于插装技术统计测试覆盖率的方法。
本发明所采用的技术方案为:
一种基于插装技术统计测试覆盖率的方法,所述方法在保证被测程序原有逻辑完整性的基础上在程序中***一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,获得程序的控制流和数据流信息,进而得到动态信息测试覆盖率,从而实现测试目的;所述测试覆盖率采用层次覆盖率,按照程序粒度划分为三个层次:api覆盖率、函数覆盖率、代码条件分支覆盖率,三个层次的覆盖率由粗到细,相互关联。
基于插装技术的统计测试覆盖率的方法即在被测程序中***装探针,当程序被执行(被测试)时,探针执行并输入指定信息,反之,探针的指定信息未输出则证明该段程序在本轮测试中未被测试到,从而可以科学的、有说服力的计算测试的覆盖率。
所述api覆盖率,以程序接口为单位,在每一个接口执行前***探针,探针信息包括接口编号、执行次数变量X(i)(接口每被执行一次该变量加1,初始值为0),在程序详细设计时,记录编号为i的接口被调用的次数,计为总数A(i),api(i)=X(i)/A(i),当api(i)>1时,视该接口被完全覆盖(本方法基于测试的随机性排除该接口被少数情况下集中调用的情况)剔除i接口在总api覆盖率中的计算,
总api覆盖率=[X(1)+X(2)+…+X(n-1)+X(n)]/[A(1)+A(2)+…+A(n-1)+A(n)](其中1到n中剔除api(i)>1的i接口)。当api覆盖率偏低时,可以通过计算api(i)=X(i)/A(i)来具体到是某个具体的api。
所述函数覆盖率,以函数为单位,在每一个函数开始执行之前***探针,探针信息包含函数编号、执行次数X(i)(函数每被调用一次该变量加1,初始值为0),在程序详细设计时,记录编号为i的函数被调用的次数,计为总数A(i),函数覆盖率=X(i)/A(i)。
所述代码条件分支覆盖率,以函数内分支为单位,在每个分支执行时***探针,探针信息包括分支编号,在编码阶段,记录分支数量,分支覆盖率=执行的编号总数/总的分支数量。
所述方法在计算程序测试覆盖率时,综合这三种层次的覆盖率,判断该轮测试是否为有效的测试,对于覆盖率与有效测试的关系,根据测试的不同阶段来具体定义,在测试后期,程序功能趋于完善时,三种覆盖率基本上要达到90%以上,测试才算有效。
所述方法操作步骤如下:
1)项目详细设计阶段,根据详细设计图,给api编号,并记录api将被调用情况的数量;给函数编号,并记录函数被调用的情况数量;
2)在编码阶段,给函数的分支编号;
3)在编码阶段,在api接口开始、函数开始及函数的分支开始,***探针:System.out.println语句,输入信息到指定的文件,包括但不限于编号及执行次数;
4)在测试结束后,分别计算api覆盖率、函数覆盖率及分支覆盖率(综合三种覆盖率的情况,可以一定程度上避免少数情况下集中调用的情况),综合考量目前项目功能的完成情况及三种覆盖率,对测试是否有效做出判断。
在测试初期,项目的功能只完成了50%,根据二八原则,三种测试覆盖率若均低于48%,则考虑测试覆盖率低的情况,再根据单个的接口覆盖率、单个的函数覆盖率及单个函数的分支覆盖率,去排查确认是哪些代码未覆盖到;到了项目后期,程序功能基本完成,则三种测试覆盖率基本上要达到80%以上甚至更高,才能判断此次测试有效。
所述***测试需要持续5轮甚至更高,比较轮次之间的测试覆盖率,当测试覆盖率逐渐升高的情况下,判断项目在朝好的方向发展;当测试覆盖率下降,在排除测试原因时,判断程序质量出现后退,需要引起项目经理的重视。
本发明的有益效果为:
本发明通过在代码中插装的技术,记录测试轨迹;通过一轮测试之后的探针输出,计算三个层次的测试覆盖率,三种覆盖率相结合,一定程度减少过度集中调用对数据的影响;根据项目测试阶段和覆盖率数据,有理有据的、灵活的判断测试的有效性,防止互相推诿、无视事实,提高项目管理的科学性。
附图说明
图1为本发明基于插装技术计算测试覆盖率方法图。
具体实施方式
下面根据说明书附图,结合具体实施方式对本发明进一步说明:
实施例1:
一种基于插装技术统计测试覆盖率的方法,所述方法在保证被测程序原有逻辑完整性的基础上在程序中***一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,获得程序的控制流和数据流信息,进而得到动态信息测试覆盖率,从而实现测试目的;所述测试覆盖率采用层次覆盖率,按照程序粒度划分为三个层次:api覆盖率、函数覆盖率、代码条件分支覆盖率,三个层次的覆盖率由粗到细,相互关联。
基于插装技术的统计测试覆盖率的方法即在被测程序中***装探针,当程序被执行(被测试)时,探针执行并输入指定信息,反之,探针的指定信息未输出则证明该段程序在本轮测试中未被测试到,从而可以科学的、有说服力的计算测试的覆盖率。
实施例2:
在实施例1的基础上,本实施例所述api覆盖率,以程序接口为单位,在每一个接口执行前***探针,探针信息包括接口编号、执行次数变量X(i)(接口每被执行一次该变量加1,初始值为0),在程序详细设计时,记录编号为i的接口被调用的次数,计为总数A(i),api(i)=X(i)/A(i),当api(i)>1时,视该接口被完全覆盖(本方法基于测试的随机性排除该接口被少数情况下集中调用的情况)剔除i接口在总api覆盖率中的计算,
总api覆盖率=[X(1)+X(2)+…+X(n-1)+X(n)]/[A(1)+A(2)+…+A(n-1)+A(n)](其中1到n中剔除api(i)>1的i接口)。当api覆盖率偏低时,可以通过计算api(i)=X(i)/A(i)来具体到是某个具体的api。
实施例3:
在实施例1的基础上,本实施例所述函数覆盖率,以函数为单位,在每一个函数开始执行之前***探针,探针信息包含函数编号、执行次数X(i)(函数每被调用一次该变量加1,初始值为0),在程序详细设计时,记录编号为i的函数被调用的次数,计为总数A(i),函数覆盖率=X(i)/A(i)。
实施例4:
在实施例1的基础上,本实施例所述代码条件分支覆盖率,以函数内分支为单位,在每个分支执行时***探针,探针信息包括分支编号,在编码阶段,记录分支数量,分支覆盖率=执行的编号总数/总的分支数量。
实施例5:
在实施例1-4的基础上,本实施例所述方法在计算程序测试覆盖率时,综合这三种层次的覆盖率,判断该轮测试是否为有效的测试,对于覆盖率与有效测试的关系,根据测试的不同阶段来具体定义,在测试后期,程序功能趋于完善时,三种覆盖率基本上要达到90%以上,测试才算有效。
实施例6:
如图1所示,在实施例5的基础上,本实施例所述方法操作步骤如下:
1)项目详细设计阶段,根据详细设计图,给api编号,并记录api将被调用情况的数量;给函数编号,并记录函数被调用的情况数量;
2)在编码阶段,给函数的分支编号;
3)在编码阶段,在api接口开始、函数开始及函数的分支开始,***探针:System.out.println语句,输入信息到指定的文件,包括但不限于编号及执行次数;
4)在测试结束后,分别计算api覆盖率、函数覆盖率及分支覆盖率(综合三种覆盖率的情况,可以一定程度上避免少数情况下集中调用的情况),综合考量目前项目功能的完成情况及三种覆盖率,对测试是否有效做出判断。
在测试初期,项目的功能只完成了50%,根据二八原则,三种测试覆盖率若均低于48%,则考虑测试覆盖率低的情况,再根据单个的接口覆盖率、单个的函数覆盖率及单个函数的分支覆盖率,去排查确认是哪些代码未覆盖到;到了项目后期,程序功能基本完成,则三种测试覆盖率基本上要达到80%以上甚至更高,才能判断此次测试有效。
实施例7:
在实施例6的基础上,本实施例所述***测试需要持续5轮甚至更高,比较轮次之间的测试覆盖率,当测试覆盖率逐渐升高的情况下,判断项目在朝好的方向发展;当测试覆盖率下降,在排除测试原因时,判断程序质量出现后退,需要引起项目经理的重视。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

Claims (7)

1.一种基于插装技术统计测试覆盖率的方法,其特征在于:所述方法在保证被测程序原有逻辑完整性的基础上在程序中***一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,获得程序的控制流和数据流信息,进而得到动态信息测试覆盖率,从而实现测试目的;所述测试覆盖率采用层次覆盖率,按照程序粒度划分为三个层次:api覆盖率、函数覆盖率、代码条件分支覆盖率,三个层次的覆盖率由粗到细,相互关联。
2.根据权利要求1所述的一种基于插装技术统计测试覆盖率的方法,其特征在于:所述api覆盖率,以程序接口为单位,在每一个接口执行前***探针,探针信息包括接口编号、执行次数变量X(i),在程序详细设计时,记录编号为i的接口被调用的次数,计为总数A(i),api(i)=X(i)/A(i),当api(i)>1时,视该接口被完全覆盖剔除i接口在总api覆盖率中的计算,
总api覆盖率=[X(1)+X(2)+…+X(n-1)+X(n)]/[A(1)+A(2)+…+A(n-1)+A(n)]。
3.根据权利要求1所述的一种基于插装技术统计测试覆盖率的方法,其特征在于:所述函数覆盖率,以函数为单位,在每一个函数开始执行之前***探针,探针信息包含函数编号、执行次数X(i)(函数每被调用一次该变量加1,初始值为0),在程序详细设计时,记录编号为i的函数被调用的次数,计为总数A(i),函数覆盖率=X(i)/A(i)。
4.根据权利要求1所述的一种基于插装技术统计测试覆盖率的方法,其特征在于:所述代码条件分支覆盖率,以函数内分支为单位,在每个分支执行时***探针,探针信息包括分支编号,在编码阶段,记录分支数量,分支覆盖率=执行的编号总数/总的分支数量。
5.根据权利要求1-4任一所述的一种基于插装技术统计测试覆盖率的方法,其特征在于:所述方法在计算程序测试覆盖率时,综合这三种层次的覆盖率,判断该轮测试是否为有效的测试,对于覆盖率与有效测试的关系,根据测试的不同阶段来具体定义,在测试后期,程序功能趋于完善时,三种覆盖率基本上要达到90%以上,测试才算有效。
6.根据权利要求5所述的一种基于插装技术统计测试覆盖率的方法,其特征在于,所述方法操作步骤如下:
1)项目详细设计阶段,根据详细设计图,给api编号,并记录api将被调用情况的数量;给函数编号,并记录函数被调用的情况数量;
2)在编码阶段,给函数的分支编号;
3)在编码阶段,在api接口开始、函数开始及函数的分支开始,***探针:System.out.println语句,输入信息到指定的文件,包括但不限于编号及执行次数;
4)在测试结束后,分别计算api覆盖率、函数覆盖率及分支覆盖率,综合考量目前项目功能的完成情况及三种覆盖率,对测试是否有效做出判断。
7.根据权利要求6所述的一种基于插装技术统计测试覆盖率的方法,其特征在于:所述***测试持续5轮以上,比较轮次之间的测试覆盖率,当测试覆盖率逐渐升高的情况下,判断项目在朝好的方向发展;当测试覆盖率下降,在排除测试原因时,判断程序质量出现后退,需要引起项目经理的重视。
CN201510694988.0A 2015-10-23 2015-10-23 一种基于插装技术统计测试覆盖率的方法 Pending CN105224460A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510694988.0A CN105224460A (zh) 2015-10-23 2015-10-23 一种基于插装技术统计测试覆盖率的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510694988.0A CN105224460A (zh) 2015-10-23 2015-10-23 一种基于插装技术统计测试覆盖率的方法

Publications (1)

Publication Number Publication Date
CN105224460A true CN105224460A (zh) 2016-01-06

Family

ID=54993445

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510694988.0A Pending CN105224460A (zh) 2015-10-23 2015-10-23 一种基于插装技术统计测试覆盖率的方法

Country Status (1)

Country Link
CN (1) CN105224460A (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294163A (zh) * 2016-08-12 2017-01-04 北京航空航天大学 一种轻量级的代码分支覆盖率检测方法
CN109542789A (zh) * 2018-11-26 2019-03-29 泰康保险集团股份有限公司 一种代码覆盖率统计方法及装置
WO2019071929A1 (zh) * 2017-10-09 2019-04-18 武汉斗鱼网络科技有限公司 单元测试覆盖率生成方法、装置、可读存储介质及设备
CN110580214A (zh) * 2018-06-07 2019-12-17 百度在线网络技术(北京)有限公司 应用程序测试的评估方法、装置、存储介质和终端设备
CN112597007A (zh) * 2020-12-14 2021-04-02 中国航发控制***研究所 一种嵌入式软件集成测试完整性分析方法
CN112597064A (zh) * 2021-03-02 2021-04-02 芯华章科技股份有限公司 对程序进行仿真的方法、电子设备及存储介质
CN113094289A (zh) * 2021-05-18 2021-07-09 绿漫科技有限公司 一种通过python语言实现接口覆盖率统计的实现方法
US11086759B2 (en) 2018-09-27 2021-08-10 SeaLights Technologies LTD System and method for probe injection for code coverage
US11093374B2 (en) 2016-08-09 2021-08-17 SeaLights Technologies LTD System and method for continuous testing and delivery of software
CN113392033A (zh) * 2021-08-17 2021-09-14 北京安普诺信息技术有限公司 一种确定被动iast测试api覆盖率的方法及装置
CN113535559A (zh) * 2021-07-14 2021-10-22 杭州默安科技有限公司 一种应用接口覆盖率统计方法和***
US11573885B1 (en) 2019-09-26 2023-02-07 SeaLights Technologies LTD System and method for test selection according to test impact analytics

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7334161B2 (en) * 2004-04-30 2008-02-19 Arm Limited Breakpoint logic unit, debug logic and breakpoint method for a data processing apparatus
CN102103538A (zh) * 2011-02-22 2011-06-22 南京航空航天大学 一种基于Agent的码垛机器人控制软件测试方法
CN102419728A (zh) * 2011-11-01 2012-04-18 北京邮电大学 基于覆盖率量化指标确定软件测试过程充分性的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7334161B2 (en) * 2004-04-30 2008-02-19 Arm Limited Breakpoint logic unit, debug logic and breakpoint method for a data processing apparatus
CN102103538A (zh) * 2011-02-22 2011-06-22 南京航空航天大学 一种基于Agent的码垛机器人控制软件测试方法
CN102419728A (zh) * 2011-11-01 2012-04-18 北京邮电大学 基于覆盖率量化指标确定软件测试过程充分性的方法

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11775416B2 (en) 2016-08-09 2023-10-03 SeaLights Technologies LTD System and method for continuous testing and delivery of software
US11093374B2 (en) 2016-08-09 2021-08-17 SeaLights Technologies LTD System and method for continuous testing and delivery of software
CN106294163A (zh) * 2016-08-12 2017-01-04 北京航空航天大学 一种轻量级的代码分支覆盖率检测方法
WO2019071929A1 (zh) * 2017-10-09 2019-04-18 武汉斗鱼网络科技有限公司 单元测试覆盖率生成方法、装置、可读存储介质及设备
CN110580214A (zh) * 2018-06-07 2019-12-17 百度在线网络技术(北京)有限公司 应用程序测试的评估方法、装置、存储介质和终端设备
US11847041B2 (en) 2018-09-27 2023-12-19 Sealights Technologies Ltd. System and method for probe injection for code coverage
US11086759B2 (en) 2018-09-27 2021-08-10 SeaLights Technologies LTD System and method for probe injection for code coverage
CN109542789B (zh) * 2018-11-26 2022-03-25 泰康保险集团股份有限公司 一种代码覆盖率统计方法及装置
CN109542789A (zh) * 2018-11-26 2019-03-29 泰康保险集团股份有限公司 一种代码覆盖率统计方法及装置
US11573885B1 (en) 2019-09-26 2023-02-07 SeaLights Technologies LTD System and method for test selection according to test impact analytics
CN112597007A (zh) * 2020-12-14 2021-04-02 中国航发控制***研究所 一种嵌入式软件集成测试完整性分析方法
CN112597007B (zh) * 2020-12-14 2023-10-03 中国航发控制***研究所 一种嵌入式软件集成测试完整性分析方法
CN112597064B (zh) * 2021-03-02 2021-06-29 芯华章科技股份有限公司 对程序进行仿真的方法、电子设备及存储介质
CN112597064A (zh) * 2021-03-02 2021-04-02 芯华章科技股份有限公司 对程序进行仿真的方法、电子设备及存储介质
CN113094289A (zh) * 2021-05-18 2021-07-09 绿漫科技有限公司 一种通过python语言实现接口覆盖率统计的实现方法
CN113535559A (zh) * 2021-07-14 2021-10-22 杭州默安科技有限公司 一种应用接口覆盖率统计方法和***
CN113392033B (zh) * 2021-08-17 2022-03-08 北京安普诺信息技术有限公司 一种确定被动iast测试api覆盖率的方法及装置
CN113392033A (zh) * 2021-08-17 2021-09-14 北京安普诺信息技术有限公司 一种确定被动iast测试api覆盖率的方法及装置

Similar Documents

Publication Publication Date Title
CN105224460A (zh) 一种基于插装技术统计测试覆盖率的方法
EP1899876B1 (en) System and method for using model analysis to generate directed test vectors
CN107301119B (zh) 利用时序相关性进行it故障根因分析的方法及装置
US5655074A (en) Method and system for conducting statistical quality analysis of a complex system
US5500941A (en) Optimum functional test method to determine the quality of a software system embedded in a large electronic system
Tahat et al. Regression test suite prioritization using system models
CN101697144A (zh) 一种软件测试方法及测试装置
CN102445941B (zh) 列控***车载设备互联互通测试结果自动判定及分析方法
US9891281B1 (en) Method and system for automatically identifying test runs contributing to coverage events of interest in verification test data
CN102999417B (zh) 自动化测试管理***及方法
CN109858097A (zh) 一种航天器单机测试性评估抽样方法
CN110059010A (zh) 基于动态符号执行与模糊测试的缓冲区溢出检测方法
CN113127314B (zh) 一种检测程序性能瓶颈的方法、装置及计算机设备
CN109885500A (zh) 一种提高软件测试覆盖率的方法和***
CN115576738A (zh) 一种基于芯片分析实现设备故障确定的方法及***
Khalilian et al. Bi-criteria test suite reduction by cluster analysis of execution profiles
CN115659335A (zh) 基于混合模糊测试的区块链智能合约漏洞检测方法及装置
CN106598763A (zh) Bi报表测试方法
CN116136950B (zh) 芯片验证方法、装置、***、电子设备及存储介质
CN113079061A (zh) 一种物联网性能测试方法及***
CN112416733B (zh) 一种内存检测方法、内存检测装置及智能设备
CN112506802A (zh) 测试数据的管理方法及***
Savor et al. Toward automatic detection of software failures
CN115129706B (zh) 一种考虑周期性特征的土壤水分观测数据质量评估方法
CN111522725A (zh) Ssd性能自动评估方法、装置、设备及介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20160106