ソフトウェア品質から見るオブジェクト指向の必要性
ソフトウェアの仕様策定・設計を行う際に、ソフトウェアの品質をどう担保するか検討する必要がある。
その際、なぜオブジェクト指向やデザインパターンを意識してコードを記述すべきかを自己の認識を下記に示す。
まず、ISO/IEC21050※で規定されたソフトウエア製品の品質モデルを下記に示す。 ※ISO/IEC9126-1が元々規定していたものを改良した品質モデル。
それぞれの内容は下記の通り。
機能適合性
製品やシステムが、定められた利用状況下で定められて包含されたニーズを満たす機能 を提供する度合を示す。副特性として次がある。
- 完全性
- 機能がユーザの目的、定められたタスクをカバーしている度合
- 正確性
- 製品やシステムが必要な精度で正確な結果を与える度合
- 適切性
- 機能が定められたタスクや目的の遂行を円滑に行う度合
性能効率性
定められた利用状況下で利用される資源量の性能の度合を示す。副特性として次がある。
- 時間効率性
- 要求を満たすために機能を実行するときのシステムの応答時間、処理時間及び処理能力の 度合
- 資源利用性
- 要求を満たすために機能を実行するときの使用した資源の量や種類の度合
- キャパシティ
- 要求を満たすにあたり製品やシステムのパラメータの最大許容値
互換性
製品、システム、コンポーネントが他の製品、システムコンポーネントと情報を変換で きる度合、また、同じハードウェアやソフトウェア環境を共有し、要求される機能を実行 する度合を示す。副特性として次がある。
- 共存性
- 他の製品へ有害な影響を与えずに、他の独立した製品と共通の環境や資源を共有して要求 機能を効果的に実行する度合
- 相互運用性
- 2 つ以上のシステム、製品やコンポーネントが情報を交換し、その情報を利用できる度合
使用性
製品やシステムが、定められたユーザにより、定められた使用状況下で効果的、効率的、 満足度が達成される度合を示す。副特性として次がある。
- 適切度認識性
- 製品やシステムがユーザニーズに適しているかどうかを、ユーザが認識できる度合
- 習得性
- 定められたユーザにより、定められた使用状況下で満足性、安全性、効果性、効率性のあ る製品やシステムの使い方の学習が達成される度合
- 運用性
- 運用や管理の労力に係る度合
- ユーザエラー防止性
- システムがユーザを誤操作することから保護する程度
- ユーザインタフェースの快美性
- ユーザインタフェースがフレンドリーで満足できるインタラクションを可能にする程度
- アクセシビリティ
- 製品やシステムが定められた使用状況下で目標を得る上で、幅広い層の特徴や能力を持つ 人々により利用される度合
信頼性
システム、製品やコンポーネントが制限時間内で定められた状況の下で機能を実行する 度合を示す。副特性として次がある。
- 成熟性
- システムが通常の運用の下で信頼性のニーズを満たす度合
- 可用性
- システム、製品やコンポーネントが必要とされるときに運用、接続できる度合
- 障害許容性
- システム、製品やコンポーネントがハードウェアやソフトウェア障害が存在する中で運用 できる度合
- 回復性
- 障害時に製品やシステムがデータを回復し、システム状態を再構築する度合
セキュリティ
人やシステムによる読み込み・修正等が不当にアクセスされることなく情報やデータが 保護されている度合を示す。副特性として次がある。
- 機密保持性
- 製品やシステムが、許可されたもののみがアクセスできるようデータを保証する度合
- インテグリティ
- システム、製品やコンポーネントがコンピュータプログラムやデータへの修正に対して許 可されていないアクセスを防止する度合
- 否認防止性
- イベントやアクションがのちに拒否することができないよう、イベントやアクションが起 こされたことが証明される度合(ディジタル署名等)
- 責任追跡性
- エンティティのアクションが唯一のエンティティであると証明できる度合
- 真正性
- リソースや事項の身元が要求されるものであることを証明できる度合
保守性
製品やシステムが保守担当により修正するにあたっての効果性、効率性の度合を示す。 副特性として次がある。
- モジュール性
- 再利用性
- 資産が複数のシステムや他の資産を構築する際に利用できる度合
- 解析性
- 製品やシステムの一部を変更したり変更された部分の特定や障害の原因や欠陥のために製 品を診断したり、一つ以上の部分の変更に当たり影響を評価する際の効果性、効率性の度 合
- 変更性
- 製品やシステムが欠陥の発生や既存の製品品質の低下がなく、効果的、効率的に変更でき る度合(ISO/IEC 9126 シリーズでは変更性、安定性)
- 試験性
- システム、製品やコンポーネントのためにテスト基準を確立し、基準が満たされたかどう か定めるために実行する際の効果性、効率性の度合
移植性
システム、製品やコンポーネントが、あるハードウェア、ソフトウェアや運用、利用環 境を他へ移行されるにあたっての効果性、効率性の度合を示す。副特性として次がある。
- 順応性
- 製品やシステムが、異なるあるいは進化したハードウェアやソフトウェア、あるいは運用 や利用可能な他の環境に効果的かつ効率的に順応できる度合
- 設置性
- 製品やシステムが定められた環境に正しく設置(インストール)されたり撤去される(ア ンインストール)されたりする際の効果性、効率性の度合
- 置換性
- 製品が同一の目的、環境で他のソフトウェア製品に置換(リプレース)される度合
オブジェクト指向による設計・実装、また読みやすいコード、いわゆるリーダブルコードはこの内、主に保守性を満たすために必要である。
* 関数呼び出しによるオーバーヘッドなどは、少なくともC++などオブジェクト指向対応言語が使えるような環境だともはや気にしなくてよいだろう。
そもそもオブジェクト指向は、1960にNATOが「20世紀末には世界の総人口がプログラマーになっても、増大するソフトウェアの需要に追いつかない」と、 いわゆる「ソフトウェア危機」が宣言されたことに対し、 機能の追加のしやすさ、これまで開発した機能の流用をできるようにすることで、少しでもソフトウェア開発速度を向上しようというのが目的である。
参考:
オブジェクト指向はなぜ動くのか
経済産業省 ソフトウェアメトリクス高度化プロジェクト プロダクト品質メトリクス WG システム/ソフトウェア製品の品質要求定義と品質評価のためのメトリクスに関する調査報告書
独立行政法人情報処理推進機構(IPA)技術本部 ソフトウェア高信頼化センター(SEC)連携委員 / 日本電気株式会社 ソフトウェア生産革新本部 マネージャ バグだけが品質と考えていませんか?