專利名稱:處理飛行器機載系統的運行軟件在調試階段期間處理的信息容量的方法和實施該方法的設備的制作方法
技術領域:
本發明涉及的是一種處理飛行器機載系統的運行軟件在調試階段期間所處理的 信息容量的方法。這個方法使得開發人員可以大大地減少信息容量,并因此大大地減少搜 索和改正要安裝的系統的運行軟件的錯誤所必需的存儲器資源。本發明的優越適用不僅限于航空領域,并尤其適用于所安裝系統的運行的軟件測 試領域。
背景技術:
出于安全的考慮,用來安裝在飛行器上的系統需要接受運行是否良好的檢驗,在 檢驗中系統必需符合一些認證的要求。這在安裝有類似系統的飛行器被授權進行飛行并甚 至是投入商業服務之前進行。安裝前,這些系統要經受一些測試以檢驗是否符合認證權威機構制定的完整性和 安全性要求。這些機載系統可以尤其是一些特殊的計算機,用來實現一些對飛行器很重要 的功能,例如,領航功能。這些系統在下文中被稱作計算機。在現有系統的架構中,最常見的是每個計算機都可以用于同樣性質的一種或多種 應用,例如控制飛行的應用。每個計算機都包括一個硬件部分和一個軟件部分。硬件部分 包括至少一個中央處理單元(CPU)和至少一個輸入/輸出單元,計算機通過這個單元與一 個計算機網絡和一些外圍設備等等連接。通常在航空領域中使用的機載系統的一個主要特征是,不論其硬件還是軟件的結 構,都盡量避免引入執行上述系統的功能所需之外的任何裝置。因此,與普及的應用中通常碰到的系統相反的是,在航空領域,計算機不具備復雜 的操作系統。另外,軟件使用的語言與中央處理單元能理解的語言盡量接近,唯一可得到的 輸入/輸出是系統運行所必需的,如來自飛行器傳感器或其他部件的信息,或發送到驅動 器或其他部件的信息。這種架構的優勢在于這種系統的運行非常便于控制。它并不依賴一個復雜的操作 系統,復雜的操作系統的多方面的運行都要根據不可控制的參數并且否則這些系統往往成 為和應用軟件同樣的安全示范。這種系統簡單不易受攻擊,因為它只包括一些執行該系統 的功能嚴格所必需的裝置。相對地,這種系統的運行也非常難以進行觀察。例如,這個系統不包括通常的人/ 機接口例如鍵盤和屏幕用來檢驗是否正確執行指令序列以及對執行進行調整,這就使得在 軟件的開發、檢驗和評定中難以進行一些必不可少的檢驗。計算機的軟件包括一個專用于所考慮的應用并保證計算機運行的軟件,軟件指令 要與確定系統的運行的算法相符。在系統和飛行器使用前,為了認證系統,要有一個對計算機進行生效確認的階段。眾所周知,生效確認階段主要在于,在計算機操作過程的每個步驟,檢驗計算機是否符合設立的技術規范,使得上述計算機滿足系統期待的運行。尤其對軟件而言,要通過一系列的步驟來實現符合技術規范,從軟件的最簡單組件的檢驗到包括所有組件的整個完整軟件安裝在目標計算機中。在第一個步驟,對可被測試的最簡單的軟件部件進行所謂的單元測試。在這些測 試過程中,檢驗所述軟件部件的邏輯指令即代碼單獨地是否都與設計要求相符。在第二個步驟,即綜合步驟,將已經分別接受檢驗的不同軟件部件集合,形成軟件 部件相互作用的一個整體。對這些不同的軟件部件進行整體性測試以確定這些軟件部件尤 其在上述部件的功能接口處是相容的。在第三個步驟,軟件部件整體安裝在專門的計算機中。從而,進行一些生效確認實 驗以顯示由集成在計算機中軟件部件整體組成的軟件是否符合設備技術規范,即軟件能完 成預期的功能,以及運行可靠安全。為了保證軟件的安全和滿足認證的要求,在這個生效確認階段,這個系統進行的 整個測試同樣必需能夠以足夠的概率得出軟件與其所處的系統規定的安全要求相符。在生效確認階段對軟件進行的不同測試可以保證軟件不會出現任何一種功能不 良(會對計算機的運行良好產生影響,從而影響飛行器及其安全)或者一旦出現功能不良 軟件能夠及時控制。然而,在生效確認階段,尤其是當檢驗到異常進行研究時,不僅需要保證安裝軟件 的計算機的輸入和輸出參數與期待相符,而且要保證軟件內部的一些性能良好。在這種情況下,鑒于所安裝應用的專用計算機的特殊結構,不使用特殊設備和方 法時通常很難觀察軟件的運行。已知的第一種方法在于使用仿真器在所測試的安裝有軟件的計算機和一個平臺 之間建立一個文件分配系統。通過仿真器,一個設備能夠在連接的平臺上模擬計算機處理 器的一個計算單元的邏輯運行。在使用仿真器的這樣一個運行模式中,計算機的處理器可以用一個檢測器代替, 這個檢測器保證與帶有處理器的仿真功能的相連接平臺接口。這樣,就可以通過連接平臺的自身功能,在除處理器部分外的計算機上,執行要測 試的軟件,觀測軟件的運行或一些內部運行不良,例如,輸入/輸出部件的輸入的刺激所引 起的不良,還能觀測上述的輸入/輸出部件的輸出。這個方法存在一些不足。事實上,要測試的計算機的任何類型都需要一個特別的 測試臺或者測試臺的至少一個專門配置。測試臺是一個尤其包括一些與要測試的計算機相 互連接的裝置和一些模擬計算機處理器的裝置以及執行測試程序的裝置的組合。既然每個處理器都需要一個特殊的仿真器,不論是仿真軟件還是代替處理器的相 應的檢測器,那么需要增加符合計算機的性質的仿真器。另外,一般根據仿真器進行研究的可能性比較受限。再加上必需使用與所檢驗的 處理器的特殊機器語言意味著程序員必須是一個機器語言程序設計專家。另外,仿真器成本昂貴,一般只會小批量生產。這類產品的生命周期也很短暫(6 個月至2年),而為了延長飛機程序的周期(20年,甚至更久),在操作條件下需要對運作和 檢查裝置進行維護(根據條例,工業反應性)。這表現為越來越難解決的廢舊處理問題。因此這種仿真器的解決方案并不具有很好的實用性,因為,除了在檢查研究方面的表現欠佳,它的使用和維護成本還很高。成本還可能增加的原因在于一般地出于安全設計理念,要使用處理器的不同模型 以確保運行冗余,這就要求同樣多的仿真器。
第二種排除仿真器問題的方法在于,在執行要測試的程序前,在主平臺上模擬計 算機的運行。在這種情況下,為了讀取測試的矢量或為了記錄測試的結果,要測試的軟件應 當訪問主平臺的文件。因為要測試的軟件自身并不包括類似的訪問主平臺的文件系統的功能,所以需要 改進要測試的軟件,增加這些訪問功能。為了轉移這些信息,人們一般使用由模擬測試環境發出的調用系統的指令。調用 系統的指令可以是,例如打開文件,寫入文件或者甚至是讀取文件。調用系統指令通過主平 臺操作系統捕獲,并將其轉換為主平臺的系統調用。這個第二種方法也同樣存在一些不足。事實上,文件種類過多導致訪問功能性的 運作十分依賴主平臺及其操作系統。然而,主平臺不僅在空間上(世界各地分布的操作設 備的情況)而且在時間上(主平臺替換)的變化性是很大的,這就給這種方法的實際操作 帶來困難。這些困難更加嚴重,還因為訪問文件系統的類似功能性的運作,同樣需要能夠改 進操作系統功能的專家的技能,因此一些進行實驗的專家并不具備。因此,這種方法成本過高,很難實施。另外這種方法對要測試的軟件具有損害性,而且為了進行這些測試而修改軟件會 出現軟件本身運行中斷的風險。在計算機確認階段,即這些測試階段,會出現運行軟件的執行中斷。這種中斷表現 為運行軟件的運行中斷或者軟件在無限的指令循環中阻塞。程序員這時應該在指令代碼行 中搜索出異常或錯誤,以期改正。通過如下一種執行完成此項搜索其中執行路徑的連續點 的順序與按正常執行的順序相反。換句話說,回溯(remonter) —個代碼行的序列,在其中 搜索錯誤(即返回已經執行的但是包括一個或幾個錯誤的代碼行的序列中),然后再重新 執行這個回溯序列。這種搜索稱為反向執行。這種反向執行要求,在一個指令代碼行序列形成的運行軟件執行路徑的任一點 上,程序員都了解指令代碼行的進展。否則,程序員就不知道在執行路徑的哪個位置出現錯 誤。因此他也不知道應當在多少個執行代碼行上進行反向執行。另外,對于機載軟件,反向 執行應該與正常執行使用同樣的語言,即機器語言。因此對程序員來說很難理解運行軟件 的程序進展以回溯序列和找出錯誤。另外,沒有任何一種反向執行的控制或追蹤裝置能夠 保證程序員知道應該回溯到有缺陷的序列的哪里以便找出錯誤或異常。考慮到這種復雜性,這種搜索錯誤的方法需要幾小時到幾天不等的大量時間,不 論在生產力還是勞動力方面,這都相對提高了調試階段的成本。另外,為了能夠進行程序的反向執行,最好提前捕獲然后重建程序執行狀態的信 息。捕獲的這些信息將全部存儲在數據存儲器中以便日后重新生成。但是,程序執行路徑 會很長,被操作和存儲的數據量很大,這對存儲器資源的容量提出了要求。為了解決上面陳述的不同問題,人們已經提出了幾種解決方案。第一種方案在于 壓縮整個操作數據。這個方案不太有效,因為壓縮的系數是隨意的(根據不同的操作數據而變化)。而且,在壓縮操作后,對于壓縮數據增加的成本,獲得的存儲空間的收益相對較 小。第二種方案在于只捕獲嚴格需要的數據以減少數據。在這種方案中使用的方法是 寫時才拷貝(英語為copy-on-write)。這種方案建立在信息計數的有規律檢驗上,從而只 捕獲修改后的數據頁面,這就保證了用于隨后重新生成的信息的最小化。與第一種方案不同,這種捕獲的成本是最小的;相對地,由此要做的重新生成就需要一個相對長的時間,尤其在一個交互調試活動期間,因為從程序開始,對最初執行狀態的 每次重建都需要所有捕獲的控制點。
發明內容
本發明旨在解決上述的不便。為此,本發明提出一種處理在機載系統的運行軟件 調試階段所操作的信息容量的方法。本發明的方法保證可以減少和最優化用于機載系統的存儲器資源的需求量。為 此,本發明的方法提出將運行程序的執行路徑切割成多個函數區間,捕獲與被測試的軟件 的給定位置的執行狀態相關的信息,隨后重建這些信息。更為確切地,本發明涉及一種處理機載系統的運行軟件的程序在調試階段所處理 的信息容量的方法,其特征在于包括以下步驟a)通過在程序的每個函數上布置行進點,將所述運行程序的執行路徑切割成多個 函數區間,b)設置與每個行進點相關聯的控制點,c)正常執行程序,其中進行以下操作-存儲程序在每個行進點位置處的執行狀態,-存儲執行狀態使得刪除前面存儲的所述行進點的執行狀態,-當檢測到錯誤時搜索與有缺陷的函數相對應的行進點,搜索程序開始時執行狀態,重新生成這個開始執行狀態,改正這個有缺陷的函數中的錯誤,和重新執行程序。本發明還可以包括一個或幾個以下特征-唯一的執行狀態被同時存儲在數據存儲器中。-在正常執行一個函數后,與這個函數相對應的行進點從非活躍狀態過渡為活躍 狀態。_搜索有缺陷的函數在于搜索最近的活躍行進點。-存儲行進點及其狀態的列表。本發明同樣涉及一種模擬飛行器的機載計算機的運行的設備,其特征在于實施上 述的方法。這個設備可以包括能夠存儲程序執行狀態的數據存儲器。本發明還涉及一種用于飛行器的機載系統的可加載在控制單元上的運行軟件的程序,包括當程序被加載在控制單元上并執行時用于執行上述的方法的指令序列。
在閱讀以下說明之后并且在研究附圖之后,將更好地理解本發明。這些不作為對本發明的限制的說明。圖1示出本發明的方法的功能示意2a和2b示出執行本發明方法的設備的示意圖。
具體實施例方式運行軟件由一組程序組成。程序由一組寫指令序列組成,稱叫指令串序列。這些 指令串通常按出現順序執行,即從第一個指令到最后一個指令。這些按出現順序執行的指 令串組成了程序的正常執行路徑。為了有效地調試程序,即搜索和改正程序的錯誤、設計的紕漏和運行的異常,本發 明的方法提出,在程序執行路徑中布置標記以便相對于這些標記確定哪里出現了錯誤或異 常。標記是位于程序特別位置的虛擬方位標。這些位置,例如,與程序不同函數(fonction) 的開始和結束相對應。一個函數就是一個指令序列,整體上使得可以進行一個特殊操作。一 個緊跟一個地執行程序的這些函數。標記放置于,例如,程序函數的每個輸入或輸出點。當 標記位于每個程序函數的輸入或輸出處,這些標記就實現了程序的函數設標。每個標記都包括一個行進點和控制點。行進點是可以位于程序特殊位置的虛擬方位標。程序中的行進點的位置即上述的 標記的位置。當執行程序時,行進點構成了方位標的點。然后,在程序運行中斷后的反向 執行情況下(當碰到一次或幾次異常或錯誤時),行進點組成程序執行路徑的進程的重啟 (reprise)點。事實上,在程序執行路徑上,行進點規則地分布,這保證了可以簡單快速地找 出碰到的錯誤或異常。這個分布可以是函數類型的,即行進點將程序的執行路徑切割成多 個相鄰的函數區間。每個標記的控制點都是對應于存儲器中的一個圖像的狀態的矢量,在該存儲器中 存儲了執行程序時使用的不同數據。控制點顯示在給定位置,即程序中標記所處的位置,的 程序的執行狀態,這樣可以隨后重新初始化包括控制點信息的存儲器。控制點與每個行進 點相關聯。位于兩個暫時連續的標記之間的程序執行所參考的信息的整體組成控制點。這 個整體是重新執行兩個標記之間的程序的最小、必需而足夠的信息整體。每個行進點都可包括兩個狀態一個活躍狀態和一個非活躍狀態。除其狀態(活 躍/非活躍)外,行進點包括相關的程序地址以及確定當程序執行到達行進點的地址時將 要進行處理的信息。在程序運行開始時,所有的行進點都是非活躍的。所有與行進點對應 的控制點都是中性的,即它們不包括任何信息。每當正常執行一個函數時,函數結束處或下個函數入口處的行進點的狀態變得活 躍。那么,與這個行進點相關聯的控制點捕獲或存儲程序在行進點位置的執行狀態。當正常執行程序時,在正常執行的函數后(在函數末端或下一個函數入口)的行 進點從非活躍狀態到活躍狀態。當行進點轉為活躍狀態時,通過與行進點相對應的控制點 捕獲程序的執行狀態。換句話說,在程序給定位置的程序執行狀態記錄在數據存儲器中。
根據本發明,程序的不同執行狀態一個緊跟一個地被連續記錄在同一個數據存儲 器中,從而在數據存儲器中只同時存儲唯一一個執行狀態。這個存儲的執行狀態是最后捕 獲的執行狀態,即程序在最后的活躍行進點位置的執行狀態。事實上,在本發明中,人們考 慮到,當進行反向執行時,只有這個最后的執行狀態的存儲是隨后重新生成程序執行狀態 所必需的。在一種實施方式下,捕獲執行狀態覆蓋了前面執行狀態的記錄。在另一種實施 方式下,在每次記錄執行狀態后,刪除前面已經記錄的執行狀態,數據存儲器從而只包括一 個執行狀態,即當反向執行時對重啟程序有用的執行狀態。當出現錯誤時,程序員進行程序反向執行以在 程序內部找到上述的錯誤。這種反 向執行可以按與程序的正常操作相反的方向回溯程序,以在與最后的活躍行進點相對應的 第一函數指令行上重新開始執行操作,即最后一個函數,它的控制點已捕獲程序狀態信息。存儲行進點及其狀態的列表。這樣,當出現程序執行的中斷時,找出哪個是最后的 活躍行進點,并重新回到與這個行進點相對應的程序的位置。然后在數據存儲器中搜索記 錄的執行狀態并從這個位置出發使用與記錄的執行狀態相關的數據重新執行程序。這樣,根據本發明,反向執行就可以按照行進點進行,以回溯程序的指令串并確定 缺陷的指令串的位置。反向執行可以照這樣在唯一一個函數區間內進行。當在這個函數區 間檢測到一個缺陷串或錯誤時,程序員則找出這個串中的錯誤或異常,然后加以改正。借助于控制點,可以在最后一個活躍的行進點處重新執行程序。這種程序的重啟 需要取回開始的執行狀態。根據本發明,這種執行狀態的取回只需要一個與執行狀態相對 應的空間,如存儲空間。另外,行進點和控制點之間的關聯保證可以快速地取回開始的執行 狀態。圖1是本發明的方法的一個運行示意圖實例。這個方法包括調試階段初始化的預 備步驟31。這個步驟將對調試階段良好運行有用的不同參數進行重新初始化。在步驟32中,對運行的軟件程序的執行路徑進行規則、恰當的切割。這種切割可 以標識與程序的執行路徑的整個區間相關聯的運行環境。在步驟33中,沿著程序的執行路徑分布行進點以將上述的執行路徑切割為函數 區間。每個行進點都與一個控制點相關聯。全部行進點和控制點形成一個信標系統。每個 行進點都有一個消極作用;它單獨形成指示程序執行重啟點的指示器。控制點有一個積極 作用,即它能具有兩種不同的狀態(活躍或非活躍)。控制點的作用在于捕獲程序在給定位 置和確定時間的執行狀態。在步驟34中,正常執行程序。在步驟35中對程序進行一個測試循環。在這個步 驟35中,檢測在行進點上的通過。如果在程序執行期間檢測到在一個行進點上的通過,即 如果一個行進點被通過,執行步驟36。在相反的情況下,反復執行步驟34。在步驟36中,捕獲程序在給定位置的執行狀態。在步驟37中存儲這個捕獲的程 序的執行狀態。步驟38旨在檢測程序中的錯誤。如果檢測出程序中的錯誤,那么執行步驟39,如 果沒有則執行步驟40。在步驟39中,程序的執行中止。在步驟41中,確定程序執行開始時的狀態。這個 執行開始時的狀態是在步驟37中記錄在數據存儲器中的最后執行狀態。在步驟42中,重新生成執行開始時的狀態,即執行的最近一個沒有錯誤的函數結束時程序的執行狀態。這個執行開始狀態的重新生成可以重新建立執行路徑的函數區間的 環境。在步驟43中,進行反向執行。從最后一個活躍行進點出發,并考慮與活躍的行進點關聯的控制點捕獲的狀態作為執行狀態,重新執行程序。在步驟44中,在有缺陷的函數中搜索發生錯誤的根本原因,以便回溯有缺陷的串然后改正程序中的錯誤。在步驟45中,檢驗調試階段是否結束。如果調試階段結束,那么可以整體執行程序(步驟46)。相反地,則要回到步驟34并重新執行步驟34至45。當程序中沒有錯誤時(步驟38),執行步驟40。在步驟40中,確定程序員是否以 交互的方式要求進行函數區間的跳變。如果已經要函數區間的跳變,那么就執行步驟41和 接下來的步驟。相反地,則重新執行步驟34,以繼續執行程序。事實上,在本發明中,程序 的設標可以自動進行,即標記自動定位于每個函數區間的開始。這個程序的設標可以是交 互的,即程序員在同一個函數內部選擇定位(設置)附加的標記。這些附加的標記可以是 輸入標記,輸出標記和/或中間標記。由程序員自己選擇交互或自動的設標。交互的設標 使得可以細化搜索和改正錯誤的區間,這就使得可以減小上述的區間并因而便于檢測出錯 誤。從上述可知,本發明的方法使得可以使用相對于已知方法很小的信息容量來進行 調試,因為借助于控制點和行進點捕獲然后重建的數據只是與唯一一個執行狀態相對應的 數據。事實上,程序的執行狀態的信息容量很小。另外,這樣一種重新生成的成本既不依賴 于人們努力生成的程序開始時執行狀態的位置,也不依賴于數據存儲器4的大小。圖2a示出一種用于飛行器機載系統的運行軟件的測試環境的控制單元1的一個 實例。根據一種實施變體,測試環境可以在主平臺上虛擬模擬,也可以建立在仿真器類型的 硬件設備的基礎上。控制單元1包括(并未全部列出)處理器2,程序存儲器3,數據存儲器4,和輸入 /輸出接口 5。處理器2、程序存儲器3、數據存儲器4和輸入/輸出接口 5通過雙向通信總 線6相互連接。在圖2a上,簡略示出了調試階段的運行軟件的一個程序7。程序7包括一個執行 路徑8。執行路徑8包括一組指令代碼行。執行路徑8被按規則和恰當的方式切割并形成 函數區間。因此,在調試階段,程序7與處理器2、程序存儲器3和數據存儲器4恒定連接。程序存儲器3在區域9中包括使得為程序7設置信標的指令。程序7的信標系 統使得在整個執行路徑8上安放行進點10。每個行進點10都與一個函數區間相關連。程 序7的信標系統同樣可以關于相應的行進點10設置控制點11,12,13,14和15。程序存 儲器3在區域21內包括執行程序7的指令。執行程序7使得可以一個接一個指令地展開 (c^roulement)執行路徑8。程序7的執行路徑的展開使得在行進點10上的通過有效。行 進點的通過有序地激活控制點11,12,13,14和15。程序存儲器13在區域22內包括捕獲程 序7的執行開始時的狀態的信息。控制點11,12,13,14和15的激活使得可以有序地捕獲 程序7的執行開始時的狀態。程序存儲器3在區域23內包括存儲程序7執行開始時的狀 態的信息。這些信息被存儲在數據存儲器4中。程序存儲器3在區域24中包括使得可以 重建這些存儲的執行狀態的信息的指令。在圖2b上詳細地示出了數據存儲器4。
權利要求
一種用于處理機載系統的運行軟件的程序在調試階段所處理的信息容量的方法,其特征在于包括以下步驟a)通過在程序的每個函數上布置行進點,將所述運行程序的執行路徑切割(32)成多個函數區間,b)設置(33)與每個行進點相關聯的控制點,c)正常執行程序,其中進行以下操作存儲程序在每個行進點位置處的執行狀態,存儲執行狀態使得刪除前面存儲的在所述行進點的執行狀態,當檢測到錯誤時搜索與有缺陷的函數相對應的行進點,搜索(41)程序開始執行狀態,重新生成(42)這個開始執行狀態,改正(44)這個有缺陷的函數中的錯誤,和重新執行程序。
2.根據權利要求1的方法,其特征在于唯一的執行狀態同時存儲在數據存儲器中。
3.根據權利要求1或2的方法,其特征在于在正常執行一個函數后,與這個函數相對應 的行進點從非活躍狀態過渡為活躍狀態。
4.根據權利要求3的方法,其特征在于搜索有缺陷的函數在于搜索最近的活躍行進點ο
5.根據權利要求3或4的方法,其特征在于存儲行進點及其狀態的列表。
6.一種模擬飛行器的機載計算機的運行的設備,其特征在于實施根據權利要求1至5 中任一項的方法。
7.根據權利要求6的設備,其特征在于包括能夠存儲程序的執行狀態的數據存儲器⑷。
8.一種用于飛行器的機載系統的可加載在控制單元(1)上的運行軟件的程序,包括當 程序被加載在控制單元(1)上并在控制單元(1)上執行時用于執行根據權利要求1至5中 任一項的方法的指令序列。
全文摘要
本發明涉及一種處理機載系統的運行軟件的程序在調試階段所處理的信息容量的方法,其特征在于包括以下步驟a)通過在程序的每個函數上布置行進點,將所述運行程序的執行路徑切割(32)成多個函數區間,b)設置(33)與每個行進點相關聯的控制點,c)正常執行程序,其中進行以下操作存儲程序在每個行進點位置處的執行狀態,存儲執行狀態使得刪除前面存儲的所述行進點的執行狀態,當檢測到錯誤時搜索與有缺陷的函數相對應的行進點,搜索(41)程序開始時執行狀態,重新生成(42)這個開始執行狀態,改正(44)這個有缺陷的函數中的錯誤,和重新執行程序。
文檔編號G06F11/36GK101802793SQ200880106873
公開日2010年8月11日 申請日期2008年9月12日 優先權日2007年9月14日
發明者F·蘭蒂姆比沃羅羅納 申請人:空中客車運營簡易股份公司