CN115658507A - 针对实时嵌入式软件源代码覆盖率分析系统 - Google Patents
针对实时嵌入式软件源代码覆盖率分析系统 Download PDFInfo
- Publication number
- CN115658507A CN115658507A CN202211323818.8A CN202211323818A CN115658507A CN 115658507 A CN115658507 A CN 115658507A CN 202211323818 A CN202211323818 A CN 202211323818A CN 115658507 A CN115658507 A CN 115658507A
- Authority
- CN
- China
- Prior art keywords
- module
- coverage rate
- data connection
- analysis
- source code
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了针对实时嵌入式软件源代码覆盖率分析系统,包括CPU指令集模拟器模块,所述CPU指令集模拟器模块包括包括插桩模块、编译模块、目标码符号分析模块、配置文件生成模块、配置接口模块、指令执行模块、时钟计时和维护模块、函数检查模块、函数调用栈维护模块、覆盖率收集模块、覆盖率分析模块、覆盖率展示模块和报告生成模块,本发明在维持插桩方式不变的情况下,利用指令集模拟器执行实时嵌入式软件目标程序,在执行探针代码时钟暂停计时,使得插桩后代码执行的时钟周期与非插桩的一致,结合高效的源代码插桩和分析方法,该发明的系统具有膨胀率低、保证实时性的优点,同时提升了该系统的执行速度。
Description
技术领域
本发明涉及程序测试技术领域,具体为针对实时嵌入式软件源代码覆盖率分析系统。
背景技术
实时嵌入式系统广泛应用在航天、航空、轨交等安全关键领域,这类系统的正确性不仅依赖系统计算的逻辑结果,还依赖于产生这个结果的时间,实时嵌入式软件往往安全性高,要进行异常苛刻的测试,而源代码覆盖率是常用的度量软件测试充分性的手段,描述程序中源代码被测试的比例和程度,代码覆盖率可在单元测试、组装测试或系统测试环节进行统计,常用的覆盖率指标有语句覆盖率、分支(判定)覆盖率、MC/DC覆盖率和函数调用覆盖率。
对于实时嵌入式软件的覆盖率测试而言,测试对被测软件运行时开销的影响尤为关键,若覆盖率测试开销过大,则会导致系统本身的运行行为不符合实际,测试结果不可信。
目前对实时嵌入式软件进行源代码覆盖率分析一般有2种方法获取:
一种方法是基于虚拟仿真和映射推导的覆盖率分析,使被测软件运行在虚拟目标机中,通过虚拟目标机的监控机制获取目标码覆盖率,再通过调试信息中目标码与源代码的映射关系推导源代码覆盖率,该方法无需插桩,也不会增加程序的运行开销,专利CN112799942A公开了一种Keil C51软件源码和目标码覆盖率分析方法和系统,该发明利用Keil软件自带模拟器产生目标码覆盖率,通过M51文件推算出源代码覆盖率;专利CN112540913A公开了一种根据CPU指令波形生成对应的CPU指令执行流程文件,然后根据指令与源代码对应关系推算出源代码覆盖率的方法,上述方法仅限于具备目标码覆盖率和源码-目标码对应关系的情况,同时受编译器优化影响,计算结果可能不准确,难以支持MC/DC覆盖率;另外,针对新的指令集架构和目标码格式都需要单独开发覆盖率分析算法。
另一种方法是基于源代码插桩的覆盖率分析:在函数出入口、分支、条件和函数调用等位置插入探针代码,根据探针执行情况计算覆盖率,该方法优点是结果准确,可支持任意覆盖率的分析,插桩后的源码可在多种编译器下编译,专利CN114817045A公开了一种源代码覆盖率确定方法,采用高效的覆盖率插桩技术,相比其它方法代码膨胀率从30%降低到20%左右,执行时间膨胀率从40%降低到22%,尽管如此,对执行时间有严格要求的嵌入式软件来说,插桩后的额外开销仍然影响软件的正常执行,此时得到的覆盖结果不可信。
发明内容
本发明的目的在于提供针对实时嵌入式软件源代码覆盖率分析系统,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:针对实时嵌入式软件源代码覆盖率分析系统,包括CPU指令集模拟器模块,所述CPU指令集模拟器模块包括插桩模块、编译模块、目标码符号分析模块、配置文件生成模块、配置接口模块、指令执行模块、时钟计时和维护模块、函数检查模块、函数调用栈维护模块、覆盖率收集模块、覆盖率分析模块、覆盖率展示模块和报告生成模块。
优选的,所述CPU指令集模拟器模块模拟执行对应目标码,且时钟计时和维护模块进行系统时钟的计时、暂停、恢复和维护。
优选的,所述插桩模块与编译模块建立数据连接,且编译模块与目标码符号分析模块建立数据连接,目标码符号分析模块与配置文件生成模块建立数据连接,且配置文件生成模块与配置接口模块建立数据连接。
优选的,所述配置接口模块可指定探针函数的地址,且配置接口模块与指令执行模块建立数据连接,指令执行模块与时钟计时和维护模块建立数据连接。
优选的,所述时钟计时和维护模块与函数检查模块建立数据连接,且函数检查模块与函数调用栈维护模块建立数据连接。
优选的,所述函数调用栈维护模块与覆盖率收集模块建立数据连接,且覆盖率收集模块与覆盖率分析模块建立数据连接,覆盖率分析模块与覆盖率展示模块建立数据连接,且覆盖率展示模块与报告生成模块建立数据连接。
与现有技术相比,本发明的有益效果是:本发明在维持插桩方式不变的情况下,利用指令集模拟器执行实时嵌入式软件目标程序,在执行探针代码时钟暂停计时,使得插桩后代码执行的时钟周期与非插桩的一致,结合高效的源代码插桩和分析方法,该发明具有膨胀率低、执行速度快、保证实时性的优点。
附图说明
图1为发明的系统模块框图;
图2为本发明的系统流程图;
图3为本发明的工作流程图;
图中:1、CPU指令集模拟器模块;101、插桩模块;102、编译模块;103、目标码符号分析模块;104、配置文件生成模块;105、配置接口模块;106、指令执行模块;107、时钟计时和维护模块;108、函数检查模块;109、函数调用栈维护模块;110、覆盖率收集模块;111、覆盖率分析模块;112、覆盖率展示模块;113、报告生成模块。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-3,本发明提供的一种实施例:针对实时嵌入式软件源代码覆盖率分析系统,包括CPU指令集模拟器模块1,CPU指令集模拟器模块1包括插桩模块101、编译模块102、目标码符号分析模块103、配置文件生成模块104、配置接口模块105、指令执行模块106、时钟计时和维护模块107、函数检查模块108、函数调用栈维护模块109、覆盖率收集模块110、覆盖率分析模块111、覆盖率展示模块112和报告生成模块113,CPU指令集模拟器模块1模拟执行对应目标码,且时钟计时和维护模块107进行系统时钟的计时、暂停、恢复和维护,插桩模块101与编译模块102建立数据连接,且编译模块102与目标码符号分析模块103建立数据连接,目标码符号分析模块103与配置文件生成模块104建立数据连接,且配置文件生成模块104与配置接口模块105建立数据连接,配置接口模块105可指定探针函数的地址,且配置接口模块105与指令执行模块106建立数据连接,指令执行模块106与时钟计时和维护模块107建立数据连接,时钟计时和维护模块107与函数检查模块108建立数据连接,且函数检查模块108与函数调用栈维护模块109建立数据连接,函数调用栈维护模块109与覆盖率收集模块110建立数据连接,且覆盖率收集模块110与覆盖率分析模块111建立数据连接,覆盖率分析模块111与覆盖率展示模块112建立数据连接,且覆盖率展示模块112与报告生成模块113建立数据连接。
工作原理:本发明以func程序作为实例来说明原理,首先设计一个指定CPU指令集模拟器模块1,能模拟执行对应的目标码,为获取源代码覆盖率,在覆盖率利用插桩模块101进行插桩时,在覆盖率插桩时分别把探针函数sunwise_entry、sunwise_branch、sunwise_cond和sunwise_exit插入到函数入口、分支、条件和出口处,随后利用编译模块102编译插桩后代码生成目标码target.out,随后通过对应编译模块102链解析符号信息得到上述4个探针函数的地址分别为:0x40000100、0x40000200、0x40000300和0x40000400,把4个地址利用目标码符号分析模块103和配置文件生成模块104把地址写入配置文件probe.config文件,随后启动CPU指令集模拟器模块1,加载目标码文件和probe.config文件,把probe.config文件中的4个地址添加到list中,同时CPU指令集模拟器模块1提供配置接口模块105,可指定探针函数的地址,CPU指令集模拟器模块1通过指令执行模块106开始执行时,在CPU指令集模拟器模块1内部通过时钟计时和维护模块107内部维护一个地址列表list和指令计数器状态栈stack:list中保存探针函数地址,stack保存时钟计时状态,当stack为空或栈顶元素为0时正常计时,为1则暂停计时,具体地,当调用函数指令时,函数检查模块108进行函数的检查,检查被调函数地址是否在list中,是则利用把状态1放到stack栈顶,否则把状态0放到stack栈顶,然后再执行指令,当当执行函数返回指令后,如果stack不为空则利用函数调用栈维护模块109把顶部元素出栈,同时指令执行模块106在执行的过程中,初始stack为空,时钟正常计时,当执行到调用test函数时,经检查test地址不在list中,把0放到stack栈顶,正常计时,然后进入test函数执行;接着调用sunwise_entry函数,因sunwise_entry地址在list中,把1放到stack栈顶,暂停计时,进入sunwise_entry函数执行;执行sunwise_entry的返回指令后,回到test函数,并把stack栈顶元素1出栈,此时栈顶元素变为0,恢复时钟计时;同理,在执行sunwise_branch、sunwise_cond和sunwise_exit时,可实现时钟暂停,在执行被测函数本身逻辑时正常计时,直至程序结束,程序结束时,探针函数把收集的信息写入coverage.cox文件,随后利用覆盖率收集模块110以收集原始覆盖率信息,通过覆盖率分析模块111进行数据分析,随后利用覆盖率展示模块112进行展示,同时利用报告生成模块113生成报告。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
Claims (6)
1.针对实时嵌入式软件源代码覆盖率分析系统,包括CPU指令集模拟器模块(1),其特征在于:所述CPU指令集模拟器模块(1)包括插桩模块(101)、编译模块(102)、目标码符号分析模块(103)、配置文件生成模块(104)、配置接口模块(105)、指令执行模块(106)、时钟计时和维护模块(107)、函数检查模块(108)、函数调用栈维护模块(109)、覆盖率收集模块(110)、覆盖率分析模块(111)、覆盖率展示模块(112)和报告生成模块(113)。
2.根据权利要求1所述的针对实时嵌入式软件源代码覆盖率分析系统,其特征在于:所述CPU指令集模拟器模块(1)模拟执行对应目标码,且时钟计时和维护模块(107)进行系统时钟的计时、暂停、恢复和维护。
3.根据权利要求1所述的针对实时嵌入式软件源代码覆盖率分析系统,其特征在于:所述插桩模块(101)与编译模块(102)建立数据连接,且编译模块(102)与目标码符号分析模块(103)建立数据连接,目标码符号分析模块(103)与配置文件生成模块(104)建立数据连接,且配置文件生成模块(104)与配置接口模块(105)建立数据连接。
4.根据权利要求3所述的针对实时嵌入式软件源代码覆盖率分析系统,其特征在于:所述配置接口模块(105)可指定探针函数的地址,且配置接口模块(105)与指令执行模块(106)建立数据连接,指令执行模块(106)与时钟计时和维护模块(107)建立数据连接。
5.根据权利要求4所述的针对实时嵌入式软件源代码覆盖率分析系统,其特征在于:所述时钟计时和维护模块(107)与函数检查模块(108)建立数据连接,且函数检查模块(108)与函数调用栈维护模块(109)建立数据连接。
6.根据权利要求5所述的针对实时嵌入式软件源代码覆盖率分析系统,其特征在于:所述函数调用栈维护模块(109)与覆盖率收集模块(110)建立数据连接,且覆盖率收集模块(110)与覆盖率分析模块(111)建立数据连接,覆盖率分析模块(111)与覆盖率展示模块(112)建立数据连接,且覆盖率展示模块(112)与报告生成模块(113)建立数据连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211323818.8A CN115658507A (zh) | 2022-10-28 | 2022-10-28 | 针对实时嵌入式软件源代码覆盖率分析系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211323818.8A CN115658507A (zh) | 2022-10-28 | 2022-10-28 | 针对实时嵌入式软件源代码覆盖率分析系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115658507A true CN115658507A (zh) | 2023-01-31 |
Family
ID=84994111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211323818.8A Pending CN115658507A (zh) | 2022-10-28 | 2022-10-28 | 针对实时嵌入式软件源代码覆盖率分析系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115658507A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115904855A (zh) * | 2023-03-02 | 2023-04-04 | 上海合见工业软件集团有限公司 | 基于信号动态追踪确定目标驱动源码的系统 |
-
2022
- 2022-10-28 CN CN202211323818.8A patent/CN115658507A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115904855A (zh) * | 2023-03-02 | 2023-04-04 | 上海合见工业软件集团有限公司 | 基于信号动态追踪确定目标驱动源码的系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1109897C (zh) | 半导体测试系统 | |
EP0189848B1 (en) | Method and apparatus for software debugging | |
CN110865971B (zh) | Soc芯片的验证系统及其方法 | |
US5265254A (en) | System of debugging software through use of code markers inserted into spaces in the source code during and after compilation | |
US8924937B1 (en) | Method and system for generating verification information and tests for software | |
CN110580226B (zh) | 操作系统级程序的目标码覆盖率测试方法、系统及介质 | |
Bouchhima et al. | Automatic instrumentation of embedded software for high level hardware/software co-simulation | |
CN115658507A (zh) | 针对实时嵌入式软件源代码覆盖率分析系统 | |
CN115470138A (zh) | 一种基于不同调试级别交叉验证的调试器缺陷检测方法 | |
CN103713977A (zh) | 一种微处理器ip核比较验证的实现方法 | |
CN113836023A (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 | |
Fabre et al. | Building dependable COTS microkernel-based systems using MAFALDA | |
CN115080978A (zh) | 一种基于模糊测试的运行时漏洞检测方法及系统 | |
CN107329869B (zh) | 一种片上系统的仿真方法及装置 | |
CN115658370A (zh) | 一种基于编译器的机器学习加速芯片故障实时探测方法 | |
Křoustek et al. | Retargetable multi-level debugging in HW/SW codesign | |
Sundmark et al. | Monitored software components-a novel software engineering approach | |
CN111025166A (zh) | 用于电池检测系统的调试器 | |
El-Kharashy et al. | A novel assertions-based code coverage automatic cad tool | |
Shi et al. | Binary code level verification for interrupt safety properties of real-time operating system | |
Gastel et al. | Detecting energy bugs and hotspots in control software using model checking | |
Bogdanov | Statement-level energy simulation in embedded systems using GCC | |
Osinski et al. | PyFI-fault injection platform for real hardware | |
KR100248435B1 (ko) | 칠 언어에 대한 위험한 제어 이동 탐지방법 | |
CN101989222A (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 |