システム開発工程モデルとプロマネの基礎

こんにちは開発部のチョーピョーナインです。エンジニアだけと、お客様向けのサービスのプロマネを担当しています。
今回はプロジェクトを計画どおりに進めるために、ソフトウェア開発分野で体系化された、開発手順の基本についてお話したいと思います。
## プロジェクトとは何？
+ 目的と達成すべき評価可能な目標(QCD)が定められている
    + QCDとは
        + Q→Quality(品質)
        + C→Cost(コスト)
        + D→Delivery(納期)
+ 期間が決まっている
+ チームを組んで遂行する

### システム開発工程モデルの基本

基本はウォーターフォールモデル、スパイラルモデル、アジャイルモデルと、V字モデルというモデル４つがあります。

#### ウォーターフォールモデル
+ プロジェクトの各工程を時系列に並べる最も基本的な開発工程モデルです。（ウォーターフォールモデルとスパイラルモデルを2つを組み合わせて使ってるところもある。）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93548/0750be31-5ac7-c002-712a-e8b4ffc10eae.png)

+ 開発の流れ
    + 工程ごとの成果物を定義し、その成果物の完成をもって各工程が終了します。
    + そして、この成果物を前提条件として、次の工程に進みます。
+ メリット
    + 工程の進捗管理がしやすいことです。
+ デメリット
    + 要件定義の内容から「設計」→「開発」→「テスト」と各工程を行ってるため途中で仕様が変わった場合、"手戻り"が発生し、想定外なコストが掛かってしまいます。（要件定義の段階でしっかり要件を固めて開発しないといけない）
  
#### スパイラルモデル

+ ウォーターフォールと似てる様なんですが、システムを複数のサブシステム（もしくはフェーズ）に分割して、それぞれのサブシステム毎に順番に開発を進めていく開発工程モデルです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93548/32f46719-c22b-ad2d-b57b-736256919945.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93548/dd644bd2-aa41-d44c-8da5-12cef86c9428.png)

+ 開発の流れ
    + システムを複数のサブシステム（もしくはフェーズ）に分割します。
    + サブシステム1の開発を行います。
    + サブシステム1が完了したら、依頼主のお客様に確認してもらいます。
    + 次にサブシステム2の開発を行います。（サブシステム1で出たお客様の要望はサブシステム2にも反映していく）
    + サブシステム2が完了したら、再び依頼主のお客様に確認してもらいます。
    + このサブシステム作成→確認の流れをシステム全体が完了するまで繰り返していきます。
+ メリット
    + 仕様変更に柔軟に対応できる点があげられます。
+ デメリット
    + 初期の想定よりシステムの仕様が肥大化してコストが増大する危険性があります。（自社エンジニアじゃなくて外部エンジニアを使う場合は気を付けないといけない）
 
#### アジャイルモデル
+ スパイラルモデルと同じ短い期間でサブシステム（またはフェーズ）を繰り返していく開発工程モデルです。（大きな単位でシステムを区切るのではなく、小さな単位で実装とテストを繰り返し、開発を進めていく手法です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93548/747815ba-3872-457c-845a-753b6c13fdad.png)
+  開発の流れ
    +  顧客とエンジニアが少数精鋭の共同開発チームを作ります。
    +  共同開発チームは開発範囲全体をいくつもの短い範囲で区分します。
    +  この期間内に要件定義、設計、開発、テスト、リリースを行います。
    +  リリースできた機能や残っている業務プロセスの範囲を検討し、次に優先すべき区分を着手する。
+  メリット
    +  仕様で決めた機能を確認できるまでの時間が短い
    +  テストが組み込まれているため、不具合をいち早く発見できて欲しいシステムを一歩一歩目指すことができる
    +  早くリリースできるので、素早い事業展開が可能になる
+  デメリット
    +  細分化され、短期間でリリースが繰り返されていくため、全体のマネジメントが難しい
    +  予算と完成時期の見通しを立てづらい
    +  クライアントとの協力が必須

#### V字モデル

+ ソフトウェアの開発～テスト～リリースまでの一連の流れにおける、システム開発プロジェクトにおける開発工程とテスト工程の対応関係を表した１つのモデルです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93548/c4653422-14e9-77ed-b1da-5e4fbd71567b.png)

