LESSON 4

開発の流れ

Lesson 3 では「誰が」システムを作るのかを学びました。今回は、その人たちがどんな順番で、何をしながら システムを完成させていくのかを見ていきます。

1. 家づくりで考える全体像

Lesson 3 に続いて、今回も家づくりで考えてみましょう。家が完成するまでには、だいたい次のような流れがあります。

家づくりシステム開発やること
施主の希望を聞く要件定義「何を作るか」を決める
間取り図を描く基本設計お客様から見える部分(画面・機能)を決める
施工図を描く詳細設計中の作り(プログラムの構造)を決める
工事をする開発(実装)実際にプログラムを書く
完成検査・内覧会テストちゃんと動くか、要望どおりかを確かめる
引き渡しリリースお客様が使い始められる状態にする
点検・修繕・リフォーム運用・保守動かし続け、直し、改善していく

2. 開発の工程

それぞれの工程を、もう少し詳しく見ていきます。各工程では、次の工程に引き継ぐための成果物(ドキュメントやプログラム)が作られます。 前半の「何を・どう作るか決める」工程を上流工程、後半の「作って確かめる」工程を下流工程と呼びます。

  1. 要件定義上流工程

    お客様に「何に困っているのか」「システムで何をしたいのか」をヒアリングし、作るものの範囲と条件を決めます。 「何ができればゴールか」を、お客様と開発側で合意する、最も大切な工程です。

    主な担当:PM・SE / 成果物:要件定義書

  2. 基本設計(外部設計)上流工程

    要件をもとに、お客様から見える部分を決めます。どんな画面があり、どのボタンを押すと何が起きるか、 どんな帳票が出力されるか、他のシステムとどうつながるか、など。お客様に確認してもらいながら進めます。

    主な担当:SE・デザイナー・インフラ・DB / 成果物:基本設計書、画面設計書

  3. 詳細設計(内部設計)上流工程

    基本設計を実現するための、システムの中の作りを決めます。プログラムをどう分けるか、データをどう処理するか、など。 PG がこれを読めば迷わずプログラムを書ける、というレベルまで具体的にします。

    主な担当:SE / 成果物:詳細設計書

  4. 開発(実装・プログラミング)下流工程

    詳細設計書をもとにプログラムを書きます。書いたプログラムが部品として正しく動くかを確かめる単体テストも、この工程で行います。 同時にインフラエンジニアは、システムを動かすサーバーなどの環境を用意します。

    主な担当:PG(フロント・バック)・インフラ / 成果物:プログラム(ソースコード)

  5. テスト下流工程

    部品を組み合わせたとき、システム全体として動かしたとき、お客様が実際に使ったとき……と、範囲を広げながら段階的に確かめます。 見つかった不具合は修正し、もう一度テストします(詳しくは4章)。

    主な担当:テスター・SE・PG・お客様 / 成果物:テスト仕様書、テスト結果報告書

  6. リリース(本番移行)下流工程

    完成したシステムを本番の環境に載せ、お客様が使い始められるようにします。 古いシステムからのデータの引っ越し(データ移行)や、利用者向けの説明・マニュアル作りもここで行います。

    主な担当:PM・インフラ・DB / 成果物:移行手順書、操作マニュアル

  7. 運用・保守

    システムが毎日問題なく動いているかを見守り、トラブルがあれば対応し、要望に応じて機能を改善していきます(詳しくは7章)。

    主な担当:運用・保守エンジニア・インフラ・SE / 成果物:運用手順書、障害報告書

ポイント: 工程の名前や分け方は、会社やプロジェクトによって少しずつ違います。「外部設計」「内部設計」と呼ぶ会社もあれば、 基本設計と詳細設計をまとめて「設計」と呼ぶこともあります。大切なのは、決める → 作る → 確かめる → 届けるという大きな流れです。

3. 作る工程と確かめる工程(V字モデル)

工程を左上から下へ「決めて作る」、下から右上へ「確かめる」と並べると、アルファベットの V の形になります。 これを V字モデルと呼びます。ポイントは、左右の工程がペアになっていることです。

要件定義何を作るか
受入テストお客様の要望どおり?
基本設計見える部分
総合テストシステム全体で動く?
詳細設計中の作り
結合テスト部品同士がつながる?
開発(実装)+ 単体テスト部品を作って、1つずつ確かめる
↘ 決めて、作る 確かめる ↗
左側で決めたことが正しく実現できているかを、同じ高さの右側のテストで確かめます。

たとえば、要件定義で決めた「お客様のやりたいこと」は、最後の受入テストで「本当にできるようになったか」を確かめます。 設計の段階から「これはどうやってテストするか」を考えておけるのが、V字モデルの良いところです。

4. テストの種類

テストは一度にまとめて行うのではなく、小さな範囲から大きな範囲へ、段階を踏んで進めます。

