在安全關鍵軟體方面,我們正面臨成本危機,這意味著所需功能的增加已經超出了支付其開發費用的能力。例如,波音787專案需要650萬行**,設計、開發和測試的成本為4000000000美元。重大安全關鍵型專案的趨勢是總成本呈指數級增長,軟體在總開發預算中的比例逐年加大。下乙個大型航空航天專案很可能用以前專案中使用的技術是無法承受的。那麼我們能做什麼呢?
安全認證和所需的測試和驗證在軟體開發預算中佔了很大的比重。將軟體的測試轉移到左邊(即在軟體開發生命週期的早期),同時利用自動化技術,在成本、風險和進度方面都有很大的好處。下圖1顯示了商業航空公司軟體開發每千行**的成本(以百萬美元為單位)(波音和空客的資料),它清楚地顯示了指數級的增長。
圖1:商業航空專案每行**的軟體開發成本。資料取自空客和波音的專案指標。
不足為奇的是,大多數缺陷都是在專案開始時引入的,甚至是在編寫第一行**之前。大多數缺陷是在測試期間發現並修復的,但有相當一部分(高達20%!)是在執行期間發現的,即在產品銷售和發貨之後。在認證系統中,這要麼意味著極其昂貴的修復-測試-再認證的週期,要麼意味著操作者對問題的變通。圖2顯示了在軟體開發生命週期的每個階段引入和檢測到的bug的相對百分比。
圖2:圖表顯示了在開發的不同階段引入和檢測到的缺陷的百分比。
在生命週期的早期,缺陷的修復是最便宜的,而隨著專案時間的推移,發現和修復缺陷的成本會成倍增加。在運營中,產品運到客戶手中後,其修復成本是最高的。部署後的缺陷修復成本是保守的,不包括現場安全事故對品牌的損害和責任。圖3顯示了在生命週期的每個階段修復缺陷的相對成本。顯然,我們的目標是將發現和修復的缺陷移到生命週期的早期,換句話說,就是「左移」。此外,最好是減少通過客戶的缺陷數量(每個領域都是現實)。
安全關鍵型軟體行業認識到需要改變工作方式。太多的專案都在重新發明「輪子」,而認證全新的軟體既耗時又昂貴。新產品的連線性和功能的增長意味著方法需要改變。在這篇文章中,我們不會涵蓋所有被提出的技術,而是集中在測試自動化在左移減少、檢測和修復缺陷和安全漏洞方面的作用。
任何安全關鍵型專案的乙個重要部分就是測試,而自動化對於實現安全、保安和質量目標是絕對必要的。以下是測試自動化工具支援新的軟體開發方法並提高測試和文件生產力的乙個例子。
支援敏捷和迭代開發方法:瀑布法的問題已經被理解,許多團隊正在使用更現代化的開發方法來提高質量和安全性。測試自動化是任何迭代開發方法的重要組成部分,因為在模組、元件等的每一次新迭代上都要執行測試套件。測試自動化通過可重複的自動化測試來支援這些方法,為每個測試提供不同級別的報告,但也提供隨著時間的推移而累積的結果。動態分析工具對檢測難以發現的執行時錯誤至關重要,靜態分析在測試開始前檢測缺陷方面發揮著重要作用。
支援軟體檢查:在開發生命週期早期消除缺陷的最佳實踐之一是檢查。檢查意味著審查一切,而不僅僅是源**。例如,檢查需求和設計對於防止系統中的主要錯誤**至關重要(見圖2)。許多bug實際上是被設計到系統中的。工具在這個階段發揮的作用較小,但確實能提高**審查的效果。自動單元測試、動態錯誤檢測和靜態分析在專案的早期編碼階段提供了大大提公升的錯誤檢測。自動化測試的結果可以呈現在**評審中,從而降低了對人工錯誤檢測的依賴性,有更多的時間來檢測錯誤的需求和設計決策。
提高測試效率:人工測試是乏味的,而且可重複性較低。結果收集可能是臨時的,儘管結果是「正確的」,但還是會漏掉錯誤。實現所需的**覆蓋率,根據專案的安全標準和關鍵性而有所不同,很難跟蹤。測試自動化不僅使測試大大減少了繁瑣和可重複性,而且先進的測試工具的報告功能可以建立有關專案狀態的重要管理資訊。增加動態分析,即在**執行時分析**(以檢測棘手的執行時錯誤),以及靜態分析,即在**執行前分析**,大大增加了測試工具的錯誤檢測能力。
自動化編碼標準合規性:許多安全關鍵型專案都需要源**標準。例如,misra在汽車軟體中很常見,但在其他行業也得到了認可。一些標準要求**符合公司標準,以滿足某些目標。在每一種情況下,手動執行編碼合規性都很乏味,而且容易出錯。靜態分析工具是執行合規性的理想選擇,高階工具可以進一步檢測出格式違規以外的錯誤。
自動化認證文件:在實現軟體安全認證的過程中,很大一部分工作量是在記錄流程、驗證和核實方面。測試自動化大大降低了記錄測試結果和覆蓋率分析的成本。
加速第三方軟體的再利用:提高生產力的乙個關鍵策略是重複使用軟體。理想情況下,可以使用已經認證的元件來降低這些子單元的開發成本。專案需要利用cots(現成的商業軟體)軟體,也可能利用開放原始碼和其他源**。利用靜態和動態分析工具自動評估這些軟體,可以降低使用這些元件的風險。
提高質量、安全和保障:即使是嚴格的測試機制也會遺漏關鍵錯誤。例如,在安全攻擊或多執行緒**的情況下,僅靠**覆蓋率不足以確保正確的行為。靜態分析工具可以在不執行特定測試的情況下檢測源**中的錯誤,並且可以發現單元測試或系統測試中難以發現的錯誤,如安全漏洞。動態分析工具可以在測試過程中檢測到執行**中的錯誤,這些錯誤可能會反映在測試結果中(例如記憶體洩漏速度慢)。系統測試期間的模糊和滲透測試可以發現正常執行條件下遺漏的漏洞。總的來說,最先進的工具所發現的額外缺陷和安全漏洞有助於降低成本、風險,以及許多進入生產的20%左右的bug。
很明顯,必須採取一些措施來解決圖2中如此清晰顯示的問題。太多的缺陷在生命週期的開始階段就被引入,並且一直沒有被發現,當產品生產出來並到了客戶手中(或在飛機或汽車上,視情況而定),太多的缺陷被留在了產品中。採用新的開發方法,重複使用元件,利用cots和開源,以及工具自動化都是提高開發生產力的關鍵步驟。
假設使用最先進的工具的開發流程,在生命週期的早期發現並修復更多的缺陷,單元測試是非常有效的,幫助更少的錯誤通過生產。在圖4中,乙個假設的例子顯示了生命週期中缺陷檢測的變化--其中大部分的缺陷檢測和修復被轉移到左邊,在生命週期的早期。
圖4:一張圖顯示了改進後的開發流程,該流程將缺陷和安全漏洞的檢測轉移到了生命週期的早期。
從上面的圖3我們知道,在開發的每個階段,成本都會大幅上公升。下圖5顯示了傳統方法與圖4所示的新的改進方法中修復缺陷的成本比較。不出所料,早期發現並修復缺陷的成本要比後期修復缺陷的成本低。在這裡介紹的情況下,總體成本差異約為40%,有利於向左移動的方法。
圖5:一張圖顯示了傳統方法與左移方法中修復bug的相對成本。即使在總缺陷數量相同的情況下,早期檢測也能顯著降低成本。
安全關鍵型軟體無疑陷入了成本危機。新的大型安全關鍵型專案的開發成本太高,甚至可能無利可圖。開發安全關鍵型軟體需要新的方法,這種努力必須減少在軟體開發生命週期後期發現的錯誤數量。將缺陷和安全漏洞的檢測和修復轉移到盡可能早的生命週期中,可以大大降低成本。測試自動化在提高測試效率和結果方面發揮作用,是安全關鍵軟體開發新方法的重要組成部分。
測試自動化 自動化測試的定義
相關術語 automated testing test tool,automated testing test suite,automated testing test script等.具體參見 http en.wikipedia.org wiki test automation 推薦書籍 1 軟體...
自動化測試成功的關鍵
來自 ibm 在本文中,我們要討論為什麼進行測試,尤其是自動化測試,是必需的。然後,我們將介紹制定計畫的概念 為什麼制定計畫是如此的重要?在隨後的文章中,我們將分解測試計畫中的不同因素,並且研究如何進行制定計畫的過程才能最大程度地增加成功的機會。現代客戶端 伺服器應用程式是非常複雜的,因此測試也就成...
自動化測試ddt的使用
資料驅動測試 允許您通過使用不同的測試資料執行乙個測試用例,並使其顯示為多個測試用例。1.ddt 類裝飾器,用於testcase的子類test方法。2.1 data 方法裝飾器 資料 包含與要提供給測試的值一樣多的引數。2.2 file data 方法裝飾器 資料 將從json或yaml檔案載入測試...