t-wadaさんとのテスト駆動開発勉強会

gema
gema
Jul 12, 2018 · 8 min read

はじめまして、技術開発部門のgemaです。数ヶ月に渡ってコツコツと『テスト駆動開発』本を輪読する会を社内で開いてきました。先日に最終回として翻訳者であるt-wadaさんを招いての質問会を開くことができました。ここでは、当日の話とこれからの取り組みについて書きたいと思います。

『テスト駆動開発』本はこちら

そもそもテスト駆動開発(TDD)とは何かという人はこちら

ちなみに、FiNCでt-wadaさんをお招きするのはSQLアンチパターン勉強会に続いて2回目です。

質問会では色々な質問をt-wadaさんにさせていただきましたが、ここでは特に学びの多かった2つの質問FiNCのこれからの取り組みについて紹介したいと思います。


TDDの開発者のためのテストは品質保証のテストと両立することはできるのか?

ただし、現実的にはテストに品質を保証する役割が求められることが多いと思います。そこで、TDDの開発者のためのテストと品質保証のテストが両立できるものなのか、ということが疑問として出てきました。

品質保証のテストとTDDの開発者のためのテストが混ざることでTDDの開発サイクルが遅くなったりしないのか?TDDのテストは開発者のコンディションに左右されるので、テストの粒度がバラついてしまうので品質のテストには使えないのではないか?

t-wadaさんに聞いてみました

TDDの段階では品質を保証することはあまり考えず、品質が求められる段階になってから、TDDの成果物としてのテストコードを軸に品質保証のテストに変えていけることがTDDのメリットでもあると仰られていました。

重要なのは、TDDの成果物としてのテストコードを早い段階でリファクタリングしていくことです。特に、品質保証の観点を持っている人とペアプロすることはおすすめだそうです。開発者のための粒度がバラついたり、網羅性のなかったりするテストコードに、第三者から品質保証の観点を入れることが重要です。

そうすることで、品質保証のためのテストに変えることができ、メンテナンスできる状態にできます。QAチームの人はコードを書けなくていいから一緒にやりましょう、というのはすごい大事だと仰られていました。開発者とペアプロを行ったり、テストケースの洗い出しを行ったりすることなどが例としてあげられていました。


Ruby on Railsにおいて、TDDは設計を悪化させるのか?

要点としてはTDDでは、大量のユニットテストが作られることにより、無駄な間接層が増え、設計を悪化させるという主張です。

TDDから導かれる悪い設計についてのDHHの詳しい主張に関してはこちらを読むのがいいでしょう。

このDHHのブログが発端となり、DHHとTDDの考案者のKent Beck、Martin Fowlerの三者で議論が行われています。

ここでKent BeckはTDDの問題ではなく、設計の決定の質が問題であると主張しています。

t-wadaさんに聞いてみました

そもそもTDDは良い設計を導くというのはどういう論理かというと、テスト可能な設計はよい設計であるというのがまずOOPにおける暗黙の了解としてあります。TDDはテストファーストであり、テストファーストはテスト可能な設計を導くので、TDDは良い設計を導くということになります。

ただし、Railsは疎結合を良しとしていないフレームワークです。例えば、Railsにはモデルとデータベースを密結合させたActive Recordという仕組みがあります。結合度を高め、機能的な凝集度を高くすることで生産性をあげることがRailsの良さです。TDDにより無駄な間接層をいれてしまうとRailsの良さを殺すことになってしまいます。

『テスト駆動開発』本の付録Cにも書かれていることですが、自分のスタイルを見つけることが重要です。ロンドン学派とデトロイト学派など、TDDも色々なスタイルがあります。これからやるべきことは、教条主義的にならずに、それぞれの良し悪しを考えて取り入れ、自分のスタイルを確立していくことだと考えました。

直筆サインを頂き、子供のように喜んでいる qsona の様子

これからの取り組み

そのためにも、まずソフトウェア・テストとは何かを理解し、開発とQAチームが「良いテストとか何か?」という問いに関して共通の認識を得ることが第一歩だと考えました。そこで、『テスト駆動開発』本を開発部門を中心に読んできましたが、次は『ソフトウェア・テストの技法』を開発部門とQAチームが一緒になって読む勉強会を行うことにしました。

はじまったばかりの取り組みですが、勉強会で得られた成果に関しては後日また記事にできたら、と思います。

株式会社FiNCでは、サーバーサイド・QAエンジニアを募集しています。ご興味がある方はぜひこちらからご応募下さい。

FiNC Tech Blog

FiNC…

gema

Written by

gema

FiNC Tech Blog

FiNC Technologiesは、「すべての人にパーソナルAIを」をミッションに掲げる予防×ヘルスケア×テクノロジーに特化したベンチャー企業です。

gema

Written by

gema

FiNC Tech Blog

FiNC Technologiesは、「すべての人にパーソナルAIを」をミッションに掲げる予防×ヘルスケア×テクノロジーに特化したベンチャー企業です。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store