テスト何を確かめる?主に誰が?家づくりでいうと
単体テスト1つ1つの部品(プログラム)が正しく動くかPGドア・窓・蛇口などの部品を、取り付ける前に検査
結合テスト部品同士を組み合わせたとき、正しく連携するかPG・SE・テスター部屋ごとに、電気・水道がちゃんとつながっているか確認
総合テスト
(システムテスト)
システム全体として、設計どおりに動くか。大量のアクセスに耐えられるかSE・テスター家全体を通して、住める状態か完成検査
受入テスト
(運用テスト)
お客様が実際の業務で使って、要望どおりかお客様(開発側がサポート)施主さんの内覧会。「住んでみてどうか」を確かめる
ポイント: 不具合を直したら、その修正で他の部分が壊れていないかも確かめます。これを回帰テスト(リグレッションテスト)と呼びます。 「蛇口を直したら、なぜか隣の部屋の電気が消えた」……システムでは、こういうことが本当に起こるのです。

5. 「後から変更」はなぜ大変?

前の工程に戻ってやり直すことを手戻り(てもどり)と呼びます。 同じ「ここを変えたい」という変更でも、気づくのが後の工程になるほど、直すのが大変になります。

要件定義
メモを書き直すだけ
設計
設計書を書き直す
開発
設計書 + プログラムを直す
テスト
設計書 + プログラム + テストをやり直す
リリース後
上のすべて + 利用中のお客様への影響・データの修正
変更にかかる手間のイメージ。後の工程ほど、やり直す範囲が雪だるま式に増えていきます。

家で言えば、「窓の位置を変えたい」が間取り図の段階なら消しゴムで消すだけ。 でも、家が完成してからだと壁を壊して作り直しです。

だからこそ: 要件定義でお客様の要望をしっかり聞き取ることが、プロジェクト成功のいちばんの近道です。 営業やお客様窓口の方が最初に聞いた「ちょっとした一言」が、実はとても大事な要件だった、ということもよくあります。

6. 開発の進め方(ウォーターフォールとアジャイル)

工程をどんな順番・サイクルで進めるかには、代表的な2つのやり方があります。

ウォーターフォール

滝(waterfall)の水が上から下へ流れるように、工程を1つずつ順番に完了させて進める方法。 基本的に前の工程には戻りません。

要件定義→設計→開発→テスト→リリース
良いところ
計画・予算・スケジュールを最初に立てやすい。進み具合がわかりやすい。
苦手なところ
途中の仕様変更に弱い。完成品を見られるのが最後になる。
向いているもの
作るものがはっきり決まっているシステム(銀行・行政・基幹システムなど)

アジャイル

アジャイル(agile)は「素早い」という意味。小さな機能単位で「設計 → 開発 → テスト」を短い期間で繰り返し、 少しずつ完成に近づける方法。1回の繰り返しは1〜4週間程度で、代表的なやり方の「スクラム」ではスプリントと呼びます。

計画→設計・開発・テスト→リリース・振り返り↻ 繰り返す
良いところ
仕様変更に強い。動くものを早く見せて、意見をもらいながら改善できる。
苦手なところ
最終的な完成形・費用・期間を最初に見積もりにくい。お客様にも継続的な参加が必要。
向いているもの
変化の速い Web サービスやスマホアプリ、新しいサービスの立ち上げ

料理にたとえると

ウォーターフォールは結婚式のフルコース。メニューを事前にしっかり決め、当日はその通りに出します。途中で「やっぱり中華に」とは言えません。 アジャイルは常連さんの居酒屋。まず一品出して「もう少し濃いめがいい」と聞いたら、次の一品で調整する。食べながら一緒に最高の献立を作っていくイメージです。

実際の現場では: どちらが正解ということはなく、システムの性質やお客様の状況に合わせて選びます。 「大枠はウォーターフォールで決めて、画面まわりはアジャイルで改善する」のように、組み合わせることもよくあります。 また、試作品(プロトタイプ)を早めに作ってお客様に触ってもらう「プロトタイピング」という方法もあります。

7. リリースしてからが本番

システムは作って終わりではありません。むしろ、リリースしてから使われなくなるまでの期間のほうがずっと長いのが普通です。 何年、場合によっては10年以上、毎日動き続けます。

運用

システムが毎日正しく動くように見守る仕事。動いているかの監視、定期的なバックアップ、利用者からの問い合わせ対応など。

保守

システムを直したり、良くしたりする仕事。不具合の修正、法律や制度の変更への対応、新しい機能の追加、セキュリティの更新など。

家と同じで、定期的な点検や修繕をしないと、システムも少しずつ使いにくく、危なくなっていきます。 保守で新しい機能を追加するときも、小さな「要件定義 → 設計 → 開発 → テスト → リリース」の流れを繰り返します。

確認クイズ

選択肢をクリックしてください。

Q1. お客様に要望をヒアリングし、「何を作るか」を決めて合意する工程は?

Q2. 「どんな画面があり、どのボタンを押すと何が起きるか」を決める工程は?

Q3. 書いたプログラムを1つの部品として、正しく動くか確かめるテストは?

Q4. お客様が実際の業務で使ってみて、要望どおりかを確かめるテストは?

Q5. 「ここを変えたい」という変更が、いちばん少ない手間で済むのはどの段階で気づいたとき?

Q6. 新しいスマホアプリを、2週間ごとに少しずつ機能を追加し、利用者の意見を聞きながら改善していく。この進め方は?

まとめ