システム開発を始めるときに、絶対に欠かせないのが「要件定義」と呼ばれる工程です。これから開発していくシステムにおいて、システムの利用者(顧客)とシステムの開発者(ベンダー)が、プロジェクトの認識をあわせるために必要な工程になります。
「要件定義の成否がシステムの命運を分ける」といっても過言ではありません。
この記事ではシステム開発において重要な要件定義とは何か、またその役割やシステム開発における重要性を解説していきます。要件定義は「すべての始まりに等しい重要な工程」なので、しっかりと理解したうえで慎重に作業に当たる必要があります。
要件定義とは
要件定義とは、開発に取り組む前にユーザーの要望や課題を分析し、そこから必要となる機能に対する要求を抽出します。それらをベースとして、システム開発のプロジェクトをどのように進めていくかを具体的に決めていく作業になります。
主にユーザーがどの様な機能を欲しているかを定義していく側面と、進め方の大枠を決める側面があります。要するに「システム開発のゴールを決める作業」と言い換えられます。要件定義では、どのような機能を持ったシステムが納品物になるかを定義するのです。
要件定義を行うことで両者が合意に至るため、プロジェクトの大枠が決まります。スケジュールの目標を策定し、それに応じた予算取り等などに向けた準備を行っていきます。まさにプロジェクトにおける「上流」であるため、上流工程と呼ばれることが一般的です。
要件定義の進め方
プロジェクトを進めるための要件定義には、いくつか進め方があります。前提としては要件定義は「ユーザーのニーズ」を掘り起こすことから始めなくてはなりません。そこから始めていきシステムの大枠を決め、最後に根拠となるドキュメントを作成して合意するのが大きな流れです。
- 要望をヒアリングする
- 要求を分析・定義する
- ドキュメントを作成して合意する
要望をヒアリングする
システム開発への要望は日々の業務を行う上で「改善したいオペレーションがある」からに他なりません。見積もりの作業が大変だから効率化したい、経理の仕事を効率化したい、顧客との取引を効率化しデータを資産化したいなどが考えられます。
業務、および業務の一部をシステム化するにあたって、ユーザーが本当に困っている部分を見つけ出す必要があります。
何でもかんでも作ればいいというものでもありません。システム化できない部分もあるでしょうし、運用する側にとって「システム化したくない部分」もあるかもしれません。ユーザーの業務をヒアリングして、相手が真に欲しているシステムの情報を引き出すことが重要です。
要求を分析・定義する
前項ではユーザーへのヒアリングの重要性について紹介してきました。システム化を行う上では、相手が改善したい部分を聞き、通常業務について知る必要があります。その後に行うべきは、ヒアリングして挙がってきた要望や通常業務の流れからシステム化する部分を探っていくことです。
要求を分析するというのは、相手のヒアリングで挙がってきた内容を吟味し、どの業務をシステム化することが求められているのかを分析することです。ユーザーから聞いた内容であっても、その奥底にある「真の要求」が違う場合があったり、システム化しても効率化が図れない場合などもあるからです。
システム開発を行う技術者としての視点から、ユーザーの業務を分析して、相手が本当に欲している部分がなんであるのかを検討し、最終的に定義していく必要があるのです。ユーザーからの視点だけでなく、開発者としての視点を組み合わせて、システム化をするにあたって「改善すべきポイント」を定義していきます。
ドキュメントを作成して合意する
要件定義の工程の最後では、要件定義書を作成する必要があります。要件定義書は何かというと、要件定義の工程において「成果物」とされる書類です。単にお話を聞いてお金をもらうことは難しいため、要件定義の工程で導き出したシステム化への道標をアウトプットとして提出する必要があるのです。
- システム概要
- 全体図
- 業務要件
- システム要件
- 機能要件
- 非機能要件
全部ではありませんが、上記のようなシステム開発を行う上で必要となるドキュメント類を作成する必要があります。上記以外にもテスト設計やWBSといった、納品時に検討するべきことや納期・工数に関するドキュメントを作成します。
こうしたドキュメントは予算の策定などにも関わるものです。
要件定義としてシステム開発に必要なドキュメントを作成し、成果物を先方に確認してもらい、合意することで要件定義としての工程が完了となります。この後、実際にシステムを開発するかどうかは、予算等を考慮してユーザー側が決める必要がありますが、システム開発を行うための準備が完了したことになります。
要件定義の重要性
要件定義の工程はシステム開発において、最も重要なフェーズと言っても過言ではありません。
要件定義がうまくいかなければ、システム開発のゴールを間違ったまま進めてしまうことになります。実際のところ、システム開発における問題の多くは、要件定義フェーズがうまくいかなかった場合が多いとされています。要件定義で要求が漏れてしまうと、各工程における作業に手戻りが発生したりするためトラブルになることが多いのです。
システム開発が複雑性を持っている、という原因はここにあると考えています。
システム開発はユーザーの要望がある程度わかっていても、実はそれが真のボトルネックでない場合もありますし、要件定義の「一番最初の工程」でシステム全体、および細部を見積もる必要があるからです。開発中に何か違和感に気づくならまだしも、業務への理解が浅い一番最初の段階でシステム開発のゴールを決める必要があるのは非常にハードルが高いと言わざるを得ないのです。
要件定義は重要でありながら、複雑性を持たせてしまう原因になるため、より慎重に、考えられる限りの考慮をする必要があります。要件定義は一歩間違えればシステム開発の訴訟問題に発展してしまうほど、高い重要性をほこる工程といえるのです。