2023-03-12影視什么是軟件調試?軟件調試應遵循哪些原則呢英文
這篇文章主要介紹了什么是軟件調試?軟件調試應遵循哪些原則呢英文,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲,下面讓小編帶著大家一起了解一下。
軟件測試應遵循以下十條基本原則:
(1)所有的測試都應追溯到用戶需求。
軟件測試的目標在于揭示錯誤。從用戶角度來看,最嚴重的錯誤是那些導致程序無法滿足需求的錯誤。
(2)應當把“盡早地和不斷地進行軟件測試”作為軟件測試者的座右銘。
應該在測試工作真正開始前的較長時間內就進行測試計劃。測試計劃可以在需求模型一完成就開始,詳細的測試用例定義可以在設計模型被確定后立即開始。因此,所有測試應該在任何代碼被產生前就進行計劃和設計。
(3)pareto原則:測試發現的錯誤中80%很可能起源于20%的模塊中。
當某個功能出問題,其對用戶的影響有多大?然后根據風險大小確定測試的優先級。優先級高的測試,優先得到執行,一般來講,針對用戶最常用的20%功能(優先級高)的測試會得到完全執行,而低優先級的測試(另外用戶不經常用的80%功能)就不是必要的,如果時間或經費不夠,就暫時不做或少做。
(4)完全測試是不可能的,測試需要終止。
測試無法顯示軟件潛在的缺陷,“測試只能證明軟件存在錯誤而不能證明軟件沒有錯誤”。最初的測試通常把焦點放在單個程序模塊上,進一步測試的焦點則轉向在集成的模塊簇中尋找錯誤,最后在整個系統中尋找錯誤。在測試中不可能運行路徑的每一種組合。然而,充分覆蓋程序邏輯,并確保程序設計中使用的所有條件是有可能的。
(5)應由獨立的第三方來構造測試。
第三方測試最大的特點在于它的專業性、獨立性、客觀性和公正性。對于軟件開發商來說,經過第三方測試機構的測試,不僅可以通過專業化的測試手段發現軟件錯誤,幫助開發商提升軟件的品質,而且可以對軟件有一個客觀、科學的評價,有助于開發商認清自己產品的定位。對于行業主管部門以及軟件使用者來說,由于第三方測試機構獨立公正的地位,可以對被測試的軟件有一個客觀公正的評價,幫助用戶選擇合適、優秀的軟件產品。
(6)充分注意測試中的群集現象。
測試后程序殘存的錯誤數目與該程序中已發現的錯誤數目或檢錯率成正比。不要在某個程序段中找到幾個錯誤就誤認為該程序段就沒有錯誤而不再測試,相反應該對錯誤群集的程序段進行重點測試。
(7)盡量避免測試的隨意性。
測試計劃應包括:所測軟件的功能,輸入和輸出,測試內容,各項測試的進度安排,資源要求,測試資料,測試工具,測試用例的選擇,測試的控制方法和過程,系統的配置方式,跟蹤規則,調試規則,以及回歸測試的規定等以及評價標準。
(8)兼顧合理的輸入和不合理的輸入數據。
(9)程序修改后要回歸測試
修改程序后,應該重新進行測試以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。
(10)應長期保留測試用例,直至系統廢棄。
妥善保存測試計劃,測試用例,出錯統計和最終分析報告,為維護等提供方便。
1、應把“盡早和不斷地進行軟件測試”作為軟件開發者的座右銘,實踐證明單元測試能夠盡早發現問題,減少后期測試的錯誤量。可以采用Junit和Jtest來輔助進行單元測試。
2、測試用例應由測試輸入數據、測試執行步驟和與之對應的預期輸出結果三部分組成。
3、應當避免由程序員檢查自己的程序。(指后期系統測試階段,不包括單元測試)
4、測試用例的設計要確保能覆蓋所有可能路徑。在設計測試用例時,應當包括合理的輸入條件和不合理的輸入條件。不合理的輸入條件是指異常的,臨界的,可能引起問題的輸入條件。
5、充分注意測試中的群集現象。經驗表明,測試后程序殘存的錯誤數目與該程序中已發現的錯誤數目或檢錯率成正比。應該對錯誤群集的程序段進行重點測試。
6、嚴格執行測試計劃,排除測試的隨意性。測試計劃應包括:所測軟件的功能,輸入和輸出,測試內容,各項測試的進度安排,資源要求,測試資料,測試工具,測試用例的選擇,測試的控制方法和過程,系統的配置方式,跟蹤規則,調試規則,以及回歸測試的規定等等以及評價標準。
7、應當對每一個測試結果做全面的檢查。
8、妥善保存測試計劃,測試用例,出錯統計和最終分析報告,為維護提供方便。
軟件測試的對象:軟件測試并不單純等同于程序測試。軟件測試應該貫穿整個軟件定義與開發整個期間。因此需求分析、概要設計、詳細設計以及程序編碼等各階段所得到的文檔,包括需求規格說明、概要設計規格說明、詳細設計規格說明以及源程序,都應該是軟件測試(評審)的對象。在對需求理解與表達的正確性、設計與表達的正確性、實現的正確性以及運行的正確性的驗證中,任何一個環節發生了問題都可能在軟件測試中表現出來。
軟件測試的原則如下:
1、測試顯示缺陷的存在。
測試可以顯示缺陷的存在,但不能證明系統不存在缺陷。測試可以減少軟件中存在缺陷的可能性,但即使測試沒有發現任何缺陷,也不能證明軟件或系統是完全正確的,或者說是不存在缺陷的。
2、窮盡測試是不可能的。
窮盡測試是不可能的,當滿足一定的測試出口準則時測試就應當終止。考慮到所有可能輸入值和它們的組合,以及結合所有不同的測試前置條件,這是一個天文數字,我們沒有可能進行窮盡測試。
3、殺蟲劑悖論。
測試用例需要經常的評審和修改,不斷增加新的不同的測試用例來測試軟件或系統的不同部分,保證測試用例永遠是最新的,即包含著最后一次程序代碼或說明文檔的更新信息。
4、測試的盡早介入。
軟件測試人員要盡早地且不斷地進行軟件測試,以提高軟件質量降低軟件開發成本。
軟件測試:
是伴隨著軟件的產生而產生的。早期的軟件開發過程中軟件規模都很小、復雜程度低,軟件開發的過程混亂無序、相當隨意,測試的含義比較狹窄,開發人員將測試等同于“調試”,目的是糾正軟件中已經知道的故障,常常由開發人員自己完成這部分的工作。
軟件調試技術包括:
1、分析和推理;
設計人員和開發人員根據軟件缺陷問題的信息,分析和推理調試軟件。
根據軟件程序架構自頂向下縮小定位范圍,確定可能發生問題的軟件組件。
根據軟件功能,軟件運行時序定位軟件問題。
根據算法原理,分析和確定缺陷問題發生的根源。
2、歸納類比法;
歸納法是一種從特殊推斷一般的系統化思考方法,歸納法調試的基本思想是:從一些線索(錯誤征兆)著手,通過分析它們之間的關系來找出錯誤。該方法主要是根據積累的工作經驗和案例處理調試工作。
根據工作經驗和比對程序設計中類似問題的處理方式進行調試工作。
咨詢相關部門和有經驗的相關人員。
查找相關文檔和案例,為處理問題提供思路和方法。在軟件開發過程中,通常對每個缺陷問題進行跟蹤管理,將解決問題的方案和過程詳細記錄。
收集出錯的信息,列出數據,包括輸入,輸出,歸納整理,發現規律,從線索除法,尋找線索之間的聯系。也就意味著:從特殊到一般。
3、跟蹤回朔;
在小程序中常用的一種有效的調試方法,一旦發現了錯誤,人們先分析錯誤的征兆,確定最先發現“癥狀“的位置然后,人工沿程序的控制流程,向回追蹤源程序代碼,直到找到錯誤根源或確定錯誤產生的范圍。
例如,程序中發現錯誤處是某個打印語句,通過輸出值可推斷程序在這一點上變量的值,再從這一點出發,回溯程序的執行過程,反復思考:“如果程序在這一點上的狀態(變量的值)是這樣,那么程序在上一點的狀態一定是這樣···“直到找到錯誤所在。
在軟件開發通常采用基線與版本管理。基線為程序代碼開發提供統一的開發基點,基線的建立有助于分清楚各個階段存在的問題,便于對缺陷問題定位。軟件版本在軟件產品的開發過程中生成了一個版本樹。軟件產品實際上是某個軟件版本,新產品的開發通常是在某個軟件版本的基礎上進行開發。
開發過程中發現有問題,可以回退至版本樹上的穩定版本,查找問題根源。
通過基線版本序列可以追蹤產品的各種問題,可以重新建立基于某個版本的配置,可以重現軟件開發過程中的軟件缺陷和各種問題,進行定位并查找問題根源。
4、增量調試;
軟件開發大多采用軟件配置管理和持續集成技術。開發人員每天將評代碼提交到版本庫。持續集成人員完成集成構建工作。
可以通過控制持續集成的粒度(構建時間間隔),控制開發人員提交到版本庫的程序代碼量,從而便于對缺陷問題定位。
通常每天晚上進行持續集成工作,發現問題時,開發人員實際上只需要調試處理當天編寫的代碼。
5、寫出能重現問題的最短代碼;
采用程序切片和插樁技術寫出能重現問題的最短代碼調試軟件模塊。
程序切片程序切片是通過在特定位置消除那些不影響表達式計算的所有語句,把程序減少到最小化形式,并仍能產生給定的行為。
使用切片技術,可以把一個規模較大并且較復雜的軟件模塊轉換成多個切片程序。這些切片程序相對原來的程序,簡單并且易于調試和測試。
程序插樁程序插樁方法是在被測程序中插入某些語句或者程序段來獲取各種信息。通過這些信息進一步了解執行過程中程序的一些動態特性。一個軟件組件的獨立調試和測試需要采用插樁技術,該組件調用或運行需要樁模塊。在軟件模塊的調試過程中程序切片和程序插樁可以結合起來使用。
6、日志追蹤技術;
日志是一種記錄機制,軟件模塊持續集成構建過程中,日志文件記錄了有用信息。若構建失敗,通過查看日志文件,將信息反饋給相關人員進行軟件調試。
7、調試和測試融合的技術;
測試驅動開發。
測試驅動開發是一種不同于傳統軟件開發流程的開發方法。在編寫某個功能的代碼之前先編寫測試代碼,然后編寫測試通過的功能代碼,這有助于編寫簡潔可用和高質量的代碼。
開發與測試融合。
程序開發人員除了進行程序代碼的編寫,白盒測試,也要完成基本的功能測試設計和執行。這樣有助于程序開發人員更好地開展調試工作。
程序開發人員可以通過交叉測試來解決測試心理學的問題(不能自己測試自己)。采用這種模式測試人員的數量會減少,專業的測試人員去做其他復雜的測試工作。
研發中的很多低級缺陷會盡早在開發過程中被發現,從而減少缺陷后期發現的成本。
8、強行排錯;
這種調試方法目前使用較多,效率較低,它不需要過多的思考,比較省腦筋。例如:
通過內存全部打印來調試,在這大量的數據中尋找出錯的位置。
在程序特定位置設置打印語句,把打印語句插在出錯的源程序的各個關鍵變量改變部位,重要分支部位,子程序調用部位,跟蹤程序的執行,監視重要變量的變化。
自動調用工具,利用某些程序語言的調試功能或專門的交互式調試工具,分析程序的動態過程,而不必修改程序。
應用以上任一種方法之前,都應當對錯誤的征兆進行全面徹底的分析,得出對出錯位置及錯誤性質的推測,再使用一種適當的調試方法來檢驗推測的正確性。
9、演繹法調試;
演繹法是一種從一般原理或前提出發,經過排除和精華的過程來推導出結論的思考方法,演繹法排錯是測試人員首先根據已有的測試用例,設想及枚舉出所有可能出錯的原因作為假設,然后再用原始測試數據或新的測試,從中逐個排除不可能正確的假設,最后,再用測試數據驗證余下的假設確是出錯的原因。
列舉所有可能出錯原因的假設,把所有可能的錯誤原因列成表,通過它們,可以組織,分析現有數據。
利用已有的測試數據,排除不正確的假設。
仔細分析已有的數據,尋找矛盾,力求排除前一步列出所有原因,如果所有原因都被排除了,則需要補充一些數據(測試用例),以建立新的假設。
改進余下的假設;
利用已知的線索,進一步改進余下的假設,使之更具體化,以便可以精確地確定出錯位置;
證明余下的假設。
擴展資料:
軟件調試技術的內容:
CPU的調試支持,包括異常、斷點、單步執行、分支監視、JTAG、MCE等。
Windows操作系統中的調試設施,包括內核調試引擎、用戶態調試予系統、驗證器、Dr.Watson、WER、ETW、故障轉儲、WHEA等。
VisualC/C++編譯器的調試支持,包括編譯期檢查、運行期檢查,以及調試符號。
WinDBG調試器的發展歷史、模塊結構、工作模型、使用方法、主要調試功能的實現細節,以及遍布全書的應用實例。
內核調試、用戶態調試、JIT調試、遠程調試的原理、實現和用法。異常的概念、分發方法、處理方法(SEH、VEH、CppEH),未處理異常,以及編譯器編譯異常處理代碼的方法。
調試符號的作用、產生過程、存儲格式和使用方法。棧和堆的結構布局、工作原理和有關的軟件問題,包括棧的自動增長和溢出,緩;中區溢出,溢出攻擊,內存泄漏,堆崩潰等。
參考資料:百度百科-軟件調試