CN110419031A - 用于微控制器程序的代码覆盖范围跟踪 - Google Patents

用于微控制器程序的代码覆盖范围跟踪 Download PDF

Info

Publication number
CN110419031A
CN110419031A CN201880014801.XA CN201880014801A CN110419031A CN 110419031 A CN110419031 A CN 110419031A CN 201880014801 A CN201880014801 A CN 201880014801A CN 110419031 A CN110419031 A CN 110419031A
Authority
CN
China
Prior art keywords
test point
program
code
execution
arc
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
Application number
CN201880014801.XA
Other languages
English (en)
Other versions
CN110419031B (zh
Inventor
J·泽维奇
J·麦金尼斯
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.)
Microchip Technology Inc
Original Assignee
Microchip Technology Inc
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 Microchip Technology Inc filed Critical Microchip Technology Inc
Publication of CN110419031A publication Critical patent/CN110419031A/zh
Application granted granted Critical
Publication of CN110419031B publication Critical patent/CN110419031B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • 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/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种微控制器,该微控制器可包括处理器和至少一个存储器设备,该至少一个存储器设备通过以下方式:基于程序代码中的基本块(指令)之间的逻辑关系来存储(a)限定多个支配弧的程序的程序代码;和(b)存储检测点的集合,该检测点由程序代码基本块的子集组成,该程序代码基本块与多个支配弧对应,每个检测点均位于相应支配弧中。代码覆盖范围实现程序(例如,IDE或编译器)可被配置为利用一个或多个执行跟踪指令检测程序代码中的每个检测点,以存储或生成执行记录信息。可使用测试工具来在微控制器上执行程序,其中程序代码中的每个相应检测点的执行致使相应执行跟踪指令存储或生成执行记录信息,该执行记录信息指示与该检测点对应的支配弧已被测试工具执行。

Description

用于微控制器程序的代码覆盖范围跟踪
相关专利申请
本申请要求于2017年5月2日提交的共同拥有的美国临时专利申请号62/500,144的优先权,该申请出于所有目的据此以引用方式并入本文。
技术领域
本公开涉及微控制器,并且更具体地涉及用于例如通过测试套件对微控制器程序的执行进行代码覆盖范围跟踪的***和方法。
背景技术
通常对设计用于在微控制器上执行的软件程序进行验证,以确保微控制器在执行程序的同时正常工作。可以针对“测试用例”或若干测试用例的测试“套件”进行验证。测试用例是通常在模拟微控制器上的执行的测试环境(与生产环境相反)中的程序的脚本化自动使用,以验证程序对特定任务的性能。测试套件是一批测试用例,该批测试用例一起测试正在验证的所有程序的功能。
可请求或需要程序开发者示出其产品测试套件“覆盖”(即,执行验证测试于)项目中的特定百分比的可执行代码;该百分比常常为100%。验证可执行代码需要经由***的组装指令分析***的行为。微控制器内的嵌入式***可包括数千个或甚至数百万个组装指令。
确定代码覆盖范围的早期历史方法是跟踪代码选择的每个指令执行,并对已执行的指令进行制表。该方法通常需要具有足够的计算能力和数据存储的模拟器和硬件仿真器来跟踪每个指令执行,其中可存在数百万个指令执行。
该技术的现代扩展可在配备有“指令跟踪”机构的(通常更大)微控制器上获得。该机构通常需要昂贵的高速硬件,以通过外部程序(通常为IDE)捕获跟踪流和大量处理时间来存储、然后检索和分析很容易是许多吉字节(或更多)的跟踪数据,这可能既昂贵又耗时。此外,当源代码以高级语言(如C)而非汇编语言编写时,指令与“高级语言语句”的相关性是脆弱的。虽然指令与语句之间常常存在相关性,但其并不总是很容易确定,并且在运行之间很少进行固定。例如,如果编译器优化设置已改变,则指令流可能显著不同,因此任何关联必须是动态的并且必须认识到可执行图像构建和执行环境中的许多改变。这种方法的有益效果在于在非常精细的粒度下是准确的,但对于大的代码体或长的所涉及的测试运行,它是极其低效的。
随后的方法也来源于在高级语言的开发中所体现的理论。此方法需要利用经由串行通信端口传输文本消息的代码来检测分支点(称为“基本块”)。“基本块”的概念源自具有单个入口点的一组连续的机器指令。基本块的边界由编译器容易地确定,但难以根据生成的代码来精确地确定。这导致上文所讨论的方法的改进。通过确定已执行基本块,***知道基本块中的每个语句都已执行。这导致要跟踪的事件的最佳案例数量减少。遗憾的是,非次要程序通常包含大量(例如,数百个)基本块,这些基本块可能需要大量或不可用量的资源(例如,存储器)来制表它们的执行。因此,该方法的实际示例利用对已被执行的基本块的识别的大量且耗时的通信来检测源代码。在一些微控制器上,这可以采取对例程的调用的形式,该例程通过可用通信信道(常常为UART)输出基本块标识以及可行的“包络”。该方法具有三个显著缺点:1)检测代码可显著地影响待测代码的定时特性和性能,2)检测代码相当大并且可仅需要在每次测试运行中检测应用程序的一部分,这对收集关于代码覆盖范围的数据所需的总时间具有倍増效应,并且3)在部分运行期间收集数据引入了在运行期间不精确相同的环境因素和其他测试因素的不需要的效果。
另一种已知的方法涉及模拟器的使用,该模拟器被设计成跟踪每个指令的执行,并且因此能够跟踪哪个指令原位被执行。但是,程序员的客户基于模拟器不能充分代表实际设备这一观点可能不接受模拟代码覆盖范围。
发明内容
本公开提供了用于原位代码覆盖范围的***和方法,即,在微控制器正在执行主题代码的同时在制造的微控制器上执行代码覆盖范围。所公开的***和方法可例如适用于例如嵌入式微控制器产品开发域。
根据各种实施方案,本公开提供用于对在嵌入式微控制器上执行的程序和设备逻辑的程序代码执行代码覆盖范围和代码覆盖范围跟踪的***和方法。具体地讲,在程序代码正在执行时,对微控制器自身执行代码覆盖范围和代码覆盖范围跟踪。使用来自代码编译领域的技术来检测程序代码,所公开的方法可产生比现有技术小得多的检测点集合(以数量表示)。这些检测点是彻底区分已执行的程序代码与未执行的程序代码所需的唯一点。
在一些实施方案中,使用支配树和轮廓弧来产生检测点。对于典型的程序,与某些常规技术相比,检测轮廓弧可将表示相对于基本块的效率提高约两倍或三倍。
在一些实施方案中,可以利用单个位集合指令来检测程序代码,以例如在程序中的每个所定义的检测点处为程序代码的每个相应支配弧切换RAM阵列中的“脏位”。利用单个位设置指令来检测程序代码以切换RAM阵列中的脏位允许程序中的时间和空间破坏减少或最小化,并且允许通过集成开发环境(IDE)对脏位阵列进行后处理。脏位阵列可具有固定大小(即,随时间固定),因此可使用针对程序代码的无限制长度的测试套件运行来验证程序的操作以及测试套件的功效。
在其他实施方案中,程序代码可利用程序代码的每个相应支配弧中的子例程调用来检测,例如,在程序中的每个限定的检测点处,该子例程调用调用子例程,该子例程设置或生成支配弧执行记录信息,该支配弧执行记录信息指示相应支配弧已被执行。例如,在一个实施方案中,例如通过将“1类型”NOP指令改变为为“0类型”NOP指令,可利用“NOP相变”陷阱和相应陷阱处理程序来检测每个支配弧,该陷阱处理程序包括对程序中相应无操作(NOP)指令产生“相变”的指令,这允许后处理跟踪应用程序查看NOP指令,以确定是否执行了相应支配弧。该实施方案可在微控制器的ROM(例如,闪存存储器)内完全执行,并且因此避免使用有价值的RAM存储器空间。
附图说明
以下参考附图讨论了示例性实施方案,在附图中:
图1是根据本发明的实施方案的用于安装在微控制器上的程序的原位测试和代码覆盖范围分析的示例性***的示意图;
图2A是根据本发明的实施方案的通过本发明的***和方法分析的示例性程序的示意图;
图2B是图2A的示例性程序的示意图,该示例性程序由程序代码的基本块安排为定向图;
图2C是图2A的示例性程序的示意图,该示例性程序由程序代码的基本块安排为支配图;
图3示出了根据示例性实施方案的用于通过测试套件对程序的执行进行代码覆盖范围跟踪的示例性方法;
图4A和图4B示出了根据利用脏位作为执行记录信息的示例性实施方案用于分别编译用于代码覆盖范围跟踪的程序和所编译的程序的运行时间执行的示例性方法;并且
图5A和图5B示出了根据利用无操作(NOP)指令状态作为执行记录信息的示例性实施方案的用于分别编译用于代码覆盖范围的程序和所编译的程序的运行时间执行的示例性方法。
具体实施方式
本发明的实施方案提供了用于在原位环境中确定嵌入式微控制器***的代码覆盖范围的***和方法。在至少一些实施方案中,此类原位***和方法不需要微控制器与***设备的串行、网络或其他连接,以便确定代码覆盖范围。与现有***和方法相比,一些实施方案可以提供在执行速度、存储要求和计算资源消耗方面的显著的改进。
图1示出了根据本发明的实施方案的用于安装在微控制器上的程序(例如,软件应用程序)的原位测试和代码覆盖范围分析的示例性***100。***100可包括开发计算机***110和微控制器140。
开发计算机***110可包括用于开发和编译待存储在微控制器140上的程序(例如,软件应用程序)的任何合适的***。在一些实施方案中,开发计算机***110可被配置为分析程序代码以识别代码中的多个“支配弧”且利用被配置为在程序执行期间(例如,通过测试套件)记录每个相应支配弧的执行的代码执行跟踪来对每个支配弧进行测量,从而确定由测试套件提供的代码覆盖范围。
如图所示,例如,开发计算机***110可包括编译器112,该编译器可包括在(可选)集成开发环境114中,或被提供为独立编译器。除了典型的代码编译功能之外,编译器112(和/或IDE 114)还可被配置为执行在编译程序120期间在任何点处在编译器112(和/或IDE114)中集成或以其他方式访问该编译器的代码分析和检测指令116,该代码分析和检测指令可体现为源代码或任何衍生表示(例如,中间表示(IR),诸如例如高级IR或低级IR)。在其他实施方案中,代码分析和检测指令116可与编译器112分开提供,例如在插件或在***110中提供的或可访问该***的其他程序中提供。代码分析和检测指令116可被配置为分析程序120的程序代码以(使用以下讨论的技术)识别代码中的多个“支配弧”122且在每个相应每个支配弧122中的限定的检测点164处利用代码执行跟踪指令166来检测每个支配弧122。利用代码执行跟踪指令166检测的所编译和检测程序被指示为所编译的程序160,该所编译的程序随后可存储在微控制器140的存储器144中,如图1所示。
在每个检测点164处检测的代码执行跟踪指令166可被配置为通过在微控制器140上执行所编译的程序160期间(例如,通过设置在微控制器140上或在该微控制器外部的测试套件170)存储或生成执行记录信息180(下文讨论)来记录相应检测点164的执行。每个相应检测点164的执行记录信息180指示对应的支配弧122被执行。然后可分析用于多个检测点164的执行记录信息180(对应于所述多个支配弧),以确定由测试套件170提供的程序160的程序代码覆盖范围。
尽管本文件涉及在每个检测点处检测的“代码执行跟踪指令”(复数个),但是一些实施方案可仅使用在每个检测点处检测的单个指令来提供代码执行跟踪,并且因此“代码执行跟踪指令”旨在包括一个或多个指令。
因此,微控制器140可被配置为例如经由测试套件170来提供程序160的原位代码覆盖范围跟踪。微控制器140可包括用于执行本文所公开的任何功能和/或任何其他微控制器功能的任何合适的部件。例如,如图1所示,微控制器140可包括处理器(例如微处理器)142和一个或多个存储器设备144,该处理器执行已安装程序、处理输入数据并且传输输出数据,该一个或多个存储器设备可包括一个或多个持久性存储器设备和/或非易失性存储器设备例如只读存储器(ROM)设备、和/或一个或多个易失性存储器设备例如随机存取存储器(RAM)设备。
一个或多个存储器设备144可存储以下指令和/或数据中的任何一者或全部:被配置用于由处理器142执行的组装指令;包括程序代码162的至少一个程序160(例如,用户安装程序);和在每个相应用户安装程序160的程序代码162上执行的测试的测试套件170(在一些实施方案中,可在微控制器140的外部另外地提供测试套件170)。如上所述,程序代码162可利用执行跟踪指令166在由程序代码162定义的多个对应的支配弧中的多个检测点164处来检测。
如上所述,在执行程序160期间(例如,通过测试套件170),执行跟踪指令166通过在执行程序160中的每个检测点164时存储或生成执行记录信息180,这指示执行了相应支配弧122。在一些实施方案中,执行记录信息180存储在程序代码162内,例如以修改的代码指令的形式存储。例如,如下所述,执行跟踪指令166可包括修改程序代码162中的无操作(NOP)指令的指令,这指示相应检测点164已被执行。在其他实施方案中,执行记录信息180与程序代码162分开(和/或在与程序代码分开的存储器中),例如,以“脏位”的形式,如下所述。
测试套件170可为内部或外部强加的一组测试条件,该测试条件例如由客户供应以用于测试程序160的执行。其可比较客户在由客户编写的代码中准备的一组条件、或由客户的设计的测试设备应用的一组外部刺激、或由更高水平的供应商供应的测试设备(例如,如在汽车工业中可能常见的)。因此,在一些实施方案中,测试套件170可完全位于微控制器140的外部。作为示例性示例,用于具有基于微控制器的线传油门的汽车测试车的测试套件170可体现为机器人控制的加速器踏板,该机器人控制的加速器踏板与其他控制输入端一起执行踏板凹陷部的预先编程序列。
代码覆盖范围分析指令190可由开发计算机***110、或由微控制器140或由单独的测试套件170提供,并且被配置为分析在程序160的执行期间存储或生成的执行记录信息180,以生成和/或输出指示正在由测试套件170执行的程序160的执行的信息,例如,包括由测试套件170执行的程序代码162的百分比。
如上所述,可例如通过代码分析和检测指令116(并入到编译器112中或以其他方式提供)为程序160限定一组检测点164。一组检测点164可包括用于相应程序160的基本块的子集,其中程序160的检测点164的执行确保在程序160中的所有支配弧122的执行,并因此确保例如通过测试套件170来对程序160的所有代码162的执行。如上所述,代码分析和检测指令116可在每个检测点164处检测代码执行跟踪指令166,使得代码执行跟踪指令166形成程序160的检测点164的一部分,例如以脏位设置指令或用于改变所限定的NOP指令的状态的指令的形式。
在一些实施方案中,执行记录信息180可由脏位来体现。脏位可包括位的阵列,该位的阵列可被设置为指示程序160的每个相应检测点164是否已由测试套件170执行。因此,每个检测点164可具有对应的脏位,指示检测点164是否已被执行。在一些实施方案中,代码执行跟踪指令166可在检测到相应检测点已被执行时设置相应脏位。在一些实施方案中,代码执行跟踪指令166形成所编译的程序代码的一部分,并且因此存储在第一存储器(例如ROM)中,并且可执行以访问存储在第二存储器(例如,RAM)中的脏位,并且在执行相应检测点时设置每个相应脏位。
在其他实施方案中,执行记录信息180可由与每个检测点164对应的无操作(NOP)指令的状态来体现。子例程调用可在每个检测点164处检测,该子例程调用调用子例程,该子例程设置或生成执行记录信息180,该执行记录信息指示相应支配弧已被执行。例如,在一个实施方案中,可利用“NOP相变”陷阱和被配置为(例如,通过从“1类型”NOP指令改变为“0类型”NOP指令,或反之亦然)修改NOP指令的对应的陷阱处理程序来检测每个支配弧。因此,每个NOP指令的状态指示相应的检测点164并因此程序代码162的对应的支配弧是否已执行。
微控制器140还可包括:一个或多个输入端口150,该一个或多个输入端口用于连接到其他设备并从其他设备接收数据;一个或多个输出端口152,该一个或多个输出端口用于连接到其他设备和将数据传输到其他设备;一个或多个专用集成电路(ASIC)154,该一个或多个ASIC可用于实现内部***设备和服务;和各种数据总线,该各种数据总线将微控制器140的部件彼此通信地连接。
在一些实施方案中,微控制器140可被配置为执行所公开的代码覆盖范围跟踪原位。例如,处理器142可例如由客户放置在测试模式中,其中处理器142可在一个或多个已安装程序160上执行测试套件170。在每个程序160的执行期间,在相应程序代码162中检测的代码执行跟踪指令166可存储/生成执行记录信息180,该执行记录信息指示对应的支配弧的执行,如上所述。在处于测试模式时,微控制器处理器142或测试套件170可执行代码覆盖范围分析指令190,以检索和分析执行记录信息180,并且以代码覆盖范围百分比或其他度量的形式报告指示相应程序160的代码覆盖范围的代码覆盖范围信息。
在一些实施方案中,代码分析和检测指令116可使用衍生自图形理论的机制(在定向图中节点的“支配”概念)来识别支配弧122和/或检测点164。例如,在图G=(N,E)中,其中N是图的节点,并且E是连接节点的边缘,支配集合是集合N的子集D,使得不在D中的每个节点均与D中的至少一个元素相邻。支配数y(G)是G的最小支配集合中的节点数。本公开表明,理解支配具有如下效果:考虑到在支配集合中的任何指令执行,可以保证执行程序代码的基本块的集合。具体地,程序中的程序代码中的每个基本块均能够表示为定向图的节点。由第二基本块的第一基本块的调用表示为从第一基本块的节点指向第二基本块的节点的边缘。通过确定定向图的子集,可以将该定向图制成跨越树,该定向图包括所有节点,并且具有最小可能数量的边缘。
节点中的每个节点的支配可由跨越树确定,然后可产生支配树,以反映该树中每个节点的支配。实际上,这导致节点数量的减少,该节点必须检测以确定已执行哪个代码。即,如果执行作为基本块的一部分的指令或语句,则能够假定执行该基本块代码的代码中的所有代码;类似地,如果执行特定基本块,则能够假定由执行的基本块所支配的基本块中的所有基本块的所有代码也被执行。下面描述的示例性示例示出了计算支配树、后支配树和超级块支配图的示例性过程。仅检测叶节点,即,不指向图中进一步向下的任何节点的节点,该叶节点各自对应于一个支配器弧,以产生对应的程序的一组检测点。由于仅检测叶节点,因此与现有技术相比,该集合具有更少检测点。
实际上,在利用脏位作为执行记录信息180的一些实施方案中,程序160的检测点164的数量可大大减小,使得检测点164可在分配给程序160的可用RAM空间中被跟踪。程序160的位阵列180可包括针对程序160中的每个检测点164的单个位(即,与支配图的叶节点对应的每个基本块),即,每个支配弧有一个位。在一些实施方案中,跟踪代码覆盖范围所需的所需数据存储资源是在编译程序代码时设置的,并且保持不变。
此外,在利用NOP指令状态作为执行记录信息180的实施方案中,可在微控制器140的ROM(例如,闪存存储器)内完全执行执行跟踪,并因此避免在微控制器中使用有价值的RAM存储器空间。
图2A示出了根据示例性实施方案的示例性程序200(具有简单控制结构),以演示所公开的代码覆盖范围跟踪技术。示例性程序200包含程序代码的十四个语句(以C语言),取决于在其他次要影响中所期望的相关指令集合架构、优化程度和目标编译器的效率,该语句将编译成任意和可变数量的汇编语言指令。示例性程序200可基于进入和离开每个代码块的路径被分配到九个基本块A至基本块I中。
图2B示出了表示为定向图202的示例性程序200,其中基本块A至基本块I是节点。基本块之间的关系解析为表1的支配表,该表显示了每个基本块支配的基本块的集合;对于特定基本块,它支配的基本块的集合包括每个基本块,如果执行特定基本块,则该每个基本块必须执行。
表1
基本块 支配{集合}
A {A}
B {A,B}
C {A,B,C}
D {A,B,D}
E {A,B,D,E}
F {A,B,F}
G {A,B,F,G}
H {A,B,F,H}
I {A,B,F,I}
也可以将支配表表示为定向图。图2C示出了根据示例性实施方案与上文所示的示例性表1对应的支配树204的定向图。如图所示,支配树204示出示例性程序200限定五个支配弧,其叶节点对应于基本块C、E、G、H和I中的五个基本块。检测这五个基本块C、E、G、H、I将提供对应的程序200的完整代码覆盖范围跟踪。以这种方式,处理器142可生成检测点C、E、G、H和I的集合,该集合提供程序200的完整代码覆盖范围跟踪。
图3示出了根据示例性实施方案用于由测试套件170执行程序160的代码覆盖范围跟踪的示例性方法300。在302处,用户(例如,客户)可例如使用开发计算机***110处的集成开发环境(IDE)114来开发用于在微控制器140上执行的程序(例如,软件应用程序)160。在304处,用户可开发测试套件170或访问现有测试套件170。用户可能希望知道测试套件170覆盖在302处开发的程序160的程序代码162的程度,例如,测试套件170是否覆盖100%的代码162或一些较小部分的代码162。因此,在306处,用户可将IDE 114或独立编译器112设置成用于代码覆盖范围跟踪的仪器。
在308处,用户可例如根据本文所公开的技术将程序160编译或构建到用于代码覆盖范围跟踪的仪器。例如,该编译器112可自动识别程序代码162中的支配弧122和在每个所识别的支配弧122中的所识别的检测点164处检测代码执行跟踪指令166。代码执行跟踪指令166可被配置为在执行每个相应检测点164时生成或存储执行记录信息180(例如,通过存储脏位或改变指定的NOP指令的状态),使得相应检测点164的执行记录信息180指示代码162的对应的支配弧的执行。然后,用户可在微控制器140的存储器144中安装被检测用于代码覆盖范围跟踪的所编译的程序162。
在310处,用户可使用测试套件170来运行安装在微控制器140上的受检测程序160,其中受检测代码执行跟踪指令166在执行每个相应检测点164时(例如,通过存储脏位或改变指定的NOP指令的状态)存储或生成执行记录信息180。在312处,IDE可读取在310处设置或存储的执行记录信息180,并且通过测试套件170向用户呈现程序代码覆盖范围的指示。
图4A和图4B示出了根据利用脏位作为执行记录信息180的示例性实施方案用于分别编译和检测用于代码覆盖范围跟踪的程序120和所编译的程序160的运行时间执行的示例性方法400和450。
首先,图4A示出了根据一个示例性实施方案用于使用脏位编译用于代码覆盖范围跟踪的程序120的示例性方法400。在402处,编译器112可编译程序(例如,软件应用程序)120的所有源文件。在404处,编译器112在程序120中构建基本块的支配树,以限定支配弧122的集合,并因此识别检测点164的集合,每个检测点例如使用本文所讨论的技术均对应于相应支配弧122,例如参考图2A至图2C在上面所讨论的那样。在406处,编译器112可以利用脏位集合来检测每个支配弧122。在408处,编译器112可为受检测脏位在微控制器140中例如在微控制器RAM中分配数据存储器。最后,在410处,链接器可链接所编译的程序160的受检测对象文件。
图4B示出了根据一个示例性实施方案用于执行被检测用于经由方法400使用脏位进行代码覆盖范围跟踪的所编译的程序160的测试套件170的运行时间执行的示例性方法450。在452处,测试套件170在微控制器140上执行程序160,其中测试套件170执行一个、一些或所有检测点164(各自对应于相应支配弧122)。在454处,当执行每个检测点164时,代码执行跟踪指令166设置对应的脏位(例如,在微控制器RAM中),指示对应的支配弧122已被执行。在456处,测试套件170继续执行程序160,直到测试套件完成。如上所述,关于方法300的步骤312,IDE 114然后可执行代码覆盖范围分析指令190,以读取存储在RAM中的脏位(执行记录信息180),并且基于脏位数据向用户呈现程序代码162的测试套件覆盖范围的指示。
图5A和图5B示出了根据利用无操作(NOP)指令状态作为执行记录信息180的示例性实施方案用于分别编译用于代码覆盖范围跟踪的程序120和所编译的程序160的运行时间执行的示例性方法400和450。
首先,图5A示出了根据一个示例性实施方案用于基于NOP指令的操纵来编译用于代码覆盖范围跟踪的程序120的示例性方法500。在502处,编译器112可编译程序(例如,软件应用程序)120的所有源文件。在504处,编译器112在程序120中构建基本块的支配树,以限定支配弧122的集合,并因此识别检测点164的集合,每个检测点例如使用本文所述的技术对应于相应支配弧122,例如,如关于图2A至图2C在上面所讨论的那样。
编译器112然后可在506至508处利用代码执行跟踪指令来检测每个支配弧122。特别地,在506至508处,编译器112可利用子例程调用来检测每个支配弧122,该子例程调用调用子例程,该子例程设置或生成执行记录信息180,该执行记录信息指示相应支配弧122已被执行。例如,在一个实施方案中,可以在相应检测点164处利用“NOP相变”陷阱来检测每个支配弧,该“NOP相变”陷阱例如通过将NOP指令从一个变体改变为另一个变体,例如从“1类型”NOP指令改变为“0类型”NOP指令,或反之亦然,来跳跃到被指导成修改NOP指令的相应陷阱处理程序(由于,半导体的物理性质,其通常比从“0类型”改变为“1类型”需要基本上更少能量)。由在每个相应检测点164处检测的子例程所设置或生成的执行记录信息180(例如,相应NOP指令从“1类型”改变为“0类型”)指示了相应检测点164并因此程序代码162中相应支配弧122已经被执行。最后,在510处,链接器可链接所编译的程序160的受检测对象文件。
图5B示出了根据一个示例性实施方案用于经由方法500(例如,使用NOP指令状态)执行被检测用于代码覆盖范围跟踪的所编译的程序160的测试套件170的运行时间执行的示例性方法550。在552处,测试套件170在微控制器140上执行程序160,其中测试套件170执行一个、一些或所有检测点164(各自对应于相应支配弧122)。在554处,当执行每个检测点164时,在步骤506处检测的相应子例程调用调用并执行在556处的子例程,以设置或生成执行记录信息180,该执行记录信息指示相应支配弧122已被执行。例如,在其中利用“NOP相变”陷阱来检测每个检测点164的实施方案中,当在554处执行相应检测点164时,发生相应“NOP相变”陷阱,并且在556处,例如通过将NOP指令从“1类型”改变为“0类型”,或反之亦然,陷阱处理程序修改相应NOP指令,如上所讨论的那样,指示对应的支配弧122已被执行。在558处,测试套件170继续执行程序160,直到测试套件完成。如上所述,关于方法300的步骤312,IDE 114可然后执行代码覆盖范围分析指令190,以读取执行记录信息180(例如,NOP指令的状态),并且基于此类执行记录信息180来确定程序代码162的测试套件覆盖范围的指示并向用户呈现该指示。
已根据一个或多个优选的实施方案描述了本公开,并且应当理解,除了明确宣称的那些之外(例如,制造方法、通过工艺制造的产品等),许多等同物、替代物、变型和修改是可能的并且在本公开的范围内。

