7.3: Version Control Systems
Version control is a process or tool for tracking and managing changes to software code. Changes occur during the code development, testing phases, and maintenance. Changes are made by you or your teammates working on the code. A change could result from an improvement, an error, or a change. Software code is organized according to the software architecture and stored as modules. Version control provides a standard way of assigning a version identifier to a module file, which includes the version name and creation date/time. Version control is one activity of Software Configuration Management (SCM).
Version control tools have existed since the beginning of assembler language programming. Yes, they have improved over the years to include some Software Configuration and project management functions and improvements in usability, security, performance, adaptability, etc. However, conceptually (i.e., at a higher level of abstraction), they have not changed because they provide support for the identification and control of stored data and changes to that data - fundamental functional requirements that are not likely to be affected by new technology or, in other terms, the process and procedures for version control, except for increasing efficiency, scale, or security. For example, Git and GitHub are old but still among the most popular tools for version control and software code repositories. Here are summaries of these two code support tools.
- Git (2005) - Linux open source community - distributed version control system or software code management system - supports branching, merging of branches, distributed development, CI/CD (continuous integration / continuous deployment), cloud storage, developer collaboration;
- GitHub (2009) Microsoft - software code repository platform - web-based management of software code repositories, uses Git for version control and developer collaboration.
Software configuration management (SCM) is a critical element of software engineering. Read about the benefits of control systems and consider issues that might arise in the implementation process. SCM is a supporting software life cycle process that helps development and maintenance activities, assurance activities, and project management in general. We will discuss these further in Unit 9.
Software Configuration Management is a process for identifying, controlling, and managing software artifacts during the SDLC and the entire life cycle of the developed software system. Beginning with the Software Requirements, project development produces an architectural structure that evolves into an organization of many software components, each of which may have many versions. The versions result from changes to specifications during development, correction of errors, or allocation to multiple hardware platforms and operational environments. A software configuration is an integral subset of the architectural component versions needed to satisfy requirements. Multiple software configurations may be necessary to meet all the requirements.
As with version control tools, SCM software support has not changed. The SCM processes and procedures have been stable. New technology has not changed them but has improved their "ilities" – usability, adaptability, reliability, and scalability.