SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
札幌からきますた




13年1月14日月曜日
札幌からきますた




13年1月14日月曜日
札幌からきますた




13年1月14日月曜日
ユースケースから
         テスト駆動開発へ 2.0
              2013.01.13 TDD BootCamp 大阪
               Shuji Watanabe (@shuji_w6e)




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

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




13年1月14日月曜日
TDDが解決すること・
                 しないこと



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

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

         なんらかの開発プロセスは必要

              アジャイルでもウォーターフォールでも




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

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

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

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

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

         「何を構築すべきか」=事前設計


13年1月14日月曜日
プログラムの仕様と要件
         システム開発の目的は顧客の要件の実現

              仕様が要件を満たしていなければ本末転倒

         要件から「何を構築するか」を設計する




13年1月14日月曜日
TDDが解決する範囲




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

13年1月14日月曜日
「何を構築するか?」を決める
         顧客の言葉を使ったシステムの使い方

              ユースケース

              ユーザーストーリー

         システムの外部的な振る舞い

              画面モックアップ

              APIや他システム連携


13年1月14日月曜日
ユースケース駆動開発




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

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


                     外部設計


                        プログラミング


                              テスト

13年1月14日月曜日
外部設計
         システムの外部的振る舞い

              利用者視点

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

              システム化するスコープ

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

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


13年1月14日月曜日
システム境界
         システムと外部との接点

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

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

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

                        システム


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




13年1月14日月曜日
トレーサビリティ
         追跡(トレース)性

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

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


        要件定義        外部設計         実装

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


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

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



                     ユースケース
              アクター
                                              Heuristics




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

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

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

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




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

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

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

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

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

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

              重複を整理

              関連するものをまとめる

         本質はユースケース




13年1月14日月曜日
参考) 本質ユースケース
         ビジネスユースケース/ 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年1月14日月曜日
ユースケースから
              テスト駆動開発へ



13年1月14日月曜日
ユースケースから実装を導く
         ユースケースから実装を導く

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

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

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

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

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


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

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

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

              コントローラ

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




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

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

              メソッドの候補

                          クラスの候補



                        何を構築すべきか?

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

              Rails, JavaEE, Django, CakePHP

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

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




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

        具体的な例とすることで

         テストできる

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

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

        具体的な例とすることで

         テストできる

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

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

        具体的な例とすることで

         テストできる

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

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

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

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

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




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




13年1月14日月曜日
各ステップをテストリストにする
       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年1月14日月曜日
ユースケース駆動開発とTDD
                    ユースケース
                      TDD
               クラス/メソッド         クラス/メソッド


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

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

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


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

              自動化できればベスト

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

         システムの完成度

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

              現実として進   管理が必要


13年1月14日月曜日
まとめ
              ユースケースでシステム全体を設計する

              顧客視点でシステム境界を明確にする

              ユースケースは受入テスト

              ユースケースから実装が導ける事が重要

              ユースケースの1文は「構築すべきこと」

              テスト駆動開発の起点 テストリスト


13年1月14日月曜日

Mais conteúdo relacionado

Mais procurados

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由増田 亨
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方Takafumi ONAKA
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向Keizo Tatsumi
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀増田 亨
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。toshihiro ichitani
 
あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?Minoru Yokomichi
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022Yusuke Suzuki
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 

