I am currently working on a project with five other developers, and we are using subversion for our version control system. We have established that we have 12 steps leading up to the first release of our software. We identified milestones using version numbers (0.1 to 0.12) and descriptive labels. For instance:
- 0.1 - Navigation
- 0.2 - Search
- 0.3 - User Management
However, every few stages there is an external release consisting of the previous stages. So we get something like the following:
- 0.1 - Navigation
- 0.2 - Search
- 0.3 - User Management
- 0.4 - Alpha 1
Each of these steps can be developed in parallel, but they must also be QA'd in parallel. We do this by creating branches in subversion for each milestone, marked simply with the version number for the stage. The automated system independently creates each milestone and updates the application with the milestone number and revision number subversion from which the application was created. The version number is displayed noticeably in the application, so when the QA team looks at the version number, they can bind it to a specific milestone and know what should be QA'd and what should not. After the milestone passes the QA, it will be merged into the trunk, and any current development will be updated with the latest code.
However, there is an assumption (correctly) that increasing version numbers includes all previous versions. Unfortunately, the scheme described above may not occur, since one milestone may end earlier. For example, 0.3 is likely to end up to 0.1. This means that we will have an internal release of 0.3, which does not contain functionality from 0.2 or 0.1.
That's my problem. How is it reasonable for me to use the software version if several parallel releases (internal or other) can not be executed sequentially?
source share