SlideShare a Scribd company logo
1 of 44
Download to read offline
テスト駆動開発の
               はじめ方
                   2013.03.2 CLR/H
             Shuji Watanabe (@shuji_w6e)




                                           1
13年3月2日土曜日
自己紹介
13年3月2日土曜日
渡辺 修司 / @shuji_w6e
         札幌Javaコミュニティ

         やさしいデスマーチ(Blog)

         Java, Groovy, JavaScript, Ruby, TDD

         JUnit実践入門

         https://forkwell.com/u/shuji.w6e
         ロードバイク, フットサル, スノーボード


13年3月2日土曜日
テスト駆動開発とは?
13年3月2日土曜日
テストファースト

             リファクタリング

13年3月2日土曜日
テスト駆動開発とは、プロダクションコード
  よりも先にテストコードを書くテストファー
  ストを基盤とした反復的な開発手法。
  先にテストを意識することにより設計を駆動
  し、常にリファクタリングを行うことで動作
  するきれいなコードを手に入れることができ
  る。


13年3月2日土曜日
テスト駆動開発のサイクル
                                        1.設計する
      5.リファクタリング



                           Heuristics




                                           2.テストを書く



             4.テストを成功させる

                                    3.コードを書く

13年3月2日土曜日
TDDはテストリストが起点
         プログラムが満たすべき仕様をリスト化

             最初に全てを抽出できない

             テストリストは随時、追加・修正

         ただし、具体的な仕様(例)が必要

             例:getListで1件のデータが取得できる




13年3月2日土曜日
テスト駆動開発のFAQ
     問. どのくらい事前設計すべきでしょうか?
     どうすれば、いつやめるかわかるのでしょうか?

     答. 何を構築すべきかわかるまでです。
                        Derick Bailey
             http://www.infoq.com/jp/news/2008/03/tdd-smells




13年3月2日土曜日
何を構築すべきか?




13年3月2日土曜日
顧客が本当に必要だったもの
         システム開発の目的は顧客の要件の実現




13年3月2日土曜日
何を構築すべきか?
         要件から「何を構築するか」を設計する

         外部的振る舞いを設計する

             システムが満たすべきテストケース




13年3月2日土曜日
外部設計とテストリスト


             外部設計



         顧客の要件
                 テストリスト
             「何を構築するか?」 プログラム

13年3月2日土曜日
外部設計とテストリスト


             外部設計



         顧客の要件
                 テストリスト
             「何を構築するか?」 プログラム

13年3月2日土曜日
テストリストとTDD




                      TDD
         顧客の要件
                 テストリスト
             「何を構築するか?」 プログラム

13年3月2日土曜日
テストリストとTDD




                      TDD
         顧客の要件
                 テストリスト
             「何を構築するか?」 プログラム

13年3月2日土曜日
TDDは開発手法
         良いプログラムは開発できるが、良いシステ
         ムを開発できるわけではない

         良いシステム = 顧客の要件を満たすシステム

         要件を満たすテストリストを作ることが重要




13年3月2日土曜日
外部設計の手法
         顧客のことばを使う

             ユースケース

             ユーザーストーリー

         顧客が理解できるツールを使う

             画面や帳票のモックアップ




13年3月2日土曜日
開発プロセスと外部設計




13年3月2日土曜日
開発プロセス
         ソフトウェアを作るための手順・段階

         アジャイルでもWFでも基本は変わらない
             要件定義


                    外部設計


                       プログラミング


                             テスト

13年3月2日土曜日
外部設計
         システムの外部的振る舞い

             利用者視点

             要件定義とのトレーサビリティ

             システム化するスコープ

         実装とのトレーサビリティ

             内部(システム化方式)に依存しない


13年3月2日土曜日
システム境界
         システムと外部との接点

             どこからがシステムの機能・データなのか?

         ユーザーインターフェイス(画面)

         外部インターフェイス
                      システム境界

                       システム


                      機能   データ
                ユーザ              外部システム




