Upload
chen-liwei
View
411
Download
2
Embed Size (px)
Citation preview
Why do we need Backend Testing
安安你好
TMDers
•⽴立偉 •硬體公司裏⾯面的軟體⼯工程師 •上海賣 Storage 當業務 •回臺北 Coding •能 Coding 是幸福的
腦筋急轉彎 A:
Bug 通常分爲哪兩種?
答:
沒被發現 與被發現的
腦筋急轉彎B:
被發現的 Bug 通常分爲哪兩種?
答:
被貴爲上帝的客⼾戶發現
與其他⼈人發現的
許願?
•消滅這個世界上所有的 Bug?
許願?•⽐比客⼾戶更早發現 Bug
• (Bug)早期發現早期治療,(專案)存活率⾼高
該怎麼美夢成真?
規格 (Spec)/
測試 (Test)
如果我們想做⼀一個⼩小功能
⼤大家有沒有掉過⼿手機?
步驟 1
Why ?
爲什麼要做,定義需求
步驟 1
如果⼀一直打錯密碼
嘿嘿...美國國防部 DoD 5220.22-M格式化!
接着我就聽到了鍵盤的敲打聲...
步驟 1
⼿手機集體⾃自殺了...
步驟 1
需求未定義明確
第⼀一次啓⽤用先告知,打錯 10 次⼿手機會鎖定 1 ⼩小時,接着在錯誤會觸發安全機制格式化儲存區。
步驟 2How ?
如何做,定義流程
步驟 2How ?
「⽽而且第⼀一次設定密碼時要有提⽰示告知」
「⼗十次打錯密碼,⼿手機會鎖定⼀一⼩小時」 「⼀一⼩小時後,解鎖失敗⼗十次格式化」
步驟 3
What ?
動⼿手做,實作程式碼
結論:Tdd / Bdd 的精神
Think, before you act.
結論:Tdd / Bdd 的精神 或許上不了天堂,但⾄至少不會下地獄的四步驟: 1. 確認需求 ( 上帝客⼾戶想要什麼 ) 2. 寫下規格 3. 規劃流程 ( 思考與規劃 ) 4. 實作 ( 寫程式 )
道歉啓⽰示
我花了各位三分鐘的⽣生命說了廢話。
爲什麼需要規格 (Spec)?
⿇麻雀腦失憶症•⼝口說無憑 •容易忘記 •溝通誤差 •需求變更
優點•可以協助分派⼯工作
•忘記的時候可以看
•⽼老闆/客⼾戶不認賬的時候可以拿來吐他
規格的種類
規格的種類•⽂文字記錄 (⽩白紙⿊黑字?合約?) •錄⾳音錄影 •⾃自⼰己的⿇麻雀腦 •同事的腦 • PM 的腦 (以上三個通通可能會忘記) •可以被閱讀且電腦可執⾏行的規格
可讀可執⾏行的規格這是做什麼⽤用的
怎麽⽤用
⽤用了應該發⽣生什麼事情
Red Green Refactor
Think
Red
• 確認好功能後,寫出可閱讀可執⾏行的 Spec。
• 無法通過測試,會錯誤。
Green
可以通過測試,不會有錯誤。
Refactor
把程式碼重構變得更棒
( 當然直接寫出很棒的程式碼更好)
且重構完之後不會造成規格不符
有⼀一天
上帝客⼾戶會變更需求
但就算有了規格
如果發⽣生以下這件事情
我們被耍的時候...
我們⼜又被耍的時候...
沒有規格跟不正確的規格
或者有很多份規格
都很可怕
因此需要確保
規格是正確的
Continuous Integration
持續整合
⼩小故事•這是朋友跟我說的故事 •有⼀一天 User 說某功能被改壞了 •但是看了⼀一下上次改動記錄是 2012/XX/XX 兩年前
•噢,User 說其實他從來沒按過那顆按鈕 •阿不就還好他不是在臺北捷運上班
持續整合
•有變更就建置專案 •⾺馬上測試是不是正常 •⼀一旦有錯誤會及時發現
⾹香蕉可以請猴⼦子
22K 請⼀一個⼯工讀⽣生 ?
可以讓⼈人⼒力花費在更有效益的事情上
–魏靈公
「⼯工欲善其事,必先利其器。」
Jenkins
網路 + Server
⾃自動建制專案
主動通知問題
隨時可了解狀況
規格 + CI 與 Jenkins
規格 + CI 與 Jenkins
可讀可執⾏行的規格 > 是規格也是測試
CI 與 Jenkins 持續的執⾏行這些測試
+
⼩小故事 ⼤大啟⽰示職災傷害預防
⽊木頭加⼯工廠•把🌲放在平台,按下按鈕,切成兩半,⽤用🍌請🐒都能做的事情。
•但平均⼀一年要換掉⼀一隻🐒。
•🐒會少⼀一隻👋 •雖然⽼老闆很⿊黑⼼心⼀一⽑毛都不賠,但是卻引發🐒勞⽅方的罷⼯工抗議。
快問快答•🐒們只要求對職業傷害需要補償,最重要的是,要有有效⽅方案改善危險的⼯工作環境。
•⼀一起想想有什麼⽅方案?
解決⽅方案
•⼀一次要按下兩顆🔘,才能啟動⼑刀⽚片切🌲。
•透過制度減低錯誤率。
某天與 Webber 的對話
Tdd / Bdd 已死?
⼈人⼈人都是⼤大神?•多數專案都是團隊 •即使是單⼈人團隊,也有其他利害關係⼈人
•規格可以作爲溝通的標準與依據
結論
我們都想讓 Bug 更少
•有很多⼯工具與流程 •達到⺫⽬目的的⽅方式 •找到適合⾃自⼰己團隊的⼯工具,發揮效⽤用。
我們都想讓世界更美好
•寫規格與測試就是⼀一種很棒的⼯工具