本發(fā)明涉及一種用于在計算機上的模擬環(huán)境中測試控制裝置的控制程序的方法和一種用于在計算機上的模擬環(huán)境中測試控制裝置的控制程序時監(jiān)控錯誤的數(shù)據(jù)處理裝置。
背景技術(shù):
由j.mauss發(fā)表在proceedingszuembeddedrealtimesoftwareandsystems(erts)2014上的“chipsimulationusedtorunautomotivesoftwareonpc”已知一種用于在個人電腦上測試控制裝置軟件的工具,其中,在仿真處理器上執(zhí)行所述控制裝置軟件并模擬環(huán)境數(shù)據(jù)。為了僅檢查該控制裝置軟件的部分,使用者可以在規(guī)范文件中給出選擇的待執(zhí)行函數(shù)。該控制裝置軟件的執(zhí)行可以借助調(diào)試程序逐步地實施,以確定所述規(guī)范文件的錯誤。
技術(shù)實現(xiàn)要素:
在此背景下,本發(fā)明的任務(wù)在于給出一種改進現(xiàn)有技術(shù)的方法。
所述任務(wù)通過具有權(quán)利要求1的特征的一種用于在計算機上的模擬環(huán)境中測試控制裝置的控制程序的方法來解決。本發(fā)明的有利方案是從屬權(quán)利要求的主題。
按照本發(fā)明的主題提供一種用于在計算機上的模擬環(huán)境中測試控制裝置的控制程序的方法。在計算機上生成所述模擬環(huán)境。在仿真器上執(zhí)行所述控制程序,其中,仿真器以處理器和存儲區(qū)模擬控制裝置的至少一部分。該仿真器在計算機上執(zhí)行并且具有用于輸入和輸出數(shù)據(jù)的接口,其中,模擬環(huán)境中的環(huán)境值通過所述接口被寫入到仿真存儲區(qū)中。所述控制程序具有程序變量,其中,在執(zhí)行控制程序期間該控制程序?qū)⒆兞恐蒂x值給至少一些程序變量,并且所述變量值通過訪問仿真存儲區(qū)的存儲器地址確定。
該仿真器給控制程序的每個程序變量配置一個擴展值域,其中,賦值給程序變量的變量值存儲在所述擴展值域中,并且該仿真器將這些程序變量標(biāo)記為錯誤的或無錯誤的。
借助將無錯誤的程序變量配置給第一類別并且將錯誤的程序變量配置給第二類別進行所述標(biāo)記,其中,所述第二類別的每個程序變量的擴展值域都具有數(shù)據(jù)字段。
作為替代形式,借助存儲在擴展值域中的錯誤字段進行所述標(biāo)記,其中,將預(yù)先確定的數(shù)字或非數(shù)字的第一有效值賦值給無錯誤程序變量的錯誤字段,并且將預(yù)先確定的數(shù)字或非數(shù)字的第一錯誤值賦值給錯誤程序變量的錯誤字段,并且所述第一有效值不同于所述第一錯誤值,并且每個程序變量的擴展值域都具有數(shù)據(jù)字段。
在確定變量值時進行所述標(biāo)記。如果通過仿真處理器訪問在仿真存儲區(qū)中存在的且寫入的第一存儲器地址或訪問第二程序變量以便確定第一程序變量的變量值,所述第二程序變量配置給第一類別或包括具有第一有效值的錯誤字段,則將該程序變量標(biāo)記為無錯誤的并且將確定的變量值存儲在擴展值域中。如果在確定第一程序變量的變量值的情況下,通過仿真處理器訪問在仿真存儲區(qū)中不存在的或未寫入的第二存儲器地址或訪問第三程序變量,所述第三程序變量配置給第二類別或包括具有第一錯誤值的錯誤字段,則將該第一程序變量標(biāo)記為錯誤的,將預(yù)先確定的數(shù)字或非數(shù)字的第二錯誤值賦值給第一程序變量的變量值,并且將不存在的或未寫入的第二存儲器地址或第三程序變量的數(shù)據(jù)字段的所有記錄的拷貝寫入到第一程序變量的數(shù)據(jù)字段中。
要指出,在當(dāng)前情況中描述所謂的離線模擬,在所述離線模擬中在計算機(例如個人電腦)上的模擬環(huán)境中測試調(diào)控軟件。在離線模擬中通常不需要實時模擬。
仿真器能夠?qū)崿F(xiàn)直接用機器語言執(zhí)行控制程序,其方式為,仿真該控制裝置程序。在此,程序稱為仿真器,該仿真器模擬控制計算機,并且由此能夠?qū)崿F(xiàn)在通過仿真器模擬的控制計算機上執(zhí)行控制程序。
訪問所謂的控制裝置描述文件,以便模擬例如can控制器、ad/da轉(zhuǎn)換器等控制裝置的芯片上的功能性或控制裝置的其他內(nèi)部功能性。所謂的控制裝置描述文件包含所有函數(shù)和變量名及其所屬地址的列表,并且可以例如是所謂的a21文件。為了理解本發(fā)明應(yīng)注意的是,因為在仿真處理器的仿真器上執(zhí)行控制程序,所以該控制程序在按照本發(fā)明的方法的范圍中以機器語言存在。與此對應(yīng)地,該控制程序的變量通過存儲器地址代表,并且變量值是存儲在仿真存儲器的配置給變量的存儲單元的存儲器地址中的變量的值。就技術(shù)方面而言,不需要使用術(shù)語“變量”來描述用機器語言存儲的程序。在本發(fā)明的描述中僅使用該術(shù)語,以便說明本發(fā)明的主題。
因而,本發(fā)明在技術(shù)上也可等同地如下表達:將擴展值域如上所述賦值給存儲有變量值的存儲器地址;可將被擴展值域賦值的存儲器地址如上所述標(biāo)記為錯誤的或無錯誤的;在嘗試讀入仿真存儲區(qū)中不存在的或未寫入的第二存儲器地址的變量值時,將所述第二存儲器地址標(biāo)記為錯誤的;并且在嘗試訪問標(biāo)記為錯誤的第三存儲器地址時,為了在第一存儲器地址中存儲一個新的變量值,則將所述第一存儲器地址標(biāo)記為錯誤的。
隨著模擬環(huán)境的生成,使用者產(chǎn)生為了執(zhí)行控制程序仿真器所需的參數(shù)。稱為環(huán)境值的參數(shù)在此不僅構(gòu)成控制裝置的變量值,而且構(gòu)成外部傳感器或類似裝置的值,并且例如通過旁路方法可以提供給控制程序。
擴展值域能夠?qū)崿F(xiàn)管理除變量的實際值以外的其他信息,例如關(guān)于錯誤或補充函數(shù)的信息。擴展值域例如包括存儲器的確定范圍,該確定范圍配置給程序變量并且在所述確定范圍中除程序變量的變量值以外還存儲其他信息。
該擴展值域的記錄數(shù)量和類型可以相同地設(shè)計用于所有的程序變量,其中,該擴展值域除了變量值以外具有用于標(biāo)記錯誤的錯誤字段以及用于記錄錯誤傳播的數(shù)據(jù)字段。在錯誤程序變量的情況中將數(shù)字或非數(shù)字的第一錯誤值賦值給錯誤字段。如果該程序變量是無錯誤的,則將數(shù)字的或非數(shù)字的第一有效值賦值給錯誤字段。
所述錯誤字段用于將程序變量標(biāo)記為錯誤的或無錯誤的。在存在錯誤時配置給錯誤字段的非數(shù)字或數(shù)字的第一錯誤值可以因此是任意值,然而所述任意值必須是單義的,并且必須區(qū)別于賦值給不存在錯誤的錯誤字段的數(shù)字或非數(shù)字的第一有效值。例如,在不存在錯誤時將值0作為第一有效值賦值給所述錯誤字段,該第一有效值在出現(xiàn)錯誤時更改為1作為第一錯誤值。
如果通過將程序變量配置給不同的類別進行錯誤標(biāo)記,則程序變量的擴展值域的記錄數(shù)量和類型取決于配置給相應(yīng)程序變量的類別。
類別可以例如是面向?qū)ο蟪绦蛟O(shè)計范圍中的類。配置給屬性和方法的變量類型稱為類。因此按照本發(fā)明的值域在面向?qū)ο蟮念惖囊饬x上可以包括屬性和方法。所述擴展值域也可以由一個或多個并行于變量管理和變量處理使用的列表以及變量本身組成,其中,例如每個類別提供一個列表并且待在列表中存儲的信息由類別預(yù)先給定。
在通過配置給不同類別的錯誤標(biāo)記的情況中,錯誤的并且由此屬于第二類別的程序變量的擴展值域除變量值以外具有用于記錄錯誤傳播的數(shù)據(jù)字段。無錯誤的程序變量屬于第一類別。擴展值域必須僅具有變量值,不需要數(shù)據(jù)字段。
為了實現(xiàn)可以借助變量值本身識別錯誤的程序變量,例如第二錯誤值是非數(shù)字的并且在控制程序的范圍中是單義的值。借助錯誤字段的值或借助程序變量的類別可以可靠地識別錯誤的程序變量。
在訪問錯誤的存儲器地址或錯誤的變量時賦值給變量值的第二錯誤值可以是任意的非數(shù)字錯誤值,例如“error”,該錯誤值單義地區(qū)別于有效的、典型數(shù)字的變量值。容易理解的是,基于記錄和錯誤標(biāo)記,借助類別配置或借助錯誤字段在錯誤訪問的情況下也可以將數(shù)字的錯誤值(例如0)配置給變量值。
按照本發(fā)明的方法的優(yōu)點是:錯誤的出現(xiàn)不會導(dǎo)致中斷控制程序的運行。由于仿真器也在出現(xiàn)錯誤的情況下完全執(zhí)行控制程序,因此測試控制程序的部分是可能的。如果應(yīng)該測試控制程序的單個功能性,則必須僅在模擬環(huán)境中模擬所有對于待測試的功能性必要的環(huán)境值并且通過仿真器的接口寫入到仿真存儲區(qū)中,因為用于其他未測試的功能性的環(huán)境值的錯誤不會導(dǎo)致中斷控制程序。
一個特別的優(yōu)點在于,關(guān)于原始錯誤源的信息被繼承。因此,在控制程序完全運行后對于每個程序變量直接借助記錄在數(shù)據(jù)字段中的地址讀取錯誤的來源。由此,關(guān)于感興趣的程序變量有針對性地提供關(guān)于生成的模擬的錯誤或不完全性的信息。
在一種改進方案中,在確定第一程序變量的變量值的情況下,在訪問配置給第二類別的程序變量或訪問包括具有第一錯誤值的錯誤字段的第二程序變量時,第二程序變量的標(biāo)識寫入到第一程序變量的數(shù)據(jù)字段中。由此記錄錯誤的整個路徑或錯誤傳播。每個單義標(biāo)識程序變量的數(shù)值(例如程序變量的名或程序變量的存儲器地址)適合作為程序變量的標(biāo)識。
按照另一種改進方案,對于如下情況:配置給第二類別的或包括具有第一錯誤值的錯誤字段的第一程序變量的控制程序具有預(yù)先給定的值,則將所述第一程序變量標(biāo)記為無錯誤的,所述預(yù)先給定的值作為變量值存儲在該第一程序變量的擴展值域中,其中,在借助配置給第一類別或配置給第二類別進行標(biāo)記時數(shù)據(jù)字段從擴展值域中刪除,并且在借助錯誤字段進行標(biāo)記時所有數(shù)據(jù)字段的記錄刪除。由此可以破壞錯誤傳播?;谟行е档馁x值,該程序變量再次標(biāo)記為有效的或繼續(xù)進行。
結(jié)合錯誤傳播的記錄開啟如下可能性:不是必須在來源處消除錯誤,例如通過仿真需要的存儲器地址消除錯誤,而是通過將有效的值直接賦值給之后接著的程序變量消除錯誤。
容易理解的是,對于借助類別配置進行標(biāo)記的情況,無錯誤的以及因此配置給第一類別的程序變量不必具有數(shù)據(jù)字段。然而也可能的是,在配置給第一類別的程序變量的值域中設(shè)置數(shù)據(jù)字段,其中所述數(shù)據(jù)字段沒有記錄。如果配置給第一類別的程序變量也具有數(shù)據(jù)字段,則在程序變量從第二類別類別轉(zhuǎn)換成第一類別的情況下不是整個數(shù)據(jù)字段從擴展值域中刪除,而是僅清除數(shù)據(jù)字段的所有記錄或不傳輸數(shù)據(jù)字段的記錄。
在另一種實施形式中,控制程序具有至少兩個程序塊,其中,所述程序塊按照控制程序的條件分支規(guī)則與條件有關(guān)地替代地執(zhí)行。如果所述條件與配置給第二類別的或包括具有第一錯誤值的第一程序變量的錯誤字段有關(guān),即與錯誤的第一程序變量有關(guān),則執(zhí)行所有程序塊。通過執(zhí)行控制程序的所有替代的規(guī)則,在執(zhí)行對于所有可能的程序變量的控制程序后給使用者提供信息。
按照一種改進方案,將每個其他在執(zhí)行程序塊時被賦值的程序變量標(biāo)記為錯誤的,其中,第一程序變量的數(shù)據(jù)字段的所有記錄的拷貝分別寫入到其他程序變量的數(shù)據(jù)字段中,并且將該第二錯誤值分別賦值給其他程序變量的變量值。由此,在執(zhí)行該控制程序后可以可靠且簡單地標(biāo)識所有與條件分支規(guī)則有關(guān)的程序變量。
按照一種替代的改進方案,在執(zhí)行用于每個其他程序變量的程序塊后對比賦值的變量值,控制程序不僅在執(zhí)行第一程序塊期間而且在執(zhí)行其他程序塊期間將變量值賦值給所述其他程序變量。在賦值的變量值之間有偏差的情況下,其他程序變量標(biāo)記為錯誤的,將第二錯誤值賦值給其他程序變量的變量值,并且將第一程序變量的數(shù)據(jù)字段的所有記錄的拷貝分別寫入到其他程序變量的數(shù)據(jù)字段中。由此確保了僅這樣的程序變量標(biāo)記為錯誤的并且提供關(guān)于錯誤來源的信息,所述信息的變量值實際上與分支規(guī)則有關(guān)。
如果例如僅在形式上涉及條件分支,例如如果賦值給在不同程序塊中的程序變量的變量值是相同的,則也不標(biāo)記或繼承錯誤。如果關(guān)于一個或多個程序變量僅涉及單純形式上的條件分支,例如對于單個變量a,而另外的程序變量的變量值與條件分支規(guī)則有關(guān),則所述一個或多個程序變量(例如變量a)標(biāo)記為無錯誤的,而其他程序變量標(biāo)記為錯誤的。
另外,本發(fā)明提供一種用于在計算機上的模擬環(huán)境中測試控制裝置的控制程序時監(jiān)控錯誤的數(shù)據(jù)處理裝置,其中,該數(shù)據(jù)處理裝置包括仿真器和模擬環(huán)境單元,所述模擬環(huán)境在所述模擬環(huán)境單元上產(chǎn)生,所述模擬環(huán)境單元能夠在該數(shù)據(jù)處理裝置上執(zhí)行,所述控制程序能夠由仿真器執(zhí)行,所述仿真器能夠在該數(shù)據(jù)處理裝置上執(zhí)行,其中,該仿真器具有仿真處理器和仿真存儲區(qū)并且以該處理器和存儲區(qū)模擬控制裝置的至少一部分,并且該仿真器還具有用于輸入和輸出數(shù)據(jù)的接口,該數(shù)據(jù)處理裝置設(shè)置用于將所述模擬環(huán)境中的環(huán)境值通過所述接口寫入到仿真存儲區(qū)中,所述控制程序具有程序變量,在執(zhí)行控制程序期間所述控制程序?qū)⒆兞恐蒂x值給至少一些程序變量,所述變量值能夠通過訪問仿真存儲區(qū)的存儲器地址確定,其特征在于,所述仿真器將擴展值域配置給控制程序的每個程序變量,將賦值給程序變量的變量值存儲在所述擴展值域中,所述仿真器將各程序變量標(biāo)記為錯誤的或無錯誤的,借助將無錯誤的程序變量配置給第一類別以及將錯誤的程序變量配置給第二類別進行所述標(biāo)記,其中,所述第二類別的每個程序變量的擴展值域具有數(shù)據(jù)字段,或者借助在擴展值域中存儲的錯誤字段進行所述標(biāo)記,其中,將預(yù)先確定的數(shù)字或非數(shù)字的第一有效值賦值給無錯誤的程序變量的錯誤字段并且將預(yù)先確定的數(shù)字或非數(shù)字的第一錯誤值賦值給錯誤的程序變量的錯誤字段,并且每個程序變量的擴展值域都具有數(shù)據(jù)字段,在確定變量值時進行所述標(biāo)記,其中,在確定第一程序變量的變量值時,在仿真處理器訪問在仿真存儲區(qū)中存在的且寫入的第一存儲器地址或者訪問配置給所述第一類別或包括具有第一有效值的錯誤字段的第二程序變量時,將所述程序變量標(biāo)記為無錯誤的,并且將確定的變量值存儲在擴展值域中,其中,在確定第一程序變量的變量值時,在仿真處理器訪問在仿真存儲區(qū)中不存在的或未寫入的第二存儲器地址或訪問配置給所述第二類別或包括具有第一錯誤值的錯誤字段的第三程序變量時,將所述第一程序變量標(biāo)記為錯誤的,將預(yù)先確定的數(shù)字或非數(shù)字的第二錯誤值賦值給第一程序變量的變量值,以及將所述不存在的或未寫入的第二存儲器地址或第三程序變量的數(shù)據(jù)字段的所有記錄的拷貝寫入到第一程序變量的數(shù)據(jù)字段中。
按照一種改進方案,在確定第一程序變量的變量值時,通過訪問配置給所述第二類別的或包括具有第一錯誤值的錯誤字段的第二程序變量,將第二程序變量的標(biāo)識寫入到第一程序變量的數(shù)據(jù)字段中。
按照一種改進方案,在所述控制程序?qū)㈩A(yù)先給定的值賦值給配置給所述第二類別的或包括具有第一錯誤值的錯誤字段的第一程序變量的情況下,將所述第一程序變量標(biāo)記為無錯誤的,將所述預(yù)先給定的值作為變量值存儲在該程序變量的擴展值域中,其中,在借助配置給所述第一類別或第二類別進行標(biāo)記時將所述數(shù)據(jù)字段從擴展值域中刪除,并且其中,在借助錯誤字段進行標(biāo)記時刪除所述數(shù)據(jù)字段的所有記錄。
按照一種改進方案,對于如下情況能夠執(zhí)行所有程序塊,即:所述控制程序具有至少兩個程序塊,其中,所述程序塊能夠按照控制程序的條件分支規(guī)則與條件有關(guān)地替代地執(zhí)行,并且所述條件與配置給第二類別的或包括具有第一錯誤值的錯誤字段的第一程序變量有關(guān)。
按照一種改進方案,將在執(zhí)行程序塊時被賦值的每個其他程序變量標(biāo)記為錯誤的,其中,將第一程序變量的數(shù)據(jù)字段的所有記錄的拷貝分別寫入到所述其他程序變量的數(shù)據(jù)字段中,并且將第二錯誤值相應(yīng)地賦值給所述其他程序變量的變量值。
按照一種改進方案,在執(zhí)行用于每個其他程序變量的程序塊后能夠?qū)Ρ人x值的變量值,控制程序不僅在執(zhí)行第一程序塊期間而且在執(zhí)行其他程序塊期間將變量值賦值給所述每個其他程序變量,其中,在所賦值的變量值之間有偏差的情況下,將所述其他程序變量標(biāo)記為錯誤的,將第二錯誤值賦值給所述其他程序變量的變量值,并且將第一程序變量的數(shù)據(jù)字段的所有記錄的拷貝寫入到所述其他程序變量的數(shù)據(jù)字段中。
按照一種改進方案,該數(shù)據(jù)處理裝置是計算機,在該計算機上能夠執(zhí)行如上所述的按照本發(fā)明的方法。
附圖說明
下面參考附圖進一步闡釋本發(fā)明。在此,同樣的部件標(biāo)以相同的附圖標(biāo)記。所示出的實施形式是極簡化的。其中:
圖1示出仿真器與模擬環(huán)境的示意圖,
圖2示出程序變量的第一實施形式的示意圖,以及
圖3示出程序變量的第二實施形式的示意圖。
具體實施方式
圖1示出第一實施形式的視圖,其中,用于控制裝置(未示出)的以機器語言存在的控制程序10由計算機30上的仿真器20執(zhí)行,其方式為:所述仿真器模擬控制裝置的處理器以及控制裝置的存儲區(qū)24。仿真器20具有接口22用于輸入和輸出數(shù)據(jù)。
為了測試控制程序10的一個或多個函數(shù)f1、f2、f3,在計算機30上的模擬環(huán)境40的范圍內(nèi)產(chǎn)生所述一個或多個函數(shù)f1、f2、f3所需的所有環(huán)境值42。所述環(huán)境值42可供仿真器20使用,其方式為:借助用于輸入和輸出數(shù)據(jù)的接口22將環(huán)境值42寫入到仿真存儲區(qū)24中。環(huán)境值42不僅可以代表控制裝置的變量,例如通過芯片上的組件提供的功能性,也可以代表從外部(例如從外部傳感器)傳輸給控制裝置的數(shù)據(jù)。
在執(zhí)行控制程序10期間,將變量值賦值給程序變量。為此,訪問仿真存儲區(qū)24中的存儲器地址或者訪問至少一個另外的程序變量。如果建立的模擬環(huán)境或生成的環(huán)境值是不完整的,那么由控制程序詢問的在仿真存儲區(qū)中的存儲器地址可能缺少或不能寫入。所述兩種情況導(dǎo)致程序變量的變量值錯誤。相應(yīng)地,訪問錯誤的程序變量導(dǎo)致結(jié)果錯誤。
按照本發(fā)明,將擴展值域50、60、70賦值給用于記錄錯誤的程序變量。圖2在左側(cè)示出第一程序變量的示意圖。示出的第一程序變量是無錯誤的并且因此由仿真器20配置給第一類別k1。所述第一程序變量具有值域50,其中,該擴展值域50具有變量值52。
在圖2右側(cè)示出第二程序變量的示意圖,所述第二程序變量是錯誤的并且因此屬于第二類別k2。第一程序變量的變量值52具有任意值,而第二錯誤值error總是配屬給第二程序變量的變量值62。存儲器地址存儲在第二程序變量的數(shù)據(jù)字段64中。所述存儲器地址對應(yīng)于在執(zhí)行控制程序10過程中為了給第二程序變量賦值而詢問的存儲器地址,該存儲器地址要么在仿真存儲區(qū)24中不存在要么未寫入。
按照圖2中示出的第一實施例,為錯誤的和無錯誤的程序變量設(shè)置不同的類別k1、k2。如果由于訪問仿真存儲區(qū)的不存在的或未寫入的存儲器地址致使出現(xiàn)錯誤,則將該程序變量配置給第二類別k2。另外,將第二錯誤值error賦值給變量值62并且將該存儲器地址寫入到數(shù)據(jù)字段64中。如果在訪問另外的錯誤程序變量時出現(xiàn)錯誤,則該第二程序變量同樣配置給第二類別k2,將第二錯誤值error賦給變量值62,并且附加地將所有在所述另外的錯誤程序變量的數(shù)據(jù)字段中標(biāo)注的存儲器地址拷貝到第二程序變量的數(shù)據(jù)字段64中。
在圖3中示出第二實施例。在此,所有程序變量具有相同設(shè)計的擴展值域70,所述值域除變量值72和數(shù)據(jù)字段74外還包括錯誤字段76。將第一有效值(例如0)配設(shè)給無錯誤程序變量的錯誤字段76。如果出現(xiàn)錯誤,按照第二種實施例不進行類別轉(zhuǎn)換,而是將第一錯誤值(例如1)賦值給錯誤字段。
通過錯誤繼承,即將存儲器地址寫入或拷貝到數(shù)據(jù)字段64、74中,在運行后提供所有需要的關(guān)于出現(xiàn)的錯誤的信息。因此可能的是,也僅測試控制程序10的第一函數(shù)f1,其方式是:僅在模擬環(huán)境中產(chǎn)生對于第一函數(shù)f1相關(guān)的環(huán)境值并且借助接口22將其提供給仿真器。其結(jié)果是其他不感興趣的函數(shù)f2、f3的輸出值是錯誤的。
借助作為第一函數(shù)f1的輸出值提供的程序變量的變量值、類別和/或錯誤字段,確定是否在執(zhí)行第一函數(shù)f1時出現(xiàn)錯誤。程序變量的數(shù)據(jù)字段64、74提供在哪個位置出現(xiàn)錯誤并且錯誤如何傳播的信息。