Skip to content

Readingagilesamuraiinsapporo20120508

irasally edited this page May 22, 2012 · 2 revisions

第20回読書会

第14章 テスト駆動開発

14.1 テストを先に書く

  • 「簡単だよ」と書いてあるけれど、テスト駆動開発は簡単じゃないよね -> 後半に「高度な技術が必要」と書かれているね
  • 「TDDは設計手法として実にうまい方法じゃないか」という理由を後段できちんと説明できていない気がする
    • 実際 "よい設計にTDDが有用" を説明するのは難しい(みんな答えを探している)
    • 呼び出し側から書き始めるので、インターフェース(利用する時の形)を意識しやすいから設計が綺麗になるよね
      • 良い設計ができるから良いテストコードがかけるわけであって、TDDによって良い設計になるわけではないのだよね・・・
    • 「とりあえずテスト可能な状態」のコードがかけるという面はあるね
    • 「TDDをやり続けていると設計力が上がる」は真実だと思うけど、「TDDは設計手法として良い方法」というのは懐疑的だなあ
      • 設計力を上げるためにも続けてやることは大事
      • 設計のためのトレーニングとしてはとても有用
  • TDDの2つの役割
    • 設計のためのハシゴ、開発を促進する
    • 品質のためのテストを積み上げる
  • そもそもTDDの前にテストコードを書くことの難しさがあるよね
    • テストコード自体のメンテナンスや設計が複雑化してしまうことも多々あり、そこが難しいなあと思う
  • この本に書かれていることは継続することが前提だよね、続けていかないと
  • TDDはプラクティスの中でもやけどしやすいような気がする
    • いきなりTDDをはじめて「できた気」になってしまうけど良いコードになっていないとか
    • ユニットテストが書けるようになってから導入したほうがよいのではないかな
      • 書きやすいテスト、書きにくいテストが何かを経験的につかめるようにならないとそもそもTDDができないと思うよ
  • TDD導入例
    • ユニットテストをそこまでやっていないメンバーでTDD -> テストしやすい、よいインターフェースのプロダクトを作ることができたのが良かった
    • 舵を取る人が入ればうまくいく
    • TDDをはじめて導入する場合
      • 最初の頃は本当にスピードが出ないところが難点
  • テストコードの品質が悩み
    • テストに慣れてくると誰もが通る道だね
  • テストコードをうまくかけないと本当に苦労するよね -> 技術が必要
  • UIのテスト
    • TDDをやる意味があるのだろうか
    • TDDはできるけど仕様がころころ変わるので使い捨てになってしまうテストが大量に出てしまう
    • ボタン名などを決めておいてそれを確認する受け入れテストに近い方法もあるよ(cucumber的な)
    • リグレッションテストのためにUIの自動テストを作成しておくと強力(特にAndroidなど機種パターンが沢山あるもの)

14.2 テストを使って複雑さに立ち向かう

  • テストコードもメンテナンスしてクリーンなコードを心がけようと脚注に書いてあるね

BDDとTDD

  • TDDとBDDの違いって何だろう
    • TDD: テストコードを書くタイミングと設計するタイミングが同じ(インターフェースを決めないとテストが書けない)
    • BDD: 最初に振る舞い(ストーリー)だけを考え、その後コードを書く => ソースコードを書くまでにワンクッションある
  • この辺りの解釈は色々ある
  • BDD
    • Feture: 計算機
    • spec: 足し算ができる
    • example: 3と4を足すと7になる -- ここに複数前提や結果を書くことができる -> ここから更に分割したり、exampleをTDDに落として実装したり
  • TDD
    • assertThat(calc.add(3,4), is(7))
  • RSpecはどちらかというとTDD寄りのテスティングフレームワークなのかなーという話 http://rspec.info/
    • BDDをやるためにRSpecが必要(存在している)という考え方もある
    • RSpecはテスティングフレームワークではなくて環境である、という言い方もある
    • RSpec is testing tool for the Ruby programming language. Born under the banner of Behaviour-Driven Development, it is designed to make Test-Driven Development a productive and enjoyable experience with features.(RSpecのサイトより)
    • Cucumberができた背景(RSpecはBDDを行うには不十分なところがある)
  • 今はこの辺りの定義は過渡期なんだよねぇ

マスターセンセイと熱心な弟子

  • テストに意思を書くというのはとてもわかる気がする
  • BDDの出発点はここにある --> 「自分は○○○がしたい」という思いを文章に近い形で出したい

次回は5/22 残り2回!!!!!

Clone this wiki locally