Pages

搜尋此網誌

2015年6月15日 星期一

測試若水:向大師致敬

測試若水

enter image description here

因為讀了這篇

看板若水

2013 David Anderson 在 Lean Kanban University 上發表了一個演講,其中提到李小龍,引用他的哲學來說明 Kanban,讓我十分驚豔不已.

其實 agile 敏捷開發所追求的也是 TPS 豐田式生產的境界,避免所有一切不必要的浪費,而 agile 避免不必要的浪費,有部分是透過 TDD 來實現的。

TPS 中 lean production 也就是透過看板來進行流程控管,讓生產過程能夠:

  • 視覺化:讓生產狀況可以一目了然,容易發現問題,進而進行改善

  • 平準化:讓每個人的工作時間一致,減少不必要的等待,讓產能最大的發揮。

而 TDD 要做的事情其實也是一樣,透過 SPEC,TDD 的推行讓規格易讀,讓分工容易減少不必要的等待,也因為有 SPEC 的存在,可以很方便的確認系統運作是否正常。

by the way: SPEC 就是 test case,用 SPEC 也就是規格來替代 test case,是因為 SPEC 除了 test 的任務之外,還包含了說明系統運作的任務,如此,在進行相關設計時,就會考慮可讀性。

根據 看板若水 這篇文章,我也來依樣畫葫蘆,向兩位大師,還有看板若水這篇作者致敬一下。

價值導向

  1. 李:

    實用、簡單、快速:一切動作以實用,與勝利為目標

  2. Kanban/Lean:

    一切以客戶價值為最高依歸

  3. SEPC/TDD:

    一切以 SPEC 為最高依歸,實用、簡單、快速,好讀易用,測試驗證簡單快速

以無法為有法

  1. 李:
    人有的高,有的矮,有的胖,有的瘦,有各種各樣的人,對嗎?如果他們練習同一種武術套路,那麼這一套路又適合哪一個呢?

    我覺得,拳擊在運用中的最佳狀態應是沒有絕對的形式,用模式A對付模式B也許並不絕對正確。當你學習實戰時,會學習怎樣出拳,怎樣運用腰腿的力量配合。但在爭鬥當中,就需要根據對手來調適你的動作,這樣就做到了無限。

  2. Kanban/Lean:

    Kanban is a method without methodology.

    他不是教你如何進行軟體開發,是叫你如何做變革管理,以漸進式的方式來改善你的問題。

  3. SEPC/TDD

    TDD 是一個觀念,沒有複雜的應用技巧,學了 TDD 的觀念,不管在寫任何語言都有對應的運作方式,透過 TDD 運用,以漸進式的方式來改善你的問題。

消除浪費

  1. 李:

    格鬥中不該浪費時間與動作,最簡單的就是最好的. 動作經濟學是提高戰鬥「效率」的方法,而提出下面三種作法可落實. 遵照這原則能節省體力與時間. 體力與時間是格鬥中最關鍵的兩個資源,若能經濟地利用這兩項資源就能得到勝利。將體力最大化能保持動作的靈敏度,而將時間最小化則能減少對方反應的時間。

  2. Kanban/Lean:

    要消除浪費. 在 Lean Principle 中,對這部分已經做出很多說明
    WIP: 同時不要做太多事,讓事情變簡單,專心做好一件事,才再處理下一件事
    利用 cycle/lead time來觀察流程改善狀況

  3. SEPC/TDD

    要消除浪費,就是在開始開發之前,先把 SPEC 寫好,除了可以做為閱讀使用,還可以作為往後的驗證、改善、重構,甚至是推動自動化測試。

    且每個規格不要做太多事,專心定義好一個 SPEC,才再處理下一件。

    照三餐運行 SPEC 來觀察系統穩定度。

剛柔並濟

  1. 李:

    李小龍常用水來形容武術應該達到的靈活性。 水有無限的靈活性,它透明可看穿,但有時也能遮蔽視野。 水能分成兩塊,繞過東西,而在另一邊又合而為一。水很溫柔,能用以清洗。但也很剛猛,能拔山倒樹。

  2. Kanban/Lean:

    從你現在有的開始,逐步開始改進. 因此可以搭配你現在任何做法,但是透過視覺化管理,WIP 和持續改進等等,將困難逐漸磨合掉。

  3. SEPC/TDD

    SPEC 搭配 MOCK 技巧就像水一樣,寫 SPEC 也應該保留靈活性,讓開發活動,可以有效並行,MOCK 有無限的靈活性,它可看穿複雜的運作機制,但有時也能隔離尚未實作完成的函式。 MOCK 能讓程式分成兩塊,繞過東西,而在另一邊又合而為一。

結論

我常覺得,學的一個好的觀念,可以讓你少走很多冤枉路,比如 lean 的精神,不浪費的觀念,一旦你體悟到這是很重要的事的時候,在做事情的時後就會想盡辦法不要浪費一絲一毫,而 TDD 為什麼會覺得重要而一講再講,因為在開發過程導入 TDD 節省了太多事情,只是大多都只看到負擔,沒有看到延續長遠的好處。

當然,改變做事的方式是會被抗拒的,但明明問題就在那,你要往北,卻一直往南行,雖然很多時候沒辦法一路向北,但若不嘗試改變,永遠不會更好,共勉之。

張貼留言