Waterfall Modelden Agile Spiral Modele Doğru

20 Eyl

Bir yazılımın ortaya çıkabilmesi için öncelikle müşterinin ne tür ihtiyaçlarını karşılayacağı belirlenmelidir. Daha sonra bu ihtiyaçlara uygun teknolojilerin ve yöntemlerin belirlenmesinin ardından kodlama ve test etme işlemleri gerçekleştirilerek müşteriye hazır bir ürün sunulur.

Waterfall
Waterfall Model

Yazılımın geliştirme sürecinin başından itibaren sırayla analiz, plan, tasarım, kodlama ve test süreçleri birbirini takip eden adımlar dizisidir. Bu modele waterfall(şelale) denilmektedir. Bazen bu adımlara destek(maintenance) süresi de eklenmektedir. Bir yazılımın tüm gereksinimleri müşteriden alındıktan sonra bu adımlar takip edilerek son ürün ortaya çıkmaktadır. Ancak uzun zaman alan yazılım  projelerinde zaman içerisinde teknolojilerin veya müşterilerin ihtiyaçlarının değişebileceğinden yazılımda da değişiklikler gerekebilmektedir. İki sene süren bir projeyi düşünecek olursak proje başında belirlenen istekler iki sene sonunda mevzuatlar veya iş kuralları veya teknoloji değişikliğinden dolayı bazı ihtiyaçları karşılamayabilir. İş sonunda müşterinin ihtiyaç duymadığı bir ürün ortaya çıkabilir. Diğer taraftan analiz veya planlama sırasında yapılan bir hata ancak test sırasında ortaya çıkabilir. Proje zamanlaması için yapılan tahminler tutamayabilir.

Zaman ve bütçe kısıtlamasının olduğu startup gibi bir şirket için bu tür geliştirme modeli bir süre sonra işletmeye zarar ettirmeye başlar.

Zamanla edinilen tecrübeler geliştiriceleri bu modeli biraz değiştirmeye zorlamıştır. Müşterilerin ihtiyaçlarını guruplara bölerek her ihtiyaç için analiz, plan, tasarım, kodlama ve test süreçlerini yeniden yapılması uygun görülmüştür. Bu model, spiral(sarmal) model olarak adlandırılmıştır. Spiral model agile(çevik) proje geliştirme yaklaşımı içerisinde kullanılan bir modeldir. Burada çeviklikten kasıt değişime ayak uydurabilmektir.

Spiral Model
Spiral Model

Eğer iki senelik bir proje süreniz varsa, bu model size birinci ayın sonunda müşterinin belirttiği ihtiyaçlardan birini çalışır şekilde ona sunmanızı sağlamaktadır. Müşteriye tüm proje süresi sonunda çalışan bir ürün sunmak yerine, ona her ay yeni bir özelliği devreye alınmış olan bir yazılım ürünü sunulmuş olur.

Örneğin bir hesap makinesi yapmayı tasarlıyorsanız birinci adımda dört işlemi yapabilen bir hesap makinesi yapmak ve müşteriye sunmak yeterlidir. İkinci adımda üslü ve köklü işlemler ihtiyacını karşılayan özellik eklenir. Üçüncü adımda müşteriden yeni bir talep gelir ve trigonometrik hesaplar yapabilen özellikler eklenebilir. Daha sonra gelen geri dönüşlere(feedback) göre belki matris çözebilen özellikler gerekebilir. Burada önemli olan, her adım sonunda müşterinin elinde çalışan bir hesap makinesinin olmasıdır. Eğer waterfall model ile geliştirme yapılırsa tüm özellikler ve testler bittiğinde müşteriye çalışan bir ürün teslim edilir. Belki de müşterinin hiç ihtiyaç duymayacağı matris işlemler özelliğini de eklemiş olabilirsiniz. Şunu unutmamalıyız ki; gereksiz işlere harcanan zaman, işi yapan tarafa gider olarak yazılır

Agile Manifesto

Agile(çevik) yazılım geliştirme yaklaşımı bir işi küçük parçalara bölerek yapmayı ilke edinen bir disiplindir. Bir ürün veya yazılım aracı veya bir kodlama yöntemi değildir.

