私は4人の開発者と2人のテスターのチームを運営しており、すべてのスプリントでPSPを作成するというスクラムの原則を順守しようとしています。つまり、完了したすべてのユーザーストーリーを使用して潜在的なリリースを作成し、POが自由に処理できるように公開サーバーに保存する必要があります。
私の問題は、スプリントの最後に一部のストーリーが完了していないときに、技術的にビルドを作成する方法です。コードはチェックインされていますが、テストに完全には合格していません。
完了したコードのみをチェックインする場合、つまりコードが完全にレビューされ、テストされている場合、コードベースとマージが異なる可能性があり、悲惨な結果になる可能性があります。たとえば、開発者Aと開発者Bは、アセンブリXを変更するさまざまな機能に取り組んでいます。開発者Aはコーディングを終了し、アセンブリXをテストにプッシュします。翌日、Dev Bはコーディングを終了し、AssemblyXをプッシュしてテストします。機能Aにはバグがあり、機能Bは完璧です。おっと、スプリントは終わりました。では、Aではなく機能Bを使用してPSPを作成するにはどうすればよいですか?
重要なのは:
次のいずれかを実行できます。
最後のオプションでは、不完全なストーリーを出荷しますが、ユーザーはそれらを利用できません。コードベースにはコードのみが存在します。要件は、他のすべてのユーザーストーリーが機能している必要があることです。
私もはるかに単純なものを使用しました(ただし、スクラムのようなソリューションではありません)。完成したストーリーを壊さなければ、不完全なストーリーは削除しませんでした。レビューミーティングで、これらのストーリーを完成させることができず、機能しないため使用すべきではないと述べました。このオプションは、エンドユーザーが完成したストーリーを検証するだけで、スプリントの直後に実際の作業に製品を使用しない内部リリースの場合にのみ可能です。
ここでの根本的な問題は、スプリントの最後に行われていないストーリーです。それはあなたが解決しようとすべき問題です。
言い換えれば、「スプリントの終わりまでにすべてのストーリーをどのように終わらせることができるか」とチームに尋ねます。 「半分完成したストーリーを管理するためにプロセスをどのように適応させることができるか」ではありません。
重要なのは、コードが「ビルドを壊す」ことを許可しないことです。つまり、テストに合格しないコードはチェックインしないでください。毎晩自動化されたビルド/テストサイクルを実行する場合、これはすべて自動化されているはずです。
失敗したコードは引き続きリポジトリにブランチとして保存され、PSPの一部にはなりません。
特に、継続的インテグレーションの実践と、これをサポートするように設計されたMercurial( [〜#〜] kiln [〜#〜] )のようなソースコード管理システムを利用する必要があります。
Dev Aはコーディングを終了し、AssemblyXをプッシュしてテストします。翌日、Dev Bはコーディングを終了し、AssemblyXをプッシュしてテストします。長編Aにはバグがありますが、
フィーチャーAのストーリーには、ユニット/受け入れ/統合テストがあると仮定します。
開発者Bは、ステージング領域で自分のコードをチェックインします。機能Aのテストを含むすべてのテストに合格すると、機能Bのコードが自動的に本番環境にマージされます。
分散バージョン管理で上記を行うことができます