YAZILIM METODOLOJİLERİ

Hasan Şahin
HardwareAndro
Published in
7 min readAug 16, 2020

SCRUM VE AGILE YÖNTEMLERİNİN DETAYLI ANLATIMLARI

Yazılım ve proje geliştirme süreçlerini yönetmek gün geçtikçe ve teknolojiler geliştikçe karmaşık bir hal almaya ve projelerin yönetimleri geleneksel yöntemler ile başarısız olmaya başlamıştır. Bu karmaşıklıktan ve başarısızlıktan kurtulmak için zamanın ileri yazılımcıları ortak bir noktada buluşup proje geliştirme süreçlerini en iyileştirmeyi amaçlayarak, Agile manifestosunu yayınlamıştır. Bu manifestonun ve yaklaşımın altında dallanan farklı metodolojiler geliştirilmiştir.

Bu metodolojiler arasında öne çıkan Scrum, Extreme Programming, Rational Unified Process gibi yaklaşımlar farklı kapsamdaki projelere yeni bir anlayış getirmiştir. Tekrarlı geliştirme süreçleri ile müşterilerin isteklerine cevap vermeyi, kişiler arasındaki etkileşim ve iletişimi arttırarak, yazılım geliştirme süreçlerinin verimli hale getirmişlerdir ve başarı oranlarını arttırmışlardır.

Yazının ilk bölümünde bu metodolojilere değinilerek proje yönetim süreçlerinin nasıl olduğundan, hangi mühendislik prensiplerinin kullanıldığına değinilmiştir.

SCRUM

Scrum, yazılım geliştirme manifestolarından biri olan Agile(Çevik, Atik) proje yönetim, yöntembilimlerinden birisidir. Karmaşık olan yazılım proje süreçlerinin ihtiyaca yönelik olarak düzenli bir şekilde denetlenmesi, planlamalar yapılması ve projeyi bu karmaşıklıktan kurtarıp en iyi şekilde amacına ulaştırılması hedeflenir. Projelerde takımdaki kişilerin gözlemci rolünden çıkarılıp, gözlemci olduğu konu hakkında aksiyonlar almasına yardımcı olan ve bu şekilde takımdaki kişileri çapraz fonksiyonlu hale getirmeyi, üretkenliğini, yaratıcılığını arttırmayı ve adapte olmasını amaçlar.

Scrum, sürece ve ya araçlara değil, bireyler arası etkileşime önem verir. Her şeyi düşünülmüş bir yazılım yerine, çalışan bir yazılımı amaçlar. Müşteriler ile anlaşma ve ya pazarlık yerine, onlarla iletişim ve işbirliği halinde olup ürünü ortaya çıkarmayı amaçlar. Herhangi bir plana bağlı kalmaksızın değişimlere ayak uydurarak, uyarlamalar yapmayı amaçlar.

Scrum temel üç esasa dayalıdır bunlar; şeffaflık, denetleme ve uyarlamadır.

Şeffaflık: En temel esaslardan biri olan şeffaflık; projede her şeyin rayında gitmesini sağlamak için projenin ilerleme durumu, çıkan sorunları ve oluşan gelişmeleri, projede bulunan herkesçe erişilebilir ve görülebilir olmalıdır.

Denetleme: Proje ilerlerken, bu ilerleyişi rutin olarak kontrol etmek ve denetlemek elzemdir. Bu denetlemelerin vaktinde yapılması, projenin ilerleyişinde oluşacak riskleri ve hataları en aza indirger ve bizlere daha iyi yazılım üretmemize olanak sağlar.

Uyarlama: Projenin ilerleyişi dinamik olmalıdır ve projede çıkan değişliklere karşı adaptasyon sağlanmalıdır.

Scrum’ın Kişileri ve Ögeleri

Scrum’ı oluşturan kişileri ve ögeleri vardır, bu bireyler ile ilişkili olduğu ögeleri sırasıyla açıklamak gerekirse;