13年3月2日土曜日
トレーサビリティ
         追跡(トレース)性

         成果物同士が論理的に繋がっているか?

             各フェイズでの成果物の整合性も必須


        要件定義       外部設計         実装

              比較的に保てる   保ちにくい


13年3月2日土曜日
ユースケース駆動開発を活用した
       テスト駆動開発




13年3月2日土曜日
ユースケース駆動開発
        ユースケース駆動開発とは、ユースケースを開
        発の基点として顧客の要件を定義し、ユースケ
        ースから設計・実装までのトレーサビリティを
        保つ事を重視して開発を進める開発手法。

                     システム    トレーサビリティ
                    ユースケース              System Software



                    ユースケース
             アクター
                                             Heuristics




13年3月2日土曜日
ユースケース
         システムの機能を表すシナリオ(使用例)

         外部的な振る舞いと内部的な振る舞い

             システムと外部とのやり取りを記述する

         要件定義フェイズで抽出され、
         外部設計フェイズで詳細化する




13年3月2日土曜日
自動販売機でドリンクを購入する
         1.ユーザは、お金を投入する
         2.ユーザは、購入するドリンクのボタンを押す
         3.システムは、対象のドリンクを排出する
         4.ユーザは、払い出しボタンを押す
         5.システムは、お釣りを払い出す

        システムとユーザのインタラクションを記述

        1行で1つのアクションを記述

        文末は「∼する」(「∼できる」は厳禁)

13年3月2日土曜日
参考)ユースケース図
         ユースケースとアクターとの関係

         構造化されたインデックス

             重複を整理

             関連するものをまとめる

         本質はユースケース




13年3月2日土曜日
参考) 本質ユースケース
         ビジネスユースケース/ Essential Use Case

         簡潔で、抽象化され、一般的なユースケース

             実装に依存しない形
                                                                    要求
                                                                                      抽象的
             要求分析に適する                                        本質ユースケース

                                                                            システムユースケース

             実装に結びつけにくい
                                                                   具体的                実装


             http://www.ogis-ri.co.jp/otc/swec/process/am-res/am/artifacts/essentialUseCase.html
             http://www.ogis-ri.co.jp/otc/swec/process/am-res/am/artifacts/systemUseCase.html



13年3月2日土曜日
ユースケースから実装を導く
         ユースケースから実装を導く

         ユースケースが適切である事が前提

             つまり、顧客の言葉である

         ユースケースからオブジェクト(名詞)を抽出

             「表示する」「取得する」など動詞

             アーキテクチャに依存しない


13年3月2日土曜日
ロバストネス分析
         ユースケースからオブジェクトを抽出・整理
         するための分析方法

         ユースケースを3つの要素に分解する

             バウンダリ
                      アクター   バウンダリ   コントローラ

             コントローラ

             エンティティ                  エンティティ




         ユースケースに対する健全性チェック

13年3月2日土曜日
自動販売機でドリンクを購入する
        1.ユーザは、お金を投入する
        2.ユーザは、購入するドリンクのボタンを押す
        3.システムは、対象のドリンクを排出する
        4.ユーザは、払い出しボタンを押す

             メソッドの候補

                         クラスの候補



                       何を構築すべきか?

13年3月2日土曜日
アーキテクチャの適用
         言語/フレームワークの選択

             Rails, JavaEE, Django, CakePHP

             細かい点は異なるが骨格は変わらない

         ユースケース + アーキテクチャ                実装可能




13年3月2日土曜日
ユースケースシナリオを例にする
          ユーザは、お金を投入する
         1.ユーザは、購入するドリンクのボタンを押す
         2.システムは、対象のドリンクを排出する
         3.ユーザは、払い出しボタンを押す
         4.システムは、お釣りを払い出す

        具体的な例とすることで

         テストできる

         問題点に気付くことができる

