TDDを自分の道具にしよう


   id:yujiorama
    @yujiorama



   わんくま同盟 名古屋勉強会 #20
自己紹介
• 千葉から来ました(たぶん初めて?)
• n次請けシステム開発屋
• 技術リードみたいなことをしたり、PLみたいな
  ことをしてます
• Cが好きです。C++はもっと好きです。
• (一番好きなのはRubyです)




        わんくま同盟 名古屋勉強会 #20
私たちの開発の進め方を変
   えてみませんか?


    わんくま同盟 名古屋勉強会 #20
アジェンダ
• 仕様化テストを書きましょう
• 設計しましょう
• リファクタリングをしましょう
• テストもリファクタリングしましょう
• テストが何を保証しているのか思い出しましょ
  う
• 最終的に残るものを確認しましょう



        わんくま同盟 名古屋勉強会 #20
仕様化テストを書きましょう



    わんくま同盟 名古屋勉強会 #20
仕様が提示されるところから私たちの仕事が始
       まることが多いと思います。
 (TDDBC や今回のワークショップではお題)

私たちが最初にすることは、仕様を動作可能な
  プログラム言語で表現することです。


        わんくま同盟 名古屋勉強会 #20
仕様化テストを書きましょう
• 仕様をテストケースにする
• テスト設計の観点でテストケースを追加する




        わんくま同盟 名古屋勉強会 #20
仕様をテストケースにする


仕様は、お客様が理解できなければいけないの
  で自然言語や図を使って表現されます

私たちプログラマーは、この仕様をプログラミ
     ング言語で表現します。

      何故でしょうか?

       わんくま同盟 名古屋勉強会 #20
仕様をテストケースにする




実行して、その振る舞いを検証することが
       できるからです。




       わんくま同盟 名古屋勉強会 #20
仕様をテストケースにする

仕様を、プログラミング言語で忠実に表現するこ
       とに注力しましょう。

あまりにも汚かったり冗長になってしまう場合は
 、組み込み DSL などの技法を適用しましょう。

大事なのは、後から読んでも理解しやすいテ
    ストケースを作成することです。

        わんくま同盟 名古屋勉強会 #20
テスト設計の観点

  テストの設計という観点があります。

仕様から必要なテストを導き出すための大切な
         観点です。
同値分割、境界値分析、ドメイン分析などがよく
      使われると思います。
テスト設計の観点から導かれるテストケー
       スを書きましょう。

       わんくま同盟 名古屋勉強会 #20
ところで




わんくま同盟 名古屋勉強会 #20
仕様に対する理解は十分でしょうか?
   (まだ何のコードも書いていません!)

仕様に対する理解が曖昧な場合、分かっている
 範囲で先に進んでまた戻ってくればよいと思
         います。

私は、それができるのが TDD の利点だと考え
         ています

       わんくま同盟 名古屋勉強会 #20
設計しましょう


 わんくま同盟 名古屋勉強会 #20
仕様をプログラミング言語によってテストケース
    という形にすることができました。

  コンパイルすら通らないかもしれません。

それも含めて、次にやらなければならないこと
      を洗い出しましょう。


       わんくま同盟 名古屋勉強会 #20
設計しましょう
• タスクリストを書き出す
• タスクリストをテストにする
• 不安をテストにする




          わんくま同盟 名古屋勉強会 #20
タスクリストを書き出す

今、私たちが相手をしているのは、1 つの仕様
    (という名のテストケース) です。

このテストケースが成功するために必要な事柄
    を思い付く限り洗い出しましょう。
       「○○クラスを作る」
      「△△メソッドを作る」
      「☆☆関数を作る」…

       わんくま同盟 名古屋勉強会 #20
タスクリストを書き出す
大事なのは、1 つのタスクが完了することで、
 1 つのモノ・コトが出来あがっていることです
                。
問題を分割するという行為を自然に行えるよう
          になりましょう。
             詳細は
      「テストリストの見つけ方」
        (@shuji_w6e さん)
       を参考にしてください。
       わんくま同盟 名古屋勉強会 #20
タスクリストをテストケースにする

タスクの中には「●●というメソッドを作る」とい
     うものがあるかもしれません。

 オブジェクト指向設計において、メソッドは 1
       つの設計要素です。

入力と出力が明らかになっているなら、それ
を確認するためのテストケースを書きましょう。

        わんくま同盟 名古屋勉強会 #20
不安をテストにする
タスクの中には「■パターンで○クラスを作る」
    というものがあるかもしれません。

自分がよく使っているデザインパターンであれ
ば、抑えるべきポイントは明らかかもしれませ
          ん。

  しかし、あまり使わないデザインパターン
 (Flighweight パターンとか) ではどうでしょう
                 か?
          わんくま同盟 名古屋勉強会 #20
不安をテストにする


私なら、ちゃんと書けているか自信がありません
          (=不安)。

  考えたとおりの振る舞いになっているか
 どうかを確認するためのテストケースを書くこ
         とでしょう。


       わんくま同盟 名古屋勉強会 #20