Mais procurados (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
 
あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 

Destaque

いまさらユースケース
いまさらユースケースいまさらユースケース
いまさらユースケースMasaru Kimura
 
ユースケースの善し悪し
ユースケースの善し悪しユースケースの善し悪し
ユースケースの善し悪しakipii Oga
 
テスト駆動開発を継続する
テスト駆動開発を継続するテスト駆動開発を継続する
テスト駆動開発を継続するirof N
 
地方における勉強会事情
地方における勉強会事情地方における勉強会事情
地方における勉強会事情Soudai Sone
 
システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~
システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~
システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~terahide
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotationEIICHI KIMURA
 
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring 失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring Yusuke Yamamoto
 
ユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へShuji Watanabe
 
モデリングもしないでアジャイルとは何事だ
モデリングもしないでアジャイルとは何事だモデリングもしないでアジャイルとは何事だ
モデリングもしないでアジャイルとは何事だIwao Harada
 
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbookshinyaa31
 
自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした洋史 東平
 
ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用Takehiro Inoue
 
koredake modeling accelerates agile
koredake modeling accelerates agilekoredake modeling accelerates agile
koredake modeling accelerates agileChangeVision
 
Astah UML スタートガイド
Astah UML スタートガイドAstah UML スタートガイド
Astah UML スタートガイドChangeVision
 
Astah professional スタートガイド
Astah professional スタートガイドAstah professional スタートガイド
Astah professional スタートガイドChangeVision
 
using astah for openthology modeling
using astah for openthology modelingusing astah for openthology modeling
using astah for openthology modelingKenji Hiranabe
 
Astah UML/ER/mindmapping modeling tool Introduction
Astah UML/ER/mindmapping modeling tool IntroductionAstah UML/ER/mindmapping modeling tool Introduction
Astah UML/ER/mindmapping modeling tool IntroductionKenji Hiranabe
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要かHiromasa Oka
 

Destaque (20)

いまさらユースケース
いまさらユースケースいまさらユースケース
いまさらユースケース
 
ユースケースの善し悪し
ユースケースの善し悪しユースケースの善し悪し
ユースケースの善し悪し
 
テスト駆動開発を継続する
テスト駆動開発を継続するテスト駆動開発を継続する
テスト駆動開発を継続する
 
地方における勉強会事情
地方における勉強会事情地方における勉強会事情
地方における勉強会事情
 
システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~
システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~
システム設計の謎 ~べ、別にあんたのために設計してるんじゃないんだからね///~
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring 失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
 
ユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へ
 
モデリングもしないでアジャイルとは何事だ
モデリングもしないでアジャイルとは何事だモデリングもしないでアジャイルとは何事だ
モデリングもしないでアジャイルとは何事だ
 
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
 
UcDDBootCampSap0.1
UcDDBootCampSap0.1UcDDBootCampSap0.1
UcDDBootCampSap0.1
 
自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした
 
Spock's world
Spock's worldSpock's world
Spock's world
 
ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用
 
koredake modeling accelerates agile
koredake modeling accelerates agilekoredake modeling accelerates agile
koredake modeling accelerates agile
 
Astah UML スタートガイド
Astah UML スタートガイドAstah UML スタートガイド
Astah UML スタートガイド
 
Astah professional スタートガイド
Astah professional スタートガイドAstah professional スタートガイド
Astah professional スタートガイド
 
using astah for openthology modeling
using astah for openthology modelingusing astah for openthology modeling
using astah for openthology modeling
 
Astah UML/ER/mindmapping modeling tool Introduction
Astah UML/ER/mindmapping modeling tool IntroductionAstah UML/ER/mindmapping modeling tool Introduction
Astah UML/ER/mindmapping modeling tool Introduction
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 

Semelhante a ユースケースからテスト駆動開発へ

テスト駆動開発のはじめ方
テスト駆動開発のはじめ方テスト駆動開発のはじめ方
テスト駆動開発のはじめ方Shuji Watanabe
 
Think aloud method
Think aloud methodThink aloud method
Think aloud methodHeesung Lee
 
チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例Koeda1102
 
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへスマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへFuyuki Ishikawa
 
上級ユーザビリティテスト手法
上級ユーザビリティテスト手法上級ユーザビリティテスト手法
上級ユーザビリティテスト手法Tarumoto Tetsuya
 
「グーグルの自動運転Carの技術要素」勉強会 2014.08.29
「グーグルの自動運転Carの技術要素」勉強会 2014.08.29「グーグルの自動運転Carの技術要素」勉強会 2014.08.29
「グーグルの自動運転Carの技術要素」勉強会 2014.08.29Minoru Chikamune
 
HdIfes itowponde_130223
HdIfes itowponde_130223HdIfes itowponde_130223
HdIfes itowponde_130223英明 伊藤
 
テスト自動化とアーキテクチャ
テスト自動化とアーキテクチャテスト自動化とアーキテクチャ
テスト自動化とアーキテクチャToru Koido
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドTsuyoshi Yumoto
 
実証試験総論(午後の部)(大川弥生)
実証試験総論(午後の部)(大川弥生)実証試験総論(午後の部)(大川弥生)
実証試験総論(午後の部)(大川弥生)robotcare
 
20161218 selenium study4
20161218 selenium study420161218 selenium study4
20161218 selenium study4Naoya Kojima
 
#abc2012s appmom統計データから見るユーザーのアプリ利用実態
#abc2012s appmom統計データから見るユーザーのアプリ利用実態#abc2012s appmom統計データから見るユーザーのアプリ利用実態
#abc2012s appmom統計データから見るユーザーのアプリ利用実態Naoko Tsubaki
 
エンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリー
エンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリーエンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリー
エンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリーTakashi Watanabe
 
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからテスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからKeizo Tatsumi
 
20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytest20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytestShinsuke Matsuki
 
2015 12 03_uiテストツールについて
2015 12 03_uiテストツールについて2015 12 03_uiテストツールについて
2015 12 03_uiテストツールについてNatsuki Yamanaka
 
開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)robotcare
 
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作n-yuki
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summaryYukio NAGAO
 