13年3月2日土曜日
ユースケースシナリオを例にする
         1.ユーザは、100硬貨を2枚を投入する
          ユーザは、お金を投入する
         2.ユーザは、コーラのボタンを押す
         1.ユーザは、購入するドリンクのボタンを押す
         3.システムは、コーラを排出する
         2.システムは、対象のドリンクを排出する
         4.ユーザは、払い出しボタンを押す
         3.ユーザは、払い出しボタンを押す
         5.システムは、10硬貨を8枚を払い出す
         4.システムは、お釣りを払い出す

        具体的な例とすることで

         テストできる

         問題点に気付くことができる

13年3月2日土曜日
ユースケースシナリオを例にする
         1.ユーザは、100硬貨を2枚を投入する
          ユーザは、お金を投入する
         2.ユーザは、コーラのボタンを押す 受け入れテスト
         1.ユーザは、購入するドリンクのボタンを押す
         3.システムは、コーラを排出する
         2.システムは、対象のドリンクを排出する
                           (Cucumberなど)
         4.ユーザは、払い出しボタンを押す
         3.ユーザは、払い出しボタンを押す
         5.システムは、10硬貨を8枚を払い出す
         4.システムは、お釣りを払い出す

        具体的な例とすることで

         テストできる

         問題点に気付くことができる

13年3月2日土曜日
ユースケースシナリオを例にする
         1.ユーザは、100硬貨を2枚を投入する
          ユーザは、お金を投入する
         2.ユーザは、コーラのボタンを押す 受け入れテスト
         1.ユーザは、購入するドリンクのボタンを押す
         3.システムは、コーラを排出する
         2.システムは、対象のドリンクを排出する
                           (Cucumberなど)
         4.ユーザは、払い出しボタンを押す
         3.ユーザは、払い出しボタンを押す
         5.システムは、10硬貨を8枚を払い出す
         4.システムは、お釣りを払い出す
                         # language: ja
                         フィーチャ: 自動販売機で飲み物を購入
        具体的な例とすることで       シナリオ: コーラを1本買う
                           前提 '100'円を'2'枚投入する

         テストできる            もし 'コーラ'のボタンを押した
                           ならば 'コーラ'が出力される
                           かつ お釣りは'10'円が’8’枚である

         問題点に気付くことができる

13年3月2日土曜日
各ステップをテストリストにする
        1.ユーザは、お金を投入する
        2.ユーザは、購入するドリンクのボタンを押す
        3.システムは、対象のドリンクを排出する
        4.ユーザは、払い出しボタンを押す
        5.システムは、お釣りを払い出す




13年3月2日土曜日
各ステップをテストリストにする
       1.ユーザは、お金を投入する
       2.ユーザは、購入するドリンクのボタンを押す
    • (初期状態で)合計金額は0円である
       3.システムは、対象のドリンクを排出する
    • 100円硬貨を投入すると、合計金額が100円である
       4.ユーザは、払い出しボタンを押す
    • 100円硬貨を投入されている時に、
       5.システムは、お釣りを払い出す
     10円硬貨を投入すると、合計金額が110円である




13年3月2日土曜日
各ステップをテストリストにする
       1.ユーザは、お金を投入する
       2.ユーザは、購入するドリンクのボタンを押す
    • (初期状態で)合計金額は0円である
       3.システムは、対象のドリンクを排出する
    • 100円硬貨を投入すると、合計金額が100円である
       4.ユーザは、払い出しボタンを押す
    • 100円硬貨を投入されている時に、
       5.システムは、お釣りを払い出す
     10円硬貨を投入すると、合計金額が110円である {
    @Test public void 初期状態でgetTotalAmountは0を返す() throws Exception
        VendingMachine sut = new VendingMachine();
        int actual = sut.getTotalAmount();
        assertThat(actual, is(0));
    }




13年3月2日土曜日
ユースケース駆動開発とTDD
                    ユースケース
                      TDD
               クラス/メソッド         クラス/メソッド


      受入テスト    クラス/メソッド         クラス/メソッド

     (機能テスト)              TDD
               クラス/メソッド         クラス/メソッド

               クラス/メソッド         クラス/メソッド


      受入テスト
                    ユースケース
     (機能テスト)
                    ユースケース
