A baseline is a 'snapshot' in time of one version of each artifact in the project repository. It provides an official standard on which subsequent work is to be based, and to which only authorized changes can be made. After an initial baseline is established every subsequent change to a baseline is recorded as a delta until the next baseline is set.
Uppon joining a project, Developers populate their work areas with versions of directories and files represented by a baseline. As work proceeds, a baseline incorporates work that developers have delivered since the last baseline was created. Once changes have been incorporated into a baseline, developers rebase to the new baseline to stay current with changes in the project. Rebasing merges files from the integration workspace into the development workspace.
The three main reasons for creating baselines are reproducibility, traceability, and reporting.
Reproducibility is the ability to go back in time and reproduce a given release of a software system, or reproduce a development environment at a prior time in the project. Traceability establishes the predecessor-successor relationship between project artifacts. Its purpose is to ensure that design fulfills requirements, code implements the design, and executables are built from the correct code. Reporting is based on comparing the contents of one baseline against another. Baseline comparison assists in debugging and generating release notes.
When baselines are created, all constituent components and baselines need to be labeled such that they are uniquely identifiable and re-creatable.
Make baselines regularly to make sure that developers stay in sync with each other's work. However, during the course of the project baselines should be created routinely at the ends of iterations (minor milestones) and major milestones associated with the end of the lifecycle phases: