ざくっとユニットテスト

このエントリーをはてなブックマークに追加
開発担当のsugimotoです。
今回は弊社サービスであるShanon Marketing Platformの開発で行っているユニットテストについて書いてみたいと思います。

  • いつから?

  • 恐らく2008年の夏くらいです。
    コードレビューを始めた時期と同じくらいだと思います。
    その頃はバグが多発していて何とかしないといけないなーと思って始めました。

  • どんな感じ?

  • Test::Classを使用してXUnitライクに書いています。
    テストはクラス単位で行っています。
    テスト対象クラス一つに対しテストクラスが一つ、テストクラスを実行するテストスクリプトが一つ存在します。
    テストスクリプトをクラス毎に用意しているのは、

    • クラス単位でテストが実行できるようにしたい

    • テスト間の影響をできるだけ無くしたい


    という狙いがあります。
    トリッキーなことをすることでやっとテストができるという場合もありますので、どちらかというと後者の狙いの方が大きいです。



    開発時にはテストスクリプト単体を繰り返し実行していきます。
    開発がある程度終わりに近づき他のクラスへのデグレが無いことを確認したり、デイリーでテストする際にはまとめてテストを実行する必要あります。
    その場合にはModule::Buildを使用して全てのテストスクリプトをまとめて実行するようにしています。

  • 使用しているモジュール

  • ごくごく一般的なものばかりです。

    • Test::Class

    • XUnitライクにテストを行うためのテストクラスのベースとして使用

    • Test::More、Test::Exception等

    • 各チェックメソッド内でのアサーション。
      この辺は
      http://www.amazon.co.jp/Perl-Testing-Developers-Notebook/dp/0596100922/ref=sr_1_1?ie=UTF8&qid=1311040508&sr=8-1
      が参考になります。

    • Module::Build

    • テストをまとめて実行するために利用

    • Devel::Cover

    • コードカバレッジの取得


  • メリット・デメリット

  • 実際にやってみた一番大きなメリットだと思ったのは、クラスのインタフェースがシンプルになる点です。
    インタフェースがシンプルじゃないととてもじゃないけどテストが大変なので。
    デメリットはやっぱり工数がかかることです。
    ただこれは後からテストを作る場合であって、テスト駆動で開発を行えばそんなに増えないかなーって印象です。


    ユニットテストを始めて3年くらい経ちましたが、現在のコードカバレッジ(命令網羅)は33%ほどです。
    もともとアプリケーション自体がフレームワークべったりに書かれていたためにテストコードが書きづらく、当初は新たに追加したクラスをメインにテストコードを書いてました。
    現在はソースコードを徐々にフレームワークから切り離して行く過程で、既存のコードにもテストコードを書くようになっています。
    6%/半年くらいのペースでカバレッジは上げていきたいのですが、なかなか難しいところです。

    今回はざっくりしすぎた内容でしたね。。。
    もうちょっと突っ込んだ話やTipsは次回のネタにでも取っておきます。
    次の記事
    « Prev Post
    前の記事
    Next Post »
    Related Posts Plugin for WordPress, Blogger...