システム開発のフェーズ(小人数規模)

初めてグループ開発を行う機会があったため、その時の体験を基にシステム開発のフェーズを軽く記す。

## 1日目 要件定義
- まずポジション決め(プロジェクトリーダー,サブリーダー,テクニカルリーダー,品質管理,DB管理)を行う。

A : 「プロジェクトリーダーどうする？ちな自分はコーディングだけやりたいからやりとうない。」
B : 「実装力も人望もあるDさんがいいな♪」
A,C,E,F : 「異議なし。」
D : 「おk。」
A,B,C,E,F : 「わーい(∩´∀｀)∩」
PL D : 「じゃ、サブリーダーやりたい人いる～？」
E : 「あなたを全力で支えます。」
PL D : 「ThanX!!」
SL E : 「次にテクニカルリーダーを決めましょう。この中で一番実装力があるCさんに任せたいのですが、良いでしょうか？」
C : 「えー、仕方ないなぁ(照)。まあ、いいよ。」
PL D, SL E : 「ありがとうございます！」
TL C : 「じゃ、AとFは品質管理を、BはDB管理やって。」
A,B,F : 「('◇')ゞ」

A : 品質管理
B : DB管理
C : TL
D : PL
E : SL
F : 品質管理

- 現状何が課題なのか、わざわざシステムを作らなければいけない背景と理由を営業から詳細にヒアリングする。

B :「お客様は小売店の方なのか。」
SL E : 「ふむふむ。紙で管理してて検索機能がない分、特定の在庫数の確認が難しいのね。加えて他店舗との在庫状況の共有が難しい。うおっと、リアルタイムで在庫を管理できないのはきついわね。それで在庫管理システムを作りたいのね。」
F : 「今時紙で管理してるのかよ。」
SL E : 「こら、そんなこと言わないの。」
PL D : 「そこで我々の出番ってわけか。」

- システム化を行うことでどのようなメリットがあるのか、システム名などを考える。

SL E :「品切れの予防と、無駄な在庫の削減などがメリットとして挙げられるわね。」
F :「システム名はどうする？」
A :「さくさくさんにしよう。」
B :「お客様はなんと言っている？」
A :「特にこだわりないそうです。」
PL D :「じゃ、さくさくさんで行こう。」

システム名 : さくさくさん
ターゲット : 小売店
システム概要 : 在庫管理システム

- スケジュールを決める

PL D : 「８日で完成させんぞ。」
F : 「ひえっ。」

スケジュール日程
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677833/5498e8da-70f6-0259-040b-b0c863dc08c5.png)


## 1, 2日目 基本設計
- 上記システムを作るのに具体的にどのような技術・実装が必要なのかを議論する。

TL C : 「このプロジェクトのメンバー、全員Javaちょっと触れるから使用言語はJavaで。フロントはJSPで。アプリケーションサーバとWebサーバはApache Tomcatで。」
A : 「JSTL嫌い。」
TL C : 「おい。」
PL D : 「フロントはAとEの二人がjsp書いて。DBはみんな馴染みがあるMySQL使おう。DBの設計はみんなで考えよっか。バックエンドの実装は適宜振る。」
all : 「ラジャ('◇')ゞ」

開発言語 : Java
AP,Web鯖 : Apache Tomcat
DB : MySQL
IDE : Eclipse

- テーブル定義(テーブル定義書の作成)を行う。
DL B : 「テーブル定義はこんな感じでいきます。」
SL E : 「シンプルね。」
A : 「素朴な疑問だけどER図どうやって作ったの？」
DL B : 「A5:SQL」
A : 「なるほど」

ER図の作成(一部のみ表示)
![zaiko.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677833/6cce9686-f5f7-3ae6-4477-7298181e9169.png)


- どのような機能が必要なのか考える。

SL E :「ざっくりと機能一覧はこんな感じ。」
![kinou.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677833/d0767778-92fc-31cf-a30c-d3f3a3a984d7.png)


- 画面遷移の定義
PL D : 「画面遷移はこんな感じ。実装に移ったら各自この図を確認してね。」
all : 「はーい。」

![画面遷移.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677833/50923e65-28cf-015e-fef3-ede23f53f356.png)


- フロントの構成を考える

TL C :「自分死ぬほどデザインセンスないからEさんに任せたい。」
F :「同じくセンスなし。」
SL E :「分かったわ。任せて。」

- 一次開発で何を行うのか決定する。

PL D : 「とりま一次開発ではログイン機能、商品検索、登録機能を実装しよう。二次開発では更新、削除機能、在庫情報更新機能の実装をしよう。」
all : 「はい！」

## 3~6日目 実装
- WBSの作成
今誰が何の作業を行っているのかを全てのメンバーが把握出来るようにする。
アローダイヤグラム、ガントチャートの作成、プロジェクトの方針決めを行う。

PL D :「みんな、次に言うことを固く守ってほしい。
行った実装の結果を画面共有で共有する。10分詰まったら質問する。最後に進捗管理シートにちょくちょく記入してよろし。」
all : 「承知しました！」

- メソッド作成の割り振り

TL C :「今回のプロジェクトではMVCモデルを扱うから、こんなディレクトリ構造にすっぞ～」
all :「おーう。」
TL C :「daoではデータベースアクセス処理を行ってる。entityで各パラメータのセッターとゲッター定義をしてる。pageでは諸々の機能のページ遷移の実装をしている。serviceではDBでのcrud処理の実装をしている。utilではデータベースの接続・切断を行うクラスを定義してる。」
F : 「説明大変助かる。」

```:主なディレクトリ構造
zaikokanri
     ┗ src/main ━ java/com/dev ━ dao ━ base ━ BaseDao.java
                               ┃     ┠ ItemDao.java
                               ┃     ┠ StockDao.java
                               ┃     ┗ StoreDao.java
                               ┗ entity dao ━ base ━ BaseEntity.java
                               ┃     ┠ Item.java
                               ┃     ┠ Stock.java
                               ┃     ┠ StockItem.java
                               ┃     ┗ Store.java
　　　　　　　　　　　　　　　　　┗ page ━ base ━ BaseServlet.java
                               ┃     ┠ LoginAction.java
                               ┃     ┠ SelectAction.java
                               ┃     ┠ RegistPage.java
                               ┃     ┠ RegistConfirm.java
                               ┃     ┠ UpdateItem.java
                               ┃     ┠ UpdateItemInfo.java
                               ┃     ┠ UpdateStockPage.java
                               ┃     ┠ UpdateStockAction.java
                               ┃     ┗ DeleteAction.java 
                               ┗ service ━ dao ━ base ━ BaseService.java
　　　　　　　　　　　　　　　　　 ┃     ┠ SearchService.java
                               ┃     ┠ UpdateService.java
　　　　　　　　　　　　　　　　　 ┗ util ━ DbUtil.java

```




## 6~8日目 テスト
PL D「このテストやってくれませんか？m(__)m」
TL C「もうやりました。」
PL D「はやっ！」
A : 「なんかえらってる。Cさん助けて。」
TL C : 「デバッグでログを確認するんじゃ。」
A : 「ふえふえ。」
B : 「なんかDB定義とjspでいくつか表記ゆれしてるせいで画面遷移が上手く行ってないね。」
A : 「着手します」

## 最終日
PL D : 「お客様に納品するね。」
A,B,C,E,F : 「はい！」
F : 「疲れた。焼肉食べに行こ。」
all : 「いこいこ～」