よいチケットは不幸を防ぐ
- 再現できないから直せない
- ぱっと見面倒そうなので後回しにする
チケットに情報が不足していると「誰かが」それを調べ・確認し、追記しなければなりませんが、
そのような「予想外のタスク」は地味にスケジュールを圧迫します。
- 書いてある通りに直したのにお客さんに「思ってたんと違う」と言われてやり直し
- 直したら今までOKだったところが壊れて結果的にバグが増える・やり直し
開発は往々にして「仕様書に書いてあることを実装すればOK」ではありません。
製品の歴史的経緯、市場の傾向、バグの勘所、開発メンバーの顔ぶれ、お客さんの性格・ビジネスの進め方、無数のミーティング・交渉の積み重ね、等々から、「暗黙の要求」「将来のための最適解」を「読み取って」対応する必要がありますが、
「プロジェクトに途中から参加したメンバー」や「忙しい開発者」には、それら事前知識を十分に知る時間が取れません。
…などと書きましたが、単純に
- 何のために切られたか分からない一行チケット
- 直される当てがない積みチケット
- 何をどうしたのか確認のしようがない「直した詐欺状態」のチケット
- 書かれた通り実装したのにリリース後にリオープンされるチケット
- 仕様考慮漏れのためにデグレで遅延するチケット
が好きではないので、「そのチケットを無事にクローズさせるために必要十分な情報が書かれた理想のチケット」を追求しようという話です。
テンプレート
背景: ※ある場合のみ。なければ省略
環境:
Revision: commit XXXXXXX (7桁以上)
Device: NexusS (4.1.2), iPhone6 (8.1.3)
Test Data: ※現象が起きるデータ、コンテンツ、ファイル、ページ
再現手順:
- アプリを起動してテストデータを表示する
- ...
実動作(現象):
期待動作:
再現率: ※100%のときは省略してもよい
ログ: ※クラッシュログなど、必要な時
背景:
(主に仕様策定や機能実装チケットで)なぜこのチケットが起票されたのか、このチケットを対応することで最終的に実現すること/解決したい課題、などを記載する。
例えば、「商品を横断的に検索する機能実現のため」や「クライアント側の修正が困難なためサーバー側で対応する必要がある」、「AppStoreのレビューでXX機能についての改善要望が多かったため」など。
x: XXがしたいからXXを実装する
→ o: XXをすることでOOがしたいから(OOをすることを想定したXXの実装ができる。OOをするための最適解はXXではないことに気付ける)
環境:
いつでも/誰でも、確実に再現ができるよう、端末・OS・コンテンツなどの情報を記載する。
Jenkinsでビルドされたものを使用した場合は、ビルド番号も記載する。
再現手順:
なるべく簡単・確実に再現できる手順を調査し、記載する。
(再現が面倒・時間がかかる・難しいチケットは修正しにくく、改修確認しづらい)
実動作(現象):
いつでも/誰でも、どのような現象かが理解できる/再現したかしないかを判断できるように分かりやすく、具体的に記載する。
NGワード: おかしい、変、不正、異常、崩れる
x: 表示がおかしい(←どうおかしいの?)
→ o: 文字サイズが変わらない
言葉で表現しにくい現象は、スクリーンショットを使う。
x: 画面の一部が白くなる(←一部ってどこ?どんなふうに白くなるの?)
→ o: 画面の一部が白くなる(添付画像参照)
期待動作:
いつでも/誰でも、期待動作かどうかを判断できるように分かりやすく、具体的に記載する。
NGワード: 正しい
x: 検索が正常に動作すること(←何ができれば正常なの?)
→ o: 検索でヒットしたページへ移動し、検索ワードをハイライトすること
言葉で表現しにくい現象は、スクリーンショットを使う。
x: 正しく表示される(←どういう表示が正しいの?)
→ o: 正しく表示される(添付画像参照)
【重要】影響範囲のバグ発生・見逃しを予防するため、現象に関連する仕様も記載する。
x: 背景色が設定した色に変わること
→ o:
- カテゴリA,Bの各条件の時、背景色が設定した色に変わること
- モードXの時も設定した色に変わること
- モードYの時は設定によらず白背景で表示すること
x: 文字列がハイライトされること
→o :
- 文字列がハイライトされること
- 背景色を設定で変更しているときでもハイライトされること
- モードX,Yの時もハイライトされること
未来の自分のためのチケット作成
何百・何千と起票されてはクローズされていくチケット群。
整然と並べられただじっと対応されるのを待っているチケット群。
忘れた頃に掘り起こされては埋もれ、一瞥されては閉じられていくチケット群。
時間の経過とともに蒸発していく情報をできる限り記録して、未来の誰かの「?」に答えられるように、頑張ってチケットを書きましょう。