EY-Office ブログ

私流テスト駆動開発

開発者のみなさま、TDD(テスト駆動開発)してますか? テスト駆動開発は機能作成の最初にテストコードを書き、その後で機能を実現するコードをテストが通るように書く手法で、リファクタリング等の改善が繰り返せる良い繰開発手法です。

私はTDDで開発しているかと言われると Yes でもあり No でもあります。

テスト駆動開発 画像はWikipedia(English)より

なぜテストを書かないか

しかし、TDD以前にテストコードを書かない事も多いのではないでようか? テストを書かない理由としては

  • 時間がない
  • テストを書くのは難しい
  • モチベーションがわかない

などが考えられます。

「時間がない」は良く言われる理由です。しかし、私の経験ではある程度以上難しい、複雑なアプリの開発ではテストコードを書いた方が早く出来るように思います。テストコードが無いとプログラムの動作確認にアプリの手動操作の繰り返しで無駄に時間を使っていることも多いと思います。

次の「テストを書くのは難しい」は事実だと思います、とくにプログラミングの初心者は機能を作るのも精一杯で、その機能をテストするコードを作るのは一筋縄ではいきません。しかし、テストコードの書き方にはパターンがあり、初心者レベルを卒業した開発者なら自分が使っている言語・フレームワークで書かれた既存のテストコードを読むことで習得できるのではないかと思います。ただし詰まったり悩んでしまった時に助けてくれるメンターがいないと難しいかもしれません。

最後の「モチベーションがわかない」は色々なことが考えられますが、機能の開発は自分で考えたコードの動作を自分で確認できプログラミングの楽しさが感じられる作業です。しかしテストコードは凡庸なコードを並べる事になりがちですし、テストデータの準備など面倒な事も多くモチベーションが下がりがちです。

私流のTDD

さて私の開発スタイルですが、複雑なロジックやアルゴリズムを持つコードを書くときは素直にTDDで開発します。
それ以外の通常のコードを書くときは以下のようになります、

  1. アプリ(プロトタイプ)のコードを書く
  2. ユーザーの評価
  3. コードがほぼ固定されたらテストコードの追加

テストを書かずに機能等の開発を先に始めます。とくにプロトタイプを開発しユーザーのフィードバックをもらうような開発ではアプリのコードは次々と変わりますし、プロトタイプという事で完成度が低いコードを書くこともあります。上の 1. 2. を繰り返し、コードがほぼ決まってからテストコードを書きます。
テストコードは基本的にはリリース前に書くようにしていますが、色々な事情でリリース後になってしまうこともありますが絶対に書くようにしています。

テストコードを追加した後ではテストが自動的に行えるようになるのでリファクタリング等が行えるようになります。
また、アプリリリース後の機能追加、仕様変更の際にはテストコードがあるので TDD で開発する事が可能になります。既存のコードに手を加えるような変更でもテストコードがあるので、変更の影響も容易に判ります(完璧では無いかもしれませんが)。

このように、最初の段階ではテストを書かずに開発し、開発が一段落した後でテストを追加する開発スタイルを私を10年近く行っていますが、ユーザーへの素早リリースと機能追加等のメンテナンス開発時のデグレードの防止に役立っています。

また、テストコードを書き自動テストが出来てしまうと、完璧ではないかもしれないけれどテストが通っているということで自分の書いたコードに自信が持て、リリース直後の不安(プレッシャー)を軽減してくれるのもありがたいです。

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