標籤: 暫無標籤

  軟體運行時錯誤檢測工具


  PolySpace


  什麼是運行時錯誤


          運行時錯誤(Run-time Errors)就是軟體在動態運行時出現的錯誤,是所有的軟體錯誤中最具風險的。在Windows操作系統上,運行時錯誤出現的現象如圖1


  圖1 Windows和UNIX操作系統上發生運行時錯誤的現象


         


  通過圖1也可以看出,運行時錯誤能夠導致不正確的計算、數據崩潰、不可決定的行為以及處理器宕機。


  根據ANSI C的定義,C語言中的典型運行時錯誤主要是:


  運行時錯誤屬於潛在的威脅,廣泛的存在各種軟體中。根據Berkeley大學與 IBM Watson的研究報道指出所有IBM大型軟體的漏洞中,30%-40%是運行時錯誤引起的。


  普通軟體測試技術的限制


  傳統的軟體測試技術一般分成靜態測試和動態測試,這兩種測試方法在檢測軟體動態運行時錯誤方面有著很多的限制,如圖2。


  圖2 普通測試技術的限制


  靜態測試技術可以檢查軟體代碼的編程規範,分析程序的靜態結構,對軟體的質量進行度量。藉助於靜態測試技術,可以使軟體代碼更加規範,結構更加清晰,但由於靜態測試技術不分析代碼的動態行為,不分析各個變數之間的關係,因此普通的靜態測試技術不能有效的檢查出只有動態運行才會出現的錯誤,即運行時錯誤。


  動態測試技術需要將被測的程序運行起來,放到實際的軟硬體環境中。動態測試技術主要有以下的不足:


          不完全:測試的步驟一般是:測試計劃——測試用例——測試執行——發現並提交BUG。這種方法只能發現一部分運行時錯誤,即測試用例所能覆蓋到的錯誤,但是完全的測試是不可能的(軟體測試的原則之一),即不可能窮盡所有的輸入,所以依賴於測試用例的測試最終只能保證測試過的輸入不會導致運行時錯誤,不能保證其他大部分的輸入也能正常工作。


          效率低:動態測試技術能發現一部分運行時錯誤,但它發現的只是現象,類似於圖1這樣的現象,而不是問題的根源。測試人員提交BUG后,開發人員還需要重現BUG,然後使用傳統的調試工具來定位問題所在。對於一般的錯誤,定位並修復一個錯誤大約需要10個小時,而對於偶爾死機這樣的錯誤,則需要更多的時間去調試。


  PolySpace的解決方法


          PolySpace使用的是目前最新的語義分析技術,它依靠大量的數學定理提供的規則分析軟體的動態行為。語義分析技術沒有使用簡單的窮舉法,卻有能力在更普通的模式下表達程序的狀態,還能提供規則進行巧妙的處理。簡單來說,語義分析技術可以通過靜態的方法,能夠發現動態的運行時錯誤。


  在以前的軟硬體環境下,這個問題會非常複雜,很難去解決。隨著計算機處理能力的不斷增強,在當前的硬體條件下,語義分析技術已經完全可以高效的實現。當應用運行時錯誤的檢測時,語義分析技術會對所有危險的操作,進行一個詳細的分析,在程序動態運行之前,最早在編碼階段,就能夠發現其中的運行時錯誤。


         


          使用了語義分析技術的PolySpace有很多優勢。


          完全自動化分析,只需要源代碼


  ——不需要測試用例,


  ——不需要代碼插裝


  ——不需要運行程序


  因此傳統的測試活動可以完全省略,如圖3


  圖3 有了PolySpace,傳統的測試活動完全可以省略


          代碼寫完就可以分析,無論處在任何軟體開發的階段


  用PolySpace分析只需要代碼,不會改變軟體開發的過程。如圖4


  圖4 PolySpace可以用在軟體開發的任何階段


          直接找到錯誤的根源,而不是錯誤的現象,排錯更快


  圖5 PolySpace的測試結果:用不同的顏色提示不同的含義


  圖6 PolySpace直接找到錯誤的根源,不需要調試


  圖7 PolySpace分析結果中的多任務共享變數訪問關係圖


          分析所有變數組合,比普通的技術找到更多的運行時錯誤


  圖8 PolySpace能夠找到更多的運行時錯誤


  PolySpace的價值


          使用PolySpace來檢查運行時錯誤,不僅能節省大量的時間成本,還能夠節省大量的開發成本。


  圖9 PolySpace可以節省的時間成本


          在軟體開發的不同階段修復一個錯誤需要的成本如圖10。


  圖10 修復一個錯誤的經濟成本


          根據馬里蘭州大學與南加州大學的研究報道,每千行代碼中至少有一個運行時錯誤。以一個5萬行的程序為例,50千行代碼 × 1個錯誤/千行代碼 = 50 錯誤。


           


  圖11 PolySpace可以節省的經濟成本


  標準和認證


  在使用嵌入式系統的行業,其軟體的運行時錯誤所造成的後果往往是很嚴重的,可以導致產品交貨的延期,產品的取消,公司名譽受到傷害等等。因為語義分析是唯一有效的找出運行時錯誤的技術,正逐漸成為工業標準所需求的技術。


  汽車工業軟體可靠性協會MISRA(The Motor Industry Software Reliability Association)已經明確,用於汽車的軟體必須經過運行時錯誤的檢查。他們的結論,PolySpace可以幫助:


  圖12 MISRA對PolySpace的評價


  使用PolySpace的組織還有:美國食品及藥物管理局FDA(Food and Drug Administration)、CENELEC(the European Committee for Electrotechnical Standardization)等。


  PolySpace的應用領域和客戶


          PolySpace主要面向高可靠性的嵌入式軟體行業,特別是在航空、航天、國防、汽車以及醫療等領域得到了廣泛的應用。下面是PolySpace的部分知名客戶。


  航空、航天和國防


  汽車電子


         


  醫療


  成功案例


  1 德爾福柴油機系統


          突破性的方法檢測軟體錯誤


  Frédéric Retailleau是DDS位於法國Blois的軟體驗證組的負責人。他正在尋找更好的軟體分析工具,希望在幫助他提高軟體可靠性的同時,還能提高開發的工作效率。聽了PolySpace的介紹后,他對這個新的工具產生了興趣。事實上,PolySpace的分析方法和傳統的測試方法絕然不同。區別於傳統的通過測試用例分析軟體狀態的方法,PolySpace根據軟體的源代碼,對軟體進行抽象,這種突破性的方法使得程序員在寫代碼的同時,就能精確的而且自動的查明軟體的運行時錯誤。


          Delphi Diesel Systems Blois決定評估PolySpace來分析它們自己的應用,這些應用對於傳統的測試技術是一個很大的難題。「燃油噴射控制軟體的開發涉及到大量的校準標記(calibrations)」,Frédéric Retailleau說,「在典型的200 000行代碼中就含有幾千甚至上萬個校準點。在軟體發布后,校準組可能會修改這些校準常量,相當於潛在的修改了這個應用的行為。這些特點使得在執行測試時變得異常的困難」。


          Delphi Diesel Systems Blois對PolySpace進行了兩周的技術評估。在評估期間,PolySpace在被認為是進行了完全測試的高級應用中發現了錯誤。他們對評估結果非常滿意,決定將PolySpace集成到他們的測試過程中。Frédéric Retailleau和PolySpace的技術顧問一起定義了PolySpace最佳的使用方式。他們得出結論,在開發過程中越早使用、在功能測試前使用PolySpace,會最大程度的提高開發的效率,以及儘早排除校準標記的問題。


           


  「能夠比傳統的耗時的測試方法更快的發現錯誤,本身就是很大的價值。在此基礎之上,代碼剛剛寫完,PolySpace就能更早的幫助我們抓到錯誤,因此成本更低。」 Retailleau總結時說。


  更進一步:提高質量…和效率


          現在,Delphi Diesel Systems Blois正在系統的使用PolySpace。等軟體模塊剛完成後,他們馬上就使用PolySpace分析。「我們已經用PolySpace取代了以前的健壯性測試,以前的測試結果不完全並且特別的耗費時間。」 Retailleau說,「動態測試僅僅能檢測錯誤的現象。PolySpace可以直接指出錯誤的根源,節省了大量的調試成本。由於分析過程完全自動化,對軟體小的修改的結果的評估也更迅速。」


          由於PolySpace出色的工作,Delphi Diesel Systems Blois甚至使用PolySpace作市場宣傳。Retailleau解釋說:「我們想讓我們的客戶知道,我們正在使用藝術級(state-of-the-art)的工具檢測運行時錯誤。我們盡我們的最大努力來確保柴油機燃油噴射控制軟體的高可靠。」


  2 PolySpace確保更快的滿足FDA的要求


  FDA在它的「General Principles of Software Validation」中,要求設備提供商實現完整的缺陷預防策略,包括在每次變更后的額外測試和驗證。作為領先的靜態驗證技術,PolySpace能夠提供FDA要求的所有類型的額外分析,並且相對於傳統的覆蓋率測試和代碼檢查技術,PolySpace需要更少的時間和成本。


  PolySpace和FDA要求


  基於FDA General Principles of Software Validation(詳細信息參考www.fda.gov)


  3.1 SOFTWARE VERIFICATION


  「software testing is one of many verification activities intended to


  confirm that software development output meets its input


  requirements. Other verification activities include various static


  and dynamic analyses, code and document inspections,


  walkthroughs and other techniques.」


  PolySpace能夠靜態分析代碼的動態屬性,可以實現FDA的需求


  4.3. TIME AND EFFORT


  「Preparation for software validation should begin early,


  i.e., during design and development planning and design input.」


  在軟體開發過程中,只要代碼完成,PolySpace就可以馬上進行分析,加快測試的進度,降低調試的成本。


  4.4. SOFTWARE LIFE CYCLE


  「The software life cycle contains software engineering tasks and


  documentation necessary to support the software validation effort.」


  PolySpace能夠自動生成部分文檔,節省大量的時間和成本。


  4.7. SOFTWARE VALIDATION AFTER A CHANGE


  「Whenever software is changed, a validation analysis should be


  conducted not just for validation of the individual change, but also


  to determine the extent and impact of that change(…).」


  在最初的分析結果中,PolySpace能夠準確的標示代碼在什麼時候、什麼地方以及怎樣失效。配置完全可以重用,可以快速方便的重新運行分析。


  4.9. INDEPENDENCE OF REVIEW


  「 Self-validation is extremely difficult. When possible, an


  independent evaluation is always better, especially for higher risk


  applications.」


  PolySpace不依賴於測試用例,代碼插裝和人工代碼走查。因此,它可以產生一致的,可靠的和可重現的結果。


  3 EADS-LV


  測試並且修正每一處錯誤


          為了確保發射的安全,必須要進行無數次的測試,模擬軟體的實行環境。 所有這些測試都是在地面進行,因此,所有的代碼都必須被非常小心的精確細察,不允許有一點誤差。測試過程中的主要困難是集成第三方承包的外部軟體,所有的軟體必須在同一種嵌入的環境中協同工作。錯誤經常在各個軟體介面的地方出現。這是EADS-LV的最關注的:保證軟體錯誤決不能危害發射。傳統基於測試用例的方法是不完全的。他們不能保證所有的錯誤都已經被發現。


  《This is where PolySpace Ada Verifier's solution is unique - it detects run-time errors without execution and also has the advantage of being exhaustive》。它可以在不需要一個測試用例的前提下,檢測所有的運行時錯誤(overflow, non-initialized variables, access conflicts, etc)。


  它檢測的錯誤分兩類,確定的錯誤和潛在的錯誤。EADS-LV強調《Even the detection of potential errors is appreciated》。在軟體的開發階段修復一個錯誤的成本大約是1個小時,集成階段是10個小時,而在最後的驗證階段是100個小時,一旦發布以後再修復就要超過1000個小時了。PolySpace Verifier讓程序員不放過一個錯誤,並且,它還可以精確的定位錯誤,節省相當可觀的時間。


  PolySpace Verifier確保軟體的質量和安全


          EADS-LV使用PolySpace Verifier作為最終的質量控制工具(《final quality control》),所有使用Ada語言編寫的軟體,不論是承包商開發還是自己開發,都必須系統的使用PolySpace的工具,從裝備上的應用軟體到操作平台上的集成各個應用的核心軟體。


          EADS-LV在測試過程的開始階段使用PolySpace Verifier,能夠加快了錯誤檢測的過程,降低了最終的成本,縮短上市的時間。


          EADS-LV正在考慮另外一種使用PolySpace的方法。把PolySpace的技術等同於EADS-LV設計的軟體測試用例,這樣更加快了市場的反應,更加節省成本。
上一篇[《覺支》]    下一篇 [圈複雜度]

相關評論

同義詞:暫無同義詞