ソフトウェア工学シリーズ第6弾。
ソフトウェア品質っていうのは、ソフトウェアシステムや製品が、規定されたニーズや潜在的なニーズを満たしているかどうかの特徴や特性全体のことだよ。
ソフトウェア品質管理は、ソフトウェア開発プロセスに対して独立した検査を行う活動のことで、品質保証・品質計画・品質管理の3つの主要な活動で構成されているんだ。
ソフトウェア品質保証は、ソフトウェアシステムや製品がユーザーの要求を十分に満たす品質であることを保証するために、計画的・組織的に行われる活動のこと。高品質なソフトウェアを作り出すことが目的なんだ。
ソフトウェア品質特性
ソフトウェア品質について語るには、まず品質特性を理解しておく必要があるよね。今までに、ソフトウェア品質特性を記述するための品質モデルがいくつか提案されているんだ。例えば、ISO/IEC 9126 ソフトウェア品質モデルや McCall のソフトウェア品質モデルが有名だよ。
ISO/IEC 9126 ソフトウェア品質モデル
ISO/IEC 9126 ソフトウェア品質モデルは3つの階層で構成されているんだ。第1層は品質特性、第2層は品質副特性、第3層は計測指標(メトリクス)だよ。

機能性 (Functionality)
指定された条件下で、明示的または暗示的なニーズを満たす機能を提供できる能力に関する属性のこと。
- 適合性 (Suitability):指定されたタスクに対して、適切な機能セットを提供できるかどうかに関する属性。
- 正確性 (Accurateness):正しい、または一致した結果や効果を得られるかどうかに関する属性。
- 相互運用性 (Interoperability):他の指定されたシステムと相互に作用できる能力に関する属性。
- 準拠性 (Compliance):関連する標準、規約、法規制などに準拠しているかどうかに関する属性。
- 機密安全性 (Security):プログラムやデータへの不正なアクセス(意図的または偶発的)を防ぐ能力に関する属性。
信頼性 (Reliability)
指定された時間内および指定された条件下で、ソフトウェアがその性能レベルを維持できる能力に関するもの。
- 成熟性 (Maturity):ソフトウェアの故障によって引き起こされる不具合の頻度に関する属性。
- 障害許容性 (Fault tolerance):ソフトウェアのエラーやインターフェース違反が発生した場合でも、指定された性能レベルを維持できる能力に関する属性。
- 回復性 (Recoverability):故障発生後に性能レベルを再確立し、直接影響を受けたデータを復旧させる能力、およびそれに必要な時間と努力に関する属性。
使用性 (Usability)
利用に必要な努力や、特定のユーザー層による評価に関する一連の属性。
- 理解性 (Understandability):ユーザーが論理的な概念やその適用を理解するために費やす努力に関する属性。
- 習得性 (Learnability):ユーザーが操作方法(コントロール、入力、出力など)を学ぶために費やす努力に関する属性。
- 運用性 (Operability):ユーザーが操作や運用制御を行うために費やす努力に関する属性。
効率性 (Efficiency)
指定された条件下で、ソフトウェアの性能レベルと使用されるリソース量との関係に関する属性。
- 時間効率性 (Time behavior):ソフトウェアが機能を実行する際の応答時間、処理時間、およびスループットに関する属性。
- 資源効率性 (Resource behavior):ソフトウェアが機能を実行する際に使用するリソースの量と、その持続時間に関する属性。
保守性 (Maintainability)
指定された修正を行うために必要な努力に関する一連の属性。
- 解析性 (Analyzability):欠陥や故障の原因の診断、または修正が必要な箇所の特定に要する努力に関する属性。
- 変更性 (Changeability):修正、デバッグ、または環境の変化への適応に要する努力に関する属性。
- 安定性 (Stability):修正によって予期しない影響が出るリスクに関する属性。
- 試験性 (Testability):修正されたソフトウェアを確認するために必要な努力に関する属性。
移植性 (Portability)
ソフトウェアがある環境から別の環境へ移転できる能力に関する一連の属性。
- 適応性 (Adaptability):異なる環境に移転する際の処理や手段に関する属性。
- 設置性 (Installability):指定された環境でソフトウェアをインストールするために必要な努力に関する属性。
- 共存性 (Conformance):移植性に関する標準や規約に準拠しているかどうかに関する属性。
- 置換性 (Replaceability):特定のソフトウェア環境で、他の指定されたソフトウェアの代わりにそのソフトウェアを使用できる可能性と努力に関する属性。
Mc Call ソフトウェア品質モデル
McCall のソフトウェア品質モデルは、ソフトウェア製品の運用、修正、移行の3つの側面から11個の品質特性を定義しているんだ。
McCall も3層のモデルフレームワークを提示しているよ。第1層は品質特性、第2層は評価基準、第3層は計測指標だね。