ユーザビリティテストをやってみよう
ユーザビリティテストをやってみようユーザビリティテストをやってみよう
ユーザビリティテストをやってみようscarletplover
 

Semelhante a ユースケースからテスト駆動開発へ (20)

テスト駆動開発のはじめ方
テスト駆動開発のはじめ方テスト駆動開発のはじめ方
テスト駆動開発のはじめ方
 
Think aloud method
Think aloud methodThink aloud method
Think aloud method
 
チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例チケット駆動開発を用いたソフトウェア品質改善事例
チケット駆動開発を用いたソフトウェア品質改善事例
 
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへスマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
 
上級ユーザビリティテスト手法
上級ユーザビリティテスト手法上級ユーザビリティテスト手法
上級ユーザビリティテスト手法
 
「グーグルの自動運転Carの技術要素」勉強会 2014.08.29
「グーグルの自動運転Carの技術要素」勉強会 2014.08.29「グーグルの自動運転Carの技術要素」勉強会 2014.08.29
「グーグルの自動運転Carの技術要素」勉強会 2014.08.29
 
HdIfes itowponde_130223
HdIfes itowponde_130223HdIfes itowponde_130223
HdIfes itowponde_130223
 
テスト自動化とアーキテクチャ
テスト自動化とアーキテクチャテスト自動化とアーキテクチャ
テスト自動化とアーキテクチャ
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライド
 
実証試験総論(午後の部)(大川弥生)
実証試験総論(午後の部)(大川弥生)実証試験総論(午後の部)(大川弥生)
実証試験総論(午後の部)(大川弥生)
 
20161218 selenium study4
20161218 selenium study420161218 selenium study4
20161218 selenium study4
 
#abc2012s appmom統計データから見るユーザーのアプリ利用実態
#abc2012s appmom統計データから見るユーザーのアプリ利用実態#abc2012s appmom統計データから見るユーザーのアプリ利用実態
#abc2012s appmom統計データから見るユーザーのアプリ利用実態
 
エンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリー
エンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリーエンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリー
エンタープライズアプリケーション品質向上のカギ -サービス仮想化と継続的デリバリー
 
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからテスト自動化のこれまでとこれから
テスト自動化のこれまでとこれから
 
20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytest20100731.jissen.swtest securitytest
20100731.jissen.swtest securitytest
 
2015 12 03_uiテストツールについて
2015 12 03_uiテストツールについて2015 12 03_uiテストツールについて
2015 12 03_uiテストツールについて
 
開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)開発コンセプトシートの考え方(大川弥生)
開発コンセプトシートの考え方(大川弥生)
 
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
 
ユーザビリティテストをやってみよう
ユーザビリティテストをやってみようユーザビリティテストをやってみよう
ユーザビリティテストをやってみよう
 

Mais de 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
 

Mais de 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をはじめよう
 

Último

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
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Último (8)

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
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

