システムに対する要件定義を行う際は、機能要件定義と非機能要件定義を行う。
機能要件の定義自体は、さほど難しくない。顧客がやりたいことを丁寧に詰めていくだけだ。しかしながら、非機能要件の定義は難しい。機能じゃない部分全般に対して要件を定義するのだから、どこまで定義したら終わりなのかの匙加減がわからない。そういう場合は、IPA(情報処理推進機構)が発行している非機能要求グレードを活用するとよい。
IPAの非機能要求グレードとは
IPAによれば、非機能要求グレードというのは、非機能要求に関する項目とその項目毎で求められる要求レベル(適用システムにより異なる)をIPAが網羅的にリストアップした表のことである。実現しようとしているシステムの種類に応じて、非機能要求レベルの目安を顧客側/ベンダ側で一緒に決めていくことができる資料なのだ。クラウドサービスなどでよく使われるSLA(サービス提供者が、契約者に対してどの程度まで品質を保証できるかを明示したもの)のようなものだ。あらかじめ顧客側と非機能要求レベルを詰めておくことで、「こんなんだと思わなかった」という事態をある程度防げるものである。顧客の当たり前とエンジニアの当たり前は異なるので、当たり前の水準についてお互いが認識合わせをすることで、運用後のトラブルを未然に防止できる確率が高くなるのだ。
IPAの非機能要求グレードをダウンロードする
では筆者はこの資料を活用しているかというと、使ったことはない。社内にある似たような資料を使っている。ということで、この機会を活かして、非機能要求グレードについて勉強をしていくこととする。
まずは、https://www.ipa.go.jp/sec/softwareengineering/std/ent03-b.htmlにアクセスして、zipファイルをダウンロード(上図の赤枠内参照)する。ダウンロードしたzipファイルを解凍し、「06_活用シート.xls」を開くと、「非機能要求グレード活用シート」シートに、非機能要求に関する項目が色々記載されていることがわかる。
IPAの非機能要求グレードに記載してある項目数は283。大項目で6分類ある
試しに項目数を数えてみたところ、6分類で238項目であった。以下に内訳を示す。
分類 | 大項目 | 集計 |
A | 可用性 | 33 |
B | 性能・拡張性 | 43 |
C | 運用・保守性 | 71 |
D | 移行性 | 18 |
E | セキュリティ | 37 |
F | システム環境・エコロジー | 36 |
結構多いなという印象だ。これを丁寧に顧客と詰めていくとなると、質疑応答含めて100時間程度必要(283項目あるので、1個20分で計算)な気がする。非機能要件定義内容集中検討会のような形で、顧客側とベンダ側が一緒になって詰めていくとよい。
大切なことは、ベンダが各項目について一つ一つ丁寧に説明し、1個ずつ合意していくことだ。このような資料をメールで送られてチェックしてくれなんて言われても見ないであろう。仮にベンダ側がそのような説明をするとしたら、あまり信用ならないベンダである。詳しい説明なしに資料を添付して送りつけてくるようなベンダは、顧客を理解していないし、中身も理解していない、認識合わせの重要性を理解していないベンダだ。会社間で合意を取る必要があるような類のものについては、自身が中身をしっかりと理解し、相手にその中身を説明し、お互い納得のもと、合意をすることが大切だ。
ところで、これらの指標は網羅的なのか?という疑問がある。上記表の大分類は、いわゆる品質特性モデル(ISO/IEC 9126参照、機能性、信頼性、使用性、効率性、保守性、移植性の6つについて品質の特性を分類したもの)と一致しているのかなと思ったら、違うようだ。品質に関わる部分はいろいろな規格があってややこしい。またの機会に整理することとする。
IPAの非機能要求グレードに記載してある項目は、中項目で35分類ある
もう少し中身を詳しくみてみると、中項目ベースで35分類ある(下記表参照。ちなみに小項目ベースだと119個)ことがわかった。非機能要件に関しては、ざっと見たところ、これだけ合意しておけば、たいがいのシステム開発では大きなトラブルにはならないであろう気がする。大変な作業になることは予想されるが、、、今後、小項目ベースで一つ一つ記事にしていくこととする。
参考:非機能要求グレード(中分類ベース)
詳細については、リンク先参照
分類 | 大項目 | 中項目 | 集計 |
A.1 | 可用性 | 継続性 | 11 |
A.2 | 可用性 | 耐障害性 | 15 |
A.3 | 可用性 | 災害対策 | 4 |
A.4 | 可用性 | 回復性 | 3 |
B.1 | 性能・拡張性 | 業務処理量 | 14 |
B.2 | 性能・拡張性 | 性能目標値 | 15 |
B.3 | 性能・拡張性 | リソース拡張性 | 9 |
B.4 | 性能・拡張性 | 性能品質保証 | 5 |
C.1 | 運用・保守性 | 通常運用 | 19 |
C.2 | 運用・保守性 | 保守運用 | 13 |
C.3 | 運用・保守性 | 障害時運用 | 8 |
C.4 | 運用・保守性 | 運用環境 | 8 |
C.5 | 運用・保守性 | サポート体制 | 16 |
C.6 | 運用・保守性 | その他の運用管理方針 | 7 |
D.1 | 移行性 | 移行時期 | 3 |
D.2 | 移行性 | 移行方式 | 2 |
D.3 | 移行性 | 移行対象(機器) | 1 |
D.4 | 移行性 | 移行対象(データ) | 6 |
D.5 | 移行性 | 移行計画 | 6 |
E.1 | セキュリティ | Web対策 | 2 |
E.1 | セキュリティ | セキュリティインシデント対応/復旧 | 1 |
E.1 | セキュリティ | 前提条件・制約条件 | 1 |
E.2 | セキュリティ | セキュリティリスク分析 | 1 |
E.3 | セキュリティ | セキュリティ診断 | 3 |
E.4 | セキュリティ | セキュリティリスク管理 | 7 |
E.5 | セキュリティ | アクセス・利用制限 | 5 |
E.6 | セキュリティ | データの秘匿 | 3 |
E.7 | セキュリティ | 不正追跡・監視 | 8 |
E.8 | セキュリティ | ネットワーク対策 | 3 |
E.9 | セキュリティ | マルウェア対策 | 3 |
F.1 | システム環境・エコロジー | システム制約/前提条件 | 2 |
F.2 | システム環境・エコロジー | システム特性 | 7 |
F.3 | システム環境・エコロジー | 適合規格 | 3 |
F.4 | システム環境・エコロジー | 機材設置環境条件 | 18 |
F.5 | システム環境・エコロジー | 環境マネージメント | 6 |