本公開涉及用于測(cè)試計(jì)算機(jī)程序的方法。
背景技術(shù):
1、開發(fā)軟件應(yīng)用程序的重要組成部分是測(cè)試以及在找到錯(cuò)誤時(shí)進(jìn)行對(duì)應(yīng)的錯(cuò)誤清除。尤其是,應(yīng)該識(shí)別并且校正導(dǎo)致應(yīng)用程序失敗的錯(cuò)誤。在此,一個(gè)重要的方面是如通過所謂的(存儲(chǔ)器)sanitizer進(jìn)行的針對(duì)未定義行為的測(cè)試。借助于各種sanitizer在例如x86的常見的臺(tái)式硬件和服務(wù)器硬件上編譯和測(cè)試軟件是可以發(fā)現(xiàn)以前長(zhǎng)時(shí)間保持未被發(fā)現(xiàn)的諸如心臟出血漏洞(heartbleed-bug)之類錯(cuò)誤的措施。
2、綜合測(cè)試特別是對(duì)于通常是安全性相關(guān)的嵌入式系統(tǒng)(諸如用于車輛的控制裝置)上的計(jì)算機(jī)程序而言是特別重要的。然而,因?yàn)榍度胧较到y(tǒng)典型地?fù)碛惺芟拗频馁Y源,并且這樣的sanitizer具有巨大的資源需求且因此不能被使用或者甚至可能影響計(jì)算機(jī)程序的執(zhí)行,使得最初就發(fā)生錯(cuò)誤或錯(cuò)誤保持未被發(fā)現(xiàn),所以對(duì)于這樣的系統(tǒng)不能使用或僅能很差地使用用于臺(tái)式硬件和服務(wù)器硬件的sanitizer。
技術(shù)實(shí)現(xiàn)思路
1、因此,所期望的是下述用于測(cè)試計(jì)算機(jī)程序的方法:這些方法允許針對(duì)未定義行為進(jìn)行測(cè)試并適用于嵌入式系統(tǒng)。
2、根據(jù)各種實(shí)施方式,提供了一種用于(自動(dòng))測(cè)試計(jì)算機(jī)程序的方法,包括:在計(jì)算機(jī)程序中將一個(gè)或多個(gè)斷點(diǎn)設(shè)置到一個(gè)或多個(gè)算術(shù)或位移操作上;執(zhí)行計(jì)算機(jī)程序;當(dāng)觸發(fā)所設(shè)置的斷點(diǎn)之一時(shí),確定是否通過執(zhí)行相應(yīng)的算術(shù)或位移操作設(shè)置了溢出標(biāo)志;以及響應(yīng)于已確定通過相應(yīng)的算術(shù)或位移操作設(shè)置了溢出標(biāo)志,觸發(fā)顯示:計(jì)算機(jī)程序具有錯(cuò)誤。
3、這可以針對(duì)計(jì)算機(jī)程序中出現(xiàn)的每個(gè)或至少多個(gè)算術(shù)或位移操作來進(jìn)行(例如,根據(jù)有多少斷點(diǎn)可供使用)。
4、上述方法允許借助于調(diào)試器在嵌入式系統(tǒng)上利用對(duì)算術(shù)或位移操作的溢出檢測(cè)來進(jìn)行測(cè)試。這在利用模糊測(cè)試進(jìn)行測(cè)試時(shí)特別適宜,因?yàn)槟:郎y(cè)試也能夠以調(diào)試器控制的方式來實(shí)現(xiàn),并且可通過這種方式有效地用于嵌入式系統(tǒng)。
5、sanitizer可以借助于代碼插樁(code-instrumentierung)來實(shí)現(xiàn)。但是為此要么源代碼必須可供使用,要么需要基于二進(jìn)制文件進(jìn)行特定于指令集的插樁(二進(jìn)制插樁),所述特定于指令集的插樁是非常易受影響的。替代的基于仿真器的插樁同樣是非常特定于平臺(tái)的,并且每個(gè)嵌入式平臺(tái)都需要自身的仿真器。上述方法使得能夠利用調(diào)試器控制的sanitizer進(jìn)行測(cè)試,并且不需要插樁或仿真,因此可在許多情況下應(yīng)用。
6、下面說明了各種實(shí)施例。
7、實(shí)施例1是上述用于測(cè)試計(jì)算機(jī)程序的方法。
8、實(shí)施例2是根據(jù)實(shí)施例1所述的方法,其中確定是否通過執(zhí)行相應(yīng)的算術(shù)或位移操作設(shè)置了溢出標(biāo)志包括:在個(gè)體步驟中遍歷實(shí)現(xiàn)算術(shù)或位移操作的(匯編程序)指令。
9、換句話說,“逐步進(jìn)行”實(shí)現(xiàn)算術(shù)或位移操作的各子操作,直到可能導(dǎo)致設(shè)置溢出標(biāo)志的子操作已執(zhí)行為止。
10、實(shí)施例3是根據(jù)實(shí)施例1或2所述的方法,包括:響應(yīng)于已確定通過相應(yīng)的算術(shù)或位移操作設(shè)置了溢出標(biāo)志,通過觸發(fā)計(jì)算機(jī)程序的中止(即,崩潰)來觸發(fā)顯示:計(jì)算機(jī)程序具有錯(cuò)誤。
11、因此,例如在模糊測(cè)試的范圍中,可以將計(jì)算機(jī)程序標(biāo)記為有錯(cuò)誤的,因?yàn)樵撚?jì)算機(jī)程序的執(zhí)行引起計(jì)算機(jī)程序的中止(即崩潰),緊接著模糊器顯示錯(cuò)誤。例如,還可以在stderr流上輸出警告,或在主機(jī)側(cè)(即在借助于調(diào)試器在執(zhí)行系統(tǒng)上測(cè)試計(jì)算機(jī)程序的測(cè)試系統(tǒng)上)監(jiān)視調(diào)試器。
12、實(shí)施例4是根據(jù)實(shí)施例1至3中任一實(shí)施例所述的方法,包括:執(zhí)行多個(gè)測(cè)試遍歷(例如,模糊測(cè)試-測(cè)試遍歷,即模糊測(cè)試迭代),并將斷點(diǎn)設(shè)置到對(duì)于不同的測(cè)試遍歷不同的算術(shù)或位移操作上。
13、由此,可以覆蓋大量算術(shù)操作和/或位移操作。
14、實(shí)施例5是根據(jù)實(shí)施例1至4中任一實(shí)施例所述的方法,包括:在嵌入式系統(tǒng)(106)上執(zhí)行計(jì)算機(jī)程序(105),并通過與嵌入式系統(tǒng)(106)(經(jīng)由調(diào)試接口)連接的測(cè)試系統(tǒng)(100)執(zhí)行下述步驟:設(shè)置斷點(diǎn),確定是否設(shè)置了溢出標(biāo)志以及在必要時(shí)觸發(fā)所述顯示:計(jì)算機(jī)程序具有錯(cuò)誤。
15、根據(jù)各種實(shí)施方式,尤其允許在嵌入式系統(tǒng)本身上對(duì)用于該嵌入式系統(tǒng)的計(jì)算機(jī)程序進(jìn)行測(cè)試,包括存儲(chǔ)器監(jiān)視在內(nèi)。
16、實(shí)施例6是根據(jù)實(shí)施例1至5中任一實(shí)施例所述的方法,其中計(jì)算機(jī)程序(105)是用于機(jī)器人裝置的控制程序,并且根據(jù)計(jì)算機(jī)程序(105)的測(cè)試的結(jié)果利用計(jì)算機(jī)程序(105)來控制機(jī)器人裝置。
17、實(shí)施例7是一種測(cè)試裝置,其被設(shè)計(jì)成執(zhí)行根據(jù)實(shí)施例1至6中任一實(shí)施例所述的方法。
18、實(shí)施例8是一種具有指令的計(jì)算機(jī)程序,這些指令在由處理器執(zhí)行時(shí),使該處理器執(zhí)行根據(jù)實(shí)施例1至6中任一實(shí)施例所述的方法。
19、實(shí)施例9是一種存儲(chǔ)有指令的計(jì)算機(jī)可讀介質(zhì),這些指令在由處理器執(zhí)行時(shí),使該處理器執(zhí)行根據(jù)實(shí)施例1至6中任一實(shí)施例所述的方法。
1.一種用于測(cè)試計(jì)算機(jī)程序(105)的方法,包括:
2.根據(jù)權(quán)利要求1所述的方法,其中確定是否通過執(zhí)行相應(yīng)的算術(shù)或位移操作設(shè)置了溢出標(biāo)志包括:在個(gè)體步驟中遍歷實(shí)現(xiàn)所述算術(shù)或位移操作的指令。
3.根據(jù)權(quán)利要求1或2所述的方法,包括:響應(yīng)于已確定通過所述相應(yīng)的算術(shù)或位移操作設(shè)置了溢出標(biāo)志,通過觸發(fā)所述計(jì)算機(jī)程序(105)的中止來觸發(fā)所述顯示:所述計(jì)算機(jī)程序(105)具有錯(cuò)誤。
4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的方法,包括:執(zhí)行多個(gè)測(cè)試遍歷,并將斷點(diǎn)設(shè)置到對(duì)于不同的測(cè)試遍歷不同的算術(shù)或位移操作上。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,包括:在嵌入式系統(tǒng)(106)上執(zhí)行所述計(jì)算機(jī)程序(105),并通過與所述嵌入式系統(tǒng)(106)連接的測(cè)試系統(tǒng)(100)執(zhí)行下述步驟:設(shè)置斷點(diǎn)、確定是否設(shè)置了溢出標(biāo)志以及在必要時(shí)觸發(fā)顯示:所述計(jì)算機(jī)程序具有錯(cuò)誤。
6.根據(jù)權(quán)利要求1至5中任一項(xiàng)所述的方法,其中所述計(jì)算機(jī)程序(105)是用于機(jī)器人裝置的控制程序,并且根據(jù)所述計(jì)算機(jī)程序(105)的測(cè)試的結(jié)果利用所述計(jì)算機(jī)程序(105)來控制所述機(jī)器人裝置。
7.一種測(cè)試裝置,被設(shè)計(jì)成執(zhí)行根據(jù)權(quán)利要求1至6中任一項(xiàng)所述的方法。
8.一種具有指令的計(jì)算機(jī)程序,所述指令在由處理器執(zhí)行時(shí),使所述處理器執(zhí)行根據(jù)權(quán)利要求1至6中任一項(xiàng)所述的方法。
9.一種存儲(chǔ)有指令的計(jì)算機(jī)可讀介質(zhì),所述指令在由處理器執(zhí)行時(shí),使所述處理器執(zhí)行根據(jù)權(quán)利要求1至6中任一項(xiàng)所述的方法。