Claims (19)

1.一种微控制器,包括:
处理器;和
至少一个存储器设备,所述至少一个存储器设备存储:
程序,所述程序包括程序代码,所述程序代码基于多个基本块之间的逻辑关系来限定所述多个基本块和多个支配弧;
其中所述程序代码在所述程序代码中的多个检测点中的每一个检测点处利用执行跟踪指令来检测,其中每个检测点均位于所述程序代码中的所述多个支配弧中的对应一个支配弧中;
其中所述程序能够由测试工具执行;
其中在由所述测试工具执行所述程序期间,在每个相应检测点处的所述执行跟踪指令被配置为在执行所述相应检测点时,在所述至少一个存储器设备中存储或生成执行记录信息,所述执行记录信息指示所述相应检测点已被执行;
其中针对每个相应检测点所存储或生成的执行记录信息指示与所述相应检测点对应的所述支配弧已由所述测试工具执行。
2.根据权利要求1所述的微控制器,其中存储或生成相应检测点的执行记录信息包括存储指示所述相应检测点已被执行的单个位。
3.根据权利要求1至2中任一项所述的***,其中:
相应支配弧包括所述多个基本块中的多个基本块;并且
存储或生成相应检测点的执行记录信息包括存储或生成数据,所述数据指示所述相应支配弧的多个基本块中的每个基本块已被执行。
4.根据权利要求1至3中任一项所述的***,包括通过包括以下步骤的过程来识别所述程序中的所述多个支配弧:
生成表示所述多个基本块的定向图的信息;
基于表示所述多个基本块的所述定向图的所述信息来生成支配树;并且
使用所述支配树来识别所述多个支配弧。
5.一种用于代码覆盖范围跟踪的***,所述***包括:
根据权利要求1至4所述的微控制器中的任一个微控制器;
代码覆盖范围检测程序,所述代码覆盖范围检测程序被配置为利用相应执行跟踪指令来检测所述程序代码中的每个检测点,以存储或生成执行记录信息;和
测试工具,所述测试工具被配置为在所述微控制器上执行所述程序,其中在所述程序代码中的每个相应检测点的执行致使所述相应执行跟踪指令存储或生成执行记录信息。
6.根据权利要求5所述的***,其中所述代码覆盖范围跟踪还包括:
识别由所述多个支配弧中的所选择的基本块组成的检测点的集合,其中所述检测点的集合提供所述程序的完整代码覆盖范围跟踪;并且
确定相应检测点经由所述测试工具已被执行,并且作为响应,将指示所述相应检测点已被执行的位阵列存储在所述微控制器的存储器设备中,所述位阵列包括用于所述检测点中的每个检测点的单个位。
7.根据权利要求5至6中任一项所述的***,其中所述代码覆盖范围跟踪包括:
确定所有支配弧中的所有检测点经由所述测试工具已被执行;并且
在第二存储器中存储指示所有检测点已被执行的数据,所述数据指示所述测试工具对所述程序的完整代码覆盖范围。
8.根据权利要求5至7中任一项所述的***,其中所述测试工具在所述微控制器上提供。
9.根据权利要求5至8中任一项所述的***,其中所述代码覆盖范围检测程序存储在与所述微控制器分开的开发计算机***的存储器设备中。
10.根据权利要求5至9中任一项所述的***,其中所述处理器被配置为:(a)使用所述测试工具来执行所述程序代码;以及(b)执行所述代码执行跟踪指令,以执行所述程序代码的执行的代码覆盖范围跟踪,而无需所述微控制器与***设备的串行、网络或其他连接,以确定所述代码覆盖范围。
11.一种用于对存储在非暂态存储器中的程序的程序代码的执行的代码覆盖范围跟踪的方法,所述方法包括:
识别所述程序代码的多个基本块;
基于所述多个基本块之间的逻辑关系来生成限定多个支配弧的支配树;
识别在所述程序代码中的由所述程序代码的所述多个基本块的子集组成的检测点的集合,所述检测点的集合与所述多个支配弧对应,其中每个检测点位于所述多个支配弧中的对应一个支配弧中;以及
利用相应执行跟踪指令来检测所述程序代码中的每个检测点,以在执行所述相应检测点时存储或生成执行记录信息,其中在执行每个相应检测点时存储或生成的执行记录信息指示与所述相应检测点对应的所述支配弧已被执行。
12.根据权利要求0所述的方法,还包括:
使用测试工具来执行所述程序,其中在所述程序代码中的每个相应检测点的执行致使所述相应执行跟踪指令存储或生成执行记录信息,
其中针对每个检测点所存储或生成的执行记录信息指示与所述相应检测点对应的所述支配弧已由所述测试工具执行;以及
访问所存储的执行记录信息,以通过所述测试工具确定所述程序的代码覆盖范围。
13.根据权利要求12所述的方法,其中所述程序的代码覆盖范围通过使用所述测试工具并访问在执行所述相应检测点时所存储或生成的执行记录信息执行的所述程序来确定,而无需所述微控制器与***设备的串行、网络或其他连接,以确定所述代码覆盖范围。
14.根据权利要求11至13中任一项所述的方法,其中存储或生成相应检测点的执行记录信息包括存储指示所述相应检测点已被执行的单个位。
15.根据权利要求11至14中任一项所述的方法,其中利用相应执行跟踪指令来检测所述程序代码中的每个检测点包括利用脏位指令来检测每个检测点,所述脏位指令被配置为在执行所述相应检测点时将脏位设置在存储器中。
16.根据权利要求11至15中任一项所述的方法,其中利用相应执行跟踪指令来检测所述程序代码中的每个检测点包括利用用于修改所述程序代码中的无操作(NOP)指令的指令来检测每个检测点,其中相应NOP指令的修改指示所述检测点被执行。
17.根据权利要求11至16中任一项所述的方法,其中:
相应支配弧包括所述多个基本块中的多个基本块;以及
存储或生成相应检测点的执行记录信息包括存储或生成指示相应支配弧中的所有基本块已被执行的数据。
18.根据权利要求11至17中任一项所述的方法,其中:
所述程序存储在所述微控制器的第一存储器设备中;以及
所述执行跟踪指令被配置为在所述微控制器的第二存储器设备中存储或生成所述执行记录信息。
19.根据权利要求11至18中任一项所述的方法,其中:
所述程序存储在所述微控制器的存储器设备中;以及
所述执行跟踪指令被配置为在所述微控制器的同一存储器设备中存储或生成所述执行记录信息。
CN201880014801.XA 2017-05-02 2018-04-27 用于微控制器程序的代码覆盖范围跟踪 Active CN110419031B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762500144P 2017-05-02 2017-05-02
US62/500,144 2017-05-02
US15/916,509 US10402309B2 (en) 2017-05-02 2018-03-09 Code coverage tracking for a microcontroller program
US15/916,509 2018-03-09
PCT/US2018/029698 WO2018204167A1 (en) 2017-05-02 2018-04-27 Code coverage tracking for a microcontroller program