Product Owner (Ürün Sahibi): PO, yönetimi bilen ve sorumlu kişidir, müşteri ve ya yöneticisi ile iletişim halindedir. Müşteri ve ya yöneticisi ile geliştirici takımının arasında köprü görevi gören kişidir. PO’nun görevleri; Müşteriden ve ya yöneticisinden gelen hikâyeleri, Product Backlog’a yani ürün listesine dönüştürmek. Oluşturulan bu PB’deki ögeleri yine ihtiyaca ve öneme göre değer ataması yapar ve sıralar. Gerekli ise geliştirici takımın uğraşmakta olduğu sprinti durdurma yetkisi vardır.

Product Backlog (Ürün için gereksinim listesi): Geliştirici takım ürünü geliştirmeden önce ürünün gereksinimlerine ihtiyaç duyacaktır. PO’nun müşteri ve ya yöneticisinden gelen hikâyelere göre, PO tarafından oluşturulan, ürün için gerekenlerin, önemine göre sıralanmış listeleridir. Geliştirme süresince PB ihtiyaçlara göre değişkenlik gösterebilir ve PO tarafından her zaman değiştirilebilir konumdadır.

Sprint Backlog (Sprint gereksinim listesi): Sprint Backloglar; Ürün Sahibi, Scrum Yöneticisi ve Geliştirici takımın katılımıyla yapılan sprint planlama toplantılarından sonra oluşturulur. Sprinte girecek ögelerden oluşan listedir. PB’deki ögeler önem sırasına göre sıralanır. Geliştirici takım, PO ile anlaşır ve ürünün yapılması istenen öncelikli parçaları SB’lere eklenir, SB’lerin en üst kısmındaki öncelikli ürün parçaları, diğer parçalara oranla daha çok detay içerir ve geliştirici takım yoğunluğunun, belli kısmını bu parçalar oluşturur. Buna göre sprint geliştirme sürecine sokulur.

Scrum’ın İşleyişi

Sprint (Kısa koşu-Koşma): Sprint projenin tekrarlanan bir sürecidir, ürünün bir parçasını üretmek için onu önceliğine göre sprinte ekleriz. Geliştirici takımın tüm aksiyonları bu süreçte gerçekleşir. Bir sprint bir ile dört hafta uzunluğunda olan bir geliştirme sürecidir. Bu süreç uzatılamaz, herhangi bir işin yetişmeme durumu olsa bile uzatılmaz. Sprint sonunda ortaya çıkan ürün parçası ne ise o teslim edilir ve eksik kalan kısımlar bir sonraki sprinte eklenir.

Günlük Scrum: Günlük Scrum’lar, günde bir defa Scrum Master ve geliştirici takım ile ayakta yapılan 15 dakikalık toplantılardır. Takımdan herhangi birinin olmaması ve ya geç kalma durumu olsa bile bu toplantılara engel olamaz, ancak ve ancak toplantı yapacak kişilerin çoğunluğu yoksa yapılmaz.

Scrum Çizelgesi

Burndown Charts (İş bitim çizelgesi): Bu çizelge, Scrum’ın esaslarından biri olan şeffaflığa örnektir. Çizelgede dikey eksende saat, yatay eksende ise sprint günleri belirtilmiştir. Mor ile ifade edilen çizgi grafik planlanan çalışma saatidir. Turuncu ile gösterilen çizgi grafik ise asıl harcanan çalışma saatidir. Kırmızı sütun grafikler ise günlük ne kadar ürün parçası bitirildiğini göstermektedir. Turuncu çizgi grafik, mor grafiğin üstünde olduğunda yapılan işin sprint için belirlenen tarihin gerisinde kalmaktadır. Turuncu grafik, Mor grafiğin altına indiğinde ise ürün parçalarının planlanan tarihten önce biteceğini belirtir. Bu grafikte başta yavaş ama sonlara doğru hızlanan bir sprint süreci görmekteyiz.

