Geliştirme ve Kullanım Platformları
Son yirmi sene içerisinde Microsoft Windows tabanlı sistemlerin öncülüğünde kişisel bilgisayar endüstrisinde yaşanan büyüme, kişisel bilgisayarların, hem yazılım geliştirme faaliyetlerinde kullanılan hem de geliştirilen yazılımların kullanımına yönelik anahtar bir platform olmalarına sebep olmuştur. Özellikle serverler açısından bakıldığında Unix sistemlerinin de sağlam bir büyüme gerçekleştirmeye devam ettiği görülmektedir. Linux sistemleri ise popülerlik kazanmaya başlamıştır. Bir çok kuruluşun çoklu platformlar dahil olmak üzere heterojen yapıda networkleri bulunmaktadır. Yazılım geliştirme şirketlerinde ise Sun, HP veya Linux serverlerine bağlı Windows 2000 ve Windows XP işletim sistemleri ile çalıştırılan Pc’ler bir arada çalışacak şekilde bir karışım elde edilmiştir.
Yazılımların kullanıldığı platformlarda yaşanan değişim hiç de azımsanacak gibi değildir. Bugün otomobiller, cep telefonları ve hatta mikro dalga fırınları bile karmaşık yazılım bileşenleri içermektedir. Bu arada, Internet ve World Wide Web’in icadı da yazılım geliştirme faaliyetleri için yeni bir ortam oluşturmuştur. Bunun bir sonucu olarak ise yazılım geliştirme ekipleri Değişiklik ve Konfigürasyon Yönetimini gerekli kılan karmaşık bir geliştirme ve kullanım platform matriksi ile karşı karşıya kalmıştır.
Paralel Geliştirme
Yazılım geliştirme faaliyetlerinin ilk başladığı yıllarında geliştirmeden sorumlu ekipler bir yazılımın tek bir sürümü üzerinde çalışmakta, bunu piyasaya sürülecek hale getirdikten sonra da sürekli bir şekilde bu sürümün güncelleştirilmiş versiyonlarının oluşturulmasını içeren bakım evresi üzerinde çalışmaya başlarlardı. Bugün ise çok sayıda geliştirmeden sorumlu ekibinin eş zamanlı olarak, aynı kod temeli üzerinden farklı yamalar (patch) geliştirme, bakım sürümleri ve yeni jenerasyon sürümleri geliştirme çalışmaları olduğu kadar geliştirilen kodun farklı platformlar, işletim sistemleri, veri tabanları ve anadil seçenekleriyle çalışacak şekilde hazırlanması faaliyetlerinden de sorumlu olmaları, herhangi bir yazılım geliştirme şirketi için tipik bir durum olmaya başlamıştır. Bunun neticesinde, paralel geliştirme desteği, konfigürasyon yönetim sistemleri için anahtar bir itici güç ve temel bir gereklilik haline gelmiştir.
Uygulama Boyutu ve Karmaşıklığı
Yazılımların mümkün olduğunca çok fonksiyonu gerçekleştirmesine yönelik taleplerin oluşturduğu baskılar daha kapsamlı ve karmaşık uygulamaların yaratılması sonucunu doğurmuştur.
Client/server sistemleri, three-tier (üç noktadan bağlantılı) mimariler ve bileşen (component) tabanlı geliştirme ve yeniden kullanma (reuse) faaliyetleri, programların farklı versiyonları -ve hatta çoklu programlama dili ve aracı kullanılarak geliştirilenler- arasındaki uyum ile birbirine bağımlılığın takip edilmesi gerekliliğini ortaya çıkarmıştır. Object-oriented programlama dilleri de kendi güçlükleri ile Java class hiyerarşiler ve C++ templateler arası bağımlılıkların üstesinden gelinmesi problemlerini gündeme getirmiştir.
Geliştirmeden Sorumlu Ekibin Boyutu
Geliştirmeden sorumlu ekibin boyutu kadar başka hiç bir faktör gelişkin Değişiklik ve Konfigürasyon Yönetimine olan ihtiyacı bu kadar etkileyememiştir. Ekibin boyutu büyüdükçe iletişim, koordinasyon, entegrasyon, karşılıklı ihtilaflar ve paralel geliştirme alanlarında karşılaşılan problemlerin üstesinden gelinmesi Değişiklik ve Konfigürasyon Yönetimi olmadan mümkün olamayacak gibi görünmektedir.
Ayrık Ekipler
Yazılım geliştirme faaliyetlerinin farklı mekanlara dağılmış olarak yürütülmesinin konfigürasyon yönetimi güçlükleri ve gereklilikleri üzerinde çok fazla etkisi olmuştur. Yazılımlar bundan önce, yüz yüze iletişimde bulunabilme imkanına sahip merkezi bir ekip tarafından geliştirilirken günümüzde bu şekilde yürümemektedir. İster şirketlerin satın alınması, alt yüklenicilik, isterse offshore ve outsourcing gibi sebeplerden olsun, yazılım geliştirmeden sorumlu ekipler bugün, farklı mekanlara ve sıklıkla da farklı ülkelere dağılmış şekilde çalışan diğer üyeleri ile koordineli bir şekilde çalışma ihtiyacı duymaktadır. Global bazda çalışan bu ekiplerin karşı karşıya olduğu güçlükler arasında iletişim, kontrol, görülebilirlik (visibility) ve güvenlik yer almaktadır. Bunun sonucu olarak ise modern konfigürasyon yönetim sistemlerinin merkezi, uzaktan yönetimli (remote) ve dağıtık geliştirme ekiplerine destek sağlaması gerekmektedir.
Kalite, Standartlar ve Pazara Sürüm Zamanına İlişkin Talepler
Kalite, standartlar ve pazara sürüm zamanına ilişkin taleplerin konfigürasyon yönetim gerekleri ile yazılım geliştirme süreci üzerinde son derece fazla etkisi olabilmektedir. Farklı kalite gerekleri veya standartlarına sahip ekipler genellikle birbirlerinden farklı geliştirme prosesleri kullanmaktadır. Aynı durum üzerlerinde fazla miktarda sürüm zamanına ilişkin baskılar bulunan ekipler için de geçerlidir.
Bu sebeple, konfigürasyon yönetim sistemlerinin ISO 9000 ve Software Engineering Institute (SEI) tarafından belirlenen CMM (Capability Maturity Model/Yetenek Olgunluk Modeli) gibi resmi süreçleri olduğu kadar hızlı (Rapid) veya atik (Agile) geliştirme gibi daha az resmi süreçleri de desteklemesi zorunludur.
Araç ve IDE'ler
Bir kuruluş tarafından kullanılan geliştirme araçları sıklıkla dikkate alınmamasına rağmen öneminden hiçbir şey yitirmeyen unsurlardır. Yazılım geliştiricileri, Microsoft Visual Studio .NET veya IBM Web Sphere gibi Entegre Geliştirme Ortamı (IDE) olan bir dizayn aracı kullanarak, yazılım testleri sırasında kullanılacak diğer araçları yaratabilirler. Geliştirmeden sorumlu bir ekibin kullandığı bir konfigürasyon yönetim sisteminin diğer yazılım geliştirme araçları ile sorunsuz bir şekilde çalışması ve bunlarla entegre olabilmesi son derece önemlidir.