SCM Common Definitions
Process Template: In VSTF, Team project initial settings are governed by a process template.
Code-line (in VSTF: Team Project) A progression of the set of source files and artifacts that make up a software component as it changes over time. Code-lines contain every version of the artifact (artifact revision) along one evolutionary path.
Label: Identifies a code-line as special. I.e. Label the set of revisions that make up a release with Release.
Policy: Each code-line has a policy associated with it which defines the purpose of the code-line and the rules for when and how you make changes.
Product: Products can consist of more than one code-line. I.e. you can have 3rd party code in one code-line, active development in another and internal tools or products in another code-line.
Branch: A branch of a file is a revision of the file that uses the trunk versions as a starting point and evolves independently. Branches are labeled with a minor version number that corresponds to the major version number in the trunk.
Workspace: This is where the developer keeps all the artifacts needed to accomplish a task. Workspaces are normally associated with versions of the artifacts. Workspaces should include:
• Source Code
• Test Code
• Library Files (.cs)
• Library Files for 3rd party or shared libraries (.dll)
Workspaces are associated with one or more code-lines.
Shelve set: Allows changes to be shared into other workspaces that may be owned by other users.
Integration: Integration is the incorporation of changes from a revision.
Merge: Integrates changes from the branch that need to be incorporated into the trunk.
Code Freeze: A period of time when access to the current code-line is restricted so that only critical changes are made to the code.
SCM: Software Configuration Management serves as a mechanism for communication, change management and reproducibility.
Communication: Sharing enough detailed information about what people are doing so teams can work together and be more productive.
Configuration Identification: Determining which body of source code you are working with.
Configuration control: Controlling the release of a product and changes to it throughout the lifecycle to ensure consistent creation of a baseline software product.
Status accounting audit: Recording and reporting the status of components and change requests and gathering vital statistics about components in the product.
Review: Validating completeness of a product and maintaining consistency among components by ensuring that they are in an appropriate state throughout the entire project lifecycle and that the product is a well defined collection of components.
Build management: Managing what processes and tools developers use to create a build or release so it can be repeated.
Process management: Ensuring that the organizations development processes are followed by those developing and releasing software.
Teamwork: Controlling the interactions of all the developers working together so people’s changes are inserted into the system in a timely fashion.
Version Control Practices allow you to:
Develop the next version of software while fixing problems with the current one
Share code with other team members is a controlled way, allowing you to develop code in parallel with others and join with the current state of the code-line
Identify what versions of code went into a particular component.
Analyze where a change happened in the history of a component’s development.
General Principles to using SCM
• Use Version Control.
• Do periodic builds and integrate frequently.
• Allow for autonomous work.
• Use tools. (Over manual process)
SCM Considerations: Often, the separation between management and development activities doesn’t make sense. Things developers do are necessary for the management support tasks to be meaningful; you can’t identify product components if there is not product to identify.
SCM Supports at least two tasks, management and software development but often they are separate from each other, which makes no sense.
• Identification of product components and versions
• change control procedures
• Status accounting
Software Development Tasks
• Version Control
• Maintaining consistency between interdependent components
• Build compile code, executables and other derived objects from their sources