CN116126702A - 代码测试方法、装置及系统 - Google Patents
代码测试方法、装置及系统 Download PDFInfo
- Publication number
- CN116126702A CN116126702A CN202211719420.6A CN202211719420A CN116126702A CN 116126702 A CN116126702 A CN 116126702A CN 202211719420 A CN202211719420 A CN 202211719420A CN 116126702 A CN116126702 A CN 116126702A
- Authority
- CN
- China
- Prior art keywords
- code
- unit
- coverage rate
- subsystem
- target
- 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
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/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/3692—Test management for test results 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)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种代码测试方法、装置及系统,属于软件测试技术领域。该方法包括:获取新增的第一代码单元的第一代码覆盖率;确定第一代码单元所对应的目标代码子系统,目标代码子系统包括第一代码单元以及与第一代码单元关联的至少一个第二代码单元;获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率;在确定第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率的情况下,确定第一代码单元的测试通过。该方法通过将新增的第一代码单元关联第二代码单元作为目标代码子系统,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
Description
技术领域
本申请属于软件测试技术领域,尤其涉及一种代码测试方法、装置及系统。
背景技术
为了满足实际生产应用,软件需持续升级优化,在敏捷开发背景下,项目周期越来越短,软件发布版本频率越来越高。
在软件版本开发过程中,通常会针对新增代码做单元测试,当单元测试通过后,可将新增代码集成到软件环境中,新增代码的测试范围局限,新增代码可能会对整体软件造成一定的影响,容易出现链接缺陷,导致软件出现安全隐患。
发明内容
本申请旨在至少解决现有技术中存在的技术问题之一。为此,本申请提出一种代码测试方法、装置及系统,全面测试新增代码,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
第一方面,本申请提供了一种代码测试方法,该方法包括:
获取新增的第一代码单元的第一代码覆盖率;
确定所述第一代码单元所对应的目标代码子系统,所述目标代码子系统包括所述第一代码单元以及与所述第一代码单元关联的至少一个第二代码单元;
获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率;
在确定所述第一代码覆盖率不小于所述第二代码覆盖率,且所述第一代码覆盖率不小于所述第三代码覆盖率的情况下,确定所述第一代码单元的测试通过。
根据本申请的代码测试方法,通过将新增的第一代码单元,关联相关的第二代码单元作为目标代码子系统,测试第一代码单元对目标代码子系统以及软件整体的整体代码单元的影响,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
根据本申请的一个实施例,在所述获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率之后,所述方法还包括:
在确定所述第一代码覆盖率小于所述第二代码覆盖率,或所述第一代码覆盖率小于所述第三代码覆盖率的情况下,输出警告信息和第一测试失败报告,所述第一测试失败报告包括问题代码的定位信息。
根据本申请的一个实施例,所述获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率,包括:
对所述目标代码子系统进行测试,得到所述第二代码覆盖率;
在基于所述第二代码覆盖率,确定所述目标代码子系统运行成功的情况下,对所述整体代码单元进行测试,得到所述第三代码覆盖率。
根据本申请的一个实施例,在所述对所述目标代码子系统进行测试,得到所述第二代码覆盖率之后,所述方法还包括:
在确定所述目标代码子系统运行失败的情况下,输出第二测试失败报告,所述第二测试失败报告包括关于所述目标代码子系统运行失败的问题代码的定位信息。
根据本申请的一个实施例,所述获取新增的第一代码单元的第一代码覆盖率,包括:
获取所述第一代码单元的第一待测试代码段;
在所述第一待测试代码段的开始位后添加标记代码,并执行所述第一待测试代码段;
确定所述标记代码运行,得到所述第一代码覆盖率。
根据本申请的一个实施例,在所述获取新增的第一代码单元的第一代码覆盖率之后,所述方法还包括:
在确定所述第一代码覆盖率小于目标覆盖率阈值的情况下,停止所述第一代码单元的测试流程。
第二方面,本申请提供了一种代码测试装置,该装置包括:
第一获取模块,用于获取新增的第一代码单元的第一代码覆盖率;
第一处理模块,用于确定所述第一代码单元所对应的目标代码子系统,所述目标代码子系统包括所述第一代码单元以及与所述第一代码单元关联的至少一个第二代码单元;
第二获取模块,用于获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率;
第二处理模块,用于在确定所述第一代码覆盖率不小于所述第二代码覆盖率,且所述第一代码覆盖率不小于所述第三代码覆盖率的情况下,确定所述第一代码单元的测试通过。
根据本申请的代码测试装置,通过将新增的第一代码单元,关联相关的第二代码单元作为目标代码子系统,测试第一代码单元对目标代码子系统以及软件整体的整体代码单元的影响,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
第三方面,本申请提供了一种代码测试系统,包括:
覆盖率计算模块,所述覆盖率计算模块用于计算新增的第一代码单元的第一代码覆盖率、目标代码子系统的第二代码覆盖率及所述第一代码单元所属的整体代码单元的第三代码覆盖率,所述目标代码子系统包括所述第一代码单元以及与所述第一代码单元关联的至少一个第二代码单元;
单元测试覆盖率统计模块,所述单元测试覆盖率统计模块与所述覆盖率计算模块连接,所述单元测试覆盖率统计模块用于确定所述第一代码单元所对应的所述目标代码子系统,并基于所述第一代码覆盖率、所述第二代码覆盖率和所述第三代码覆盖率,确定所述第一代码单元的测试结果。
根据本申请的一个实施例,还包括:
覆盖率结果分析模块,所述覆盖率结果分析模块与所述单元测试覆盖率统计模块连接,所述覆盖率结果分析模块用于基于所述第一代码单元的测试结果,输出测试结果分析报告。
第四方面,本申请提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的代码测试方法。
第五方面,本申请提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的代码测试方法。
第六方面,本申请提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的代码测试方法。
本申请的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是本申请实施例提供的代码测试方法的流程示意图之一;
图2是本申请实施例提供的代码测试方法的流程示意图之二;
图3是本申请实施例提供的代码测试装置的结构示意图;
图4是本申请实施例提供的代码测试系统的结构示意图;
图5是本申请实施例提供的电子设备的结构示意图;
图6是本申请实施例提供的电子设备的硬件示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的代码测试方法、代码测试装置、代码测试系统、电子设备和可读存储介质进行详细地说明。
其中,代码测试方法可应用于终端,具体可由,终端中的硬件或软件执行。
该终端包括但不限于具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的移动电话或平板电脑等便携式通信设备。还应当理解的是,在某些实施例中,该终端可以不是便携式通信设备,而是具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的台式计算机。
以下各个实施例中,描述了包括显示器和触摸敏感表面的终端。然而,应当理解的是,终端可以包括诸如物理键盘、鼠标和控制杆的一个或多个其它物理开发人员接口设备。
本申请实施例提供的代码测试方法,该代码测试方法的执行主体可以为电子设备或者电子设备中能够实现该代码测试方法的功能模块或功能实体,本申请实施例提及的电子设备包括但不限于手机、平板电脑、电脑、相机和可穿戴设备等,下面以电子设备作为执行主体为例对本申请实施例提供的代码测试方法进行说明。
单元测试是针对软件设计的最小单位-程序模块,进行正确性检验的测试工作。单元测试的目的在于发现每个程序模块内部可能存在的差错,进行单元测试是为了证明代码的行为和预期行为的一致。
为了能够满足实际生产应用,软件需持续升级优化,在敏捷开发背景下,项目周期越来越短,软件发布版本频率越来越高。
在软件版本开发过程中,通常会针对新增代码做单元测试,当单元测试通过后,可将新增代码集成到软件环境中。
新增代码相对于软件整体来说,体量较少,在软件版本开发过程中,通常只校验了新增代码的单元测试是否通过,新增代码的测试范围局限,新增代码可能会对整体软件造成一定的影响,新增代码可能和整体软件的其他代码间产生链接缺陷,导致软件出现安全隐患。
并且,在软件版本开发过程中,无法保证整体软件的单元测试的覆盖率保持在一个较高的维护水平,开发人员在发现问题时,也需要花费时间进行问题点定位,不仅影响了软件版本开发的效率,还造成人工成本的上升。
本申请实施例的代码测试方法,可以全面测试新增代码,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
下面结合图1和图2对本申请实施例的代码测试方法进行描述。
如图1所示,该代码测试方法包括:步骤110、步骤120、步骤130和步骤140。
步骤110、获取新增的第一代码单元的第一代码覆盖率。
其中,第一代码单元指的是在软件版本开发过程中的新增代码。
在该步骤,可以针对新增的第一代码单元进行单元测试,得到第一代码单元的第一代码覆盖率。
在执行代码的单元测试时,代码覆盖率常作为衡量测试质量的指标,以及用于考核测试任务的完成情况。
步骤120、确定第一代码单元所对应的目标代码子系统。
其中,目标代码子系统包括第一代码单元以及与第一代码单元关联的至少一个第二代码单元。
需要说明的是,第一代码单元和第二代码单元都是同属一个软件整体的代码,第一代码单元是这个软件整体中新增的代码,第二代码单元是这个软件整体中已有的代码。
在该实施例中,第一代码单元和第二代码单元之间具有关联关系,可以由开发人员自定义与第一代码单元相关联的第二代码单元,作为目标代码子系统,通过目标代码子系统可以测试新增的第一代码单元对软件整体的影响。
步骤130、获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率。
其中,第一代码单元所属的整体代码单元指的是第一代码单元所属软件整体的全部代码。
在该步骤中,可以通过对目标代码子系统执行单元测试,获取目标代码子系统的第二代码覆盖率,并对第一代码单元所属的整体代码单元执行单元测试,获取整体代码单元的第三代码覆盖率。
可以理解的是,通过目标代码子系统和整体代码单元,可以全面测试新增的第一代码单元对软件整体的影响。
步骤140、在确定第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率的情况下,确定第一代码单元的测试通过。
在该步骤中,将第一代码覆盖率分别与第二代码覆盖率和第三代码覆盖率进行比对,判断新增的第一代码单元对目标代码子系统的影响,以及新增的第一代码单元对整体代码单元的影响,全面测试第一代码单元。
当第一代码覆盖率不小于第二代码覆盖率时,新增的第一代码单元的代码覆盖率不低于目标代码子系统的代码覆盖率,可以保证新增的第一代码单元不会使目标代码子系统的单元测试的代码覆盖率降低,新增的第一代码单元和其关联的第二代码单元之间没有出现链接缺陷,新增的第一代码单元不会对目标代码子系统的运行造成影响。
当第一代码覆盖率不小于第三代码覆盖率时,新增的第一代码单元的代码覆盖率不低于整体代码单元的代码覆盖率,可以保证新增的第一代码单元不会使整体代码单元的单元测试的代码覆盖率降低,新增的第一代码单元不会对整体代码单元的运行造成影响,可以有效防止软件整体出现安全隐患。
下面介绍一个具体的实施例。
如图2所示,在软件有变更,即软件整体出现新增代码时,对测试系统进行更新。
运行测试系统,对新增的第一代码单元、目标代码子系统以及整体代码单元进行单元测试。
当所有测试用例通过后,将第一代码覆盖率分别与第二代码覆盖率和第三代码覆盖率进行比对,判断新增的第一代码单元对目标代码子系统的影响,以及新增的第一代码单元对整体代码单元的影响。
当第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率时,确定第一代码单元的测试通过。
在软件无变更的情况下,需要间隔一定时间,运行测试系统,对整体代码单元进行单元测试,提升软件整体的安全性。
在运行测试系统时,如果出现有测试用例未通过,需要检测不通过的原因,对代码中的问题点进行修复,再次运行测试系统,直至所有测试用例通过。
在该实施例中,新增的第一代码单元作为测试单元,其代码覆盖率不能使整体代码单元的单元测试的覆盖率降低,即要保证第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率,当出现第一代码单元的第一代码覆盖率小于第二代码覆盖率或第三代码覆盖率时,需要进行预警,以通知开发人员。
根据本申请实施例提供的代码测试方法,通过将新增的第一代码单元,关联相关的第二代码单元作为目标代码子系统,测试第一代码单元对目标代码子系统以及软件整体的整体代码单元的影响,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
在一些实施例中,在步骤130、获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率之后,代码测试方法还包括:
在确定第一代码覆盖率小于第二代码覆盖率,或第一代码覆盖率小于第三代码覆盖率的情况下,输出警告信息和第一测试失败报告,第一测试失败报告包括问题代码的定位信息。
在该实施例中,当新增的第一代码单元的第一代码覆盖率小于目标代码子系统的第二代码覆盖率时,表明新增的第一代码单元可能会使目标代码子系统的单元测试的代码覆盖率降低,新增的第一代码单元和其关联的第二代码单元之间可能出现链接缺陷,有一定的安全隐患。
当新增的第一代码单元的第一代码覆盖率小于整体代码单元的第三代码覆盖率时,表明新增的第一代码单元可能会使整体代码单元的单元测试的代码覆盖率降低,软件整体存在一定的安全隐患。
在该实施例中,当确定第一代码覆盖率小于第二代码覆盖率,或第一代码覆盖率小于第三代码覆盖率的情况出现时,输出警告信息和第一测试失败报告,警告信息用于通知开发人员新增的第一代码单元的测试出现问题,开发人员可以根据第一测试失败报告中问题代码的定位信息,快捷、高效定位问题代码单元,便于后续修复工作的进行,有助于提升软件开发效率。
在一些实施例中,步骤130、获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率,可以包括:
对目标代码子系统进行测试,得到第二代码覆盖率;
在基于第二代码覆盖率,确定目标代码子系统运行成功的情况下,对整体代码单元进行测试,得到第三代码覆盖率。
在获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率时,先执行目标代码子系统的单元测试确定代码覆盖率,运行目标代码子系统,再对整体代码单元进行单元测试。
在该实施例中,可以自定义设置目标代码子系统运行,管理目标代码子系统的单元测试,保证软件整体可模拟实际软件运行环境,以避免软件整体功能联调出现缺陷,当目标代码子系统运行成功后,再运行软件整体的整体代码单元,获取整体代码单元的第三代码覆盖率。
在一些实施例中,在对目标代码子系统进行测试,得到第二代码覆盖率之后,代码测试方法还可以包括:
在确定目标代码子系统运行失败的情况下,输出第二测试失败报告。
其中,第二测试失败报告包括关于目标代码子系统运行失败的问题代码的定位信息。
在该实施例中,当目标代码子系统的运行失败时,生成并输出关于目标代码子系统运行失败的第二测试失败报告,以提示开发人员目标代码子系统运行失败的出错位置及原因,开发人员可以根据第二测试失败报告中的问题代码的定位信息,快捷、高效定位问题代码单元,便于目标代码子系统修复工作的进行,有助于提升软件开发效率。
在一些实施例中,步骤110、获取新增的第一代码单元的第一代码覆盖率,可以包括:
获取第一代码单元的第一待测试代码段;
在第一待测试代码段的开始位后添加标记代码,并执行第一待测试代码段;
确定标记代码运行,得到第一代码覆盖率。
其中,第一待测试代码段是执行单元测试的代码段。
可以理解的是,单元测试是针对软件设计的最小单位-程序模块,进行正确性检验的测试工作,每个程序模块通常包括多组控制流语句,例如,C++语言、if语句和else语句均为控制流语句,每组控制流语句可能仅有一行语句,也可能包括多行语句,对于个别的程序模块可能不包括任何控制流语句。
在该实施例中,当第一代码单元包括控制流语句时,查找出第一待测试代码段中第一控制流语句所在位置,记录第一控制流语句代码段的第一行所在位置为开始位,记录第一控制流语句代码段的最后一行所在位置为结束位,并计算第一待测试代码段的行数。
当第一代码单元不包括控制流语句时,记录第一待测试代码段的第一行所在位置为开始位,记录第一待测试代码段的最后一行所在位置为结束位,并计算第一待测试代码段的行数。
在获取第一待测试代码段后,在第一待测试代码段的开始位后加上一行标记代码,标记代码可以用于统计开始位是否运行,当标记代码运行时,表明该第一待测试代码段已经进行覆盖率统计,计算得到第一代码单元的第一代码覆盖率。
在一些实施例中,在步骤110、获取新增的第一代码单元的第一代码覆盖率之后,代码测试还可以包括:
在确定第一代码覆盖率小于目标覆盖率阈值的情况下,停止第一代码单元的测试流程。
其中,目标覆盖率阈值为预先设置的代码覆盖率最小值。
例如,目标覆盖率阈值R_min=0.7。
在实际执行中,目标覆盖率阈值可以由开发人员根据实际项目需求进行修改。
当新增的第一代码单元的第一代码覆盖率小于目标覆盖率阈值,表明第一代码单元的测试未通过,停止第一代码单元的测试流程,并向开发人员输出相应的提示信息,以便开发人员对第一代码单元进行修正。
本申请实施例提供的代码测试方法,执行主体可以为代码测试装置。本申请实施例中以代码测试装置执行代码测试方法为例,说明本申请实施例提供的代码测试装置。
本申请实施例还提供一种代码测试装置。
如图3所示,该代码测试装置包括:
第一获取模块310,用于获取新增的第一代码单元的第一代码覆盖率;
第一处理模块320,用于确定第一代码单元所对应的目标代码子系统,目标代码子系统包括第一代码单元以及与第一代码单元关联的至少一个第二代码单元;
第二获取模块330,用于获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率;
第二处理模块340,用于在确定第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率的情况下,确定第一代码单元的测试通过。
根据本申请实施例提供的代码测试装置,通过将新增的第一代码单元,关联相关的第二代码单元作为目标代码子系统,测试第一代码单元对目标代码子系统以及软件整体的整体代码单元的影响,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
在一些实施例中,第二处理模块340,还用于在确定第一代码覆盖率小于第二代码覆盖率,或第一代码覆盖率小于第三代码覆盖率的情况下,输出警告信息和第一测试失败报告,第一测试失败报告包括问题代码的定位信息。
在一些实施例中,第二获取模块330,用于对目标代码子系统进行测试,得到第二代码覆盖率;
在基于第二代码覆盖率,确定目标代码子系统运行成功的情况下,对整体代码单元进行测试,得到第三代码覆盖率。
在一些实施例中,第二获取模块330,用于在确定目标代码子系统运行失败的情况下,输出第二测试失败报告,所述第二测试失败报告包括关于所述目标代码子系统运行失败的问题代码的定位信息。
在一些实施例中,第一获取模块310,用于获取第一代码单元的第一待测试代码段;
在第一待测试代码段的开始位后添加标记代码,并执行第一待测试代码段;
确定标记代码运行,得到第一代码覆盖率。
在一些实施例中,第一获取模块310,还用于在确定第一代码覆盖率小于目标覆盖率阈值的情况下,停止第一代码单元的测试流程。
本申请实施例中的代码测试装置可以是电子设备,也可以是电子设备中的部件,例如集成电路或芯片。该电子设备可以是终端,也可以为除终端之外的其他设备。示例性的,电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、移动上网装置(Mobile Internet Device,MID)、增强现实(augmented reality,AR)/虚拟现实(virtualreality,VR)设备、机器人、可穿戴设备、超级移动个人计算机(ultra-mobile personalcomputer,UMPC)、上网本或者个人数字助理(personal digital assistant,PDA)等,还可以为服务器、网络附属存储器(Network Attached Storage,NAS)、个人计算机(personalcomputer,PC)、电视机(television,TV)、柜员机或者自助机等,本申请实施例不作具体限定。
本申请实施例中的代码测试装置可以为具有操作系统的装置。该操作系统可以为安卓(Android)操作系统,可以为IOS操作系统,还可以为其他可能的操作系统,本申请实施例不作具体限定。
本申请实施例提供的代码测试装置能够实现图1至图2的方法实施例实现的各个过程,为避免重复,这里不再赘述。
本申请实施例还提供一种代码测试系统400。
如图4所示,本申请实施例的代码测试系统400包括:覆盖率计算模块410、单元测试覆盖率统计模块420和覆盖率结果分析模块430。
其中,覆盖率计算模块410用于计算新增的第一代码单元的第一代码覆盖率、目标代码子系统的第二代码覆盖率及第一代码单元所属的整体代码单元的第三代码覆盖率,目标代码子系统包括第一代码单元以及与第一代码单元关联的至少一个第二代码单元。
在一些实施例中,覆盖率计算模块410用于获取第一代码单元的第一待测试代码段;在第一待测试代码段的开始位后添加标记代码,并执行第一待测试代码段;确定标记代码运行,得到第一代码覆盖率。
覆盖率计算模块410可以通过执行与计算第一代码覆盖率相同的操作,计算目标代码子系统的第二代码覆盖率及整体代码单元的第三代码覆盖率。
单元测试覆盖率统计模块420与覆盖率计算模块410连接,单元测试覆盖率统计模块420用于确定第一代码单元所对应的目标代码子系统,并基于第一代码覆盖率、第二代码覆盖率和第三代码覆盖率,确定第一代码单元的测试结果。
覆盖率结果分析模块430与单元测试覆盖率统计模块420连接,覆盖率结果分析模块430用于基于第一代码单元的测试结果,输出测试结果分析报告。
在一些实施例中,单元测试覆盖率统计模块420在确定第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率的情况下,确定第一代码单元的测试通过。
在该实施例中,由覆盖率结果分析模块430输出关于第一代码单元的测试通过的测试结果分析报告。
在一些实施例中,单元测试覆盖率统计模块420在确定第一代码覆盖率小于第二代码覆盖率,或第一代码覆盖率小于第三代码覆盖率的情况下,确定第一代码单元的测试失败。
在该实施例中,由覆盖率结果分析模块430输出警告信息和第一测试失败报告,第一测试失败报告包括问题代码的定位信息。
在一些实施例中,可以在单元测试覆盖率统计模块420定义目标代码子系统的运行,管理目标代码子系统的单元测试,保障软件可模拟实际软件运行环境,以避免功能联调出现的缺陷。
在该实施例中,单元测试覆盖率统计模块420在确定目标代码子系统运行成功的情况下,再对整体代码单元进行测试。
单元测试覆盖率统计模块420在确定目标代码子系统运行失败,不再对整体代码单元进行测试,由覆盖率结果分析模块430输出第二测试失败报告,所述第二测试失败报告包括关于所述目标代码子系统运行失败的问题代码的定位信息。
在一些实施例中,单元测试覆盖率统计模块420在确定第一代码覆盖率小于目标覆盖率阈值的情况下,停止第一代码单元的测试流程。
在该实施例中,由覆盖率结果分析模块430输出关于第一代码单元测试失败的测试结果分析报告。
需要说明的是,在实际执行中,覆盖率结果分析模块430根据测试结果,所输出测试结果分析报告可以包括如下信息:
(1)整体代码单元的第三代码覆盖率R_all;
(2)目标代码子系统的第二代码覆盖率R_ceil;
(3)设定的目标覆盖率阈值R_min;
(4)新增的第一代码单元的第一代码覆盖率R_change;
(5)目标代码子系统的单元测试覆盖率结果是否满足需求,第二代码覆盖率是否小于第一代码覆盖率;
(6)整体代码单元的单元测试覆盖率结果是否满足需求,第三代码覆盖率是否小于第一代码覆盖率;
(7)第一代码单元的每一个接口的单元测试覆盖率,对于低于R_min的接口,记录为异常测试点,以便开发人员快速定位问题代码。
根据本申请实施例提供的代码测试系统400,通过将新增的第一代码单元,关联相关的第二代码单元作为目标代码子系统,测试第一代码单元对目标代码子系统以及软件整体的整体代码单元的影响,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
在本申请实施例中,通过覆盖率结果分析模块430输出报告,对代码测试系统400可能出现的问题进行预警,帮助开发人员快速定位问题代码,便于后续修复工作的进行,有助于提升软件开发效率。
在一些实施例中,如图5所示,本申请实施例还提供一种电子设备500,包括处理器501、存储器502及存储在存储器502上并可在处理器501上运行的计算机程序,该程序被处理器501执行时实现上述代码测试方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,本申请实施例中的电子设备包括上述的移动电子设备和非移动电子设备。
图6为实现本申请实施例的一种电子设备的硬件结构示意图。
该电子设备600包括但不限于:射频单元601、网络模块602、音频输出单元603、输入单元604、传感器605、显示单元606、开发人员输入单元607、接口单元608、存储器609以及处理器610等部件。
本领域技术人员可以理解,电子设备600还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器610逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图6中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
其中,处理器610,用于获取新增的第一代码单元的第一代码覆盖率;
确定第一代码单元所对应的目标代码子系统,目标代码子系统包括第一代码单元以及与第一代码单元关联的至少一个第二代码单元;
获取目标代码子系统的第二代码覆盖率以及第一代码单元所属的整体代码单元的第三代码覆盖率;
在确定第一代码覆盖率不小于第二代码覆盖率,且第一代码覆盖率不小于第三代码覆盖率的情况下,确定第一代码单元的测试通过。
根据本申请实施例提供的电子设备,通过将新增的第一代码单元,关联相关的第二代码单元作为目标代码子系统,测试第一代码单元对目标代码子系统以及软件整体的整体代码单元的影响,全面测试第一代码单元,有助于开发人员对新增代码可能出现连接缺陷进行修复,降低软件安全隐患。
在一些实施例中,处理器610,还用于在确定第一代码覆盖率小于第二代码覆盖率,或第一代码覆盖率小于第三代码覆盖率的情况下,输出警告信息和第一测试失败报告,第一测试失败报告包括问题代码的定位信息。
在一些实施例中,处理器610,还用于对目标代码子系统进行测试,得到第二代码覆盖率;
在基于第二代码覆盖率,确定目标代码子系统运行成功的情况下,对整体代码单元进行测试,得到第三代码覆盖率。
在一些实施例中,处理器610,还用于在确定目标代码子系统运行失败的情况下,输出第二测试失败报告,所述第二测试失败报告包括关于所述目标代码子系统运行失败的问题代码的定位信息。
在一些实施例中,处理器610,还用于获取第一代码单元的第一待测试代码段;
在第一待测试代码段的开始位后添加标记代码,并执行第一待测试代码段;
确定标记代码运行,得到第一代码覆盖率。
在一些实施例中,处理器610,还用于在确定第一代码覆盖率小于目标覆盖率阈值的情况下,停止第一代码单元的测试流程。
应理解的是,本申请实施例中,输入单元604可以包括图形处理器(GraphicsProcessing Unit,GPU)6041和麦克风6042,图形处理器6041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。显示单元606可包括显示面板6061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板6061。开发人员输入单元607包括触控面板6071以及其他输入设备6072中的至少一种。触控面板6071,也称为触摸屏。触控面板6071可包括触摸检测装置和触摸控制器两个部分。其他输入设备6072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
存储器609可用于存储软件程序以及各种数据。存储器609可主要包括存储程序或指令的第一存储区和存储数据的第二存储区,其中,第一存储区可存储操作系统、至少一个功能所需的应用程序或指令(比如声音播放功能、图像播放功能等)等。此外,存储器609可以包括易失性存储器或非易失性存储器,或者,存储器609可以包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本申请实施例中的存储器609包括但不限于这些和任意其它适合类型的存储器。
处理器610可包括一个或多个处理单元;处理器610集成应用处理器和调制解调处理器,其中,应用处理器主要处理涉及操作系统、开发人员界面和应用程序等的操作,调制解调处理器主要处理无线通信信号,如基带处理器。可以理解的是,上述调制解调处理器也可以不集成到处理器610中。
本申请实施例还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述代码测试方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器ROM、随机存取存储器RAM、磁碟或者光盘等。
本申请实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述代码测试方法。
其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器ROM、随机存取存储器RAM、磁碟或者光盘等。
本申请实施例另提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现上述代码测试方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
应理解,本申请实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本申请的实施例,本领域的普通技术人员可以理解:在不脱离本申请的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本申请的范围由权利要求及其等同物限定。
Claims (10)
1.一种代码测试方法,其特征在于,包括:
获取新增的第一代码单元的第一代码覆盖率;
确定所述第一代码单元所对应的目标代码子系统,所述目标代码子系统包括所述第一代码单元以及与所述第一代码单元关联的至少一个第二代码单元;
获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率;
在确定所述第一代码覆盖率不小于所述第二代码覆盖率,且所述第一代码覆盖率不小于所述第三代码覆盖率的情况下,确定所述第一代码单元的测试通过。
2.根据权利要求1所述的代码测试方法,其特征在于,在所述获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率之后,所述方法还包括:
在确定所述第一代码覆盖率小于所述第二代码覆盖率,或所述第一代码覆盖率小于所述第三代码覆盖率的情况下,输出警告信息和第一测试失败报告,所述第一测试失败报告包括问题代码的定位信息。
3.根据权利要求1所述的代码测试方法,其特征在于,所述获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率,包括:
对所述目标代码子系统进行测试,得到所述第二代码覆盖率;
在基于所述第二代码覆盖率,确定所述目标代码子系统运行成功的情况下,对所述整体代码单元进行测试,得到所述第三代码覆盖率。
4.根据权利要求3所述的代码测试方法,其特征在于,在所述对所述目标代码子系统进行测试,得到所述第二代码覆盖率之后,所述方法还包括:
在确定所述目标代码子系统运行失败的情况下,输出第二测试失败报告,所述第二测试失败报告包括关于所述目标代码子系统运行失败的问题代码的定位信息。
5.根据权利要求1-4任一项所述的代码测试方法,其特征在于,所述获取新增的第一代码单元的第一代码覆盖率,包括:
获取所述第一代码单元的第一待测试代码段;
在所述第一待测试代码段的开始位后添加标记代码,并执行所述第一待测试代码段;
确定所述标记代码运行,得到所述第一代码覆盖率。
6.根据权利要求1-4任一项所述的代码测试方法,其特征在于,在所述获取新增的第一代码单元的第一代码覆盖率之后,所述方法还包括:
在确定所述第一代码覆盖率小于目标覆盖率阈值的情况下,停止所述第一代码单元的测试流程。
7.一种代码测试装置,其特征在于,包括:
第一获取模块,用于获取新增的第一代码单元的第一代码覆盖率;
第一处理模块,用于确定所述第一代码单元所对应的目标代码子系统,所述目标代码子系统包括所述第一代码单元以及与所述第一代码单元关联的至少一个第二代码单元;
第二获取模块,用于获取所述目标代码子系统的第二代码覆盖率以及所述第一代码单元所属的整体代码单元的第三代码覆盖率;
第二处理模块,用于在确定所述第一代码覆盖率不小于所述第二代码覆盖率,且所述第一代码覆盖率不小于所述第三代码覆盖率的情况下,确定所述第一代码单元的测试通过。
8.一种代码测试系统,其特征在于,包括:
覆盖率计算模块,所述覆盖率计算模块用于计算新增的第一代码单元的第一代码覆盖率、目标代码子系统的第二代码覆盖率及所述第一代码单元所属的整体代码单元的第三代码覆盖率,所述目标代码子系统包括所述第一代码单元以及与所述第一代码单元关联的至少一个第二代码单元;
单元测试覆盖率统计模块,所述单元测试覆盖率统计模块与所述覆盖率计算模块连接,所述单元测试覆盖率统计模块用于确定所述第一代码单元所对应的所述目标代码子系统,并基于所述第一代码覆盖率、所述第二代码覆盖率和所述第三代码覆盖率,确定所述第一代码单元的测试结果。
9.根据权利要求8所述的代码测试系统,其特征在于,还包括:
覆盖率结果分析模块,所述覆盖率结果分析模块与所述单元测试覆盖率统计模块连接,所述覆盖率结果分析模块用于基于所述第一代码单元的测试结果,输出测试结果分析报告。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6任一项所述代码测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211719420.6A CN116126702A (zh) | 2022-12-30 | 2022-12-30 | 代码测试方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211719420.6A CN116126702A (zh) | 2022-12-30 | 2022-12-30 | 代码测试方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116126702A true CN116126702A (zh) | 2023-05-16 |
Family
ID=86300250
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211719420.6A Pending CN116126702A (zh) | 2022-12-30 | 2022-12-30 | 代码测试方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116126702A (zh) |
-
2022
- 2022-12-30 CN CN202211719420.6A patent/CN116126702A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9824002B2 (en) | Tracking of code base and defect diagnostic coupling with automated triage | |
US8645912B2 (en) | System and method for use in replaying software application events | |
US10761964B2 (en) | Object monitoring in code debugging | |
US11327742B2 (en) | Affinity recommendation in software lifecycle management | |
CN111274154A (zh) | 一种自动化测试的方法、装置、设备及存储介质 | |
CN114168222B (zh) | 一种启动耗时的获取方法、装置、终端设备和存储介质 | |
CN109543417B (zh) | 一种基于Qemu平台的漏洞挖掘方法和装置 | |
CN111752833B (zh) | 一种软件质量体系准出方法、装置、服务器及存储介质 | |
CA2811617C (en) | Commit sensitive tests | |
CN113688398B (zh) | 漏洞扫描结果的评估方法、装置及系统 | |
US8954932B2 (en) | Crash notification between debuggers | |
CN116126702A (zh) | 代码测试方法、装置及系统 | |
US11010158B2 (en) | Determining the availability of memory optimizations by analyzing a running binary | |
CN115599645A (zh) | 一种linux驱动模块稳定性测试方法及装置 | |
US20110172945A1 (en) | Method for monitoring burn-in procedure of electronic device | |
CN112416799A (zh) | 一种代码质量预警方法、装置、电子设备及存储介质 | |
US20120174072A1 (en) | Recursive method call representation in a plot view of method execution performance | |
CN115543391B (zh) | 应用平台升级方法、装置、电子设备及可读存储介质 | |
US10261925B2 (en) | Enhanced techniques for detecting programming errors in device drivers | |
CN114064341A (zh) | 基于应急预案的故障处置方法及系统 | |
CN117009214A (zh) | 用于检测脚本质量的方法、装置及存储介质 | |
CN116339904A (zh) | 一种基于硬件辅助的虚拟化指令模拟错误检测方法及系统 | |
CN115934477A (zh) | 软件故障信息的收集方法、电子设备及系统 | |
CN117909204A (zh) | 一种Monkey测试方法、装置、电子设备以及存储介质 | |
CN117891358A (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 |