Agile (çevik) yazılım geliştirme konusunda, yazılım sektöründe tecrübeli bir ekip tarafından bir manifesto yayınlanmıştır. Manifesto içeriğine ve ilgili kişilere  http://www.agilemanifesto.org/ adresinden ulaşabilirsiniz.

Agile manifestonun dört temel ilkesi vardır.

English:

  1. Individuals and interactions over processes and tools
  2. Working software over comprehensive documentation
  3. Customer collaboration over contract negotiation
  4. Responding to change over following a plan

Türkçe:

  1. Süreç ve araçlardan ziyade bireyler ve etkileşimler
  2. Kapsamlı dökümantasyondan ziyade çalışan yazılım
  3. Sözleşme pazarlığından ziyade müşteri ile işbirliği 
  4. Plana bağlı kalmaktan ziyade değişime yanıt vermek 

Bu ilkeler ne anlama geliyor?

Manifesto ilkelerinde, yazılım geliştirme sürecinin önünü açan öncelikler belirlenmiştir. Tüm cümlelerde ortak olarak kullanılan “ziyade” kelimesi işte bu öncelikleri vurgulamaktadır.

1. Süreç ve araçlardan ziyade bireyler ve etkileşimler: Yazılımlar bilgisayarlar tarafından çalıştırılan ürünler olsa da yazılımı talep eden müşteriler ve onu geliştiren programcılar insanlardır. Müşteriler ve geliştirici ekip arasında güçlü bir iletişim olmalıdır. Ürünler ve araçlar değişebilir, eskiyebilir ve gözden çıkarılabilir. Fakat birbiriyle uyumlu iyi bir ekibiniz varsa onu gözden çıkaramazsınız. Bu nedenle bireylere değer vermek işletilen süreç ve kullanılan araçlardan daha önemlidir.

2. Kapsamlı dökümantasyondan ziyade çalışan yazılım: Projelerde müşteri ile el sıkışmanın şartı iş sonunda çalışan kaliteli bir yazılımın olmasıdır. Müşteriler kapsamlı dökümanlara para ödemek istemez ama tercihen isterler. Müşteriyi boğmayan ancak ona yeteri kadar bilgi veren bir dökümantasyonunuz olmalıdır. Bu nedenle önceliğimiz çok kapsamlı bir dökümantasyon oluşturmak yerine iyi çalışan bir yazılım olmalıdır.

3. Sözleşme pazarlığından ziyade müşteri ile işbirliği: Müşteri tarafından sunulan şartnameler ve yapılan sözleşmeler her iki tarafa güvenlik duygusu verir. Bir sözleşmeye imza atılır ve belirli bir zamanda yapılacak işler planlanmış olur. Agile süreçlerde her zaman müşteri ile işbirliği ön plandadır. Kararlar beraber alınır, sürekli görüş alışverişi yapılır, teslimatlar sonrasında geri bildirimler alınarak değerlendirmeler yapılır. Yani iş sözleşmesini ve talepleri alıp iş bitiminde görüşmek diye bir şey olmaz.

4. Plana bağlı kalmaktan ziyade değişime yanıt vermek: Agile yani çeviklik bir plana bağlı kalmadan değişime cevap vermek demektir. Zamanla gereksinimler, mevzuatlar iş kuralları değişebileceğinden uyguladığınız çözüm yöntemi de bu değişimlere ayak uydurabilmelidir.

Agile süreçlerde Scrum, Kanban ve Lean gibi proje yönetim yaklaşımları yanında Extreme Programming(XP) gibi yazılım geliştirme yaklaşımları kullanılmaktadır. Extreme Programing yazılım geliştirme yöntemleri, uzun yıllar tecrübe edilmiş ve kendini kanıtlamış yöntemler olarak bilinir. Bunlar arasında Test Driven Development gibi önce test kodunun yazılıp ardından çalışan kodun üretildiği bir yaklaşım vardır. Pair Programming yani eşli programlama diye bilinen iki programcının aynı kodu geliştirdiği yaklaşımlar vardır. Geliştiricilerin birbirlerinin kodunu incelemesi ve yorumlaması(core review) da yine bir diğer yaklaşımdır.

