システム開発技術② テスト手法と運用・保守

目次

テスト

システム開発におけるテストは、開発されたソフトウェアが正しく動作するかどうかを確認するための重要なプロセスです。

テストでは、機能や性能、安全性などが要件定義に従って実装されているかを検証します。

テストは、単体テスト、結合テスト、システムテスト、運用テストなどのさまざまな段階に渡って行われます。このプロセスを通じて、問題やバグを見つけ、修正することで、最終的に高品質なシステムを実現します。

テスト手法

単体テスト

単体テストとは、システム開発の中で行われるテストの一種で、ソフトウェアの個々の部分(モジュール)が正しく機能するかどうかを確認するプロセスです。

モジュールとは、ソフトウェア内の独立した機能単位で、特定のタスクを実行するために作成されたコードのまとまりです。

ホワイトボックステスト

単体テストで実施される代表的なテスト手法にホワイトボックステストがあります。

ホワイトボックステストは、ソフトウェアの内部構造やコードの実装に焦点を当てたテスト手法です。このテストでは、プログラムの内部ロジックを理解しているテスターが、コードの各パスや条件を検証して、正しく機能することを確認します。

ホワイトボックステストの目的は、プログラムの内部構造に着目し、すべての分岐やループが正しく機能することを確認することです。これにより、コードの品質や正確性が向上し、潜在的なバグや欠陥を開発初期段階で発見できます。

ブラックボックステスト

ホワイトボックステストと同様に、単体テストで実施される代表的なテスト手法にブラックボックステストがあります。

ブラックボックステストは、ソフトウェアのテスト手法の一つで、ソフトウェアの内部構造やコードには焦点を当てず、外部から見たソフトウェアの機能や振る舞いに重点を置いてテストを行います。

つまり、テスターは入力に対して期待される出力を確認し、ソフトウェアが正しく機能しているかどうかを検証します。

分かりやすく言うと、ブラックボックステストはソフトウェアを一つの「黒い箱」と見なし、内部の詳細には立ち入らずに、入力と出力の関係が正しいかどうかをテストする手法です。これにより、利用者の視点に立ってシステムが期待通りに動作するかどうかを確認することができます。

ブラックボックステストはすべてのソフトウェアテストレベル(単体テスト・結合テスト・システムテスト・運用テスト)で活用することができます。


単体テストは、システム全体が統合される前に、各部分の正確性を確認する重要なステップです。

テストケース

テストケースとは、ソフトウェアのテストを実施する際に、特定の機能や要求を検証するために用意された一連の手順や入力データ、期待される出力データなどをまとめたものです。

テストケースは、システムが設計通りに動作するかを確認するための基本的なツールであり、開発者やテスターがバグを見つけて修正することで、ソフトウェアの品質を向上させる目的で使用されます。

テストケース作成の際には、システムの要件定義や設計書を元にして、正常系(正しい入力に対して正しい出力が得られることを確認する)と異常系(不正な入力に対して適切なエラーメッセージが表示されることを確認する)の両方のシナリオを考慮し、網羅的にテストができるようにします。

結合テスト

結合テスト(統合テスト)は、ソフトウェア開発プロセスにおいて、個々のプログラムやモジュールが互いに連携し、仕様通りに動作することを検証するテストです。

このテストでは、プログラム間のインタフェースが正しく設計されているか確認し、データのやり取りや命令の受け渡しが適切に行われるかを検証します。

システムテスト

システムテストは、すべての部品(プログラムやモジュール)が組み合わされた完成形のシステムを、実際の利用状況に近い条件で試験し、システム全体がシステム要件に適合した動作をするか確認するテストです。

このテストでは、システムの開発者が主体となり、利用者と協力しながら、機能や性能、信頼性、使用性など、システム全体の品質を評価します。

運用テスト

運用テストは、システムが実際の運用環境下で期待どおりに動くかをチェックするテストです。このテストは、システムの利用者が主導し、開発者と協力して実施されます。

実際のユーザーや利用シーンを考慮した状況で、システムがうまく機能するかどうかを確認することが目的です。

導入・受入れ

受入れテスト

受入れテストは、システムが利用者の要求を満たしているかを確認する最終段階のテストです。

利用者が主導し、開発者と協力して実施されます。本番環境でシステムが正常に機能し、期待される結果が得られるかどうかを検証します。

受入れテストで問題がなければ、システムの納入が行われ、新システムが稼働します。

妥当性確認テスト

妥当性確認テストは、システムがエンドユーザーの意図する動作を実現できているかどうかを確認するテストです。

