SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
biac
BluewaterSoft
biac (山本 康彦)
    BluewaterSoft http://www.bluewatersoft.jp/
    略歴
    - 名古屋大学工学部(修士)
    - HONDA R&Dで自動車設計
    - 1994~ ソフトウェア業界
    - 2012~ BluewaterSoft
    著書
    「速攻入門 C#」(2012/3) 技術評論社、共著
    「ソフトな彼女とハードな彼氏。」(2012/3) アジャイルマインドvol.1掲載




2013/1/18             Visual Studio ハッカソン事前勉強会   2
連載
    「C#でTDD入門」 CodeZine
    「WinRT/Metro Tips」 @IT .NET開発者中心

    Web
    TDD.NET http://www.tdd-net.jp/
    biac の それさえもおそらくは幸せな日々@nifty
         http://bluewatersoft.cocolog-nifty.com/blog/




2013/1/18             Visual Studio ハッカソン事前勉強会          3
“Test Driven Development:
By Example” (2002)            参考訳
  We drive                       自動化されたテストを
  development with               使って、私たちは開発
  automated tests, a             を駆動する。それがテ
  style of development           スト駆動開発(TDD)と呼
  called Test-Driven             ばれる開発のスタイル
  Development (TDD).             だ。


            × テスト                     × テストが駆動する
            ○ 自動化されたテスト               ○ 私たちが駆動する
2013/1/18         Visual Studio ハッカソン事前勉強会         4
“Test Driven Development:                    テストファースト
By Example” (2002)            参考訳
  In Test-Driven                 TDDでは、
  Development, we                ・自動化されたテスト
  ・Write new code                が失敗したときだけ、
  only if an automated           新しいコードを書く
  test has failed                ・重複を無くす
  ・Eliminate
  duplication                    たった2つのシンプルな
                                 ルール
  These are two simple
  rules.                                     リファクタリング

2013/1/18         Visual Studio ハッカソン事前勉強会              5
レッド / グリーン / リファクタ
    「黄金の三角形」by @t_wada
    テストファースト
    失敗する自動化されたテスト ⇒
    新しいコードを書いてパスさせる ⇒
    リファクタリング
    All Greenを維持したまま改良 ⇒



2013/1/18   Visual Studio ハッカソン事前勉強会   6
プロのモノ作りとして 当たり前の手順



2013/1/18    Visual Studio ハッカソン事前勉強会   7
私の造語
    あまりにも当たり前すぎて、この概念を示
    す言葉が無いっぽい
    つまり…
    なにを作るかを決めてから
    ↓
    どうやって作るかを考える



2013/1/18   Visual Studio ハッカソン事前勉強会   8
スペックを決める
    - 外観
    - 性能 ex)最高速300km/h以上 etc.

    ↓

    作り方を考える
    - 構造は?
    - 部品は?
    - 製造ラインは?
    画像は「自動車製品開発のプロセスと組織」(藤本隆宏)より
2013/1/18            Visual Studio ハッカソン事前勉強会   9
スペックを決めてから
    → 作り方を考える

    ゴールを決めてから
    → それをクリアすべく行動する

    外部設計 (external design - 外から見た設計)
    → 内部設計 (internal design - 内から見た設計)
            ※ 外部設計を満たすような内部構造を設計


