Top Banner
クは駆動のク (株)永和システムマネジメント 角谷 信太郎 [email protected] オブジェクト倶楽部 2006クリスマスイベント 技術トラック 2006-12-20(水) “D is for Driven” ~Developer TestingとBDD~
181

D Is For Driven

Jun 30, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: D Is For Driven

クは駆動のク(株)永和システムマネジメント

角谷 信太郎[email protected]

オブジェクト倶楽部2006クリスマスイベント技術トラック2006-12-20(水)

“D is for Driven”~Developer TestingとBDD~

Page 2: D Is For Driven

「ーーぼくは心を相手に戦いを始めた。 からだが供給できないものを、心がほし がるからさ」

レイ・ブラッドベリ『ウは宇宙船のウ』

Page 3: D Is For Driven

自己紹介

Page 4: D Is For Driven

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

• テスト駆動開発者• 日本Rubyの会(理事)

• 最近停滞中• Quick-JUnit Plugin• 勝手に翻訳

• ときどき執筆

Page 5: D Is For Driven

宣伝

Page 6: D Is For Driven

2つ

Page 7: D Is For Driven

(1)

Page 8: D Is For Driven

『月刊JavaWorld』の次号(休刊号)

Page 9: D Is For Driven

(2)

Page 10: D Is For Driven

デブサミ2007

Page 11: D Is For Driven

デブサミ2007

•時: 2007-02-14(水),15(木)

•於: 目黒雅叙園(東京・目黒)

•主催: 翔泳社• http://seshop.com/event/dev/2007/

Page 12: D Is For Driven

実践『From Java To Ruby』~血があつい鉄道ならば/走りぬけてゆく汽車はいつかは心臓を通るだろう~

Page 13: D Is For Driven

謝辞

•t-wadaさん•私のTDDコーチ

•懸田 剛さん •私にBDDを教えてくれました

Page 14: D Is For Driven

謝辞(順不同)水越さん、伊藤コウイチさん、 id:secondlifeさん、平鍋さん、 諸橋さん、須藤さん、天野さん、Yuguiさん、宮川さん

Page 15: D Is For Driven

よろしくお願いします

Page 16: D Is For Driven

Developer TestingとBDDについて

Page 17: D Is For Driven

DeveloperTesting

Page 18: D Is For Driven

•Developer Tests•開発者が行う、開発促進のためのテスト

•QA Tests•Customer Tests•顧客視点からのシステム機能のテスト

Developer Testing

Page 19: D Is For Driven

•Developer Tests•開発者が行う、開発促進のためのテスト

•QA Tests•Customer Tests•顧客視点からのシステム機能のテスト

Developer Testing

Page 20: D Is For Driven

BDD

Page 21: D Is For Driven

振舞駆動開発Behaviour Driven Development

ビヘイビア

Page 22: D Is For Driven

“BDD is the natural evolution of TDD.”

BDDはTDDの正常進化である

http://groups.yahoo.com/group/extremeprogramming/message/113518

ーーSteven R.Baker

Page 23: D Is For Driven

TDD

Page 24: D Is For Driven

テスト駆動開発Test Driven Development

Page 25: D Is For Driven

TDD by Example

Page 26: D Is For Driven

テスト駆動開発入門

Page 27: D Is For Driven

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

はじまる

Page 28: D Is For Driven

Clean code that works, in Ron Jeffries’ pithy phrase, is the goal of Test-Driven

Development(TDD).

「動作するきれいなコード」、

このRon Jefferiesの簡潔な言葉こそが

TDDのゴールである。

Page 29: D Is For Driven

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

Page 30: D Is For Driven

© The Seasar Foundation and the others 2006. all rights reserved.15

Seasar ConferenceSeasar Conference

2006 Autumn2006 Autumn

!"#$(#%&')!()*

+*

,-*

Refactor

Green

Red

動作するきれいなコードとR-G-R

Page 31: D Is For Driven

“The translation of a feeling into a test is a

common theme of TDD.”

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

Page 32: D Is For Driven

•不安: 自分は仕事は正しいか?

•自信: 自分の仕事は正しい!

