「システムテストとは…?」
「聞いたことあるけど、詳細は知らない…」
「システムテストは外注化できないのか…?」
などシステムテストについてお悩みの方も多いでしょう。この記事では「システムテスト」について解説します。
システムテストは、ユーザーに渡る前の最後のチェックとなり重要な役割を果たします。
システムテストを疎かにし、バグが大量に発生した場合、発注者側の信頼を失う可能性があります。またリリースした後、システムを実際に利用しているユーザーの離脱につながるなど、大きなビジネス的機会損失につながりかねません。
システムテストとは
システムテストとは、システム開発の一環として行われるテストで、開発側が行う最後のテストになります。別名総合テストと言われています。
開発者側のテストの流れとしては、「単体テスト」「結合テスト」「システムテスト(総合テスト)」と分かれています。細かい機能のテストからよりユーザーの操作に近いテストへと進みます。
システムテストでは、発注者側と話し合って完成した要件定義書や設計書通りにシステムが稼働するのか、実際のユーザー環境に近い環境で動かしてテストを行います。
本番に近い環境でテストを行うことで、開発環境では発見できなかったバグを見つけることができたり、より実践的なテストを行うことができたりします。ユーザー目線でテストを行うため、使いにくさだったり、矛盾点なども洗い出すことができたりします。
システムテストの目的
システムテストを実施する主な目的は、発注者側の要求通りにシステムが開発されているかを検証するためです。
具体的には、要件定義書や設計書通りにシステムが動作するのかを確認します。もし、このタイミングでバグや不具合が見つかれば、その場で修正します。修正が完了すれば、再度システムテストを実施し確認するのです。
要件定義書や設計書通りに動作することができたときに、顧客へと納品します。システムテストで問題がなければ、ユーザーの受け入れテストに進み、ユーザーが問題ないと判断すればようやく検品となる流れとなります。
システムテストを行うタイミング
システムテストはテスト工程の終盤に位置します。開発の流れの中にあるテストは以下の流れで行います。
単体テスト→結合テスト→システムテスト(総合テスト)→受け入れテスト
初めの単体テストは、機能的な細かいテストであるのに対し、結合テストとはプログラムを複数組み合わせた場合のテストです。また、システムテスト、受け入れテストはより総合的なテストとなっていきます。
複数のプログラムを組み合わせた機能をさらに組み合わせて、システム全体として行うのが、システムテストなのです。
リリースまでのテストの流れ
実際にユーザーにリリースするまでにどのような流れでテストが進んでいくのでしょうか。
ここからは、システムをリリースするまでに必要なテストをそれぞれ詳しく説明します。
単体テスト
単体テストとは、別名「コンポーネントテスト」と呼ばれており、テスト工程の最初に行われるテストとなります。単体テストの目的は、モジュール単体で正しく動作するか、想定通りのエラーが発生するかどうかを確認することです。
結合テスト
結合テストはモジュールを組み合わせて動かしたときに、正しく動作するのかをテストします。モジュール間でやりとりするデータの整合性すなわち、モジュール間インターフェースの整合性について詳細にチェックします。
システムテスト
システムテストでは、発注者側と話し合って完成した要件定義書や設計書通りにシステムが稼働するのかを実際のユーザー環境に近い環境でシステムを動作してテストを行います。
ユーザー確認前最後のテストとなるため、バグは全て洗い出しておく必要があります。
受け入れテスト
受け入れテストとは、開発されたソフトウェアなどのシステムが、発注者の要求通りに動作するか確認するためのテストを指します。
基本的に発注者側が実際にテストを行い、疑問点や不具合があればシステムを開発した受注者側に問い合わせる流れです。
※関連記事
受け入れテストとは?言葉の定義や目的、実施方法を徹底解説
システムテストの流れ
システムテストの概要を説明してきましたが、実際にどのような流れで実施されていくのでしょうか。ここからは実際にシステムテストを行う流れについて説明します。
テスト計画書の作成
テスト計画書には以下の点を記載します。
-
- システムテストの目的
- 対象範囲
- スケジュール作成
上記の項目を明確にし、テスト全体の方向性を定めます。
仕様書の作成
テスト仕様書には以下の点を記載します。
-
- 正常系、異常系のテスト項目
- テストの実施者、確認者の記載
- テスト実施日
正常系のテストとは、システムに値が渡された場合エラーが返されずに、想定通りの動作が行われることをチェックするテストです。
反対に異常系のテストとは、システムに値が渡された場合エラーが返され、想定通りの動作が行われることをチェックするテストです。
要件定義や設計書と照らし合わせて、対象機能のテストが全て行われるか確認をとり、テスト仕様書が完成します。
環境の構築
システムテストは、実際にユーザーがシステムを稼働させる環境と同じ環境で実施する必要があります。主に以下の準備を行います。
-
- 本番環境と同じOS環境
- 本番環境から取得したテストデータ
- 本番環境と同じツール
システムテストを行う環境を本番環境と近づけることで、より精度の高いテストとなるのです。
システムテストの実施
テスト仕様書をもとにシステムテストを実施していきます。
バグが発生すれば機能を開発したチームに問い合わせ、修正し再度テストを実施する流れとなります。テスト項目が全て実施され、想定通りに動作していればテスト終了です。
テスト結果のフィードバック
システムテストの実施が完了したら、テスト結果について有識者にフィードバックをもらいましょう。不十分なテストがあれば再度テストを行う必要があります。ここでOKがもらえればシステムテストは完了となります。
システムテストの種類
システムテストとひとくちに言ってもさまざまな種類のテストが存在します。ここからはシステムテストの種類を紹介していきます。
運用テスト
運用テストとは、開発者側が行う最終テストであり、発注者側が入る前にバグをチェックするテストになります。実際にシステムを動かしながら本番に近い形でテストを行うため、システムを運用するテスト、運用テストと呼ばれています。
運用テストは、ユーザー側の視点に立って行う必要があります。例えば、以下のようにシステムを動かしても、想定外の動作をしないかどうかを確認、検証します。
-
- 業務システムを閉じることなく電源ボタンを押す
- 禁則文字をあえて入力する
あえて不具合が発生しそうな動作を行い、システムに異常がないかどうかを確認します。
機能テスト
機能テストとは、文字通り発注者が要求した仕様通りに機能が実装されているかを確認するテストです。要件定義書や設計書に記載されている機能であるかどうか、テストを行います。リリースした後に問題が発生しなくて済むよう、発注者側と機能テストの内容について認識を合わせておく必要があります。
性能テスト
性能テストとは、要件定義書に記載されたシステムの性能を満たしているかどうかを確認するテストです。ユーザーが快適にシステムを使うことができ、予期せぬトラブルが発生しないかを確認します。
例えば、該当のボタンを押下した際に、エラーが起きたり、想定外の画面に遷移したりしないかなどをテストします。性能テストを疎かにしてしまうと、実際にシステムを使っているユーザーの不信感などを煽ることになり、信頼の失墜につながりかねません。
ユーザビリティテスト
ユーザビリティテストでは、開発されたシステムがユーザーにとって使いやすいかどうかを確認するテストになります。
例えば、値を入力する際、エラーを未然に防ぐために禁則文字が設定され、想定通りにエラーが出力されるかどうか、禁則文字を入力できないようになっているかどうか、大量のデータを更新する際に処理を実行しても問題ないか確認するポップアップが出現するかどうかなどを確認します。
ユーザビリティテストの精度を高めることによってユーザーの信頼につながります。
レグレッションテスト
レグレッションテストは、追加・修正した機能が、他の機能やシステムに悪影響を及ぼしていないか確認するテストです。
システムの機能の追加や修正により、今まで正常に動作していた機能が想定通りに動作しなくなることは多々あります。それらがないかどうかを確認するテストがレグレッションテストなのです。
システムが複雑で大規模になってくるほど、一箇所のシステム改修の影響範囲が広くなり、多大なテストの工数がかかることになります。全ての機能をテストすることは難しいため、影響範囲を限定しテストを行うことが重要になります。
※関連記事
レグレッションテストとは?目的や実施方法なども徹底解説
セキュリティテスト
セキュリティテストとは、設計書に記載されているセキュリティ要件を満たしているかどうかを確認するテストになります。主に以下の観点からテストを行います。
-
- パスワードの失効期間が適切かどうか
- 簡単すぎるパスワードが設定できるようになっていないか
- 悪意のあるデータベース更新ができるようになっていないか
- 保存されている顧客データなどが漏れるような仕様となっていないか
特に個人情報などのデータを登録するようなシステムでは、セキュリティテストが重要になってきます。顧客データを安全に運用するためにこちらのテストは徹底しましょう。
ストレステスト
ストレステストとは、そのソフトウェアまたはプログラムで想定されている最大の負荷または、最大以上の負荷をかけてもシステムが正常に動作するかを確認するテストです。
例えば、想定しているユーザーのログイン数を超えても問題がないか、などのテストを行ないます。主にチケット販売など、一時的に負荷がかかることが想定されているシステムや機能に対して行われるテストです。
実際にクライアントが使用している本番環境とは別に、テスト環境でシステムに負荷をかけ、異常や劣化が発生する限界点を把握することが目的となります。
ロングランテスト
ロングランテストとは、長時間の稼働により負荷をかけても、処理能力や稼働率に問題がないかどうかを確認するテストです。
例えば、プログラムにバグが発生し、一回の処理ごとにメモリ領域の解放を忘れ、メモリが圧迫してしまい、利用負荷状態になってしまう「メモリリーク」になっていないかなど、短期間のテストでは発見できないバグを探すテストになります。
システムテストは外注化が可能である
質の高いシステムテストを実施することでユーザーの信頼の失墜を防ぐことができますし、システム開発の実績を上げることができます。
しかし、システムテストを疎かにしてしまうと、システムに不具合が生じた時に、ユーザーからの信頼を失ってしまったり、システム利用から離脱してしまったりと、ビジネス機会の損失になりかねません。
確実にシステムテストを遂行し、最終的な工数を削減させるために、システムテストを外注化するという方法を提案します。システムテストに実績がある企業やパートナーを見つけ、効率的にまた、コストを削減しながらテストを進めてください。
まとめ
この記事で説明してきた内容をまとめると以下のとおりです。
-
- システムテストについての概要
- システムテストは開発者側が最後に行うテスト
- システムテストを疎かにすると信頼の失墜に繋がる
- システムテストは外注化が可能である
システムテストはテストを行う上で重要な業務であるため、確実に行う必要があります。システムテストを専門的に行なっている企業にテストを外注化すれば、安全確実なテストを実現させることができるでしょう。
株式会社エイチビーラボでは、ベトナムに特化したオフショア開発サービスを提供しております。システムテスト実施には豊富な実績があります。また、クラウドやITインフラ、システム関連でお困りの方は、ぜひお気軽にお問い合わせください。ご相談から、開発、運用まで親身にサポートいたします。