Над созданием программной системы и последующим ее исправлением и изменением работают многие разработчики. Эта деятельность продолжается годами и в течение этого времени создается много вариантов программного обеспечения, т.н. версий.
Чтобы внедрение обновления программного обеспечения и при необходимости возврат к старым версиям прошли бы гладко, надлежит соблюдать некоторые процедурные правила, систематизировать весь созданный код и соответствующую документацию: требования обновлений, отчеты (рапорты) об ошибках и т. д.
Каждое программное обеспечение изменяется и имеет множество различных версий. Новые версии реализуют предложения об изменениях, исправления ошибок, адаптируют программное обеспечение к прочим аппаратным средствам и операционными системам. Во всем этом хаосе изменений нужен порядок и система.
Управление конфигурациями (configuration management) – управление кодовой базой и документацией программной системы, находящейся под разработкой, следуя процедурам и используя подходящее программное обеспечение. Управление конфигурациями необходимо для того, чтобы не потерять последствия изменений и версий компонентов в различных версиях системы. Управлением конфигурациями может заниматься целая отдельная команда, заданием которой является слежение и обеспечение того, чтобы обновления программного обеспечения добавлялись бы системой управляемым образом, и информация об изменениях вводилась бы и сохранялась с достаточной детализацией. Поскольку все-таки разработчики вносят изменения, то для систематизирования их работы имеются ясные процедурные правила ввода. Например, при каких условиях можно добавлять новый код к существующей системе, когда все вместе компилировать, где и как регистрировать изменения и так далее.
Процесс управления конфигурациями разделяют на управление изменениями, управление версиями, управление сборками (build) и релизами (версия, release) системы.
Задача управления версиями (контроля версий) – это сохранение последовательности версий всех компонентов программного обеспечения и сделанных в них изменений. Этим также гарантируется, что сделанные различными разработчиками изменения не будут мешать друг другу.
Для успешного управления версиями стоит использовать соответствующее программное обеспечение (например, CVS, Git, Subversion и др.). Хорошее программное обеспечение разрешает даже одновременную работу с одним и тем же файлом.
С управлением версиями тесно связано управление релизами.Релиз системы – это версия программного обеспечения, которая поставляется пользователю. Для программных средств общего назначения (офисное программное обеспечение и т.д.) различает два типа релизов: основная версия (главный релиз, major release) приносит некоторую важную новую функциональность и неосновная версия (minor release) исправляет проблемы, которые появились из-за некоторой ошибки и которые выявил пользователь. В случае специализированного программного обеспечения для разных клиентов могут быть различные релизы / версии, и каждый (ая) из них может разрабатываться по-своему. Так, на основе одной система можно разработать несколько различных версий одновременно. В случае возникновения проблемы при использовании программного обеспечения необходимо, чтобы было возможно восстановить именно такой вариант программного обеспечения как тот, что был передан этому клиенту. Посему должна быть сохранена достаточно детализированная информация релиза, т.е. каждый релиз следует документировать таким образом, чтобы его позже можно было воспроизвести.