[tech]チケット駆動開発

id:kunitさんの[Git] gitだからこそできるチケット駆動開発のやり方を読んでたら、自分たちもチケット駆動開発的なものをやっていることに気がつきました。せっかくなので、ちょっと紹介します。

構成管理はCVSBTSはJIRAを使っています。チケット駆動ということを意識してはいませんが、ルールとして「構成管理にコミットするときには、コミットログにチケットIDと変更概要を記述する」ということを守っています。

日々の開発

日々の開発では、まず機能(ユースケース)ごとにチケットを起票します。このチケットは、管理タスクとして使用します。JIRAでは1レベルのサブタスクを定義する事ができます。この機能を利用して数日で達成できる単位(どちらかというと、CVSのコミットに都合の良い単位や開発者にアサインしやすい単位)で、サブタスクにチケットを分割していきます。サブタスクは、タスクが発生したり、おもいつく度に作成し、作業終了したらクローズします。

開発に着手すると、管理者が開発者にチケットをアサインします(開発者が自分でとりにいくのも可)。開発者は、設計を行い、ローカル環境で実装し、単体テスト終了後、CVSにコミットします。このときコミットログにチケットIDと変更概要を記述します。レビューもチケットベースで行っており、開発者がCVSにコミットした後、レビュー依頼としてチケットをレビュー担当にアサインしています。レビュー担当者は、コミット内容を確認し、レビュー記録をJIRAにまとめます。このチケットを開発者にアサインしています。開発者はコードを修正し、再レビューを依頼したり、単体テストを実施します。このあと、チケットをQA担当にアサインします。QA担当は、機能テストを実施し、不具合がなければ、チケットをクローズします。もし、不具合が見つかれば、QA担当はJIRAに不具合を報告し、開発者にチケットをリアサインします。

バグが発生したら、報告者は必ずチケットを起票し、不具合をJIRAにまとめます。報告したらすぐに、調査依頼として開発者にチケットをアサインします。開発者はバグ原因を調査し、内容をJIRAにまとめ、管理者にアサインします。管理者はバグの内容を精査し、バグの重大度、修正工数から、バグの修正時期を検討します。

バグを修正する場合、管理者が開発者にチケットをアサインします。バグを修正し、単体テストまで実施後、CVSにコミットします。コミット時にチケットIDと変更内容の概要をコミットログに記述します。コミット後、QA担当にチケットをアサインします。QA担当は機能テストを実施し、バグの修正を確認したら、チケットをクローズします。

チケット駆動開発を行ってみて、良かった事

チケット駆動開発っぽいものですが、良かったことは、

  • コミットログから、リリース物の内容を確認できるようになった。
  • コミット物がチケットIDとひもづいているので、あとから変更履歴を追いかけるのが簡単になった。
  • JIRAを見ればソースコードの変更の経緯がわかるようになった。
  • 個人が着手しているタスクが明確になった。
  • 情報がJIRAに集まるため、ますますJIRAに情報が集まるようになった。
  • いつかやらないと行けない仕事もJIRAにチケットとして起票するので、わすれにくくなった。

といった事ですね。また、オープンされたチケットが徐々に減ることで、プロジェクトが進んでいる感じがするのも良いところですね。

チケット駆動開発で注意すること

とは言っても、注意しないと行けない点もそれなりにあります。

大量のチケット保持

起票したチケットが一人の人に大量にアサインされると、管理されなくなるので注意が必要です。一人に100を超えるチケットがアサインされたら、たいてい管理されなくなり、重要な仕事が埋もれてしまったり、忘れ去られてしまったりしています。なるべくこういうことがないように、担当者ごとの保持チケット数は、常にみるようにしましょう。

ゴールの見えないチケット

ゴールの見えないチケットは、進捗が見えない上、いつまでたってもクローズされないので注意しましょう。これは、開発初期の頃良くありました。大きなタスクは数日で達成可能なサブタスクに分割するか、いっそのこと新しいタスクを定義しましょう。

有効期限切れのチケット

起票していたときには意味があったけど、今はもう意味がないチケットが半年もすると溜まってきます。これが有効期限切れのチケットです。有効期限切れのチケットは、定期的にチケットを見直してクローズしています。

厳密なワークフロー

JIRAのように自由にワークフローを定義できるツールを使うとありがちなのですが、大きく、複雑で、厳密なワークフローを定義したくなります。これは出来上がったときは、ホレボレするほど美しいものだったりするのですが、運用にはいると必ず失敗します。厳密すぎて、面倒になり、誰もチケットを起票しなくなルノです。ワークフローはシンプルに、これが鉄則です。シンプルであれば、開発者が工夫して勝手に自分たちに合う形にカスタマイズしてくれます。

どんな開発に向いている?

個人的な印象ですが、1、2ヶ月と短く、頻繁にリリースするプロジェクトに良く合っている気がします。チームの規模も中規模程度、10数人程度までがチケット数が爆発しないためか、合っているような気がします。

当たり前のことばかりかもしれませんが、参考になりますでしょうか?