狠狠撸

狠狠撸Share a Scribd company logo
Rails 炸機實務 如何不要炸爛你家機器 和你老闆的脸
About Me Manic Chuang http://tech.manic.tw http://www.manic.tw PIXNET (2008~), PHP Programer Half Rails Developer since 2009 PIXNET Rails Team in 2011, April
前言 這是在講測試的, 只是順便講怎麼炸掉你家網站 在現有專案導入測試碼撰寫 使用  Rspec 使用真實範例 演講者自己也是新手 適合聽眾 : 沒寫過測試但有興趣的人 想了解測試但不知道如何下手的人 想看看別人怎麼炸他們家專案的人
關於本章要提到的測試 指的是自動化測試
為什麼我要寫測試 ?
可不可以不要寫測試 ? 要如何避免炸機 ?
星期五的時候不要  Deploy Code 腦袋通常都不太清楚
網站炸掉了 星期一  deploy code  後炸掉了
進化 : 星期五的時候不要 Commit Code 那可不可以也不用來上班 ?
一旦釋出程式碼, 可能的話不要動他 Code freeze if possible 通常是不太可能
不得不動它的時候 還是不小心炸掉了 ?
寫的時候請小心謹慎 正式的行政命令
檢查程式碼有沒有錯誤 開發端要自己跑一次 開瀏覽器看看有沒有問題 在你每一次更改時 重覆以上事項
還是炸掉網站了 錯誤是在別的環節, 因為這次的修改引發
?
在你每一次更改時 重覆以上事項 注意這個重覆
DRY D on't  R epeat  Y ourself 為什麼要堅持不寫測試啊 ?
每件事都有它的代價 一個開發所需時數約 10 小時, 上線 1 個月的活動網站 一個開發所需時數超過 100 小時 上線已經超過 2 年的專案 且持續有調整與新功能的社群網
實際範例 : PIXNET  化妝台 暱稱  Pixlovely http://channel.pixnet.net/lovely 歷經三版本 PHP 時代 :  http://channel.pixnet.net/lovely ? ??? ~ 2009.07 Rails 2.3.4  版本  http://belovely.tw ? 2009.07 ~ 2011.06 Rails 3  版本  http://channel.pixnet.net/lovely 2011.06 ~? 2011.07  開始寫 ( 補 ) 測 
在 2011 年 3 月開始開發 在 5 月 ~6 月時連續發生慘案
慘案發生原因 :  規格 PM 是產品部門,企畫的是美妝部, 開發的是技術部 PM 並非技術出身 規格時沒考慮到一些例外狀況處理 溝通不統一 開發端發現規格有問題, 與企畫討論後修改了規格。 但是 PM 端不知道這件事
慘案發生原因 :  時程 2011 年 3 月第一個程式碼提交, 6 月要上線 5 月加入開發,此時進度約 50% 只檢測功能正不正常,不管程式碼品質 上線後再回來修 長輩名言 :  拋掉羞恥心程式就可以寫很快了 結果來回的次數變多 驗收功能的是 PM 部,他站在你後面而且很火
慘案發生原因 :  外部網站介接 Session  與  PIXNET  本家 (PHP)  共用 使用  PIXNET  相簿作圖床  (Oauth API) 使用  PIXNET  的  Solr  作為  Search Engine 開發與檢測驗收都很費功夫
决定补测试
事前準備 選擇並學會使用你的  Test Framework 在此使用?? RSpec Rails 清單 ? http://ihower.tw/rails3/testing.html ? http://www.slideshare.net/ihower/rspec-7394497 ? http://pragprog.com/book/achbd/the-rspec-book
事前準備 整理並確認專案規格 企畫端寫  User Story 規格必須由開發單位撰寫,由企畫端驗收。 PM 由技術部成員擔任 測試就是一種程式規格, 程式的規格就是滿足測試條件。
Rspec-Rails 和  Rails  一樣依照  MVC  架構分別有  Model, View, Controller? Integration Test: Request specs 其他 : Route specs, Helper specs
?
?
進一步整理 未登入前會看到登入資訊 登入後會看到自己的暱稱 (PIXNET) 與三個管理連結 登入後如果有未回覆的玩試用 ( 問卷 ) 會顯示通知
因為是事後補測試 layouts/application.html.erb 針對對應的程式碼來寫測試
寫出相對應的測試碼 spec/views/layouts/application.html.erb_spec.rb
Failed
錯誤的部分與測試內容沒關係 那不重要 !
Fake It! ( 作假資料與假回傳 )
? 測試絕大部分花費的時間 是在處理這些假回傳 以及準备需要的假资料
?
?
範例 :  错误的测试
測試碼不能檢查到 程式碼的錯誤 那就是沒有用的測試
補寫測試的流程 補寫  Spec Code  使測試成功 確認如果更動  Spec code  會使測試失敗 確認如果更動被測試的  code  會使測試失敗?
好處 可以在不怕炸機的狀況下  Refactor  程式碼 重新確認規格與程式碼是否符合
注意事項 專注於被測試的項目,讓其他部分用 假資料 (Fixture) 與假回傳 (Mock & Stub) 來處理 確保你的測試可以有用: 試著”故意”寫錯程式碼讓測試失敗, 藉此練習想像各種的錯誤情況,以提早預防 當局者迷,可以找另一個人幫你  Review  或  Pair Programing
測試不是萬靈丹 不用追求最完美,只要能不炸機就好 人工測試也有其優點
Q&A ?