•勇気: 不安を克服する意志

•信頼: 自分が仲間を、仲間が自分を

•退屈: このテストは必要か?

感情

Page 33: D Is For Driven

駆動

Page 34: D Is For Driven

駆動•「動作するきれいなコード」への意志

•「設計」とフィードバックとのギャップ認識/ギャップ制御

•感情

Page 35: D Is For Driven

『WEB+DB PRESS』 vol.35

Page 36: D Is For Driven

t-wadaさんによるTDDの

思想・技術・実践

Page 37: D Is For Driven

心技体

Page 38: D Is For Driven

t-wada says...•プログラマのための設計技法

•R-G-Rのリズムを体得せよ

•心理マネジメント手法

•無駄なく健康なコード

•テストコードの資産価値

Page 39: D Is For Driven

© The Seasar Foundation and the others 2006. all rights reserved.15

Seasar ConferenceSeasar Conference

2006 Autumn2006 Autumn

!"#$(#%&')!()*

+*

,-*

Refactor

Green

Red

Red-Green-Refactor

Page 40: D Is For Driven

Kent Beckも言ってる:•プログラマのための設計技法

•R-G-Rのリズムを体得せよ

•心理マネジメント手法

•無駄なく健康なコード

•テストコードの資産価値

Page 41: D Is For Driven

t-wadaが言ってたよ:•プログラマのための設計技法

•R-G-Rのリズムを体得せよ

•心理マネジメント手法

•無駄なく健康なコード

•テストコードの資産価値

Page 42: D Is For Driven

Kent BeckとBDD

Page 43: D Is For Driven

> So, stop thinking of TDD and> BDD as conflicting ideals.> BDD is the natural evolution of> TDD.

What evolved?ーーKent Beck

http://tech.groups.yahoo.com/group/extremeprogramming/message/113575

何が進化したって?

Page 44: D Is For Driven

アジェンダ•TDDからBDDへの”進化”によって:

•何が変わるのか?

•変わらないものはあるのか?

•変わらないものがあるならばそれは何なのか?

Page 45: D Is For Driven

まとめ

Page 46: D Is For Driven

BDDとは:•顧客と同じ語彙を使って記述したシステムの振る舞いからのフィードバックと、

•開発者の感情によって、

•駆動される開発

Page 47: D Is For Driven

まとめ• BDDはTDDのマインドセットをより明確にする

• BDDはマインドセットを明確にする語彙とツールを提供する

• BDDもTDDも、具体的なフィードバックと開発者の感情が開発を駆動する

Page 48: D Is For Driven

もくじ•BDDへの道

•BDDで変わるもの

•BDDで変わらないもの

•RSpecでBDDのデモ

Page 49: D Is For Driven

BDDへの道

Page 50: D Is For Driven

稲垣足穂

Page 51: D Is For Driven

詩は歴史に対して

垂直に立つ

Page 52: D Is For Driven

•人は、•BDDerとして「在る」のではない

•BDDerに「成る」のだ

•どうやって「成る」のか?

実存としてのBDDer

Page 53: D Is For Driven

比喩

Page 54: D Is For Driven

個体発生は系統発生を繰り返す

Page 55: D Is For Driven

反復説

Page 56: D Is For Driven

ある動物の発生の過程は、その動物の進化の過程を反復する。

Page 57: D Is For Driven
Page 58: D Is For Driven

2006: a testing odyssey

Page 59: D Is For Driven

テスティングの夜明けThe Dawn of The Testing

Page 60: D Is For Driven

1971

Page 61: D Is For Driven

プログラミングの心理学

ジェラルド・M・ワインバーグ(初版は1971年)

Page 62: D Is For Driven

(プログラマがテストしなくなる)この過ちから身を守るための一つの方法は、テスト問題をテストをはじめる前に、いやそれどころかもし可能ならばコーディング前に作っておく、というものである。

Page 63: D Is For Driven

1992

Page 64: D Is For Driven

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

By Jack W. Reeves

Page 65: D Is For Driven

村上 雅章さんによる翻訳

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

Page 66: D Is For Driven

•設計: ソースコード

•製造: ビルド

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