Publications (2)

Publication Number Publication Date
CN110419031A true CN110419031A (zh) 2019-11-05
CN110419031B CN110419031B (zh) 2024-02-20

Family

ID=64015386

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880014801.XA Active CN110419031B (zh) 2017-05-02 2018-04-27 用于微控制器程序的代码覆盖范围跟踪

Country Status (5)

Country Link
US (1) US10402309B2 (zh)
CN (1) CN110419031B (zh)
DE (1) DE112018002316T5 (zh)
TW (1) TW201907304A (zh)
WO (1) WO2018204167A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112667514A (zh) * 2020-12-31 2021-04-16 海光信息技术股份有限公司 一种微程序的调试方法及其调试装置
CN113835990A (zh) * 2020-06-23 2021-12-24 中科寒武纪科技股份有限公司 检测方法、装置、计算机设备和存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11010273B2 (en) * 2017-06-28 2021-05-18 Intel Corporation Software condition evaluation apparatus and methods
CN115858354B (zh) * 2022-11-29 2023-08-18 广发银行股份有限公司 一种测试覆盖率计算方法、***、终端及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1694075A (zh) * 2004-04-07 2005-11-09 微软公司 在探测程序时探针优化的方法和***
US20090249309A1 (en) * 2008-03-26 2009-10-01 Avaya Inc. Efficient Program Instrumentation

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5953681A (en) * 1996-07-30 1999-09-14 Bayer Corporation Autonomous node for a test instrument system having a distributed logic nodal architecture
US5772963A (en) * 1996-07-30 1998-06-30 Bayer Corporation Analytical instrument having a control area network and distributed logic nodes
US7093234B2 (en) * 2001-08-24 2006-08-15 International Business Machines Corporation Dynamic CPU usage profiling and function call tracing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1694075A (zh) * 2004-04-07 2005-11-09 微软公司 在探测程序时探针优化的方法和***
US20090249309A1 (en) * 2008-03-26 2009-10-01 Avaya Inc. Efficient Program Instrumentation

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113835990A (zh) * 2020-06-23 2021-12-24 中科寒武纪科技股份有限公司 检测方法、装置、计算机设备和存储介质
CN113835990B (zh) * 2020-06-23 2024-01-30 中科寒武纪科技股份有限公司 检测方法、装置、计算机设备和存储介质
CN112667514A (zh) * 2020-12-31 2021-04-16 海光信息技术股份有限公司 一种微程序的调试方法及其调试装置
CN112667514B (zh) * 2020-12-31 2024-08-20 海光信息技术股份有限公司 一种微程序的调试方法及其调试装置