More Related Content

Viewers also liked (8)

Henry Stewart 狠狠撸s
Henry  Stewart 狠狠撸sHenry  Stewart 狠狠撸s
Henry Stewart 狠狠撸s
JMHarkin
?
Hannah melhuish presentation
Hannah melhuish presentationHannah melhuish presentation
Hannah melhuish presentation
JMHarkin
?
Communication
CommunicationCommunication
Communication
wqpp
?
Glaslicht
GlaslichtGlaslicht
Glaslicht
glaslicht
?
UMClinicalStudies.org demo
UMClinicalStudies.org demoUMClinicalStudies.org demo
UMClinicalStudies.org demo
aalapd
?
Graphic Design and it's application in my work as a Human Centered Designer
Graphic Design and it's application in my work as a Human Centered DesignerGraphic Design and it's application in my work as a Human Centered Designer
Graphic Design and it's application in my work as a Human Centered Designer
aalapd
?
Connected health venfinal
Connected health venfinalConnected health venfinal
Connected health venfinal
tibisay_hernandez
?
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
In a Rocket
?
Henry Stewart 狠狠撸s
Henry  Stewart 狠狠撸sHenry  Stewart 狠狠撸s
Henry Stewart 狠狠撸s
JMHarkin
?
Hannah melhuish presentation
Hannah melhuish presentationHannah melhuish presentation
Hannah melhuish presentation
JMHarkin
?
Communication
CommunicationCommunication
Communication
wqpp
?
UMClinicalStudies.org demo
UMClinicalStudies.org demoUMClinicalStudies.org demo
UMClinicalStudies.org demo
aalapd
?
Graphic Design and it's application in my work as a Human Centered Designer
Graphic Design and it's application in my work as a Human Centered DesignerGraphic Design and it's application in my work as a Human Centered Designer
Graphic Design and it's application in my work as a Human Centered Designer
aalapd
?
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
In a Rocket
?

Similar to Rails 炸機實務 (20)

Proud Plone on Cloud
Proud Plone on CloudProud Plone on Cloud
Proud Plone on Cloud
TsungWei Hu
?
iThome Modern Web 2018: 如何打造高效的機器學習平台
iThome Modern Web 2018: 如何打造高效的機器學習平台iThome Modern Web 2018: 如何打造高效的機器學習平台
iThome Modern Web 2018: 如何打造高效的機器學習平台
Evan Lin
?
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
zhoujg
?
2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線
2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線
2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線
Freddy Fan
?
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
?
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
Shengyou Fan
?
這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧
志龍 陳
?
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
Alan Tsai
?
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
Wei Sun
?
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
areyouok
?
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
裕波 周
?
单元测试
单元测试单元测试
单元测试
國昭 張
?
大话笔丑辫之性能
大话笔丑辫之性能大话笔丑辫之性能
大话笔丑辫之性能
liqiang xu
?
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
Shengyou Fan
?
Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手
Piece Chao
?
厂别濒别苍颈耻尘与动态网页爬虫应用
厂别濒别苍颈耻尘与动态网页爬虫应用厂别濒别苍颈耻尘与动态网页爬虫应用
厂别濒别苍颈耻尘与动态网页爬虫应用
Yanwei Liu
?
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Chen Cheng-Wei
?
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
Wei Sun
?
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
George Ang
?
Proud Plone on Cloud
Proud Plone on CloudProud Plone on Cloud
Proud Plone on Cloud
TsungWei Hu
?
iThome Modern Web 2018: 如何打造高效的機器學習平台
iThome Modern Web 2018: 如何打造高效的機器學習平台iThome Modern Web 2018: 如何打造高效的機器學習平台
iThome Modern Web 2018: 如何打造高效的機器學習平台
Evan Lin
?
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
zhoujg
?
2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線
2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線
2024/11/29 DevOps Taiwan #64 : 從初建到進階:打造符合公司需求的混合雲端 GitLab DevOps 流水線
Freddy Fan
?
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
?
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
Shengyou Fan
?
這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧
志龍 陳
?
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
Alan Tsai
?
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
Wei Sun
?
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
areyouok
?
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
裕波 周
?
大话笔丑辫之性能
大话笔丑辫之性能大话笔丑辫之性能
大话笔丑辫之性能
liqiang xu
?
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
Shengyou Fan
?
Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手
Piece Chao
?
厂别濒别苍颈耻尘与动态网页爬虫应用
厂别濒别苍颈耻尘与动态网页爬虫应用厂别濒别苍颈耻尘与动态网页爬虫应用
厂别濒别苍颈耻尘与动态网页爬虫应用
Yanwei Liu
?
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Chen Cheng-Wei
?
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
Wei Sun
?
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍腾讯大讲堂58 拍拍app platform中间件解决方案介绍
腾讯大讲堂58 拍拍app platform中间件解决方案介绍
George Ang
?

Rails 炸機實務