CN109460357A - 一种代码覆盖率的测试方法、装置和设备 - Google Patents
一种代码覆盖率的测试方法、装置和设备 Download PDFInfo
- Publication number
- CN109460357A CN109460357A CN201811220866.8A CN201811220866A CN109460357A CN 109460357 A CN109460357 A CN 109460357A CN 201811220866 A CN201811220866 A CN 201811220866A CN 109460357 A CN109460357 A CN 109460357A
- Authority
- CN
- China
- Prior art keywords
- code
- execution information
- test
- line number
- judgement
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 199
- 238000000034 method Methods 0.000 title claims abstract description 25
- 230000008569 process Effects 0.000 claims abstract description 17
- 238000010998 test method Methods 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 6
- 230000010354 integration Effects 0.000 description 15
- 238000007689 inspection Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000013433 optimization analysis Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012913 prioritisation Methods 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/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/3688—Test management for test execution, e.g. scheduling of test suites
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
本发明提供了一种代码覆盖率的测试方法、装置和设备,涉及代码覆盖率的技术领域,所述方法包括:在采用待测的测试用例对被测软件进行测试过程中,获取测试用例中代码执行的第一执行信息;根据第一执行信息,获取第一执行信息中的有效代码,并根据有效代码生成第二执行信息;根据第二执行信息,计算采用测试用例对所述被测软件进行测试的代码覆盖率。本发明通过获取第一执行信息中的有效代码,并根据有效代码生成第二执行信息,并计算代码覆盖率,能够快速对测试覆盖率报告进行优化分析,便于快捷地得出测试用例的真实代码覆盖率,可高效地对测试质量进行评估,通过优化测试用例提高代码覆盖率,提高软件测试的效率,提升测试质量。
Description
技术领域
本发明涉及代码覆盖率的技术领域,具体涉及一种代码覆盖率的测试方法、装置和设备。
背景技术
代码覆盖率是反映测试用例对被测软件覆盖程度的重要指标,搭建闭环虚拟集成环境并对被测软件进行测试,测试完成可以生成覆盖率测试报告,对测试报告进行分析可以确定出测试用例的覆盖度,覆盖度是衡量测试工作进展情况的重要指标,也是对测试工作进行量化的重要指标之一。控制器软件代码一般都是基于平台化开发,会根据项目的不同,产生很多平台化的死代码(测试用例无法覆盖到),对于分析真实的代码覆盖度有影响,但是,现有相关技术中,并未提供用于代码覆盖率报告的优化方案,导致无法客观准确地评估测试用例覆盖度。
因此,亟需一种代码覆盖率的测试方法、装置和设备,能够快速对测试覆盖率报告进行优化分析的算法,便于快捷地得出测试用例的真实测试覆盖度,可高效地对测试质量进行评估,通过优化测试用例提高测试覆盖度,提高软件测试的效率,提升测试质量。
发明内容
本发明实施例提供了一种代码覆盖率的测试方法、装置和设备,用以解决测试用例无法覆盖到的死代码,导致无法客观准确地评估测试用例覆盖度的问题。
为解决上述技术问题,本发明实施例提供了一种代码覆盖率的测试方法,包括:
在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息;
根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息;
根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率。
优选的,所述在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息包括:
根据被测软件的测试需求编写测试用例;
采用待测的测试用例对被测软件进行测试;
在测试过程中,获取所述测试用例中代码执行的第一执行信息;
其中,所述第一执行信息包括:第一全部代码行数、第一全部代码的判定个数、第一覆盖执行的代码行数和第一覆盖执行的判定个数。
优选的,所述根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息包括:
判断测试用例中被测试的代码的判断语句是否为第一语句;
若为是,根据所述第一执行信息,计算得到第二覆盖执行的判定个数;其中,所述第二覆盖执行的判定个数为第一覆盖执行的判定个数加1;
其中,所述第二执行信息包括:第二覆盖执行的判定个数。
优选的,所述根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息还包括:
判断测试用例中被测试的代码的判断语句是否为第二语句;
若为是,获取所述第二语句判断语句后的代码的第一代码行数;
根据所述第一执行信息和所述第一代码行数,计算得到第三覆盖执行的判定个数和第一有效代码行数;其中,所述第三覆盖执行的判定个数为第二覆盖执行的判定个数加1,所述第一有效代码行数为第一全部代码行数减去第一代码行数后的数值;
其中,所述第二执行信息还包括:第三覆盖执行的判定个数和第一有效代码行数。
优选的,所述根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息还包括:
判断测试用例中被测试的代码功能是否被执行;
若为否,获取被测试代码后的代码的第二代码行数;
根据所述第二代码行数和所述第一有效代码行数,计算得到第二有效代码行数;其中,所述第二有效代码行数为第一有效代码行数减去第二代码行数后的数值;
其中,所述第二执行信息还包括:第二有效代码行数。
优选的,所述根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率包括:
根据所述第二执行信息中的第二有效代码行数和第三覆盖执行的判定个数,以及所述第一执行信息中的第一全部代码的判定个数和第一覆盖执行的代码行数,计算采用所述测试用例对所述被测软件进行测试的判定覆盖率和路径覆盖率;
其中,判定覆盖率为:第三覆盖执行的判定个数与所述第一全部代码的判定个数的比值;
路径覆盖率为:第一覆盖执行的代码行数与所述第二有效代码行数的比值。
本发明实施例还提供了一种代码覆盖率的测试装置,包括:
第一获取模块,用于在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息;
第一生成模块,用于根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息;
第一计算模块,用于根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率。
优选的,所述第一获取模块包括:
第一编写单元,用于根据被测软件的测试需求编写测试用例;
第一测试单元,用于采用待测的测试用例对被测软件进行测试;
第一获取单元,用于在测试过程中,获取所述测试用例中代码执行的第一执行信息;
其中,所述第一执行信息包括:第一全部代码行数、第一全部代码的判定个数、第一覆盖执行的代码行数和第一覆盖执行的判定个数。
优选的,所述第一生成模块包括:
第一判断单元,用于判断测试用例中被测试的代码的判断语句是否为第一语句;
第一计算单元,用于若为是,根据所述第一执行信息,计算得到第二覆盖执行的判定个数;其中,所述第二覆盖执行的判定个数为第一覆盖执行的判定个数加1;
其中,所述第二执行信息包括:第二覆盖执行的判定个数。
优选的,所述第一生成模块还包括:
第二判断单元,用于判断测试用例中被测试的代码的判断语句是否为第二语句;
第二获取单元,用于若为是,获取所述第二语句判断语句后的代码的第一代码行数;
第二计算单元,用于根据所述第一执行信息和所述第一代码行数,计算得到第三覆盖执行的判定个数和第一有效代码行数;其中,所述第三覆盖执行的判定个数为第二覆盖执行的判定个数加1,所述第一有效代码行数为第一全部代码行数减去第一代码行数后的数值;
其中,所述第二执行信息还包括:第三覆盖执行的判定个数和第一有效代码行数。
优选的,所述第一生成模块还包括:
第三判断单元,用于判断测试用例中被测试的代码功能是否被执行;
第三获取单元,用于若为否,获取被测试代码后的代码的第二代码行数;
第三计算单元,用于根据所述第二代码行数和所述第一有效代码行数,计算得到第二有效代码行数;其中,所述第二有效代码行数为第一有效代码行数减去第二代码行数后的数值;
其中,所述第二执行信息还包括:第二有效代码行数。
优选的,所述第一计算模块包括:
第四计算单元,用于根据所述第二执行信息中的第二有效代码行数和第三覆盖执行的判定个数,以及所述第一执行信息中的第一全部代码的判定个数和第一覆盖执行的代码行数,计算采用所述测试用例对所述被测软件进行测试的判定覆盖率和路径覆盖率;
其中,判定覆盖率为:第三覆盖执行的判定个数与所述第一全部代码的判定个数的比值;
路径覆盖率为:第一覆盖执行的代码行数与所述第二有效代码行数的比值。
本发明实施例还提供了一种代码覆盖率的测试设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的代码覆盖率的测试方法中的步骤。
与现有技术相比,本发明实施例提供的一种代码覆盖率的测试方法、装置和设备,至少具有以下有益效果:
通过在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息,根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息,并根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率,能够快速对测试覆盖率报告进行优化分析,便于快捷地得出测试用例的真实代码覆盖率,可高效地对测试质量进行评估,通过优化测试用例提高代码覆盖率,提高软件测试的效率,提升测试质量。
附图说明
图1为本发明实施例提供的测试方法的流程图;
图2为本发明实施例提供的测试方法的具体流程图;
图3为本发明实施例提供的测试方法的具体流程图;
图4为本发明实施例提供的测试装置的结构框图;
图5为本发明实施例提供的测试装置的结构框图;
图6为本发明实施例提供的闭环虚拟集成环境的结构框图;
附图标记说明:
1-第一获取模块,11-第一编写单元,12-第一测试单元,13-第一获取单元,2-第一生成模块,21-第一判断单元,22-第一计算单元,23-第二判断单元,24-第二获取单元,25-第二计算单元,26-第三判断单元,27-第三获取单元,28-第三计算单元,3-第一计算模块,31-第四计算单元。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。在下面的描述中,提供诸如具体的配置和组件的特定细节仅仅是为了帮助全面理解本发明的实施例。因此,本领域技术人员应该清楚,可以对这里描述的实施例进行各种改变和修改而不脱离本发明的范围和精神。另外,为了清楚和简洁,省略了对已知功能和构造的描述。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
本发明实施例提供了一种代码覆盖率的测试方法,如图1所示,包括:
步骤S1,在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息;
步骤S2,根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息;
步骤S3,根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率。
本发明的上述实施例,通过在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息,根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息,并根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率,能够快速对测试覆盖率报告进行优化分析,便于快捷地得出测试用例的真实代码覆盖率,可高效地对测试质量进行评估,通过优化测试用例提高代码覆盖率,提高软件测试的效率,提升测试质量。其中,现有技术直接由第一执行信息生成初步的代码覆盖率的测试报告,但是这个初步的代码覆盖率不能够体现真实的覆盖情况,需要对生成的第一执行信息进行优化和改进,将平台化的死代码(测试用例无法覆盖到的代码)进行分析处理,获取有效代码,并根据有效代码生成第二执行信息。其中,有效代码为能够被执行的且能够被覆盖判断的代码。
下面结合具体流程说明上述方案的具体实现过程:
如图2所示,在所述步骤S1中,所述方法具体包括:
步骤S11,根据被测软件的测试需求编写测试用例;将被测软件与所述被测软件控制的被控对象分别进行编译,并将被测软件与被控对象模型的输入输出接口进行关联,组成被测软件和被控对象模型的闭环虚拟集成环境。
其中,如图6所示,根据被测软件的测试需求配置被控对象模型4,需要仿真被测软件7控制的被控对象,例如,需要测试整车控制器,则需要仿真整车上除整车控制器外的其他部件,还需要配置上述被控对象模型4的输入接口5和输出接口6,确保被测软件7和被控对象模型4的输入接口5与输出接口6进行匹配,并组成闭环虚拟集成环境;对所述闭环虚拟集成环境进行编译,生成测试代码覆盖率的集成工程。其中,根据被测软件的测试出口准则(代码覆盖率的要求等),配置代码覆盖率的测试报告的生成风格,并对闭环虚拟集成环境进行编译生成测试代码覆盖率的集成工程。
步骤S12,采用待测的测试用例对被测软件进行测试;具体的,将所述测试用例导入到所述集成工程中进行自动化测试。
步骤S13,在测试过程中,获取所述测试用例中代码执行的第一执行信息;
其中,所述第一执行信息包括:第一全部代码行数K0、第一全部代码的判定个数K1、第一覆盖执行的代码行数K2和第一覆盖执行的判定个数K3。所述第一全部代码行数K0为测试用例的代码总行数,所述第一全部代码的判定个数K1为测试用例被判断语句的判定个数,所述第一覆盖执行的代码行数K2为测试用例中能够被覆盖的代码行数,所述第一覆盖执行的判定个数K3为测试用例中能够被覆盖的代码的被判断语句的判定个数。
如图3所示,所述步骤S2具体包括:
步骤S21,判断测试用例中被测试的代码的判断语句是否为第一语句;其中,所述第一语句可以为if TRUE;若为是,则进入步骤S22;若为否,则直接进入步骤S23。
步骤S22,若测试用例中被测试的代码的判断语句为第一语句时,根据所述第一执行信息,计算得到第二覆盖执行的判定个数K3’;其中,所述第二覆盖执行的判定个数K3’为第一覆盖执行的判定个数K3加1;其中,所述第二执行信息包括:第二覆盖执行的判定个数K3’。当判定该被测代码的判断语句为if TRUE时,则所述第二覆盖执行的判定个数K3’为第一覆盖执行的判定个数K3加1,多个判定语句为if TRUE时,则所述第二覆盖执行的判定个数K3’为第一覆盖执行的判定个数K3加判定语句为if TRUE的判定个数。
所述步骤S2具体还包括:
步骤S23,判断测试用例中被测试的代码的判断语句是否为第二语句;其中,所述第二语句可以为if FALSE;若为是,则进入步骤S24;若为否,则直接进入步骤S26。其中,当所有的判定语句为if TRUE的代码判定完毕,则开始优化判断语句为if FALSE的代码部分。
步骤S24,若测试用例中被测试的代码的判断语句为第二语句时,获取所述第二语句判断语句后的代码的第一代码行数K4;
步骤S25,根据所述第一执行信息和所述第一代码行数K4,计算得到第三覆盖执行的判定个数K3”和第一有效代码行数K0’;其中,所述第三覆盖执行的判定个数K3”为第二覆盖执行的判定个数K3’加1,所述第一有效代码行数K0’为第一全部代码行数K0减去第一代码行数K4后的数值;若测试用例中没有判断语句为第一语句的代码,则所述第三覆盖执行的判定个数K3”为第一覆盖执行的判定个数K3加1。多个判定语句为if FALSE时,则所述第三覆盖执行的判定个数K3”为第二覆盖执行的判定个数K3’加判定语句为if FALSE的判定个数。
其中,所述第二执行信息还包括:第三覆盖执行的判定个数K3”和第一有效代码行数K0’。当所述判断语句为if FALSE时,在判断语句为if FALSE后面的代码不被执行,则则第一有效代码行数K0’为第一全部代码行数K0减去不被执行的代码行数(第一代码行数K4)。
所述步骤S2具体还包括:
步骤S26,判断测试用例中被测试的代码功能是否被执行;若为否,进入步骤S27;若为是,进入步骤S3。
步骤S27,若测试用例中被测试的代码功能无法被执行,获取被测试代码后的代码的第二代码行数K5;
步骤S28,根据所述第二代码行数K5和所述第一有效代码行数K0’,计算得到第二有效代码行数K0”;其中,所述第二有效代码行数K0”为第一有效代码行数K0’减去第二代码行数K5后的数值;若测试用例中没有判断语句为第二语句的代码,则所述第二有效代码行数K0”为第一全部代码行数K0减去第二代码行数K5后的数值。当被测试的代码功能无法被执行时,在无法被执行的代码后面的代码无法被执行,则第二有效代码行数K0”为第一有效代码行数K0’减去不被执行的代码行数(第二代码行数K5)。
其中,所述第二执行信息还包括:第二有效代码行数K0”。
所述步骤S3具体包括:根据所述第二执行信息中的第二有效代码行数K0”和第三覆盖执行的判定个数K3”,以及所述第一执行信息中的第一全部代码的判定个数K1和第一覆盖执行的代码行数K2,计算采用所述测试用例对所述被测软件进行测试的判定覆盖率和路径覆盖率;
其中,判定覆盖率为:第三覆盖执行的判定个数K3”与所述第一全部代码的判定个数K1的比值;
路径覆盖率为:第一覆盖执行的代码行数K2与所述第二有效代码行数K0”的比值。
本发明实施例还提供了一种代码覆盖率的测试装置,如图4所示,包括:
第一获取模块1,用于在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息;
第一生成模块2,用于根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息;
第一计算模块3,用于根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率。
本发明的上述实施例,通过在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息,根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息,并根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率,能够快速对测试覆盖率报告进行优化分析,便于快捷地得出测试用例的真实代码覆盖率,可高效地对测试质量进行评估,通过优化测试用例提高代码覆盖率,提高软件测试的效率,提升测试质量。其中,现有技术直接由第一执行信息生成初步的代码覆盖率的测试报告,但是这个初步的代码覆盖率不能够体现真实的覆盖情况,需要对生成的第一执行信息进行优化和改进,将平台化的死代码(测试用例无法覆盖到的代码)进行分析处理,获取有效代码,并根据有效代码生成第二执行信息。
本发明的一具体实施例中,如图4所示,所述第一获取模块1包括:
第一编写单元11,用于根据被测软件的测试需求编写测试用例;其中,将被测软件与所述被测软件控制的被控对象分别进行编译,并将被测软件与被控对象模型的输入输出接口进行关联,组成被测软件和被控对象模型的闭环虚拟集成环境。
其中,如图6所示,根据被测软件的测试需求配置被控对象模型4,需要仿真被测软件7控制的被控对象,例如,需要测试整车控制器,则需要仿真整车上除整车控制器外的其他部件,还需要配置上述被控对象模型4的输入接口5和输出接口6,确保被测软件7和被控对象模型4的输入接口5与输出接口6进行匹配,并组成闭环虚拟集成环境;对所述闭环虚拟集成环境进行编译,生成测试代码覆盖率的集成工程。其中,根据被测软件的测试出口准则(代码覆盖率的要求等),配置代码覆盖率的测试报告的生成风格,并对闭环虚拟集成环境进行编译生成测试代码覆盖率的集成工程。
第一测试单元12,用于采用待测的测试用例对被测软件进行测试;具体的,将所述测试用例导入到所述集成工程中进行自动化测试。
第一获取单元13,用于在测试过程中,获取所述测试用例中代码执行的第一执行信息;
其中,所述第一执行信息包括:第一全部代码行数K0、第一全部代码的判定个数K1、第一覆盖执行的代码行数K2和第一覆盖执行的判定个数K3。所述第一全部代码行数K0为测试用例的代码总行数,所述第一全部代码的判定个数K1为测试用例被判断语句的判定个数,所述第一覆盖执行的代码行数K2为测试用例中能够被覆盖的代码行数,所述第一覆盖执行的判定个数K3为测试用例中能够被覆盖的代码的被判断语句的判定个数。
本发明的一具体实施例中,如图5所示,所述第一生成模块2包括:
第一判断单元21,用于判断测试用例中被测试的代码的判断语句是否为第一语句;其中,所述第一语句可以为if TRUE。
第一计算单元22,用于若为是,根据所述第一执行信息,计算得到第二覆盖执行的判定个数K3’;其中,所述第二覆盖执行的判定个数K3’为第一覆盖执行的判定个数K3加1;其中,所述第二执行信息包括:第二覆盖执行的判定个数K3’。当判定该被测代码的判断语句为if TRUE时,则所述第二覆盖执行的判定个数K3’为第一覆盖执行的判定个数K3加1,多个判定语句为if TRUE时,则所述第二覆盖执行的判定个数K3’为第一覆盖执行的判定个数K3加判定语句为if TRUE的判定个数。
本发明的一具体实施例中,如图5所示,所述第一生成模块2还包括:
第二判断单元23,用于判断测试用例中被测试的代码的判断语句是否为第二语句;其中,所述第二语句可以为if FALSE;其中,当所有的判定语句为if TRUE的代码判定完毕,则开始优化判断语句为if FALSE的代码部分。
第二获取单元24,用于若为是,获取所述第二语句判断语句后的代码的第一代码行数K4;
第二计算单元25,用于根据所述第一执行信息和所述第一代码行数K4,计算得到第三覆盖执行的判定个数K3”和第一有效代码行数K0’;其中,所述第三覆盖执行的判定个数K3”为第二覆盖执行的判定个数K3’加1,所述第一有效代码行数K0’为第一全部代码行数K0减去第一代码行数K4后的数值;若测试用例中没有判断语句为第一语句的代码,则所述第三覆盖执行的判定个数K3”为第一覆盖执行的判定个数K3加1。多个判定语句为if FALSE时,则所述第三覆盖执行的判定个数K3”为第二覆盖执行的判定个数K3’加判定语句为ifFALSE的判定个数。
其中,所述第二执行信息还包括:第三覆盖执行的判定个数K3”和第一有效代码行数K0’。当所述判断语句为if FALSE时,在判断语句为if FALSE后面的代码不被执行,则第一有效代码行数K0’为第一全部代码行数K0减去不被执行的代码行数(第一代码行数K4)。
本发明的一具体实施例中,如图5所示,所述第一生成模块2还包括:
第三判断单元26,用于判断测试用例中被测试的代码功能是否被执行;
第三获取单元27,用于若为否,获取被测试代码后的代码的第二代码行数K5;
第三计算单元28,用于根据所述第二代码行数K5和所述第一有效代码行数K0’,计算得到第二有效代码行数K0”;其中,所述第二有效代码行数K0”为第一有效代码行数K0’减去第二代码行数K5后的数值;若测试用例中没有判断语句为第二语句的代码,则所述第二有效代码行数K0”为第一全部代码行数K0减去第二代码行数K5后的数值。当被测试的代码功能无法被执行时,在无法被执行的代码后面的代码无法被执行,则第二有效代码行数K0”为第一有效代码行数K0’减去不被执行的代码行数(第二代码行数K5)。
其中,所述第二执行信息还包括:第二有效代码行数K0”。
本发明的一具体实施例中,如图4所示,所述第一计算模块3包括:
第四计算单元31,用于根据所述第二执行信息中的第二有效代码行数K0”和第三覆盖执行的判定个数K3”,以及所述第一执行信息中的第一全部代码的判定个数K1和第一覆盖执行的代码行数K2,计算采用所述测试用例对所述被测软件进行测试的判定覆盖率和路径覆盖率;
其中,判定覆盖率为:第三覆盖执行的判定个数K3”与所述第一全部代码的判定个数K1的比值;
路径覆盖率为:第一覆盖执行的代码行数K2与所述第二有效代码行数K0”的比值。所述代码覆盖率的测试方法可以生成自动化算法,动态更改第一执行信息中的第一全部代码行数K0、第一全部代码的判定个数K1、第一覆盖执行的代码行数K2和第一覆盖执行的判定个数K3,对判定覆盖率和路径覆盖率进行分析并优化。
需要说明的是,该装置的实施例是与上述方法的实施例相对应的装置,上述方法的实施例中的所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。
本发明实施例还提供了一种代码覆盖率的测试设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的代码覆盖率的测试方法中的任一步骤。
本发明实施例通过根据第一执行信息,生成第二执行信息,并计算采用所述测试用例对所述被测软件进行测试的代码覆盖率,能够快速对测试覆盖率报告进行优化分析,便于快捷地得出测试用例的真实代码覆盖率,可高效地对测试质量进行评估,通过优化测试用例提高代码覆盖率,提高软件测试的效率,提升测试质量。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (13)
1.一种代码覆盖率的测试方法,其特征在于,包括:
在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息;
根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息;
根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率。
2.如权利要求1所述的代码覆盖率的测试方法,其特征在于,所述在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息包括:
根据被测软件的测试需求编写测试用例;
采用待测的测试用例对被测软件进行测试;
在测试过程中,获取所述测试用例中代码执行的第一执行信息;
其中,所述第一执行信息包括:第一全部代码行数、第一全部代码的判定个数、第一覆盖执行的代码行数和第一覆盖执行的判定个数。
3.如权利要求2所述的代码覆盖率的测试方法,其特征在于,所述根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息包括:
判断测试用例中被测试的代码的判断语句是否为第一语句;
若为是,根据所述第一执行信息,计算得到第二覆盖执行的判定个数;其中,所述第二覆盖执行的判定个数为第一覆盖执行的判定个数加1;
其中,所述第二执行信息包括:第二覆盖执行的判定个数。
4.如权利要求3所述的代码覆盖率的测试方法,其特征在于,所述根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息还包括:
判断测试用例中被测试的代码的判断语句是否为第二语句;
若为是,获取所述第二语句判断语句后的代码的第一代码行数;
根据所述第一执行信息和所述第一代码行数,计算得到第三覆盖执行的判定个数和第一有效代码行数;其中,所述第三覆盖执行的判定个数为第二覆盖执行的判定个数加1,所述第一有效代码行数为第一全部代码行数减去第一代码行数后的数值;
其中,所述第二执行信息还包括:第三覆盖执行的判定个数和第一有效代码行数。
5.如权利要求4所述的代码覆盖率的测试方法,其特征在于,所述根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息还包括:
判断测试用例中被测试的代码功能是否被执行;
若为否,获取被测试代码后的代码的第二代码行数;
根据所述第二代码行数和所述第一有效代码行数,计算得到第二有效代码行数;其中,所述第二有效代码行数为第一有效代码行数减去第二代码行数后的数值;
其中,所述第二执行信息还包括:第二有效代码行数。
6.如权利要求5所述的代码覆盖率的测试方法,其特征在于,所述根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率包括:
根据所述第二执行信息中的第二有效代码行数和第三覆盖执行的判定个数,以及所述第一执行信息中的第一全部代码的判定个数和第一覆盖执行的代码行数,计算采用所述测试用例对所述被测软件进行测试的判定覆盖率和路径覆盖率;
其中,判定覆盖率为:第三覆盖执行的判定个数与所述第一全部代码的判定个数的比值;
路径覆盖率为:第一覆盖执行的代码行数与所述第二有效代码行数的比值。
7.一种代码覆盖率的测试装置,其特征在于,包括:
第一获取模块,用于在采用待测的测试用例对被测软件进行测试过程中,获取所述测试用例中代码执行的第一执行信息;
第一生成模块,用于根据所述第一执行信息,获取所述第一执行信息中的有效代码,并根据有效代码生成第二执行信息;
第一计算模块,用于根据所述第二执行信息,计算采用所述测试用例对所述被测软件进行测试的代码覆盖率。
8.如权利要求7所述的代码覆盖率的测试装置,其特征在于,所述第一获取模块包括:
第一编写单元,用于根据被测软件的测试需求编写测试用例;
第一测试单元,用于采用待测的测试用例对被测软件进行测试;
第一获取单元,用于在测试过程中,获取所述测试用例中代码执行的第一执行信息;
其中,所述第一执行信息包括:第一全部代码行数、第一全部代码的判定个数、第一覆盖执行的代码行数和第一覆盖执行的判定个数。
9.如权利要求8所述的代码覆盖率的测试装置,其特征在于,所述第一生成模块包括:
第一判断单元,用于判断测试用例中被测试的代码的判断语句是否为第一语句;
第一计算单元,用于若为是,根据所述第一执行信息,计算得到第二覆盖执行的判定个数;其中,所述第二覆盖执行的判定个数为第一覆盖执行的判定个数加1;
其中,所述第二执行信息包括:第二覆盖执行的判定个数。
10.如权利要求9所述的代码覆盖率的测试装置,其特征在于,所述第一生成模块还包括:
第二判断单元,用于判断测试用例中被测试的代码的判断语句是否为第二语句;
第二获取单元,用于若为是,获取所述第二语句判断语句后的代码的第一代码行数;
第二计算单元,用于根据所述第一执行信息和所述第一代码行数,计算得到第三覆盖执行的判定个数和第一有效代码行数;其中,所述第三覆盖执行的判定个数为第二覆盖执行的判定个数加1,所述第一有效代码行数为第一全部代码行数减去第一代码行数后的数值;
其中,所述第二执行信息还包括:第三覆盖执行的判定个数和第一有效代码行数。
11.如权利要求10所述的代码覆盖率的测试装置,其特征在于,所述第一生成模块还包括:
第三判断单元,用于判断测试用例中被测试的代码功能是否被执行;
第三获取单元,用于若为否,获取被测试代码后的代码的第二代码行数;
第三计算单元,用于根据所述第二代码行数和所述第一有效代码行数,计算得到第二有效代码行数;其中,所述第二有效代码行数为第一有效代码行数减去第二代码行数后的数值;
其中,所述第二执行信息还包括:第二有效代码行数。
12.如权利要求11所述的代码覆盖率的测试装置,其特征在于,所述第一计算模块包括:
第四计算单元,用于根据所述第二执行信息中的第二有效代码行数和第三覆盖执行的判定个数,以及所述第一执行信息中的第一全部代码的判定个数和第一覆盖执行的代码行数,计算采用所述测试用例对所述被测软件进行测试的判定覆盖率和路径覆盖率;
其中,判定覆盖率为:第三覆盖执行的判定个数与所述第一全部代码的判定个数的比值;
路径覆盖率为:第一覆盖执行的代码行数与所述第二有效代码行数的比值。
13.一种代码覆盖率的测试设备,其特征在于,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1~6任一项所述的代码覆盖率的测试方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811220866.8A CN109460357B (zh) | 2018-10-19 | 2018-10-19 | 一种代码覆盖率的测试方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811220866.8A CN109460357B (zh) | 2018-10-19 | 2018-10-19 | 一种代码覆盖率的测试方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109460357A true CN109460357A (zh) | 2019-03-12 |
CN109460357B CN109460357B (zh) | 2021-10-29 |
Family
ID=65607898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811220866.8A Active CN109460357B (zh) | 2018-10-19 | 2018-10-19 | 一种代码覆盖率的测试方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109460357B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831535A (zh) * | 2019-04-17 | 2020-10-27 | 北京世纪好未来教育科技有限公司 | 一种测试用例的代码定位方法、装置及计算机存储介质 |
CN117171057A (zh) * | 2023-11-02 | 2023-12-05 | 沐曦集成电路(上海)有限公司 | 芯片软硬件联合仿真阶段的软件代码覆盖率确定系统 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100146340A1 (en) * | 2008-12-09 | 2010-06-10 | International Business Machines Corporation | Analyzing Coverage of Code Changes |
CN103365771A (zh) * | 2012-04-10 | 2013-10-23 | 阿里巴巴集团控股有限公司 | 一种代码覆盖率的获得方法和设备 |
CN103593285A (zh) * | 2013-10-17 | 2014-02-19 | 北京控制工程研究所 | 一种基于判定识别的图像类软件单元测试方法 |
CN103631707A (zh) * | 2012-08-27 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种获取代码覆盖率的方法及装置 |
CN103699476A (zh) * | 2012-09-27 | 2014-04-02 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及系统 |
WO2014180396A1 (zh) * | 2013-12-06 | 2014-11-13 | 中兴通讯股份有限公司 | 代码覆盖率处理方法及装置 |
CN104199773A (zh) * | 2014-09-03 | 2014-12-10 | 腾讯科技(深圳)有限公司 | 获取代码覆盖信息的方法及装置 |
CN104809071A (zh) * | 2015-05-14 | 2015-07-29 | 北京润科通用技术有限公司 | 一种代码测试方法及装置 |
CN106294163A (zh) * | 2016-08-12 | 2017-01-04 | 北京航空航天大学 | 一种轻量级的代码分支覆盖率检测方法 |
CN106776338A (zh) * | 2016-12-30 | 2017-05-31 | 北京金山安全软件有限公司 | 一种测试方法、装置及服务器 |
CN107480066A (zh) * | 2017-08-18 | 2017-12-15 | 网易(杭州)网络有限公司 | 代码覆盖率统计方法、装置、存储介质、处理器和终端 |
CN107807881A (zh) * | 2017-09-28 | 2018-03-16 | 北京新能源汽车股份有限公司 | 代码覆盖率的测试方法、装置和计算机设备 |
-
2018
- 2018-10-19 CN CN201811220866.8A patent/CN109460357B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100146340A1 (en) * | 2008-12-09 | 2010-06-10 | International Business Machines Corporation | Analyzing Coverage of Code Changes |
CN103365771A (zh) * | 2012-04-10 | 2013-10-23 | 阿里巴巴集团控股有限公司 | 一种代码覆盖率的获得方法和设备 |
CN103631707A (zh) * | 2012-08-27 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种获取代码覆盖率的方法及装置 |
CN103699476A (zh) * | 2012-09-27 | 2014-04-02 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及系统 |
CN103593285A (zh) * | 2013-10-17 | 2014-02-19 | 北京控制工程研究所 | 一种基于判定识别的图像类软件单元测试方法 |
WO2014180396A1 (zh) * | 2013-12-06 | 2014-11-13 | 中兴通讯股份有限公司 | 代码覆盖率处理方法及装置 |
CN104199773A (zh) * | 2014-09-03 | 2014-12-10 | 腾讯科技(深圳)有限公司 | 获取代码覆盖信息的方法及装置 |
CN104809071A (zh) * | 2015-05-14 | 2015-07-29 | 北京润科通用技术有限公司 | 一种代码测试方法及装置 |
CN106294163A (zh) * | 2016-08-12 | 2017-01-04 | 北京航空航天大学 | 一种轻量级的代码分支覆盖率检测方法 |
CN106776338A (zh) * | 2016-12-30 | 2017-05-31 | 北京金山安全软件有限公司 | 一种测试方法、装置及服务器 |
CN107480066A (zh) * | 2017-08-18 | 2017-12-15 | 网易(杭州)网络有限公司 | 代码覆盖率统计方法、装置、存储介质、处理器和终端 |
CN107807881A (zh) * | 2017-09-28 | 2018-03-16 | 北京新能源汽车股份有限公司 | 代码覆盖率的测试方法、装置和计算机设备 |
Non-Patent Citations (3)
Title |
---|
C.P. INDUMATHI 等: "Analysis of test case coverage using data mining technique", 《IEEE》 * |
小狮子ZZY: "测试覆盖率", 《HTTPS://WWW.CNBLOGS.COM/SHANSHANLIU/P/6478593.HTML 》 * |
赵攀峰: "Java卡代码覆盖率度量技术的研究与实现", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831535A (zh) * | 2019-04-17 | 2020-10-27 | 北京世纪好未来教育科技有限公司 | 一种测试用例的代码定位方法、装置及计算机存储介质 |
CN117171057A (zh) * | 2023-11-02 | 2023-12-05 | 沐曦集成电路(上海)有限公司 | 芯片软硬件联合仿真阶段的软件代码覆盖率确定系统 |
CN117171057B (zh) * | 2023-11-02 | 2024-01-26 | 沐曦集成电路(上海)有限公司 | 芯片软硬件联合仿真阶段的软件代码覆盖率确定系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109460357B (zh) | 2021-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7958400B2 (en) | Detecting unexpected impact of software changes using coverage analysis | |
CN110046089A (zh) | 一种基于路径覆盖充分性准则的智能合约测试方法 | |
CN106415504B (zh) | 测试用例生成系统及记录测试用例的记录介质 | |
Pinto et al. | A multi-objective genetic algorithm to test data generation | |
US20110202488A1 (en) | Method And Apparatus For Creating State Estimation Models In Machine Condition Monitoring | |
Najafi et al. | Improving test effectiveness using test executions history: An industrial experience report | |
Bünte et al. | Improving the confidence in measurement-based timing analysis | |
CN109460357A (zh) | 一种代码覆盖率的测试方法、装置和设备 | |
Nugroho et al. | Assessing uml design metrics for predicting fault-prone classes in a java system | |
CN103198230A (zh) | 人-机界面检测方法及系统 | |
CN112098756B (zh) | 电磁兼容问题定位方法、装置、设备及存储介质 | |
KR20120050597A (ko) | 열 변형 예측을 이용한 선체 곡면외판 가공 장치 및 방법 | |
CN111143768A (zh) | 一种基于arima-svm组合模型的空气质量预测算法 | |
CN107562621A (zh) | 确定手工测试用例与被测试代码关联关系的方法和装置 | |
CN103838871B (zh) | 一种核电站安全级dcs s-vdu过程文件的校验方法 | |
CN105912465A (zh) | 星载姿轨控制导与导航软件的测试方法 | |
CN116127462A (zh) | 机器学习框架的风险检测方法、装置、设备及存储介质 | |
Sahin et al. | A pilot study: Opportunities for improving software quality via application of CMMI measurement and analysis | |
JPH05324309A (ja) | ソフトウェア品質評価装置およびソフトウェア品質評価方法 | |
Nica et al. | Results of a comparative study of code coverage tools in computer vision | |
Omar et al. | Designing test coverage for grey box analysis | |
US8516445B2 (en) | Multi-dimension code coverage | |
Dutta et al. | COLT: Extending Concolic testing to measure LCSAJ Coverage | |
JPH0258136A (ja) | ソフトウェア試験カバレージ測定装置 | |
Letko | Sophisticated testing of concurrent programs |
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 |