CN117407267A - 条件分支覆盖率计算方法、装置、计算机设备、存储介质 - Google Patents
条件分支覆盖率计算方法、装置、计算机设备、存储介质 Download PDFInfo
- Publication number
- CN117407267A CN117407267A CN202210793302.3A CN202210793302A CN117407267A CN 117407267 A CN117407267 A CN 117407267A CN 202210793302 A CN202210793302 A CN 202210793302A CN 117407267 A CN117407267 A CN 117407267A
- Authority
- CN
- China
- Prior art keywords
- conditional branch
- uncovered
- code
- branch code
- type
- 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
Links
- 238000004364 calculation method Methods 0.000 title claims abstract description 31
- 238000004590 computer program Methods 0.000 claims abstract description 40
- 238000000034 method Methods 0.000 claims abstract description 38
- 238000012360 testing method Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000007717 exclusion Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000000007 visual effect Effects 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/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
-
- 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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
- G06F11/364—Software debugging by tracing the execution of the program tracing values on a bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Library & Information Science (AREA)
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请涉及一种条件分支覆盖率计算方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:通过获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。采用本方法能够根据每个条件分支代码行对应的注释信息排除不需要统计的条件分支代码行,提高条件分支覆盖率的计算精确度。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种条件分支覆盖率计算方法、装置、计算机设备、存储介质。
背景技术
通常来说,为了保证项目质量,一个项目需要进行几轮测试,除了常见的单元测试、集成测试、功能测试、回归测试,我们还需要代码覆盖率测试来保障代码测试的完整性全面性,如果代码覆盖率测试不达标,这就说明还有一些code没有被测试完全,而这些没有被测试到的code很可能会存在bug,导致项目质量没有办法得到保证,由此可见代码覆盖率测试的重要性。
常用的代码覆盖率统计计量标准有函数覆盖率、条件覆盖率、分支覆盖率、语句覆盖率。其中,语句覆盖与函数覆盖是通过覆盖到的语句与函数除以语句和函数的总数来取得的,而条件分支覆盖率也是通过统计覆盖到的条件和分支除以总的条件和分支总数取得的,一般的条件分支覆盖率是通过统计代码覆盖到的条件分支数除以条件分支总数来计算的,但是在有些情况下,有些代码的条件分支是没必要或者不可能覆盖到的,导致覆盖率报告的结果不够精准可靠,无法满足某些高精尖项目的代码测试需求。
目前,计算条件分支覆盖率的方式精确程度不高。
发明内容
基于此,有必要针对上述技术问题,提供一种能够精确的计算条件分支覆盖率的条件分支覆盖率计算方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种条件分支覆盖率计算方法。所述方法包括:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
在其中一个实施例中,目标代码中未被覆盖的条件分支代码行的获取方式,包括:
获取目标代码的基础条件分支覆盖率;
根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。
在其中一个实施例中,获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释类型之前,还包括:
获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;
根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
在其中一个实施例中,根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息,包括:
若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;
若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;
第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
在其中一个实施例中,根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数,包括:
若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
在其中一个实施例中,根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率,包括:
将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;
根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
第二方面,本申请还提供了一种条件分支覆盖率计算装置。所述装置包括:
注释识别模块,用于获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
参数计算模块,用于根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
覆盖计算模块,用于根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
上述条件分支覆盖率计算方法、装置、计算机设备、存储介质和计算机程序产品,通过获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。能够根据每个条件分支代码行对应的注释信息排除不需要统计的条件分支代码行,提高条件分支覆盖率的计算精确度。
附图说明
图1为一个实施例中条件分支覆盖率计算方法的流程示意图;
图2为一个实施例中行注释信息添加方法的效果示意图;
图3为一个实施例中批量注释信息添加方法的效果示意图;
图4为一个实施例中条件分支覆盖率计算装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种条件分支覆盖率计算方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的***,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
步骤102,获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息。
其中,代码类型是指条件分支代码行的条件分支语句类型,条件分支语句类型包括if语句(condition/decision)、switch语句(switch/case)、三元运算符等。未被覆盖的条件分支代码行是通过采用现有的代码覆盖率计算方法计算目标代码的基础条件分支覆盖率得到。
具体的,先根据测试需求,在目标代码中对不需要覆盖的代码行添加注释信息,注释信息用于表示排除对应条件分支代码行或排除对应条件分支代码行的一个分支,然后采用现有的代码覆盖率计算方法对目标代码进行条件分支覆盖率计算,得到目标代码的基础条件分支覆盖率的同时,能够确定目标代码中所有未被覆盖的条件分支代码行,例如采用Bullseye软件对目标代码进行条件分支覆盖率计算。识别目标代码中每一个未被覆盖的条件分支代码行的代码类型,根据代码类型检测并识别每一个未被覆盖的条件分支代码行对应的注释信息。
步骤104,根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数。
其中,覆盖参数的绝对值表示代码语句计数时一个条件分支代码行对应的单位数量,覆盖参数通常为0、-1和-2。
具体的,根据一个未被覆盖的条件分支代码行对应的注释信息,可以确定该未被覆盖的条件分支代码行是否被排除,被排除是指排除部分无需计算到代码覆盖率中,部分代码类型的条件分支代码行被排除时还分为代码行全部排除和排除代码行的一个分支两种情况,不同代码类型的条件分支代码行对应的注释信息不同,因此可以根据该未被覆盖的条件分支代码行的注释信息确定代码类型和被排除情况,从而确定该未被覆盖的条件分支代码行对应的覆盖参数,同理能够确定每一个未被覆盖的条件分支代码行对应的覆盖参数。
步骤106,根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
其中,条件分支代码行的总个数是指目标代码中属于条件分支类型的代码行的个数。
具体的,将每一个未被覆盖的条件分支代码行对应的覆盖参数相加得到一个覆盖参数和,再将该覆盖参数和与目标代码中条件分支代码行的总个数相加,就能够得到目标代码中被覆盖的条件分支代码行和被排除的条件分支代码行的总个数,将目标代码中被覆盖的条件分支代码行和被排除的条件分支代码行的总个数作为目标代码对应的条件分支覆盖数,将目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值作为目标代码对应的条件分支覆盖率。
上述条件分支覆盖率计算方法中,通过获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。能够根据每个条件分支代码行对应的注释信息排除不需要统计的条件分支代码行,提高条件分支覆盖率的计算精确度。
在一个实施例中,目标代码中未被覆盖的条件分支代码行的获取方式,包括:获取目标代码的基础条件分支覆盖率;根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。
具体的,采用Bullseye对目标代码进行基础条件分支覆盖率计算,通过Bullseye能够得到目标代码中条件分支代码行的总个数以及所有未被覆盖的条件分支代码行。
在一个实施例中,获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释类型之前,还包括:获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
进一步的,根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息,包括:若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
具体的,首先根据测试需求制定一套排除规则,在相应需要排除的condition/decision/switch code语句加上注释信息covexclude,以便于后期通过读取相关注释,重新计算条件分支覆盖率,这里又分两种添加注释信息的方法。
第一种添加注释信息方法是行exclude(又称行排除),通过在代码行后面添加相关注释来完成exclude,实现单行excludeT/F,还有一种是批量excludeT/F,在需要excludeT/F的代码段前后加上相关注释,第一种情况逐行exclude的规则如表1所示:
表1
第一种添加注释信息方法的应用实例如图2所示。
第二种添加注释信息方法是批量exclude(又称批量排除),在需要exclude的代码段前后加入注释/**COVEXCLUDE start**/与/**COVEXCLUDE end**/,来完成这一代码段的批量excludeT/F,规则如表2所示:
表2
第二种添加注释信息方法的应用实例如图3所示。
以上表格中,condition/decision是指第一代码类型,T和F分别表示条件分支代码行的一个分支,T表示条件分支代码行的第一部分(即条件分支代码行的true分支),F表示条件分支代码行的第二部分(即条件分支代码行的false分支),covexcludeT、covexcludeF、covexcludeTorF、covexcludeTF分别表示与第一代码类型对应的第一注释信息、第二注释信息、第三注释信息和第四注释信息,covexcludeT表示计算覆盖率时排除对应代码行的T分支,covexcludeF表示计算覆盖率时排除对应代码行的F分支,covexcludeTorF表示计算覆盖率时排除对应代码行的T分支或F分支,covexcludeTF表示计算覆盖率时排除对应代码行的T分支和F分支,如果一个condition/decision条件分支代码行整体不需要被排除,则不对该条件分支代码行添加注释信息。switch/case是指第二代码类型,这两种语句在进行排除时不涉及部分排除,要排除就排除整个代码行,X表示整个条件分支代码行,covexcludeC表示与第二代码类型对应的第五注释信息,covexcludeC表示排除对应代码行,如果一个switch/case条件分支代码行不需要被排除,则不对该条件分支代码行添加注释信息。
本实施例中,通过获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。能够根据不同的测试需求为代码行添加不同的注释信息,从而在后续的代码覆盖率计算过程中,排除不需要计算的代码行,提高条件分支覆盖率的计算精度。
在一个实施例中,根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数,包括:若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
具体的,判断代码类型,如果代码行类型是condition/decision,那么代码行在totalcov(又称cov总数或覆盖总数)里面占2,totalcov是指假设目标代码全覆盖时条件分支代码行的总个数,也就是目标代码中的条件分支代码行的总个数。首先将newcov=totalcov,再看有无行或批量注释covexclude信息,如果有,根据下表的对应情况判断newcov-1/-0/-2,如果没有,直接newcov-2,如果类型是switch/case,那么他在cov总数里面占1,再看有无注释covexclude信息,如果有,判断newcov-1/-0,如果没有,直接newcov-1。
如表3所示,condition/decision代码类型的条件分支代码行没有覆盖到T或F或TF时,都看做成未被覆盖的条件分支代码行。实际覆盖情况中的覆盖TF和X这两种情况,是当前代码行已被覆盖到,因此都不属于未被覆盖的条件分支代码行,对应的覆盖参数为0。
表3
在一个实施例中,根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率,包括:将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
具体的,通过遍历每一行代码对应的注释信息以及代码类型,可以用newcov-1/-2/-0来重复计算排除了部分条件分支代码行之后的条件分支覆盖数,计算次数等同于未被覆盖的条件分支代码行的个数,最后通过最终计算出的newcov除以totalcov计算得到条件分支覆盖率。
在一个实施例中,一种条件分支覆盖率计算方法,包括:
获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
获取目标代码的基础条件分支覆盖率;根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息。
若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的条件分支覆盖率计算方法的条件分支覆盖率计算装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个条件分支覆盖率计算装置实施例中的具体限定可以参见上文中对于条件分支覆盖率计算方法的限定,在此不再赘述。
在一个实施例中,如图4所示,提供了一种条件分支覆盖率计算装置,包括:注释识别模块401、参数计算模块402和覆盖计算模块403,其中:
注释识别模块401,用于获取目标代码中未被覆盖的条件分支代码行的代码类型,根据所述代码类型获取所述未被覆盖的条件分支代码行对应的注释信息;
参数计算模块402,用于根据所述未被覆盖的条件分支代码行对应的注释信息获取所述未被覆盖的条件分支代码行对应的覆盖参数;
覆盖计算模块403,用于根据所述未被覆盖的条件分支代码行对应的覆盖参数和所述目标代码中条件分支代码行的总个数,计算所述目标代码对应的条件分支覆盖率。
在一个实施例中,注释识别模块401还用于获取目标代码的基础条件分支覆盖率;根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。
在一个实施例中,装置还包括:
注释添加模块404,用于获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
在一个实施例中,注释添加模块404还用于若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
在一个实施例中,参数计算模块402还用于若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
在一个实施例中,覆盖计算模块403还用于将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
上述条件分支覆盖率计算装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图5所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过***总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到***总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种条件分支覆盖率计算方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取目标代码的基础条件分支覆盖率;
根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;
根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;
若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;
第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;
根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取目标代码的基础条件分支覆盖率;
根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;
根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;
若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;
第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;
根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据代码类型获取未被覆盖的条件分支代码行对应的注释信息;
根据未被覆盖的条件分支代码行对应的注释信息获取未被覆盖的条件分支代码行对应的覆盖参数;
根据未被覆盖的条件分支代码行对应的覆盖参数和目标代码中条件分支代码行的总个数,计算目标代码对应的条件分支覆盖率。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取目标代码的基础条件分支覆盖率;
根据目标代码的基础条件分支覆盖率获取目标代码中未被覆盖的条件分支代码行。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取目标代码中每一个条件分支代码行,并识别目标代码中每一个条件分支代码行的代码类型;
根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
若一个条件分支代码行的代码类型为第一代码类型,则确定一个条件分支代码行对应第一注释类型,第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为一个条件分支代码行添加第一注释信息、第二注释信息、第三注释信息和第四注释信息其中一种注释信息,或者不添加任何注释信息;
若一个条件分支代码行的代码类型为第二代码类型,则确定一个条件分支代码行对应第二注释类型,第二注释类型包括第五注释信息,为一个条件分支代码行添加第五注释信息,或者不添加任何注释信息;
第一注释信息用于表示排除对应条件分支代码行的第一部分,第二注释信息用于表示排除对应条件分支代码行的第二部分,第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,第五注释信息用于表示排除对应条件分支代码行。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
若一个条件分支代码行的代码类型为第一代码类型,获取未被覆盖的条件分支代码行对应的未覆盖类型,未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息为第一注释信息、第二注释信息或第三注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1;
若未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且未被覆盖的条件分支代码行对应的注释信息不为第一注释信息、第二注释信息、第三注释信息或第四注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-2;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为0;
若一个条件分支代码行的代码类型为第二代码类型,且未被覆盖的条件分支代码行对应的注释信息不为第五注释信息,则确定未被覆盖的条件分支代码行对应的覆盖参数为-1。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
将目标代码中条件分支代码行的总个数和目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算目标代码对应的条件分支覆盖数;
根据目标代码对应的条件分支覆盖数和目标代码中条件分支代码行的总个数的比值计算目标代码对应的条件分支覆盖率。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种条件分支覆盖率计算方法,其特征在于,所述方法包括:
获取目标代码中未被覆盖的条件分支代码行的代码类型,根据所述代码类型获取所述未被覆盖的条件分支代码行对应的注释信息;
根据所述未被覆盖的条件分支代码行对应的注释信息获取所述未被覆盖的条件分支代码行对应的覆盖参数;
根据所述未被覆盖的条件分支代码行对应的覆盖参数和所述目标代码中条件分支代码行的总个数,计算所述目标代码对应的条件分支覆盖率。
2.根据权利要求1所述的方法,其特征在于,所述目标代码中未被覆盖的条件分支代码行的获取方式,包括:
获取所述目标代码的基础条件分支覆盖率;
根据所述目标代码的基础条件分支覆盖率获取所述目标代码中未被覆盖的条件分支代码行。
3.根据权利要求1所述的方法,其特征在于,所述获取目标代码中未被覆盖的条件分支代码行的代码类型,根据所述代码类型获取所述未被覆盖的条件分支代码行对应的注释类型之前,还包括:
获取所述目标代码中每一个条件分支代码行,并识别所述目标代码中每一个条件分支代码行的代码类型;
根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据所述目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息。
4.根据权利要求3所述的方法,其特征在于,所述根据每一个条件分支代码行的代码类型确定每一个条件分支代码行对应的注释类型,并根据所述目标代码中每一个条件分支代码行对应的注释类型,为每一个条件分支代码行添加注释信息,包括:
若一个条件分支代码行的代码类型为第一代码类型,则确定所述一个条件分支代码行对应第一注释类型,所述第一注释类型包括第一注释信息、第二注释信息、第三注释信息和第四注释信息,为所述一个条件分支代码行添加所述第一注释信息、所述第二注释信息、所述第三注释信息和所述第四注释信息其中一种注释信息,或者不添加任何注释信息;
若一个条件分支代码行的代码类型为第二代码类型,则确定所述一个条件分支代码行对应第二注释类型,所述第二注释类型包括第五注释信息,为所述一个条件分支代码行添加所述第五注释信息,或者不添加任何注释信息;
所述第一注释信息用于表示排除对应条件分支代码行的第一部分,所述第二注释信息用于表示排除对应条件分支代码行的第二部分,所述第三注释信息用于表示排除对应条件分支代码行的第一部分或第二部分,所述第四注释信息用于表示排除对应条件分支代码行的第一部分和第二部分,所述第五注释信息用于表示排除对应条件分支代码行。
5.根据权利要求4所述的方法,其特征在于,所述根据所述未被覆盖的条件分支代码行对应的注释信息获取所述未被覆盖的条件分支代码行对应的覆盖参数,包括:
若一个条件分支代码行的代码类型为第一代码类型,获取所述未被覆盖的条件分支代码行对应的未覆盖类型,所述未覆盖类型分为第一部分覆盖、第二部分覆盖或全未覆盖;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且所述未被覆盖的条件分支代码行对应的注释信息为所述第二注释信息、所述第三注释信息或所述第四注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为0;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为第一部分覆盖,且所述未被覆盖的条件分支代码行对应的注释信息不为所述第二注释信息、所述第三注释信息或所述第四注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为-1;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且所述未被覆盖的条件分支代码行对应的注释信息为所述第一注释信息、所述第三注释信息或所述第四注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为0;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为第二部分覆盖,且所述未被覆盖的条件分支代码行对应的注释信息不为所述第一注释信息、所述第三注释信息或所述第四注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为-1;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且所述未被覆盖的条件分支代码行对应的注释信息为所述第四注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为0;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且所述未被覆盖的条件分支代码行对应的注释信息为所述第一注释信息、所述第二注释信息或所述第三注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为-1;
若所述未被覆盖的条件分支代码行对应的未覆盖类型为全未覆盖,且所述未被覆盖的条件分支代码行对应的注释信息不为所述第一注释信息、所述第二注释信息、所述第三注释信息或所述第四注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为-2;
若一个条件分支代码行的代码类型为第二代码类型,且所述未被覆盖的条件分支代码行对应的注释信息为所述第五注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为0;
若一个条件分支代码行的代码类型为第二代码类型,且所述未被覆盖的条件分支代码行对应的注释信息不为所述第五注释信息,则确定所述未被覆盖的条件分支代码行对应的覆盖参数为-1。
6.根据权利要求5所述的方法,其特征在于,所述根据所述未被覆盖的条件分支代码行对应的覆盖参数和所述目标代码中条件分支代码行的总个数,计算所述目标代码对应的条件分支覆盖率,包括:
将所述目标代码中条件分支代码行的总个数和所述目标代码中每一个未被覆盖的条件分支代码行对应的覆盖参数相加计算所述目标代码对应的条件分支覆盖数;
根据所述目标代码对应的条件分支覆盖数和所述目标代码中条件分支代码行的总个数的比值计算所述目标代码对应的条件分支覆盖率。
7.一种条件分支覆盖率计算装置,其特征在于,所述装置包括:
注释识别模块,用于获取目标代码中未被覆盖的条件分支代码行的代码类型,根据所述代码类型获取所述未被覆盖的条件分支代码行对应的注释信息;
参数计算模块,用于根据所述未被覆盖的条件分支代码行对应的注释信息获取所述未被覆盖的条件分支代码行对应的覆盖参数;
覆盖计算模块,用于根据所述未被覆盖的条件分支代码行对应的覆盖参数和所述目标代码中条件分支代码行的总个数,计算所述目标代码对应的条件分支覆盖率。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210793302.3A CN117407267A (zh) | 2022-07-07 | 2022-07-07 | 条件分支覆盖率计算方法、装置、计算机设备、存储介质 |
US18/077,413 US20240012648A1 (en) | 2022-07-07 | 2022-12-08 | Conditional branch coverage calculation method, device, computer apparatus, storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210793302.3A CN117407267A (zh) | 2022-07-07 | 2022-07-07 | 条件分支覆盖率计算方法、装置、计算机设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117407267A true CN117407267A (zh) | 2024-01-16 |
Family
ID=89431262
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210793302.3A Pending CN117407267A (zh) | 2022-07-07 | 2022-07-07 | 条件分支覆盖率计算方法、装置、计算机设备、存储介质 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240012648A1 (zh) |
CN (1) | CN117407267A (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6311327B1 (en) * | 1998-03-02 | 2001-10-30 | Applied Microsystems Corp. | Method and apparatus for analyzing software in a language-independent manner |
US8473907B1 (en) * | 2007-07-31 | 2013-06-25 | Coverity, Inc. | Computer programming adaptive analysis |
US20120272220A1 (en) * | 2011-04-19 | 2012-10-25 | Calcagno Cristiano | System and method for display of software quality |
JP6418696B2 (ja) * | 2015-07-23 | 2018-11-07 | 国立大学法人東京工業大学 | 命令セットシミュレータおよびそのシミュレータ生成方法 |
-
2022
- 2022-07-07 CN CN202210793302.3A patent/CN117407267A/zh active Pending
- 2022-12-08 US US18/077,413 patent/US20240012648A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240012648A1 (en) | 2024-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100167A (zh) | 一种生态保护红线数据的质检方法及装置 | |
CN115841046A (zh) | 基于维纳过程的加速退化试验数据处理方法和装置 | |
CN116414815A (zh) | 数据质量检测方法、装置、计算机设备和存储介质 | |
CN113808132B (zh) | 三维网络模型质量检测方法、装置和计算机设备 | |
CN114168565B (zh) | 业务规则模型的回溯测试方法、装置、***及决策引擎 | |
CN113946983A (zh) | 产品可靠性薄弱环节评估方法、装置和计算机设备 | |
CN116610583A (zh) | Sca工具成熟度评价方法、装置、设备、介质和产品 | |
CN116401238A (zh) | 偏离度监测方法、装置、设备、存储介质和程序产品 | |
CN116228045A (zh) | 基于性能退化的产品可靠性薄弱环节评估方法和装置 | |
CN117407267A (zh) | 条件分支覆盖率计算方法、装置、计算机设备、存储介质 | |
CN116483645A (zh) | 设备虚拟调试方法、装置、设备、存储介质和程序产品 | |
CN115795928A (zh) | 基于伽马过程的加速退化试验数据处理方法和装置 | |
CN115185833A (zh) | 异常代码处理方法、装置、计算机设备以及存储介质 | |
CN109783877B (zh) | 时间序列模型建立方法、装置、计算机设备和存储介质 | |
JP2011198300A (ja) | プロセス改善施策評価装置及び方法 | |
CN117331812A (zh) | 业务代码验证方法、装置、计算机设备、存储介质和产品 | |
CN117555955B (zh) | 数据转换方法、数据转换装置、计算机设备、存储介质 | |
CN116051518B (zh) | 木马位置定位方法、装置、计算机设备和存储介质 | |
CN115659882A (zh) | 电路图检查方法、装置、计算机设备、存储介质 | |
CN117435478A (zh) | 程序逻辑功能检测方法、装置、计算机设备和存储介质 | |
CN118154300A (zh) | 抵质押参数处理方法、装置、计算机设备和存储介质 | |
CN117828873A (zh) | 装备任务可靠性定量验证方法、装置、设备和存储介质 | |
CN118152291A (zh) | 接口覆盖率统计方法、装置、存储介质及计算机设备 | |
CN118113597A (zh) | 接口覆盖率的确定方法、装置、计算机设备、存储介质 | |
CN116991718A (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 | ||
CB02 | Change of applicant information |
Country or region after: China Address after: 200135, 11th Floor, Building 3, No. 889 Bibo Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai Applicant after: Granfei Intelligent Technology Co.,Ltd. Address before: 200135 Room 201, No. 2557, Jinke Road, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai Applicant before: Gryfield Intelligent Technology Co.,Ltd. Country or region before: China |
|
CB02 | Change of applicant information |