システム開発におけるテストとは?基本情報技術者試験の重要用語解説!
更新日:2021年4月27日
システムはプログラミングを実施しただけでは完成しません。顧客に納品する前に要件定義で決定した内容通りにシステムが動作するか確認し、品質を担保する必要があります。
システムの動作確認を行うことを、テストと言います。この記事では、工程別に行うテストの内容について詳しく解説したいと思います。
テストとは
テストとは、システムのリリース前に行う動作確認のことです。テスト工程では、その進捗段階に応じて単体テスト、結合テスト、システムテストなどを実施します。
テストはシステム開発において必須の工程です。プログラムは人が作成している以上、必ずヒューマンエラーが発生し、バグが残ります。
テストでは、プログラム中に残ったバグを洗い出し、最終的にはシステムが業務で利用できることを確認します。
テストが必要な理由
プログラミングを完了した時点では、システムの品質は確認されていません。システムに内在するバグを洗い出し、プログラムを修正してバグを無くすことで、システムの品質を高める必要があります。
契約上、システムのバグは受注側に解決する責任があります。テスト工程で可能な限りバグを発見し、修正することが大切です。
また、バグに気づかないまま納品してしまった場合でも、受注者には契約不適合責任と呼ばれる法律上の責任があり、納品後に発見されたバグについても修正対応をしなければなりません。
システムのバグによりシステムの利用停止やエラーが発生すると、業務に多大な影響を与えます。場合によっては多大な金銭的損害や人的損害が発生することもあります。
このようなことを避けるためにも、テスト工程にてシステムの品質を確保することが重要です。
テストの流れ
テストは、次のような流れで行われます。
テスト計画の作成→テスト項目の作成→テストの実施→プログラム修正→結果報告
以下でそれぞれの概要について解説します。
テスト計画の作成
テストにおいてまず実施すべきなのは、テスト計画です。テスト計画では、テストを実施する期間やテストの開始条件・完了条件、テストの実施範囲などを定めます。
一般的には、テストの対象外となる機能がないように、開発したすべての機能を対象として網羅的にテスト範囲を定めます。また、複数のベンダーが同時に実施する必要があるテストにおいては、関係者間のスケジュール調整などが重要となるため、テスト計画段階でスケジュールを明確化します。
テスト項目の作成
次に、テスト計画に基づき、実際にテストを行う項目リストを作成します。この項目リストのことを、テスト項目またはテストケースといいます。
テストにおいては、網羅性が大切です。すべての処理パターンが網羅されるようにテスト項目を作成します。
網羅的にテストを行うための手法として、ホワイトボックステストとブラックボックステストがよく利用されます。ホワイトボックステストでは、プログラムの構造に基づき、すべての処理ロジックを通るようにテストを行います。
一方でブラックボックステストでは、入力データと出力データの網羅性に注目してテストを行います。
テストの実施
次に、テスト環境を用意し、テスト項目に沿ってテストを実施してきます。
テストを実施したら、エビデンスを取得します。エビデンスとは、テストによって正しくシステムが動作した(または動作しなかった)ことを証明するためのドキュメントです。
テスト結果画面などをスクリーンショットで撮影し、テスト結果と共に記すことで、想定通りにプログラムが動作したかを記録します。
プログラム修正
テストでバグが見つかった場合は、プログラムを修正してバグを解消します。プログラムを調査してバグが発生している原因を確認し、問題があるプログラムを修正します。
プログラム修正後、再度テストを実施し、バグが解消されていることを確認します。
テスト結果報告
すべてのテストが完了し、発見されたバグの修正を終えたら、テスト結果を報告します。テスト結果は信頼度成長曲線などを用いて分析します。
信頼度成長曲線とは、横軸に時間を、縦軸に発見されたバグ件数を表示したグラフで、テストの進捗に応じてどの程度バグが発見されていったかを示すものです。
一般的に、テストを始めると最初は多くのバグが発見されます。そして、テスト終了に伴ってバグが減少していく傾向がみられます。もし、テスト終盤でもバグ件数が収束していないようであれば、まだプログラムの中にバグが残っている可能性があります。
そうであれば、継続してテストを実施することも検討します。
テストの種類
テストはその進捗段階に応じていくつかの種類が存在します。一般的に、プログラムレベルの単体テストから、機能レベルの結合テスト、そして業務レベルのシステムテストへという流れでテストを進めていきます。
また、リリース前には性能テストや運用テスト、移行テストなども実施します。以下では、各段階ごとのテスト内容について解説します。
単体テスト
単体テストは、開発工程の次に行うテストです。最初に実施するテストで、プログラムモジュール単位でテストを行います。
単体テストを実施することで、主にプログラムレベルでのコーディングミスを発見することができます。単体テストでは、各モジュールが正しく動作しているかを確認します。
上述したホワイトボックステストやブラックボックステストを行い、網羅的にテストを実施します。
結合テスト
結合テストは、単体テストの完了後に実施するテストのことです。結合テストでは、一定の機能単位で実施するテストを実施します。
結合テストを実施することで、主にシステムの機能レベルでの設計ミスやモジュール連携処理におけるミスなどを発見することができます。
結合テストでは、複数のモジュールが連携してうまく動作することを確認します。例えば、画面から入力されたデータを計算処理し、正しくデータベースに格納されるまでといった一連の流れでバグがないかをチェックします。
システムテスト
システムテストは、結合テスト完了後に実施するテストのことです。システムテストはリリース前の最終盤で実施するテストで、業務単位でシステムが正しく動作するかを確認するテストです。
システムテストを実施することで、主に要件とシステム設計の不一致などを発見することができます。
システムは、最終的に業務で利用することを目的に開発しています。業務とシステムが一致していなければ、せっかく作ったシステムも活用できません。
システムテストでは、システムが要件通りに開発されていることを確認し、業務で利用できるかを検証します。
運用テスト
運用テストは、システムが本番稼働した後に正しく運用できるかを確認するためのテストです。一般的には、発注者側が実施するテストです。自らシステムを利用し、業務に適用できるかを確認することが目的となります。
必要に応じて、運用マニュアルとの整合性なども確認し、実際の業務運用に支障がないかをチェックします。
運用テストは、受入テストや承認テストという呼ばれ方をすることもあります。どのテストも、システムが要件通りに完成していることを発注者が確認するために実施するものです。
性能テスト
性能テストは、システムが要件定義で定められたとおりのスペックで動作するかを確認するテストです。
要件定義では想定ユーザ数や想定アクセス数などを定義しますが、システムに実験的に高い負荷をかけることで、システムがこれらの要件を満たすだけの能力があるかを確認します。
特に、限界まで負荷をかけたテストをストレステストといいます。
一般的にシステムは要件定義で定めたスペック以上に余裕を持った設計とすることが多いですが、ストレステストはその余裕範囲を確認するために実施するものです。
移行テスト
移行テストは、新システムの切り替え手順を確認するために移行リハーサルを行うものです。特に現行システムが存在する場合は、データ移行において問題が発生しがちです。事前にデータ移行のリハーサルを行い、問題なくデータが移行できるかを確認してから本番稼働を迎えます。
また、システムの切り替え時において問題が発生した場合のリカバリ手順についても確認します。システムのリリースが困難になるような問題が発生した場合は、システムを切り戻して現行システムを継続利用するようなオプションも検討しておきます。
まとめ
この記事では、基本情報技術者試験を受けようとされている方に向けて、テストについての解説を行いました。テストは、システム開発の工程の中では地味な内容ではありますが、システムの品質を担保するために重要な工程です。
基本情報技術者試験においても、テストに関する内容は出題頻度が高いため、各工程ごとのテスト内容の違いやテスト手法などについては押さえておくとよいでしょう。