【2024年01月版】非機能要件ヒアリング・提案メモ【初心者向け】

# はじめに

要件定義するときに、理解しておきたいことをまとめたメモです。初心者向けです。

IPAの [非機能要求グレード2018](https://www.ipa.go.jp/archive/digital/iot-en-ci/jyouryuu/hikinou/ent03-b.html) を参照して、自分用に作成しています。

ここに記述されていることを（取捨選択はありますが）、ヒアリング、または、提案できるようになっておくことで、心理的な安全が増加すると思います。

:::note info
英訳については、翻訳機を主に利用しています。
あとから英語版があることに気がついたので、そちらを参照する予定です。
:::

:::note info
中項目以降が書きかけです。
:::

# 非機能要件の大項目

```plantuml
@startmindmap
+ 非機能要件\n(Non-functional requirements)
++ 可用性\n(Availability)  
++ 性能・拡張性\n(Performance & Scalability)
++ 運用・保守性\n(Operability & Maintainability)
++ 移行性\n(Portability)
++ セキュリティ\n(Security)
++ システム環境・エコロジー\n(System Environment & Ecology)
@endmindmap
```

## 可用性 (Availability)  
システムがユーザーによってアクセス可能であり、必要な時に正常に機能する度合いを指します。システムのダウンタイムを最小限に抑え、高いアップタイムを保証することが目標となります。冗長性、障害回復計画、バックアップ戦略が重要です。
## 性能・拡張性 (Performance & Scalability)
システムが特定の負荷のもとで要求されたサービスレベルを満たす能力です。レスポンスタイム、処理能力、リソース利用効率などが指標になります。システムが将来の成長や負荷増加に対応できる能力です。縦方向のスケールアップ（リソースの増強）と横方向のスケールアウト（インスタンスの追加）があります。
## 運用・保守性 (Operability & Maintainability)
システムを円滑に運用するための特性で、監視、ログ管理、アップデートやパッチ適用の容易さなどが含まれます。システムの修正や機能拡張が容易であることを指し、コードの可読性、モジュール性、再利用性が重要です。
## 移行性 (Portability)
システムやアプリケーションが、ある環境から別の環境へ容易に移行できる能力です。システム構成要素の互換性、データのエクスポート・インポート機能、依存関係の管理などが重要です。
## セキュリティ (Security)
システムが不正アクセス、使用、開示、破壊、変更、損害から保護されている度合いです。認証、認可、データ暗号化、脆弱性管理、インシデント対応計画などが含まれます。
## システム環境・エコロジー (System Environment & Ecology)
システムが動作するためのハードウェア、ソフトウェア、ネットワーク環境などの総合的な構成を指します。システムの環境への影響を考慮した設計のことで、省エネルギー、リサイクル可能な材料の使用、廃棄時の環境負荷の低減などが該当します。

# 非機能要件の中項目

## 可用性 (Availability)  

```plantuml
@startmindmap
+ 可用性\n(Availability)
++ 継続性\n(Continuity)
++ 耐障害性\n(Fault Tolerance)
++ 災害対策\n(Disaster Recovery)
++ 回復性\n(Recoverability)
@endmindmap
```

### 継続性 (Continuity)
継続性は、予期せぬ事態や災害が発生した場合にも、企業や組織がその重要なビジネス機能やオペレーションを継続できる能力を指します。これには、ビジネス継続計画（BCP）の策定や、重要なシステムやプロセスに対するリスク評価、予防措置の実施が含まれます。目的は、事業活動を迅速に復旧させ、損失を最小限に抑えることにあります。

### 耐障害性 (Fault Tolerance)
耐障害性は、システムの一部が故障したり機能しなくなったとしても、システム全体が正常に動作し続ける能力を指します。これは、冗長性の導入、エラー検出技術、自動回復メカニズムによって実現されます。耐障害性を持つシステムは、障害発生時にもサービスの中断を最小限に抑えることができます。

### 災害対策 (Disaster Recovery)
災害対策は、自然災害や人為的な事故が発生した後、技術システムやデータを元の状態に復旧するプロセスや戦略を指します。これには、重要データの定期的なバックアップ、リカバリサイトの設定、復旧計画の定期的なテストと更新が含まれます。災害対策の目的は、被害を受けたシステムを迅速に復旧させ、ビジネスの中断を最小限に抑えることにあります。

### 回復性 (Recoverability)
回復性は、システムが障害や故障から復旧する能力を指します。これは、システムが正常な状態や、少なくとも受け入れられる運用レベルに戻るために必要な時間やプロセスに焦点を当てます。回復性の高いシステムは、障害発生時にデータ損失を防ぎ、迅速にサービスを再開できます。これには、適切なバックアップ戦略、効果的なリカバリプロセスの実装が必要です。

## 性能・拡張性 (Performance & Scalability)

```plantuml
@startmindmap
+ 性能・拡張性\n(Performance & Scalability)
++ 業務処理量\n(Workload Capacity)
++ 性能目標値\n(Performance Targets)
++ リソース拡張性\n(Resource Scalability)
++ 性能品質保証\n(Performance Quality Assurance)
@endmindmap
```

### 業務処理量 (Workload Capacity)
業務処理量は、システムが特定の時間内に処理できるトランザクションの量や、サポートできる同時ユーザー数など、システムが効果的に処理できる作業の量を指します。この要件は、システムの設計初期段階で重要であり、ハードウェアリソースの選定、ソフトウェアの構成、および全体的なアーキテクチャの決定に影響を与えます。業務処理量を適切に評価し、計画することで、ピーク時の負荷でもシステムのパフォーマンスが維持されるようにします。

### 性能目標値 (Performance Targets)
性能目標値は、システムのレスポンスタイム、トランザクション処理速度、データ処理能力など、達成すべき具体的な性能指標です。これらの目標は、ユーザーの期待値、ビジネスの要求、および競合他社の基準を基に設定され、システム設計とテストのガイドラインとして機能します。性能目標値を設定することで、開発チームは要件を満たすために必要な設計上の決定や最適化を行うことができます。

### リソース拡張性 (Resource Scalability)
リソース拡張性は、システムが将来的な成長に合わせて、容易に拡張可能である能力を指します。これには、サーバーの追加、ストレージ容量の増加、ネットワーク帯域の拡大などが含まれます。リソース拡張性を確保することで、システムはユーザーベースの成長やデータ量の増加に柔軟に対応でき、長期的なビジネスの成功を支えます。

### 性能品質保証 (Performance Quality Assurance)
性能品質保証は、システムが設定された性能目標値を満たすことを保証するためのプロセスと活動です。これには、性能テスト、モニタリング、およびチューニングが含まれます。性能品質保証活動を通じて、システムのボトルネックや最適化が必要な領域を特定し、継続的な改善を図ります。また、将来的な問題を予測し、事前に対処することで、システムの安定性と信頼性を高めます。

## 運用・保守性 (Operability & Maintainability)

```plantuml
@startmindmap
+ 運用・保守性\n(Operability & Maintainability)
++ 通常運用\n(Normal Operations)
++ 保守運用\n(Maintenance Operations)
++ 障害時運用\n(Operations During Failure)
++ 運用環境\n(Operational Environment)
++ サポート体制\n(Support Structure)
++ その他の運用管理方式\n(Other Operational Management Approaches)
@endmindmap
```

## 運用・保守性 (Operability & Maintainability)
### 通常運用 (Normal Operations)
通常運用は、システムが日常的に直面する状況において、効率的かつ効果的に機能するようにするための要件を指します。これには、システムがどのようにして利用可能であるべきか（運用時間）、データの損失を防ぐためにどのようなバックアップ戦略を採用すべきか、システムの健全性や性能を監視するためのメカニズム（運用監視）が含まれます。さらに、システム内のすべてのコンポーネント間で時刻が正確に同期されていることを保証すること（時刻同期）も重要です。
### 保守運用 (Maintenance Operations)
システムが長期にわたって最適な状態で機能し続けるために必要な活動群を指します。このプロセスは、システムの性能を維持し、将来的な問題を未然に防ぐために、計画的なメンテナンス、運用の効率化、パッチ・セキュリティ更新の適用、およびシステムの継続的な改善を含みます。
### 障害時運用 (Operations During Failure)
障害時運用（Operations During Failure）は、システムが予期せぬ問題や障害に直面した際に、迅速かつ効果的に対応し復旧するためのプロセスと戦略を指します。このアプローチは、システムのダウンタイムを最小限に抑え、ビジネスの連続性を保つことを目的としています。障害時の対応計画は、事前に準備され、定期的に見直される必要があり、システムの復旧作業、障害復旧の自動化、異常検知とその対応、および交換用部材の迅速な確保を包括的にカバーします。

### 運用環境 (Operational Environment)
運用環境（Operational Environment）は、システムが日常的に使用される環境の全体的な設定と管理を指します。これは、システムが効率的かつ効果的に運用され、維持されるための基盤を形成します。運用環境の構築と管理には、開発用環境と試験用環境の設置、マニュアルの準備、リモートオペレーションのサポート、および外部システムとの接続が含まれます。

### サポート体制 (Support Structure)
システムや機器の操作性や保守性を意味し、これには多くの要素が含まれます。システムや機器の運用・保守性を高めるためには、保守契約（ハードウェアやソフトウェア）、ライフサイクル期間、メンテナンス作業の役割分担、一次対応の役割分担、導入サポート、オペレーション訓練、サポート要員の確保、定期報告会など様々な要素を考慮する必要があります。

### その他の運用管理方式 (Other Operational Management Approaches)
システムの運用コストを抑え、サービス品質を維持向上のための、内部統制の対応、サービスデスクの整備、インシデント・問題の管理、構成・変更・リリース管理等、システムが正常に稼働し続けるための保守活動を円滑に行うための要件を考慮する必要があります。

## 移行性 (Portability)

```plantuml
@startmindmap
+ 移行性\n(Portability)
++ 移行時期\n(Migration Timing)
++ 移行方式\n(Migration Method)
++ 移行対象（機器）\n(Migration Target (Equipment))
++ 移行対象（データ）\n(Migration Target (Data))
++ 移行計画\n(Migration Plan)
@endmindmap
```

## セキュリティ (Security)

```plantuml
@startmindmap
+ セキュリティ\n(Security)
++ 前提条件・制約条件\n(Assumptions and Constraints)
++ セキュリティリスク分析\n(Security Risk Analysis)
++ セキュリティ診断\n(Security Diagnosis)
++ セキュリティリスク管理\n(Security Risk Management)
++ アクセス・利用制限\n(Access and Usage Restrictions)
++ データの秘匿\n(Data Concealment)
++ 不正追跡・監視\n(Fraud Tracking and Monitoring)
++ ネットワーク対策\n(Network Measures)
++ マルウェア対策\n(Malware Measures)
++ Web対策\n(Web Measures)
++ セキュリティインシデント対応/復旧\n(Security Incident Response/Recovery)
@endmindmap
```

## システム環境・エコロジー (System Environment & Ecology)

```plantuml
@startmindmap
+ システム環境・エコロジー\n(System Environment & Ecology)
++ システム制約/前提条件\n(System Constraints/Assumptions)
++ システム特性\n(System Characteristics)
++ 適合規格\n(Conformance Standards)
++ 機材設置環境条件\n(Equipment Installation Environment Conditions)
++ 環境マネージメント\n(Environmental Management)
@endmindmap
```

# 非機能要件の小項目

:::note info
小項目の説明、メトリクスについては後日追記予定
:::

## 可用性 (Availability)  
### 継続性 (Continuity)

```plantuml
@startmindmap
++ 継続性\n(Continuity)
+++ 運用スケジュール\n(Operation Schedule)
+++ 業務継続性\n(Business Continuity)
+++ 目標復旧水準（業務停止時）\n(Recovery Level Objective (Business Interruption))
+++ 目標復旧水準（大規模災害時）\n(Recovery Level Objective (Large-Scale Disaster))
+++ 稼働率\n(System availability)
@endmindmap
```

### 耐障害性 (Fault Tolerance)

```plantuml
@startmindmap
++ 耐障害性\n(Fault Tolerance)
+++ サーバ\n(Server)
+++ 端末\n(Terminal)
+++ ネットワーク機器\n(Network Equipment)
+++ ネットワーク\n(Network)
+++ ストレージ\n(Storage)
+++ データ\n(Data)
@endmindmap
```

### 災害対策 (Disaster Recovery)

```plantuml
@startmindmap
++ 災害対策\n(Disaster Recovery)
+++ システム\n(System)
+++ 外部保管データ\n(External Storage Data)
+++ 付帯設備\n(Ancillary Equipment)
@endmindmap
```

### 回復性 (Recoverability)

```plantuml
@startmindmap
++ 回復性\n(Recoverability)
+++ 復旧作業\n(Restoration Work )
+++ 可用性確認\n(Availability Confirmation)
@endmindmap
```

## 性能・拡張性 (Performance & Scalability)
### 業務処理量 (Workload Capacity)

```plantuml
@startmindmap
++ 業務処理量\n(Workload Capacity)
+++ 通常時の業務量\n(Normal operation volume)
+++ 業務量増大度\n(Degree of operation volume increase)
+++ 保管期間\n(Storage period)
@endmindmap
```

### 性能目標値 (Performance Targets)

```plantuml
@startmindmap
++ 性能目標値\n(Performance Targets)
+++ オンラインレスポンス\n(Online Response)
+++ バッチレスポンス（ターンアラウンドタイム）\n(Batch Response (Turnaround Time))
+++ オンラインスループット\n(Online Throughput)
+++ バッチスループット\n(Batch Throughput)
+++ 帳票印刷能力\n(Reporting Printing Capability)
@endmindmap
```

### リソース拡張性 (Resource Scalability)

```plantuml
@startmindmap
++ リソース拡張性\n(Resource Scalability)
+++ CPU拡張性\n(CPU Scalability)
+++ メモリ拡張性\n(Memory Scalability)
+++ ディスク拡張性\n(Disk Scalability)
+++ ネットワーク\n(Network)
+++ サーバ処理能力増強\n(Server Processing Enhancement)
@endmindmap
```

### 性能品質保証 (Performance Quality Assurance)

```plantuml
@startmindmap
++ 性能品質保証\n(Performance Quality Assurance)
+++ 帯域保証機能の有無\n(Presence of bandwidth guarantee function)
+++ HWリソース専有の有無\n(Presence of HW resource dedication)
+++ 性能テスト\n(Performance testing)
+++ スパイク負荷対応\n(Spike load handling)
@endmindmap
```

## 運用・保守性 (Operability & Maintainability)

### 通常運用 (Normal Operations)

```plantuml
@startmindmap
++ 通常運用\n(Normal Operations)
+++ 運用時間\n(Operation Time)
+++ バックアップ\n(Backup)
+++ 運用監視\n(Operation Monitoring)
+++ 時刻同期\n(Time Synchronization)
@endmindmap
```

### 保守運用 (Maintenance Operations)

```plantuml
@startmindmap
++ 保守運用\n(Maintenance Operations)
+++ 計画停止\n(Planned Downtime)
+++ 運用負荷削減\n(Operational Load Reduction)
+++ パッチ適用ポリシー\n(Patch Application Policy)
+++ 活性保守\n(Active Maintenance)
+++ 定期保守頻度\n(Regular Maintenance Frequency)
+++ 予防保守レベル\n(Preventive Maintenance Level)
@endmindmap
```

### 障害時運用 (Operations During Failure)

```plantuml
@startmindmap
++ 障害時運用\n(Operations During Failure)
+++ 復旧作業\n(Recovery operations)
+++ 障害復旧自動化の範囲\n(Scope of failure recovery automation)
+++ システム異常検知時の対応\n(Response when system abnormalities are detected)
+++ 交換用部材の確保\n(Provision of replacement parts)
@endmindmap
```

### 運用環境 (Operational Environment)

```plantuml
@startmindmap
++ 運用環境\n(Operational Environment)
+++ 開発用環境の設置\n(Setting up the development environment)
+++ 試験用環境の設置\n(Setting up the testing environment)
+++ マニュアル準備レベル\n(Level of manual preparation)
+++ リモートオペレーション\n(Remote operation)
+++ 外部システム接続\n(Connection with external systems)
@endmindmap
```

### サポート体制 (Support Structure)

```plantuml
@startmindmap
++ サポート体制\n(Support Structure)
+++ 保守契約（ハードウェア）\n(Maintenance Contract (Hardware))
+++ 保守契約（ソフトウェア）\n(Maintenance Contract (Software))
+++ ライフサイクル期間\n(Lifecycle Period)
+++ メンテナンス作業役割分担\n(Division of Maintenance Tasks)
+++ 一次対応役割分担\n(First Response Role Assignment)
+++ サポート要員\n(Support Team)
+++ 導入サポート\n(Implementation Support)
+++ オペレーション訓練\n(Operation Training)
+++ 定期報告会\n(Regular Reporting Meeting)
@endmindmap
```

### その他の運用管理方式 (Other Operational Management Approaches)

```plantuml
@startmindmap
++ その他の運用管理方式\n(Other Operational Management Approaches)
+++ 内部統制対応\n(Internal Control Compliance)
+++ サービスデスク\n(Service Desk)
+++ インシデント管理\n(Incident Management)
+++ 問題管理\n(Problem Management)
+++ 構成管理\n(Configuration Management)
+++ 変更管理\n(Change Management)
+++ リリース管理\n(Release Management)
@endmindmap
```

## 移行性 (Portability)
### 移行時期 (Migration Timing)
```plantuml
@startmindmap
++ 移行時期\n(Migration Timing)
+++ 移行のスケジュール
@endmindmap
```
### 移行方式 (Migration Method)
```plantuml
@startmindmap
++ 移行方式\n(Migration Method)
+++ システム展開方式
@endmindmap
```
### 移行対象（機器） (Migration Target (Equipment))
```plantuml
@startmindmap
++ 移行対象（機器）\n(Migration Target (Equipment))
+++ 移行設備
@endmindmap
```
### 移行対象（データ） (Migration Target (Data))
```plantuml
@startmindmap
++ 移行対象（データ）\n(Migration Target (Data))
+++ 移行データ量
+++ 移行媒体
+++ 変換対象（DBなど）
@endmindmap
```

### 移行計画 (Migration Plan)
```plantuml
@startmindmap
++ 移行計画 (Migration Plan)
+++ 移行作業分担
+++ リハーサル
+++ トラブル対処
@endmindmap
```

## セキュリティ (Security)
### 前提条件・制約条件 (Assumptions and Constraints)
```plantuml
@startmindmap
++ 前提条件・制約条件\n(Assumptions and Constraints)
+++ 情報セキュリティに関するコンプライアンス
@endmindmap
```

### セキュリティリスク分析 (Security Risk Analysis)
```plantuml
@startmindmap
++ セキュリティリスク分析\n(Security Risk Analysis)
+++ セキュリティリスク分析
@endmindmap
```

### セキュリティ診断 (Security Diagnosis)
```plantuml
@startmindmap
++ セキュリティ診断\n(Security Diagnosis)
+++ セキュリティ診断
@endmindmap
```

### セキュリティリスク管理 (Security Risk Management)
```plantuml
@startmindmap
++ セキュリティリスク管理\n(Security Risk Management)
+++ セキュリティリスクの見直し
+++ セキュリティリスク対策の見直し
+++ セキュリティパッチ適用
@endmindmap
```

### アクセス・利用制限 (Access and Usage Restrictions)
```plantuml
@startmindmap
++ アクセス・利用制限\n(Access and Usage Restrictions)
+++ 認証機能
+++ 利用制限
+++ 管理方法
@endmindmap
```

### データの秘匿 (Data Concealment)
```plantuml
@startmindmap
++ データの秘匿\n(Data Concealment)
+++ データ暗号化
@endmindmap
```

### 不正追跡・監視 (Fraud Tracking and Monitoring)
```plantuml
@startmindmap
++ 不正追跡・監視\n(Fraud Tracking and Monitoring)
+++ 不正監視
+++ データ検証
@endmindmap

```
### ネットワーク対策 (Network Measures)
```plantuml
@startmindmap
++ ネットワーク対策\n(Network Measures)
+++ ネットワーク制御
+++ 不正検知
+++ サービス停止攻撃の回避
@endmindmap
```

### マルウェア対策\n(Malware Measures)
```plantuml
@startmindmap
++ マルウェア対策 (Malware Measures)
+++ マルウェア対策
@endmindmap
```

### Web対策 (Web Measures)
```plantuml
@startmindmap
++ Web対策\n(Web Measures)
+++ Web実装対策
@endmindmap
```

### セキュリティインシデント対応/復旧 (Security Incident Response/Recovery)
```plantuml
@startmindmap
++ セキュリティインシデント対応/復旧\n(Security Incident Response/Recovery)
+++ セキュリティインシデント対応/復旧
@endmindmap
```

## システム環境・エコロジー (System Environment & Ecology)
### システム制約/前提条件 (System Constraints/Assumptions)
```plantuml
@startmindmap
++ システム制約/前提条件\n(System Constraints/Assumptions)
+++ 構築時の制約条件
+++ 運用時の制約条件
@endmindmap
```

### システム特性 (System Characteristics)
```plantuml
@startmindmap
++ システム特性\n(System Characteristics)
+++ ユーザ数
+++ クライアント数
+++ 拠点数
+++ 地域的広がり
+++ 特定製品指定
+++ システム利用範囲
+++ 複数言語対応
@endmindmap
```

### 適合規格 (Conformance Standards)
```plantuml
@startmindmap
++ 適合規格\n(Conformance Standards)
+++ 製品安全規格
+++ 環境保護
+++ 電磁干渉
@endmindmap
```

### 機材設置環境条件 (Equipment Installation Environment Conditions)
```plantuml
@startmindmap
++ 機材設置環境条件\n(Equipment Installation Environment Conditions)
+++ 耐震/免震
+++ スペース
+++ 重量
+++ 電気設備適合性
+++ 温度（帯域）
+++ 湿度（帯域）
+++ 空調性能
@endmindmap
```

### 環境マネージメント (Environmental Management)
```plantuml
@startmindmap
++ 環境マネージメント\n(Environmental Management)
+++ 環境負荷を抑える工夫
+++ エネルギー消費効率
+++ CO2排出量
+++ 低騒音
@endmindmap
```

# さいごに

おぼえておきたいですね

# 参考リンク

[IPA システム構築の上流工程強化（非機能要求グレード）紹介ページ](https://www.ipa.go.jp/archive/digital/iot-en-ci/jyouryuu/hikinou/ent03-b.html)