プロジェクト開発手法
同業者の人と話をして、プロジェクト管理手法についていろいろ勉強になったのでメモ。
- 割り込みタスクの場合は割り込みとして色を変えてチケットを作成する
- 単体テストのときは外部依存値はスタブにして固定値でテストできるようにする
- 毎週金曜日にふりかえりで開発内のミーティングを行い、内容を貼りだすようにしている。貼りだす内容は、燃え尽きたなど個人的な内容も入れている。来週やる内容もそこで決める。
- gitはmaster(リリース用)、develop用、単体開発のfutureを分けている
- リリース用ブランチに対しjskins(?)を使ってリリースしている。不整合があったら担当者にミサイルがあたるようになっている(youtubeに動画があるらしい)。その対応は最優先タスクになる。
- phpUnitでテスト作成している。それを仕様として作成するため必須としている。
- redmineのステータスにコードレビューをいれ、開発者以外の誰かがレビューをするようにしている
- タスクの工数にポイントとつけている。SQLインサートレベルを1ポイントとして、フェボナッチ数列のように大きくなるほどバッファをつくるようにポイントを決めている。これをやることで週にチームでどのくらいポイントを捌けるかわかるようになっている。
- phpUnitにテスト用データベース初期化+データ作成の処理も入れている
- NetBeansで開発者がPCで開発したものをサーバ上の開発者専用環境で実行してテストしている
- gitとredmineを使っている
- redmineはクライアントにも公開して共有している
- git-flowを使ってgitのタスクの流れをわかるようにしている
- クライアントが言ったことはリーダーが「忘れないようにメールしといて」といって、クライアントにも共有するようにしてメールに残るようにしておく。更にメールの一部をコピーしてチケットを作成する
- 通常開発より工数は大きくなるので細かくなりすぎないように注意している
おまけ
- プロジェクト管理ツールを開発するプロジェクトのとき、ザ・ゴールを全員読んでから取り掛かった
- 今はザ・チョイスを読んでいる
今回のプロジェクトはコミット時に自動テストすることを目標!と決めても、割り込みが優先になっていって期間が足りず、開発チーム内の効率がよくなるような作業は優先度が下がってしまい自動テスト化できるのとできないのがでてしまうことがほとんどです。
git、redmine、スタブ作成、リリース反映をコマンド化、についてはやるようになったものの、他社システム連携と要件FIXがボトルネックになって、割り込みタスクによって優先度の影響が狂って余裕がなくなることが多い、という感じです。
下記はできるようにしたいです。
- 開発者単位で環境依存のデータベース値、スタブ値を作成をして単体テストを作成してコミット
- クライアントとredmineを共有して仕様確認
- 振り返りMTGを管理工数が無駄に感じてしまっても意識的に行ってみる
- ザ・ゴールを途中までしか読んでなかったので読む。社員全員読んでもらう。
- 「忘れないようにクライアントにメールしといて」としてでもメールしておくようにする
- コードレビュータスクをつける(余裕があるプロジェクトじゃないと時間的にきつそうだけど)
うちは30人月のプロジェクトとか数年に1回しかなくて、5人月以内のが多い中で10人月以上のものが1個走ってる程度ですが、できるだけ負担を少なくして規模が大きいプロジェクトでも捌けるようにしていきたいです。 ソースが5万行を超えても開発しやすい状態を維持するというのはできるようになったつもりなので、得意不得意が大きい感じですが。
ほぼ直の案件も増えてき(てしまっ)たので、提案書作成と要件定義を強くしないといけないという課題もなんとかしないと。