作者例子基本上是團隊的害蟲了, 實務上我認為更多是人的價值觀不同, 在一般的開發人員或是 Team Member 身上或許還好解決, 透過溝通,排除他的困難。 個人經驗上比較麻煩的反而是中階主管, 比如說 : Team Leader 身兼 Team Member, 但是每次都翹掉回顧會議,說「我有其它會議、我很忙、我很特別…」
我的想法是將他的角色提昇到 StackHolder,如果他的權限會影響開發, 鼓勵他下放,讓 Team Members 具備獨力開發的能力。 讓他去作特別的事,反之如果他回頭想參與開發, 那應該與其它 Team Members 一樣全程參與會議。
Is really good. Has made significant efforts to make sure retrospectives aren’t boring. Is not too busy to invest in improvements that don’t pay them back immediately. And understands the value of doing other than just the most pleasant work.
… and if they work in short sprints, I’ll say it’s OK for the team do retrospectives less frequently.
以上需求為前提,陣列的處理也可以理解了, 整份代碼也是相同適合廠商修改,雖然不知道改得人會是工讀生還是總經理。 總之這樣的需求下,這份代碼我覺得是合格的。 反思 : If I Had Only One Hour To Save The World I Would Spend 55 Minutes Defining The Problem And 5 Minutes Finding The Solution.
var handsetNokiaAddressBook = new HandsetNokiaAddressBook(); handsetNokiaAddressBook.Run(); var handsetNokiaGame = new HandsetNokiaGame(); handsetNokiaGame.Run(); var handsetMotorolaAddressBook = new HandsetMotorolaAddressBook(); handsetMotorolaAddressBook.Run(); var handsetMotorolaGame = new HandsetMotorolaGame(); handsetMotorolaGame.Run();
我寫了一些 End To End 測試列舉出所有的情境。
延申問題
目前只是 2 x 2,所以要寫 E2E 測試似乎不難,如果是 3 x 3 或更多呢 ? 你會怎麼作 ?
這裡隱含著一件事,當你看到你的繼承鏈與商業邏輯的交互, 已經開始出現 2 x 2 的現象時,是一個明示你應該重構它了。
Tennis Kata 是我最常練習的一個題目, 就我個人而言,這個題目源起 91 大的極速開發, 目前最快只有在 17 分左右,使用 Rider with Mac 的話可能還會再慢一些。 我很熟悉,所以很少作需求分析,Test Case 也大多有即定的寫法。 手動得很快,腦卻不怎麼動了,明明這是一個相當經典的題目, 不過我卻被定錨了。
今年 5 月上了「測試驅動開發與持續重構」, 第一天 91 大也有透過 Tennis Kata 展示了一下火力, 那個時候又有提到可以使用 State Pattern 來實作, 最近工作上又恰巧有使用到 State Pattern。 於是我便決定要試著用 State Pattern 來進行 Tennis Kata 。
有兩種方法,一種是無到有的 Kata, 一種是將現有 Tennis Production Code, 透過重構轉換成 State Pattern, 這次我選擇從無到有。
第一次失敗
總歸來說,需求分析作得不夠徹底, Test Case 設計不良,所以很難自然而然的讓 State 產生
上圖是我第一次畫的 State , 現在回過頭來想想,圖型上其實可以很明顯看出重複的壞味道。 但是我當下完全沒有「覺察」,明明是想要消除 if else, 卻在 State 裡面產生了大量的 if else。
以 ServerScore 方法為例, 本來是在定義在 Abstract Class State 之中的抽像方法, 由各個 State (Normal、Same、Deuce、Adv 與 Win)實作, 但是我們可以明顯發現, Context.ServerPoint++ 是重複的, 而 ChangeState 才是真正抽像的地方, 所以我們可以在 Abstract Class State 加入以下的方法與抽像方法,
另外個人的工作流程我不覺得需要跑 Scrum , 可以試試 GTD 或 PDCA ,而且你會發現很多類似的觀念與原則。 Scrum 設計上是適合小型團隊的,業界說法是 3~9 人,不含 PO 與 SM 多人的公司也有很多別的方法論(EX: LeSS or SAFe),這裡我不多開戰線,敏捷無它「務實」而已。 方法沒有不好,只有適不適合。