Geliştirici Takım: Sprint Backlogtan alınan ürün parçalarını geliştirebilecek bir takımdır. Takımın lidere ihtiyacı yoktur, kendi içinde görev dağılımları da yoktur ve takımdaki herkes bir başkasının işini yapabilecek düzeydedir. Bu şekilde çapraz fonksiyonlu kişilerden oluşur. Takımdakiler kendi uzmanlıklarının verdiği görevlere değil, sprint sonunda oluşacak ürün parçasına odaklanmalıdır. Yapılması planlanan görevlerin hangi şekilde ve nasıl geliştirileceği konusunda kendileri karar alır. Takımda hiç kimsenin tek görevi yoktur, herkesin birden fazla sorumluluğu vardır.

Sprint Planlama Toplantısı: Toplantıya önceden bahsettiğimiz ana kişilerden, PO, SM ve DT katılır. PO tarafından verilen PB’deki ögeler geliştirici takım tarafından küçük ürün parçalarına ayrılır. Takımın hızına göre ne kadar ürün parçası alacaklarına karar vermeleri gerekir.Bu karar verilmeden önce tahmin ve değerlendirme yapılmalıdır. Takımdaki herkes bu ürün parçalarının ne kadar zaman alacağını tahmin etme hakkına sahiptir.

Sprint Gözden Geçirme Toplantısı: Sprint sonlarında yapılan bu toplantılar isminde bahsedildiği gibi sprinti gözden geçirmek içindir. Bu toplantılara ürün ile ilişkili herkes katılabilir. Bu gözden geçirme toplantısında, sprint sonunda geliştirilen ürün, müşteri tarafından değerlendirilir. Müşteri ürünün durumuna göre, direk yüz yüze toplantı esnasında neyin eksik neyin tam olduğunu takıma söyleyebilir.

Sprint Retrospektif Toplantısı: Retrospektif toplantılar takım kendi arasından dünden bugüne yaptıklarını gözden geçirirler. Sprintleri iyileştirmek için çok uzun süreli olmayan toplantılardır. Kişiler sprintte iken neleri iyi, neleri kötü, yaptıkları konusunda; neleri yapmaya devam edersek ve ne yapmazsak daha iyi bir sonuç alınabileceğini tartışırlar.

Tamamlanan İş (Increment): Sprint sonlarında ortaya bir ürün çıkmalıdır. Çalışan bu ürüne increment adı verilir. Tamamlanan işler sprint gözlemleme toplantılarında müşteriye sunulur. Bu sunumda müşteriye tam bir deneyim yaşatması gerekir. Bu deneyimi yaşatması için ürünün tam bir şekilde bitirilmesi yine gereklidir. Bir ürünün tam bir şekilde bitirildiğini tanımlamak gerekir.

AGILE

Scrum yöntembiliminin üst kavramı olan Agile yaklaşımı, çevik anlamına gelmektedir. Çevik olmanın getirisi değişimlere çabuk adapte olmaktır. Değişimlere çabuk adapte olmak bizlere, kısa zamanda kaliteli işler başarmamızı sağlar.Sürece ve ya araca değil, bireyler arası etkileşime önem verilmesi, her şeyi düşünülmüş ve dokümanı yazılmış bir yazılım yerine, çalışan bir yazılımı amaçlamak. Müşteriler ile anlaşma ve ya pazarlık yerine, onlarla iletişim ve işbirliği halinde olup ürünü ortaya çıkarmayı amaçlamak. Herhangi bir plan yapmak ve ya plana bağlı kalmaksızın, değişimlere cevap vermek, onlara ayak uydurup, uyarlamalar yapmayı amaçlar.

Bu 4 esası incelemek istersek;

Sürece, araca değil, bireyler arası etkileşime önem vermek: Bu esasa göre, takımdakileri kullandığımız araçlarla ve bürokrasilerle sıkılmamalıdır. Bunun yerine bireyler birbirleriyle etkileşimde olmalıdır.

