はじめに
「画面を速く表示する」「多くの利用者が同時に使えるようにする」といった要求だけでは、設計やテストの基準にはなりません。どの機能を、どの利用条件で、どの程度の速さや処理能力にするのかを具体化する必要があります。
性能設計では、性能要件を応答時間、同時利用者数、処理件数、データ量、資源利用などの条件へ落とし込み、システムの構成や処理方法、性能テストへつなげます。この記事では、性能設計の目的、決める項目、要件から設計と検証へ進める流れを解説します。
この記事で分かること
- 性能設計とは何か
- 性能要件と性能設計の違い
- 性能設計で決める項目
- 性能要件を設計とテストへつなげる流れ
- 性能設計で起こりやすい失敗
性能設計とは
性能設計とは、システムに求められる処理速度や処理能力を、実現方法と確認方法へ具体化する設計です。利用者が待てる時間、同時に利用する人数、一定時間に処理する件数、扱うデータ量などを整理し、その条件で必要な性能を満たせる構成を考えます。
性能要件と性能設計は役割が異なります。性能要件は「何を満たす必要があるか」を示し、性能設計は「その条件をどのように実現し、どのように確認するか」を決めます。
| 観点 | 性能要件 | 性能設計 |
|---|---|---|
| 目的 | 必要な性能水準を定める | 性能水準を実現・確認できる形へ具体化する |
| 主な内容 | 応答時間、同時利用者数、処理件数などの目標 | システム構成、処理方法、資源利用、テスト条件 |
| 判断すること | 何を満たせば要求を達成したといえるか | どの条件と方法で要求を満たすか |
性能設計は、完成したシステムが遅かったときにプログラムだけを修正する作業ではありません。必要な性能によって、システム構成、データの持ち方、処理の分担、外部システムとの連携方法などが変わるため、設計の前提として早い段階から扱います。
非機能要件全体の中で性能がどのような位置付けになるかは、機能要件と非機能要件の違いとは?システム設計で重要な考え方をわかりやすく解説で説明しています。
性能設計で決める項目
性能設計では、目標値だけでなく、その目標が成立する利用条件と測定条件をセットで決めます。
| 項目 | 設計で整理すること |
|---|---|
| 応答時間 | 操作や処理を開始してから結果が返るまでに許容できる時間 |
| 処理件数・スループット | 一定時間内に処理する必要がある件数やデータ量 |
| 同時利用 | 同時に操作する利用者数や、同時に実行される処理数 |
| データ量 | 現在の件数、保存期間、将来の増加見込み |
| 資源利用 | CPU、メモリ、データベース接続など、利用できる資源と上限 |
| 測定条件 | 対象機能、通常時・ピーク時、データ量、測定環境、合格基準 |
例えば、「3秒以内に表示する」という目標だけでは不十分です。同時利用者数やデータ量が異なれば、同じ機能でも必要な設計は変わります。どの機能を、どの条件で測定するのかまで決めて初めて、設計とテストの判断基準になります。
性能要件を設計とテストへつなげる流れ
1. 利用条件を整理する
誰が、いつ、どの機能を、どの程度利用するのかを整理します。通常時とピーク時の利用者数、処理頻度、データ量、将来の増加見込みが性能設計の前提になります。
2. 目標を測定可能にする
「高速」「大量」「快適」といった表現を、応答時間、処理件数、同時利用者数などの目標へ変えます。画面操作、一括処理、外部連携など、処理の目的に応じて基準を分けます。
3. 目標を設計へ反映する
性能目標を満たすために、システム構成、処理の分担、データの取得範囲、同期処理と非同期処理の使い分け、資源の割り当てなどを検討します。特定の高速化手法を先に選ぶのではなく、目標と利用条件から必要な設計を判断します。
4. テスト条件へ落とし込む
想定する同時利用者数、データ量、実行時間、測定対象、合格基準を性能テストの条件として整理します。設計時と異なる条件で測定すると性能要件を満たしたか判断できないため、要件、設計、テストで同じ前提を共有します。
非機能要件が曖昧なまま残りやすい理由は、非機能要件が最後まで曖昧になる理由で解説しています。
工程ごとに決める内容
性能に関する判断は、一つの工程ですべてを決めるのではなく、要件定義から設計、テストへ進む中で具体化します。
| 工程 | 主に決めること |
|---|---|
| 要件定義 | 必要な性能水準と、その前提となる利用条件 |
| 基本設計 | 機能ごとの性能目標、システム全体の構成、ピーク時やデータ量の前提 |
| 詳細設計 | 処理の分担、データの取得・更新方法、並行処理や資源利用 |
| 性能テスト | 負荷条件、測定方法、合格基準、結果の確認方法 |
基本設計と詳細設計の役割は、基本設計とは?目的と決めることをわかりやすく解説と詳細設計とは?目的と決めることをわかりやすく解説で説明しています。工程名や境界が異なる場合でも、性能目標、実現方法、テスト条件を対応付けることが重要です。
注文履歴検索で性能設計を考える例
注文履歴検索について「すぐに表示できるようにする」という要求があったとします。このままでは、設計者もテスト担当者も、何を満たせばよいか判断できません。
そこで、通常時とピーク時の同時利用者数、保存する注文件数、検索対象期間、表示件数、許容する応答時間を整理します。「通常時は3秒以内」「ピーク時は5秒以内」と決める場合も、対象となる利用者数とデータ量を合わせて定義します。
設計では、検索対象の範囲、一度に取得・表示する件数、画面表示と時間のかかる出力処理を分けるかなどを検討します。テストでは設計時の条件を再現し、目標時間を満たすか確認します。ここで示した数値は例であり、実際の目標は業務、処理の重要度、許容できる待ち時間、コストを踏まえて決めます。
性能設計で起こりやすい失敗
| よくある失敗 | 問題 |
|---|---|
| 「高速」「大量」とだけ決める | 設計判断やテストの合格基準にならない |
| 目標値だけを決める | 利用者数やデータ量が異なると同じ条件として比較できない |
| 現在の利用量だけを見る | 運用後のデータや利用者の増加に対応できない |
| 設計とテストの条件が異なる | 性能要件を満たしたか判断できない |
これらの失敗に共通するのは、性能目標と前提条件が分離していることです。対象機能、利用条件、データ量、目標値、測定方法を一組の性能条件として管理します。
まとめ
性能設計とは、システムに求められる処理速度や処理能力を、実現方法と確認方法へ具体化する設計です。性能要件で定めた目標を、同時利用者数、処理件数、データ量、資源利用、測定条件と結び付けます。
性能は実装後にプログラムを高速化するだけの問題ではありません。要件、設計、テストで同じ性能条件を共有し、利用状況の変化も考慮することで、必要な性能を継続して確認できるシステムになります。

コメント