13年3月2日土曜日
ユースケース駆動開発の利点
         受入テストが設計時に明確

             自動化できればベスト

         適切な粒度の「何を構築すべきか?」

         システムの完成度

             本来はユースケース単位で意味がある

             現実として進   管理が必要


13年3月2日土曜日
まとめ
         TDDだけでは良いシステムは作れない

         顧客の要件からテストリストを導く

             ユースケースシナリオとテストリスト

             テストリストから実装を導く(TDD)




13年3月2日土曜日
おすすめの書籍
         ユースケース駆動開発実践ガイド

         実践アジャイルテスト

         JUnit実践入門




13年3月2日土曜日

More Related Content

What's hot

PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019Tokoroten Nakayama
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~Kenji Hiranabe
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチYoshiki Hayama
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門Masahito Zembutsu
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテストTakuto Wada
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版MOCKS | Yuta Morishige
 
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことかYoshiki Hayama
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 

What's hot (20)

PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 

Similar to テスト駆動開発のはじめ方

ユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へShuji Watanabe
 
チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例Koeda1102
 
20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytest20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytestShinsuke Matsuki
 
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへスマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへFuyuki Ishikawa
 
Think aloud method
Think aloud methodThink aloud method
Think aloud methodHeesung Lee
 
上級ユーザビリティテスト手法
上級ユーザビリティテスト手法上級ユーザビリティテスト手法
上級ユーザビリティテスト手法Tarumoto Tetsuya
 
Elasticsearchの機械学習機能を使ってみた
Elasticsearchの機械学習機能を使ってみたElasticsearchの機械学習機能を使ってみた
Elasticsearchの機械学習機能を使ってみたYuichiArisaka
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供Masayuki Ozawa
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013Kinji Akemine
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドTsuyoshi Yumoto
 
Dev Love Lt 20090622(佐々木)
Dev Love Lt 20090622(佐々木)Dev Love Lt 20090622(佐々木)
Dev Love Lt 20090622(佐々木)DevLOVE
 
『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3shinyaa31
 
Metrix team 20190524
Metrix team 20190524Metrix team 20190524
Metrix team 20190524SQiP-WEST
 
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計Hironori Washizaki
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summaryYukio NAGAO
 
異業種でのテスト自動化の実際
異業種でのテスト自動化の実際異業種でのテスト自動化の実際
異業種でのテスト自動化の実際Satsuki Urayama
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
How to improve performance
How to improve performanceHow to improve performance
How to improve performanceAtsuko Fukui
 
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作n-yuki
 
開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)robotcare
 

Similar to テスト駆動開発のはじめ方 (20)

ユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へ
 
チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例
 
20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytest20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytest
 
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへスマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
 
Think aloud method
Think aloud methodThink aloud method
Think aloud method
 
上級ユーザビリティテスト手法
上級ユーザビリティテスト手法上級ユーザビリティテスト手法
上級ユーザビリティテスト手法
 
Elasticsearchの機械学習機能を使ってみた
Elasticsearchの機械学習機能を使ってみたElasticsearchの機械学習機能を使ってみた
Elasticsearchの機械学習機能を使ってみた
 
DBA から開発者への情報提供
DBA から開発者への情報提供DBA から開発者への情報提供
DBA から開発者への情報提供
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライド
 
Dev Love Lt 20090622(佐々木)
Dev Love Lt 20090622(佐々木)Dev Love Lt 20090622(佐々木)
Dev Love Lt 20090622(佐々木)
 
『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3
 
Metrix team 20190524
Metrix team 20190524Metrix team 20190524
Metrix team 20190524
 
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
 
異業種でのテスト自動化の実際
異業種でのテスト自動化の実際異業種でのテスト自動化の実際
異業種でのテスト自動化の実際
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
How to improve performance
How to improve performanceHow to improve performance
How to improve performance
 
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
 
