見出し画像

要求を言語化し、仕様化する技術を学んだ話


はじめに

こんにちは。
最近は PO として要求を理解して仕様を適切な日本語で言語化したいと思い、「[入門+実践]要求を仕様化する技術・表現する技術」という本を読んでいます。
今回は、この本で学んだことをアウトプットとして記事に起こしたいと思います。

要求を書く

1. 要求には「範囲」がある

要求を書く際に最も重要な発見は、適切に表現された要求には「範囲」があるということでした。この「範囲」の概念は、以下の点で非常に重要です:

  • 抽象的な表現でありながら、実現したいことの具体的な範囲を示すことができる

  • この範囲が、そこに含まれるべき「仕様」の抽出を容易にする

2. 適切な要求の表現方法

要求の表現方法によって、その後の仕様化のプロセスが大きく変わることを学びました。以下は本書でも紹介されていた例です。

Before:「1 週間の天気予報を表示する」

After:「天気予報をネットから入手して、最初の 2 日分は時間単位で表示し、その後の 5 日分はそれぞれ1日単位で予報を表示する」

この例から分かるように、適切に表現された要求は:

  • より具体的な範囲を示している

  • 実現すべき機能の詳細を明確にしている

  • 仕様化のための手がかりを多く含んでいる

3. 動詞の重要性

要求の範囲が示され、その範囲の中の動きが動詞の形で表現されることで、その要求を満たすべき「仕様」が抽出されやすくなります。上記の例では:

  • 「入手する」

  • 「表示する」

といった動詞が使われています。
仕様とは、そこにある「動き」= 動詞に対して、具体的な制約や処理内容や選択肢などを記述したものなので、要求という振る舞いの中に含まれている「動き」をすべて表現してしまえば、必要な仕様をモレなく記述することができます。

4. 要求の理由を理解する

要求には必ず理由があります。この理由を理解し、要求と組み合わせることで、

  • 依頼者の真の意図が明確になる

  • 要求の表現をより適切に修正できる

例えば、「天気予報を表示する」という要求の理由が「外出の計画を立てやすくするため」だとすれば、単に予報を表示するだけでなく、外出に適した時間帯をハイライトするなどの機能を追加することで、より適切な要求表現に修正できるかもしれません。

5. 要求と理由のミスマッチに注意

要求と理由がフィットしない場合、以下のような問題が潜んでいる可能性が高いことを学びました。

  • 要求そのものが不純化しているか、要求の表現が適切でない

仕様を書く

1. 仕様の定義

  • 仕様とは、要求(実現してほしいこと)を満たすべき具体的な振る舞いの記述

  • 「仕様」であるということは、要求を発する側、要求を実現する側、実現したことを検証する側の間で、具体的であるという意味で合意できたものを指す

この定義から、仕様は単なる技術的な記述ではなく、関係者間のコミュニケーションツールとしても機能することがわかりました。

2. 仕様化のタイミング

仕様をいつ書くべきかについて、重要な洞察を得ました。

  • 適切な仕様化の方法を持っており、その技術に慣れているのであれば、仕様化は早い方が良い

  • 設計段階や実装段階でわかることでも、要求の仕様化の段階で明らかにすることで、多くのメリットが得られる

3. 早期仕様化のメリット

早期に仕様化することで、以下のようなメリットがあることを学びました。

  1. 仕様の項目数の見積もり値を調整するための実績データが得られる

    • これにより、プロジェクトの規模やコストの見積もりの精度が向上します。

  2. 仕様間の衝突にも速く気づくことができる

    • 早期に矛盾や問題点を発見し、解決することができる

  3. 仕様が見えたことで機能の実現に対するリスクが見える

    • 潜在的な技術的課題や実装の困難さを事前に把握できる

  4. 設計や実装のイメージができる

    • 開発者が具体的な実装方法を早期に検討できる

  5. 設計や実装の工程に入って実現方法に迷うことが減る

    • 明確な仕様があることで、開発の方向性が定まる

  6. 実装中に他の機能の仕様を確認することが容易になる

    • 機能間の整合性を保ちやすくなる

これらのメリットにより、早期仕様化に使った工数は、後の工程で十分に回収できることがわかりました。

4. 適切な仕様の書き方

仕様を書く際の重要なポイントとして、以下を学びました。

  • 否定表現などの曖昧な表現を避ける

例えば、以下のような仕様があったとします(本書で紹介されていた例です)。

不適切な例:
「データを処理しきれないときは、それ以上データを受信しない」

この仕様は曖昧で、具体的な動作が不明確です。これを以下のように改善できます。

改善例:
「データを処理しきれないときは、それ以上データの送信を一時中断するように要請する」

この改善により

  • 具体的な動作(送信の一時中断を要請する)が明確になります。

  • 前後の仕様を見ても、then と else の両方が明らかになり、わかりやすくなります。


この記事が気に入ったらサポートをしてみませんか?