Configuration management or how to develop large software (part 3 - the last)

I’ve started this topic in the previous 2 posts (part 1 and part 2). Here are some more thought regarding the project management for large software projects.

Usually software development doesn’t imply the use of any version control system. All other approaches could be applied or not to individual projects. It dependents on the specifics of developed system, on many other factors, the most important of which, in our opinion, ability to control all the approaches, availability of necessary skills and resources and quality of the developed system.

There is a separate discipline of software engineering, which deals with this kind of organizational objectives without any reference to methodology — it is a configuration management. Configuration Management is a core discipline that helps to manage and control requirements specification, the process of software project development and information on the status of individual tasks and the entire project as a unit. The project success largely depends on how the process of configuration management was streamlined. On the one hand it can save the project, but on the other hand it can bury it.

Glossary of IEEE 610 describes configuration management as “a discipline applying technical and administrative direction and surveillance to: identify and document the functional and physical characteristics of a configuration item, control changes to those characteristics, record and report change processing and implementation status, and verify compliance with specified requirements”.

But it’s a rather formal definition. The following software and tools that programmers face on duty every day will allow you to understand how this definition works in practice:

* Subversion; CVS; Git; Mercurial; Bazaar; Microsoft Visual SourceSafe; ClearCase; Perforce.
* Ant; Nant; Maven; Phing; make; nmake; Cmake; MSBuild; Rake.
* JUnit; NUnit; CPPUnit; DUnit; PHPUnit; PyUnit; Test:: Unit; vbUnit; JsUnit.
* PMD; FxCop; PHP_CodeSniffer; PyChecker, lint.
* JavaDoc; phpDocumentor; CppDoc; RDoc; PyDoc; NDoc; Doxygen.
* CruiseControl; CruiseControl.NET; TeamCity; xinc; Atlassian Bamboo; Hudson.
* Jira, Trac, Mantis, Bugzilla, TrackStudio.

I hope this information was useful for at least some of you and will highly appreciate comments and any other kind of feedback.

Configuration management or how to develop large software (part 1)

How one can develop large software products? It is no secret that in practice large and complex software product development has always been independent of the latest technologies. It has its own peculiarities, and requires special methodology.

Researching and analyzing existing approaches to software development, our company wasn’t able to answer very simple questions related to “correct” development of high-quality programs. And it’s no wonder! Nobody can develop common formalized approach to large software product management. For example, one of the simplest questions, we raised in Oxagile, was the question of how to assign “correct” version numbers to issued software. Probably many of you will agree that this question is connected with not only large corporate software, but also with the simplest applications, developed by students and beginners in programming.