開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)
 

More from Shuji Watanabe

Serverless - Developers.IO 2019
Serverless - Developers.IO 2019Serverless - Developers.IO 2019
Serverless - Developers.IO 2019Shuji Watanabe
 
Ansible ハンズオン on AWS - DevelopersIO 2017
Ansible ハンズオン on AWS - DevelopersIO 2017Ansible ハンズオン on AWS - DevelopersIO 2017
Ansible ハンズオン on AWS - DevelopersIO 2017Shuji Watanabe
 
SSMでマネージドEC2 #reinvent #cmdevio
SSMでマネージドEC2 #reinvent #cmdevioSSMでマネージドEC2 #reinvent #cmdevio
SSMでマネージドEC2 #reinvent #cmdevioShuji Watanabe
 
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #Eプロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #EShuji Watanabe
 
AWSによるWebサイト構築と運用 - concrete5 編 -
AWSによるWebサイト構築と運用 - concrete5 編 -AWSによるWebサイト構築と運用 - concrete5 編 -
AWSによるWebサイト構築と運用 - concrete5 編 -Shuji Watanabe
 
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003Shuji Watanabe
 
CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 Shuji Watanabe
 
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014Shuji Watanabe
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -Shuji Watanabe
 
s3+cloud frontによる静的コンテンツ配信 - Sphinx編 #cmdevio
s3+cloud frontによる静的コンテンツ配信 - Sphinx編  #cmdevios3+cloud frontによる静的コンテンツ配信 - Sphinx編  #cmdevio
s3+cloud frontによる静的コンテンツ配信 - Sphinx編 #cmdevioShuji Watanabe
 
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevioクラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevioShuji Watanabe
 
テスト駆動開発へようこそ
テスト駆動開発へようこそテスト駆動開発へようこそ
テスト駆動開発へようこそShuji Watanabe
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門Shuji Watanabe
 
テストコードのリファクタリング
テストコードのリファクタリングテストコードのリファクタリング
テストコードのリファクタリングShuji Watanabe
 
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーテスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーShuji Watanabe
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストShuji Watanabe
 
アジャイルテスティング
アジャイルテスティングアジャイルテスティング
アジャイルテスティングShuji Watanabe
 
テストリストの見つけ方
テストリストの見つけ方テストリストの見つけ方
テストリストの見つけ方Shuji Watanabe
 

More from Shuji Watanabe (20)

Serverless - Developers.IO 2019
Serverless - Developers.IO 2019Serverless - Developers.IO 2019
Serverless - Developers.IO 2019
 
Ansible ハンズオン on AWS - DevelopersIO 2017
Ansible ハンズオン on AWS - DevelopersIO 2017Ansible ハンズオン on AWS - DevelopersIO 2017
Ansible ハンズオン on AWS - DevelopersIO 2017
 
SSMでマネージドEC2 #reinvent #cmdevio
SSMでマネージドEC2 #reinvent #cmdevioSSMでマネージドEC2 #reinvent #cmdevio
SSMでマネージドEC2 #reinvent #cmdevio
 
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #Eプロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
 
ELBの概要と勘所
ELBの概要と勘所ELBの概要と勘所
ELBの概要と勘所
 
AWSによるWebサイト構築と運用 - concrete5 編 -
AWSによるWebサイト構築と運用 - concrete5 編 -AWSによるWebサイト構築と運用 - concrete5 編 -
AWSによるWebサイト構築と運用 - concrete5 編 -
 
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
 
CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01
 
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
 
s3+cloud frontによる静的コンテンツ配信 - Sphinx編 #cmdevio
s3+cloud frontによる静的コンテンツ配信 - Sphinx編  #cmdevios3+cloud frontによる静的コンテンツ配信 - Sphinx編  #cmdevio
s3+cloud frontによる静的コンテンツ配信 - Sphinx編 #cmdevio
 
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevioクラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
 