ユースケースからテスト駆動開発へ

  • 4. ユースケースから テスト駆動開発へ 2.0 2013.01.13 TDD BootCamp 大阪 Shuji Watanabe (@shuji_w6e) 3 13年1月14日月曜日
  • 5. テスト駆動開発のFAQ 問. どのくらい事前設計すべきでしょうか? どうすれば、いつやめるかわかるのでしょうか? 答. 何を構築すべきかわかるまでです。 Derick Bailey http://www.infoq.com/jp/news/2008/03/tdd-smells 13年1月14日月曜日
  • 6. TDDが解決すること・ しないこと 13年1月14日月曜日
  • 7. TDDは開発手法 良いプログラムは開発できるが、良いシステ ムを開発できるわけではない 良いシステム = 顧客の要件を満たすシステム なんらかの開発プロセスは必要 アジャイルでもウォーターフォールでも 13年1月14日月曜日
  • 8. TDDはテストリストが起点 プログラムが満たすべき仕様をリスト化 最初に全てを抽出できない テストリストは随時、追加・修正 ただし、具体的な仕様(例)が必要 例:getListで1件のデータが取得できる 「何を構築すべきか」=事前設計 13年1月14日月曜日
  • 9. プログラムの仕様と要件 システム開発の目的は顧客の要件の実現 仕様が要件を満たしていなければ本末転倒 要件から「何を構築するか」を設計する 13年1月14日月曜日
  • 10. TDDが解決する範囲 TDD 顧客の要件 テストリスト 「何を構築するか?」 プログラム 13年1月14日月曜日
  • 11. 「何を構築するか?」を決める 顧客の言葉を使ったシステムの使い方 ユースケース ユーザーストーリー システムの外部的な振る舞い 画面モックアップ APIや他システム連携 13年1月14日月曜日
  • 13. 開発プロセス ソフトウェアを作るための手順・段階 アジャイルでもWFでも基本は変わらない 要件定義 外部設計 プログラミング テスト 13年1月14日月曜日
  • 14. 外部設計 システムの外部的振る舞い 利用者視点 要件定義とのトレーサビリティ システム化するスコープ 実装とのトレーサビリティ 内部(システム化方式)に依存しない 13年1月14日月曜日
  • 15. システム境界 システムと外部との接点 どこからがシステムの機能・データなのか? ユーザーインターフェイス(画面) 外部インターフェイス システム境界 システム 機能 データ ユーザ 外部システム 13年1月14日月曜日
  • 16. トレーサビリティ 追跡(トレース)性 成果物同士が論理的に繋がっているか? 各フェイズでの成果物の整合性も必須 要件定義 外部設計 実装 比較的に保てる 保ちにくい 13年1月14日月曜日
  • 17. ユースケース駆動開発 ユースケース駆動開発とは、ユースケースを開 発の基点として顧客の要件を定義し、ユースケ ースから設計・実装までのトレーサビリティを 保つ事を重視して開発を進める開発手法。 システム トレーサビリティ ユースケース System Software ユースケース アクター Heuristics 13年1月14日月曜日
  • 18. ユースケース システムの機能を表すシナリオ(使用例) 外部的な振る舞いと内部的な振る舞い システムと外部とのやり取りを記述する 要件定義フェイズで抽出され、 外部設計フェイズで詳細化する 13年1月14日月曜日
  • 19. 自動販売機でドリンクを購入する ユーザは、お金を投入する 1.ユーザは、購入するドリンクのボタンを押す 2.システムは、対象のドリンクを排出する 3.ユーザは、払い出しボタンを押す 4.システムは、お釣りを払い出す システムとユーザのインタラクションを記述 1行で1つのアクションを記述 文末は「∼する」(「∼できる」は厳禁) 13年1月14日月曜日
  • 20. 参考)ユースケース図 ユースケースとアクターとの関係 構造化されたインデックス 重複を整理 関連するものをまとめる 本質はユースケース 13年1月14日月曜日
  • 21. 参考) 本質ユースケース ビジネスユースケース/ 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年1月14日月曜日
  • 22. ユースケースから テスト駆動開発へ 13年1月14日月曜日
  • 23. ユースケースから実装を導く ユースケースから実装を導く ユースケースが適切である事が前提 つまり、顧客の言葉である ユースケースからオブジェクト(名詞)を抽出 「表示する」「取得する」など動詞 アーキテクチャに依存しない 13年1月14日月曜日
  • 24. ロバストネス分析 ユースケースからオブジェクトを抽出・整理 するための分析方法 ユースケースを3つの要素に分解する バウンダリ アクター バウンダリ コントローラ コントローラ エンティティ エンティティ ユースケースに対する健全性チェック 13年1月14日月曜日
  • 25. 自動販売機でドリンクを購入する 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す 3.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す メソッドの候補 クラスの候補 何を構築すべきか? 13年1月14日月曜日
  • 26. アーキテクチャの適用 言語/フレームワークの選択 Rails, JavaEE, Django, CakePHP 細かい点は異なるが骨格は変わらない ユースケース + アーキテクチャ 実装可能 13年1月14日月曜日
  • 27. ユースケースシナリオを例にする ユーザは、お金を投入する 1.ユーザは、購入するドリンクのボタンを押す 2.システムは、対象のドリンクを排出する 3.ユーザは、払い出しボタンを押す 4.システムは、お釣りを払い出す 具体的な例とすることで テストできる 問題点に気付くことができる 13年1月14日月曜日
  • 28. ユースケースシナリオを例にする 1.ユーザは、100硬貨を2枚を投入する ユーザは、お金を投入する 2.ユーザは、コーラのボタンを押す 1.ユーザは、購入するドリンクのボタンを押す 3.システムは、コーラを排出する 2.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す 3.ユーザは、払い出しボタンを押す 5.システムは、10硬貨を8枚を払い出す 4.システムは、お釣りを払い出す 具体的な例とすることで テストできる 問題点に気付くことができる 13年1月14日月曜日
  • 29. ユースケースシナリオを例にする 1.ユーザは、100硬貨を2枚を投入する ユーザは、お金を投入する 2.ユーザは、コーラのボタンを押す 受け入れテスト 1.ユーザは、購入するドリンクのボタンを押す 3.システムは、コーラを排出する 2.システムは、対象のドリンクを排出する (Cucumberなど) 4.ユーザは、払い出しボタンを押す 3.ユーザは、払い出しボタンを押す 5.システムは、10硬貨を8枚を払い出す 4.システムは、お釣りを払い出す 具体的な例とすることで テストできる 問題点に気付くことができる 13年1月14日月曜日
  • 30. ユースケースシナリオを例にする 1.ユーザは、100硬貨を2枚を投入する ユーザは、お金を投入する 2.ユーザは、コーラのボタンを押す 受け入れテスト 1.ユーザは、購入するドリンクのボタンを押す 3.システムは、コーラを排出する 2.システムは、対象のドリンクを排出する (Cucumberなど) 4.ユーザは、払い出しボタンを押す 3.ユーザは、払い出しボタンを押す 5.システムは、10硬貨を8枚を払い出す 4.システムは、お釣りを払い出す # language: ja フィーチャ: 自動販売機で飲み物を購入 具体的な例とすることで シナリオ: コーラを1本買う 前提 '100'円を'2'枚投入する テストできる もし 'コーラ'のボタンを押した ならば 'コーラ'が出力される かつ お釣りは'10'円が’8’枚である 問題点に気付くことができる 13年1月14日月曜日
  • 31. 各ステップをテストリストにする 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す 3.システムは、対象のドリンクを排出する 4.ユーザは、払い出しボタンを押す 5.システムは、お釣りを払い出す 13年1月14日月曜日
  • 32. 各ステップをテストリストにする 1.ユーザは、お金を投入する 2.ユーザは、購入するドリンクのボタンを押す • (初期状態で)合計金額は0円である 3.システムは、対象のドリンクを排出する • 100円硬貨を投入すると、合計金額が100円である 4.ユーザは、払い出しボタンを押す • 100円硬貨を投入されている時に、 5.システムは、お釣りを払い出す  10円硬貨を投入すると、合計金額が110円である 13年1月14日月曜日
  • 33. 各ステップをテストリストにする 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年1月14日月曜日
  • 34. ユースケース駆動開発とTDD ユースケース TDD クラス/メソッド クラス/メソッド 受入テスト クラス/メソッド クラス/メソッド (機能テスト) TDD クラス/メソッド クラス/メソッド クラス/メソッド クラス/メソッド 受入テスト ユースケース (機能テスト) ユースケース 13年1月14日月曜日
  • 35. ユースケース駆動開発の利点 受入テストが設計時に明確 自動化できればベスト 適切な粒度の「何を構築すべきか?」 システムの完成度 本来はユースケース単位で意味がある 現実として進 管理が必要 13年1月14日月曜日
  • 36. まとめ ユースケースでシステム全体を設計する 顧客視点でシステム境界を明確にする ユースケースは受入テスト ユースケースから実装が導ける事が重要 ユースケースの1文は「構築すべきこと」 テスト駆動開発の起点 テストリスト 13年1月14日月曜日