Çevik yazılım geliştirme, bir takım yazılım geliştirme yönteminden ibarettir. Bu yöntemler, yazılımın ve gereksinimlerin birbiriyle etkileşim halinde tutarak ortaya koyulmuş süreçlerin tekrarlanmasına ve aşamalı bir şekilde ilerlemeye dayanır. Yöntemlerin uygulanmasında, zamana dayalı ilerleme, evrimsel geliştirme ve teslim süreci ve değişime karşı esnek yapı ön plana çıkar. 2001 yılında yayımlanan Agile Manifesto, yöntemlerin temelini oluşturan belgedir.
Yazımın devamında, çevik yazılımı doğuran süreç ve çevik yazılım geliştirme üzerinde duracağım. Aşamalı ilerleme yöntemleri çok eskiye dayanmaktadır. Aslında çoğu mühendislik biliminde de karşımıza çıkan bir uygulamadır. Ama, yazılım dünyasında çevik diyebileceğimiz algı, 1974 yılında E. A. Edmonds tarafından yayımlanan uyarlanabilir yazılım geliştirme süreci (adaptive software development process) adlı makaleye dayanmaktadır.
Fakat, çevik yazılımın ortaya çıkmasındaki en büyük etken, klasik mühendislik yöntemlerinin bilgisayar biliminde yeterli olmamasıydı. Klasik mühendislik methodları, ürünün her bir parçasının geliştirme sürecine girmeden önce tek tek ele alınıp tasarımı yapılıp sonra da üretim bandına sokulmasını öngörür. Halbuki, yazılım dünyasında ürün her an değişebilir nitelikte olmalıdır. Bu durum, daha dinamik bir yöntem olan çevik yazılım geliştirme kavramını ortaya çıkardı.
Çevik yazılım geliştirme klasik anlayıştan vazgeçerek, değişime her zaman ayak uydurmaya dayanan bir anlayış. Çevik yazılım, projenin safhalara bölünerek, her safhada çalışan bir ürün elde etmeyi hedefler. Her bir safha kendine özgü tasarım, kodlama ve test etme faaliyetlerinden oluşur. Safhanın bitiminde elde edilen ürün, varolan gereksinimleri karşılayamıyor ya da gereksinimleri değiştiyse bir sonraki safhada düzeltilir. Yeni safhada müşteri ile müzakere edilerek, safhanın planı yapılır. Ürün tamamlanana kadar bu döngüye devam edilir.
Çevik yazılımın etkin bir şekilde uygulanması için aşağıda anlattığımız birkaç unsurun uygulanması önem taşımaktadır. İhtiyaçların anlaşılması ve değişikliklerin iyi yorumlanması için müşteri ya da çalışma alanında uzman biri (domain expert) ile birlikte çalışılması en önemli unsurlardan biridir. Çünkü, gerekli bilgilerin en doğru ve hızlı aktarımı gereksinimlerin birinci ağızdan duyulmasına bağlıdır. Bu yapılmadığında yazılımcılar kendi anladıklarını hayata geçirerek, bir sonraki safhada geliştirilen ürünü fazlaca değiştirmeye hatta sil baştan yapmaya sebep olabilir. Dolayısıyla, çevik yazılımda müşteri de yazılım ekibinin bir parçası olmalıdır.
Çevik yazılımda önemli olduğuna inandığım bir diğer unsur takım çalışmasıdır. Projedeki her bir bireyin, projenin ne doğrultuda olduğunu ve kendisinin ne yaptığını iyi anlaması gerekir çünkü ekipteki her elemanın farkındalığı ve dinginliği proje için önemlidir. Ayrıca, proje ekibinde elemanlar arasındaki farklar gözetilmelidir. Aksi takdirde, yapılan işlerde gecikmeler ya da erken bitirme durumları ortaya çıkabilir. Önemli olan görevleri ekipçe zamanında bitirmektir.
Çevik yazılım, adından da anlaşılabileceği gibi kolay ve çabuk bir şekilde yeni gelen ya da değiştirilen gereksinimlere ayak uydurmaktır. Varolan mühendislik yöntemlerinin, yazılım sektörü için uygun olmayışından ortaya çıkan bir yöntemdir. Ana felsefesi, yazılım sürecinin safhalara bölünerek, her bir safhada çalışan bir ürün elde etmektir. Bu felsefeyi uygularken, takım çalışması ve müşteri etkinliği dikkat edilmesi gereken unsurlardır. Sonuç olarak çevik yazılım, gereksinimlerin sürekli değiştiği yazılım dünyası için güzel bir yaklaşımdır.
