CN116737533A - 用于测试计算机程序的方法 - Google Patents
用于测试计算机程序的方法 Download PDFInfo
- Publication number
- CN116737533A CN116737533A CN202310217309.5A CN202310217309A CN116737533A CN 116737533 A CN116737533 A CN 116737533A CN 202310217309 A CN202310217309 A CN 202310217309A CN 116737533 A CN116737533 A CN 116737533A
- Authority
- CN
- China
- Prior art keywords
- computer program
- input
- test
- program
- data
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 94
- 238000004590 computer program Methods 0.000 title claims abstract description 69
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000015654 memory Effects 0.000 claims abstract description 22
- 238000012544 monitoring process Methods 0.000 claims abstract description 7
- 238000012545 processing Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 11
- 239000000872 buffer Substances 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 239000000523 sample Substances 0.000 description 4
- 238000010998 test method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 206010000210 abortion Diseases 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 238000013522 software testing Methods 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000003936 working memory 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/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- 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
-
- 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/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
用于测试计算机程序的方法。根据各种实施方式描述一种用于测试计算机程序的方法,所述方法包括将用于所述计算机程序的输入数据发送给存储器,所述计算机程序访问所述存储器;在存储有所述输入数据的存储器中的存储区域中的位置处设置数据观察点;执行计算机程序并且在此监控所述计算机程序的输入解析器的哪些部分访问所述存储区域的位置;从监控的结果中确定所述计算机程序的输入语法;并且在使用所确定的输入语法的情况下测试所述计算机程序。
Description
技术领域
本公开涉及用于测试计算机程序的方法。
背景技术
软件应用程序的开发的重要组成部分是测试。尤其是,应该识别并且校正导致应用程序失灵的差错。用于软件的测试的示例是动态软件测试方法模糊测试(Fuzzing)。在基于生成器的模糊测试的情况下,在此在使用基础知识、尤其是待测试的软件的输入语法的情况下使用用于待测试的软件的测试输入。
然而,例如因为对于所述输入语法本身不确定所述输入语法是否如设置的那样(无差错)地已经被实现,所述输入语法未精确地被详细说明,或者软件应用程序的源代码不存在(例如因为该软件是由另一制造商供应的),所以在特定的应用程序情况下,输入语法不存在。
Rahul Gopinath、Mathis和Andreas Zeller的出版物“Mining inputgrammars from dynamic control flow”,in Proceedings of the 28th ACM JointMeeting on European Software Engineering Conference and Symposium on theFoundations of Software Engineering,Seiten 172-183,2020(以下称为参考文献1)描述一种用于从程序的动态控制流中确定程序的输入语法的方法。在那里表明,观察哪些指令访问程序的输入缓冲区足以推导出程序的输入语法,并且对于所述观察使用静态探测。然而,在特定的应用程序情况下,诸如为了测试用于嵌入式系统的软件,静态探测的应用是不可能的或实在不大可能。
因此对于基于生成器的模糊测试的应用以及输入语法已正确地被实现的验证,值得期望的是以下方式,即所述方式使得能够高效地确定程序的输入语法,尤其是在困难的情况下进行,诸如对于用于嵌入式系统的软件而言,所述软件必须在与嵌入式系统本身不同的系统上被测试,例如因为在嵌入式系统上资源是有限的。
发明内容
根据各种实施方式,提供一种用于测试计算机程序的方法,所述方法包括将用于所述计算机程序的输入数据发送给存储器,所述计算机程序访问所述存储器;在存储有所述输入数据的存储器中的存储区域中的位置处设置数据观察点;执行计算机程序并且在此监控所述计算机程序的输入解析器的哪些部分访问所述存储区域的位置;从监控的结果中确定所述计算机程序的输入语法;并且在使用所确定的输入语法的情况下测试所述计算机程序。
上面描述的方法在具有受限制的访问和透明度的系统、诸如嵌入式系统上确定输入语法,并且从而在使用输入语法的情况下测试用于这样的系统的计算机程序。例如,可以在使用输入语法的情况下借助于基于生成器的模糊测试来测试程序。
下面说明各种实施例。
实施例1是如上面描述的用于测试计算机程序的方法。
实施例2是根据实施例1所述的方法,其中所述计算机程序是用于嵌入式系统的计算机程序并且所述计算机程序在所述嵌入式系统上被执行。
由此实现,计算机程序的执行在真实环境中进行,并且计算机程序遵循如实际上出现的流程。
实施例3是根据实施例1或2所述的方法,所述方法包括发送不同的输入数据组,在所述存储区域中的位置的不同组合处设置数据观察点,以及针对不同的输入数据组和存储区域位置的组合执行所述计算机程序,以及在此分别监控所述计算机程序的输入解析器的哪些部分访问所述存储区域的位置,其中从针对不同的输入数据组和存储区域位置的组合的监控的结果中来确定所述计算机程序的输入语法。
通过不同的输入数据组可以实现:输入解析器的分支的全部或至少一个大的部分被采集。数据观察点的不同组合使得即使由于其上执行计算机程序的系统(例如嵌入式系统)的限制,可以设置的数据观察点的数量有限,也能够完全覆盖输入数据。
实施例4是根据实施例1至3中任一项所述的方法,所述方法包括在使用所确定的输入语法的情况下借助于基于生成器的模糊测试来测试所述计算机程序。
尤其是,如果输入语法可供使用,则模糊测试允许对用于嵌入式系统的软件进行可靠的测试,这又通过上面描述的方法来实现。
实施例5是根据实施例1至4中任一项所述的方法,所述方法包括通过将所确定的输入语法与用于所述计算机程序的参考输入语法进行比较来测试所述计算机程序。
参考输入语法可以例如是计算机程序的期望的或指定的输入语法。从而可以验证计算机程序正确地(如所设置的那样)处理输入数据。
实施例6是根据实施例1至5中任一项的方法,所述计算机程序是用于机器人装置的控制程序,并且根据用所述计算机程序的测试的结果利用所述计算机程序来控制所述机器人装置。
换句话说,可以提供一种用于控制机器人装置的方法,其中借助于确定并且使用控制程序的输入语法来检验:控制程序是否正确地采集输入数据(例如各种类型的传感器数据,诸如图像数据、物理参量的测量数据),也即例如正确地采集值和数据类型,诸如正确地将多个字节组合成值。
实施例7是一种测试系统,所述测试系统被设立用于实施根据实施例1至6中任一项所述的方法。
实施例8是一种计算机程序,所述计算机程序具有指令,当通过处理器执行所述指令时,所述指令引起所述处理器实施根据实施例1至6中任一项所述的方法。
实施例9是一种存储指令的计算机可读介质,当通过处理器执行所述指令时,所述指令引起所述处理器实施根据实施例1至6中任一项所述的方法。
附图说明
在附图中,相似的附图标记在完全不同的视图中通常涉及相同的部分。附图不一定是按比例绘制的,其中替代地通常将重点放在描绘本发明的原理上。在以下描述中,参考以下附图描述不同的方面。
图1示出用于开发和/或测试软件应用程序的计算机。
图2示出用于确定计算机程序的输入语法的基于调试器的方法的数据流程图。
图3示出表示根据一种实施方式的用于测试计算机程序的方法的流程图。
具体实施方式
以下详尽描述涉及所附附图,所述附图为了阐述示出本公开的特别细节和方面,其中可以执行本发明。可以使用其他方面,并且可以实施结构上、逻辑上和电气的改变,而不偏离本发明的保护范围。因为可以将本公开的一些方面与本公开的一个或多个其他方面组合,以便构成新的方面,所以本公开的各种方面不一定相互排斥。
下面更详细地描述各种示例。
图1示出用于开发和/或测试软件应用程序的计算机100。
计算机100具有CPU(中央处理单元)101和工作存储器(RAM)102。工作存储器102被使用来例如从硬盘103加载程序代码,并且CPU 101执行程序代码。
在本示例中,假定用户打算利用计算机100来开发和/或测试软件应用程序。
为此,用户在CPU 101上执行软件开发环境104。
软件开发环境104使用户能够为各种设备106、即目标硬件、诸如用于控制包括机械臂和自主车辆在内的机器人装置的嵌入式系统或者也为移动(通信)设备开发和测试应用程序105。为此,CPU 101可以执行仿真器作为软件开发环境104的一部分,以便模拟相应的设备106的行为,为所述设备开发或者已经开发了应用程序。如果所述软件开发环境仅被用于测试来自其他源的软件,则软件开发环境104也可以被视为或设计为软件测试环境。
用户可以经由通信网络107将完成的应用程序分发给对应的设备106。代替经由通信网络107,这也可以以不同的方式进行,例如借助于USB棒进行。
然而,在这发生之前,用户应该测试应用程序105,以便避免将不按规定地起作用的应用程序分发给设备106。即使用户没有自己在计算机100上写入应用程序105,情况也可能如此。尤其是可能出现以下情况,即用户不拥有应用程序的源代码,而是仅拥有其可执行代码(也即二进制程序)
测试方法是所谓的模糊测试。模糊测试或Fuzz-Testing是自动化软件测试技术,其中将无效的、未预期的或随机的数据作为输入输送给待测试的计算机程序。然后根据例外、诸如异常中止、缺少的失败的集成式代码断言或潜在的内存泄漏来监控程序。
模糊器(即使用模糊测试的测试程序)典型地被使用来测试程序,所述程序处理结构化的输入。该结构例如以文件格式或文件格式或协议被指定并且在有效和无效输入之间区分。有效的模糊器产生半有效输入,所述半有效输入是“足够有效的”,以便不被待测试的程序的输入解析器直接拒绝,但是是“足够无效的”,以便揭示在待测试的程序中未正确地被对待的极限情况和非预期的行为方式。
以下描述结合模糊测试所使用的术语:
·模糊测试或Fuzz-Testing是自动化测试过程,以便将随机生成的输入发送给目标程序(待测试的程序)并且观察其反应。
·模糊器或模糊测试引擎是自动生成输入的程序。因此,所述模糊测试引擎不与待测试的软件关联,并且也不实施探测。然而,所述模糊器具有探测代码、产生测试用例和执行待测试的程序的能力。已知的示例是afl和libfuzzer。
·模糊目标是软件程序或应该通过模糊测试被测试的功能。模糊目标的主要特征应该是所述模糊目标接受在模糊测试过程期间由模糊器产生的潜在不可信输入。
·模糊测试是模糊器和模糊目标的组合式版本。于是,模糊目标可以是所探测的代码,其中模糊器与其输入关联(即提供所述输入)。模糊测试是可执行的。模糊器还可以启动、观察和停止多个模糊测试(通常每秒数百或数千个),每个具有由模糊器产生的稍微不同的输入。
·测试用例是来自模糊测试的特定输入和特定测试过程。通常,存储对可再现性感兴趣的进程(发现新的代码路径或异常终止)。以这种方式,具有对应的输入的特定测试用例也可以在不与模糊器连接的模糊目标、例如程序的发布版本上被执行。
·覆盖引导的模糊测试(英语:coverage-guided fuzzing)在模糊测试期间使用代码覆盖信息作为反馈,以便识别输入是否已经引起新的代码路径或块的执行。
·基于生成器的模糊测试(英语:generation-based fuzzing)使用关于目标程序(模糊目标)的先前知识,以便创建测试输入。用于这样的基础知识的示例是与模糊目标的输入规范相对应的语法,即模糊目标(即待测试的程序)的输入语法。
·静态探测是将指令插入到(待测试的)程序中以便获得关于执行的反馈。所述静态探测大多数通过编译器被实现,并且例如可以说明在执行期间到达的代码块。
·动态探测是在运行时期间控制(待测试的)程序的执行,以便从执行中生成反馈。所述动态探测大多数通过操作系统系统功能性或通过使用仿真器来实现。
·调试器是一种装置或程序,所述程序可以控制目标设备或目标程序,并且可以提供功能,例如用于调用寄存器或存储器值以及用于暂停和以单步骤执行目标程序。
·断点通过调试器被放置到目标程序或设备的指令上,以便在到达时停止执行并且将此通知给控制过程。
·数据观察点通过调试器被放置到目标程序或目标设备的存储器地址上,以便在访问存储器地址时使执行停住并且将此通知给控制过程,其方式是触发中断。
当调试器连接到嵌入式设备上时,指令断点可以被使用来在期望的代码位置处使执行停住,并且数据观察点可以被使用来在访问特定的内存位置时使执行停住。然而,断点和观察点的数量典型地是有限的,并且取决于所使用的系统,例如对于典型微控制器而言最大数量是四个断点和两个数据观察点。
用于嵌入式系统的覆盖引导模糊测试可以在仿真器中被实施。在此,充分利用仿真器的透明度来获得关于执行的所需要的认识。然而,为特定目标系统设立仿真器可能需要巨大的耗费。这原因在于,用于嵌入式系统的软件通常依赖于如传感器和执行器之类的外部组件的可用性。如果在仿真器中缺少这些组件,则软件在其执行时非常可能经过与在存在组件时不同的路径,并且因此不能将其在测试中的执行与真实执行进行比较。
出于这些原因难以从嵌入式设备获得关于软件执行的反馈以便能够实现可靠的覆盖引导的模糊测试。
基于生成器的模糊测试不具有立即反馈的要求,而是使用已知生成器满足目标输入规范的生成器。例如,无上下文的语法可以被使用来生成输入数据。然而,成功的模糊测试需要满足目标的输入规范(即符合所述输入规范)的语法。手动创建这样的语法可能是乏味的且易于出错的。
利用来自参考文献1的方法从程序中推导语法需要待测试的程序的输入解析器的控制流图以及关于哪一程序部分最后访问了输入缓冲区的哪一部分的信息。在参考文献1中使用静态探测,以便跟踪访问输入缓冲区的指令。然而,如果待测试的程序是用于嵌入式系统的程序,则静态探测出于以下原因比较难以实现:
·通常,模糊器在与待测试的软件不同的计算机上运行,诸如在计算机100上运行,而嵌入式系统对应于设备106之一(或嵌入到其中)。因此,数据必须在每个测试周期后在该计算机和嵌入式系统之间被传输。
·待测试的软件可能包含来自第三方供应商的库和来自其他制造商或开发商的软件组件。如果这些组件作为二进制文件被供应,则可以将所述组件视为闭源,而不存在改变其源代码的简单可能性。因此,不能通过编译器探测闭源组件。
·静态探测增加代码大小,这在受限的嵌入式系统上是关键的,即可能不存在足够的内存用于探测。
因此,根据各种实施方式,提供一种方式,其中可以在不访问源代码的情况下确定(尤其是用于嵌入式系统的)程序的输入语法,其方式是使用数据观察点,以便确定出输入解析器的哪些部分最后访问了输入数据的特定部分。(这也可以被视为动态污点分析。)根据各种实施方式,这借助于调试器进行。
图2示出用于确定(或“挖掘”)(二进制)程序201的输入语法的基于调试器的方法的数据流程图200。
宽箭头象征性表示用户数据(即尤其是待处理的测试数据和处理结果)的传输或交换,并且细箭头象征性表示方法的控制流。在实施测试(并且对应于例如计算机101)的系统202和目标系统(目标硬件)203(例如嵌入式系统,例如目标设备106)之间的交互经由调试连接进行,所述调试连接例如由专用调试器硬件装置204提供。测试输入数据以输入向量的形式例如经由WiFi或CAN总线(取决于目标设备106的类型)被传输给目标系统203。
程序201既被存储在系统202中,也被存储在目标系统201中(以便程序201可以执行目标系统201中的程序)。系统通过调试连接控制目标系统201中程序的执行,即开始执行和在中断(尤其是通过数据观察点已经触发的中断)之后恢复执行。
如果建立至目标硬件的调试连接,则在205中(测试)系统202首先获得二进制程序201的输入解析器的控制流图和进入输入解析器的入口点。这可以半自动地进行,例如借助于如Ghidra之类的逆向工程软件。
在206中,系统202确定输入数据在目标系统203的存储器中的位置(即输入缓冲区的位置)。为此,系统202启动目标系统203上的程序201,将输入数据发送给目标系统203,在程序201的输入解析器的入口点处暂停程序201,并且在目标系统的存储器211中搜索所发送的输入数据。
现在系统202实施迭代过程,其中系统202确保执行是确定性的,即输入缓冲器在每次迭代(即每个测试周期)中均处于目标系统203的存储器211中的相同位置。
在每次迭代中,系统202在207中设置数据观察点,以便观察通过程序201对输入缓冲区的访问。如果不能通过多个可用观察点覆盖输入缓冲区,则系统202实施多次迭代,其中它移动观察点的位置,但是使测试输入数据相同。
在208中,系统202将测试输入数据(也即如目标系统203预期的大小的测试输入数据组或向量)发送给目标系统203。这可以在首要迭代中取消,因为在206中为了找到输入缓冲区的位置所发送的输入数据可以在那里被使用并且在如上所述仅观察点被移动,但是测试输入数据保持不变(除了程序或目标系统203需要重新发送测试输入数据之外)的迭代中取消。
系统202对于多个不同的测试输入数据组实施迭代,例如利用在使用不同的种子随机地产生的测试输入数据组。
在每次迭代中,系统202在目标系统203上执行程序,并且在209中在通过数据观察点触发的每个中断处记录已经触发中断的程序201的命令的命令地址。尤其是,从而对于测试输入数据的每个部分,系统202知道程序201的输入解析器的哪个函数最后访问了测试输入数据的该部分。
当程序201已经执行了测试输入数据组时,迭代结束。
如果已实施了所有迭代(即所有测试输入数据组已完全用数据观察点覆盖),则系统202在210中在使用迭代的结果的情况下提取程序201的输入解析器的解析器树,并且从中确定程序201的输入语法。
为此,系统202可以首先对于每个测试输入数据组(从针对该测试输入数据组已经执行的迭代的结果中)确定解析器树,并且然后联合(用于多个测试输入数据组的)这些解析器树并且概括和简化输入语法。
例如,解析器树的确定和输入语法的确定可以类似于参考文献1地进行。尤其是,在此系统202可以从关于程序201的输入解析器的哪个函数最后访问了测试输入数据的特定部分的知识中推断出输入解析器已经将测试输入数据的该部分识别为什么。这原因在于,如果测试输入数据的该部分对此已经执行了将该部分已经识别为特定类型的函数,则输入解析器典型地不继续考虑测试输入数据的该部分。因此从关于输入解析器的哪一部分(例如哪个函数,例如划分为由所确定的控制流图给出的功能的层次级别)最后访问了输入数据的一部分的信息中可以得出结论:输入解析器已经将输入数据的该部分识别为什么,并且从而以相应的解析器树的形式表示整个测试输入数据组。
为了完全采集输入语法,系统202使用测试输入数据组的集合,所述集合(尽可能地)覆盖输入解析器的所有分支,因为在任何一个测试输入数据组中均不被到达的输入解析器的分支不反映在所确定的输入语法中。
系统202可以例如对于以下测试任务使用用于程序201的所确定的输入语法:
·标识在(如所实施的)程序与其规范之间的差异
·实施基于生成器的模糊测试。
·发现在程序的不同实现或版本(例如更新)之间的差异概括地说,根据各种实施方式,提供一种如图3中所示的方法。
图3示出表示根据一种实施方式的用于测试计算机程序的方法的流程图。
在301中,将用于计算机程序的输入数据发送给计算机程序访问的存储器(即例如系统的工作存储器,计算机程序在所述系统上被执行)。
在302中,在存储有输入数据的存储器中的存储区域中的位置处设置数据观察点。
在303中,计算机程序被执行并且在此监控计算机程序的输入解析器的哪些部分访问存储区域的位置。
在304中,从监控的结果中确定计算机程序的输入语法。
在305中,在使用所确定的输入语法的情况下测试计算机程序。
可以通过具有一个或多个数据处理单元的一个或多个计算机实施图3的方法。术语“数据处理单元”可以被理解为使得能够处理数据或信号的任何类型的实体。例如,数据或信号可以根据通过数据处理单元实施的至少一种(即一种或多于一种)特定功能被处理。数据处理单元可以包括模拟电路、数字电路、逻辑电路、微处理器、微控制器、中央单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)、可编程门阵列(FPGA)的集成电路或者其任何组合或由其构造。用于实现在这里更详细描述的相应的功能的任何其他方式也可以被理解为数据处理单元或逻辑电路装置。在这里详细描述的方法步骤中的一个或多个方法步骤可以通过数据处理单元通过一个或多个特定功能被执行(例如被实现),所述特定功能通过所述数据处理单元来实施。
例如,图3的方式被应用于用于测试例如用于机器人装置的控制软件的程序。术语“机器人装置”可以被理解为与任何技术系统有关,诸如计算机控制的机器、车辆、家用电器、电动工具、制造机器、个人助理或访问控制系统。也可以对于数据处理系统、诸如导航设备使用控制软件。
尽管在这里已经示出和描述了特定实施方式,但是由本领域技术人员认识到的是,所示出和描述的特定实施方式可以用各种各样的替代和/或等效实现方案替换,而不偏离本发明的保护范围。本申请应该涵盖在这里所讨论的特定实施方式的任何适配或变体。因此旨在仅由权利要求及其等效方案来限制本发明。
Claims (9)
1.一种用于测试计算机程序的方法,所述方法包括:
将用于所述计算机程序的输入数据发送给存储器,所述计算机程序访问所述存储器;
在存储有所述输入数据的存储器中的存储区域中的位置处设置数据观察点;
执行计算机程序并且在此监控所述计算机程序的输入解析器的哪些部分访问所述存储区域的位置;
从监控的结果中确定所述计算机程序的输入语法;并且
在使用所确定的输入语法的情况下测试所述计算机程序。
2.根据权利要求1所述的方法,其中所述计算机程序是用于嵌入式系统的计算机程序并且所述计算机程序在所述嵌入式系统上被执行。
3.根据权利要求1或2所述的方法,所述方法包括发送不同的输入数据组,在所述存储区域中的位置的不同组合处设置数据观察点,以及针对不同的输入数据组和存储区域位置的组合执行所述计算机程序,以及在此分别监控所述计算机程序的输入解析器的哪些部分访问所述存储区域的位置,其中从针对不同的输入数据组和存储区域位置的组合的监控的结果中来确定所述计算机程序的输入语法。
4.根据权利要求1至3中任一项所述的方法,所述方法包括在使用所确定的输入语法的情况下借助于基于生成器的模糊测试来测试所述计算机程序。
5.根据权利要求1至4中任一项所述的方法,所述方法包括通过将所确定的输入语法与用于所述计算机程序的参考输入语法进行比较来测试所述计算机程序。
6.根据权利要求1至5中任一项所述的方法,其中所述计算机程序是用于机器人装置的控制程序,并且根据所述计算机程序的测试的结果利用所述计算机程序来控制所述机器人装置。
7.一种测试系统,所述测试系统被设立用于实施根据权利要求1至6中任一项所述的方法。
8.一种计算机程序,所述计算机程序具有指令,当通过处理器执行所述指令时,所述指令引起所述处理器实施根据权利要求1至6中任一项所述的方法。
9.一种存储指令的计算机可读介质,当通过处理器执行所述指令时,所述指令引起所述处理器实施根据权利要求1至6中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102022202338.2A DE102022202338A1 (de) | 2022-03-09 | 2022-03-09 | Verfahren zum Testen eines Computerprogramms |
DE102022202338.2 | 2022-03-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116737533A true CN116737533A (zh) | 2023-09-12 |
Family
ID=87759980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310217309.5A Pending CN116737533A (zh) | 2022-03-09 | 2023-03-08 | 用于测试计算机程序的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116737533A (zh) |
DE (1) | DE102022202338A1 (zh) |
-
2022
- 2022-03-09 DE DE102022202338.2A patent/DE102022202338A1/de active Pending
-
2023
- 2023-03-08 CN CN202310217309.5A patent/CN116737533A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102022202338A1 (de) | 2023-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Carreira et al. | Xception: Software fault injection and monitoring in processor functional units | |
US5630049A (en) | Method and apparatus for testing software on a computer network | |
US8930912B2 (en) | Method and system for performing software verification | |
US6634020B1 (en) | Uninitialized memory watch | |
CN111026601A (zh) | Java应用系统的监控方法、装置、电子设备及存储介质 | |
US20110191752A1 (en) | Method and System for Debugging of Software on Target Devices | |
US20050268195A1 (en) | Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems | |
US20050223362A1 (en) | Methods and systems for performing unit testing across multiple virtual machines | |
US5361352A (en) | Method for debugging in a parallel computer system and system for the same | |
US6493834B1 (en) | Apparatus and method for dynamically defining exception handlers in a debugger | |
US7546585B2 (en) | Method, system and computer program product for testing computer programs | |
US6925405B2 (en) | Adaptive test program generation | |
US20080127119A1 (en) | Method and system for dynamic debugging of software | |
IE56792B1 (en) | Method and apparatus for self-testing of floating point accelerator processors | |
JP4959941B2 (ja) | ソフトウェアの双方向プロービング | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
Cong et al. | Automatic concolic test generation with virtual prototypes for post-silicon validation | |
US20090100413A1 (en) | Stack Walking Enhancements Using Sensorpoints | |
US11599342B2 (en) | Pathname independent probing of binaries | |
Eisele et al. | Fuzzing Embedded Systems Using Debug Interfaces | |
Kranzlmüller et al. | NOPE: A nondeterministic program evaluator | |
CN116737533A (zh) | 用于测试计算机程序的方法 | |
KR101685299B1 (ko) | 비결정적인 이벤트 처리가 가능한 프로그램의 자동 테스트 방법 및 자동 테스트 장치 | |
Artho et al. | Enforcer–efficient failure injection | |
Zhou et al. | Save the Bruised Striver: A Reliable Live Patching Framework for Protecting Real-World PLCs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |