為了了推動⾃自動化測試,
你付出了了多少?
Zen@ AgileTour HsinChu
2019.12
Who is Zen ?
! I am from Macau
! Back-end Engineer/ TDD promoter/ Facilitator
! 擅長⾃自動化測試, TDD/BDD
! 現職 TenMax AdTech Lab 騰學廣告科技
! 4yrs+ Scrum exp
! AgileTour Taipei speaker (2018,2019)
團隊不寫 Test
該怎麼辦?
Agenda
● 如何看待「團隊不寫⾃自動化測試」
● 推動⾃自動化測試,變⾰革的4個階段
● 如何推動變⾰革
● summary
「為甚麼總是不寫 Test 呀?」
臺北站
臺北站
當你問
「為甚麼⼤大家總是不寫呀」的時候
你是真的想知道為甚麼嗎?
推論階梯

(Ladder of Inference)
七個階段:
「觀察」
「過濾資訊」
「賦予意義」
「假設」
「作出結論」
「調整看法」
「作出⾏行行動」
團隊裡的成員不寫 Test
我已經講過寫測試很重要了了
不寫是因為不重視品質
⼤大家太懶懶惰了了
要定⼀一些KPI ⼤大家follow
code coverage

要達到80% 以上 !
有沒有試著開始寫?
是否有遇到阻礙?
可能沒有寫出

有效測試的經驗
先知道⼤大家寫 test 的程度
下個sprint安排 

pair programming
Their responsibility
【Blame】
My responsibility
【Help】
「為甚麼不寫Test」
背後的原因
變⾰革的4個階段
推動導入⾃自動化測試 -- 變⾰革
否認期
抗拒期 探索期
承諾期
否認期
不願⾯面對的真相
否認期
- 「user 應該不會這樣使⽤用」
- 「我就改這個地⽅方⽽而已」=> 「應該不會影
響到別處」
- 「我是來來負責開發功能的,不是來來當 QA
的」
- 只要滿⾜足某些假設,就不是個問題
特徵:
⾃自欺欺⼈人、⾃自信
⼼心存僥倖、對問題視⽽而不⾒見見
抗拒期
跳出舒適圈前的掙扎
抗拒期
- 「只有⼀一樣的時間,為甚麼要做更更多
事?」
- 「都是 legacy code 造成的,只能follow」
- 「已經有 QA 幫我們把關了了」
- 「寫測試⼜又不能賺錢 」
特徵:
恐懼與抗拒
安於現狀狀 ,陽奉陰違
有寫就好
High Coverage, But no protection
⾝身陷抗拒期的泥沼
我早說了了 ...
- 寫測試不能賺錢
- 寫測試拖慢進度
- 產品不賣是因為:
- Idea 不 work
- QA 能⼒力力不⾜足
- User 不識貨
- Marketing 不給⼒力力
Agile
doesn’t
work
探索期
暨期待⼜又害怕受傷害
探索期 - 「怎樣寫比較好?有沒有更更好的寫法?」
- 「這段這樣寫 之後好像沒辦法寫測試」
- 「甚麼是 isolation ?」
- 「原來來還有這麼棒的寫法!」
- TDD
特徵:
試驗,探索未知
好奇、焦慮、撞牆
承諾期
能⼒力力越⼤大 責任越⼤大
承諾期
- 「這個 test 還有更更簡短的寫法」
- 「這樣寫其他⼈人應該能讀得懂」
- 「如何能讓其他⼈人也能⼀一起維護?」
- 「沒有寫 test,不敢 commit」
- 「Test fail 導致 build break,要先修好」
- 品質穩定度上升
特徵:
被認同,新挑戰
⾃自主、分享成果、幫助他⼈人
團隊讓⼈人信任
⼈人緣變好
否認期
抗拒期 探索期
承諾期
能量量曲線
每個階段的
需要 / 不需要
否認期
- 財務損益
- user 流失率
- 客訴內容
- 流量量、收益
需要:資訊
- 產品品質
- Bug/Exception reports
- 長尾處理理時數,佔開發的總時數 XX%
- 每⽉月hotfix次數
- Release 頻率
- 外⾯面的世界
Cost of test
Sprints
Sp1 Sp2 Sp3 Sp4 Sp5 Sp6 Sp7
Code changed
Existing
Refactor
New
Member
90 => 250 cases
4h => 1.5 Day
否認期
不需要:隱瞞
- 「我們很好」
- 「只要⽤用⼀一樣的⽅方式繼續努⼒力力下去就能成
功」
抗拒期
- 吐露不想再⼿手動測試的⼼心聲
- 富「告別式意義」的 Retro
- ⾯面對品質低落落,檢討現狀狀
- 肯定過去努⼒力力
- 擔負產品的主⼈人
- 「這是你的⼩小孩」
- 沒有廚師是不先⾃自⼰己試味道
需要:告別式 動之以情
對過去的依戀
對舒適圈的依賴
抗拒期
不需要:被Push、被說教
- 跟情緒低落落的⼈人講道理理
- 「你不懂我的難處」
- 造成距離感、對立
探索期
- ⽀支持
- 學習寫測試,對付出的過程給予肯定
- Feedback
- 寫出來來的測試code,針對結果給予回饋
- 怎樣寫可以更更好、可以更更有可讀性
- 新知識
- 外部訓練
- workshop
- 試錯空間
- Test-sensibility 需要時間累積
需要:
探索期
不需要:被質疑
- 「你這麼利利害那都給你寫就好」
- 「改來來改去的,我⼿手動測還比較快」
- 找理理由合理理化⾃自⼰己「不適合寫test」
- 還沒有成果,感到吃⼒力力不討好
技術⾯面: 建立共識
探索期 實務
Coding
Convention
- 精⼒力力花在測試的邏輯上,⽽而不是
花在命名跟讀code上
⼀一致的
- Naming rule
- Structure
from Clean Code Ch#9
是甚麼造就了了⼀一個整潔的測試?
三件事,可讀性、可讀性,還是可讀性。可讀性,在單元測試裡可能比在產品程式裡還要重要。
Readability
技術⾯面: 降低⾨門檻
探索期 實務
築起鷹架
- 簡化的 setup
- 為 Business 封裝
好的 library
- best_practice.md
承諾期
需要:
- 被需要
- 希望促成團隊⽂文化
- 成果被肯定
- service downtime 統計
- hotfix, 插單的減少
- 同儕間的肯定
承諾期
不需要:被指導
- 已有 ⾃自組織意識
刻意練習
承諾期 實務
促成

