l

2014年6月9日 星期一

多層次,非傳銷XD

June 6 07:00~07:55

image

蛋糕越多層越好挑眉質疑

 

以前念書的時候,指導教授告訴Teddy:「學習東西要有層次,如果只是學到皮毛,薄薄的一層,一刮掉就沒了」。後來有一次讀到Kent Beck的某一本書,Kent Beck提到,所謂「厲害的人」不是自己很強然後獨善其身不管別人死活,而是能幫助別人,使別人原本認為很難的事情,在他的幫助之下變得很簡單。Teddy認為,要做到Kent Beck口中那種「厲害的人」,其中一個很重要的條件,就是「要有層次」。

鄉民甲:什麼叫做「要有層次」?

以TDD為例,至少就有以下幾種層次:

  • 知道TDD是一種藉由測試來定義規格,並以此規格來引導出設計(實作)的一種軟體開發方法。
  • TDD所寫出的測試案例是一種黑箱測試,黑箱測試重視的是「規格」,而不像白箱測試需要看到程式碼的內容來設計測試案例。因此,嚴謹採用TDD的開發人員,會將「撰寫測試案例」的重點擺在「定義使用者所期待的系統行為(規格)」,而不是白箱測試所提到的測試涵蓋率。
  • 從Alexander的模式理論來看,設計有兩個面向:決定context或是決定form。傳統的設計方式,先寫production code再寫test code,是先設計form,再以測試案例確定這個form與context的合適程度。TDD則是反過來,先決定context,然後再決定form。為什麼要反過來?因為有時候直接設計form並不容易,或是當context不明確的時候,開發人員很容易做出過度設計(over design)的產品。如果設計的順序可以改成「定義出非常詳盡的context,而form將自然產生」,可以簡化設計的問題
  • 實務上要定義非常詳盡的context是很難的(定義出非常詳盡的需求或規格),而不管context就直接把form設計出來,也很難(因為可能做出不是使用者要的東西)。所以在大部分的情況下,設計經常是遊走於兩端之間。探索一部分context,做一點form,得到一些回饋,然後再修正。
  • 上面第一點提到TDD是一種「藉由測試來定義規格」方法,為什麼不用傳統的方式把規格寫在文件裡面就好了?請參考〈BDD(1):詳盡的文件就是可用的軟體〉。

還有沒有其他層次?一定還有,例如TDD如何得到良好的設計或軟體架構?難道真的是只要TDD+Refactoring就辦得到嗎?TDD有辦法做UI設計嗎?只要不斷的深入探討,就可以加深自己的層次感。

***

友藏內心獨白:不同層次可以解答不同的疑惑。

1 則留言:

  1. 如同之前有其他讀者的留言所說,你不可能拿TDD程式碼給客戶看說這就是軟體規格!TDD永遠也取代不了真正的文件規格!

    回覆刪除