2013/1/18         Visual Studio ハッカソン事前勉強会   10
An act of identifying something precisely or
    of stating a precise requirement.
    ( Oxford Dictionaries
    http://oxforddictionaries.com/definition/english/specification )
    何かを正確に識別するか、正確な要求を述
    べる行為
    Could you be a little more specific?
    もう少し具体的に言ってください
    スペック=具体的な要求
    製造業の製品開発においては、
    検証可能(合否を判断できる)であること。
2013/1/18                  Visual Studio ハッカソン事前勉強会                    11
an abstract idea
    ( Oxford Dictionaries
    http://oxforddictionaries.com/definition/english/concept )
    抽象的なアイデア
    「世界一速いクルマ」 ← コンセプト、要望
    「2ℓエンジン市販車で最高速300km/h超」
     ← スペック、仕様
    違いは、検証可能かどうか。
    言い換えると「テスタブル」か否か。
    あなたのところの要件定義書や外部設計書
    は、スペック? or コンセプト?
2013/1/18                 Visual Studio ハッカソン事前勉強会               12
スペック ファーストしてますか?

    製造業で部品の図面を描くとき。
    たとえば、ネジ1本
    1. 設計者は、ネジのスペックを設定する。
      引張り強度、最大締め付けトルク、
      防錆性能(塩水噴霧試験時間) etc. etc.
    2. 設計者は、スペックを満たす部品形状・
       材質etc.を決定し、ネジの図面を描く。
            (スペックも図面に記載することが多い)

2013/1/18          Visual Studio ハッカソン事前勉強会   13
FizzBuzzプログラムの仕様
    ・1,2,…という整数に対し、1,2,…と答える
    ・ただし、3の倍数のときはFizzと答える
    ・ただし、5の倍数のときはBuzzと答える
    ・ただし、3の倍数でかつ5の倍数のときは
       Fizz Buzzと答える
    いいえ、スペックではありません!
    これだけでは、どうやって検証すればよい
    か分からないから。
    PCの前で「いち」と言うと、プログラムが
    「いち」と喋るのかもしれないよ!
2013/1/18   Visual Studio ハッカソン事前勉強会   14
FizzBuzzメソッドのスペック(例)
    シグネチャ:
          public static string FizzBuzz(int n)
    動作:     引数nが          引数nが
             3の倍数?              5の倍数?               返値

              false               false          n.ToString()
              true                false             "Fizz"
              false               true             "Buzz"
              true                true           "Fizz Buzz"

    …あれ? ここまで明確にできたのなら、
    コードで表現(=自動化)できるんじゃ!?
2013/1/18             Visual Studio ハッカソン事前勉強会                  15
FizzBuzzメソッドのスペックをコード化
    ただし、すべてのnについて書くと多すぎる
    ので、例示に留める。
        [TestCase(1, "1")]
        [TestCase(2, "2")]
        [TestCase(3, "Fizz")]
        [TestCase(5, "Buzz")]
        [TestCase(6, "Fizz")]
        [TestCase(10, "Buzz")]
        [TestCase(15, "Fizz Buzz")]
        public void FizzBuzzTest(int n, string expected) {
            string result = FizzBuzzer.FizzBuzz(n);
            Assert.AreEqual(expected, result);
        }

2013/1/18               Visual Studio ハッカソン事前勉強会             16
あとはスペックを満たすメソッドを書くだ
    けだ!
    これぞ「テスト ファースト」!?

    いいえ、
    テスト ファーストではありません!!

    スペック ファーストという当たり前のこと
    を、ちょっと自動化してみただけです。


2013/1/18   Visual Studio ハッカソン事前勉強会   17
“Test Driven Development: By                 テストファースト
Example” (2002)              参考訳
  In Test-Driven                 TDDでは、
  Development, we                ・自動化されたテス
  ・Write new code                トが失敗したときだ
  only if an                     け新しいコードを書く
  automated test has             ・重複を無くす
  failed
  ・Eliminate duplication         たった2つのシンプルな
                                 ルール
  These are two simple
  rules.                                     リファクタリング

2013/1/18         Visual Studio ハッカソン事前勉強会          18
例示でスペックを表現する … … どれだけ
    例示したら完璧なのか、分からない!!
    例示の仕分け:
    コードを育てるのに有用か否か?
    例示を追加 → 検証をパス
    コードを直さなくてパスするなら、今追加
    した例示はコードを育てていない → 不要
    例示を追加 → 検証失敗
    コードを直さねばならない = コードを育て
    る例示である → 有用
2013/1/18   Visual Studio ハッカソン事前勉強会   19
テスト ファースト =

    スペック ファースト +
    (モノ作りでは当たり前の手順)


    automated test +
    (例示によるスペック表現)


    例示を最少化するテクニック
    ※ ただし、不安を解消するためや、ドキュメントの役割
    を持たせるため等で、例示を追加しても構わない。

2013/1/18           Visual Studio ハッカソン事前勉強会   20
TDDの原理 ~ スペック・ファースト ~




2013/1/18         Visual Studio ハッカソン事前勉強会   21

Weitere ähnliche Inhalte

Was ist angesagt?

自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talkkyon mm
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会ko ty
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューMoriharu Ohzu
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!Yasui Tsutomu
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料Yasui Tsutomu
 
Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEWYusuke Tochigi
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
ペアプログラミング ホントのところ
ペアプログラミング ホントのところペアプログラミング ホントのところ
ペアプログラミング ホントのところTakuto Wada
 
Emergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerEmergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerTakuto Wada
 
ExtJS 事例  2ちゃんビューアー「Cromartie49」
ExtJS 事例  2ちゃんビューアー「Cromartie49」ExtJS 事例  2ちゃんビューアー「Cromartie49」
ExtJS 事例  2ちゃんビューアー「Cromartie49」Yuki Naotori
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 
納涼!みんなで持ち寄る『ゾッ!とする話』
納涼!みんなで持ち寄る『ゾッ!とする話』納涼!みんなで持ち寄る『ゾッ!とする話』
納涼!みんなで持ち寄る『ゾッ!とする話』You&I
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debuguupaa
 
OpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメOpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメMasaki Otsuki
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4信之 岩永
 

Was ist angesagt? (20)

自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
wankuma #28
wankuma #28wankuma #28
wankuma #28
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
Tdd
TddTdd
Tdd
 
Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEW
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
ペアプログラミング ホントのところ
ペアプログラミング ホントのところペアプログラミング ホントのところ
ペアプログラミング ホントのところ
 
Emergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerEmergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summer
 
ExtJS 事例  2ちゃんビューアー「Cromartie49」
ExtJS 事例  2ちゃんビューアー「Cromartie49」ExtJS 事例  2ちゃんビューアー「Cromartie49」
ExtJS 事例  2ちゃんビューアー「Cromartie49」
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
納涼!みんなで持ち寄る『ゾッ!とする話』
納涼!みんなで持ち寄る『ゾッ!とする話』納涼!みんなで持ち寄る『ゾッ!とする話』
納涼!みんなで持ち寄る『ゾッ!とする話』
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debug
 
OpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメOpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメ
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4
 

Ähnlich wie TDDの原理 ~ スペック・ファースト

プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!Yasuhiko Yamamoto
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオンkyon mm
 
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdfRakuten Commerce Tech (Rakuten Group, Inc.)
 
アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜
アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜
アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜Fumihiko Kinoshita
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-崇 山﨑
 
ユニットテスト 1日目
ユニットテスト 1日目ユニットテスト 1日目
ユニットテスト 1日目Yoshiki Shibukawa
 
テストコードの定型化
テストコードの定型化テストコードの定型化
テストコードの定型化Shinichi Hirauchi
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
プログラミング講座 #5 競プロをやってみよう
プログラミング講座 #5 競プロをやってみようプログラミング講座 #5 競プロをやってみよう
プログラミング講座 #5 競プロをやってみようZOIdayo
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方Hiroyuki Tanaka
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDDTakuto Wada
 
知って得する!?現場で使えるテスト技法
知って得する!?現場で使えるテスト技法知って得する!?現場で使えるテスト技法
知って得する!?現場で使えるテスト技法Trash Briefing ,Ltd
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkankyon mm
 
Grand Strategy For Presentation
Grand Strategy For PresentationGrand Strategy For Presentation
Grand Strategy For Presentationbash0C7
 
確認・検討にちょっと役立つプラグイン
確認・検討にちょっと役立つプラグイン確認・検討にちょっと役立つプラグイン
確認・検討にちょっと役立つプラグインKawaji Masaki
 
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*irof N
 

Ähnlich wie TDDの原理 ~ スペック・ファースト (20)

プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
 
アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜
アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜
アート・オブ・アジャイル デベロップメント 〜テストが駆動するビジネス価値〜
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
 
ユニットテスト 1日目
ユニットテスト 1日目ユニットテスト 1日目
ユニットテスト 1日目
 
テストコードの定型化
テストコードの定型化テストコードの定型化
テストコードの定型化
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
プログラミング講座 #5 競プロをやってみよう
プログラミング講座 #5 競プロをやってみようプログラミング講座 #5 競プロをやってみよう
プログラミング講座 #5 競プロをやってみよう
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
知って得する!?現場で使えるテスト技法
知って得する!?現場で使えるテスト技法知って得する!?現場で使えるテスト技法
知って得する!?現場で使えるテスト技法
 
Test like a team.
Test like a team.Test like a team.
Test like a team.
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkan
 
Grand Strategy For Presentation
Grand Strategy For PresentationGrand Strategy For Presentation
Grand Strategy For Presentation
 
確認・検討にちょっと役立つプラグイン
確認・検討にちょっと役立つプラグイン確認・検討にちょっと役立つプラグイン
確認・検討にちょっと役立つプラグイン
 
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
 

Mehr von Yasuhiko Yamamoto

わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようYasuhiko Yamamoto
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門Yasuhiko Yamamoto
 
UWP アプリを JavaScript で作る 3つの方法
UWP アプリを JavaScript で作る 3つの方法UWP アプリを JavaScript で作る 3つの方法
UWP アプリを JavaScript で作る 3つの方法Yasuhiko Yamamoto
 
無償のVisual studioで作るクライアント アプリ
無償のVisual studioで作るクライアント アプリ無償のVisual studioで作るクライアント アプリ
無償のVisual studioで作るクライアント アプリYasuhiko Yamamoto
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)Yasuhiko Yamamoto
 
わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25Yasuhiko Yamamoto
 
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門Yasuhiko Yamamoto
 
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」Yasuhiko Yamamoto
 
わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22Yasuhiko Yamamoto
 
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Yasuhiko Yamamoto
 
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生Yasuhiko Yamamoto
 
わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21Yasuhiko Yamamoto
 
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!Yasuhiko Yamamoto
 
わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20Yasuhiko Yamamoto
 
わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19Yasuhiko Yamamoto
 
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧めわんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧めYasuhiko Yamamoto
 
Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理Yasuhiko Yamamoto
 
Windows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみたWindows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみたYasuhiko Yamamoto
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitYasuhiko Yamamoto
 
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17Yasuhiko Yamamoto
 

Mehr von Yasuhiko Yamamoto (20)

わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門
 
UWP アプリを JavaScript で作る 3つの方法
UWP アプリを JavaScript で作る 3つの方法UWP アプリを JavaScript で作る 3つの方法
UWP アプリを JavaScript で作る 3つの方法
 
無償のVisual studioで作るクライアント アプリ
無償のVisual studioで作るクライアント アプリ無償のVisual studioで作るクライアント アプリ
無償のVisual studioで作るクライアント アプリ
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
 
わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25
 
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
 
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
 
わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22
 
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
 
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生
 
わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21
 
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
 
わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20
 
わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19
 
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧めわんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
 
Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理
 
Windows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみたWindows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみた
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
 

Kürzlich hochgeladen

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (7)

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

TDDの原理 ~ スペック・ファースト

  • 2. biac (山本 康彦) BluewaterSoft http://www.bluewatersoft.jp/ 略歴 - 名古屋大学工学部(修士) - HONDA R&Dで自動車設計 - 1994~ ソフトウェア業界 - 2012~ BluewaterSoft 著書 「速攻入門 C#」(2012/3) 技術評論社、共著 「ソフトな彼女とハードな彼氏。」(2012/3) アジャイルマインドvol.1掲載 2013/1/18 Visual Studio ハッカソン事前勉強会 2
  • 3. 連載 「C#でTDD入門」 CodeZine 「WinRT/Metro Tips」 @IT .NET開発者中心 Web TDD.NET http://www.tdd-net.jp/ biac の それさえもおそらくは幸せな日々@nifty http://bluewatersoft.cocolog-nifty.com/blog/ 2013/1/18 Visual Studio ハッカソン事前勉強会 3
  • 4. “Test Driven Development: By Example” (2002) 参考訳 We drive 自動化されたテストを development with 使って、私たちは開発 automated tests, a を駆動する。それがテ style of development スト駆動開発(TDD)と呼 called Test-Driven ばれる開発のスタイル Development (TDD). だ。 × テスト × テストが駆動する ○ 自動化されたテスト ○ 私たちが駆動する 2013/1/18 Visual Studio ハッカソン事前勉強会 4
  • 5. “Test Driven Development: テストファースト By Example” (2002) 参考訳 In Test-Driven TDDでは、 Development, we ・自動化されたテスト ・Write new code が失敗したときだけ、 only if an automated 新しいコードを書く test has failed ・重複を無くす ・Eliminate duplication たった2つのシンプルな ルール These are two simple rules. リファクタリング 2013/1/18 Visual Studio ハッカソン事前勉強会 5
  • 6. レッド / グリーン / リファクタ 「黄金の三角形」by @t_wada テストファースト 失敗する自動化されたテスト ⇒ 新しいコードを書いてパスさせる ⇒ リファクタリング All Greenを維持したまま改良 ⇒ 2013/1/18 Visual Studio ハッカソン事前勉強会 6
  • 7. プロのモノ作りとして 当たり前の手順 2013/1/18 Visual Studio ハッカソン事前勉強会 7
  • 8. 私の造語 あまりにも当たり前すぎて、この概念を示 す言葉が無いっぽい つまり… なにを作るかを決めてから ↓ どうやって作るかを考える 2013/1/18 Visual Studio ハッカソン事前勉強会 8
  • 9. スペックを決める - 外観 - 性能 ex)最高速300km/h以上 etc. ↓ 作り方を考える - 構造は? - 部品は? - 製造ラインは? 画像は「自動車製品開発のプロセスと組織」(藤本隆宏)より 2013/1/18 Visual Studio ハッカソン事前勉強会 9
  • 10. スペックを決めてから → 作り方を考える ゴールを決めてから → それをクリアすべく行動する 外部設計 (external design - 外から見た設計) → 内部設計 (internal design - 内から見た設計) ※ 外部設計を満たすような内部構造を設計 2013/1/18 Visual Studio ハッカソン事前勉強会 10
  • 11. An act of identifying something precisely or of stating a precise requirement. ( Oxford Dictionaries http://oxforddictionaries.com/definition/english/specification ) 何かを正確に識別するか、正確な要求を述 べる行為 Could you be a little more specific? もう少し具体的に言ってください スペック=具体的な要求 製造業の製品開発においては、 検証可能(合否を判断できる)であること。 2013/1/18 Visual Studio ハッカソン事前勉強会 11
  • 12. an abstract idea ( Oxford Dictionaries http://oxforddictionaries.com/definition/english/concept ) 抽象的なアイデア 「世界一速いクルマ」 ← コンセプト、要望 「2ℓエンジン市販車で最高速300km/h超」 ← スペック、仕様 違いは、検証可能かどうか。 言い換えると「テスタブル」か否か。 あなたのところの要件定義書や外部設計書 は、スペック? or コンセプト? 2013/1/18 Visual Studio ハッカソン事前勉強会 12
  • 13. スペック ファーストしてますか? 製造業で部品の図面を描くとき。 たとえば、ネジ1本 1. 設計者は、ネジのスペックを設定する。 引張り強度、最大締め付けトルク、 防錆性能(塩水噴霧試験時間) etc. etc. 2. 設計者は、スペックを満たす部品形状・ 材質etc.を決定し、ネジの図面を描く。 (スペックも図面に記載することが多い) 2013/1/18 Visual Studio ハッカソン事前勉強会 13
  • 14. FizzBuzzプログラムの仕様 ・1,2,…という整数に対し、1,2,…と答える ・ただし、3の倍数のときはFizzと答える ・ただし、5の倍数のときはBuzzと答える ・ただし、3の倍数でかつ5の倍数のときは Fizz Buzzと答える いいえ、スペックではありません! これだけでは、どうやって検証すればよい か分からないから。 PCの前で「いち」と言うと、プログラムが 「いち」と喋るのかもしれないよ! 2013/1/18 Visual Studio ハッカソン事前勉強会 14
  • 15. FizzBuzzメソッドのスペック(例) シグネチャ: public static string FizzBuzz(int n) 動作: 引数nが 引数nが 3の倍数? 5の倍数? 返値 false false n.ToString() true false "Fizz" false true "Buzz" true true "Fizz Buzz" …あれ? ここまで明確にできたのなら、 コードで表現(=自動化)できるんじゃ!? 2013/1/18 Visual Studio ハッカソン事前勉強会 15
  • 16. FizzBuzzメソッドのスペックをコード化 ただし、すべてのnについて書くと多すぎる ので、例示に留める。 [TestCase(1, "1")] [TestCase(2, "2")] [TestCase(3, "Fizz")] [TestCase(5, "Buzz")] [TestCase(6, "Fizz")] [TestCase(10, "Buzz")] [TestCase(15, "Fizz Buzz")] public void FizzBuzzTest(int n, string expected) { string result = FizzBuzzer.FizzBuzz(n); Assert.AreEqual(expected, result); } 2013/1/18 Visual Studio ハッカソン事前勉強会 16
  • 17. あとはスペックを満たすメソッドを書くだ けだ! これぞ「テスト ファースト」!? いいえ、 テスト ファーストではありません!! スペック ファーストという当たり前のこと を、ちょっと自動化してみただけです。 2013/1/18 Visual Studio ハッカソン事前勉強会 17
  • 18. “Test Driven Development: By テストファースト Example” (2002) 参考訳 In Test-Driven TDDでは、 Development, we ・自動化されたテス ・Write new code トが失敗したときだ only if an け新しいコードを書く automated test has ・重複を無くす failed ・Eliminate duplication たった2つのシンプルな ルール These are two simple rules. リファクタリング 2013/1/18 Visual Studio ハッカソン事前勉強会 18
  • 19. 例示でスペックを表現する … … どれだけ 例示したら完璧なのか、分からない!! 例示の仕分け: コードを育てるのに有用か否か? 例示を追加 → 検証をパス コードを直さなくてパスするなら、今追加 した例示はコードを育てていない → 不要 例示を追加 → 検証失敗 コードを直さねばならない = コードを育て る例示である → 有用 2013/1/18 Visual Studio ハッカソン事前勉強会 19
  • 20. テスト ファースト = スペック ファースト + (モノ作りでは当たり前の手順) automated test + (例示によるスペック表現) 例示を最少化するテクニック ※ ただし、不安を解消するためや、ドキュメントの役割 を持たせるため等で、例示を追加しても構わない。 2013/1/18 Visual Studio ハッカソン事前勉強会 20
  • 21. TDDの原理 ~ スペック・ファースト ~ 2013/1/18 Visual Studio ハッカソン事前勉強会 21