Page 67: D Is For Driven

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

Page 68: D Is For Driven

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

Page 69: D Is For Driven

太初にテストファーストありきIn the beginning was the test-first

Page 70: D Is For Driven

1998

Page 71: D Is For Driven

JUnit1.0

Page 72: D Is For Driven

テスト熱中症“Test Infected: Programmers Love

Writing Tests”

プログラマは、テストを書くのが好きになる

By Eric Gamma

Page 73: D Is For Driven

小野 剛さんの翻訳

http://www.objectclub.jp/community/XP-jp/xp_relate/testinfected-j

Page 74: D Is For Driven

システムはこう動くはずだ、という考えが頭に浮かんだとしても、実装について考えるのは後回しにしよう。まずはテストを書くのだ。そしてテストを実行するのだ。

Page 75: D Is For Driven

1999

Page 76: D Is For Driven

XP:explained

Page 77: D Is For Driven

テストファーストという単語自体は

出てこない (意外)

Page 78: D Is For Driven

XPのテストは...プログラムを動作させることが好きな人の仕事である。...テストはあくまでも道具であって、本来重要なものはシステムの振る舞いである。

Page 79: D Is For Driven

2000

Page 80: D Is For Driven

XP:installed

Page 81: D Is For Driven

テストファーストという単語が

広まるきっかけ?

Page 82: D Is For Driven

テストファーストの効果

•テスト可能な設計

•コード利用者の視点

•インターフェイス中心の設計

『WEB+DB PRESS Vol.35』のt-wada記事から要旨抜粋

Page 83: D Is For Driven

どうみても設計です

Page 84: D Is For Driven

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

Page 85: D Is For Driven

2002

Page 86: D Is For Driven

テスト駆動開発Test Driven Development

Page 87: D Is For Driven

TDD by Example

Page 88: D Is For Driven

t-wada says...•プログラマのための設計技法

•R-G-Rのリズムを体得せよ

•心理マネジメント手法

•無駄なく健康なコード

•テストコードの資産価値

Page 89: D Is For Driven

2003

Page 90: D Is For Driven

振舞駆動開発Behaviour Driven Development

ビヘイビア

Page 91: D Is For Driven

BDDの誕生•Dan NorthがJBehaveプロジェクトを開始

Page 92: D Is For Driven

2004

Page 93: D Is For Driven

•ADC2004にて、平鍋さんがJBehaveに遭遇•Agile Development Conference 2004

•廊下でデモしていたらしい• http://blogs.itmedia.co.jp/hiranabe/2005/10/

tdd__bdd__731d.html

日本への輸入

Page 94: D Is For Driven

2005

Page 95: D Is For Driven

“A New Look at Test Driven Development”

テスト駆動開発についての新しい考えかた

By Dave Astels

Page 97: D Is For Driven

•TDDで定義しているのは、テストというより振る舞いでは?

•xUnitはテストの語彙と、プログラミング言語の構造に囚われすぎでは?

•新しい考え方には新しいツール

BDDが認知される契機に

Page 98: D Is For Driven

新しいツール

Page 99: D Is For Driven

RSpec

Page 100: D Is For Driven

Frameworkfor Behaviour

DrivenDelopmentin Ruby

Page 101: D Is For Driven

初期のRSpec

Page 102: D Is For Driven

class EmptyMovieList < Spec::Context def setup @list = MovieList.new end

def should_have_size_of_0 @list.size.should_equal 0 end

def should_not_include_star_wars @list.should_not_include "Star Wars" endend

class OneMovieList < Spec::Context def setup ... def should_have_size_of_1 ...end

Page 103: D Is For Driven

2006

Page 104: D Is For Driven

•RSpec on Rails => 利用者増加

• Introducing Behaviour-Driven Developmenthttp://www.dannorth.net/introducing-bdd (by Dan North)

•“Given, When, Then”の提唱

•他言語によるBDD実装

•本邦Ruby界(の一部)でもブレイク寸前?

2006

Page 105: D Is For Driven

RSpec on Rails

割愛

Page 106: D Is For Driven

“Given, When, Then”

割愛

Page 107: D Is For Driven

