Software Development Workshop 02 – Configuration Management Software Configuration Management
• Managing configuration means controlling the state of
those elements to maximize their value. • Configuration means the set of elements, both intermediate and final, that form a software system. • Example elements are: • Source code • Configuration and data files • Tests • Documents • Database script files (DB structure) • Agile Software Development Workshop - v1.0 - www.grupoesfera.com.ar | 2 < Managing Versions
• A version is a snapshot of the system.
• It corresponds to the state of that system at a particular point in its evolution. • Versions need to be stored to facilitate access to past states of the system configuration. • Versions give the team the courage to face changes. • Supports tracing the history of modifications and maintaining system integrity.
• Centralized (developers use a shared single repository)
• Lock-Modify-Unlock ● Visual SourceSafe • Copy-Modify-Merge ● CVS ● SVN • Distributed (each developer works directly with his or her own local repository, and changes are shared between repositories as a separate step) ● Mercurial ● Git
● Choose Convention over configuration ● Organize elements to follow the build structure ● Organize elements to localize change ● Organize elements to separate code from unit tests ● Organize elements in meaningful modules ● Organize elements to support reuse
Tagging • Tag every time a version is released to a specific environment (e.g. acceptance, production, etc.) • Tag on every major milestone • Assign symbolic meaning to tags • Manage release notes for each tag ● Include bug fixes, features, etc. ● Strive for automation
Best Practices • Maintaining consistent repositories • Separate source (e.g. source code) from generated (e.g. executable binaries) elements. • Each can have its own criteria or policy. • Synchronize frequently (more than once a day). • Tight criteria for updating repository versions. • For example, passing tests, or static analysis tool check. • Every update to a repository should be accompanied by a descriptive comment.