To manage changes, a must-have in software development is a version control system (VCS), suggests Bartosz Milewski, Ph.D., and president of Seattle-based Reliable Software (www.relisoft .com). Those VCSs track revisions through a dynamic database. That common repository where software developers can share files enables companies to secure their source-code assets, explains Pat Burma, sales engineer for Seapine Software Inc. (www.seapine.com), Mason, Ohio. He notes that version control provides some basic source-code-control features such as merging, file locking, and identifying release and build configurations through labels or branches, plus common activities such as check-in and checkout.
From a business-process-management view, version control is essential, Burma stresses. A sub-process, version control defines how the company manages its source-code assets. A proven methodology such as version control to manage software changes will ensure several things, he believes: predictable project planning, and auditable and traceable change management, as well as efficient and reliable build management.
But version control by itself is not very useful on a corporate scale, Burma says, particularly if everyone uses his or her own VCS that is tailored only to individual needs. â€œVersion control as a business process can effectively regulate application-lifecycle management and software-development lifecycle with surprisingly predictable outcomes,â€ he says.
â€œWorking as a team with common VCS implementations can help achieve this (predictable outcomes) by generating a measurable environment, which is possible through consistent practices,â€ Burma says. â€œThis differs from using many different tools and techniques, which makes it much more difficult to measure performance and create baselines.â€
Several items comprise Milewskiâ€™s list of VCS must-have attributes. Those include ease of use, ease of installation and ease of maintenance. â€œA VCS should be as unobtrusive as possible. It should become an integral part of the development cycle. It should help the programmerâ€™s work, rather than impose its own demands and restrictions,â€ he explains.
Ease-of-use also means a good user interface. â€œIf a team uses mostly command-line tools to develop a projectâ€”compilers, linkers, make utilitiesâ€”then a command-line VCS might be appropriate,â€ Milewski observes. But if the team is used to graphical user interfaces (GUIs) in their integrated development environment, the VCS should also have a comparably sophisticated GUI, he adds.
But no single recipe exists for choosing a VCS. End-users should seek features that support their development styles and environments. â€œFor instance, if there is a lot of independent development, then branching and merging are important,â€ Milewski explains. But in agile development, the ease of making small change-based check-ins, quick integrations and code reviews is paramount, he believes. He notes that end-users should avoid file-based VCSs, but seek â€œatomic check-in (a database theory term meaning the operation either succeeds fully or fails completely) of multiple files,â€ which he says is standard now. Other attributes Milewski believes VCSs should have include keeping track of files that have been renamed, moved or deleted; and integrating with other tools, whenever possible.
Whatâ€™s the most important thing about a VCS? â€œUse one! Iâ€™m always amazed at programmers who donâ€™t. You donâ€™t have to buy an expensive system requiring a dedicated server,â€ Milewski explains. â€œBut if you are serious about programming, or Web development, you must have a VCS!â€
C. Kenna Amos, email@example.com , is an Automation World Contributing Editor.