
開発手法・プロセス
要件定義
新しいシステムで何をどこまで実現するかを、開発の前に決定して文書化する工程です。決定する責任は発注側にあり、範囲が確定していないなら要件定義だけを先に別契約で締結するほうが、見積もりの前提が発注側と開発会社で一致しない事態を防止しやすいです。
ひきのうようけん / NFR
システムに求める条件のうち、停止しにくさ、速さ、安全さ、保守のしやすさなど機能以外の水準を定めたものです。水準を引き上げるほど費用が大きく増加するため、業務への影響から必要な分だけを定めます。

システムに求める条件のうち、何ができるかではなく、どれだけ停止せず、速く、安全に稼働し続けるかを定めたものです。受注を登録できる、請求書を発行できるといった条件が機能要件にあたります。障害で停止したら何時間で復旧させるか、繁忙期に何人が同時に利用しても画面が3秒以内に表示されるか、ログを何年保存するかといった条件が非機能要件にあたります。英語の頭文字からNFR(Non-Functional Requirements)とも呼びます。発注側の希望の段階を非機能要求、合意して仕様に組み込んだものを非機能要件と呼び分けることもありますが、実務ではほぼ同じ意味で使用されます。システムに求めることを発注側と開発側が定める要件定義の工程で、機能要件と並べて定めます。
自動車の例では乗車定員や荷室の広さが機能要件で、衝突時の安全性、燃費、故障の少なさ、整備のしやすさが非機能要件にあたります。定員はカタログを確認すれば分かりますが、衝突時の安全性は実際に衝突するまで差が分かりません。しかも購入後に追加することはほとんどできません。
システムの要件を定める場では、画面や業務の流れの話が中心になります。非機能要件は言葉にされないまま進行しやすいです。発注側は停止しないのが当然と想定し、開発側は見積もりに収まる水準で構築します。このずれが発覚するのは稼働した後で、月末に画面が応答しなくなる、障害からの復旧に丸1日かかる、といった形で発生します。改修するにはサーバーの構成から変更する必要があり、機能を1つ追加するよりはるかに費用がかかります。
この問題に対して、IPA(情報処理推進機構)は非機能要求グレードという枠組みを公開しました。非機能要件を6つの大項目に分類し、項目ごとに水準を段階で選択できるようにしたもので、発注側と開発側が同じ項目表を参照して水準を合意するために作成されました。水準は一般にレベルが上がるほど開発費が増加する区切りで設けられています。最終版は2018年版で、IPAの事業は終了し、資料はアーカイブとして公開が続いています。更新は停止していますが、項目の網羅性から今も発注側と開発側の共通の項目表として利用されています。国際規格にはソフトウェアの品質特性を定めたISO/IEC 25010もあります。
非機能要求グレードの6つの大項目を、発注側が定める内容に整理すると次の表のとおりです。
| 項目 | 発注側が検討すること |
|---|---|
| 可用性 | 利用する時間帯、停止したときに何時間で復旧させるか、災害時にどこまで復旧させるか |
| 性能・拡張性 | 同時に利用する人数、ピーク時の処理件数、画面が表示されるまでの待ち時間、今後の増加の見込み |
| 運用・保守性 | 監視する時間帯、障害の連絡を誰が何時まで受け付けるか、バックアップを何世代保持するか |
| 移行性 | 旧システムからどのデータをいつまでに移すか、新旧を並行稼働させる期間 |
| セキュリティ | 管理する情報の重要度、利用できる人の範囲、操作の記録を保存する期間 |
| システム環境・エコロジー | 設置場所や利用する地域、守るべき規格などの制約。多くは開発側の提案を確認すれば足りる |
どの項目も業務への影響から逆算して定めます。ただしログの保存期間や個人情報の安全管理のように、法令や業界のガイドラインで下限が定められている項目もあり、業務への影響とは別に確認します。技術の知識がなくても回答できる問いがほとんどで、答えを技術の言葉に変換するのは開発側が担います。
クラウド事業者が責任を担うのは、データセンターやサーバーなどの基盤までです。AWS(Amazon Web Services)も責任共有モデルの中で、アプリケーション、データの保護、アクセス権限の設定は利用者側の責任だと明示しています。仮想サーバーを借りる使い方なら、OSの更新も利用者側が担います。クラウド事業者がSLA(Service Level Agreement)で示す稼働率は個々のサービス単体の数字で、その上に構築したシステム全体の稼働率ではありません。
SLAに記載できるのは定めた水準のうち、稼働率や問合せへの応答時間のように測定できるものだけです。非機能要件が先に確定していないと、SLAに記載する数字も決定できません。しかも違反したときの補償は、多くの場合次の請求から利用料の一部を差し引く扱いで、停止した間の売上の損失は補償されません。
100%は実現できず、近づけるほど費用だけが急に増加します。利用者の通信環境や端末のほうが先に停止するため、一定の水準を超えると利用者には違いが分かりません。必要な水準を満たしたらそれ以上は引き上げないことも選択肢の1つです。
停止したときの損失と、水準を引き上げる費用を比較して決定します。社内で利用する業務システムの多くは営業時間中に利用できればよく、障害が発生しても当日中から翌営業日までに復旧すれば業務が成り立ちます。24時間止めない、数分で切り替えるといった水準が必要になるのは、停止すると売上や顧客対応がその場で停滞するシステムに限られます。EC(Electronic Commerce)サイトの注文や決済、取引先と自動でつながる受発注が当てはまります。
稼働率は年間の停止時間に換算すると実感しやすいです。99%は年に約3.7日、99.9%は約9時間、99.99%は約53分の停止にあたります。同じ99.9%でも計画的なメンテナンスの停止を含むか、月ごとに測定するか年で測定するかで意味が異なります。何を停止と数えるかも数字と一緒に定めます。開発会社の提案に99.99%が示されることもあり、IPAの非機能要求グレードの解説資料も、取引先や顧客に影響が及ぶ基幹システムのモデルに99.99%を例示しています。社内だけで利用するシステムにそのまま当てはめると過剰になりやすいです。停止してよい時間帯と、1回の停止を何時間まで手作業で対応できるかを業務の担当者に確認して、数字を定めます。
クラウドの仮想サーバー1台で稼働させる構成では、AWSが保証する稼働率は99.5%にとどまります。99.9%を求める段階から、サーバーを複数のデータセンターに分散して配置する冗長構成が必要になります。99.99%ではさらに自動の切り替えと、夜間も含めた監視と待機の体制まで必要になります。目安として99.9%から99.99%に引き上げれば、インフラ費と運用費の合計が数割増しから倍以上に増加します。
水準を決定するのは発注側で、開発会社に一任してよいのは実現方法と費用の見積もりまでです。停止したときに業務がどれだけ支障を受けるか、どの情報が漏えいすると何が発生するかは、発注側にしか分かりません。
提案書では停止してから復旧するまでの目標時間をRTO(Recovery Time Objective)と記載します。どの時点の状態まで復元するかはRPO(Recovery Point Objective)と記載します。開発会社には非機能要求グレードの項目に沿って各項目の水準を提示してもらいます。主な項目は水準を1段上下させたときの費用差も算出してもらいます。水準を開発会社の判断に一任すると、開発会社は自社の標準の構成で見積もるため、提案が過剰か不足のどちらかに偏ります。
SaaS(Software as a Service)をそのまま利用する導入では、水準は提供元が定めていて利用者は変更できません。公開されているSLAと、データの保管場所や暗号化の方針を参照して、業務に十分かを確認すれば済みます。本物の顧客データを使用しない社内向けの試作も、ここまで詰める必要はありません。
まず機能ごとに水準を区分します。停止すると業務に支障が出る機能だけ水準を引き上げ、社内の集計や管理画面は低く抑えます。下げやすいのは夜間と休日の障害対応の時間帯、社内向け機能の復旧時間、将来の利用者増に備えて上乗せする処理能力の3つです。クラウドで運用するならサーバーの台数を増やす増強は利用者が増加してから行っても間に合うことが多いです。ただしデータベースを分割するか、二重化するかといった構成は後から変更しにくく、ここは最初に決定しておきます。
下げてはいけないのはセキュリティとバックアップです。情報漏えいとデータの消失は、後から費用をかけても回復できません。確認すべき点はバックアップを別の場所に保管しているかと、実際に復元できるかを試したことがあるかです。費用を削減する場面でも確認しておきます。
夜間と休日の対応を廃止すると、その時間に発生した障害は翌営業日まで放置されます。その間に停止していてよい業務かを、利用部門と合意してから下げます。
事業の課題や技術的な悩みなどどんなことでもお聞かせください