Çevik Yazılım Geliştirme
2026
xog7rwhiclassroom.google.com → Sınıfa katıl → kodu girin (kurumsal hesapla).Bu dersin sonunda:
Not
Bu memnuniyetsizlik, 1980’ler ve 1990’larda yazılım süreçlerindeki genel giderleri (bürokrasi, dokümantasyon vb.) azaltmayı ve değişime daha hızlı yanıt vermeyi amaçlayan Çevik Yöntemlerin doğuşunu hazırlamıştır.
Çevik yöntemlerin amacı, yazılım sürecindeki genel giderleri azaltmak (örneğin, dokümantasyonu sınırlandırarak) ve aşırı yeniden çalışma yapmadan değişen gereksinimlere hızla yanıt verebilmektir.
Bu yöntemler:
1990’ların sonunda yazılım projeleri geç teslim, yüksek maliyet ve değişime uyumsuzluk sorunlarıyla boğuşuyordu.
Bu duruma tepki olarak farklı hafif yöntemleri savunan uzmanlar, Şubat 2001’de ABD’nin Utah eyaletindeki Snowbird’de bir araya geldi.
Aralarında Scrum, XP, Crystal, DSDM gibi yaklaşımların öncüleri bulunan 17 kişi, ortak değerleri tanımlayarak “Çevik Manifesto (Agile Manifesto)yu yayımladı.
Amaç: Yazılım geliştirmeyi daha insan merkezli, işbirliğine açık ve değişime uyumlu hale getirmekti.
Toplantı Görseli
Önemli
“Bizler daha iyi yazılım geliştirme yollarını uygulayarak ve başkalarının da uygulamasına yardım ederek ortaya çıkartıyoruz. Bu çalışmaların sonucunda:”
“Özetle, sol taraftaki maddelerin değerini kabul etmekle birlikte, sağ taraftaki maddeleri daha değerli bulmaktayız.”
Kaynak: http://agilemanifesto.org
Çevik yöntemler, çalışan yazılımı küçük adımlarla geliştirmeyi ve sık geri bildirim almayı önemser. Artım geliştirmek ile artımı kullanıcıya yayımlamak farklı kararlardır.
| Prensip | Açıklama |
|---|---|
| Müşteri Katılımı | Müşteriler, geliştirme süreci boyunca takımla yakın çalışır. Yeni gereksinimleri sağlar, önceliklendirir ve artımları değerlendirir. |
| Değişimi Benimseme | Sistem gereksinimlerinin değişimi kaçınılmazdır. Sistem, bu değişiklikleri kabul edecek esnek bir şekilde tasarlanmalıdır. |
| Küçük Artımlar ve Geri Bildirim | Yazılım küçük artımlarla geliştirilir; uygun olduğunda kullanıcıya sunularak geri bildirim alınır. |
| Süreçler Değil, İnsanlar | Takımın yetenekleri bilinmeli ve bu yeteneklerden faydalanılmalıdır. Takım üyeleri, detaylı süreçleri takip etmek yerine kendi çalışma yaklaşımlarında özgür bırakılmalıdır. |
| Sadeliğin Korunması | Hem geliştirilen yazılımda hem de geliştirme sürecinde sadeliğe odaklanılmalıdır. Gereksiz karmaşıklık aktif olarak azaltılmalıdır. |
Çoğu proje, plan odaklı ve çevik süreçlerin unsurlarını bir arada barındırır. Doğru dengeyi bulmak için aşağıdaki teknik, insani ve organizasyonel sorunları değerlendirmek gerekir:
| Pratik | Açıklama |
|---|---|
| Artımlı Planlama | Gereksinimler “kullanıcı öyküleri” olarak kartlara yazılır. Sürüme dahil edilecek öyküler, öncelik ve zamana göre belirlenir. |
| Küçük Yayımlar | İş değeri sağlayan en küçük fonksiyonellik öncelikli olarak geliştirilir ve sistem sık aralıklarla yayımlanır. |
| Sade Tasarım | Sadece mevcut gereksinimleri karşılayacak kadar tasarım yapılır, gelecekteki olası ihtiyaçlar için fazladan tasarım yapılmaz. |
| Önce Test Geliştirme | Fonksiyonun kodu yazılmadan önce, o fonksiyonu test edecek otomatik birim testleri yazılır. |
| Yeniden Düzenleme (Refactoring) | Kodun işlevselliğini değiştirmeden, yapısını ve okunabilirliğini iyileştirmek için sürekli olarak yeniden düzenlenir. |
| Pratik | Açıklama |
|---|---|
| Eşli Programlama (Pair Programming) | Yazılım geliştiriciler, tek bir bilgisayarda çiftler halinde çalışarak birbirlerinin kodunu sürekli denetler ve destek olurlar. |
| Ortak Sahiplik | Kodun tamamından tüm ekip üyeleri sorumludur. Herkes, sistemin herhangi bir bölümünü değiştirebilir. |
| Sürekli Bütünleştirme | Bir görev tamamlanır tamamlanmaz sistemle bütünleştirilir ve tüm testler çalıştırılır. |
| Sürdürülebilir Hız | Fazla mesai, kod kalitesini ve orta vadeli üretkenliği düşürdüğü için kabul edilmez. Haftada 40 saatlik çalışma hedeflenir. |
| Yerinde Müşteri | Müşteri temsilcisi, geliştirme ekibinin bir parçası olarak tam zamanlı hazır bulunur, soruları yanıtlar ve gereksinimleri netleştirir. |
Örnek: ‘İlaç Reçeteleme’ Hikayesi
‘İlaç Reçeteleme’ Hikayesi
“Kate, bir kliniğe giden bir hastaya ilaç yazmak isteyen bir doktordur. Hasta kaydı zaten bilgisayarında görüntülendiğinden, ilaç tedavisi alanına tıklar ve ‘mevcut ilaç’, ‘yeni ilaç’ veya ‘formüler’ seçeneklerinden birini seçebilir.”
Öyküden Görev Kartlarına
Bu öykü, aşağıdaki gibi görev kartlarına bölünebilir:
İlk istek: Kullanıcılar ürün yorumlarını okuyabilsin, yorum yazıp puan verebilsin ve fotoğraf ekleyebilsin.
Bu istek birkaç ayrı kullanıcı öyküsü içerir. Her birini bağımsız olarak değerlendirmek ve önceliklendirmek daha kolaydır.
İlk artımda yorumları okumayı, sonraki artımlarda yorum yazma ve fotoğraf eklemeyi ele alabiliriz.
Bu kriterler ne beklediğimizi söyler; teknik görevler ise nasıl yapacağımızı planlar.
Kodun dış davranışını (işlevselliğini) değiştirmeden, iç yapısını iyileştirme sürecidir.
Not
Örnekler: Yinelenen kodu kaldırmak için bir sınıf hiyerarşisi oluşturmak, anlaşılırlığı artırmak için değişken ve metot adlarını yeniden adlandırmak, satır içi kodu bir kütüphane metodu çağrısıyla değiştirmek.
Önemli
Test otomasyonu bu sürecin temelidir. Junit (Java), PyTest (Python) gibi çerçeveler, yürütülebilir testler yazmayı ve çalıştırmayı kolaylaştırır.
Not
Araştırmalar, eşli programlamanın verimliliğinin, tek başına çalışan iki programcının toplam verimliliğine yakın olduğunu göstermektedir. Bunun nedeni, daha az hata yapılması, daha az yeniden işleme ve daha iyi tasarım kararlarıdır.
Scrum, çevik yaklaşımın en yaygın kullanılan çerçevesidir. Sprint’ler, sorumluluklar, etkinlikler ve eserler tanımlar; kodlama ve test tekniklerini zorunlu kılmadığı için XP pratikleriyle birlikte kullanılabilir.
Scrum’ı ayrıntılı olarak ayrı bir derste, Scrum dersinde işliyoruz.
Çevik yöntemler, küçük ve aynı yerde bulunan ekipler için geliştirilmiştir. Ancak günümüzde büyük sistemler ve büyük kurumsal yapılar için de kullanılmaktadır. Bu, “ölçeklendirme” sorununu ortaya çıkarır.
Büyük sistemlere çevik yöntemleri uygularken, “saf” çeviklikten ödün vermek ve bazı plan odaklı pratikleri entegre etmek gerekir:
Yazılım Mühendisliği – OMÜ | 🏠