これは、システムテスト、受入れテストの一部として実施されることがあります。

利用者マニュアル

利用者マニュアルは、本番稼働後の業務遂行のために、業務別にサービス利用方法の手順を示した文書で、操作手順や設定方法、問題発生時の対処法などが記載されています。

本番環境で業務を行う際に、ユーザーがシステムを正しく、効果的に使用できるようにするための重要なリソースです。

システム導入計画書

システム導入計画書は、新しい情報システムやソフトウェアを組織内に導入する際に用いられる文書です。

ソフトウェアが完成し、開発環境から本番環境へ移行する前に作成し、関係者と合意を得ます。

この計画書には、新システムへの移行方法、データ保全、業務への影響範囲、導入スケジュール、体制などの項目が含まれます。

これらの情報を明確にしておくことで、ソフトウェアの本番環境への導入がスムーズに進行し、効率的な運用が実現できるようになります。

テストの主体

それぞれのテストについて、単体テスト・結合テスト・システムテストまでは開発者側が主体となって進めます。

以降の運用テスト・受入テストでは利用者側が主体となり、開発者側は支援に回って進めていきます。

ソフトウェア保守

受入れテスト後、システムは実際の運用環境で使用されるようになります。

ソフトウェア保守は、システムが運用された状態で行われる一連の活動で、システムの性能を維持または向上させ、将来的なニーズに対応するためのプロセスです。

このフェーズでは、システムが安定して稼働し続けるために、問題の修正、改善、アップデートなどが行われます。ソフトウェア保守には、以下のような5つの主要な種類があります。(ここでは種類を覚える必要はありません)

  1. 是正保守:システムの引き渡し後に発見されたソフトウェアの不具合やバグを修正する作業です。
  2. 適応保守:システムを新しい環境や要件(例えば、新しいOSやデバイス、法律改正など)に適応させる作業です。
  3. 完全性保守:ユーザーからの要求や市場の変化に対応して、機能の追加や改善を行う作業です。
  4. 予防保守:未来の問題を予防するために、ソフトウェアの構造を改善したり、コードをクリーンアップしたりする作業です。
  5. 緊急保守:システムの障害や重大な問題が発生した場合に緊急に行われるメンテナンスです。システムの停止や重大な損失を防ぐため、迅速かつ即座の対応が求められます。

ソフトウェア保守は、ソフトウェアライフサイクルの中でも特にコストがかかるとされています。それは、新しい機能の追加、予期せぬ問題の修正、技術環境の変化への対応など、さまざまな要素が関わるためです。このため、開発初期の段階から保守性を意識した設計やコーディングを行うことが重要とされています。

関連用語

デバッグ

デバッグは、ソフトウェアやハードウェアのシステムからエラーやバグ(欠陥)を探し出し、修正するプロセスです。

開発者はプログラムのコードを詳細に調べたり、システムをテストしたりして動作中に発生する問題を特定します。

デバッグの目的は、プログラムが正確に動作するように修正し、最終的な製品の品質を向上させることです。

デバッグプロセスは時には単純なコードの誤りを修正することから、複雑なロジックエラーやパフォーマンスの問題を解決するまで幅広くあります。

コードレビュー

コードレビューは、ソフトウェア開発プロセスにおける重要な品質保証活動です。

このプロセスでは、開発者が書いたコードを他の開発者がレビューし、コードの品質を評価します。

レビューの主な目的は、バグを早期に発見し修正すること、コードの一貫性を保つこと、および開発チーム内での知識共有を促進することです。

コードレビューを行うことで、チームはソフトウェアの全体的な品質を向上させ、開発プロセスを効率化することが可能です。

レビューはフォーマルな会議で行うことも、オンラインツールを通じて非同期に行うこともあり、どちらの方法もチームが共同で問題を解決し、ソリューションを改善するのに役立ちます。

回帰テスト(リグレッションテスト)

回帰テスト(リグレッションテスト)は、ソフトウェアやシステムに加えられた変更が既存の機能に悪影響を与えていないことを確認するためのテストプロセスです。

このテストは、新しい機能追加、バグ修正、またはその他のアップデート後に実施されます。

このテストプロセスは、開発サイクルの中で定期的に行われ、変更によって既存の機能が損なわれていないことを保証します。

特に大規模なアップデート後や、複数のコンポーネントが絡むシステムにおいて重要とされます。

回帰テストは手動で行われることもありますが、繰り返し実行される性質上、時間と労力を節約するために自動化されることが多いです。

目次