テスト駆動開発へようこそ
テスト駆動開発へようこそテスト駆動開発へようこそ
テスト駆動開発へようこそ
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
テストコードのリファクタリング
テストコードのリファクタリングテストコードのリファクタリング
テストコードのリファクタリング
 
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーテスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ー
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
アジャイルテスティング
アジャイルテスティングアジャイルテスティング
アジャイルテスティング
 
テストリストの見つけ方
テストリストの見つけ方テストリストの見つけ方
テストリストの見つけ方
 
TDDをはじめよう
TDDをはじめようTDDをはじめよう
TDDをはじめよう
 

Recently uploaded

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 

Recently uploaded (10)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

テスト駆動開発のはじめ方

  • 1. テスト駆動開発の はじめ方 2013.03.2 CLR/H Shuji Watanabe (@shuji_w6e) 1 13年3月2日土曜日
  • 3. 渡辺 修司 / @shuji_w6e 札幌Javaコミュニティ やさしいデスマーチ(Blog) Java, Groovy, JavaScript, Ruby, TDD JUnit実践入門 https://forkwell.com/u/shuji.w6e ロードバイク, フットサル, スノーボード 13年3月2日土曜日
  • 5. テストファースト リファクタリング 13年3月2日土曜日
  • 6. テスト駆動開発とは、プロダクションコード よりも先にテストコードを書くテストファー ストを基盤とした反復的な開発手法。 先にテストを意識することにより設計を駆動 し、常にリファクタリングを行うことで動作 するきれいなコードを手に入れることができ る。 13年3月2日土曜日
  • 7. テスト駆動開発のサイクル 1.設計する 5.リファクタリング Heuristics 2.テストを書く 4.テストを成功させる 3.コードを書く 13年3月2日土曜日
  • 8. TDDはテストリストが起点 プログラムが満たすべき仕様をリスト化 最初に全てを抽出できない テストリストは随時、追加・修正 ただし、具体的な仕様(例)が必要 例:getListで1件のデータが取得できる 13年3月2日土曜日
  • 9. テスト駆動開発のFAQ 問. どのくらい事前設計すべきでしょうか? どうすれば、いつやめるかわかるのでしょうか? 答. 何を構築すべきかわかるまでです。 Derick Bailey http://www.infoq.com/jp/news/2008/03/tdd-smells 13年3月2日土曜日
  • 11. 顧客が本当に必要だったもの システム開発の目的は顧客の要件の実現 13年3月2日土曜日
  • 12. 何を構築すべきか? 要件から「何を構築するか」を設計する 外部的振る舞いを設計する システムが満たすべきテストケース 13年3月2日土曜日
  • 13. 外部設計とテストリスト 外部設計 顧客の要件 テストリスト 「何を構築するか?」 プログラム 13年3月2日土曜日
  • 14. 外部設計とテストリスト 外部設計 顧客の要件 テストリスト 「何を構築するか?」 プログラム 13年3月2日土曜日
  • 15. テストリストとTDD TDD 顧客の要件 テストリスト 「何を構築するか?」 プログラム 13年3月2日土曜日
  • 16. テストリストとTDD TDD 顧客の要件 テストリスト 「何を構築するか?」 プログラム 13年3月2日土曜日
  • 17. TDDは開発手法 良いプログラムは開発できるが、良いシステ ムを開発できるわけではない 良いシステム = 顧客の要件を満たすシステム 要件を満たすテストリストを作ることが重要 13年3月2日土曜日
  • 18. 外部設計の手法 顧客のことばを使う ユースケース ユーザーストーリー 顧客が理解できるツールを使う 画面や帳票のモックアップ 13年3月2日土曜日
  • 20. 開発プロセス ソフトウェアを作るための手順・段階 アジャイルでもWFでも基本は変わらない 要件定義 外部設計 プログラミング テスト 13年3月2日土曜日
  • 21. 外部設計 システムの外部的振る舞い 利用者視点 要件定義とのトレーサビリティ システム化するスコープ 実装とのトレーサビリティ 内部(システム化方式)に依存しない 13年3月2日土曜日
  • 22. システム境界 システムと外部との接点 どこからがシステムの機能・データなのか? ユーザーインターフェイス(画面) 外部インターフェイス システム境界 システム 機能 データ ユーザ 外部システム 13年3月2日土曜日
  • 23. トレーサビリティ 追跡(トレース)性 成果物同士が論理的に繋がっているか? 各フェイズでの成果物の整合性も必須 要件定義 外部設計 実装 比較的に保てる 保ちにくい 13年3月2日土曜日
  • 24. ユースケース駆動開発を活用した テスト駆動開発 13年3月2日土曜日
  • 25. ユースケース駆動開発 ユースケース駆動開発とは、ユースケースを開 発の基点として顧客の要件を定義し、ユースケ ースから設計・実装までのトレーサビリティを 保つ事を重視して開発を進める開発手法。 システム トレーサビリティ ユースケース System Software ユースケース アクター Heuristics 13年3月2日土曜日
  • 26. ユースケース システムの機能を表すシナリオ(使用例) 外部的な振る舞いと内部的な振る舞い システムと外部とのやり取りを記述する 要件定義フェイズで抽出され、 外部設計フェイズで詳細化する 13年3月2日土曜日
  • 27. 自動販売機でドリンクを購入する 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す 3.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す 5.システムは、お釣りを払い出す システムとユーザのインタラクションを記述 1行で1つのアクションを記述 文末は「∼する」(「∼できる」は厳禁) 13年3月2日土曜日
  • 28. 参考)ユースケース図 ユースケースとアクターとの関係 構造化されたインデックス 重複を整理 関連するものをまとめる 本質はユースケース 13年3月2日土曜日
  • 29. 参考) 本質ユースケース ビジネスユースケース/ Essential Use Case 簡潔で、抽象化され、一般的なユースケース 実装に依存しない形 要求 抽象的 要求分析に適する 本質ユースケース システムユースケース 実装に結びつけにくい 具体的 実装 http://www.ogis-ri.co.jp/otc/swec/process/am-res/am/artifacts/essentialUseCase.html http://www.ogis-ri.co.jp/otc/swec/process/am-res/am/artifacts/systemUseCase.html 13年3月2日土曜日
  • 30. ユースケースから実装を導く ユースケースから実装を導く ユースケースが適切である事が前提 つまり、顧客の言葉である ユースケースからオブジェクト(名詞)を抽出 「表示する」「取得する」など動詞 アーキテクチャに依存しない 13年3月2日土曜日
  • 31. ロバストネス分析 ユースケースからオブジェクトを抽出・整理 するための分析方法 ユースケースを3つの要素に分解する バウンダリ アクター バウンダリ コントローラ コントローラ エンティティ エンティティ ユースケースに対する健全性チェック 13年3月2日土曜日
  • 32. 自動販売機でドリンクを購入する 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す 3.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す メソッドの候補 クラスの候補 何を構築すべきか? 13年3月2日土曜日
  • 33. アーキテクチャの適用 言語/フレームワークの選択 Rails, JavaEE, Django, CakePHP 細かい点は異なるが骨格は変わらない ユースケース + アーキテクチャ 実装可能 13年3月2日土曜日
  • 34. ユースケースシナリオを例にする ユーザは、お金を投入する 1.ユーザは、購入するドリンクのボタンを押す 2.システムは、対象のドリンクを排出する 3.ユーザは、払い出しボタンを押す 4.システムは、お釣りを払い出す 具体的な例とすることで テストできる 問題点に気付くことができる 13年3月2日土曜日
  • 35. ユースケースシナリオを例にする 1.ユーザは、100硬貨を2枚を投入する ユーザは、お金を投入する 2.ユーザは、コーラのボタンを押す 1.ユーザは、購入するドリンクのボタンを押す 3.システムは、コーラを排出する 2.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す 3.ユーザは、払い出しボタンを押す 5.システムは、10硬貨を8枚を払い出す 4.システムは、お釣りを払い出す 具体的な例とすることで テストできる 問題点に気付くことができる 13年3月2日土曜日
  • 36. ユースケースシナリオを例にする 1.ユーザは、100硬貨を2枚を投入する ユーザは、お金を投入する 2.ユーザは、コーラのボタンを押す 受け入れテスト 1.ユーザは、購入するドリンクのボタンを押す 3.システムは、コーラを排出する 2.システムは、対象のドリンクを排出する (Cucumberなど) 4.ユーザは、払い出しボタンを押す 3.ユーザは、払い出しボタンを押す 5.システムは、10硬貨を8枚を払い出す 4.システムは、お釣りを払い出す 具体的な例とすることで テストできる 問題点に気付くことができる 13年3月2日土曜日
  • 37. ユースケースシナリオを例にする 1.ユーザは、100硬貨を2枚を投入する ユーザは、お金を投入する 2.ユーザは、コーラのボタンを押す 受け入れテスト 1.ユーザは、購入するドリンクのボタンを押す 3.システムは、コーラを排出する 2.システムは、対象のドリンクを排出する (Cucumberなど) 4.ユーザは、払い出しボタンを押す 3.ユーザは、払い出しボタンを押す 5.システムは、10硬貨を8枚を払い出す 4.システムは、お釣りを払い出す # language: ja フィーチャ: 自動販売機で飲み物を購入 具体的な例とすることで シナリオ: コーラを1本買う 前提 '100'円を'2'枚投入する テストできる もし 'コーラ'のボタンを押した ならば 'コーラ'が出力される かつ お釣りは'10'円が’8’枚である 問題点に気付くことができる 13年3月2日土曜日
  • 38. 各ステップをテストリストにする 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す 3.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す 5.システムは、お釣りを払い出す 13年3月2日土曜日
  • 39. 各ステップをテストリストにする 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す • (初期状態で)合計金額は0円である 3.システムは、対象のドリンクを排出する • 100円硬貨を投入すると、合計金額が100円である 4.ユーザは、払い出しボタンを押す • 100円硬貨を投入されている時に、 5.システムは、お釣りを払い出す  10円硬貨を投入すると、合計金額が110円である 13年3月2日土曜日
  • 40. 各ステップをテストリストにする 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す • (初期状態で)合計金額は0円である 3.システムは、対象のドリンクを排出する • 100円硬貨を投入すると、合計金額が100円である 4.ユーザは、払い出しボタンを押す • 100円硬貨を投入されている時に、 5.システムは、お釣りを払い出す  10円硬貨を投入すると、合計金額が110円である { @Test public void 初期状態でgetTotalAmountは0を返す() throws Exception VendingMachine sut = new VendingMachine(); int actual = sut.getTotalAmount(); assertThat(actual, is(0)); } 13年3月2日土曜日
  • 41. ユースケース駆動開発とTDD ユースケース TDD クラス/メソッド クラス/メソッド 受入テスト クラス/メソッド クラス/メソッド (機能テスト) TDD クラス/メソッド クラス/メソッド クラス/メソッド クラス/メソッド 受入テスト ユースケース (機能テスト) ユースケース 13年3月2日土曜日
  • 42. ユースケース駆動開発の利点 受入テストが設計時に明確 自動化できればベスト 適切な粒度の「何を構築すべきか?」 システムの完成度 本来はユースケース単位で意味がある 現実として進 管理が必要 13年3月2日土曜日
  • 43. まとめ TDDだけでは良いシステムは作れない 顧客の要件からテストリストを導く ユースケースシナリオとテストリスト テストリストから実装を導く(TDD) 13年3月2日土曜日
  • 44. おすすめの書籍 ユースケース駆動開発実践ガイド 実践アジャイルテスト JUnit実践入門 13年3月2日土曜日