测试驱动开发_DevOps之浅谈测试驱动开发
生活随笔
收集整理的這篇文章主要介紹了
测试驱动开发_DevOps之浅谈测试驱动开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
“測試驅動開發(Test-Driven Development, TDD),以測試作為開發過程的中心,它要求在編寫任何產品代碼之前,先編寫用于定義產品代碼行為的測試,而編寫的產品代碼又要以使測試通過為目標。當我們在當前結構中找到最佳設計時,由于有足夠的測試做保障,我們可以改動現有設計而不必擔心破壞已完成的功能。使用這種開發方法,我們可以讓設計更加優良,能編寫出可測試的代碼,同時還能避免在不切實際的假設基礎上過度的設計系統。要得到這些好處,只需不斷添加可執行測試,一步步地驅動設計,從而最終實現整個系統簡單從好用。何謂測試驅動開發本文所說的TDD為單元測試驅動開發,是敏捷開發中的一項核心實踐和技術,也是一種設計方法論。它的主要推動者是 Kent Beck。TDD的周期為“測試-編碼-重構”。測試先行,然后編碼,最后設計。這種“設計后行”的思維方式有別于傳統的“設計-編碼-測試”過程中的設計。這種事后設計的方法可稱為重構,表示把當前的設計轉化成一個更佳的設計的過程。TDD的周期也可以用“紅-綠-重構”表示。1、先寫測試第一步,在寫測試也是在做設計。我們是在設計API,即用來訪問新功能的接口。編碼之前寫測試,我們會很自然地考慮新代碼的調用方式。注意:測試的粒度應為“正好足以失敗”。而不是一次寫出整個功能點的測試,再用一個小時寫代碼讓測試通過。2、寫恰好足夠的代碼新添加的測試之所以會失敗,是因為它指出了系統應該有但尚未實現的功能。我們應該只用花幾分鐘就能實現這項功能,測試失敗的狀態不應持續太長時間。注意:寫恰巧足夠的代碼是為了讓測試盡快通過。因此當前的實現方式可能不是最優。待功能實現、測試通過后,再來解決這個問題的。有測試做保障,就可以進行重構。3、重構重審現有的代碼設計,以改進優化。為何測試驅動開發TDD是一種設計和開發方法,它能幫我們從項目開始就構建出可運行的軟件,以增量的方式添加新功能,使軟件在整個開發過程中都能工作良好。通過演進式設計,并且應用重構優化每一步的設計,我們可以防止代碼質量隨著時間推移而下降。高覆蓋率的自動化單元測試又是軟件的一道安全網。TDD能幫我們正確的做事。
一、增量式開發
所有敏捷軟件開發過程,即要保證軟件可隨時可發布,且每天都能持續產生可部署的版本。下圖描述的過程中,已完成且測試過的功能不斷地累積。在每個時間點上,都只有少量的功能尚未完成或集成。很多項目會推遲交付日期或者交付質量不過關,是因直到最后一刻開發人員還在趕工。TDD可以解決這個問題。在TDD過程中,我們會小步地前進。每一小步都會產生一個工作良好的產品,每一步(以分鐘計算)都會距離目標更近一些。在迭代、增量式的開發過程中,我們需要不斷地在“實現新功能”和為支持新功能而“調整設計乃至架構”兩項任務間來回切換。演進式設計是指在系統不斷添加更多的功能和行為的過程中,不斷地微調代碼結構。在代碼生命周期的任何時刻,代碼所展現的都是開發人員為實現現有功能所做的最好的設計。用這種方法,我們可以演化出能經受實踐檢驗的架構。二、重構以保持代碼的健康
在小步前進的過程中,會不斷擴展當前的設計以支持新功能,也會不斷拋棄舊概念,引進新概念。這種情況下,軟件的設計必然會變得很不一致。但通過重構,既可以演進式地設計,又能保持系統設計不出問題。具體重構方法可參考Martin Fowler的著作《重構:改善既有代碼的設計》,本文僅介紹重構原則:1、重構是種紀律嚴明的方法重構是指用某種嚴格的方式重構代碼。重構或許會顯著地改變當前設計,不過這種改變總是小步進行的,而且每一步都會驗證代碼的行為沒有改變。2、重構是種轉換過程重構是兩種狀態間的轉換。在初始狀態中,代碼的設計存在一定問題,而在目標狀態中這些問題都已被修復。3、重構會改變內部結構重構用于改變系統內部結構—代碼,因此大部分重構手法都會涉及實現細節。4、重構保持原有行為無論怎么修改代碼,所變化的都只有代碼的設計和內部結構,外部可見的行為和功能會維持原樣。換言之,代碼的用戶應當對重構毫無察覺。如何確定重構沒有改變系統的外部行為呢?測試可以確保軟件正常運行。三、通過自動化測試保證軟件正常運行
實施TDD過程中會編寫大量的單元測試用例。而高覆蓋率的單元測試可作為自動化回歸測試,成為重構的安全網,保證重構工作不破壞已有的功能。1、用自動化測試做保護在整個開發過程中,回歸測試會被反復執行許多遍,以保證系統已有功能正常運行。自動化回歸測試必須容易、快速地執行。如果開發人員在每次微小變動后都運行自動化測試,可以精確地定位問題。2、快速獲得反饋通過與“持續集成”提交構建流水線結合,提交代碼前運行與本次改動相關的單元測試,通過質量門禁判斷代碼能否提交版本管理系統,以快速反饋。如何測試驅動開發如何實施TDD,如何編寫及通過測試,首先應從選擇測試開始。1、選擇測試技巧深入細節與整體考慮
整體優先:能夠很快的驗證總體設計,但推遲了細節方面的工作進度。
探索未知與輕車熟路
最大限度地獲取價值與摘取現成的成果
走通基本功能路徑(happy path)與先處理出錯情況
偽實現
三角法
顯而易見的實現
絕不跳過重構
盡快變綠
出錯后放慢腳步
變更行覆蓋率,閾值100%。
增量程序案例執行成功率,閾值100%。
增量技術規范問題,閾值為無主要、嚴重、阻塞問題。
增量Sonar問題,閾值為無嚴重、阻塞問題。
一、實施效果
抽取智能小象數據進行TDD效果分析如下:1、手工測試發現缺陷數量逐月下降智能小象項目自7月版采用TDD研發模式以來測試質量有顯著提升,每個版本的手工測試發現的缺陷數量在逐月下降。如下圖:2、千行代碼缺陷密度逐月下降二、通過組織單元測試用例評審保證測試先行度
當前暫未啟用開發者平臺DOD門禁中的“測試先行”指標,而是在編碼前組織由需求、開發、測試共同參與的UTDD Reviw單元測試用例評審,來確保測試先行。并使需求、開發、測試在研發前期對需求達成一致,減少返工率。三、在敏捷迭代研發模式中應用TDD
在迭代周期內采用TDD的研發模式,附聚富通項目組迭代內研發測試工作詳情。四、下一步工作
1、將繼續推動各研發部門需遵照中心測試驅動開發工作指引,做好單元測試腳本設計工作,夯實開發質量,組織好單元測試驅動開發方案與腳本的評審工作。2、對中心測試驅動開發實施情況進行評價,當前已有評價指標包括測試先行度、變更程序覆蓋率(變更程序的行覆蓋率、變更程序的分支覆蓋率、核心程序的變更行覆蓋率)、提交功能測試首日準入通過率等。3、調研驗收測試驅動開發(ATDD)和行為驅動開發(BDD)。END
總結
以上是生活随笔為你收集整理的测试驱动开发_DevOps之浅谈测试驱动开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遇到automation服务器不能创建对
- 下一篇: 用代码创建工程并添加内容