l

2014年9月30日 星期二

Test Double(3):Dummy Object

Sep. 22 18:02~18:47, 20:38~21:05

螢幕截圖 2014-09-22 22.08.45

 

待測系統

從這一集開始要分別用五種不同的Test Double來實作測試案例。首先先介紹待測系統,上圖是一個套用Command設計模式的監控系統,Server物件有四個函數:

  • addCommand:傳入一個ICommand物件(實作ICommand介面的物件),Server會利用向它註冊的ICommand物件來執行監控工作。
  • removeCommand:移除一個ICommand物件。
  • getCommandSize:傳回註冊的ICommand物件個數。
  • monitor:逐一呼叫每一個向它註冊的ICommand物件的execute函數以執行監控工作。

 

ICommand是一個介面(interface),只有一個函數:

  • execute:監控某個特定的設備,監控結果以Result物件表示。

 

Result物件有兩個函數:

  • getStatus:傳回整數代表監控結果,1表示OK,2表示CRITICAL。
  • getMessage:傳回字串代表監控結果的敘述。

 

目前這個監控系統有一個DoorCommand,可以用來監控門是否被打開或關閉。DoorCommand透過IDoor介面來判斷門的開啟或關閉狀態。不同sensor的廠商必須要提供IDoor介面,我們才可以將它安裝在門上面作為監控之用。

***

實作Dummy Object

接下來要練習的題目是「使用Dummy實作ICommand,測試Server.getCommandSize函數」。請鄉民們想一下,要如何讓下列測試案例通過?

螢幕截圖 2014-09-22 20.42.23


 

上面的測試案例期待getCommandSize()回傳2,也就是代表有兩個ICommand物件向Server註冊。因此只要呼叫server.addCommand()兩次就可以讓測試案例通過。但是addCommand函數需要一個ICommand物件作為參數,先是看看直接傳入null可不可以。

螢幕截圖 2014-09-22 20.51.44

 

執行結果失敗,看來addCommand函數有檢查傳入的ICommand物件不能是null。

螢幕截圖 2014-09-22 20.55.02

***

為了透過addCommand函數向Server註冊兩個ICommand物件,必須要傳入一個非null的ICommand物件進去。這個ICommand物件可以沒有任何的實作邏輯,只是為了符合addCommand的介面所需而產生的物件。請參考下列的DummyCommand實作。

螢幕截圖 2014-09-22 20.57.34

 

有了DummyCommand之後,就可以使用它來完成測試案例。

螢幕截圖 2014-09-22 21.00.38

 

執行結果通過,完成Dummy Object練習。

螢幕截圖 2014-09-22 21.01.30

***

友藏內心獨白:這算打假球嗎?

2014年9月29日 星期一

不是我不教,是你不肯學

Sep. 24 03:29~04:40

螢幕截圖 2014-09-24 03.36.22

Alexander的半隱蔽花園模式語言

 

有一次Teddy在某個場合介紹如何用Alexander的pattern方法來設計軟體架構,Teddy提到這是一個「整體先於部分,然後透過差異化的過程將整體逐步展開」的方法,並且舉了好幾個例子,包含:

例外處理設計

螢幕截圖 2014-09-24 03.44.27

 

容錯設計

螢幕截圖 2014-09-24 03.45.25

 

數位教材設計

螢幕截圖 2014-09-24 03.46.48

 

持續整合專案設計

螢幕截圖 2014-09-24 03.47.49

 

其中「數位教材設計」與「持續整合專案設計」這兩個「模式語言」(pattern language)是Teddy與指導教授所找尋出來的模式,並套用Alexander的方式將這些模式組織成一個體系。這兩組pattern分別在PLoP 2004與Asian PLoP 2011在美國與日本發表過(證明Teddy花了很多時間持續研究pattern微笑),所以絕對不是Teddy自己隨便唬爛亂說的。

***

在演講的過程中Teddy提到:「套用Alexander的方法做設計需要先找到第一個pattern,然後一次套用一個pattern將整個設計逐步展開。」演講結束後有一位鄉民跑來問問題。

鄉民:要怎麼找到第一個pattern?

Teddy:Alexander的方法稱為pattern language,是一種pattern-based或是說pattern-oriented的方法。你必須先學會一定數量的pattern,就好像學英文要先有足夠的字彙量,才有能力造句寫文章或是看懂英文文件。

鄉民:這樣喔,可是我只是想知道要怎麼找到第一個pattern就好了啊…

Teddy:以軟體設計為例,你必須知道足夠多的architecture patterns與design patterns,在做設計的時候才有「設計單字」可以使用。市面上有很多這方面的書,例如POSA(Pattern-Oriented Software Architecture)系列、Martin Fowler的《Patterns of Enterprise Application Architecture》以及最基本的GoF的《Design Patterns》。

鄉民:可是我只是想知道要怎麼找到第一個pattern就好了啊…

Teddy內心獨白:你現在是跳針嗎?挑眉質疑