+  開発の流れ
    +  V字の左半分に、開発工程を上流工程から順番に右下がりに並べます。
    +  V字の右半分に、左の開発工程に対応したテスト工程を右上がりに並べます。
    +  V字の左右を見比べることで、実施されるテストがどのレベルの開発内容を検証するためのテストなのか、何に着目したテストが行われるのかを示すことができます。
+  メリット
    +  全体規模を把握しやすい
    +  工程ごとの担当、責任範囲を明確に分けやすい
    +  進捗管理を行いやすい
+  デメリット
    +  上位工程で間違いがあるとダメージが大きい
    +  変更要求に弱い
  
#### その他のモデル
+ 開発初期に試作品（プロトタイプ）を作成し、システムを発注したお客様に確認してもらう開発手法「プロトタイピングモデル」もある。
+ Plan（計画）→ Do（実行）→ Check（評価）→ Act（改善）の 4段階を実施し、1周したら最後のActを次のPDCAサイクルにつなげて、螺旋を描くように業務改善を繰り返す開発手法「PDCAサイクル」モデルもある。

#### まとめ

+ オークファンではいろいろなモデルを使っていますが、私が担当しているプロジェクトはV字モデルを使っています。
+ プロジェクトの進行段階が把握しやすいため、進捗状況に応じてコストや人員、スケジュールの調整が明確に決められるので外部エンジニアを使うときちょうどいいモデルと思います。

## プロジェクト管理は何？
+ いろいろなことを管理すること、PMBOK（Project Management Body of Knowledge-プロジェクト管理の知識体系）はプロジェクト管理要素を10個に分類している。
    + 統合管理
    + コスト管理
    + 調達管理
    + リスク管理
    + スコープ管理
    + 要員管理
    + コミュニケーション管理
    + スケジュール管理
    + 品質管理
    + ステークホルダー管理
+ 出典
    + https://products.sint.co.jp/obpm/blog/serial-umeda01
    + https://products.sint.co.jp/obpm/blog/project-management-objectives.html
+ プロジェクトマネジメントプロセス全体
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93548/44d0a22f-70be-84c9-35e5-6ace364fac13.png)

### 成功するプロジェクト管理
+ 先ほど説明したいろいろ管理するべきことがありますが、私がずっと使ってるのは以下のようになります。

#### スコープ管理
+ 「何を行うか」というプロジェクトスコープ、「何を作るか」という成果物スコープの2種類に分けてプロジェクトの指針を明確にします。
    + 業務フロー
    + 画面定義書
 
#### スケジュール管理
+ ガントチャートなどを用いて計画と実績を正確に管理します。また、計画変更に対し柔軟に対応するための管理も大切です。
    + WBS(Work breakdown structure) 
        + [Googleスプレッドシートを最強プロジェクト管理ツールにする方法](https://boxil.jp/mag/a65/)
        + [スプレッドシートでシンプル＆使いやすいガントチャート](http://maruo51.com/2018/10/08/spreadsheet-gantt/)
       
#### コミュニケーション管理
+ プロジェクトメンバー内のコミュニケーションを管理することで、円滑なプロジェクト推進を目指します。
    + 課題管理表
    + 会議の実施
        + 自社チーム内のMTG
        + 開発チーム内のMTG
        + クライアントでの定例MTG
        + 議事録

#### 品質管理
+ 単に品質を管理するだけでなく、品質テストに関するタスクまで管理し、品質管理スケジュールを効率よくします。
    + テスト計画書
        + システム概要
        + テスト概要
        + テストスケジュール
        + テスト環境
        + テストデータ
        + テスト実施
        + テスト観点
        + テストケース
    + バグ表
     
#### まとめ
+ 人は、すぐ忘れる。みんなが考えてることはバラバラで認識はすぐずれる。だから、文書や図にして可視化!
+ 見えないものは解決できない。逆に、見えるようにしておけば解決できる!
+ 先手、先手で考える、動く。問題が発生したら、1秒でも早く動く。
+ 一番大事なのは「チームワーク」。