TDD之團隊進行單元測試的規範

近期,給項目化開發人員做技能培訓時,整理了一下團隊在DOD中對於單元測試最佳實踐和要求,作為單元測試規範,如下:

【原則】開發人員在編寫代碼過程中需要恪守的基本準則,在日常工作中需要在基本原則的指導下完成代碼開發任務。

【規則】開發人員在日常開發過程中必須嚴格遵守的規則,這是系統代碼得以正常穩定運行的基礎,是以團隊合作方式進行軟體開發的基本保證。

【建議】建議部分提出的內容,希望員工能夠盡量遵守,這些內容是經驗豐富的開發人員在長期開發中積累的寶貴經驗教訓,有助於編寫出高質量的代碼。

【原則1】遵循TDD三原則(定律)

  • 沒有用例失敗時,不要寫產品代碼
  • 當有用例失敗時,不要寫更多的用例
  • 僅寫讓用例通過的代碼

【原則2】TDD遵循測試的FIRST原則

  • F(Fast):測試要能快速運行
  • I(Isolate):測試用例要獨立,不能相互依賴
  • R(Repeatable):測試要可以重複運行
  • S(Self-verifying):測試會自己檢查產出
  • T(Timely):測試要及時做,與寫代碼緊密相連

【原則3】TDD是開發行為,是DOD

  • TDD是開發必須的基本技能
  • 交流的基本語言
  • DoD-開發完成的定義,團隊成員認可,不斷擴充

【原則4】代碼是債務,單元測試用例也是,優先修復並且不斷重構

【規則1】每一個用例測試一個概念/功能

測試用例遵循SRP。當測試失敗時,很容易知道用例失敗的原因。

【規則2】測試名稱遵循BDD(Gievn-When-Then)書寫模型:Given/When/Then

假如[當測試開始時,系統所處狀態的一些重要特徵],當[用戶執行某些動作後],那麼[系統新的狀態的一些特徵]

TEST(RecurrNonProrateStateChangeReactiveTest, GivenFeeIs100$PerMonthAndBenefit100SMS_WhenReactiveAt20thJanuary_ThenDeduct100$AndBenefit100SMS)

【規則3】測試用例按照構造數據/執行功能/檢測結果進行代碼

用例編寫也遵循BDD(Gievn-When-Then)書寫模型。並按照構造數據/執行功能/檢測結果分塊。

【規則4】將具有相同測試環境的用例放在同一個測試套件中

將構造測試環境及清理測試環境的代碼分別放在 Setup及 Teardown 中,可以消除重複的代碼,實現代碼的最大可復用性。

【建議1】用例業務場景複雜時,可以通過注釋提高可讀性

除了用例名稱,可以通過注釋可以詳細描述用例的測試場景。

【建議2】通過用例套件來測試跨進程間的協議正確性

例子:SY測試時,OCPro生成內部消息,轉發給你進程sydealsnr來處理。可以在一個套件來測試這兩個用例,並嚴重介面。

TEST_F(TTest_OcproSendSNRMsg, GivenTriggerPCRF_WhenOcproUSURating_ThenOcproSendSnrMsgSucessful)

TEST_F(TTest_OcproSendSNRMsg, GivenSySpInfo_WhenSyDealSnrReceiveMsgFromOcpro_ThenReturnSnrAVPSucessful)

 【建議3】用例代碼和業務代碼獨立,並且建立對應目錄,在內部可以按照業務分層建立目錄。

 【建議4】每個用例套件一個獨立的CPP文件。用例公用代碼文件以gtest_來區分業務代碼。

【建議5】用例數據保持無關,保證可以並行執行,提高運行速度

因為歷史原因或者特殊原因,無法做到數據獨立,用例非utest_開頭,優先串列執行;文件名以utest_前綴的用常式序並行執行。

【建議6】為了方便驗證功能,某些特殊場景也可以直接測試private和protected函數

在對應頭文件包含前加上轉移說明

#include "gtest/gtest.h"

#define private public

#define protected public

#include "DAOInterface.h"

因為每個未證明正確的代碼都是有嫌疑的,因此新增單元測試用例的最佳時機就是新增功能和修復功能之前。

來源: 51Testing軟體測試網

mp.weixin.qq.com/s/JAZw


推薦閱讀:

性能測試必知的21件事:認清性能問題
示波器性能指標
8種策略——教你如何玩轉端到端的移動測試
在 Linux 上檢測 IDE/SATA SSD 硬碟的傳輸速度
成為測試大牛路上的心得與總結

TAG:單元測試 | 測試 |