単体テストとは何か、なぜ必要なのか【前編】はじめての単体テスト(4/5 ページ)

» 2021年09月21日 06時00分 公開

3 単体テストの自動化

3.1 Googleのソフトウェア開発での例

 先進的なソフトウェア企業では、どのようなテスト自動化環境を構築しているのでしょうか。Googleは、ソフトウェア開発でどのようなところにコストがかかっているかを試算しています。そのデータの一部から計算方法を利用して、中規模の自動車開発プロジェクトに年単位で当てはめた場合の例をご紹介します。図5を見ると、チームが不具合の修正に費やしているスタッフの割合は40%に達しています(※4)。Googleの試算結果では、開発での30%から50%の時間が不具合修正に費やされていることになります。

図5:Googleのメトリック(クリックして拡大) 出典:ベクター・ジャパン

(※4)ベクター・ジャパン資料「バグの修正および防止コストの定量化」;ホワイトペーパー | V2.0 2019-04より抜粋

 Googleは、「コード内に不具合が出るのは当たり前」という考え方に基づき、テストをできるだけ自動化して、不具合を開発プロセスのできるだけ早い段階で発見することを目標にしています。そのため、実装後はできるだけ迅速に自動テストが可能な単体テストケースの構築を行っています。これは、それぞれのテストフェーズで不具合を発見した場合のコストが違うことを理解しているからです。テストプロセスを改善し、自動化すれば、全体的な保守コストが削減できます。Googleは、コード変更ごとにテストケースが実行されるようテストプロセスを構築しており、1日に1.2億のテストケースを自動実行しています。テストケースの作成を資産化し、効率よくテストを行うお手本のような企業だといえます。

 Googleだけでなく、Salesforce.comやAmazon.comなどの米国のソフトウェア企業は、自社でテスト自動化を行う環境構築に大きな投資を行っています。自動車業界でも、今後さらにソフトウェアの規模が大きくなっていくなかで、先行してテストを自動化するための仕組みへの投資を行うことが求められます。

 最初の一歩としては、静的解析ツールと単体テストツールの導入、そして、自動化を行うことができるCIツール、例えばJenkinsの導入などをお勧めします。また、テストを自動化するだけでなく、テストレポートのドキュメント化や、テストプロセスや結果の可視化ができるようになるとよいでしょう。

3.2 回帰テスト自動化環境の導入メリット

 新しい機能を追加することは、コードの増加を意味します。また、コードのメンテナンス費用も増加するでしょう。前述の通り、新しい機能を追加するたびにコードをテストする仕組みが必要となってきます。

 ここで、ソフトウェアテストにつきまとうコード変更や手戻りの問題について考えてみましょう。テストを進めていけば、不具合が見つかり、ソフトウェアを修正する必要が出てきます。また、仕様の変更が入ることにより、ソフトウェアが変更されることもあるでしょう。ソフトウェアに変更があるたびにテストを全て初めからやり直すことは理想的ですが、実際には、ある程度の変更が行われた段階でまとめて再テストが実施されます。

 この時に、どのコードの変更が不具合を起こしたのかが不明な場合は、修正前の状態に立ち返って修正を1つずつ検査する必要が生じてしまい、この手戻りが開発期間を長引かせる大きな要因となります。継続的インテグレーション(Continuous Integration;CI)手法では、変更を抱え込まず、変更のたびにテストすることにより、こうした手戻りを防止します。

 また、修正からビルド、テストへの流れを自動化することで、品質の維持やコスト削減などの効果が出ます。

図6:未確認変更を抱え込まず、変更のたびにテストを行って手戻りを防止(クリックして拡大) 出典:ベクター・ジャパン

Copyright © ITmedia, Inc. All Rights Reserved.