天天看點

《測試驅動的嵌入式C語言開發》——3.8節測試要做到FIRST

3.8 測試要做到first

在agile in a flash[ol11]一書中,tim ottinger和jeff langr給我們講述了5個單元測試的關鍵屬性。高效的測試需要做到first。

f fast(快速的): 測試要快速,快到程式員可以在每個微小的改動後都運作它們而且不會打斷工作流。

i isolated(獨立的): 測試用例要是獨立的。一個測試不會為另一個測試建立環境。測試中的失敗也要分離開。

r repeatable (可重複的): 測試要可以重複地去運作。可重複意味着自動化。一個循環中的測試總是給出同樣的結果。

s self-verifying(自校驗的): 測試會自己檢查産出,通過時隻給出簡單的“ok”,失敗時給出詳細的細節。

t timely(及時的): 測試要及時做。程式員要及時寫測試,與寫産品代碼緊連(但必須是在前面)來防止軟體bug的産生。

這對于用C來做測試驅動開發來講很有挑戰。tdd最容易應用在完備的功能單元上,而對于通常的C程式設計實踐來講,常常缺失完備的功能單元。子產品的邊界不是很清楚,并且語言本身的結構對此的幫助很有限。

在面向對象語言中,函數圍繞着通用的資料而聚集在一起,資料由函數定義的接口來通路。語言本身直接支援完備單元。完備單元的可測性更好。這就是為什麼tdd在應用于面向對象的程式設計語言時更自然的原因。雖然C并不是面向對象語言,但是這并不能阻止我們從面向對象世界中學到有價值的知識。

當我們的測試做到了first,那麼它将引導我們産出子產品化的設計,這樣的設計支援目前的測試。讓我們拭目以待,來看如何讓代碼子產品化并可測。

繼續閱讀