システムリリース後のトラブルは、企業の信頼を損ない、多大な損失をもたらす可能性があります。
システムテスト完全ガイドでは、このようなトラブルを未然に防ぎ、顧客満足度を高めるためのシステムテストの重要性と具体的な方法を解説します。
経営者には、テストへの投資がもたらすROI向上を、開発者には、テスト計画の立案から実行、そして最新トレンドまで、実践的な知識を提供するので参考にしてください。
機能テスト、性能テスト、セキュリティテストなど、各テストの目的と手法を理解し、最適なテスト戦略を構築することで、高品質なシステム開発を実現しましょう。
この記事を読んでほしい人
- システム開発における品質保証に興味がある方
- システムテストの基礎知識を習得したい方
- システムテストの最新トレンドを知りたい方
この記事でわかること
- システムテストの種類と目的
- システムテストの流れと具体的な手順
- システムテストの最新トレンドと活用方法
システムテスト(総合テスト)とは
システムテスト(総合テスト)とは、システム開発の中で実施されるテストの手法の一つです。
一般的にその他の単体テスト及び結合テストが完了したのちの開発工程における最終段階で実施されます。
システムテストでは、システムリリース後に実際に想定される状況と同様の条件下で動作確認を実施し、要件定義を問題なく満たしているか否かについて検証します。
この時点で問題がなければクライアントに納品となる流れをとりますが、もし不具合等が発見された場合には、システムの修正を速やかに行い、再度システムテストを実施することを覚えておきましょう。
システムテスト(総合テスト)と単体テストの違い
単体テストは、ユニットテストとも呼ばれるとおり、プログラムを構成する関数やメソッド毎の小さな単位が、それぞれの機能を正しく搭載しているか否かを検証する際に実施されるテストです。
システムテストはシステム開発の最終段階で実施されるのに対し、単体テストは、開発の比較的早い工程でその都度細かく実施されます。
システムテスト(総合テスト)と結合テストの違い
結合テストは、システムテストのさらに一段階前で行うテストで、単体テストよりはまとまった単位でありながら、システムテストのように全体のテストではない点が違いです。
結合テストは、ユニットごとの単体テストが完了した後、それぞれのユニットを結合した際に、要件定義どおり動作をするか否かについて検証をするテストのことです。
なお、結合テストは、次の4つの種類に分類することが可能です。
- モジュール間結合テスト:モジュール結合時のテスト
- サブシステム内結合テスト:サブシステム内の機能の結合時のテスト
- サブシステム間結合テスト:サブシステム同士の結合時のテスト
- 外部システム結合テスト:外部システム結合時のテスト
システムテスト(総合テスト)の種類
この章では、代表的なシステムテストの種類の概要を解説します。
- 機能テスト
- 構成テスト(機種テスト)
- 回帰テスト(退行テスト、リグレッションテスト)
- 性能テスト(パフォーマンステスト)
- セキュリティテスト
- ユーザビリティテスト
- 障害許容性テスト
- シナリオテスト
- ロングランテスト
それぞれのテストの特徴を押さえておきましょう。
機能テスト
機能テストとは、要件定義されている仕様を満たしているか否かについて検証するテストです。
厳密にいえば、システムテストだけでなく、単体テストや統合テストにおいても実施されますが、要素のレベルにより、要件及び機能が変化することから、機能テスト自体の内容も連動して変化します。
構成テスト(機種テスト)
構成テスト(機種テスト)では、各ソフトウェア構成及びハードウェア構成に関連するシステムの検証を実施します。
具体的には、開発しているシステムの推奨環境において、画面表示及び動作が問題なく実施されるか否かを、実際のOSやスマートフォン端末等を用いてテストします。
回帰テスト(退行テスト、リグレッションテスト)
回帰テスト(退行テスト、リグレッションテスト)では、機能の追加及び変更、さらには発生していた不具合の改修のために行われたプログラム変更により、意図しない不可逆的な影響が発生していないかどうかを検証します。
性能テスト(パフォーマンステスト)
性能テスト(パフォーマンステスト)では、実際に開発したシステムを作動させて、要件定義を満たしているか否かについて検証します。
セキュリティテスト
セキュリティテストでは、その名の通り、開発したシステムへの外部からの不正アクセス防止及び情報漏洩防止等に代表されるセキュリティに関する機能が要件定義通り動作しているか否かを検証します。
特に不特定多数が使用することが想定されているシステム開発においては必須のテストです。
ちなみに、セキュリティテストでは、主に次の2点の対策を行うことが一般的です。
- クロスサイト・スクリプティング(XSS):攻撃対象のWebサイトの脆弱性の隙をついて、攻撃者が悪質なサイトに誘導するスクリプトを仕掛け、Webサイトに訪れたユーザーの個人情報等を不正に搾取する攻撃
- SQLインジェクション:攻撃対象のアプリケーションのセキュリティ上の不備を不正に利用し、本来アプリケーションが想定していないSQL文を実行させ、データベースシステムを攻撃者が不正に操作すること
ユーザビリティテスト
ユーザービリティテストでは、開発したシステムの操作性及び見やすさなど、ユーザー目線で使いやすいか否かを検証します。
クライアントによる受け入れテスト(UAT)でも、特に重要視される項目となるため、ていねいに実施しましょう。
障害許容性テスト
障害許容性テストでは、その名の通り、障害発生時であっても、任意の機能が維持されているか否かを検証します。
シナリオテスト
シナリオテストでは、ユーザーが実際に使用する手順を踏んで操作を行った際に、問題なく動作するか否かを検証します。
ロングランテスト
ロングランテストでは、あえて長時間システムを連続して稼働させることで負荷をかけ、システムのパフォーマンスが低下したり、動作自体が遅くなったり、停止したりしないかを検証します。
実際にユーザーが使用する際には、長時間使用されることが想定されるため、こちらも大変重要なテストです。
システムテストの流れ
この章では、実際のシステムテストの流れに沿って解説します。
- ステップ1. 計画立案
- ステップ2. テスト方針を立てる
- ステップ3. テスト基準を設定する
- ステップ4. 要員・体制を明確にする
- ステップ5. スケジュールを計画する
- ステップ6. テスト環境・ツールを定める
- ステップ7. テスト環境を構築する
- ステップ8. テスト項目を作成する
- ステップ9. テストデータを事前に準備する
- ステップ10. テスト手順を準備する
- ステップ11. テストを実施する
- ステップ12. 評価する
システムテストの種類について理解したところで、システムテストの流れについても押さえておきましょう。
ステップ1. 計画立案
システムテストを実施する際には、システム開発を行う前と同様にシステムテストを行うための計画を立てます。
具体的には、システムテスト全体の概要をはじめ、目的やテストの対象及び影響範囲、テスト環境や人員体制、テストの実施スケジュールを取りまとめつつ、システムテストの合格基準について定めます。
ステップ2. テスト方針を立てる
計画のうち、特にテスト方針では、どこまでのテストを実施し、どれくらいの品質を求めるのかについて定めます。
世間一般的にリリースする予定のスマートフォンアプリなどと、社会インフラ等を担うシステムでは、求められる品質が違います。
そのため、テストの工数を増やしてしまうとコストが増加してしまうこともあるので、開発するシステムが、誰に向けられており、どのような目的なのかについてきちんと把握しておくことが大切です。
ステップ3. テスト基準を設定する
計画を立てるうえで、テストの基準をきちんと設けることも大切です。
テスト方針にも関連しますが、どれくらいの品質を求めているのかによって、テストの基準も変動します。
ステップ4. 要員・体制を明確にする
テストを行う際の人員体制についてもきちんと明確にしておきましょう。
どのテストを行う際に、実施する担当者は誰であるのか、どれくらいの時間が想定されるのかをきちんと明確にしておかなければ、人日単価を算出することも不可能となります。
ステップ5. スケジュールを計画する
開発するシステムの最終納期に間に合うように、余裕を持ったテストスケジュールを計画しましょう。
もし、テスト段階で不具合があれば、改修が必要となり、その分工程が増えてしまいます。
スケジュールが伸びてしまうとクライアントにも迷惑がかかってしまうので注意しましょう。
ステップ6. テスト環境・ツールを定める
テストを行う環境やルールについてもきちんと定めておく必要があります。
ユーザーが使用する推奨環境を整えて、実際の使用状況で問題なく動作するか否かを検証できなければテストの意味がありません。
ステップ7. テスト環境を構築する
計画した通りのテスト実施環境を構築し、どの担当者であっても同条件下でテストを実施できるように準備します。
この段階では、くれぐれも担当者毎に異なるテスト環境にならないように注意する必要があります。
ステップ8. テスト項目を作成する
テストを行う前に、今一度計画に沿ってテストを実施する項目について、誰でも一眼でわかるようにしておきます。
この段階では、それぞれの項目で何を確認するのかについても細かく書き出しておきましょう。
ステップ9. テストデータを事前に準備する
テストに用いるデータを事前に準備しておき、スムーズにテストを実行できるようにしておきます。
ステップ10. テスト手順を準備する
計画書の手順通りにテストを実施できるように、テストの手順についてもしっかり準備しましょう。
ステップ11. テストを実施する
テスト手順準備まで完了したら、実際にテストを実施していきます。
ステップ12. 評価する
テスト実施後、各テストについて評価を行い、計画通りかつ要件定義通りの結果となっていれば合格としますが、何らかの不具合が起きている場合には、不合格とし、早急に改修を行い、再度テストを実施します。
受け入れテスト(UAT)とは
受け入れテスト(UAT)とは、ベンダー側で実施されたシステムテストの後、クライアント側が実際に運用する環境において、実際の使用手順に沿って開発されたシステムを使用してみるテストのことです。
もちろんベンダー側でも実際の使用環境を整えてテストを行っていますが、クライアントが実際に使用してみることで、何か操作を間違ってしまった際などに、エラー表記などを見て、クライアントが対処することができるのか否かについても細かく検証していきます。
基本的には、受け入れテストについては、プロジェクトの初期段階で計画しておくことが一般的です。
初期段階で計画を行なっておくことで、クライアントとベンダーの間での要求定義の認識をきちんと擦り合わせておくことができ、不要なトラブルを予防することにつながります。
受け入れテスト(UAT)の種類
ここでは代表的な次の3つの受け入れテストについて解説します。
- 運用受け入れテスト
- 契約による受け入れテスト
- 規定による受け入れテスト
- アルファ・ベータテスト
システムテスト同様、受け入れテスト(UAT)にもさまざまな種類が存在しているので、押さえておきましょう。
運用受け入れテスト
運用受け入れテストでは、クライアント側のシステム管理者によって、システム運用に支障がないか否かを以下のようにして検証します。
- バックアップを取る
- リストアを行う
- 不測の事態(災害時など)において、スムーズに復旧を行うことができるのかについての検証を行う
- セキュリティ上何か重大な問題はないかの検証を行う
- ユーザー管理を問題なく実施可能であるか否かを確認する
この段階では、クライアント側においてもシステム関係に詳しいであろうシステム管理者がテストを実施することが多いので、よほどのことがなければスムーズに進むことがほとんどです。
契約による受け入れテスト
契約による受け入れテストでは、システム開発外注の段階で結んだ契約書に記載の内容を満たしているか否かを確認します。
契約書通りのクオリティであるのかといったことや、納期が遅れていないかという点についての確認です。
規定による受け入れテスト
規定による受け入れテストでは、実際にユーザーが開発されたシステムを使用する際に、法律及び安全基準などから逸脱していないかどうかを検証します。
この際、開発されたシステムによって、特に会計分野や医療分野、さらには個人情報に関するセキュリティなど、さまざまな分野の法律及び安全基準を細かく確認する必要があります。
アルファ・ベータテスト
アルファ・ベータテストにおいては、実際にシステムを使用する現場のユーザーや、コンシューマなどにモニターとしてシステムを使用してもらったうえで、率直なフィードバックを受けます。
操作感や画面表示をはじめ、実際に使用した際に、予期せぬ不具合が発生しないかなどを確認するのです。
この段階では、運用受け入れテストと異なり、システムに詳しくない人間が実際に使用することになるため、システムテストや運用受け入れテストでは発見されなかった不具合などが発見されることがあります。
システムテストの最新トレンド
この章では、システムテストの最新トレンドをご紹介します。
- AIを活用したテスト自動化
- シフトレフトテスト
- クラウドを活用したテスト環境
- テストデータ管理の重要性
システム開発において、品質保証は欠かせません。
システムテストは、その品質保証を担う重要なプロセスですが、近年、技術の進歩とともに、システムテストのトレンドも大きく変化しています。
AIを活用したテスト自動化
AI(人工知能)の進化は、システムテストの自動化を新たなステージへと導いています。
従来のテスト自動化では、スクリプト作成やメンテナンスに手間がかかるという課題がありました。
AIを活用することで、テストケースの自動生成やテスト結果の分析を効率化し、人的リソースの削減とテストカバレッジの向上を実現できます。
<例>
- 機械学習を用いたテストツール:過去のテスト結果やシステムの振る舞いから、効果的なテストケースを自動生成する
- AIによる画像認識技術:UIテストの自動化にも応用されている
シフトレフトテスト
シフトレフトテストとは、テスト工程を開発の早期段階に前倒しするアプローチです。
開発の後期段階でバグが見つかると、修正コストが大きくなるだけでなく、リリーススケジュールにも影響を及ぼします。
シフトレフトテストは、開発の初期段階からテストを繰り返し行うことで、早期にバグを発見し、修正コストの削減と品質向上を目指します。
<例>
- 開発者がコードを記述するたびに、静的解析ツールでコードの品質をチェックする
- 単体テストを自動実行したりする
クラウドを活用したテスト環境
クラウド環境は、システムテストのインフラ構築と運用を効率化する上で、ますます重要な役割を果たしています。
オンプレミス環境でのテスト環境構築は、時間とコストがかかるだけでなく、スケーラビリティにも課題があります。
クラウド環境を利用することで、必要な時に必要なだけリソースを確保でき、テスト環境の構築・運用コストを削減可能です。
<例>
- AWSやAzureなどのクラウドプラットフォーム:さまざまなテストツールやサービスを提供しており、システムテストの効率化に貢献している
テストデータ管理の重要性
テストデータの品質は、システムテストの結果に大きく影響します。
現実のデータを模倣した高品質なテストデータは、システムの潜在的な問題をより正確に明らかにするのに役立ち、不適切なテストデータは、誤ったテスト結果を招き、品質問題を見逃すリスクを高めるからです。
<例>
- 個人情報や機密情報を含むテストデータ:適切に匿名化・マスキング処理を行う必要がある
- テストデータ生成ツール:効率的に高品質なテストデータを用意できる
システムテストに関するよくある質問
ここからは、システムテストに関するよくある質問にMattockシニアコンサルタントが回答します。
- Q1. システムテストは別名何といいますか?
- Q2. システムテストと機能テストの違いは何ですか?
- Q3. システムテストは必要ですか?
- Q4. システムテストとはIT用語で何ですか?
- Q5. STとはITで何ですか?
- Q6. システムテストとシステム結合テストの違いは何ですか?
- Q7. システム開発のテストは誰がやるのですか?
この章を参考に、システムテストについて理解を深めておくことをおすすめします。
Q1. システムテストは別名何といいますか?
システムテストは、総合テストと呼ばれることもあります。
どちらも同じ意味で、システム全体が要件を満たしているかを確認するテストを指します。
Q2. システムテストと機能テストの違いは何ですか?
機能テストは、システムの個々の機能が正しく動作するかを確認するテストですが、システムテストは、システム全体を統合した状態で、機能だけでなく、性能、セキュリティ、ユーザビリティなど、さまざまな観点からテストを行う点がそれぞれのテストの違いです。
Q3. システムテストは必要ですか?
システムテストは必要不可欠です。
システムテストを実施することで、システム全体の品質を保証し、本番環境での問題発生を未然に防げます。
Q4. システムテストとはIT用語で何ですか?
システムテストとは、IT用語でシステム全体が要求仕様通りに動作するかを確認するためのテストを意味します。
Q5. STとはITで何ですか?
STは、システムテスト(System Test)の略称として使われることがあります。
Q6. システムテストとシステム結合テストの違いは何ですか?
システム結合テストは、システムを構成する複数のモジュールやコンポーネントを結合し、それらの間のインターフェースや連携が正しく動作するかを確認するテストです。
システムテストは、システム結合テストの後に行われ、システム全体を統合した状態でテストを行います。
Q7. システム開発のテストは誰がやるのですか?
システム開発のテストは、開発チーム内のテスターや、独立した品質保証チームが担当することが多い傾向にあります。
また、近年では、開発者自身もテストに積極的に関わるようになってきています。
まとめ
システムテストについて、この記事では、「システムテスト完全ガイド」と題し、システムテストの種類や流れ、受け入れテスト(UAT)についても解説しました。
システム開発の工程の中でも最終段階にあるシステムテストおよび受け入れテスト(UAT)は、問題なくシステムが要件定義通りに開発されているかを確認するために欠かすことができない工程です。
特にシステムテストで手を抜いてしまうと、受け入れテスト(UAT)時にクライアントとベンダーの間でトラブルになってしまうことにつながりかねません。
ベンダーにおいて実施されるシステムテストにおいては、きちんと計画を立て、求められるクオリティのシステムが開発されているかどうかをていねいに検証することが大切です。
この記事を参考に、スムーズなシステムテストを実施してください。