•.NET: NSpec, NSpecify•Java: JBehave, (rMock)

•(Ruby: RBehave)

他言語によるBDD実装

C#が健闘中!

Page 108: D Is For Driven

•池上さん• KOF2006、Ruby@関西

•諸橋さん•Rails勉強会(東京)

本邦Ruby界(の一部)でもブレイク寸前?

Page 109: D Is For Driven

いまここ

Page 110: D Is For Driven

•ソースコードとテストは設計

•xUnit, test-first•TDD•BDD, RSpec

2006: a testing odyssey

Page 111: D Is For Driven

BDDで変わるもの/変わらないもの

Page 112: D Is For Driven

振舞駆動開発Behaviour Driven Development

ビヘイビア

Page 113: D Is For Driven

•an evolution•in the thinking behind:•Test Driven Development

•Acceptance Test Driven Planning

BDD is...

http://behaviour-driven.org/

Page 114: D Is For Driven

•進化した(evolution)

•考え方(thinking):•テスト駆動開発

•受入テスト駆動プランニング

BDD は...

http://behaviour-driven.org/

Page 115: D Is For Driven

BDDのゴール•Developer Testingと、Customer Testingの統合

•システムの振る舞いを定義する

•“Getting the Words Right”•「正しい言葉を選ぶ」 => 顧客と同じ語彙で設計する

Page 116: D Is For Driven

BDDはゴールに向けて•マインドセットを変える

•語彙を変える

•ツールを変える

Page 117: D Is For Driven

BDDで変わるもの

Page 118: D Is For Driven

BDDで変わるもの1. マインドセット2. 語彙3. ツール

Page 119: D Is For Driven

(1)

Page 120: D Is For Driven

マインドセットを変える

Page 121: D Is For Driven

マインドセット

•TDDっていうけど、

•開発を駆動してるこれって、

•テストではなく、

•システムの振る舞いでは?

Page 122: D Is For Driven

マインドセット

•「テスト」と呼ぶのは混乱の元

•「振る舞い」は「振る舞い」だ

•開発を駆動するのは振る舞いだ

Page 123: D Is For Driven

振舞駆動開発Behaviour Driven Development

ビヘイビア

Page 124: D Is For Driven

(私見)

Page 125: D Is For Driven

振舞

Page 126: D Is For Driven

ふるまい

Page 127: D Is For Driven

ビヘイビア

Page 128: D Is For Driven

発音しづらい

Page 129: D Is For Driven

振舞はテストではない?

Page 130: D Is For Driven

Test (by Kent Beck)【動詞】評価する

【名詞】受入または拒否を 導く手続き

『テスト駆動開発入門』第25章

Page 131: D Is For Driven

どうみてもテストです

Page 132: D Is For Driven

テストは発音しやすい

Page 133: D Is For Driven

(2)

Page 134: D Is For Driven

語彙を変える

Page 135: D Is For Driven

サピア=ウォーフ仮説Sapir–Whorf hypothesis

Page 136: D Is For Driven

言語は我々の思考を形成し、思考できる内容を決定する。

ベンジャミン・ウォーフ

Page 137: D Is For Driven

•TestCase•テストケース。クラス。

•Test Method•テストメソッド。メソッド。

•assert•アサート。結果の確認。

語彙:TDD

Page 138: D Is For Driven

テストに偏りすぎ

Page 139: D Is For Driven

•Context•コンテキスト。No TestCase!

•specify•「仕様」の定義。No test_method!

•expectation•システムに期待する振る舞い。No assert!

語彙:BDD

Page 140: D Is For Driven

(私見)

Page 141: D Is For Driven

スペシファイ

Page 142: D Is For Driven

エクスペクテーション

Page 143: D Is For Driven

やっぱり発音

しづらい

Page 144: D Is For Driven

•Unit Test•「単位」って? クラス? メソッド?

•“small-scale tests” -- Kent Beck

•製品コードと対応するの? しないの?

語彙:TDD

Page 145: D Is For Driven

プログラミング言語の構造に偏りすぎ

Page 146: D Is For Driven

•spec file•振る舞いの論理的なまとまり•RSpecではファイル

