システム開発していく工程の中で、最も上流に位置する工程に、「要件定義」というものがあります。
ユーザーがシステムに求めるものや、システムに期待される役割や効果を明確にし、それを実現するために必要な機能や性能等の条件(要件)を定義していく、システムの方向性を左右する非常に重要な工程です。システム開発が成功するか、失敗するかは、この要件定義にかかっているといっても過言ではありません。
開発前に目的を明確にする要件定義
要件定義は、設計、実装作業の前工程として行われ、ユーザーがそのシステムで何をしたいのか、なぜそのシステムが必要なのか、システムの目的(要求定義)に基づき分析、検討を行い、その実現のために実装しなければならない機能や性能などを明確にしていきます。
ユーザーの要求(システムに期待すること、システムの目的、役割)をまとめる作業を「要求定義」、それをシステム要件(機能や満たすべき条件(性能))にまとめていく作業を「要件定義」と分けることもありますが、両者をまとめて要件定義と呼ぶ場合もあります。
ユーザーサイドはシステムに求める要求をより具体的に示し、開発サイドは、それを正しく理解して、機能や性能といった技術的な要件にまとめていく必要があり、ユーザーサイドと開発サイドの最初にして、最も重要なコミュニケーションということができるでしょう。
ユーザーとの擦り合わせが重要なポイント
要件定義において重要なポイントには、以下のようなことが挙げられます。
・ユーザーがシステムに求めるものを明確にするために、そのシステムで何がしたいのか、なぜそのシステムが必要なのかなるべく具体的に想像し、定義させること
・ユーザーサイドと開発サイドの間で十分に話し合い、上記のようなシステムに期待すること、役割、目的の情報を共有化し、しっかりとした認識の統一、相互理解を深めること
・開発サイドは上記のような要求の理解に基づき、システムの目的に沿った機能や性能を要件として定義すること
要件定義は、ユーザーサイドがシステムに求めるものを明確にし、開発サイドがそのユーザーの求めるものを理解するため、ユーザーサイドと開発サイドの認識合わせをする重要な工程です。
この工程でのコミュニケーション不足や目的を曖昧にすることは、開発の失敗に繋がりかねません。
初期段階において目的が明確になっていないことや、ユーザーサイドと開発サイドの意識合わせが不十分であることが理由で失敗するプロジェクトの多くを占めています。
従ってこの工程では、ユーザーサイドと開発サイドが、求める要求と必要となる要件について、徹底的に議論し話し合うことが必要となります。
要件定義においてプロジェクトの目的を明確にし、ユーザー、開発両者の意識を統一することで「目的のブレ」や「仕様の変更や追加」といったシステム開発失敗の原因発生を抑制し、成功プロジェクトへ導く第一歩となるのです。
アジャイル開発における要件定義
ここまでは、主にSoR(System of Record)といわれるシステムにおける要件定義についての考え方でした。その一方でSoE(System of Engagement)の分野においては、明確化しにくく厳密な要件定義が難しいケースがあります。これまでに前例がない、何が正解がわからない中で、仮説を立てて試行錯誤しながら、開発途中での仕様変更が必要不可欠になるようなシステム開発には、アジャイル開発が向いています。
アジャイル開発においては、「ユーザー(クライアント)は要件(要求)を正確に明言化および理解できていない」という前提で要件定義をする必要があります。要件を厳密に定義できないため、誰が・なぜ・何をしたいのか、といった目的を明確にした上で、「実際に作りながら検証する」「フィードバックを得て改善・改良しさらに検証する」ことを繰り返すことで、求める目的にマッチしたシステムに近づけていきます。
このような短いサイクルで開発・検証・改善(仕様変更)を繰りかえす開発スタイルには、ローコード開発という手法やツールが適しています。