s is for spec

98
スはスペック のス ~RSpecによる テスト駆動開発の実演~ JPUG北海道支部/Ruby札幌 合同セミナー;札幌エルプラザ; 2008-2-16(土) 角谷 信太郎 “S is for Spec”:Test Driven Development w/ RSpec 日本Rubyの会 (株)永和システムマネジメント [email protected] KAKUTANI Shintaro; Eiwa System Management,Inc.; Nihon Ruby-no-kai

Upload: shintaro-kakutani

Post on 06-May-2015

9.174 views

Category:

Technology


2 download

DESCRIPTION

Bowling Game Kata live coding w/ RSpec in Ruby.

TRANSCRIPT

Page 1: S is for Spec

スはスペックのス~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

角谷 信太郎✓ (株)永和システムマネジメント

✓ テスト駆動開発者✓ 日本Rubyの会理事✓ http://kakutani.com

Page 3: S is for Spec
Page 4: S is for Spec

よろしくお願いします

Page 5: S is for Spec

告知

Page 6: S is for Spec

RubyKaigi2008CFP募集は明日〆切

http://jp.rubyist.net/RubyKaigi2008/

Page 7: S is for Spec

よろしくお願いします

Page 8: S is for Spec

提 供

Ruby札幌

Page 9: S is for Spec

テスト・クラブ

TEST CLUB

Red, Green, Refactoring

Page 10: S is for Spec

諸君 テスト・クラブへようこそ

Page 11: S is for Spec

テスト・クラブ 第1のルール

Page 12: S is for Spec

1. クラブのことを口外するな2. クラブのことを口外するな3. “ちょっといいかな”の声で ドライバとナビゲータは交代4. コーディングは1対1のペア5. いちどに1つのテストケース6. メッセとTwitterは切る7. 書くテストに制限はない

Page 13: S is for Spec

8番目、最後のルール

Page 14: S is for Spec

“部員は入会した初日に――”

Page 15: S is for Spec

“必ずテストを書く”

Page 16: S is for Spec

テスト・クラブ

TEST CLUB

Red, Green, Refactoring

Page 17: S is for Spec

1. テスト駆動開発(TDD)の ポイントを知る2. Ruby用のツールである RSpecを簡単に紹介3. RSpecでTDDの実演

本日のお品書き

Page 18: S is for Spec

今日のまとめ✓ TDDは設計技法であり、 開発の進め方である✓ いちどにひとつずつ✓ 不安をテストで表現する✓ リズムとフィードバック

Page 19: S is for Spec

テスト駆動開発Test Driven Development

Page 20: S is for Spec

✓ 1つのゴール✓ 1つのテーマ✓ 2つの主張✓ 2つのルール✓ 3つのモード✓ 3つの技法✓ 4つのモード

Page 21: S is for Spec

1つのゴール

Page 22: S is for Spec

TDD by Example

Page 23: S is for Spec

偉大な書籍は偉大な1行から

はじまる

Page 24: S is for Spec

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

動作するきれいなコード“Clean code that works”

Page 26: S is for Spec

1つのテーマ

Page 27: S is for Spec

“The translation of a feeling into a test is a

common theme of TDD.”

感情をテストにすることが、TDDのテーマである。

Page 28: S is for Spec

感情をテストにする

Page 29: S is for Spec

✓ 不安だ✓ 何かがおかしい✓ これでいい✓ 退屈だ✓ テストを構造化する✓ 書くのを止める

感情をテストにする

Page 30: S is for Spec

2つの主張

Page 31: S is for Spec

1. 設計の技法2. 開発の進め方

TDDは、

Page 32: S is for Spec

テスト駆動開発Test Driven Development

Page 33: S is for Spec

(1)

Page 34: S is for Spec

設計の技法

Page 35: S is for Spec

ソフトウェア設計とは何か?What is Software Design?

By Jack W. Reeves

Page 36: S is for Spec

村上 雅章さんによる翻訳

http://www.biwa.ne.jp/~mmura/SoftwareDevelopment/WhatIsSoftwareDesignJ.html

Page 37: S is for Spec

ソフトウェア設計とは何か?

✓ 設計: ソースコード✓ 製造: ビルド

Page 38: S is for Spec

コーディングは設計であり、テスティングとデバッギングも設計の一部であり、私たちが一般的にソフトウェア設計と呼んでいるものもやはり設計の一部なのです。

Page 39: S is for Spec

ソフトウェア設計はコーディングが完了し、「かつ」テストされるまでは完璧にならないのです。そして、テスティングは設計の検証と洗練を行うプロセスにおける礎となるものです。

Page 40: S is for Spec

設計の技法

Page 41: S is for Spec

(2)

Page 42: S is for Spec

開発の進め方

Page 43: S is for Spec

テストの分類✓ Developer Testing✓ 開発者が行う、開発促進のためのテスト

✓ Customer Testing✓ お客様と機能の確認のために用いる、 進捗管理のためのテスト

✓ QA Testing✓ 品質保証のためのテスト

Page 44: S is for Spec

Developer Testing✓ プログラマの、✓ プログラマによる、✓ プログラマのための、✓ プログラムとして書く、✓ プログラミングを進めていくための、✓ テスト

Page 45: S is for Spec

開発の進め方

Page 46: S is for Spec

