ソフトウェアの機能に対する要求が日々変わる中で、開発者がテストスキルを学ぶ必要性はこれまで以上に強いものとなっている。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
急速に変化するソフトウェア開発のライフサイクルに対応するため、多くの組織において、テストは欠かせない存在になった。ソフトウェア開発者にはテストを容易にするアプリケーションを構築するスキルだけでなく、パイプラインを通じてテスト結果を追跡するようなテストスイートを作成するスキルも求められる。
だが、効果的なテストスイートを作成するのは、適切なテスト戦略や、経験、トレーニングがない開発者にとっては容易ではない。正しいテスト習慣を身に付けることができなければ、見逃したバグを絶えず追いかけるリスクが伴う。
『効果的なソフトウェアテスト:開発者のためのガイド』の著者、マウリシオ・アニチェ氏(デルフト工科大学 ソフトウェア工学 助教授)は、ソフトウェア開発者に対して次のようにアドバイスしている。
開発者がアプリケーションのテストにどのように取り組むか研究していた際、アニチェ氏は、テストに関するトレーニングをほとんど受けていないプログラマーが、体系的なアプローチを避け、問題が発生した際やテストケースのアイデアを思いついたときに、テストケースを書いている傾向を発見したという。
アニチェ氏は、こうした場当たり的なアプローチは、開発者がテストケースを忘れるなど、後々問題を引き起こす可能性があると指摘する。
「テストに対して一貫した体系的なアプローチを採用することで、テストの効率が向上し、テストケースを書く際に重要な点を見落とすリスクが軽減できる。体系的なアプローチを採用することは『硬直化』につながりかねないという懸念もあるかもしれないが、体系的なテストアプローチは反復的であり、最も適した構造や形式を目指して適応させていくものだ。体系的なルールと創造性は一見相反するように思うかもしれないが必ずしもそうではない」(アニチェ氏)
アニチェ氏によると、開発チームは「単体テスト」と「結合テスト」のどちらにより時間をかけるべきなのか決めるのに苦労することが多い印象だという。
単体テストは簡単で、速く、安価であるため、アプリケーションの個々のコンポーネントに対する単体テストに多くの時間を割けばリファクタリングやバグ修正が不要になる可能性もある。一方で、より幅広くカバーする結合テストに時間を割けば、個々のコンポーネントに対して単体テストに費やす時間を節約できる可能性もある。
アニチェ氏は、単体テストや結合テストのどちらかに時間を割くべきか考えるのではなく、第3の選択としてテストを速めることを推奨している。特定のテストが何回行われたなどの統計に焦点を当てるのではなく、テストの速度や成功率に関する次のような目標を設定して追跡すべきだとする。
「テストを実行する開発者が最も優先すべきことは、テストが速くまたは遅く実行される要因に何があるのかを理解することだ。単体テストの呼び出し回数や使用するデータベースなどを把握することが、既存のテストケースを最適化し、より良いものを開発する方法を見つけることにつながる」(アニチェ氏)
Copyright © ITmedia, Inc. All Rights Reserved.