Teddy:如果你對這個方法有興趣,可以來上我的「Design Patterns這樣學就會了–入門實作班」,在第一天的課程中我會介紹Alexander的pattern方法,以及讓學員動手自己整理一個pattern。

鄉民:可是我下個月要出國旅遊,短時間不想花錢上課…

Teddy:那你可以自己找Alexander的《The Timeless Way of Building》這本書來看。

鄉民:可是我只是想知道要怎麼找到第一個pattern就好了啊,難道你不能直接告訴我答案嗎?

Teddy內心獨白:老師在講你有在聽嗎?剛剛已經告訴你方法了啊。

Teddy:這位施主,場地等一下還有人要使用,我要先收電腦了…

***

天底下有沒有哪種不花錢、不花時間、不花腦筋、不費工夫,只要隨口一問就可以獲得的知識與智慧?也許有,不過Teddy還沒修練到那樣的地步,無法提供速食答案。請容許Teddy繼續修練,如果有緣18年後絕情谷底再相逢挑眉質疑

***

友藏內心獨白:這是什麼情況(表演跌倒的動作中…)!

2014年9月28日 星期日

2014京都考察之旅Day8-A稻荷神社

Sep. 13 23:00~23:54

來了京都三次,今天第一次來到稻荷神社。這個地點Teddy一直想來,因為幾年前看了日劇「鹿男」,雖然主要的故事發生在奈良,但是身為「狐狸」代表的稻荷神社也扮演一定的角色。所以來稻荷神社單純是為了「鹿男」而來,而不是因為櫻花。

螢幕截圖 2014-09-13 22.43.04螢幕截圖 2014-09-13 23.52.41螢幕截圖 2014-09-13 22.43.30螢幕截圖 2014-09-13 22.43.40螢幕截圖 2014-09-13 22.43.56螢幕截圖 2014-09-13 22.49.52螢幕截圖 2014-09-13 22.50.10螢幕截圖 2014-09-13 22.58.02螢幕截圖 2014-09-13 23.00.52

 

開始準備爬山,稻荷神社最有名的就是狐狸和數不清的大大小小鳥居。這些鳥居好像都是善男信女和公司行號所捐贈,不同大小的鳥居有不同的價格,最大的居然要一百三十幾萬日幣。滿山的鳥居,不知道加起來「市值」多少啊。

螢幕截圖 2014-09-13 23.05.35螢幕截圖 2014-09-13 23.05.51螢幕截圖 2014-09-13 23.20.12螢幕截圖 2014-09-13 23.20.39螢幕截圖 2014-09-13 23.21.09螢幕截圖 2014-09-13 23.21.16螢幕截圖 2014-09-13 23.21.47螢幕截圖 2014-09-13 23.21.58螢幕截圖 2014-09-13 23.22.09螢幕截圖 2014-09-13 23.22.29螢幕截圖 2014-09-13 23.22.49螢幕截圖 2014-09-13 23.23.03螢幕截圖 2014-09-13 23.23.13螢幕截圖 2014-09-13 23.24.20螢幕截圖 2014-09-13 23.24.32螢幕截圖 2014-09-13 23.24.45螢幕截圖 2014-09-13 23.25.12螢幕截圖 2014-09-13 23.25.24螢幕截圖 2014-09-13 23.25.43螢幕截圖 2014-09-13 23.25.56螢幕截圖 2014-09-13 23.26.21

 

繼續往上爬,眼前所見還是綿延不絕的「鳥居陣列」。上午11:45分,在穿越了不知多少個鳥居之後,終於來到了山頂。

螢幕截圖 2014-09-13 23.38.57螢幕截圖 2014-09-13 23.39.13螢幕截圖 2014-09-13 23.39.22螢幕截圖 2014-09-13 23.39.52螢幕截圖 2014-09-13 23.40.04螢幕截圖 2014-09-13 23.40.21螢幕截圖 2014-09-13 23.40.36螢幕截圖 2014-09-13 23.40.52螢幕截圖 2014-09-13 23.41.00螢幕截圖 2014-09-13 23.41.19螢幕截圖 2014-09-13 23.41.32螢幕截圖 2014-09-13 23.41.39螢幕截圖 2014-09-13 23.42.09螢幕截圖 2014-09-13 23.42.20螢幕截圖 2014-09-13 23.42.34

 

有一個老外小朋友,到了山頂之後累到直接躺在地上休息微笑

螢幕截圖 2014-09-13 23.43.30螢幕截圖 2014-09-13 23.43.51螢幕截圖 2014-09-13 23.43.05螢幕截圖 2014-09-13 23.41.57螢幕截圖 2014-09-13 23.42.45螢幕截圖 2014-09-13 23.42.54

 

下山的時候看到一隻睡得很熟的貓,很可愛。

螢幕截圖 2014-09-13 23.50.52螢幕截圖 2014-09-13 23.51.02螢幕截圖 2014-09-13 23.51.14螢幕截圖 2014-09-13 23.51.26螢幕截圖 2014-09-13 23.51.33螢幕截圖 2014-09-13 23.51.50

***

友藏內心獨白:原來鳥居陣列是這樣的感覺。