本公開涉及用于測試計算機程序的方法。
背景技術:
1、開發(fā)軟件應用程序的重要組成部分是測試以及在找到錯誤時進行對應的錯誤清除。尤其是,應該識別并且校正導致應用程序失敗的錯誤。在此,一個重要的方面是鑒于以下方面的測試,即并非無意地(或由攻擊者)訪問重要的存儲區(qū)域,即利用如通過所謂的(存儲器)sanitizer進行的存儲器監(jiān)視的測試。借助于各種sanitizer在例如x86的常見的臺式硬件和服務器硬件上編譯和測試軟件是可以發(fā)現(xiàn)以前長時間保持未被發(fā)現(xiàn)的諸如心臟出血漏洞(heartbleed-bug)之類錯誤的措施。
2、也一起包括這樣的存儲器監(jiān)視的綜合測試對于通常是安全性相關的嵌入式系統(tǒng)(諸如用于車輛的控制裝置)上的計算機程序而言是特別重要的。然而,因為嵌入式系統(tǒng)典型地擁有受限制的資源,并且這樣的sanitizer具有巨大的資源需求且因此不能被使用或者甚至可能影響計算機程序的執(zhí)行,使得最初就發(fā)生錯誤或錯誤保持未被發(fā)現(xiàn),所以對于這樣的系統(tǒng)不能使用或僅能很差地使用用于臺式硬件和服務器硬件的sanitizer。
技術實現(xiàn)思路
1、因此,所期望的是下述用于測試計算機程序的方法:這些方法允許進行存儲器監(jiān)視并適用于嵌入式系統(tǒng)。
2、根據(jù)各種實施方式,提供了一種用于(自動)測試計算機程序的方法,包括:在計算機程序中將一個或多個斷點設置到一個或多個存儲器釋放指令上;執(zhí)行計算機程序;并且當觸發(fā)所設置的斷點之一時,將存儲器釋放指令所獲得的作為待釋放存儲區(qū)域的說明的指針設置為隨后在計算機程序中使用該指針時會觸發(fā)異常的值(例如空值(null))。
3、這可以針對計算機程序中出現(xiàn)的每個或至少多個存儲器釋放指令來進行(例如,根據(jù)有多少斷點可供使用)。
4、上述方法使得可以利用借助于調試器在嵌入式系統(tǒng)上對懸掛指針的檢測來進行測試。因為模糊測試也可以以調試器控制的方式實現(xiàn),并且以這種方式可以有效地用于嵌入式系統(tǒng),所以這在利用模糊測試進行測試時特別適用。
5、通過觸發(fā)異常,例如在模糊測試的范圍中,計算機程序可以被標記為有錯誤的,因為其執(zhí)行引起計算機程序的中止(并由此導致中止或崩潰),緊接著模糊器顯示錯誤。例如,還可以在stderr流上輸出警告,或在主機側(即在借助于調試器在執(zhí)行系統(tǒng)上測試計算機程序的測試系統(tǒng)上)監(jiān)視所述調試器。
6、sanitizer可以借助于代碼插樁(code-instrumentierung)來實現(xiàn)。但是為此要么源代碼必須可供使用,要么需要基于二進制文件進行特定于命令集的插樁(二進制插樁),所述特定于命令集的插樁是非常易受影響的。替代的基于仿真器的插樁同樣是非常特定于平臺的,并且每個嵌入式平臺都需要自身的仿真器。上述方法使得能夠利用調試器控制的sanitizer進行測試,并且不需要插樁或仿真,因此可在許多情況下應用。
7、下面說明了各種實施例。
8、實施例1是上述用于測試計算機程序的方法。
9、實施例2是根據(jù)實施例1所述的方法,包括:確定執(zhí)行計算機程序的系統(tǒng)會對哪些值以異常進行響應,并將指針所設置到的值設定為所確定的值之一。
10、因此,該方法可以用于各種執(zhí)行系統(tǒng)。
11、實施例3是根據(jù)實施例1或2所述的方法,包括:執(zhí)行多個測試遍歷(例如模糊測試測試遍歷,即模糊測試迭代)并且將斷點設置到對于不同的測試遍歷不同的存儲器釋放指令上。
12、由此,可以覆蓋大量存儲器釋放指令。
13、實施例4是根據(jù)實施例1至3中任一實施例所述的方法,包括:在嵌入式系統(tǒng)上執(zhí)行計算機程序,并通過與嵌入式系統(tǒng)(經由調試接口)連接的測試系統(tǒng)執(zhí)行下述步驟:設置斷點,并將存儲器釋放指令獲得的作為待釋放存儲區(qū)域的說明的指針設置為隨后在計算機程序中使用該指針時會觸發(fā)異常的值。
14、根據(jù)各種實施方式,尤其是使得能夠在嵌入式系統(tǒng)本身上測試用于嵌入式系統(tǒng)的計算機程序,包括存儲器監(jiān)視在內。
15、實施例5是根據(jù)實施例1至4中任一實施例所述的方法,包括:當觸發(fā)所設置的斷點之一時,檢驗(局部)變量(在相應的堆棧幀中或在寄存器中)是否包含待釋放存儲區(qū)域的存儲單元的地址,并在必要時將該變量設置為所述值或隨后在計算機程序中使用所述指針時會觸發(fā)異常的其它值。
16、由此,例如可以防止已根據(jù)原始指針計算的指針通過所述釋放而懸掛。
17、實施例6是根據(jù)實施例1至5中任一實施例所述的方法,其中計算機程序是用于機器人裝置的控制程序,并且根據(jù)計算機程序的測試的結果利用所述計算機程序來控制機器人裝置。
18、實施例7是一種測試裝置,其被設計成執(zhí)行根據(jù)實施例1至6中任一實施例所述的方法。
19、實施例8是一種具有指令的計算機程序,這些指令在由處理器執(zhí)行時,使該處理器執(zhí)行根據(jù)實施例1至6中任一實施例所述的方法。
20、實施例9是一種存儲有指令的計算機可讀介質,這些指令在由處理器執(zhí)行時,使該處理器執(zhí)行根據(jù)實施例1至6中任一實施例所述的方法。
1.一種用于測試計算機程序(105)的方法,包括:
2.根據(jù)權利要求1所述的方法,包括:確定執(zhí)行所述計算機程序的系統(tǒng)會對哪些值以異常進行響應,并將所述指針所設置的值設定為所確定的值之一。
3.根據(jù)權利要求1或2所述的方法,包括:執(zhí)行多個測試遍歷并且將斷點設置到對于不同的測試遍歷不同的存儲器釋放指令上。
4.根據(jù)權利要求1至3中任一項所述的方法,包括:在嵌入式系統(tǒng)(106)上執(zhí)行所述計算機程序(105),并通過與所述嵌入式系統(tǒng)(106)連接的測試系統(tǒng)(100)執(zhí)行下述步驟:設置斷點,以及將所述存儲器釋放指令獲得的作為待釋放存儲區(qū)域的說明的指針設置為隨后在所述計算機程序(105)中使用所述指針時會觸發(fā)異常的值。
5.根據(jù)權利要求1至4中任一項所述的方法,包括:在觸發(fā)所設置的斷點之一時,檢驗變量是否包含所述待釋放存儲區(qū)域的存儲單元的地址,并在必要時將所述變量設置為所述值或隨后在所述計算機程序中使用所述指針時會觸發(fā)異常的其它值。
6.根據(jù)權利要求1至5中任一項所述的方法,其中所述計算機程序(105)是用于機器人裝置的控制程序,并且根據(jù)所述計算機程序(105)的測試的結果利用所述計算機程序(105)來控制所述機器人裝置。
7.一種測試裝置,被設計成執(zhí)行根據(jù)權利要求1至6中任一項所述的方法。
8.一種具有指令的計算機程序,所述指令在由處理器執(zhí)行時,使所述處理器執(zhí)行根據(jù)權利要求1至6中任一項所述的方法。
9.一種存儲有指令的計算機可讀介質,所述指令在由處理器執(zhí)行時,使所述處理器執(zhí)行根據(jù)權利要求1至6中任一項所述的方法。