您好,登錄后才能下訂單哦!
這篇文章主要介紹“總結軟件缺陷的定義、分類、檢測和修復”,在日常操作中,相信很多人在總結軟件缺陷的定義、分類、檢測和修復問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”總結軟件缺陷的定義、分類、檢測和修復”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
計算機學科中的中文詞匯很多是從英文翻譯過來的,有時不能夠準確地描述或刻畫詞匯真實的含義。在軟件領域,你能想到的和缺陷相關的詞匯可能有:bug,defect,fault,error,failure,exception等等。說實話,我一直也沒搞懂這些詞匯的區別。但理解這些詞匯的區別不僅僅是文字游戲,也能夠幫助我們理解針對它們的檢測和修復技術的不同。于是我google了一下,但大多文章對這些詞匯的定義都不太一致。以下是我比較認同的這些詞匯在軟件代碼上的定義。
· Fault/Bug:軟件中出現不符合業務邏輯的代碼,比如+號寫成-號;
· Error:軟件運行中出現不符合預期的值,比如a的值為2,被計算成3;
· Failure:軟件與人的交互中出現不符合預期的行為,比如程序崩潰。因此Fault可能導致Error,最終可能導致Failure,注意這里是可能,并不是一定;
· Defect:一種Defect是一類代碼自身缺陷的統稱(歸納),比如內存泄漏。
Fault通常需要從Error,Failure中檢測到,也就是比較程序的執行結果與預期的規范(Specification)是否吻合。這個過程其實就是debugging(調試)和testing(測試)。Fault也可以稱為業務邏輯相關的缺陷。而Defect是代碼本身的問題,不依賴于執行結果和預期的規范的一種軟件問題,因此Defect通常是通過靜態地掃描(不運行)代碼來檢測的。
從上文可以看到,Fault是通過測試來檢測的,而Defect是通過靜態分析來檢測。在企業中,Fault檢測的普及率和認可度通常比Defect檢測的高,主要原因有如下幾點:
(1)Fault會直接影響軟件的行為,被視為比較嚴重的問題,而很多Defect不能直接影響軟件的行為,或者在很特殊的場景下才影響軟件的行為,開發人員覺得可有可無;
(2)Fault引起的軟件錯誤容易被觀測,有直接證據證明軟件中存在錯誤,開發人員會傾向去修改,而Defect通常比較難觀測;
(3)測試的門檻低一些,測試人員只需要寫一些測試腳本就可以,但靜態分析需要有程序分析方面技術的積累;
(4)靜態分析固有的一些缺點(耗時,誤報)引起開發人員的不滿。
自動修復方面,這幾年在學術界比較熱門,慢慢也在企業中開始使用,但目前應該還處于初級階段。與檢測相反,Fault的自動修復難度是比較大的,因為涉及到業務邏輯,需要人工加入一些邏輯,當然最近也有很多學術研究使用機器學習來自動學習Fault的自動修復;而很多的Defect的修復是不需要加入業務邏輯相關的代碼,所以自動化程度反而可以達到較高水平,不過目前也沒有看到這方面的自動化工具。
我們不難發現,Fault的檢測已經比較成熟;而Defect的檢測受重視程度還不夠。以前我們可能只關注軟件的正確性,所以Fault的檢測和修復比較受歡迎,但Defect也會影響軟件的質量,同樣需要受到關注。
最近公司在提倡提升軟件工程能力,打造高可信的軟件產品,也是強調我們不僅僅要關注軟件功能的正確性,也需要關注非功能方面的質量,寫出“優美”的代碼。因此,Defect的自動檢測和修復是一個比較有價值的方向,以下是一些可能做的事情:
(1)對開發人員加強Defect方面的培訓,讓開發人員了解常見的Defect,在編碼時盡量地避免寫出這樣的Defect,這比后續的檢測和修復付出的代價要少很多。現在公司雖然有很多的編程規范定義不同的Defect,但開發人員可能并沒有用心去學習,如何讓開發人員意識到Defect的危害是比較關鍵的;
(2)加強代碼的Review的機制。這一點我個人深有體會:沒有Review時,寫的代碼就比較隨意,有Review時就會考慮得全面一些,畢竟要給別人看;
(3)Defect的自動檢測。對于Fault的檢測,人比機器更擅長(比如寫測試用例),但對于Defect的檢測,機器比人更擅長(比如枚舉程序路徑),因此Defect的檢測是更適合自動化的。目前公司也引入了一些Defect的自動檢測工具,如coverity,fortify,findbugs等等,但這些工具通常只是作為黑盒來使用。這樣能夠覆蓋更多的Defect,同時也帶來一些問題:同樣的Defect實例被不同工具重復報告出來,新增一些Defect檢測規則比較難,處理Defect例外場景比較難。因此,我們可能需要一個統一的Defect檢測工具。
(4)Defect的自動修復。Defect的檢測除了耗時和誤報外,另一個不受歡迎的地方是開發人員不知道怎么修復。因此,Defect的自動修復也是提高Defect受重視程度的一個有效途徑。而且,相比Fault的自動修復,Defect的自動修復對于機器而言是要簡單一些的,因為Defect的類別是有限的可以枚舉的,同時Defect的性質是比較形式化不依賴于業務邏輯的。未來希望能開發出一個統一的Defect修復工具。
到此,關于“總結軟件缺陷的定義、分類、檢測和修復”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。