團隊⽂文化
Test
Pair/Mob

Code
review
Fix
ASAP
CI/CD Retro
Neil
3 yrs
2015 2019
⼿手動測試
2017
開
始
嘗
試
寫
測
試
2018
外
訓
Internal
prom
otion
Agile
M
eetup

sharing Pair/Mob

Code review
⼤大量量重構
Test framework
upgrade
否認期 抗拒期 探索期 承諾期
2016
Recap
他⼈人責任
vs
我的責任
否認期
抗拒期 探索期
承諾期
變⾰革的4個階段
變⾰革中那些重要的事...
抗拒期
- 動之以情
- 告別式
否認期
- 事實與真相
探索期
- 降低⾨門檻
- 建立共識
承諾期
- 刻意練習
- 尋找新挑戰
- 促成團隊⽂文化
我的團隊正處在哪個階段?
我可以怎樣幫助團隊做得更更好?
如果你現在跑敏捷的⽅方式,
跟⼀一年年前差不多,
那麼你可能不是那麼敏捷
--- by ???
END.
Appendix
- Email me: zen0106[at]gmail.com
- My Medium: zen’s iteration
- 淺談⾼高效撰寫單元測試 slide post
- How to write a readable unit test
- 學TDD、外訓 請找 91哥 - 91敏捷之路路
- 敏捷宮廷中的測試攻略略 slide
- [DevOps meetup] 從研發團隊管理理及產品發展的⾓角度看DevOps
- 想了了解 TenMax ⼯工程⽂文化,請找 Richard Hsiao

為了推動自動化測試,你付出了多少?