ものづくりの要件定義を通してお互いに合意するには?

ものづくりの要件定義を通してお互いに合意するには?

本のまとめ

▼読んだ本は?

■はじめよう! 要件定義 ~ビギナーからベテランまで
■羽生章洋さん
http://amzn.asia/d/4CWuv95

▼要件定義の「要件」ってなに?

■要件とは「注文内容」のこと
■「作ってほしい人が」「作る人に出す」「依頼事項(リクエスト)」を明確に定めて、お互いに「合意」すること
■「作ってほしい人が」一方的に「要求」を並べるだけではだめ
■「注文」は作成者にとって、実現可能なものになっている必要がある
■「注文」は依頼者にとって、これならOK/納品できるといえるものである必要がある

▼要件定義の前にやっておくことは?

【1】企画
└プロジェクトの名称
└なぜそのソフトウェアを作るかという目的
└作るものの大枠/方向性
└作るものを利用するターゲット
└利用する人が得られるメリット
└作るための体制
└作るスケジュール/期限

【2】作成範囲
└大枠として、ソフトウェアの作る範囲/スコープを決める
└ソフトウェアの紹介用パンフレットを作るイメージ
└範囲を明確化して、対象外がどこかも決める

【3】連携箇所
└今回作るソフトウェアと連携してつながる箇所を決める

【4】行動シナリオ
└「ソフトウェアの利用者」「ソフトウェアの管理者」の両観点から、ソフトウェアを利用する流れを決める
└利用者が「商品を見る」→「商品を注文する」→「支払いする」のような一連の流れ
└管理者が「購入商品を確認する」→「出荷手配する」→「届いたことを確認する」のような一連の流れ

【5】土台
└ソフトウェアをのせるシステムアーキテクチャを決める

【6】要求一覧
└人が心の中に持っているだけの「要望」を、言葉や書面など「要求」に変えること
└「要求」がわかったらすぐに要件化するのではなく「できるかどうか?」検討する必要がある
└できない/NGを出す場合は「なぜNGなのか?」「ほかに代替案はないか?」を検討する必要がある

▼ソフトウェア開発の要件定義に必要なものは?

【1】UI(ユーザーインターフェース)
└ユーザーと接するもの
└画面(スクリーン)と帳票(プリンタからの印刷物)

【2】機能
└人の代わりに、ソフトウェアにやらせる仕事
└「消費税を計算する」なども機能のひとつ

【3】データ
└「消費税」「売上金額」などソフトウェアが仕事をするために必要な情報

■これら3つのことを「ワークセット」単位で考えていく
└ワークセットとは「施設を予約する」「商品を購入する」などソフトウェアが行うことを、1つの仕事にまとめたもの

▼UIを構成する要素は?

【1】データ項目
【2】操作項目
【3】レイアウト

▼UIを作るながれは?

【1】ラフなイメージを書く
└ペーパープロトタイピング/モックアップ/ワイヤーフレームなどの形で、画面の大枠を描く

【2】項目を並べる
└日付/名前/タイトルなど画面に表示される「データ項目」を一覧化する
└ボタンなど画面上でアクションを引き起こす「操作項目」を一覧化する

【3】実行操作をまとめる
└操作項目に基づいて実際に操作を実行した時の動きをまとめる

▼機能をまとめる流れは?

【1】出力内容を決める
└その機能を実行することで、実際に達成されることを決める
└例えば、消費税額を出力したい

【2】入力内容を決める
└出力をするための材料となる、入力を決める
└例えば、消費税額を出力するために「金額×税率」の入力を行おう

【3】処理を決める
└入力から出力に至る間に存在する、具体的な処理方法を決める
└データベースに「金額×税率」を用意しておいて、そこから取り出す処理にしよう

▼データベースとは?

■個々のワークセットを超えて、横断的にデータを保有するために用意するもの

■データベースを設計していく流れ
【1】1つのワークセットを選ぶ
【2】そのワークセットのUI/機能からデータベースに必要な項目を全部書き出す
【3】書き出したら、適切なまとまりに区分けする
【4】区分けとしては「◯◯する」など「動詞」で表現できるイベント系(エンティティと呼ぶ)をまず決める
【5】イベント系にぶら下がる形で、それらに必要な情報となる「名詞」で表現できるリソース系を決める
【6】例えば「靴(商品/リソース)を、3個(個数/リソース)、1,000円(金額/リソース)で注文する(イベント)」などのような形
【7】繰り返し項目(例えば「商品」が何度も使われる場合)を切り出し、ひとかたまりにして見出しを付ける
【8】エンティティごとのつながり(リレーション)を決める

▼データのライフサイクルを示すCRUDとは?

【1】Create:データを「生成」する
【2】Reference:データを「参照」する
【3】Update:データを「更新」する
【4】Drop/Delete:データを「消去」する

■ワークセット毎に、きちんとCRUDが行われているかを検証すれば、結果的にテストになる

▼要件定義を行う上で便利なツールは?

■Inkpod
■BEITEL
■Cacoo

思ったこと

日常生活にはあまり使われない「要件」を「注文」に見立てた上で、要件定義とは依頼者がこれを作りたいんだよねという要求を、作成者がその実現可能性を含めて作ることができる内容に変えた上で、最終的に両者が合意する形に持っていく流れだとまとめています。

プロジェクトを進めていく中で最も大事なのに最もないがしろにされがちな要件定義ですが、結局はここでお互いに合意される形にならなければ、その後はプロジェクトに関わるみんなが幸せにはならない、大事なタイミングだったりもします。

そして要件化するというのは、要望でもなく要求でもなく、何かを作り上げたい人同士がお互いに、これならオッケーだねといって、手を取り合って合意できないとだめだという、ほんとに大事で、でもとっても難しいことが優しく伝えられています。

でも、関係する人が増えれば増えるほど、お互いが手を取り合っていく過程やそこにかかるコストが相乗的に伸びていくことも多いです。

だからこそ本質に立ち戻って、お互いがWin-Winだと認識して、どこで手を取り合えるかを探ることが大切になるんすね!

ありがとうございました!

関連する記事