やぼったい開発 > コラム > なぜ自動化するのか?



コラム

なぜ自動化するのか?


まず、単体テスト自動化のメリットとデメリットを整理します。


メリット

  1. テスト実行のコストを下げる
  2. コードによりテスト項目を記載するので、項目に曖昧さが無くなる。(テスト準備ミスなどが減少)
  3. テスト実行のコストが少ないので、不具合修正の時に、他のコードに影響していない事を確認することが容易。
  4. 自動化されているため、業務知識が無い他の部分を担当しているメンバーでも、実施やデグレード確認が可能になる。


1つめ
テスト実施コストは劇的に下がる。2人月ぐらいのコストが、1Hで終わることも少なくない。

テスト環境のセットアップ時間など細かいこともあるかもしれないが、トータル的には工数削減につながる。自動でテストされるので実施中は、他の作業を行っていても問題ない。



2つめ
日本語などと違い、テストコードとして記述するので、曖昧性が排除される。また、レビューを行わなくても、自分で、テスト項目の精査が深いところまで行われるため、レビューコストを下げることにつながる。

何となく作成して、何となくデバッガで実行されることが減ってくる。さらに、テスト後の結果やテスト環境も結果も保存しておきやすい。



3つめ
後工程で不具合を出して修正したとき、単体テスト部分で 他の部分に影響が出てないか(デグレード試験)の項目の洗い出しに神経質になる必要がない。

不具合部分の試験項目を直して、全部実行してもたいした手間にならない。(開発者側からすると結構これが楽でいいんですよね)



4つめ
いったん基本部分ができてしまうと、新人メンバーでも確認ができたり、開発者各個人が他に影響していないかも手軽に確認できる。



デメリット

  • テストコード作成に時間がかかる
  • 機能テストのコードまで書こうとするメンバーがいる

試験項目の仕様書の作成の3〜5倍かかり、特にそのプログラミング言語自体に不慣れである場合や、テストコード作成に不慣れである場合、7倍かかっているように見えることも少なくない。


ただ、テストコード作成完了と同時にテスト実施もほぼ完了するため、単体試験トータル的にはそれほど差はない



自動化に関する知識が多少必要となる。テスト対象の部分以外のコードは一時的にダミーを使用してもよく、そのテストコード作成には stubや mockの知識が必要となる。

またどの範囲をUTで保証するかわかっていないと、余計なコードを作成したり、必要なテストが漏れてしまったりすることがある。


例えば、UT部分を正確に全て簡単に行ったときに、その項目が機能的な試験を含んでしまうのはかまわないが、機能試験のようにコードを作成されると、UT部分に思わぬ漏れが発生する(JUnitではあくまで、プログラムのコードレベルの試験用で、機能試験までできない)。




最後に

確かに、最初の1回はなかなかメリットが得られないかもしれません。

1回目を踏み出さないと2回目以降の多大なメリットが得られないのも事実なので、ぜひとも、実行してほしいです。

いきなり全てを自動化するとリスクも大きいと思うので、段階的に採用したり、限定的にしたりして先を見積もられるようにしておくのもいいかと思います。

<PR>リンク

類似コンテンツ

ウォータフォールモデルではテストファーストは当たり前?

JUnitの役割はどこまで? 試験工程内で 単体テストのできることとできないこと

早わかり Junit 30分講座

単体試験と機能試験の違い





<< やぼったい開発 へ戻る



http://www2.ocn.ne.jp/~cheerful/JUnit/
since (05/03/2006)
http://www2.ocn.ne.jp/~cheerful/develop/