Uygulama yaşam döngüsü, bir uygulamanın fikrinin doğduğu andan, o uygulama kaldırılana kadarki süreçtir, yani aslında o uygulamanın bütün ömrüdür. Uygulama yaşam döngüsü yönetimi (Application Lifecycle Management - ALM) ise, bu uygulamanın doğuşu, gelişimi, evrimi, değişimi ve yaşatılması gibi evreleri kapsayan bir çeşit süreç yönetimidir. İşe biraz daha teknik açıdan bakacak olursak, bu sistematik yönetimin temel amacı uygulamayı en yüksek kalitede tutup maliyeti en aza düşürmektir. Ancak bunu sağlamak için uygulamada kontrol altında tutulması gereken birçok nokta vardır, ve süreci daha temiz yönetebilmek için uygulamanın her noktasının birbirinden haberdar olması gerekir. Örnek verecek olursak, Agile (Bu konuyla ilgili yazımızı inceleyebilirsiniz) ile yönetilen bir uygulamada, uygulama sürekli bir değişim ve gelişim içerisindedir. Yapılan her değişim sürekli bir entegrasyon, her entegrasyon da arkada sürekli çalışan bir test yapısı gereksinimi içerisindedir. Yapılan her değişiklikten bütün takım üyeleri haberdar olmalı, gerekli noktalarda müdahale edebilmelidir. Bu çoklu iletişimi kolaylaştırmak adına, uygulama yaşam döngüsü yönetim araçları geliştirilmiştir. Bu araçlar da hizmetlerine göre belli kategorilere ayrılır. En temel kategoriler şu şekildedir:
Proje Yönetimi Araçları (Project Management Tools)
Sürekli Entegrasyon Araçları (Continuous Integration Tools)
Versiyon Kontrol Araçları (Version Control Tools)
Test Yönetim Araçları (Test Management Tools)
Sorun İzleme Araçları (Issue Tracking Tools)
Takım İşbirliği Araçları (Team Collaboration Tools)
Kod İnceleme Araçları (Code Review Tools)
Proje Yönetimi Araçları
Proje yönetimi Projenin hedefe ulaşabilmesi ve amaçlarını yerine getirebilmesi için kaynakları planlama, organizasyonu ayarlama, süreci yönetme işidir. Projede amaç gerekliliklerin verimli bir şekilde yerine getirilebilmesidir. Ana amacı müşterinin talep ettiği ürünü üretmektir, bazı durumlarda müşterinin talepleri bir nebze farklılıkla editlenmiş halde teslim edilebilir. Müşteri/Kullanıcıdan talepler net bir şekilde alındıktan sonra proje görevlileri yönetici, dizayn elemanı ve geliştiriciler bu talepler konusunda detaylı halde bilgilendirilir ve operasyonun geneli bunun üzerinde şekillendirilir. Yönetim sürecinin farklı tipleri/yaklaşımları vardır, operasyona göre bu tiplerden biri üzerine devam edilebilir. Planın ana süreci oluşturduğu yaklaşım, katedilen aşamanın ana süreci şekillendirdiği yaklaşım, ağırlıklı otoritenin yönettiği yaklaşım ve kilit elemanların süreci yönettiği yaklaşım olarak dörde ayrılır. Genelde proje yönetimleri bir giriş, planlama ve dizayn, inşa etme, izleme ve kontrol etme ve tamamlama fazlarından oluşur. Bu fazlar çerçevesinde yönetilir. Bu süreci kolaylaştırmak ve bir otomasyona bağlayabilmek amaçlı kullanabileceğimiz araçlar vardır. Bunlardan başlıcaları, Jira, Procore, WorkFlowMax sayılabilir.
Sürekli Entegrasyon Araçları
Sürekli entegrasyon; kodda yapılan değişikliklerin, projenin kaynak kodu üzerine eklendikten sonra sistemi bozup bozmadığını, çalışan diğer kısımları etkileyip etkilemediğini görebilmek adına kullanılan bir yöntemdir. Projenin kodu tek bir kaynakta tutulur ve yapılan değişiklikler, lokal ortamda çalıştığı gözlemlendikten sonra asıl koda eklenir. Sürekli entegrasyon aracına yapılan değişikliğin gönderilmesi sonucu, bir derleme(build) numarası çıkar, değişikliği gönderen kişiye derlemenin başarılı olup olmadığına dair bildirim iletilir. Lokalde yapılan değişiklik gönderilmeden önce, kaynak kodun son versiyonu lokale alınıp lokalde değişikliğin başarılı bir şekilde çalıştığı görülmelidir.
Bunu bir örnek üzerinden anlatmaya çalışayım. Bir yazılım şirketinde, yazılımcı A ve B aynı kaynakta farklı geliştirmeler yapıyor. Yazılımcı A yaptığı değişikliği tamamlıyor ve sisteme gönderiyor, build başlıyor, ancak entegrasyonda bir sıkıntı oluyor. Bu durumda yazılımcı A’ya uyarı gider, build’in başarısız olduğu ve başarısız olma sebebi entegrasyon aracında ilgili kaynağın sayfasında görülür. Bu durumda yazılımcı B son build düzeltilip başarılı bir şekilde tamamlanana kadar kendi değişikliğini çıkmaz. Bu sayede versiyonlamada oluşabilecek bir karmaşanın önüne geçilmesi ve sorunun erken fark edilip hızlı müdahale edilmesi sağlanmış olur. Sürekli entegrasyonlarda testlerle otomatik entegrasyon da büyük önem arz eder. Bu sayede yapılan bir değişikliğin testten geçememesi durumu erkenden fark edilip ilgili düzenleme yapılabilir. Jenkins, Circle CI, TeamCity sık kullanılan sürekli entegrasyon araçlarına örnektir.
Versiyon Kontrol Araçları
Versiyon kontrol sistemleri, kaynak kod üzerinde yapılan değişiklikleri kaydeden sistemlerdir. Bir projenin geçmişini tutarlar diyebiliriz. Örneğin, bir kodda 1 sene içerisinde 50 farklı değişiklik yapıldığını farz edelim, bu değişikliklerin her birinin ne zaman çıktığının, yapılan değişiklikle kodda hangi ekleme ve çıkarmaların yapıldığının kaydını bulabilir, bu değişikliklerin hangi versiyonlarda çıktığını görebilirsiniz. Gerekli durumlarda eski sürüme geçebilmenizi sağlar. Örnek verecek olursak, eskiden düzgün çalıştığını bildiğiniz bir kodun şu an yanlış çalıştığını, istenen sonucu vermediğini fark ettiniz diyelim. Bu durumda, versiyon kontrol sisteminde o kaynak kodun tarihini inceleyebilir, ilgili kodda ne değişiklikler yapıldığına bakabilir ve bu değişikliği çalışan yapıyı bozmayacak şekilde düzeltebilirsiniz. Versiyon kontrol sistemleri, projeniz için farklı branchler, yani farklı dallar açma olanağı da sağlar. Özellikle sık değişiklik yapılan ve/veya kritik projelerde, branching yapısı sayesinde değişikliklerinizi projenizin farklı bir branchteki kopyasına çıkabilir, sistemi bozmadığı kesinleştikten sonra orjinal brache değişikliğinizi taşıyabilirsiniz. Günümüzde en sık kullanılan versiyon kontrol sistemleri Github ve Gitlab olup bu sistemler sayesinde yazılımcılar, tabiri caizse ‘ya başka bir yeri bozarsam?’ korkusu olmadan geliştirmelerini yapabilmektedir.
Test Yönetim Araçları
Yazılımcılar da insandır ve insanlar hata yapabilir. Bu hataları önlemenin ve erken tedbir almanın en kolay yolu, kodu testten geçirmektir. Yazılımda en ufak görünen değişiklik bile büyük sonuçlar doğurabilir. Bu sebeple, yapılan her geliştirmenin, müşteriye sunulmadan önce testten başarılı bir şekilde geçmesi kritik bir öneme sahiptir.
Test yönetim araçları Zephyr, Cucumber Studio olarak çeşitlendirilebilir. Peki nedir bu test yönetimi, onun üzerinde durmakta fayda var. Bir yazılımın test süreci, ilgili test senaryolarının hazırlanması, testlerin gruplanması, kodun teste sokulduktan sonra elde edilen sonuçların raporlanması ve yapılan her değişiklik için kodun yeniden testten geçirilmesi gibi aşamaları kapsar. Test yönetimi de temelinde yazılım test sürecini yönetme işi olarak özetlenebilir. Otomasyon ya da manuel testler bu süreçte yönetilir. Planlı gerekli testler yapıldıktan sonra ölçümler raporlanır ardından bug’lar ve hatalar yönetilir. Test yönetim araçları, testlerin otomasyonunu, test sürecinin takibini ve sonuçların raporlanmasını sağlar.
Sorun İzleme Araçları
Sorun izleme sistemlerine açıklık getirmeden önce ‘sorun’dan kastımızın ne olduğuna değinmekte yarar var. İngilizce’de issue tracking olarak geçmekte olup dilimizde yaygın olarak sorun izleme şeklinde kullanılmaktadır. Ancak işin aslı, issue direk sorun demek değildir. Bir proje geliştirdiğinizde, o projenin çok çeşitli paydaşları olacaktır. Bir projeye herhangi bir şekilde temas eden herkes o projenin bir paydaşıdır. Bu durum, projeyle ilgili cevaplanması gereken sorular, sağlanması gereken destekler, çözülmesi gereken problemler ve incelenip gerekli durumda geliştirilmesi gereken yeni özellik talepleri doğurur. Bu maddelerin her biri aslında bir çeşit issue’dur. Sorun izleme sistemleri, temelinde bu issueları listeler. Bu issueları açanlar birer yazılımcı, analist, test mühendisi, ürün sahibi veya müşteri olabilir. Her issue için öncelik seviyesi (aciliyet düzeyi), kategori (soru, destek, bug, yeni talep vs.), teslim tarihi gibi parametreler girilip kaydedilir ve ilgili ekibin issue listesine düşer. Bu sayede issuelara öncelik sırasına göre müdahale edilebilir ve ver issue, yazılımcının yaptığı yorum ile birlikte kayıt altında tutulur. En yaygın kullanılan sistemlerin başında Jira, Github ve Gitlab gelmektedir. Şuna da değinmeden geçmeyelim, bir tool sadece bir amaca hizmet etmek zorunda değildir. Bu sebeple aynı toolu birden fazla kategorinin altında görmeniz yüksek ihtimaldir, tıpkı Jira’dan proje yönetimi, Github ve Gitlab’dan da versiyon kontrolü altında bahsetmiş olmam gibi.
Takım İşbirliği Araçları
Takım işbirliği yazılım geliştirmede başarı için anahtar faktörlerden biridir. Bireysel yetenekler ne kadar üst düzey olursa olsun takım işbirliği zayıf olan bir yazılım geliştirme sürecinin yüksek verimli sonuca sahip olması çok düşük ihtimaldir. Bunun nedenlerini konunun önemine hasıl olmak adına açıklayalım. İyi bir takım işbirliği iyi bir takım içi iletişimle mümkün olabilir ve bu durum ürün geliştirme adına takıma zaman kazandırır, çalışma ve üretme verimini doğrudan arttırır. Takımın her bireyinin aktif katılımına imkan sağlar, bu sayede farklı perspektifler müşteri tarafından istenen gereklilikler üzerinde belirleyici rol oynar. Takımı bir bütün halde düşünürsek çalışan bir makinenin dişlileri her bir takım üyesidir ancak harmonik ve nitelikli katılımla bu makine en yüksek verimle çalışabilir. Ürün geliştirme hızını arttırır, farklı perspektiflerle geliştirilen ürüne derinlik kazandırılır ve harmonik bir ortamda verimlilik doğrudan artacağı için hız da artacaktır. Bu bağlamda takım işbirliğinin ne kadar kritik bir rolü olduğu anlaşılabilir. Bu süreci daha iyi yönetebilmek adına kullanabileceğimiz tool lara Slack ve Trello örnek verilebilir. Bu araçları kullanarak takım içerisinde materyal bazlı, web, masaüstü ya da mobil üzerinden haberleşilebilir. Yüksek katılımlı video görüntüleri, görüşmeler ve toplu yazışmalar yapılabilir. Farklı doküman programlarıyla entegre halde iletişim kurulabilir ve paylaşımlar yapılıp güncel haberleşme sağlanabilir.
Kod İnceleme Araçları
Kod inceleme/gözden geçirmenin temel amacı, yazılımın kalite ve performansını yüksek seviyede tutmaktır. Yazılımda bir geliştirme, bir kişinin sorumluluğu altında olduğunda, orada performans açığı oluşma ya da potansiyel bir hata doğurma ihtimali, birden fazla kişinin değerlendirdiği durumlardan daha yüksektir. Kod inceleme sayesinde, yapılan geliştirme, o değişikliği yapan kişi dışında ekip üyeleri tarafından incelenir ve gerekli durumlarda yazılımcıya feedback verilir ya da bizzat gözlemleyen kişi tarafından kodda kalite artırmaya yönelik aksiyon alınır. Kod inceleme toolları, genel olarak bu düzenin sağlanmasına yardımcı olur. İncelenmesi gereken kod bloğu için, inceleyecek kişiler atanır. İnceleyen kişiler o kodu değerlendirir ve puanlar, gerekli yerlere comment atarak yazılımcıyı bilgilendirir, bu sayede kod kalitesi sürekli olarak yüksek tutulabilir. Popüler kod inceleme araçlarından bazıları Review Board, Crucible, Phabricator ve Gerrit’tir.