短期開発を乗り切るには,定型作業を多く含む“単体テスト”の自動化が有効だ。ここにきて,Javaプログラムにおける単体テストの自動化を可能にするツールが充実してきた。ただし,ツールによってカバーできるテスト項目などに違いがあるため,必要な機能を見極めて活用したい。
企業システム構築においてJavaの採用が進む一方で,開発期間が短期化し,プログラムの品質向上がこれまで以上に大きな課題になってきた。限られた時間の中で品質を高めるには,単体テスト*1の効率化が求められる。
ここにきて,Java向けの単体テスト・ツールの機能が充実し,利用を検討すべきレベルになってきた。単体テスト・ツールは,コーディング規約への準拠チェックやバグの指摘,テスト・データの自動作成といった機能を備える。ツールの利用で単体テスト作業を省力化できれば,浮いた時間を設計やコーディング作業に振り分け,業務ロジックの充実に専念できる。また,単体テストでしっかりバグをつぶすことで,後工程での手戻りが防げるというメリットも生まれる。
ただし,静的テストや動的テストなど,単体テストの中でカバーできる項目はツールによって異なる。また,事前に社内のコーディング規約をきっちり決めておく必要があるなど,ツール利用上の注意点も少なくない。単体テスト・ツールの機能を明らかにした上で,どう使えば高い導入効果が得られるかを探った。
4つの機能で単体テストを支援
単体テスト・ツールが提供する機能は主に4つある(図1[拡大表示])。
基本機能は,(1)ソース・コードの記述を自動解析して,コーディング規約との照合やJavaクラスの依存関係の分析などを行う「静的テスト」,(2)テスト・データや実行環境を準備して実際にプログラムを動かして結果を確認する「動的テスト*2」の2つである。
さらに,(3)修正後のソース・コードに誤ってバグを埋め込んでいないかを確認する「回帰テスト」,(4)性能上のボトルネックなどを調査する「パフォーマンス・テスト」がある。
どの機能を備えるかは,製品によって異なる(図2[拡大表示])。まずは,自社のテスト方針を明確にし,必要な機能を見極めることが重要だ。例えばパフォーマンス・テストは,後工程のシステム・テストで実施する場合も多いが,「スレッドのデッドロックやメモリー・リークのバグなどは,単体テスト時に探した方が発見は早い」(グレープシティ マーケティングチーム 主任 熱海英樹氏)という判断もある。