Bütün bu yöntemler yazılımın türüne bağlı kalmadan uygulanabilecek yöntemlerdir. Yani web uygulaması, mobil uygulamalar, oyunlar veya masaüstü uygulamaları gibi her türlü projede çevik yöntemler uygulanabilmektedir.

Neden Agile?

Bu sorunun birinci nedeni agile kavramının değişime cevap verebilme yeteneğidir. Agile geliştirmenin bir diğer nedeni ise çabuk sonuç alma isteğidir. Taleplerin adım adım karşılanıp çalışan ürünlerin müşteriye sürekli teslim edilmesi neticesinde size olumlu veya olumsuz geri bildirimler akmaya başlar. Müşteri ile işbirliği içinde olduğunuzdan doğru şeyi yapıp yapmadığınızı hemen anlayabilirsiniz. Bu sayede harcadığınıza karşılık kazandığınızı görebilirsiniz yani yatırım getirisi (Return on investment) hakkında bilgi sahibi olabilirsiniz. Agile süreçlerde büyük bir yazılımın küçük parçaları ile çalışıldığı için erken yapılan hatalar büyük bir felakete neden olmaz. Diğer bir deyişle hatanın erkenden fark edilmesi sağlanmış olur. Ekiplerin düzgün bir yapıda oluşturulması ile kaynak planlaması da daha mantıklı olacaktır. Örneğin waterfall yöntemi ile yapılan bir yıllık bir projede analiz için gerekli çalışanların işi üç ayda bittikten sonra gereksiz yere projede tutmak istemeyebilirsiniz. Ancak ilerde analiz ile ilgili bir sorun çıkarsa diye tutmak zorunda kalabilirsiniz. Spiral yöntemde ise her döngüde süreç adımları yeniden ele alındığı için bu duruma uygun bir takım oluşturulabilir.

 

Çevik Süreç Prensipleri – Agile Principles

9 Ağu

Bu yazıda çevik süreçlerde benimsenen 12 prensibi ingilizce ve türkçe anlamlarıyla açıklamaya çalıştık. Çevik süreçlerde proje geliştirenlerin bu ilkelere uyması gerekmektedir. Şunu da belirtmekte fayda var ki, çevik süreçler bir yazılım geliştirme metodu değildir. Yazılım geliştirme disiplinidir. Belli kurallar dahilinde ilerlemeyi amaçlayan bir disiplindir. Aşağıdaki ilkelerle de bu disiplini anlamaya çalışalım.

EN: “Our highest priority is to satisfy the customer through early and continuousdelivery of valuable software.

TR: “En önemli önceliğimiz, çalışır haldeki programları kısa sürelerde oluşturup teslim ederek müşteriyi tatmin etmektir.

Müşterinin tatmin olması demek, müşterinin yaptırdığı projenin ilerleyişini görerek eksikliklerinin giderilmesi ve aklındaki soru işaretlerinin ortadan kalkmasıyla olu. Bu sadece yazılım işinde değil diğer sektörlerde de böyledir. Örneğin inşaat işi yaptırıyorsa sık sık gidip inşaat alanını gezer. Müşteri işin istediği gibi ilerlediğini gördüğünde tatmin olur. İş bitiminde de müşteri isteklerini karşılayan bir proje teslim edilmiş olur.

 EN: “Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.”

TR: “Yazılımdaki değişiklikler hoş karşılanmalıdır. Bu değişiklikler yazılım süresini uzatsa bile hoş karşılanmalıdır. Çünkü çevik süreçler değişiklikleri müşterinin rekabet avantajını korumak için kullanılır.

EN: “Deliver working software frequently, from a couple of weeks to a couple of months, with a preference for the shorter timescale.”

TR: “Birkaç hafta ile birkaç ay gibi kısa zaman dilimlerine çalışan yazılımları oluştur.

Müşteriye plan ya da belgeleri teslim etmek değil çalışan programları sunmak gerekir. Teslimatlar arasındaki değişim, gelişimin göstergesidir.

