s is for spec
DESCRIPTION
Bowling Game Kata live coding w/ RSpec in Ruby.TRANSCRIPT
![Page 1: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/1.jpg)
スはスペックのス~RSpecによるテスト駆動開発の実演~
JPUG北海道支部/Ruby札幌 合同セミナー;札幌エルプラザ; 2008-2-16(土)
角谷 信太郎“S is for Spec”:Test Driven Development w/ RSpec
日本Rubyの会(株)永和システムマネジメント
[email protected] Shintaro; Eiwa System Management,Inc.; Nihon Ruby-no-kai
![Page 2: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/2.jpg)
角谷 信太郎✓ (株)永和システムマネジメント
✓ テスト駆動開発者✓ 日本Rubyの会理事✓ http://kakutani.com
![Page 3: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/3.jpg)
![Page 4: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/4.jpg)
よろしくお願いします
![Page 5: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/5.jpg)
告知
![Page 6: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/6.jpg)
RubyKaigi2008CFP募集は明日〆切
http://jp.rubyist.net/RubyKaigi2008/
![Page 7: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/7.jpg)
よろしくお願いします
![Page 8: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/8.jpg)
提 供
Ruby札幌
![Page 9: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/9.jpg)
テスト・クラブ
TEST CLUB
Red, Green, Refactoring
![Page 10: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/10.jpg)
諸君 テスト・クラブへようこそ
![Page 11: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/11.jpg)
テスト・クラブ 第1のルール
![Page 12: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/12.jpg)
1. クラブのことを口外するな2. クラブのことを口外するな3. “ちょっといいかな”の声で ドライバとナビゲータは交代4. コーディングは1対1のペア5. いちどに1つのテストケース6. メッセとTwitterは切る7. 書くテストに制限はない
![Page 13: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/13.jpg)
8番目、最後のルール
![Page 14: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/14.jpg)
“部員は入会した初日に――”
![Page 15: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/15.jpg)
“必ずテストを書く”
![Page 16: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/16.jpg)
テスト・クラブ
TEST CLUB
Red, Green, Refactoring
![Page 17: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/17.jpg)
1. テスト駆動開発(TDD)の ポイントを知る2. Ruby用のツールである RSpecを簡単に紹介3. RSpecでTDDの実演
本日のお品書き
![Page 18: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/18.jpg)
今日のまとめ✓ TDDは設計技法であり、 開発の進め方である✓ いちどにひとつずつ✓ 不安をテストで表現する✓ リズムとフィードバック
![Page 19: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/19.jpg)
テスト駆動開発Test Driven Development
![Page 20: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/20.jpg)
✓ 1つのゴール✓ 1つのテーマ✓ 2つの主張✓ 2つのルール✓ 3つのモード✓ 3つの技法✓ 4つのモード
![Page 21: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/21.jpg)
1つのゴール
![Page 22: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/22.jpg)
TDD by Example
![Page 23: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/23.jpg)
偉大な書籍は偉大な1行から
はじまる
![Page 24: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/24.jpg)
Clean code that works, in Ron Jeffries’ pithy phrase, is
the goal of Test-Driven Development(TDD).
「動作するきれいなコード」、
このRon Jefferiesの簡潔な言葉こそが
TDDのゴールである。
![Page 25: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/25.jpg)
動作するきれいなコード“Clean code that works”
![Page 26: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/26.jpg)
1つのテーマ
![Page 27: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/27.jpg)
“The translation of a feeling into a test is a
common theme of TDD.”
感情をテストにすることが、TDDのテーマである。
![Page 28: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/28.jpg)
感情をテストにする
![Page 29: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/29.jpg)
✓ 不安だ✓ 何かがおかしい✓ これでいい✓ 退屈だ✓ テストを構造化する✓ 書くのを止める
感情をテストにする
![Page 30: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/30.jpg)
2つの主張
![Page 31: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/31.jpg)
1. 設計の技法2. 開発の進め方
TDDは、
![Page 32: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/32.jpg)
テスト駆動開発Test Driven Development
![Page 33: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/33.jpg)
(1)
![Page 34: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/34.jpg)
設計の技法
![Page 35: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/35.jpg)
ソフトウェア設計とは何か?What is Software Design?
By Jack W. Reeves
![Page 36: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/36.jpg)
村上 雅章さんによる翻訳
http://www.biwa.ne.jp/~mmura/SoftwareDevelopment/WhatIsSoftwareDesignJ.html
![Page 37: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/37.jpg)
ソフトウェア設計とは何か?
✓ 設計: ソースコード✓ 製造: ビルド
![Page 38: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/38.jpg)
コーディングは設計であり、テスティングとデバッギングも設計の一部であり、私たちが一般的にソフトウェア設計と呼んでいるものもやはり設計の一部なのです。
![Page 39: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/39.jpg)
ソフトウェア設計はコーディングが完了し、「かつ」テストされるまでは完璧にならないのです。そして、テスティングは設計の検証と洗練を行うプロセスにおける礎となるものです。
![Page 40: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/40.jpg)
設計の技法
![Page 41: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/41.jpg)
(2)
![Page 42: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/42.jpg)
開発の進め方
![Page 43: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/43.jpg)
テストの分類✓ Developer Testing✓ 開発者が行う、開発促進のためのテスト
✓ Customer Testing✓ お客様と機能の確認のために用いる、 進捗管理のためのテスト
✓ QA Testing✓ 品質保証のためのテスト
![Page 44: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/44.jpg)
Developer Testing✓ プログラマの、✓ プログラマによる、✓ プログラマのための、✓ プログラムとして書く、✓ プログラミングを進めていくための、✓ テスト
![Page 45: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/45.jpg)
開発の進め方
![Page 46: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/46.jpg)
1. 設計の技法2. 開発の進め方
TDDは、
![Page 47: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/47.jpg)
テスト駆動開発Test Driven Development
![Page 48: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/48.jpg)
クは駆動のクD is for Driven
![Page 49: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/49.jpg)
2つのルール
![Page 50: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/50.jpg)
1. テストに失敗し たときだけコー ドを書く2. 重複を取り除く
![Page 51: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/51.jpg)
3つのモード
![Page 52: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/52.jpg)
✓ Red✓ テストに失敗している状態
✓ Green✓ コードが動作している状態
✓ Refactoring✓ コードの意味を変えずにきれいにする
2つのルールが導くもの
![Page 53: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/53.jpg)
終了花畑
動かない
きれい
汚ない
動く
現実理想
GREEN
REDRefactoring
![Page 54: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/54.jpg)
いま、どのモードなのかを意識するのが大事
![Page 55: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/55.jpg)
3つの技法
![Page 56: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/56.jpg)
3つの技法✓ Fake It✓ いんちき
✓ Triangulate✓ 三角測量。二方向から挟み撃ちに
✓ Obvious Implementation✓ ふつうに実装する
![Page 57: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/57.jpg)
Triangulate
![Page 58: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/58.jpg)
4つのモード
![Page 59: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/59.jpg)
3つのモード
![Page 60: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/60.jpg)
RED
GREEN
Refactoring
![Page 61: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/61.jpg)
3つのモードで明示されていないモードを追加
![Page 62: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/62.jpg)
The Art of Agile Development
![Page 63: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/63.jpg)
Think
RED
GREEN
Refactoring
![Page 64: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/64.jpg)
TDDのマントラ
![Page 65: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/65.jpg)
シンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシ
![Page 66: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/66.jpg)
✓ 1つのゴール✓ 1つのテーマ✓ 2つの主張✓ 2つのルール✓ 3つのモード✓ 3つの技法✓ 4つのモード
![Page 67: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/67.jpg)
今日のまとめ✓ TDDは設計技法であり、 開発の進め方である✓ いちどにひとつずつ✓ 不安をテストで表現する✓ リズムとフィードバック
![Page 68: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/68.jpg)
RSpec
![Page 69: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/69.jpg)
RSpecとは✓「テスト」が設計であることを強調するテスティングフレームワーク✓ Rubyを使って、プログラムの振舞の本質に集中できる書き方を可能にしている
![Page 71: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/71.jpg)
Rubyist Magazine 0021号“スはスペックのス”(第1回)
http://jp.rubyist.net/magazine/?0021-Rspec
![Page 72: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/72.jpg)
RSpecのインストール
$ gem install rspec
![Page 73: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/73.jpg)
スペックファイルの構造describe Class, "コンテキスト" do before(:each) do # コンテキストのお膳立て end
it "期待する振舞いの名前" do # ここに期待する振舞いを書く endend
![Page 74: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/74.jpg)
簡単な例describe Array, "with some entries" do before(:each) do @array = %w(A B C) end
it "should not be nil" do @array.should_not be_nil end
it "should last element is 'C'" do @array.last.should == 'C' endend
![Page 75: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/75.jpg)
実行(-cオプション)$ spec -c array_spec.rb..
Finished in 0.00812 seconds
2 examples, 0 failures
![Page 76: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/76.jpg)
期待する振舞の書き方
@array.should_not be_nil# @array.nil? がfalseであることを期待
@array.last.should == 'C'# @array.last が 'C' と等しいことを期待
✓ Object#should(matcher)
✓ Object#should_not(matcher)
![Page 77: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/77.jpg)
さまざまなマッチャ✓ 演算子マッチャ✓ ==, ===, <, <=, =~, >, >=✓ ビルトインのマッチャ✓ change,raise_error, satisfy, be_close...✓ be_xxxマッチャ✓ be_true / be_false✓ have_xxx マッチャ✓ ユーザ定義のマッチャ
![Page 78: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/78.jpg)
続きは
![Page 79: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/79.jpg)
Rubyist Magazine 0021号“スはスペックのス”(第1回)
http://jp.rubyist.net/magazine/?0021-Rspec
![Page 80: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/80.jpg)
実演
![Page 81: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/81.jpg)
ボウリングのスコア算出
![Page 82: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/82.jpg)
Bowling Game Kata
Object Mentor, Inc.
fitnesse.orgCopyright 2005 by Object Mentor, Inc
All copies must retain this page unchanged.
www.junit.org
www.objectmentor.com
blog.objectmentor.com
The Bowling Game Kataby Robert C.Martin(Uncle Bob)
http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
![Page 84: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/84.jpg)
✓ 空手の「型」✓ 単純な定型を反復✓ 素振り✓ カラダでおぼえる
コード=カタ
http://codekata.pragprog.com/
![Page 85: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/85.jpg)
ボウリングのスコア✓ 1フレームで2投するのが基本✓ 1ゲームは10フレーム✓ ストライクは、次の2投をボーナス加算✓ スペアは、次の1投をボーナス加算✓ 10フレーム目で10ピン倒せば 合計で3投できる
![Page 86: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/86.jpg)
今回の仕様
✓ 1ゲーム(10フレーム、最大21投)の 投球をすべて記録してから、✓ 最後にまとめてスコアを算出する
![Page 87: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/87.jpg)
4
5
54
14
6
29
5
49 60
10
61
7
77
6
97 117
2 6
133
19
受入テストケース
1,4,4,5,6,4,5,5, 10, 0,1,7,3,6,4,10,2,8,6
![Page 88: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/88.jpg)
使用するツール✓ Ruby 1.8.6 p111✓ RSpec 1.1.3✓ CarbonEmacs 22.1.50.1✓ ZenTest 3.9.1✓ AutoTestを使いたい✓ autotest.el
![Page 89: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/89.jpg)
作戦
1. スコアを集計する2. ストライクの場合のボーナス3. スペアの場合のボーナス4. 受入テスト
![Page 90: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/90.jpg)
今日のまとめ✓ TDDは設計技法であり、 開発の進め方である✓ いちどにひとつずつ✓ 不安をテストで表現する✓ リズムとフィードバック
![Page 91: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/91.jpg)
参考文献
![Page 92: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/92.jpg)
参考文献1. テスト駆動開発2. リファクタリング3. オブジェクト設計4. デザインパターン
![Page 93: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/93.jpg)
テスト駆動開発
![Page 94: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/94.jpg)
リファクタリング
![Page 95: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/95.jpg)
オブジェクト設計
![Page 96: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/96.jpg)
デザインパターン
![Page 97: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/97.jpg)
ご清聴ありがとうございました
![Page 98: S is for Spec](https://reader033.vdocuments.us/reader033/viewer/2022042714/554a03b1b4c905e56c8b538a/html5/thumbnails/98.jpg)
use Rspec.
Tyler Durden says...