SlideShare a Scribd company logo
1 of 68
Download to read offline
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 ⼩小時,接着在
錯誤會觸發安全機制格式化儲
存區。
步驟 2
How ?
如何做,定義流程
步驟 2
How ?
「⽽而且第⼀一次設定密碼時要有提⽰示告知」
「⼗十次打錯密碼,⼿手機會鎖定⼀一⼩小時」
「⼀一⼩小時後,解鎖失敗⼗十次格式化」
步驟 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 更少
• 有很多⼯工具與流程
• 達到⺫⽬目的的⽅方式
• 找到適合⾃自⼰己團隊的⼯工具,
發揮效⽤用。
我們都想讓世界更美好
• 寫規格與測試就是⼀一種很
棒的⼯工具

More Related Content

Similar to Why do we need backend testing

我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術Li Hsuan Hung
 
程序员与技术
程序员与技术程序员与技术
程序员与技术ligaoren
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?棋文 鄭
 
不妥協的河蟹之道
不妥協的河蟹之道不妥協的河蟹之道
不妥協的河蟹之道Ken Kuan
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Justin Lin
 
The clean coder
The clean coderThe clean coder
The clean coderAndy Cheng
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startupYenwen Feng
 
SF Bay Area 面試經驗分享
SF Bay Area 面試經驗分享SF Bay Area 面試經驗分享
SF Bay Area 面試經驗分享Ian Tsai
 
Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔yinwilliam
 
腾讯 搜搜开发人员的十个习惯
腾讯 搜搜开发人员的十个习惯腾讯 搜搜开发人员的十个习惯
腾讯 搜搜开发人员的十个习惯Qian Anchuan
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityPoga Po
 
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)JoXuZi
 
Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CILiyao Chen
 
Test and Software Quality
Test and Software QualityTest and Software Quality
Test and Software QualityEnzo Wang
 
2 個月擁有 6000 用戶的 Sideproject 這樣做
2 個月擁有 6000 用戶的 Sideproject 這樣做2 個月擁有 6000 用戶的 Sideproject 這樣做
2 個月擁有 6000 用戶的 Sideproject 這樣做Nic Lin
 
[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵
[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵
[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵台灣資料科學年會
 
基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲drewz lin
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Fred Chien
 
Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Earou Huang
 

Similar to Why do we need backend testing (20)

我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術
 
程序员与技术
程序员与技术程序员与技术
程序员与技术
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
 
不妥協的河蟹之道
不妥協的河蟹之道不妥協的河蟹之道
不妥協的河蟹之道
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
 
The clean coder
The clean coderThe clean coder
The clean coder
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startup
 
SF Bay Area 面試經驗分享
SF Bay Area 面試經驗分享SF Bay Area 面試經驗分享
SF Bay Area 面試經驗分享
 
Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔
 
腾讯 搜搜开发人员的十个习惯
腾讯 搜搜开发人员的十个习惯腾讯 搜搜开发人员的十个习惯
腾讯 搜搜开发人员的十个习惯
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your Sanity
 
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
Scrum Gathering 2012 Shanghai_团队合作与团队指导分会场演讲话题:自组织?你开玩笑吧!(艾永亮)
 
Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CI
 
Test and Software Quality
Test and Software QualityTest and Software Quality
Test and Software Quality
 
2 個月擁有 6000 用戶的 Sideproject 這樣做
2 個月擁有 6000 用戶的 Sideproject 這樣做2 個月擁有 6000 用戶的 Sideproject 這樣做
2 個月擁有 6000 用戶的 Sideproject 這樣做
 
[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵
[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵
[TOxAIA台中分校] 智慧製造成真! 產線導入AI的致勝關鍵
 
基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!
 
Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)
 

More from Chen Liwei

Facebook Pixel
Facebook PixelFacebook Pixel
Facebook PixelChen Liwei
 
Facebook Audience
Facebook AudienceFacebook Audience
Facebook AudienceChen Liwei
 
Facebook 競價
Facebook 競價Facebook 競價
Facebook 競價Chen Liwei
 
Facebook Creative 與 Marketing API 使用
Facebook Creative 與 Marketing API 使用Facebook Creative 與 Marketing API 使用
Facebook Creative 與 Marketing API 使用Chen Liwei
 
Facebook Lead Ads 簡介
Facebook Lead Ads 簡介Facebook Lead Ads 簡介
Facebook Lead Ads 簡介Chen Liwei
 
Facebook Dynamic Product Adverts
Facebook Dynamic Product AdvertsFacebook Dynamic Product Adverts
Facebook Dynamic Product AdvertsChen Liwei
 
Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Chen Liwei
 

More from Chen Liwei (7)

Facebook Pixel
Facebook PixelFacebook Pixel
Facebook Pixel
 
Facebook Audience
Facebook AudienceFacebook Audience
Facebook Audience
 
Facebook 競價
Facebook 競價Facebook 競價
Facebook 競價
 
Facebook Creative 與 Marketing API 使用
Facebook Creative 與 Marketing API 使用Facebook Creative 與 Marketing API 使用
Facebook Creative 與 Marketing API 使用
 
Facebook Lead Ads 簡介
Facebook Lead Ads 簡介Facebook Lead Ads 簡介
Facebook Lead Ads 簡介
 
Facebook Dynamic Product Adverts
Facebook Dynamic Product AdvertsFacebook Dynamic Product Adverts
Facebook Dynamic Product Adverts
 
Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧
 

Why do we need backend testing