

基本設計を飛ばすと後で3倍の手戻りコストがかかります
システム開発の工程は、上流工程から下流工程まで段階的に進む開発手順を指します。各工程には固有の略語が使われており、プロジェクト管理やコミュニケーションにおいて欠かせない知識です。開発現場では「RD」「BD」「DD」といった略語が頻繁に使われるため、これらを理解しておくことでスムーズな情報共有が可能になります。
参考)システム開発工程とは?定義や流れ、よく使われる略称をわかりや…
工程を明確に分けることで、プロジェクトの破綻を防ぎ全体を管理しやすくなります。これは東京ドーム級のプロジェクトを、野球のイニングごとに分けて管理するようなイメージです。
上流工程は要件定義や設計など、システムの方向性を決める重要な段階です。一方、下流工程は実装やテストなど、設計に基づいて実際にシステムを作り上げる段階を指します。システムエンジニアやプロジェクトマネージャーが上流工程を担当し、プログラマーやテスターが下流工程を担当するのが一般的です。
参考)システム開発の上流工程とは?下流との違いや仕事の流れを徹底解…
工程を飛ばしたり順番を逆にしたりすると、後の工程で大幅な手戻りが発生します。手戻りコストは早期発見できた場合の3倍以上になることも珍しくありません。
つまり基本です。
システム開発は要件定義からスタートし、設計、実装、テスト、リリース、運用保守という順序で進みます。要件定義では「どのようなシステムを、どのような開発手法で開発するのか」を決めていきます。これはシステム開発全体の中で最も重要なフェーズです。
参考)フェーズ|用語集|カスタマーサクセス for Success…
基本設計では要件定義をもとにシステム全体の構造や主要な機能を設計します。大規模システムでは基本設計の精度がプロジェクト全体の成功を左右するため、慎重に進める必要があります。
参考)https://techtouch.jp/media/development/system-development-flow
詳細設計では基本設計をもとにプログラムの具体的な処理内容やデータ構造を定義します。詳細設計が明確であれば、開発者がスムーズにプログラムを作成でき、システム全体の品質向上につながります。修正が発生した際の影響範囲も把握しやすくなるため、開発の効率化にも寄与します。
実装工程では詳細設計書に基づいて実際にプログラミングを行い、システムを構築します。テスト工程では作成したプログラムが設計通りに動作するか、不具合がないかを確認します。テストは単体テストから結合テスト、システムテストへと段階的に進められます。
参考)システム開発の開発工程とは?10個のフェーズに分けて解説 –…
リリース後は運用保守フェーズに入り、システムの安定稼働とメンテナンスを継続的に行います。運用段階で発見された不具合の修正や、新機能の追加などもこのフェーズで対応します。
各工程を順守することが原則です。
システム開発の現場では、工程を表す略語が頻繁に使われます。RD(Requirements Definition)は要件定義を指し、システムにおいて実装すべき機能や仕様を具体的に文書化する工程です。適切な要件定義を行えば、開発の方向性が明確になり、設計や実装の精度が向上し、後の手戻りを最小限に抑えられます。
BD(Basic Design)は基本設計を指し、要件定義をもとにシステム全体の構造や主要な機能を設計する工程です。ED(External Design)は外部設計、DD(Detail Design)は詳細設計を意味します。外部設計ではユーザーから見たシステムの振る舞いを定義し、詳細設計ではプログラムの内部構造を詳細に設計します。
テスト工程にも略語があります。UT(Unit Test)は単体テストで、メソッド単位の最小単位でのテストを指します。IT(Integration Test)は結合テストで、複数のモジュールを組み合わせた際の動作を確認します。ST(System Test)はシステムテストで、システム全体が要件を満たしているかを検証します。OT(Operation Test)は受入テストで、実際の運用環境で問題なく動作するかを確認します。
他にもSA(System Analysis)は要求分析、UI(User Interface)はUI基本設計、SS(System Structure Design)は構造設計、FD(Function Design)は機能設計を表します。PG(Programming)は製造工程、つまりプログラミング作業を指す略語として使われています。
システム開発の開発工程とは?10個のフェーズに分けて解説
上記リンクでは、各工程の略称と英語表記が表形式でまとまっており、工程ごとの詳細な説明も読めます。
これらの略語を覚えておくだけでOKです。
上流工程と下流工程は、業務内容、担当者、必要なスキル、責任範囲において明確な違いがあります。上流工程の業務内容は、システムの目的や機能、性能などを定義する要件定義や、システムの全体像や仕様を設計する基本設計や詳細設計などです。下流工程の業務内容は、設計書に基づいてプログラムを作成する開発や、システムの動作や品質を確認するテストなどです。
上流工程はシステムの方針や方法を決定づける役割を担います。これはいわば、家を建てる際の設計図を作る作業に相当します。下流工程は上流工程で策定された要件定義にもとづいて、各種設計書に沿ってプログラミングをすすめます。システムの動作や品質の確認も下流工程に含まれます。
参考)システム開発の上流工程とは?下流工程との違いや大切なポイント…
担当者も異なります。上流工程はシステムエンジニアやプロジェクトマネージャーがシステム全体を決定して管理するため、大手のシステムインテグレーターが担当することが多いです。下流工程はプログラマーやテスターがシステム開発の一部を担当するので、下請けや関連会社が行うケースが一般的です。
上流工程で求められるスキルは、クライアントとのコミュニケーション能力、業務分析力、プロジェクト管理能力などです。下流工程で求められるスキルは、プログラミング技術、テスト設計能力、デバッグスキルなどの技術的な能力が中心となります。
上流工程の品質がプロジェクト全体の成否を左右します。要件定義の段階で失敗すると、下流工程でどれだけ優れた技術を使っても、最終的に顧客の期待に応えられないシステムになってしまいます。
参考)システム開発を成功させるために知っておきたい「5つの危険な兆…
上流の精度が原則です。
要件定義で失敗する原因として最も多いのが、開発者と依頼者の認識のずれです。この場合、プロジェクトの途中で仕様の変更ややり直しが必要になって費用や時間が想定以上にかかったり、プロジェクトそのものが失敗したりする可能性があります。
参考)要件定義が失敗する原因は?6つの失敗事例から学ぶ対策を解説
十分なヒアリングができていないことも大きな失敗要因です。経験や勘に頼って開発を進めていると工数を見誤ったり、依頼者側の要望を把握できず手直しが増えたりすることで失敗を引き起こします。システム開発プロジェクトの失敗(スケジュール遅延、コスト増、機能不全など)の主な要因は、依然として要件定義工程にあります。
要件定義で明確にすべき項目は、システムの目的、必要な機能、性能要件、セキュリティ要件、運用要件などです。これらを具体的な数値や条件で記述することで、後の工程での認識のずれを防げます。例えば「処理が速い」ではなく「検索結果を3秒以内に表示する」のように定量的に定義します。
開発スコープが大きすぎることも失敗の原因です。本来であればいくつかの開発案件として分けるべきなのに、一つの大きな案件の塊として扱ってしまっているということです。ビジネス上必ずなくてはならない機能が見極められていないことも挙げられます。後回しでも良い機能、まだ実際の使われ方の検証ができていない機能についても作ってしまおうとしているケースです。
参考)私が体験した要件定義における5つの失敗事例と事前に防ぐ方法
要件定義の失敗を防ぐには、定期的なレビュー会議の実施が有効です。開発者と依頼者が集まり、要件の解釈が一致しているか確認します。また、プロトタイプやモックアップを作成して、早い段階で具体的なイメージを共有することも効果的です。
要件定義書はプロジェクト関係者全員が参照する重要文書です。曖昧な表現を避け、誰が読んでも同じ解釈ができるよう記述する必要があります。
システム開発を成功させるために知っておきたい「5つの危険な兆候」
上記リンクでは、要件定義工程で見られるプロジェクト失敗の兆候と、その対策が詳しく解説されています。
曖昧さを排除することに注意すれば大丈夫です。
バイクのメンテナンスとシステム開発には共通点があります。どちらも定期的な点検とメンテナンスが必要です。バイクのエンジンオイル交換を3,000kmごとに行うように、システムも定期的な保守作業が不可欠です。
システムの運用保守フェーズでは、定常的な監視作業、障害対応、性能改善、セキュリティパッチの適用などが行われます。これはバイクの日常点検やオイル交換、タイヤの空気圧チェックに相当します。放置すると大きなトラブルにつながる点も同じです。
この感覚はシステム運用でも活かせます。
システムのパフォーマンス低下やエラーログの異常など、小さな変化に気づく感性が重要です。
違いもあります。
バイクは物理的な部品で構成されていますが、システムはソフトウェアで構成されています。バイクの部品は消耗しますが、ソフトウェアは使っても消耗しません。ただし、ソフトウェアは環境の変化(OSのアップデート、他システムとの連携変更など)によって動作しなくなることがあります。
システム開発では、要件定義の段階で「何を作るか」を明確にすることが最優先です。バイクでいえば、通勤用のスクーターを買うのか、ツーリング用の大型バイクを買うのか、オフロード走行用のバイクを買うのかを決めるようなものです。目的が曖昧なまま開発を始めると、誰も使わないシステムができあがってしまいます。
バイクのカスタムパーツを後から追加するように、システムも後から機能追加できます。ただし、基本設計が適切でないと、後からの機能追加が非常に困難になります。これは「拡張性」と呼ばれる設計上の重要な観点です。
プロジェクト管理ツールやコミュニケーションツールを活用することで、開発チームの情報共有がスムーズになります。例えば、Slackやチャットワークでリアルタイムにコミュニケーションを取り、JiraやRedmineでタスク管理を行うのが一般的です。これらのツールは多くが無料プランを提供しているため、小規模プロジェクトでも導入しやすいです。
感覚を活かせますね。
システム開発工程の略語と流れを理解することで、開発プロジェクトの全体像を把握でき、適切なコミュニケーションが可能になります。RD、BD、DD、UT、IT、STなどの略語は現場で頻繁に使われるため、覚えておくと役立ちます。
上流工程の品質がプロジェクト全体の成否を左右するため、要件定義や基本設計には十分な時間をかける必要があります。要件定義での失敗を防ぐには、開発者と依頼者の認識を一致させ、具体的かつ定量的な要件を定義することが重要です。
各工程を飛ばさず順序立てて進めることで、手戻りコストを最小限に抑え、高品質なシステムを効率的に構築できます。バイク乗りの感性である「小さな変化に気づく力」は、システム運用の場面でも活かせる貴重なスキルです。
参考)https://zenn.dev/yoshiyoshifujii/articles/f47ac5cea9b23d