•1ファイルにつき、nコンテキスト

語彙:BDD

Page 147: D Is For Driven

context "1+1の足し算" do setup do @sum = 1 + 1 end specify "合計値は2であること" do @sum.should_eql 2 end

end

context "引き算" do specify "2-0は0であること" do (2 - 0).should_eql 0 endend

calc_spec.rb:

expectation

Page 148: D Is For Driven

(3)

Page 149: D Is For Driven

ツールを変える

Page 150: D Is For Driven

RSpec

Page 151: D Is For Driven

Frameworkfor Behaviour

DrivenDelopmentin Ruby

Page 152: D Is For Driven

rspec.rubyforge.org

Page 153: D Is For Driven

絶賛開発中

Page 154: D Is For Driven

APIや内部設計の変更が激しい

Page 155: D Is For Driven

紹介するけど使わなくてもいい

Page 156: D Is For Driven

私とRSpec

Page 157: D Is For Driven

私とRSpec

Page 158: D Is For Driven

私とRSpec

Page 159: D Is For Driven

•BDD実践のためのツール

•Rubyによる言語内DSL•Domain Specific Language

•ドメイン特化言語

•統合テスティング環境

RSpec

Page 160: D Is For Driven

BDD実践のためのツール•システムの特定の部分が、

•ある文脈(context)において

•期待(expectation)される

•振る舞い(behaviour)を

•仕様化(specify)する

Page 161: D Is For Driven

Rubyによる言語内DSL•BDDの語彙を活用•context, specify, expectation•プログラミング言語の構造に囚われすぎない•1ファイル: nコンテキスト•no TestCase, no test_method

•Testing DSL (角谷ローカル)

Page 162: D Is For Driven

統合テスティング環境•Green Bar (specコマンド)

•人に優しい出力(Testdox-like repots)

•built-in mocking/stubbing

•Rakeタスク (自動化)

•RCov (C0 カバレッジ)

•diff出力

•RSpec on Rails (流行は大事だ!)

Page 163: D Is For Driven

context “5ドルの場合” do setup do @five_dollar = Money.doller(5) end

specify “2を掛けると10ドルであること” do (@five_doller * 2).should_eql Money.doller(10) end

specify “5とは等価ではないこと” do @five_doller.should_not_eql 5 end

...end

...

Page 164: D Is For Driven

意識の変容

Page 165: D Is For Driven

 さらに興味深いのは、<ヘプタポッドB>はわたしのものの考えかたを変えていくという事実だった。

テッド・チャン『あなたの人生の物語』

Page 166: D Is For Driven

ノイズが少ない

Page 167: D Is For Driven

設計に集中できる

Page 168: D Is For Driven

そのまんま書ける喜び

Page 169: D Is For Driven

GreenBar原理主義:Fake Itの多用

Page 170: D Is For Driven

BDDで変わらないもの

Page 171: D Is For Driven

駆動

Page 172: D Is For Driven

•設計による決定と、動作するコードからの具体的なフィードバック

•開発者の感情•不安だ。何かがおかしい。これでいい。

駆動

Page 173: D Is For Driven

まとめ

Page 174: D Is For Driven

BDDとは:•顧客と同じ語彙を使って記述したシステムの振る舞いからのフィードバックと、

•開発者の感情によって、

•駆動される開発

Page 175: D Is For Driven

母語をASCIIで表現できる人達は良いですね

Page 176: D Is For Driven

日本語が母語の我々は

どうしよう?

Page 177: D Is For Driven

まとめ• BDDはTDDのマインドセットをより明確にする

• BDDはマインドセットを明確にする語彙とツールを提供する

• BDDもTDDも、具体的なフィードバックと開発者の感情が開発を駆動する

• 母語をASCIIで表現できる人は良いですね

Page 178: D Is For Driven

「でも、コードはそうするように言っているみたいですよ。やってみましょう。」『ケント・ベックのSmalltalkベストプラクティス・パターン』

Page 179: D Is For Driven

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

Page 180: D Is For Driven

Happy Testing!

Page 181: D Is For Driven

何かご質問は?Do you have any questions?