理解這八大優勢,纔算精通單元測試

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"什麼是單元測試"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在計算機編程中,單元測試是一種軟件測試方法,通過該方法可以測試源代碼的各個單元以確定它們是否適合使用。 單元是最小的可測試軟件組件, 它通常執行單個內聚功能。"},{"type":"text","marks":[{"type":"strong"}],"text":"單元測試就是是指對這個最小可測試組件——即單元進行檢查和驗證。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":"br"}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元體量小,因此比大塊代碼更容易設計、執行、記錄和分析測試結果。 通過單元測試發現的缺陷很容易定位,並且相對容易修復。單元測試的目標是將程序分離成各自獨立的部分,並測試各個部分是否正常工作。它將可測試軟件的最小部分與代碼的其餘部分隔離開來,並確定其行爲是否與預期的完全一致。單元測試能在使用過程中發現很多缺陷,在這種過程中證明自身價值。"},{"type":"text","marks":[{"type":"strong"}],"text":"它實現了測試過程的自動化,減少了發現應用程序中更復雜部分中包含的錯誤的困難,並且由於可以關注到每一個單元而提高測試覆蓋率。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"單元測試工具"}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/03/03cc9a109cedb679964fab984e5e254c.png","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":1}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"常見單元測試框架有JUnit, TestNG, PHPUnit, PyTest, Jest, CppUnit, GTest, QTest 等八種,目前國產主流項目管理軟件"},{"type":"link","attrs":{"href":"http://www.zentao.net/?u=erin","title":null},"content":[{"type":"text","text":"禪道"}]},{"type":"text","text":"全面集成這八種單元測試框架,打通持續集成閉環,將測試用例細分了單元測試用例和功能測試用例,可以直接在禪道頁面上導入各種各樣的單元測試框架的執行結果。這八種單元測試框架通過禪道ZTF與Jenkins持續集成功能打通。用戶發起任務後,通過ZTF自動執行測試腳本,把單元測試的結果回傳給禪道,二者合作打通了持續集成閉環,打通了項目管理工具和持續集成工具之間的溝壑。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"爲何單元測試是敏捷方法論"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Apiumhub,我們採用敏捷方法,並且大量應用單元測試。單元測試是極限編程(Extreme Programming,XP)的一個特徵,極限編程是敏捷軟件開發方法之一,它能帶來快速的測試驅動開發。我們堅信敏捷就要做持續集成和測試驅動開發。通過測試驅動開發,開發人員在開發代碼時會創建單元測試,以便每個單元測試通常在編寫代碼之前就測試一小段軟件代碼。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"單元測試的優勢"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試提供了許多好處,包括及早發現軟件錯誤、促進變化、簡化集成、提供文檔來源以及許多其他優點,接下來將對其進行詳細介紹。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"1、使流程更靈活"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試的主要好處之一是它使編碼過程更加靈活,更遵循敏捷開發方法論。 當向軟件中添加越來越多的功能時,一般需要更改舊的設計和代碼。 但是,更改已經測試過的代碼既冒險又高成本。 如果此時採用單元測試,那麼就可以放心地進行重構。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試實際上與各種類型的敏捷編程緊密結合,因爲測試被內置在其中,讓程序員可以更輕鬆地進行更改。 換句話說,"},{"type":"text","marks":[{"type":"strong"}],"text":"單元測試有助於安全重構。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"2、保證代碼質量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試可以提高代碼的質量。 它能夠確定在進一步發送代碼進行集成測試之前可能出現的每個缺陷,在實際編碼之前編寫測試讓人更難以考慮到這種問題。 而單元測試可以"},{"type":"text","marks":[{"type":"strong"}],"text":"暴露出極端情況,讓人編寫出質量更高的代碼"},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"3、儘早發現軟件Bug"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用單元測試會"},{"type":"text","marks":[{"type":"strong"}],"text":"讓問題在早期就被識別發現"},{"type":"text","text":"。由於單元測試是由在集成之前測試單個代碼的開發人員執行的,這樣可以很早地發現問題,並在不影響其他代碼片段的情況下解決問題。這既包括實施中的Bug,也包括單元規範中的缺陷或缺失部分。"}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/cc/cc193ac4ecfbc52ade0fefa14b4eae26.jpeg","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"4、促進變化並簡化集成"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試允許在將來重構代碼或升級系統庫,並確保該模塊仍然正常工作。單元測試能監測到可能違反設計合同的變化,有助於維護和更改代碼。單元測試還可以"},{"type":"text","marks":[{"type":"strong"}],"text":"減少新開發功能中的缺陷,減少現有功能更改時出現的錯誤"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然後通過單元測試對應用程序的各個部分進行測試,驗證每個單元的準確性,再將單元集成到應用程序中。由於已經對各個單元進行了驗證,在之後的集成過程中對應用程序進行測試就變得更容易。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"5、提供文檔"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試"},{"type":"text","marks":[{"type":"strong"}],"text":"提供系統的文檔"},{"type":"text","text":"。希望瞭解單元提供了哪些功能以及如何使用這些功能的開發人員可以查看單元測試,以獲得對單元接口(API)的基本理解。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"6、簡化調試過程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試有助於"},{"type":"text","marks":[{"type":"strong"}],"text":"簡化調試過程"},{"type":"text","text":"。 如果測試失敗,則僅需要調試代碼中最新的更改,這樣以往的冗長的調試過程將被大大縮減。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"7、設計"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"率先編寫測試會迫使程序員在編寫代碼之前就仔細考慮設計和其他必須完成的工作。 這不僅可以讓人專注,還可以創建更好的設計。 測試一段代碼會迫使程序員定義該代碼的責任。如果可以輕鬆做到這一點,則意味着代碼的職責是被明確定義的,因此將具有很高的凝聚力。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"8、降低成本"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試會更早地發現錯誤,有助於"},{"type":"text","marks":[{"type":"strong"}],"text":"降低錯誤修復的成本"},{"type":"text","text":"。想象一下在開發的後期階段(比如在系統測試或驗收測試中)才發現Bug的成本將有多高。當然,前期檢測到的錯誤也更容易修復,因爲後期檢測到的錯誤通常是許多更改的結果,測試人員可能就不會真正知道是哪一個導致了錯誤。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單元測試是針對代碼單元的獨立測試,核心是“獨立”,優勢來源也是這種獨立性,而所面臨的不足也正是因爲其獨立性:既然是“獨立”,就難以測試與其他代碼和依賴環境的相互關係。 "},{"type":"text","marks":[{"type":"strong"}],"text":"單元測試與系統測試是互補而非代替關係。"},{"type":"text","text":"單元測試的優勢,正是系統測試的不足,單元測試的不足,又恰是系統測試的優勢。不能將單元測試當做解決所有問題的萬金油,而需"},{"type":"text","marks":[{"type":"strong"}],"text":"理解其優勢與不足,揚長避短,與系統測試相輔相成,實現測試的最大效益。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"參考文獻:Ekaterina Novoseltseva.8 Benefits of Unit Testing[OL].(2019-08-30)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https://dzone.com/articles/top-8-benefits-of-unit-testing"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":"br"}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章