システム開発において「品質の向上」という標語がしばしば掲げられますが、
「品質の属性」については無頓着なケースが多いのではないでしょうか。
ひとくちに品質といっても多様な属性があります。
顧客と品質の話で揉めたことはありませんか?
品質には多様な属性があり、単一の軸で良しあしを決められないという側面があります。
そのため、単に「品質」と言ってしまうと認識に齟齬が生じるのです。
Karl E. Wiegers氏が著書
「ソフトウェア要求」
で挙げた、すべてのプロジェクトが検討すべき12の属性は以下のとおりです。
可用性 | availability |
動作可能時間の指標。システム故障までの平均時間MTTF(Mean Time To Failure)を
平均修復時間MTTR(Mean Time To Repair)とMTTFの合計で割った値。稼働率とも呼ばれる。 |
効率性 | efficiency |
同じ処理性能を出すのにどのぐらいのハードウェアのスペックが必要か。 |
柔軟性 | flexibility |
機能拡張への柔軟性。順次拡張していくアジャイル開発を可能にするためには
ある程度の柔軟性を備えた設計にする必要がある。 |
完全性 | integrity |
データが正確で完全であること。改ざんなどされておらず、正しく動作すること。
情報セキュリティの目標事項のひとつとして挙げられる。 |
相互接続性 | interoperability |
他システムとのデータ連携の容易さ。 |
保守性 | maintainability |
バグの修正や仕様変更の容易性。 |
移植性 | portability |
ある稼働環境から、別の稼働環境へ移行させるために要する工数など。
JavaなどにみられるVM方式など高レイヤでの稼働システムは移植性が高いとも言える。 |
信頼性 | reliability |
特定の期間、故障なしでソフトウェアを実行できる可能性。 |
再利用性 | reusability |
プログラムコードの再利用性。オブジェクト指向などによるモジュール化によって高めることができる。
もっとも、日本だとソースコードが納品先の所有になる契約となることが多くライセンスの問題で再利用性が低い。 |
堅牢性 | robustness |
耐障害性。異常データなどの入力に対する耐性。 |
試験性 | testability |
テストのしやすさ。 |
使用性 | usability |
ユーザビリティ。使いやすさ。 |
これらは多くのプロジェクトに共通する属性ですが、もちろんこれで全てと言うわけではなく
特定ジャンルではさらに追加の品質属性を考慮する必要が出てきます。同じ本から引用すると
「組み込みシステムに重要な品質属性としてはさらに安全性、導入容易性、サービス能力があります。
スケータビリティは、インターネットアプリケーションに重要なもう一つの属性です。」
ということになるでしょう。
これらの品質属性は、すべてを同時に上げることができません。トレードオフが発生するのです。
品質属性のトレードオフ
これら品質の属性は、相互に作用し合っています。
ある属性を高めれば他の属性も高まる、あるいは低くなるということがおきます。
以下の表は左側の属性を上げた場合に上側のどの属性が高く、あるいは低くなるかを表しています。
(追記:引用元「ソフトウェア要求」228ページ)
|
可 用 性 |
効 率 性 |
柔 軟 性 |
完 全 性 |
相 互 接 続 性 |
保 守 性 |
移 植 性 |
信 頼 性 |
再 利 用 性 |
堅 牢 性 |
試 験 性 |
使 用 性 |
可用性 | | | | | | | | + | | + | | |
効率性 | | | - | | - | - | - | - | | - | - | - |
柔軟性 | | - | | - | | + | + | + | | | + | |
完全性 | | - | | | - | | | | - | | - | - |
相互接続性 | | - | + | - | | | + | | | | | |
保守性 | + | - | + | | | | | + | | | + | |
移植性 | | - | + | | + | - | | | + | | + | - |
信頼性 | + | - | + | | | + | | | | + | + | + |
再利用性 | | - | + | - | + | + | + | - | | | + | |
堅牢性 | + | - | | | | | | + | | | | + |
試験性 | + | - | + | | | + | | + | | | | + |
使用性 | | - | | | | | | | | + | - | |
まずは品質には属性があることを顧客に伝えましょう。
そして属性にトレードオフが発生することを理解してもらいましょう。
ソフトウェア工学と品質属性
ソフトウェア工学の数々の成果はこれらの品質属性にどう影響を与えたのでしょうか?
構造化プログラミング
試験性 - 適切なモジュール分割は試験性を高めます。より高めるにはステートレスな機能を意識的に分割することです。
ステートレスな関数は引数と戻り値によって容易にテストでき、自動テストなどによる自動化も行いやすくなります。
再利用性 - 構造化によりある程度、再利用性が高まりました。
契約に基づくプログラミング
完全性・堅牢性 - モジュール間での「契約に基づくプログラミング」のほつれに対して
適切にエラー処理を施すことで完全性・堅牢性を高めることができます。
オブジェクト指向
柔軟性・保守性 - オブジェクト指向によって動的なフローチャートになるプログラムを容易に制御できるようになりました(ポリモフィズム)。
これを活用することで、既存箇所に手を入れることなく追加のクラスを作成するだけでの拡張が可能になります。
再利用性 - 構造化プログラミングよりさらに再利用性を高めることができます。
ポリモフィズムを活用したプログラミングは再利用性の点でも優れています。
VM技術、仮想化技術
移植性 - Javaの標榜する"Write once, run anywhere"は究極の移植性と言えます。
現在のJava開発は主にWindows機上で行われており、そのままUnix系のOSで稼働する本番機で動作させる
ようなことが行われています。携帯電話におけるJavaMEの採用もこの点を活用してのことです。
O/Rマッピング
移植性 - O/RマッピングもDBを特定製品に縛らないという意味で移植性を高める効果があります。
DIコンテナ
柔軟性・保守性 - DIコンテナによる設計は柔軟性・保守性を高めます。
試験性 - DIコンテナによる疎結合は試験性をより高めます。DBなどを伴うシステムですら、
スタブによって自動テスト化することが容易になりました。
ここでは目立つ特徴をピックアップしましたが、もちろん品質属性への影響はここに挙げただけにはとどまりません。
各種パラダイムを眺める際に、品質属性への影響と言う点でみつめるとまた違ったものが見えてくるかもしれません。
投稿日時 : 2009年2月3日 8:36