CN117389884A - 代码覆盖率计算方法及装置 - Google Patents

代码覆盖率计算方法及装置 Download PDF

Info

Publication number
CN117389884A
CN117389884A CN202311378845.XA CN202311378845A CN117389884A CN 117389884 A CN117389884 A CN 117389884A CN 202311378845 A CN202311378845 A CN 202311378845A CN 117389884 A CN117389884 A CN 117389884A
Authority
CN
China
Prior art keywords
function
code
test
list
catalog
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
CN202311378845.XA
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.)
Zhejiang Geely Holding Group Co Ltd
Zhejiang Zeekr Intelligent Technology Co Ltd
Original Assignee
Zhejiang Geely Holding Group Co Ltd
Zhejiang Zeekr Intelligent Technology 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 Zhejiang Geely Holding Group Co Ltd, Zhejiang Zeekr Intelligent Technology Co Ltd filed Critical Zhejiang Geely Holding Group Co Ltd
Priority to CN202311378845.XA priority Critical patent/CN117389884A/zh
Publication of CN117389884A publication Critical patent/CN117389884A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

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)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供一种代码覆盖率计算方法及装置,所述方法包括:获取待测项目;遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述第一函数标识存储至第一函数标识列表;遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述第二函数标识存储至第二函数标识列表;统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。

Description