Also Published As

Publication number Publication date
DE112018002316T5 (de) 2020-01-30
WO2018204167A1 (en) 2018-11-08
CN110419031B (zh) 2024-02-20
TW201907304A (zh) 2019-02-16
US10402309B2 (en) 2019-09-03
US20180322033A1 (en) 2018-11-08

Similar Documents

Publication Publication Date Title
Krüger et al. Where is my feature and what is it about? a case study on recovering feature facets
CN110419031A (zh) 用于微控制器程序的代码覆盖范围跟踪
US8601436B2 (en) Simulation-based interface testing automation system and method for robot software components
US7681180B2 (en) Parameterized test driven development
US20200293295A1 (en) Method and System of Intelligent Iterative Compiler Optimizations Based on Static and Dynamic Feedback
US9141350B2 (en) Embedded system performance
KR20090092617A (ko) 프로세서 및 컴파일 방법
JP2672711B2 (ja) コンピュータプログラムをテストし、デバッグする方法
EP2438545A2 (en) Improvements in embedded system development
CN104375941B (zh) 可执行程序测试用例集二进制代码覆盖率自动化评估方法
US20180357201A1 (en) Ability-providing-data generation apparatus
JP6342129B2 (ja) 混合モードプログラムのソースコードエラー位置検出装置及び方法
EP3179371A1 (en) Method and device for non-intrusively collecting function trace data
JP6528465B2 (ja) ソフトウェアテストのためのシンボリック実行における状態パラメータ化
Sato et al. On-the-fly detection of precise loop nests across procedures on a dynamic binary translation system
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
Stattelmann et al. Dominator homomorphism based code matching for source-level simulation of embedded software
Yang et al. EdSynth: Synthesizing API sequences with conditionals and loops
US7409677B1 (en) Method and system for creation and use of embedded trace description
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
US8683494B1 (en) Constructing event sequences in event-driven programs
US10528691B1 (en) Method and system for automated selection of a subset of plurality of validation tests
CN109783837A (zh) 仿真设备、仿真***、仿真方法和仿真程序
CN111382065B (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
GR01 Patent grant
GR01 Patent grant