2010年11月16日

以TDD開發『數字轉中文』程式

嘗試以TDD(測試導向開發, Test-Driven development)方式進行開發
程式片段與測試可以看這裡
過程大致如下:

  1. 不用多說就先寫出測試函數ConvertNum2CStringTest1,先測ConvertNum2CString(1)吧!(如果為了方便先寫空程式再產生Testing也可)
  2. 再讓ConvertNum2CString()傳入1可以得到"一"
  3. 接下來讓個位數正確
  4. 讓千位數以下有『?千?百?十?』
  5. 考慮中間位數為0補上『零』
  6. 考慮中間位數連續多個0只補一個『零』
  7. 當尾數為0不可補『零』喲
  8. 接下來處理每四位數的『萬、億』
  9. 『萬、億』中間補零問題
  10. 差不多了,試試『一億』『二十億零一』之類的


簡略的心得:
  1. 心態調整:採用TDD會增加工作量?我覺得可以換個方向想,本來程式開發的過程就會不停的進行測試,現在能把每階段的測試過程保留下來,並且自動的重複執行,反而節省了測試成本。
  2. 撰寫過程:TDD的開發過程中,先從最簡單的空函式,再一步一步處理下一個問題...,會迫使你用漸進的思考方式,而不用一開始就考慮整個運算架構(如:怎麼補零,『萬、億』的進位),可以說非常合乎敏捷式開發,沒遇到問題前先用最簡單方式作的精神。
  3. 反覆測試:每當為了處理了更複雜的問題,而對原來的程式進行修改或重構,只要再執行一次測試,就不怕原來對的地方被改錯了。可以說修改時更有信心。
  4. 邊創作邊毀滅:之前看過對測試導向的一個說法,你要在兩個角色之間一直切換:先扮演找碴者,極盡所能想出能讓現有程式出錯的測試;再扮演創造者,解決這個出錯問題。這樣一來,能強迫自己單方面作為程式設計者,對成果可能有的姑息心態。
當然,目前只是抱著玩玩看的心態,寫個小功能。如果是整個系統都要這樣開發,一定會有更多的挑戰。

沒有留言:

張貼留言