代码覆盖率计算方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码覆盖率计算方法及装置。
背景技术
单元测试在软件开发过程中非常重要,所以如何衡量一款软件的代码的单元测试覆盖率就变的非常重要。软件代码的单元测试覆盖率是指在单元测试中执行的代码行数、分支、路径等与总代码量的比例。通过衡量软件代码单元测试覆盖率指标,我们可以发现潜在问题、提高代码质量、鼓励良好实践、支持变更和重构、衡量测试完整性。
常见的单元测试框架(如JUnit、PyTest、Mocha等)通常提供内置的覆盖率报告功能,可以生成相应的覆盖率报告,显示测试覆盖的情况。此外,还有一些独立的代码覆盖率工具(如JaCoCo、Coverage.py、istanbul等),可以与单元测试框架结合使用,提供更详细的覆盖率分析和报告。
上述常见的单元测试框架和独立的代码覆盖率工具都存在一个问题,就是为了获取到代码覆盖率数据,就必须执行完所有的单元测试用例程序,等程序执行完成单元测试之后才能获取到代码覆盖率数据,需要花费大量的时间,速度慢,且时间不可控。
发明内容
本申请提供一种代码覆盖率计算方法,所述方法包括:
获取待测项目;其中,所述待测项目至少包括源代码目录以及测试代码目录;所述源代码目录用于存储待测项目的源代码,所述测试代码目录用于存储与所述待测项目的源代码对应的测试代码;
遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述第一函数标识存储至第一函数标识列表;
遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述第二函数标识存储至第二函数标识列表;
统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。
可选的,统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,包括:
遍历所述第一函数标识列表,统计所述第一函数标识列表中函数标识的第一数量;
创建计数器,遍历所述第二函数标识列表,确定所述第二函数标识列表中的函数标识是否存在于所述第一函数标标识列表;如果是,将所述计数器加一;
直至遍历完成,将所述计数器的取值作为第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
可选的,基于第一数量和所述第二数量,确定所述源代码文件的代码覆盖率,包括:
计算所述第二数量与所述第一数量之间的比值,并将所述计算结果作为所述源代码文件的覆盖率。
可选的,所述待测项目的源代码目录包括至少一个源代码文件;
所述遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述函数标识存储至第一函数标识列表,包括:
所述遍历所述源代码目录,确定所述源代码文件的文件名是否满足预设条件;
如果是,获取所述源代码中的函数的第一函数标识,并将所述函数标识存储至第一函数标识列表;反之,跳过所述源代码文件。
可选的,所述测试代码目录包括至少一个测试代码文件;
所述遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述函数标识存储至第二函数标识列表,包括:
遍历所述测试代码目录,确定所述测试代码文件的文件名是否满足预设条件;
如果是,获取所述测试代码中的函数的第二函数标识,并将所述函数标识存储至第二函数标识列表;反之,跳过所述测试代码文件。
本申请提供一种代码覆盖率计算装置,所述装置包括:
项目获取单元,用于获取待测项目;其中,所述待测项目至少包括源代码目录以及测试代码目录;所述源代码目录用于存储待测项目的源代码,所述测试代码目录用于存储与所述待测项目的源代码对应的测试代码;
源代码目录遍历单元,用于遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述第一函数标识存储至第一函数标识列表;
测试代码目录遍历单元,用于遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述第二函数标识存储至第二函数标识列表;
代码覆盖率统计单元,用于统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。
可选的,代码覆盖率统计单元,进一步用于遍历所述第一函数标识列表,统计所述第一函数标识列表中函数标识的第一数量;
创建计数器,遍历所述第二函数标识列表,确定所述第二函数标识列表中的函数标识是否存在于所述第一函数标标识列表;如果是,将所述计数器加一;
直至遍历完成,将所述计数器的取值作为第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
可选的,代码覆盖率统计单元,进一步用于计算所述第二数量与所述第一数量之间的比值,并将所述计算结果作为所述源代码文件的覆盖率。
可选的,所述待测项目的源代码目录包括至少一个源代码文件;
所述源代码目录遍历单元,用于遍历所述源代码目录,确定所述源代码文件的文件名是否满足预设条件;
如果是,获取所述源代码中的函数的第一函数标识,并将所述函数标识存储至第一函数标识列表;反之,跳过所述源代码文件。
可选的,所述测试代码目录包括至少一个测试代码文件;
所述测试代码目录遍历单元,用于遍历所述测试代码目录,确定所述测试代码文件的文件名是否满足预设条件;
如果是,获取所述测试代码中的函数的第二函数标识,并将所述函数标识存储至第二函数标识列表;反之,跳过所述测试代码文件。
本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
在以上实施例记载的方案中,通过静态扫描代码的方式,确定源代码目录中函数标识的数量以及测试代码目录中函数标识的数量,并通过比较两个目录中获取的函数标识的数量,计算代码覆盖率。在测试目录中获取到的函数标识,默认已经经过测试,由此不需要再执行单元测试这个耗时最长的环节,因此获取代码覆盖率数据耗时非常短,不需要长时间的等待就能获取到代码覆盖率数据。
附图说明
图1是一示例性实施例提供的一种代码覆盖率计算方法的流程示意图。
图2是一示例性的实施例提供的一种代码覆盖率计算装置所在电子设备的硬件结构图。
图3是一示例性的实施例提供的一种代码覆盖率计算装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
请参见图1,图1是一示例性实施例提供的一种代码覆盖率计算方法的流程示意图。所述方法可以包括以下步骤:
步骤102,获取待测项目;其中,所述待测项目至少包括源代码目录以及测试代码目录;所述源代码目录用于存储待测项目的源代码,所述测试代码目录用于存储与所述待测项目的源代码对应的测试代码。
在本说明书中,获取待测项目的具体方式在本说明书中不做具体限定。例如,可以使用版本控制工具克隆项目、或者下载待测项目的压缩包等等。
使用版本控制工具获取待测项目时,可以获取待测项目的代码仓库的仓库地址,然后在在本地使用Git命令行或GUI工具,运行git clone仓库地址命令,将整个项目克隆到本地。
下载待测项目的压缩包时,可以获取待测项目的文件下载链接,进一步可以通过所述下载链接,可以将待测项目保存至本地。
在本说明书中,所述待测项目至少包括源代码目录以及测试代码目录。其中源代码目录和测试代码目录分别承担不同的角色和功能。
源代码目录是主要的代码存放位置,包含了项目的核心业务逻辑和功能实现。在源代码目录下编写的代码会被编译成可执行的字节码文件,并最终打包到最终的应用程序中。该目录下的类和代码负责实现项目的功能需求,包括各种业务逻辑、数据访问和处理等。开发者在该目录下编写的代码通常会被部署到生产环境中,并被客户端或服务器端调用执行。
测试代码目录是用于编写各种类型的自动化测试代码的地方。在测试代码目录下编写的代码不会被包含在最终的应用程序中,它们仅用于验证和测试源代码的正确性和可靠性。该目录下的测试类和代码负责编写和运行单元测试、集成测试以及其他类型的自动化测试。通过编写测试代码,可以验证源代码在各种情况下的预期行为,捕获潜在的问题和错误,并提供反馈和验证机制。
将源代码和测试代码分开可以更好地组织和管理项目,并使代码更易于阅读和理解。
在一种实施方式中,所述待测项目可以包括基于java语言进行开发的项目。其中,在java项目中,所述源代码目录具体可以是“src/main/java”,测试代码目录具体可以是“src/test/java”。
在Java项目中,源代码目录和测试代码目录分别用于存放主要的业务逻辑实现和验证代码的自动化测试,它们配合使用,有助于提高软件质量和开发效率。
步骤104,遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述函数标识存储至第一函数标识列表;
在本说明书中,在获取待测项目之后,可以遍历所述源代码目录,并获取所述源代码目录中的每个源代码文件,针对任一源代码文件,可以按行进行读取,确定该行代码中是否包含函数的定义,如果包含函数的定义,可以获取该函数的函数标识,并将该函数标识存储至第一函数标识列表。
其中,所述函数的函数标识具体可以是指函数的函数名。函数标识列表具体可以是列表,链表,数组等等用于进行存储字符串类型的数据结构,在本说明书中不做具体限定。
在一种实施方式中,所述待测项目的源代码目录包括至少一个源代码文件。在待测项目中,除了存储源代码的文件,还可能包括配置文件、资源文件,而这些文件通常不需要读取其中的函数标识,因此可以过滤这些文件。
在获取待测项目之后,可以遍历所述源代码目录,确定所述源代码文件的文件名是否满足预设条件。
例如,在实际应用中,所述待测项目包括基于java语言进行开发的项目;确定所述源代码的文件名是否满足预设条件具体可以是,确定所述源代码的文件名的后缀是否为“.java”,如果是,则可以确定所述源代码文件的文件名满足预设条件。
如果所述源代码文件的文件名满足预设条件,可以进一步获取所述源代码中的函数的第一函数标识,并将所述函数标识存储至第一函数标识列表;反之,跳过所述源代码文件,继续遍历下一个测试代码文件。
步骤106,遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述函数标识存储至第二函数标识列表;
在本说明书中,在获取待测项目之后,可以遍历所述测试代码目录,并获取所述测试代码目录中的每个测试代码文件,针对任一测试代码文件,可以按行进行读取,确定该行代码中是否包含函数的定义,如果包含函数的定义,可以获取该函数的函数标识,并将该函数标识存储至第二函数标识列表。
其中,所述函数的函数标识具体可以是指函数的函数名。函数标识列表具体可以是列表,链表,数组等等用于进行存储字符串类型的数据结构,在本说明书中不做具体限定。
在一种实施方式中,所述待测项目的测试代码目录包括至少一个测试代码文件。在待测项目中,除了存储测试代码的文件,还可能包括配置文件、资源文件,而这些文件通常不需要读取其中的函数标识,因此可以过滤这些文件。
在获取待测项目之后,可以遍历所述测试代码目录,确定所述测试代码文件的文件名是否满足预设条件。
例如,在实际应用中,所述待测项目包括基于java语言进行开发的项目;确定所述测试代码的文件名是否满足预设条件具体可以是,确定所述源代码的文件名的后缀是否为“.java”,如果是,则可以确定所述测试代码文件的文件名满足预设条件。
如果所述测试代码文件的文件名满足预设条件,可以进一步获取所述测试代码中的函数的第二函数标识,并将所述函数标识存储至第二函数标识列表;反之,跳过所述测试代码文件,继续遍历下一个测试代码文件。
步骤108,统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。
在本说明书中,可以统计第一函数标识列表中函数标识的第一数量,以及第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
其中,统计函数表示列表中的函数标识的数量的具体方式,在本说明书中不做具体限定。
例如,可以存储函数标识的数据结构自带的api来直接统计函数标识的数量,也可以通过遍历所述函数标识并进行计数,从而获取函数标识的数量。
在一种实施方式中,可以遍历所述第一函数标识列表,统计所述第一函数标识列表中函数标识的第一数量;
进一步,可以创建计数器,并遍历所述第二函数标识列表,确定所述第二函数标识列表中的函数标识是否存在于所述第一函数标标识列表;如果是,将所述计数器加一;
直至遍历完成,可以将所述计数器的取值作为第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
在一种实施方式中,在基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率时,可以计算所述第二数量与所述第一数量之间的比值,并将所述计算结果作为所述源代码文件的覆盖率。
在以上实施例记载的方案中,通过静态扫描代码的方式,确定源代码目录中函数标识的数量以及测试代码目录中函数标识的数量,并通过比较两个目录中获取的函数标识的数量,计算代码覆盖率。在测试目录中获取到的函数标识,默认已经经过测试,由此不需要再执行单元测试这个耗时最长的环节,因此获取代码覆盖率数据耗时非常短,不需要长时间的等待就能获取到代码覆盖率数据。
上述代码覆盖率计算方法的实施例对应的,本说明书还提供了代码覆盖率计算装置的实施例。
请参见图2,图2是一示例性的实施例示出的一种代码异常检测装置所在电子设备的硬件结构图。在硬件层面,该设备包括处理器202、内部总线204、网络接口206、内存208以及非易失性存储器210,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器202从非易失性存储器210中读取对应的计算机程序到内存208中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参见图3,图3是一示例性的实施例示出的一种代码覆盖率计算装置的框图。代码覆盖率计算装置可以应用于图2所示的电子设备中,以实现本说明书的技术方案。其中,上述代码覆盖率计算装置可以包括:
项目获取单元302,用于获取待测项目;其中,所述待测项目至少包括源代码目录以及测试代码目录;所述源代码目录用于存储待测项目的源代码,所述测试代码目录用于存储与所述待测项目的源代码对应的测试代码;
源代码目录遍历单元304,用于遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述第一函数标识存储至第一函数标识列表;
测试代码目录遍历单元306,用于遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述第二函数标识存储至第二函数标识列表;
代码覆盖率统计单元308,用于统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。
可选的,代码覆盖率统计单元,进一步用于遍历所述第一函数标识列表,统计所述第一函数标识列表中函数标识的第一数量;
创建计数器,遍历所述第二函数标识列表,确定所述第二函数标识列表中的函数标识是否存在于所述第一函数标标识列表;如果是,将所述计数器加一;
直至遍历完成,将所述计数器的取值作为第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
可选的,代码覆盖率统计单元,进一步用于计算所述第二数量与所述第一数量之间的比值,并将所述计算结果作为所述源代码文件的覆盖率。
可选的,所述待测项目的源代码目录包括至少一个源代码文件;
所述源代码目录遍历单元,用于遍历所述源代码目录,确定所述源代码文件的文件名是否满足预设条件;
如果是,获取所述源代码中的函数的第一函数标识,并将所述函数标识存储至第一函数标识列表;反之,跳过所述源代码文件。
可选的,所述测试代码目录包括至少一个测试代码文件;
所述测试代码目录遍历单元,用于遍历所述测试代码目录,确定所述测试代码文件的文件名是否满足预设条件;
如果是,获取所述测试代码中的函数的第二函数标识,并将所述函数标识存储至第二函数标识列表;反之,跳过所述测试代码文件。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
本说明书还提供了一种计算机可读存储介质的实施例。所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,可以实现本说明书中任意一个实施例提供的所述代码覆盖率计算方法。
本说明书实施例提供的计算机可读存储介质具体可以包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存储器)、EPROM(Erasable Programmable Read-OnlyMemory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable ProgrammableRead-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光纤卡片。也就是,可读存储介质包括可以存储或传输信息的可读介质。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (10)

1.一种代码覆盖率计算方法,所述方法包括:
获取待测项目;其中,所述待测项目至少包括源代码目录以及测试代码目录;所述源代码目录用于存储待测项目的源代码,所述测试代码目录用于存储与所述待测项目的源代码对应的测试代码;
遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述第一函数标识存储至第一函数标识列表;
遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述第二函数标识存储至第二函数标识列表;
统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。
2.根据权利要求1所述的方法,统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,包括:
遍历所述第一函数标识列表,统计所述第一函数标识列表中函数标识的第一数量;
创建计数器,遍历所述第二函数标识列表,确定所述第二函数标识列表中的函数标识是否存在于所述第一函数标标识列表;如果是,将所述计数器加一;
直至遍历完成,将所述计数器的取值作为第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
3.根据权利要求1所述的方法,基于第一数量和所述第二数量,确定所述源代码文件的代码覆盖率,包括:
计算所述第二数量与所述第一数量之间的比值,并将所述计算结果作为所述源代码文件的覆盖率。
4.根据权利要求1所述的方法,所述待测项目的源代码目录包括至少一个源代码文件;
所述遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述函数标识存储至第一函数标识列表,包括:
遍历所述源代码目录,确定所述源代码文件的文件名是否满足预设条件;
如果是,获取所述源代码中的函数的第一函数标识,并将所述函数标识存储至第一函数标识列表;反之,跳过所述源代码文件。
5.根据权利要求1所述的方法,所述待测项目的测试代码目录包括至少一个测试代码文件;
所述遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述函数标识存储至第二函数标识列表,包括:
遍历所述测试代码目录,确定所述测试代码文件的文件名是否满足预设条件;
如果是,获取所述测试代码中的函数的第二函数标识,并将所述函数标识存储至第二函数标识列表;反之,跳过所述测试代码文件。
6.一种代码覆盖率计算装置,所述装置包括:
项目获取单元,用于获取待测项目;其中,所述待测项目至少包括源代码目录以及测试代码目录;所述源代码目录用于存储待测项目的源代码,所述测试代码目录用于存储与所述待测项目的源代码对应的测试代码;
源代码目录遍历单元,用于遍历所述源代码目录,获取所述源代码中的全部函数的第一函数标识,并将所述第一函数标识存储至第一函数标识列表;
测试代码目录遍历单元,用于遍历所述测试代码目录,获取所述测试代码中的全部函数的第二函数标识,并将所述第二函数标识存储至第二函数标识列表;
代码覆盖率统计单元,用于统计所述第一函数标识列表中函数标识的第一数量,以及所述第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量,并基于第一数量和所述第二数量,计算所述待测项目的代码覆盖率。
7.根据权利要求6所述的装置,代码覆盖率统计单元,进一步用于遍历所述第一函数标识列表,统计所述第一函数标识列表中函数标识的第一数量;
创建计数器,遍历所述第二函数标识列表,确定所述第二函数标识列表中的函数标识是否存在于所述第一函数标标识列表;如果是,将所述计数器加一;
直至遍历完成,将所述计数器的取值作为第一函数标识列表和第二函数标识列表中相同的函数标识的第二数量。
8.根据权利要求6所述的装置,代码覆盖率统计单元,进一步用于计算所述第二数量与所述第一数量之间的比值,并将所述计算结果作为所述源代码文件的覆盖率。
9.一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1-5任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1-5任一项所述的方法。
CN202311378845.XA 2023-10-20 2023-10-20 代码覆盖率计算方法及装置 Pending CN117389884A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311378845.XA CN117389884A (zh) 2023-10-20 2023-10-20 代码覆盖率计算方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311378845.XA CN117389884A (zh) 2023-10-20 2023-10-20 代码覆盖率计算方法及装置

Publications (1)

Publication Number Publication Date
CN117389884A true CN117389884A (zh) 2024-01-12

Family

ID=89438634

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311378845.XA Pending CN117389884A (zh) 2023-10-20 2023-10-20 代码覆盖率计算方法及装置

Country Status (1)

Country Link
CN (1) CN117389884A (zh)

Similar Documents

Publication Publication Date Title
JP2015507303A (ja) コード網羅率決定方法およびシステム
CN109542789B (zh) 一种代码覆盖率统计方法及装置
CN107665171A (zh) 自动回归测试方法及装置
CN103810105B (zh) 应用程序版本检测方法和装置
CN108459964A (zh) 测试用例选择方法、装置、设备以及计算机可读存储介质
CN104899016A (zh) 调用堆栈关系获取方法及装置
CN109783341A (zh) 回归测试方法和装置
US10635575B2 (en) Testing of enterprise resource planning systems
CN110082666A (zh) 芯片测试分析方法、装置、设备及存储介质
CN116107892A (zh) 自动化测试方法、装置、设备及存储介质
CN114490375A (zh) 应用程序的性能测试方法、装置、设备及存储介质
CN110334012B (zh) 一种风险评估方法及装置
CN110362569A (zh) 数据表的校验方法及装置、电子设备、存储介质
CN106407123A (zh) 一种服务器接口的自动化测试方法及装置
CN111221721A (zh) 一种单元测试案例自动化录制和执行方法及装置
CN111240987A (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN111400171A (zh) 一种接口测试方法、系统、装置及可读存储介质
CN117389884A (zh) 代码覆盖率计算方法及装置
CN113031995B (zh) 一种更新规则的方法、装置、存储介质以及电子设备
CN113868137A (zh) 埋点数据的处理方法、装置、系统和服务器
CN112416417A (zh) 一种代码量统计方法、装置、电子设备及存储介质
CN114238143A (zh) 应用于接口测试的es数据造数方法、系统及存储介质
CN114490337A (zh) 调测方法、调测平台、设备及存储介质
CN112363944A (zh) 一种用于多环境接口返回值对比的方法及设备
CN117667750B (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