うさぎ組

kyon_mm with software

このエントリーをはてなブックマークに追加

TDDのよくわからない言葉をどうやって説明するか悩んでいるという話 #SWTestAdvent

はじめに

このエントリはソフトウェアテストAdventCalendar2014の11日目の記事です。

http://connpass.com/event/4544/

よくわからない言葉

今迄自分が使ってしまっていたという時期もあるので、自戒なのですがTDD界隈で言われている言葉を説明することが自分にはパっと出来ないのでどうやって簡潔に説明するかを悩んでいます。

  • 「実装をテストしている」
  • 「開発を加速する」

特に前者が難しいです。つまり「仕様をテストしている」と「実装をテストしている」はどうやって区別するのだろうか。というのがわかりにくいんですね。何をしていたら仕様のテストではなくなってしまうのか。って言えない限りはあんまりこの言葉使わないようにしようってがんばっています。なので、TDD界隈の人達はどういう意味でとか、どうやって説明しているのかなって気になります。

おそらくは、「こんなテストをしていると、こういったときに失敗してしまうよね」というので示せそうなのですが、個人的には公開されているAPI使ってテストしている場合ならそれは仕様のテストと言ってよいのではないだろうか。。。という気がしていて、じゃあ実装のテストとはなんだろうか。。。と思いますと、タイミングとか結果に左右されない処理順序のテストかなぁとか思うと、それは公開されていないものに対するテストで、そもそもテストできるのだろうか。。。という気もするわけです。(出来ないことはないのだろうけど。) xUTPを見たときにもFragileなテストというのはたくさん書いてあるわけですけれど、それが実装なのか仕様なのかという区別方法はちょっと見当たりませんでした。(勘違いして読んでいるだけの可能性が高い気はしています。)

後者もたまにわからなくなることがあって、自分の中では「自分が把握できない部分を補ってくれるテスト」がそうだと思っています。なのですが、TDD界隈の人達はもっと違う意味で言っており、聞くたびに「それは駆動している感がない」「駆動している」という感じで答える人が多くて「何がどの程度、どうなれば」駆動しているっていうのかまったくわかりませんでした。(多分相対的に評価しているはずなんだろうけど。)

ということで、これらをどうやったら僕は説明できるだろうか。っていうことで、いろいろTDDを試しているわけですが、なかなか難しいものです。できればTDDBC Nagoyaまでには説明できるようにしておきたいなーって思っています。

テスト駆動開発入門

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)