Soumettre la recherche
Mettre en ligne
地獄Spec
•
22 j'aime
•
4,632 vues
Tsunenori Oohara
Suivre
Railsだったり勉強会 地獄のRspec
Lire moins
Lire la suite
Signaler
Partager
Signaler
Partager
1 sur 46
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
Junichi Ito
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
Go Sueyoshi (a.k.a sue445)
gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarb
Go Sueyoshi (a.k.a sue445)
SIG-Audio#13 アンケート集計結果
SIG-Audio#13 アンケート集計結果
IGDA Japan SIG-Audio
Arduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitch
Bizan Nishimura
Gunmaweb #9 LT
Gunmaweb #9 LT
Makoto Yonezawa
すごいタスク管理(仮)
すごいタスク管理(仮)
Kakigi Katuyuki
「仙台ミラソン」行って来た
「仙台ミラソン」行って来た
Hirokazu Tokuno
Recommandé
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
Junichi Ito
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
Go Sueyoshi (a.k.a sue445)
gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarb
Go Sueyoshi (a.k.a sue445)
SIG-Audio#13 アンケート集計結果
SIG-Audio#13 アンケート集計結果
IGDA Japan SIG-Audio
Arduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitch
Bizan Nishimura
Gunmaweb #9 LT
Gunmaweb #9 LT
Makoto Yonezawa
すごいタスク管理(仮)
すごいタスク管理(仮)
Kakigi Katuyuki
「仙台ミラソン」行って来た
「仙台ミラソン」行って来た
Hirokazu Tokuno
Reinvent first-participation-report
Reinvent first-participation-report
j3miyake
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
鉄次 尾形
Scala.js
Scala.js
ke-m kamekoopa
from_beginner_to_engineer
from_beginner_to_engineer
Yuka Tokuyama
RStudioでRをはじめよう(R for Beginner using RStudio)
RStudioでRをはじめよう(R for Beginner using RStudio)
Takashi Minoda
私が見てきたあるセカイの物語 Part I & II
私が見てきたあるセカイの物語 Part I & II
Koichi ITO
コンテナー型仮想環境の情報交換会
コンテナー型仮想環境の情報交換会
Naotaka Jay HOTTA
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
Seiichiro Ishida
Introduction r (R入門)
Introduction r (R入門)
Takashi Minoda
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
鉄次 尾形
Fluentd,mongo db,rでお手軽ログ解析環境
Fluentd,mongo db,rでお手軽ログ解析環境
Michitaka Iida
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
torutk
ガンダムから学ぶプログラマの心構え
ガンダムから学ぶプログラマの心構え
Yuuki Ooguro
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
Drecom Co., Ltd.
iPhoneアプリ無料勉強会 vol1
iPhoneアプリ無料勉強会 vol1
codeal
Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-
Hiroki Sakamoto
Tokyo r30 beginner
Tokyo r30 beginner
Takashi Minoda
java-ja TDD 2nd
java-ja TDD 2nd
Takuto Wada
RSpecが遅いからはやくしてみた...................................
RSpecが遅いからはやくしてみた...................................
yutonoda2
Tokyo r38
Tokyo r38
Takashi Minoda
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
Contenu connexe
Tendances
Reinvent first-participation-report
Reinvent first-participation-report
j3miyake
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
鉄次 尾形
Scala.js
Scala.js
ke-m kamekoopa
from_beginner_to_engineer
from_beginner_to_engineer
Yuka Tokuyama
RStudioでRをはじめよう(R for Beginner using RStudio)
RStudioでRをはじめよう(R for Beginner using RStudio)
Takashi Minoda
私が見てきたあるセカイの物語 Part I & II
私が見てきたあるセカイの物語 Part I & II
Koichi ITO
コンテナー型仮想環境の情報交換会
コンテナー型仮想環境の情報交換会
Naotaka Jay HOTTA
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
Seiichiro Ishida
Introduction r (R入門)
Introduction r (R入門)
Takashi Minoda
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
鉄次 尾形
Fluentd,mongo db,rでお手軽ログ解析環境
Fluentd,mongo db,rでお手軽ログ解析環境
Michitaka Iida
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
torutk
ガンダムから学ぶプログラマの心構え
ガンダムから学ぶプログラマの心構え
Yuuki Ooguro
Tendances
(13)
Reinvent first-participation-report
Reinvent first-participation-report
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
Scala.js
Scala.js
from_beginner_to_engineer
from_beginner_to_engineer
RStudioでRをはじめよう(R for Beginner using RStudio)
RStudioでRをはじめよう(R for Beginner using RStudio)
私が見てきたあるセカイの物語 Part I & II
私が見てきたあるセカイの物語 Part I & II
コンテナー型仮想環境の情報交換会
コンテナー型仮想環境の情報交換会
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
Introduction r (R入門)
Introduction r (R入門)
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
Fluentd,mongo db,rでお手軽ログ解析環境
Fluentd,mongo db,rでお手軽ログ解析環境
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
ガンダムから学ぶプログラマの心構え
ガンダムから学ぶプログラマの心構え
Similaire à 地獄Spec
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
Drecom Co., Ltd.
iPhoneアプリ無料勉強会 vol1
iPhoneアプリ無料勉強会 vol1
codeal
Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-
Hiroki Sakamoto
Tokyo r30 beginner
Tokyo r30 beginner
Takashi Minoda
java-ja TDD 2nd
java-ja TDD 2nd
Takuto Wada
RSpecが遅いからはやくしてみた...................................
RSpecが遅いからはやくしてみた...................................
yutonoda2
Tokyo r38
Tokyo r38
Takashi Minoda
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
Masataka Sato
PreadNet
PreadNet
Junya Kuwada
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
Hiroyuki Ohnaka
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
Redmineプラグイン導入・開発入門
Redmineプラグイン導入・開発入門
Minoru Maeda
RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
Sea Mountain
Infrastructure as Codeってなんだったっけ?
Infrastructure as Codeってなんだったっけ?
Terui Masashi
こんな辛いテストはいやだ
こんな辛いテストはいやだ
Takuya Mikami
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
耕二 阿部
第1回 Android勉強会
第1回 Android勉強会
fujikunn
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
Tomohiko Himura
Similaire à 地獄Spec
(20)
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
iPhoneアプリ無料勉強会 vol1
iPhoneアプリ無料勉強会 vol1
Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-
Tokyo r30 beginner
Tokyo r30 beginner
java-ja TDD 2nd
java-ja TDD 2nd
RSpecが遅いからはやくしてみた...................................
RSpecが遅いからはやくしてみた...................................
Tokyo r38
Tokyo r38
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
PreadNet
PreadNet
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
Redmineプラグイン導入・開発入門
Redmineプラグイン導入・開発入門
RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
Infrastructure as Codeってなんだったっけ?
Infrastructure as Codeってなんだったっけ?
こんな辛いテストはいやだ
こんな辛いテストはいやだ
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
第1回 Android勉強会
第1回 Android勉強会
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
Plus de Tsunenori Oohara
Elixirハンズオン2
Elixirハンズオン2
Tsunenori Oohara
meguro.rb LT
meguro.rb LT
Tsunenori Oohara
Elixir解答
Elixir解答
Tsunenori Oohara
Elixir言語紹介
Elixir言語紹介
Tsunenori Oohara
パンチラに関する考察
パンチラに関する考察
Tsunenori Oohara
how-to-learn-elixir
how-to-learn-elixir
Tsunenori Oohara
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
Tsunenori Oohara
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
Tsunenori Oohara
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
Tsunenori Oohara
Tokyoex6 EEx
Tokyoex6 EEx
Tsunenori Oohara
running-elixir-in-production
running-elixir-in-production
Tsunenori Oohara
hello waf, hello phoenix
hello waf, hello phoenix
Tsunenori Oohara
tokyo.ex3 LT
tokyo.ex3 LT
Tsunenori Oohara
running web app on elixir
running web app on elixir
Tsunenori Oohara
Elixir lang bootstrap
Elixir lang bootstrap
Tsunenori Oohara
Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介ver.2
Tsunenori Oohara
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
Tsunenori Oohara
elixir in production
elixir in production
Tsunenori Oohara
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
Tsunenori Oohara
Plus de Tsunenori Oohara
(20)
Elixirハンズオン2
Elixirハンズオン2
meguro.rb LT
meguro.rb LT
Elixir解答
Elixir解答
Elixir言語紹介
Elixir言語紹介
パンチラに関する考察
パンチラに関する考察
how-to-learn-elixir
how-to-learn-elixir
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
Tokyoex6 EEx
Tokyoex6 EEx
running-elixir-in-production
running-elixir-in-production
hello waf, hello phoenix
hello waf, hello phoenix
tokyo.ex3 LT
tokyo.ex3 LT
running web app on elixir
running web app on elixir
Elixir lang bootstrap
Elixir lang bootstrap
Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介ver.2
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
elixir in production
elixir in production
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
地獄Spec
1.
地獄の RSpec 逃げちゃだめだ、逃げちゃだめだ・・・
おおはら@Drecom Co., Ltd.
2.
警告 このプレゼンを見てから7日以内にspecヲ 20コGreenにしないといけません。さもなくば 貴方のプロジェクトは炎上し、メンバーは 疲れ果て疾走し行方不明になる可能性 があります。 貴方のプロジェクト、大丈夫ですか・・・?
3.
提供 DRECOM
R With entertainment
4.
自己紹介 おおはらつねのり アプリケーションエンジニア 所属:広告事業本部 twitterアカウント:@ohrdev
5.
経歴 Rails歴:2年半 札幌の会社からドリコムへ転職 元SIer(元IT亡者) ソーシャルゲームはヤった事ない(シゴトハノゾク)
6.
7.
今日の おはなし
8.
テスト
9.
RSpec
10.
質問1 spec
11.
何
緑 時 赤 最 初 気 。 。
12.
グリーン維 持は大変
13.
質問2 グリーン維 持してる?
14.
理想的な プロジェクト なら・・・
15.
16.
だが現実は キビシイ・・・
17.
18.
現実
19.
20.
うちのシステ ムでRSPEC導 入した時の話
21.
組織(広告事業部)
企画 営業 開発 受注 クライアント カスタマー サポート
22.
サービス(poncan) ソーシャルアプリ向けリワード広告サービス http://www.slideshare.net/CyLab/poncan2 リワード広告とは: ユーザーに広告を提供し、その成果に対して 一定の報酬(ポイント等)を支払うサービス
23.
システム(poncan) Rails2.3.8 + passenger Ruby1.8.7 MySQL5 Memcached(acts_as_cached) Resque/Redis
24.
運用 止めれない(サーバー停止のメンテは基本なし) Migrationは使用しない(できない) →openark kit/oak-online-alter-table (1日のリリース:2.1回) (1日コミット数:22.3回) (毎日リリース・毎週機能追加・拡張)
25.
背景 テストコード(メンテされて)なかった リリースまでに(チェックで)時間かかる 漏れや事故が多い
26.
バグ
事故 漏れ poncan 安心感 テストコード(のメンテ)不足
27.
28.
Specを書けよ デコ助野郎!
29.
RSpec
開発メンバー
30.
①導入前の状態 有効なRSpecほぼ無し 自動生成されたtestunitが少々 誰も動かしていない 当然メンテもしていない
31.
②導入直後にやった事 メンテされていないテストコードは削除 -流用できないコード多数 -そもそも仕様が既に変わっている 自動生成されたコードも削除 テスト用データ -fixturesからFactoryGirlに移行
32.
②失敗・教訓(導入直後) とりあえず動くだけでは不十分 -実行時間が長いと流さなくなる 自動で動かさないと忘れる -autotest使うようにした テストデータを全てFactoryGirlで賄うのは面倒 -マスタデータはfixtures
-トランザクションデータはFactoryGirl
33.
③しばらく経って(1週間位)やった事 Specを書く対象を絞った -まずはmodelから書いていく事にした -controllerは後回し
34.
③失敗・教訓(しばらく経って) ビジネスロジック部分をspecの対象にすべきだった -modelだけでは不十分で、(Fat)controller のロジック部分も対象にしないと無意味 万遍なくspecを書こうとして途方に暮れた -全部書く時間ない・モチベーション下がる -修正の入った箇所から充実させていった
35.
④慣れてきた頃(1ヶ月位)にやった事 CIを導入した -手軽なBigTunaを採用 遅い処理の改善 -テストダブル(モック・スタブ)に置き換え -migrationからschema.rb読み込みに変更
36.
④失敗・教訓(慣れてきた頃) CIの失敗通知が続いてREDに慣れてしまった -失敗だけでなく失敗数も通知するようにした -オールグリーンを目標に設定 -だんだんREDが減っていくのを見てモチベ△ メンバー間のspecの書き方に統一性が無くなってきた -勉強会・共有会で書き方をある程度共有 -THE RSPEC BOOK
37.
⑤充実してきた頃(3ヶ月位)にやった事 カバレッジを指標にした -rake spec:rcov テストデータの整理 -モデル(テーブル)数80くらい
38.
⑤失敗・教訓(充実してきた頃) カバレッジは万能じゃない -「レガシーコード=テストの無いコード」なので意 味はあるが・・・ -Reekを取るようにした(お手軽/ReekViewer) https://github.com/Shinya131/reekviewer FactoryGirlがパンクした -factory.rbに全てぶっ込むのではなく、
factoriesフォルダ以下にファイル分割配置 -リレーション指定やりすぎると破綻(メンテ不能)に
39.
⑥グリーンになって(5ヶ月位)にやった事 trunkとbranchに対してそれぞれCIを回した -管理・配信・配信(mixi特化)アプリごとに、そ れぞれ計6つのCIを回す -trunkとbranchの差分を全てチェック(苦行) レッドからグリーンにするではなく、グリーンを維持する
ように目標をシフト
40.
⑥失敗・教訓(グリーンになって) Trunkはグリーンだけど、branchはレッドという状況に -息の長いbranchだと未マージ・マージ漏れが 発生しうる -特定のコードをbranchにマージする・しないで赤
だったり緑だったりするケースがある なるべくtrunkとbranchの差分を小さくするように意 識
41.
⑦そして今に至る・・・
ビフォー
42.
⑦そして今に至る・・・ アフター
43.
結果どうなった? リリース頻度が加速 -漏れ・事故が少なくなった -即リリース・即bug発見・即修正・即リリース・・・ “ある程度”安心できる trunkとbrunchの差分が減った 100%bug潰すのは無理だけど、即発見・修正はでき る
44.
今後 Rails2.3.8から、Rails3.xにVerUp -Jenkins + rvm
+ rails3.x でCI回す もうなにも怖くない(CIまわしてればある程度) Seleniumで面もチェック -目確認は(最低限しか)したくない 引き続きGREEN維持
45.
まとめ RSpecちゃんとしたら、リリース頻度あがった Specメンテ => CI導入
じゃなくて、 CI導入 => Specメンテ ってするとウマく回った BUG潰し・予防よりもBUGの早期発見・早期修正に役 立った BUGは出る時は出る、Rspec/CIは万能じゃないの で注意
46.
ドリコムメンバー募集 ドリコム広告事業本部では、テスト好きなメンバーを 募集しています。 http://www.drecom.co.jp/recruit/
Télécharger maintenant