SlideShare a Scribd company logo
地獄の
RSpec
逃げちゃだめだ、逃げちゃだめだ・・・
       おおはら@Drecom Co., Ltd.
警告
このプレゼンを見てから7日以内にspecヲ
20コGreenにしないといけません。さもなくば
貴方のプロジェクトは炎上し、メンバーは
疲れ果て疾走し行方不明になる可能性
があります。
貴方のプロジェクト、大丈夫ですか・・・?
提供




DRECOM
                     R




With entertainment
自己紹介
おおはらつねのり
アプリケーションエンジニア
所属:広告事業本部
twitterアカウント:@ohrdev
経歴
Rails歴:2年半
札幌の会社からドリコムへ転職
元SIer(元IT亡者)
ソーシャルゲームはヤった事ない(シゴトハノゾク)
地獄Spec
今日の
おはなし
テスト
RSpec
質問1
spec
何   緑
時

赤
    最
    初
気
。

    。
グリーン維
持は大変
質問2




グリーン維
持してる?
理想的な
プロジェクト
なら・・・
地獄Spec
だが現実は
キビシイ・・・
地獄Spec
現実
地獄Spec
うちのシステ
ムでRSPEC導
入した時の話
組織(広告事業部)

              企画
         営業


                   開発
    受注



クライアント
               カスタマー
               サポート
サービス(poncan)
ソーシャルアプリ向けリワード広告サービス
http://www.slideshare.net/CyLab/poncan2

リワード広告とは:
ユーザーに広告を提供し、その成果に対して
一定の報酬(ポイント等)を支払うサービス
システム(poncan)
Rails2.3.8 + passenger
Ruby1.8.7
MySQL5
Memcached(acts_as_cached)
Resque/Redis
運用
止めれない(サーバー停止のメンテは基本なし)
Migrationは使用しない(できない)
→openark kit/oak-online-alter-table
(1日のリリース:2.1回)
(1日コミット数:22.3回)
(毎日リリース・毎週機能追加・拡張)
背景
テストコード(メンテされて)なかった
リリースまでに(チェックで)時間かかる
漏れや事故が多い
バグ              事故

                     漏れ

       poncan
                      安心感


     テストコード(のメンテ)不足
地獄Spec
Specを書けよ
デコ助野郎!
RSpec




        開発メンバー
①導入前の状態
有効なRSpecほぼ無し
自動生成されたtestunitが少々
誰も動かしていない
当然メンテもしていない
②導入直後にやった事
メンテされていないテストコードは削除
  -流用できないコード多数
 -そもそも仕様が既に変わっている
自動生成されたコードも削除
テスト用データ
 -fixturesからFactoryGirlに移行
②失敗・教訓(導入直後)
とりあえず動くだけでは不十分
  -実行時間が長いと流さなくなる
自動で動かさないと忘れる
 -autotest使うようにした
テストデータを全てFactoryGirlで賄うのは面倒
 -マスタデータはfixtures
  -トランザクションデータはFactoryGirl
③しばらく経って(1週間位)やった事
Specを書く対象を絞った
 -まずはmodelから書いていく事にした
 -controllerは後回し
③失敗・教訓(しばらく経って)
ビジネスロジック部分をspecの対象にすべきだった
 -modelだけでは不十分で、(Fat)controller
 のロジック部分も対象にしないと無意味
万遍なくspecを書こうとして途方に暮れた
 -全部書く時間ない・モチベーション下がる
 -修正の入った箇所から充実させていった
④慣れてきた頃(1ヶ月位)にやった事
CIを導入した
  -手軽なBigTunaを採用
遅い処理の改善
 -テストダブル(モック・スタブ)に置き換え
 -migrationからschema.rb読み込みに変更
④失敗・教訓(慣れてきた頃)
CIの失敗通知が続いてREDに慣れてしまった
 -失敗だけでなく失敗数も通知するようにした
 -オールグリーンを目標に設定
 -だんだんREDが減っていくのを見てモチベ△
メンバー間のspecの書き方に統一性が無くなってきた
 -勉強会・共有会で書き方をある程度共有
 -THE RSPEC BOOK
⑤充実してきた頃(3ヶ月位)にやった事
カバレッジを指標にした
 -rake spec:rcov
テストデータの整理
 -モデル(テーブル)数80くらい