1. 設計の技法2. 開発の進め方

TDDは、

Page 47: S is for Spec

テスト駆動開発Test Driven Development

Page 48: S is for Spec

クは駆動のクD is for Driven

Page 49: S is for Spec

2つのルール

Page 50: S is for Spec

1. テストに失敗し たときだけコー ドを書く2. 重複を取り除く

Page 51: S is for Spec

3つのモード

Page 52: S is for Spec

✓ Red✓ テストに失敗している状態

✓ Green✓ コードが動作している状態

✓ Refactoring✓ コードの意味を変えずにきれいにする

2つのルールが導くもの

Page 53: S is for Spec

終了花畑

動かない

きれい

汚ない

動く

現実理想

GREEN

REDRefactoring

Page 54: S is for Spec

いま、どのモードなのかを意識するのが大事

Page 55: S is for Spec

3つの技法

Page 56: S is for Spec

3つの技法✓ Fake It✓ いんちき

✓ Triangulate✓ 三角測量。二方向から挟み撃ちに

✓ Obvious Implementation✓ ふつうに実装する

Page 57: S is for Spec

Triangulate

Page 58: S is for Spec

4つのモード

Page 59: S is for Spec

3つのモード

Page 60: S is for Spec

RED

GREEN

Refactoring

Page 61: S is for Spec

3つのモードで明示されていないモードを追加

Page 62: S is for Spec

The Art of Agile Development

Page 63: S is for Spec

Think

RED

GREEN

Refactoring

Page 64: S is for Spec

TDDのマントラ

Page 65: S is for Spec

シンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシンクレッドグリーンリファクタシ

Page 66: S is for Spec

✓ 1つのゴール✓ 1つのテーマ✓ 2つの主張✓ 2つのルール✓ 3つのモード✓ 3つの技法✓ 4つのモード

Page 67: S is for Spec

今日のまとめ✓ TDDは設計技法であり、 開発の進め方である✓ いちどにひとつずつ✓ 不安をテストで表現する✓ リズムとフィードバック

Page 68: S is for Spec

RSpec

Page 69: S is for Spec

RSpecとは✓「テスト」が設計であることを強調するテスティングフレームワーク✓ Rubyを使って、プログラムの振舞の本質に集中できる書き方を可能にしている

Page 70: S is for Spec

http://rspec.info

Page 71: S is for Spec

Rubyist Magazine 0021号“スはスペックのス”(第1回)

http://jp.rubyist.net/magazine/?0021-Rspec

Page 72: S is for Spec

RSpecのインストール

$ gem install rspec

Page 73: S is for Spec

スペックファイルの構造describe Class, "コンテキスト" do before(:each) do # コンテキストのお膳立て end

it "期待する振舞いの名前" do # ここに期待する振舞いを書く endend

Page 74: S is for Spec

簡単な例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

実行(-cオプション)$ spec -c array_spec.rb..

Finished in 0.00812 seconds

2 examples, 0 failures

Page 76: S is for Spec

期待する振舞の書き方

@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

さまざまなマッチャ✓ 演算子マッチャ✓ ==, ===, <, <=, =~, >, >=✓ ビルトインのマッチャ✓ change,raise_error, satisfy, be_close...✓ be_xxxマッチャ✓ be_true / be_false✓ have_xxx マッチャ✓ ユーザ定義のマッチャ

Page 78: S is for Spec

続きは

Page 79: S is for Spec

Rubyist Magazine 0021号“スはスペックのス”(第1回)

http://jp.rubyist.net/magazine/?0021-Rspec

Page 80: S is for Spec

実演

Page 81: S is for Spec

ボウリングのスコア算出

Page 82: S is for Spec

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 83: S is for Spec

コード=カタ

http://codekata.pragprog.com/

Page 84: S is for Spec

✓ 空手の「型」✓ 単純な定型を反復✓ 素振り✓ カラダでおぼえる

コード=カタ

http://codekata.pragprog.com/

Page 85: S is for Spec

ボウリングのスコア✓ 1フレームで2投するのが基本✓ 1ゲームは10フレーム✓ ストライクは、次の2投をボーナス加算✓ スペアは、次の1投をボーナス加算✓ 10フレーム目で10ピン倒せば 合計で3投できる

Page 86: S is for Spec

今回の仕様

✓ 1ゲーム(10フレーム、最大21投)の 投球をすべて記録してから、✓ 最後にまとめてスコアを算出する

Page 87: S is for Spec

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

使用するツール✓ 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

作戦

1. スコアを集計する2. ストライクの場合のボーナス3. スペアの場合のボーナス4. 受入テスト

Page 90: S is for Spec

今日のまとめ✓ TDDは設計技法であり、 開発の進め方である✓ いちどにひとつずつ✓ 不安をテストで表現する✓ リズムとフィードバック

Page 91: S is for Spec

参考文献

Page 92: S is for Spec

参考文献1. テスト駆動開発2. リファクタリング3. オブジェクト設計4. デザインパターン

Page 93: S is for Spec

テスト駆動開発

Page 94: S is for Spec

リファクタリング

Page 95: S is for Spec

オブジェクト設計

Page 96: S is for Spec

デザインパターン

Page 97: S is for Spec

ご清聴ありがとうございました

Page 98: S is for Spec

use Rspec.

Tyler Durden says...