要件とは
要件定義の解説前に、まずは要件とは何かについて解説します。
ITシステム開発における要件とは、実際に実現する事です。要件は、要求を基に定義します。
次に、ITシステム開発における要求とは、システムの買い手・利用者の「こういうことがしたい」という希望です。
ITシステム開発では様々な制約があります。金銭的な制約もあれば、納期の制約もあります。出てきた要求を全て実現できれば良いですが、制約によってはそれが無理なケースも多いです。
そのため要求を洗い出したら、そのあとは制約を踏まえて「実際に実現する事」を決める=要件を決める必要があります。
要求・要件は、ビジネスレベル・業務レベル・システムレベルに分かれてそれぞれ定義されます。
ビジネスレベルでは、事業としての要求・要件を定義します。例えば売上や投資利益率を改善する等です。ビジネス要求を定義したら、制約を踏まえてビジネス要件を定義します。
業務レベルでは、ユーザーの行動レベルでの要求・要件を定義します。これは上記で定めたビジネス要件を達成するための要求・要件でなければなりません。例えば、売上の停滞理由は営業の客先訪問率の低さにあるが、営業は事務業務のとある箇所に時間を取られすぎて客先訪問に集中できないためその業務を効率化する等です。業務要求を定義したら、制約を踏まえて業務要件を定義します。
システムレベルでは、システムとして何をするかの要求・要件を定義します。これは上記で定めた業務要件を達成するための要求・要件でなければなりません。例えば、業務のとある箇所を改善するためにシステムでこういう機能を実現する等です。システム要求を定義したら、制約を踏まえてシステム要件を定義します。
要件定義とは
要件定義とは、要件を決めることです。
しかし「決める」と言っても、お客様ありきの仕事では単に自分の中で意志決定するだけでは終わるものではありません。定めた要件がわかる成果物があることと要件についてのステークホルダーとの合意が最終的には必要となります。
ITシステムの開発プロジェクトの失敗理由のひとつとして、要件定義の失敗がよく挙げられます。単純に決めた要件の質が低いこともあれば、合意できていないステークホルダーがいたためにトラブルとなることもあります。
外部設計との違い
要件定義よりもう一段具体度の高い作業ステップとして、外部設計があります。
要件定義が最終的に何が実現出来れば良いかを決めるのに対して、システム開発における外部設計はそれを実現するためのシステムの振る舞いを決めます。例えば画面や操作方法等です。
しかし、現実的には会社によって言葉の指す範囲が異なる可能性はあり得ます。実際に仕事で成果物を作る際には、その会社の相場を理解しそれによって両者を分割することは必須となるでしょう。自分としての見解は持ちつつ、コミュニケーションのために柔軟に対応していくのが良いでしょう。
https://envader.plus/article/55
成果物
要件定義の成果物を何とするかについては統一的な見解があるわけではありません。しかしIPAが提供する「ユーザのための要件定義ガイド」が「要件定義ドキュメント」と称して要件定義の成果物を定義しており、ベンチマークとなるでしょう。(参照先:ユーザのための要件定義ガイド 第2版)
ステークホルダーとの合意
成果物はその内容をステークホルダーと合意する必要があります。
ステークホルダーとは対象プロジェクトの利害関係者です。プロジェクトとの利害関係はプロジェクトごとに違うため、プロジェクトが立ち上がる都度洗い出す必要があります。
ステークホルダーと要件を合意していなければ要件の是非を問えず要件定義が無意味化し、ステークホルダーに漏れがあればトラブルの危険があります。この合意を経てようやく要件定義が完了したと言えます。
誰が、いつ、どう要件定義するか
責任者と主体
要件定義には、責任者と主体がいます。責任者とは「この要件定義の内容で問題ない」と最終的に承認する者であり、主体とは実際に要件定義を行う者です。
自社開発であれば言わずもがな両者を自社が担うことになります。
一方で受託開発であれば、責任者と主体にズレがあります。この場合、責任者は顧客となります。要件定義とは、飲食業で言えば注文内容であり、注文内容の正確性に責任を持つのが注文者というのは当然です。しかし要件定義の主体は顧客と開発企業の両方です。顧客はITのプロではない以上、開発企業も主体的に要件定義を行わなければ、プロジェクトはほとんど確実に失敗するでしょう。
責任者 | 主体 | |
---|---|---|
自社開発 | 開発企業 | 開発企業 |
受託開発 | 顧客 | 顧客・開発企業 |
また、最終的な責任者は基本的には顧客ですが、それを理由に開発企業がプロとしての水準を満たさない仕事をした場合、開発企業側も責任を負うことになる可能性はあり得ます。詳細は記事「【徹底解説】非機能要件とは何かについて完全に理解する」の「専門家の責務としての暗黙の要件」をご参照ください。(参照先:【徹底解説】非機能要件とは何かについて完全に理解する>専門家の責務としての暗黙の要件)
要件の変更を許容するか
要件が定まるタイミングついて、論点となることは2点あります。「いつ決めるか」「決まった後に変更を許容するか」です。
まず「いつ決めるか」ですが、要件定義は開発の最初期に行われるべきです。なぜならシステムの挙動も実装も、要件によって決まるからです。要件とは「何を作るか?」であって、それが決まっていない段階でモノを作ることはできません。
次に「決まった後に変更を許容するか」についてです。
当然ですが、「許容せず、最初に決めた内容で開発する」のが最も望ましいことは言うまでもありません。これは俗にウォーターフォール開発と呼ばれます。ただしこれには条件がつき「最初に決めた内容が正しければ」という但し書きがつくでしょう。では、最初に決めた内容が正しくなかった場合はどうなるのでしょうか。そもそも最初に正しい内容を決め切ることなど無理であればどうすべきでしょうか。正しくないと判明したにもかかわらず開発を続けるべきでしょうか。
「現実的に最初に正しい要件を定め切るのは難しく、要件定義フェーズ以降も要件定義の変更可能を認める」という立場がアジャイル開発です。こちらではビジネス上必要とあれば要件を次々に変更していきます。
しかし当たり前ですが、納期やスコープに変化がない状況で要件ばかり変えていたらプロジェクトは立ち行かなくなります。アジャイル開発は納期等の制約への変更なしに要件定義を可能にする魔法の杖ではありません。間違っていた要件=実現しても無価値なものを実現するぐらいであれば変更すべきであり、素早く価値検証することでその誤りを早期検知しようというスタンス・方法論でしかありません。
そのためこれらの開発体制には契約内容が関わってきます。契約の種類は多くありますが、ここで問題となるのは請負契約と準委任契約です。非常に簡略化すると、前者は完成物に対する責任を負う契約で、後者は工数に対する責任を負う契約です。要件定義で言えば、前者は完璧な要件定義に対して責任を負うことになり、後者は要件定義を行う工数に対して責任を負うことになります。
つまり、アジャイル開発をしたいのに請負契約をしてしまった場合、開発企業は要件の変更がどれだけあっても無償でそれに対応しなければならなくなります。これはビジネスとして現実的とは言い難いでしょう。そのため、アジャイル開発であれば基本的には準委任契約でいくべきです。もし請負契約でやるのであれば、そもそも要件の変更を認めない(アジャイルとはしない)か、相当なバッファを見込んだり、要件変更時の対応について現実的な方策を契約で合意するしかないでしょう。
いつ要件定義をする | 要件の変更を認める | 望ましい契約形態 | |
---|---|---|---|
ウォーターフォール | 最初期 | 認めない | どちらでも。開発フェーズによって使い分けることはあり得る。 |
アジャイル | 最初期 | 認める | 準委任 |
要件をどう定めるか
要件定義のためにはまずは顧客の要求をヒアリングするところから始めます。
しかし顧客が言う要求が常に正しいとは限りません。要求内容自体が正しくない可能性がありますし、仮に要求内容が正しかったとしてもその表現が正しくないため開発側が取り違えていたりする可能性があり得ます。前者であれば「なぜそれがしたいのか?」を問うことで、より根源的な欲求を探る必要があるでしょう。コンサルティング業界でしばしば言われる「顧客が欲しいのはドリルではなく穴である」というような話がありますが、手段ではなく目的を把握することでより良い手段を検討できる可能性があります。後者であれば自分なりの整理や他事象との矛盾の検討等によって、顧客と認識をすり合わせる必要があるでしょう。
定められた要件は最終的には文章として成果物化する必要があります。これは曖昧さのない表現で記述される必要があります。2つ以上の意味に解釈できる場合、認識にズレが起き得ます。しばしば「エンジニアに必要なのは日本語の力」といったことが言われますが、要件の記述に必要であることがそう言われる理由のひとつと言えるでしょう。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.09.01
問題解決のアプローチを例えで理解する
本記事では、さまざまな問題解決のアプローチを身近な例えを用いて解説し、それぞれの手法の特徴や適用シーンを考察していきます。
- アーキテクティング
2022.12.29
内部設計の目的と成果物
内部設計とは、外部設計を実現するシステム内の処理・構造を決めることです。
- アーキテクティング
2023.01.31
アジャイル開発とは?他の開発手法とどう違うの?
アジャイル開発とは、個人との対話・動くソフトウェア・顧客との協調・変化への対応を重視するソフトウェア開発です。
- アーキテクティング