home wiki.fukuchiharuki.me
Menu

[[../]]

* ブランチ作戦 [#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)===+