⑤失敗・教訓(充実してきた頃)
カバレッジは万能じゃない
 -「レガシーコード=テストの無いコード」なので意
 味はあるが・・・
 -Reekを取るようにした(お手軽/ReekViewer) 
 https://github.com/Shinya131/reekviewer
FactoryGirlがパンクした
 -factory.rbに全てぶっ込むのではなく、
  factoriesフォルダ以下にファイル分割配置
 -リレーション指定やりすぎると破綻(メンテ不能)に
⑥グリーンになって(5ヶ月位)にやった事
trunkとbranchに対してそれぞれCIを回した
 -管理・配信・配信(mixi特化)アプリごとに、そ
  れぞれ計6つのCIを回す
 -trunkとbranchの差分を全てチェック(苦行)
レッドからグリーンにするではなく、グリーンを維持する
  ように目標をシフト
⑥失敗・教訓(グリーンになって)
Trunkはグリーンだけど、branchはレッドという状況に
 -息の長いbranchだと未マージ・マージ漏れが
  発生しうる
 -特定のコードをbranchにマージする・しないで赤
  だったり緑だったりするケースがある
なるべくtrunkとbranchの差分を小さくするように意
  識
⑦そして今に至る・・・

          ビフォー
⑦そして今に至る・・・

アフター
結果どうなった?

リリース頻度が加速
 -漏れ・事故が少なくなった
 -即リリース・即bug発見・即修正・即リリース・・・
“ある程度”安心できる
trunkとbrunchの差分が減った
100%bug潰すのは無理だけど、即発見・修正はでき
  る
今後

Rails2.3.8から、Rails3.xにVerUp
 -Jenkins + rvm + rails3.x でCI回す
もうなにも怖くない(CIまわしてればある程度)
Seleniumで面もチェック
 -目確認は(最低限しか)したくない
引き続きGREEN維持
まとめ

RSpecちゃんとしたら、リリース頻度あがった
Specメンテ => CI導入 じゃなくて、
CI導入 => Specメンテ ってするとウマく回った
BUG潰し・予防よりもBUGの早期発見・早期修正に役
  立った
BUGは出る時は出る、Rspec/CIは万能じゃないの
  で注意
ドリコムメンバー募集

ドリコム広告事業本部では、テスト好きなメンバーを
  募集しています。
http://www.drecom.co.jp/recruit/

More Related Content

PDF
カンバンと朝会とわたくし
PDF
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
PDF
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
PDF
ドリコムを支える課金ライブラリを支えるJenkins
PDF
Rubyの会社でPythonistaが3ヶ月生き延びた話
PDF
ドリコムのインフラCI
PDF
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
PDF
RSpec Performance Turning
カンバンと朝会とわたくし
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
ドリコムを支える課金ライブラリを支えるJenkins
Rubyの会社でPythonistaが3ヶ月生き延びた話
ドリコムのインフラCI
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
RSpec Performance Turning

What's hot (19)

PDF
技術書へのいざない
PDF
スペシャリストになるには
PDF
プリキュアのRuby実装の紹介 #tqrk08
KEY
実録!Railsのはまりポイント10選
PDF
Html5超入門
PDF
GitHub APIとfreshで遊ぼう
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
こんな辛いテストはいやだ
PPTX
C#で速度を極めるいろは
PPTX
Elixir-Conf-Japan-2017-session-ohr486
PDF
これからはじめるインフラエンジニア
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PDF
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
PDF
itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb
PDF
社内テストファースト勉強会
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
PDF
ニュースアプリで起きた不具合から学んだ 最適への一歩
PDF
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
PDF
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
技術書へのいざない
スペシャリストになるには
プリキュアのRuby実装の紹介 #tqrk08
実録!Railsのはまりポイント10選
Html5超入門
GitHub APIとfreshで遊ぼう
新入社員のための大規模ゲーム開発入門 サーバサイド編
こんな辛いテストはいやだ
C#で速度を極めるいろは
Elixir-Conf-Japan-2017-session-ohr486
これからはじめるインフラエンジニア
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb
社内テストファースト勉強会
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
ニュースアプリで起きた不具合から学んだ 最適への一歩
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
Ad

Viewers also liked (19)