リファクタリングしましょう


    わんくま同盟 名古屋勉強会 #20
設計 (実装) ができてきました。

仕様化テストを通すための必要最低限の実
        装です。

ハードコーディングされた定数、if 文、while
文、などなど気になるところもあるでしょう。


       わんくま同盟 名古屋勉強会 #20
これらをきれいにして、保守しやすいコードにす
    る営みがリファクタリングです。

リファタリングの最重要事項は、最終的に仕様
化テストが成功することを維持しつつ、リファク
タリングを行う前よりもコードをきれいにするこ
         とです。


       わんくま同盟 名古屋勉強会 #20
リファクタリングしましょう
• 順を追って進める
• 新たなインターフェース境界ができたら




        わんくま同盟 名古屋勉強会 #20
順を追って進める
ここに至るまでのリズムはアレグロな感じだと思
     うので、リズムを変えましょう。

リファクタリングは、一歩一歩、順番を守って進め
        ることが大事です。

その都度、テストを実行して、期待した通りの結
 果になることを確認しながら進めていきましょ
           う。
        わんくま同盟 名古屋勉強会 #20
新たなインターフェース境界ができたら
リファクタリングをすると、新しいインターフェース
    やクラスが登場することがあります。

もし、インターフェースの境界が増えたのならば、
  そこに関するテストケースも追加しましょう。




        わんくま同盟 名古屋勉強会 #20
新たなインターフェース境界ができたら
インターフェースの境界は、拡張ポイントとして
 必要になるから発生したのだと考えられます。

拡張ポイントについて後からコードを追加してい
 く人にとって、そのテストケースはよいサンプル
       コードとなるでしょう。




        わんくま同盟 名古屋勉強会 #20
テストもリファクタリングし
     ましょう

    わんくま同盟 名古屋勉強会 #20
仕様について設計(実装)が終わりました。

目の前には、設計段階で洗い出したタスクリスト
  や、不安に対するテストが並んでいます。

これらを放置しておくと、あっという間にゴミのよ
      うになってしまいます。

        わんくま同盟 名古屋勉強会 #20
テストもリファクタリングしましょう
• 重複したテスト
• 同じフィクスチャーを使っているテスト




        わんくま同盟 名古屋勉強会 #20
重複したテスト
仕様化テストで動作の検証が済んでいるコード
 については、設計時に作成したテストケースは
  、ざっくりと削除してもよいかもしれません。

設計レベルでの変更があるかもしれない、という
 意味で、インターフェース境界のテストは残し
     ておいたほうがよいでしょう。



          わんくま同盟 名古屋勉強会 #20
同じフィクスチャーを使っているテスト
  同じフィクスチャーを使っているテスト
 は、Shared Fixture パターンにリファクタリン
         グするとよいでしょう。

              詳細は
       「xUnit Test Patterns」
         (xUTP読書会Wiki)
        を参照してください。

           わんくま同盟 名古屋勉強会 #20
テストが何を保証してい
 るか確認しましょう

   わんくま同盟 名古屋勉強会 #20
「コードカバレッジは 100% です」これが何を意
    味するのか私には分かりません。

テストで全てのパスを通過していれば、問題は
      無いのでしょうか?

 TDD で書いたテストは、「仕様についての理
 解度」、「設計に対する自信」を保証している
           のです。

        わんくま同盟 名古屋勉強会 #20
テストが何を保証しているか確認しましょう
• テストカバレッジ




         わんくま同盟 名古屋勉強会 #20
テストカバレッジ
大事なのは、システム (コンポーネント) の振る
 舞いの定義域のうち、どれだけの領域がテス
 トされているかを表す指標値です。

私はこれがテストカバレッジの定義だと思ってい
 るのですが、具体的な定義については知らな
 いので、勉強しないといけないなと考えていま
 す。


        わんくま同盟 名古屋勉強会 #20
最終的に残るものを確認
    しましょう

   わんくま同盟 名古屋勉強会 #20
最終的に残るものを確認しましょう
回帰テストのために残すべきテストにはどういっ
      たものがあるでしょうか。

テストケースのリファクタリングによって数は減
    らされたとはいえ、これだけは
残しておきたいというものを挙げるとすると、次
      の 3 種類が残ります。




       わんくま同盟 名古屋勉強会 #20
最終的に残るものを確認しましょう
1. 仕様化テスト
2. インターフェース境界のテスト
3. テスト設計の観点で追加されたテスト

特に 3 のテストについては、品質保証 (Quality
  Assuarance) にも関連すると思うのですが、
  私はまだそこまでカバーできる知識が足りな
  いので、識者の方に教えていただきたい分
  野です。
         わんくま同盟 名古屋勉強会 #20
以上です。
ご清聴ありがとうございました。




        わんくま同盟 名古屋勉強会 #20