EN: “Business people and developers work together daily throughout the project.”

TR: “Müşteri ve programcılar proje boyunca beraber çalışır.

Projenin çevik olması; müşteri, programcılar ve hissedarların beraber etkileşim içerisinde olmasını gerektirir. Müşteri veya programcı tarafındaki gereksinimlerin anında giderilmesi sağlanır.

EN: “Build projecsts around motivated individuals, give them the environment and support they need and trust them to get the job done.”

TR: “Motivasyonu yüksek bireylerle proje oluştur. Onlara ihtiyaç duydukları ortamları sağlayarak işi yapabilecekleri konusunda onlara güven.”

Bireyler en önemli başarı faktörüdür. Her birey takımın bir parçasıdır. Bireyler, kendilerine duyulan güvenle motive olurlar. Bu şekilde kendilerini önemser ve işe verirler. Yardımlaşma ve dayanışmayla, bilgi bakımından kısa sürede aynı standartlara gelirler.

EN: “The most efficient and effective method of conveying information with and within a development team is face-to-face conversation.”

TR: “Bilgi alışverişinde en etkili yöntem yüz yüze görüşmektir.

Çevik süreçlerde insanlar birbirleriyle konuşurlar. Ekip, konuşarak sorunların çözümüne daha kolay oluşur.

EN: “Working software is the primary measure of progress.”

TR: “Çalışan yazılım, sürecin işlediğinin birincil göstergesidir.

Çevik projelerde sürecin ölçütü, o anda müşterinin ihtiyacını karşılayan bir yazılımın ortaya koyulmasıyla belirlenir. Sunulan ilerleme raporları veya dökümantasyonlar ile ölçüm yapılmaz. Dökümanlar yalan söyleyebilir fakat çalışan uygulama gerçekleri söyler. Bu da çevik süreçlerin müşteri lehine olduğunu gösterir.

EN: “Agile processes promote sustainable development. The sponsors, developers and users should be able to maintain a constant pace indefinitely.”

TR: “Çevik süreçler sürdürülebilir gelişimi destekler. Müşteriler, yazılımcılar ve kullanıcılar bir arada çalışabilmelidirler.

Süreç istikrarlı bir şekilde ve rutin bir tempoda ilerlemelidir. Motivasyonun bozulmaması açısından aşırı iş yükü ve fazla mesai hoş karşılanmaz. Görevler, ekibe adil bir şekilde dağıtılır.

EN: “Continuous attention to technical excellence and good design enhances agility.”

TR: “Teknik mükemmelliğe sürekli özen gösterilmesi ve iyi tasarım, çevikliği güçlendirir.

Hızlı ilerlemek için, yazılımın temiz ve sağlam tutulmasıyla olur. Bu yüzden tüm ekip en kaliteli kodu üretmek için kararlıdır. Hataları gidermeyi ve kod iyileştirmelerini refactoring sırasında gerçekleştirebilirler.

EN: “Simplicity – the art of maximizing the amount of work not done – is essential.”

TR: “Baitlik esastır.

Çevik takım üyeleri, hedeflerine uygun en basit çözümü uygularlar. Karmaşık ve gereksiz kod yazmaktan kaçınırlar. Bugün yarın şu da lazım olur diye iş yapmazlar. Günün ihtiyaçlarına uygun en basit çözümü sunarlar.

EN: “The best architectures, requirements and designs emerge from self-organizing teams.”

TR: “En iyi mimariler, gereksinimler ve tasarımlar kendi kendine organize olan takımlardan çıkar.

 Çevik ekipler kendi kendine organize olabilirler. Sorumluluklar ekibe eşit şekilde paylaştırılır.  Bu sorumlulukları yerine getirmek için en iyi yol belirlenir.

EN: “At regular intervals, the team reflects on how to become more effective, then

tunes and adjusts its behavior accordingly.”

TR: “Takım, nasıl daha etkili olabileceği konusunda kendini belirli aralıklarla sorgular ve buna göre davranışlarını belirler.

 Çevik bir ekip sürekli olarak, kuralları, ilişkileri, sözleşmeleri ve organizasyon yapısını ayarlar.