PDF
ソーシャルゲームスケールアウトの歴史
PDF
ソーシャルアプリを分析してみた
PDF
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
PPTX
5年後のデータサイエンティスト
PDF
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
KEY
エンジニア生存戦略
KEY
activerecord-turntable
PDF
ドリコム流。教育アプリにおけるゲーミフィケーションノウハウ
PDF
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
PDF
フライングゲットガチャ セミナー資料
PDF
ログ解析を支えるNoSQLの技術
KEY
Railsによるワイルドなソフトウェア開発
PDF
gemの複数バージョンカジュアルテスト #shibuyarb
PDF
Rubyの会社でPythonistaが三ヶ月生き延びた話
PDF
My sql casual talks vol.6
PDF
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
PDF
ドリコムの分析環境とデータサイエンス活用事例
PPTX
Tokyor42_r_datamining_18
PPTX
DAUを評価指標から捨てた会社の話 #tokyowebmining
ソーシャルゲームスケールアウトの歴史
ソーシャルアプリを分析してみた
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
5年後のデータサイエンティスト
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
エンジニア生存戦略
activerecord-turntable
ドリコム流。教育アプリにおけるゲーミフィケーションノウハウ
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
フライングゲットガチャ セミナー資料
ログ解析を支えるNoSQLの技術
Railsによるワイルドなソフトウェア開発
gemの複数バージョンカジュアルテスト #shibuyarb
Rubyの会社でPythonistaが三ヶ月生き延びた話
My sql casual talks vol.6
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
ドリコムの分析環境とデータサイエンス活用事例
Tokyor42_r_datamining_18
DAUを評価指標から捨てた会社の話 #tokyowebmining
Ad

Similar to 地獄Spec (20)

PPTX
R spec勉強会
PDF
今さらながらRSpecに入門してみた
ODP
RSpecのここがすごい!
PPTX
ライトニングトーク資料 OSC東京2017秋
PPTX
実は怖くないDevOps
PPTX
RSpecの実行速度を3.5倍にした話
PPT
Kubo100903
ODP
Rails-Plugin Flexturesの紹介
PPT
PDF
Rspec、あなたならどう書く? 20190626
PPTX
Rails on rspec plactice
PPTX
Rails on rspec plactice
PDF
あなたの安心を高速に守る Container-based CI
PDF
Introduction to guard + rspec
PDF
SpockからRSpecにきたときの気づき #coedorb
PDF
テスト大嫌いっ娘のRSpec
PDF
Ruby on Railsではじめるrspecテスト
PDF
RSpec と Cucumber
PDF
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
R spec勉強会
今さらながらRSpecに入門してみた
RSpecのここがすごい!
ライトニングトーク資料 OSC東京2017秋
実は怖くないDevOps
RSpecの実行速度を3.5倍にした話
Kubo100903
Rails-Plugin Flexturesの紹介
Rspec、あなたならどう書く? 20190626
Rails on rspec plactice
Rails on rspec plactice
あなたの安心を高速に守る Container-based CI
Introduction to guard + rspec
SpockからRSpecにきたときの気づき #coedorb
テスト大嫌いっ娘のRSpec
Ruby on Railsではじめるrspecテスト
RSpec と Cucumber
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study

More from Drecom Co., Ltd. (16)

PDF
コンテナで始める柔軟な AWS Lambda 生活
PDF
サービスのインシデントを解決するには.pdf
PPTX
ドリコムサマージョブ報告 by 佐々木 誠治
PPTX
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
PDF
HTML5 ゲームフレームワーク開発について
PDF
「AROW」お披露目(導入編)
PDF
「AROW」お披露目(実用編)
PDF
AROW の紹介 〜概要編〜
PDF
AROW の紹介 〜実践編〜
PDF
rails-developers-meetup-day4
PDF
html5conf2018-sponsor-session
PPTX
DApps のユーザ認証に web3.eth.personal.sign を使おう!
PPTX
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
PPTX
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
PDF
今月のレッツゴー陰陽師!
PDF
位置情報を常に取得するのはつらいよ
コンテナで始める柔軟な AWS Lambda 生活
サービスのインシデントを解決するには.pdf
ドリコムサマージョブ報告 by 佐々木 誠治
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
HTML5 ゲームフレームワーク開発について
「AROW」お披露目(導入編)
「AROW」お披露目(実用編)
AROW の紹介 〜概要編〜
AROW の紹介 〜実践編〜
rails-developers-meetup-day4
html5conf2018-sponsor-session
DApps のユーザ認証に web3.eth.personal.sign を使おう!
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
今月のレッツゴー陰陽師!
位置情報を常に取得するのはつらいよ

地獄Spec