ソフトウェアレビュー
通常、「品質」は「ユーザーの満足度」として理解されることが多いよね。ユーザーに満足してもらうためには、次の2つの条件が必要なんだ。
- 設計仕様書がユーザーの要求に合致していること。これを「設計品質」と呼ぶよ。
- プログラムが設計仕様書通りに正しく実行されること。これを「プログラム品質」と呼ぶんだ。
設計品質のレビュー内容
設計品質レビューの対象は、要件分析フェーズで作成されたソフトウェア要件定義書、データ要件定義書、および基本設計フェーズで作成されたソフトウェア基本設計書などだよ。通常、以下のような観点からレビューを行うんだ。
- ソフトウェアの仕様がユーザーの要求に合っているか評価する。つまり、全体的な設計思想や方針が明確か、要件定義書がユーザーや上層部の承認を得ているか、要件定義書と基本設計書に矛盾がないかなどをチェックするよ。
- 信頼性をレビューする。入力異常(エラーやオーバーロードなど)、ハードウェア故障、ソフトウェア故障による失敗を回避できるか。もし発生した場合、すぐに代替手段や回復手段をとれるかを確認するんだ。
- セキュリティ対策の実施状況をレビューする。システムの利用資格のチェックが行われているかなどを確認するよ。
- 操作特性の実施状況をレビューする。操作コマンドや情報の適切さ、入力データと制御文の適切さ、出力データの適切さ、レスポンスタイムの適切さなどをチェックするんだ。
- 性能の達成状況をレビューする。規定された性能目標値に達しているかを確認するよ。
- ソフトウェアに変更容易性、拡張性、互換性、移植性があるかレビューする。
- ソフトウェアにテスト容易性があるかレビューする。
- ソフトウェアに再利用性があるかレビューする。
プログラム品質のレビュー内容
プログラム品質レビューは、通常開発者の視点で行われるもので、開発技術に直接関係するんだ。ソフトウェア自体の構造、実行環境とのインターフェース、変更による影響などに着目して行われる活動だよ。
ソフトウェアの構造については、以下のような項目があるよ。
- 機能構造。チェック項目は:
- データ構造
- 機能構造
- データ構造と機能構造の対応関係
- 機能の汎用性
- モジュールの階層
- モジュール構造。階層構造が静的な構造なら、ここでは動的な構造をチェックするよ。モジュールは処理モジュールとデータモジュールの2種類に分けられ、動的構造もこの分類に関係するんだ。チェック項目は以下の通り:
- 制御フロー構造
- データフロー構造
- モジュール構造と機能構造の対応関係
- 処理プロセスの構造
実行環境とのインターフェース
実行環境にはハードウェア、他のソフトウェア、そしてユーザーが含まれるよ。主なチェック項目は以下の通りだね。
- ハードウェアとのインターフェース。ハードウェアの仕様書に基づいた規約、故障時の処理、オーバーロード時の処理など。
- ユーザーとのインターフェース。ユーザーとのインターフェース規約、つまり入力データの構造、出力データの構造、異常入力時の処理、オーバーロード時の処理、アクセス権限のチェックなど。
ソフトウェアフォールトトレランス技術
ソフトウェアの品質と信頼性を高める技術は、大きく2つに分けられるんだ。1つは「フォールトアボイダンス(障害回避)」で、開発プロセスの中でミスが入り込まないようにする技術。もう1つが「フォールトトレランス(障害許容)」で、避けられないミスがあってもその影響を最小限に抑える技術だよ。
フォールトトレラントソフトウェアの定義
- 規定された機能を持つソフトウェアが、自身のミス(ソフトウェアエラー)に対してある程度の遮蔽能力を持っている場合、そのソフトウェアはフォールトトレラントソフトウェアといえる。
- 規定された機能を持つソフトウェアが、エラー状態から自動的に正常状態に回復できる能力を持っている場合。
- エラーが発生しても、規定された機能をある程度まで継続して実行できる場合。
- ある程度の耐故障能力を備えている場合。
フォールトトレランスの一般的な手法
フォールトトレランスを実現する主な手段は「冗長化」だよ。冗長化とは、システムの規定機能を実現するために、本来は余分なリソース(ハードウェア、ソフトウェア、情報、時間)を付加すること。これによって、システムの信頼性を大幅に向上させることができるんだ。冗長化技術は通常4つのカテゴリーに分けられるよ。
- 構造冗長。最も一般的な技術で、動作方法によって3種類に分けられる。
- 静的冗長
- 動的冗長
- ハイブリッド冗長
- 情報冗長。演算や転送中のエラーを検出・訂正するために、追加の情報を付加すること。
- 時間冗長。命令やプログラムを繰り返し実行することで、一時的なエラーの影響を取り除くこと。
- 冗長付加技術。上記の冗長化を実現するために必要なリソースや技術のこと。プログラム、命令、データ、それらを保存・移動するためのスペースやチャネルなどが含まれるよ。
ハードウェアエラーを遮蔽するフォールトトレランス技術では、以下のようなものが冗長付加技術にあたるんだ:
- 重要なプログラムやデータの冗長保存と呼び出し。
- 検出、多数決(ボート)、切り替え、再構成、エラー訂正、再計算の実行。
ソフトウェアエラーを遮蔽するシステムでは、以下のような構成になるよ:
- 冗長バックアッププログラムの保存と呼び出し。
- エラー検出とエラー回復を実行するプログラム。
- フォールトトレラントソフトウェアを実現するために必要なファームウェア。
ソフトウェアツール
ソフトウェアの開発、運用、保守、管理、サポートなどの活動を補助するために使われるソフトウェアを「ソフトウェアツール」と呼ぶよ。
ソフトウェア開発ツール
開発プロセスの各活動に対応して、要件分析ツール、設計ツール、コーディング・デバッグツール、テストツールなどが存在するんだ。
ソフトウェア保守ツール
保守プロセスの活動を補助するものをソフトウェア保守ツールと呼び、コードやドキュメントの保守活動をサポートするよ。主なものとして、バージョン管理ツール、ドキュメント分析ツール、開発情報リポジトリツール、リバースエンジニアリングツール、再工学(リエンジニアリング)ツールなどがあるね。