- 追加された行はこの色です。
- 削除された行はこの色です。
- ソースコード管理実践/ブランチ作戦 へ行く。
- ソースコード管理実践/ブランチ作戦 の差分を削除
[[../]]
* ブランチ作戦 [#hf5beef7]
主だった作戦は次の3つ。
+ すべての集約先 trunk
+ リリースに向けたリリースブランチ
+ 開発初動に向けたタスクブランチ
** 1. すべての集約先 trunk [#k67c8ebe]
すべてのコードは最終的に ''trunk'' に集約させます。すべてのブランチは trunk からコピーし trunk に還ります。基本的にはブランチからブランチをコピーすることはしません。このこと、つまりすべての変更を必ず trunk にマージすることをルール化することで、バグフィックスやテーマ開発の適用漏れを防ぎます。
- すべてのブランチのコピー元
- すべてのブランチのマージ先
- trunk は永続する
+--[branche]--+
| |
--[trunk]--+-----+-------+-----+-->
| |
+--[branche]--+
** 2. リリースに向けたリリースブランチ [#qac72702]
リリースに向けたコードは ''リリースブランチ'' で安定化させます。およそ ST または UAT のフェーズ開始時点でそのリリースに対応するリリースブランチを trunk からコピーします。このリリースブランチからビルドするパッケージで ST や UAT を経て、このリリースブランチが安定したと言います。リリースはこのままこのリリースブランチからビルドします。リリース後、軽微なバグフィックスを入れたい場合はリリースブランチに変更を入れてこのリリースブランチからビルドして再リリースします。
ST や UAT で生じた変更とリリース後のバグフィックスはすべて trunk にマージしなければなりません。従って、次のテーマが待っているのでなければリリースブランチをコピ-するタイミングは遅いほどよいです。コピー後の変更を trunk にマージする手間が省けます。
- (ST, UAT, )リリースのためのブランチ
- リリース後すべての変更を trunk にマージ(少ない想定)
- 次のリリース後破棄
!: bug fix
x: end point
release release release
^ ^ ^
| | |
+--[release]--!--++---!---++-------------------->x|
| | | +--[release]--++-->
| | | | |
--[trunk]--+-----------------+--------+--------+--------------+-->
** 3. 開発初動に向けたタスクブランチ [#jead6bef]
UT までの各テーマ開発は ''タスクブランチ'' で安定化させます。開発開始時点でそのテーマに対応するタスクブランチを turnk からコピーします。このタスクブランチからビルドするパッケージで UT を経て、このタスクブランチが安定したと言います。IT はこのタスクブランチの変更分を trunk にマージした後 trunk からビルドするパッケージで実施します。これは、複数テーマを並行して開発する際に、各テーマごとのコードラインではなく、合わさったコードライン(つまりマージ先の turnk)が安定していると言うためです。IT 以降リリースブランチがコピーされるまでの変更は trunk に入れます。
- 各テーマ開発のためのブランチ
- 開発・UT後すべての変更を trunk にマージ
- trunk にマージ後破棄
+--[release]-->
|
--[trunk]--+--+----------++-------+------------->
| | || ^
| +--[task]--+| end of IT
| |
+--[task]------+
^
end of UT
* この作戦における各テストフェーズの意義 [#r3cc328f]
この作戦を採り各テストフェーズ(UT, IT, ST+UAT)に次の意義をもたせます。
:UT|各開発テーマで満たすべき機能の実装が完了したことを検証する
:IT|(次のリリースに向けて)各開発テーマで満たすべき機能が他の開発テーマの機能やバグフィックスと同時に正しく((「同時に正しく」とは、こちらで作成したデータがあちらの場面でというようなシナリオテストにおいて正しく、のこと))動作することを検証する
:ST+UAT|次のリリースに至るコードライン(からビルドするパッケージ)が満たすべき機能を備えていることを検証する
+===(ST+UAT)===>
|
--[trunk]--+----------+===(IT)===+-------------->
| |
+===(UT)===+