宣伝
• 第6回 Growing Object-Oriented Software,
  Guided by Tests読書会( #goos_jp )
  – http://atnd.org/events/23826
  – #goos_jp
• ぺけま 0004 号
  – http://devtesting.jp/pekema/
  – #xutp
• インフラ&アプリエンジニア合同合宿
  – https://sites.google.com/site/infrapp2012/
  – #infrapp2012


                  わんくま同盟 名古屋勉強会 #20

More Related Content

PDF
Tddのすゝめ
PDF
Test Driven Development in LabVIEW
PDF
Test Yourself - テストを書くと何がどう変わるか
PDF
組織にテストを書く文化を根付かせる戦略と戦術
PDF
nseg第5回勉強会
PDF
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
PPT
レガシーコード改善ガイド読書会 第10章
PPTX
ネットワーク第3回目
Tddのすゝめ
Test Driven Development in LabVIEW
Test Yourself - テストを書くと何がどう変わるか
組織にテストを書く文化を根付かせる戦略と戦術
nseg第5回勉強会
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
レガシーコード改善ガイド読書会 第10章
ネットワーク第3回目

Viewers also liked (20)

PDF
見えないモノを見ようとしてSNMP MIBを覗き込んだ
PPTX
Pc基礎講座マニュアル(前期)
PDF
『これからはじめるプログラミング基礎の基礎』 のエッセンス
KEY
PDF
20130928 JAWS Festa Kansai 2013 SonicGarden流devops
PDF
はじめてのハッカソンVol.7(2015 1-17)
PDF
ネットワーク講習
PDF
【Interop Tokyo 2015】 DC 2: Cisco ACI とファイアウォール&ロード バランサ連携
PDF
wakamonog6 ルーティングチュートリアル 〜サービスの成長とネットワークの変遷〜
PPTX
クラウドがシステム運用を変革させる
PDF
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
PDF
第1回プログラミング大学in福岡
PPTX
OSの歴史
PDF
講座Linux入門・サーバOSとしてのLinux
PDF
Mk network programmability-03
PDF
Unix 基礎
PDF
そろそろSSH/Telnetを離れて自動化したい
PPTX
リーダになったら大切にしたい4つの要素
PDF
OpenContrailのソースコードを探検しよう!
PPTX
BIG-IP APM PCoIPプロキシ
見えないモノを見ようとしてSNMP MIBを覗き込んだ
Pc基礎講座マニュアル(前期)
『これからはじめるプログラミング基礎の基礎』 のエッセンス
20130928 JAWS Festa Kansai 2013 SonicGarden流devops
はじめてのハッカソンVol.7(2015 1-17)
ネットワーク講習
【Interop Tokyo 2015】 DC 2: Cisco ACI とファイアウォール&ロード バランサ連携
wakamonog6 ルーティングチュートリアル 〜サービスの成長とネットワークの変遷〜
クラウドがシステム運用を変革させる
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
第1回プログラミング大学in福岡
OSの歴史
講座Linux入門・サーバOSとしてのLinux
Mk network programmability-03
Unix 基礎
そろそろSSH/Telnetを離れて自動化したい
リーダになったら大切にしたい4つの要素
OpenContrailのソースコードを探検しよう!
BIG-IP APM PCoIPプロキシ
Ad

Similar to TDD を自分の道具にしよう (20)

PPTX
わんくま名古屋 #32 (20140823) TDD道場 #20
PDF
C# から java へのプログラム移植で体験したtddの効果は?
PPTX
CLRH_120414_WFTDD
PDF
Code complete ch22_developper_test
PDF
テストコードの定型化
PPTX
わんくま名古屋 #37 (20151114) TDD道場 #25
PDF
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
PDF
わんくま名古屋#31(20140524) TDD道場 #19
PDF
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
KEY
テスト初心者Androiderのためのソフトウェアテスト入門
PDF
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
PDF
Modeling Workshop
PPT
タダで始めるテストファースト入門 ~ C# Express + NUnit
KEY
テストコードのリファクタリング
PPT
レガシーコード読書会 20120618
PPTX
仕様七変化
PDF
テストを分類してみよう!
PDF
アジャイルなテストの見積もりと計画作り
PDF
わんくま名古屋#33(20141115) TDD道場#21
PDF
大規模ソフトウェア開発とテストの経験について
わんくま名古屋 #32 (20140823) TDD道場 #20
C# から java へのプログラム移植で体験したtddの効果は?
CLRH_120414_WFTDD
Code complete ch22_developper_test
テストコードの定型化
わんくま名古屋 #37 (20151114) TDD道場 #25
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
わんくま名古屋#31(20140524) TDD道場 #19
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
テスト初心者Androiderのためのソフトウェアテスト入門
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
Modeling Workshop
タダで始めるテストファースト入門 ~ C# Express + NUnit
テストコードのリファクタリング
レガシーコード読書会 20120618
仕様七変化
テストを分類してみよう!
アジャイルなテストの見積もりと計画作り
わんくま名古屋#33(20141115) TDD道場#21
大規模ソフトウェア開発とテストの経験について
Ad

TDD を自分の道具にしよう