Dokümanı yazılmış bir yazılım yerine, çalışan bir yazılımı amaçlamak: Dokümantasyon, yazılımı kullanırken soruları olan son kullanıcı için her zaman önemlidir. Ama Agile yaklaşımı ile çalışan şirketler, bu dokümantasyonun hazırlanmasının, geliştirme sürecine etki etmemesinden emin olmalıdır.

Müşteriler ile anlaşma ve pazarlık yerine, iş birliği yapmayı amaçlamak: Proje için gereksinimleri ve istekleri, en iyi müşteriler bilir. Müşterinin sürekli geliştirici takım ile iletişim halinde olması, geliştirme sürecini verimli kılar, hızlandırır ve müşterinin isteklerinde bir ürün ortaya çıkarılmış olur.

Herhangi bir plana bağlı kalmaksızın, değişimlere uyarlamalar yapmayı amaçlamak: Şirketler önceden bir projeye başlamadan önce planlar yapar ve geliştirme sürecine öyle başlardı. Oysa zaman içerisinde yapılan bu planlar, kullanılan teknolojiler vb. değişiklik gösterecektir.

Agile ile Geliştirme Süreci

Agile projeleri hızlı ve güvenilir bir şekilde, yönetebilmemize yarayan proje yönetim yaklaşımıdır. Tekrarlı bir geliştirme sürecini baz alır.

Agile yaklaşımı, tekrara dayalı geliştirme süreci

Agile metodu ile, ilk olarak planlama yapılır, planlama yapıldıktan sonra ardından geliştirme, test, yayılma(deployment) ve gözden geçirme yapılır, tüm adımlar gerçekleştikten sonra yeni bir döngü başlar ve geliştirme süreci devam eder.

Bu kavramlara Scrum üzerinden örnek verirsek;

Planlama: Sprint backlog planlama ile sprinte alınacak ögelerin planlanmasıdır.

Dizayn: Geliştirici takımın, ürün parçası için yapması gereken ilk şey tasarımdır.

Geliştirme: Bu kısımda tasarımı yapılan ürün parçalarının artık kodlama ve entegrasyon kısımları yapılır.

Test: Ortaya çıkan ürün bitti tanımına uyması için testler yapılır ve onaylanır.

Yayılma: Onaylanan ürün istenirse yayımı yapılabilir ya da sadece müşteriye gösterilebilir.

Gözden Geçirme: Buna örnek olarak sprint sonrası, sprint hakkında değerlendirmelerin yapıldığı gözden geçirme toplantıları verilebilir.

Agile Yaklaşımını Kullanmanın Avantajları ve Dezavantajları

Avantajlar olarak: Buraya kadar anlattığımız bilgiler ölçüsünde rahatlıkla söyleyebiliriz ki. Projelerin geliştirme süreçlerini güvenli ve hızlı hale getirmiştir. Projelerin başarı oranını geleneksel yöntemlere göre azımsanmayacak bir ölçüde arttırmayı başarmıştır.

Ürünlerin, müşterilerin isteğine göre geliştirilmesini sağlamıştır. İkili çıkarlar ile müşteri memnuniyeti sağlanmıştır ve geliştirici takım kendilerine verilen sorumlulukları yerine getirmiştir.

Bu yöntemi kullanan çok fazla büyük, küçük şirket vardır, kullanan şirketleri gösterecek herhangi bir resmi liste yoktur. Şirketlerin çoğunluğu, bu yöntemi kullandıklarını gizli tutma hakkını kullanırlar.

Dezavantaj olarak: Kullanıcılar bu yaklaşım ile daha az düşünülmüştür, yani geliştiricilerin çıkarları ön plandadır. Agile yaklaşımında ürünün gereksinimlerine ve kodlamasına, tasarım konularına göre daha çok önem verilir. Agile yaklaşımının uygulanamadığı bazı büyük projelerde vardır. Yine de bu dezavantajlar, Agile yaklaşımının başarısını azaltacak türde değildir.

--

--