Yazılım Geliştirme Yaşam Döngüsü (SDLC): Aşamalar ve Modeller
Yazılım geliştirme yaşam döngüsü (SDLC), yazılımın fikirden işletim ve emekliye ayrılmaya kadar geçtiği aşamaları tanımlar. Aşamalar ve modeller burada.
Yazılım geliştirme yaşam döngüsü nedir?
Yazılım geliştirme yaşam döngüsü (SDLC, Software Development Life Cycle), bir yazılımın ihtiyacın ortaya çıkışından işletime alınmasına, bakımına ve nihayetinde kullanımdan kaldırılmasına kadar geçtiği aşamaları tanımlayan çerçevedir. Amaç, geliştirmeyi gelişigüzel bir faaliyet olmaktan çıkarıp tekrarlanabilir, ölçülebilir ve denetlenebilir bir sürece dönüştürmektir.
SDLC belirli bir yöntemin adı değildir. Şelale, V-modeli, spiral, iteratif ya da çevik yaklaşımlar gibi farklı modeller aynı temel aşamaları farklı sırayla ve farklı sıklıkla uygular.
SDLC'nin temel aşamaları
Modellere göre adlar değişse de yaşam döngülerinde genellikle şu aşamalar bulunur:
- Planlama ve gereksinim analizi: İş ihtiyacı, kapsam, kullanıcılar ve kısıtlar belirlenir; gereksinimler yazılı hale getirilir.
- Tasarım: Mimari, veri yapıları, arayüzler ve bileşenler arası bağlantılar kurgulanır.
- Geliştirme: Tasarım koda dönüştürülür; ekip sürüm kontrolü ve kod inceleme gibi pratiklerle çalışır.
- Test: Birim, entegrasyon, sistem ve kabul testleriyle yazılımın gereksinimleri karşıladığı doğrulanır.
- Dağıtım: Yazılım hedef ortama alınır, kullanıcıya açılır.
- Bakım ve işletme: Hatalar giderilir, yeni ihtiyaçlar karşılanır, performans ve güvenlik izlenir.
Bu aşamalar bir kez yapılıp biten bir liste değil, özellikle çevik modellerde her yinelemede kısa ölçekte tekrarlanan bir döngüdür.
Yaygın SDLC modelleri
Model seçimi, projenin belirsizliğine, değişim hızına ve uyum yükümlülüklerine bağlıdır.
- Şelale: Aşamalar sırayla ilerler, her aşama bitmeden diğerine geçilmez. Gereksinimler baştan net ve sabitse uygundur; değişiklik maliyetlidir.
- V-modeli: Şelaleye benzer, ancak her geliştirme aşamasına karşılık gelen bir test aşaması tanımlar. Doğrulama sıkı olması gereken alanlarda kullanılır.
- İteratif ve artırımlı: Yazılım küçük parçalar halinde tekrar tekrar geliştirilir; her tur geri bildirimle iyileşir.
- Spiral: Her turda risk analizine ağırlık veren iteratif yapıdır.
- Çevik (Scrum, Kanban gibi): Kısa döngüler, sürekli geri bildirim ve değişime uyum öne çıkar.
Çevik yaklaşım SDLC'yi ortadan kaldırmaz; aşamaları kısa döngülerin içine sıkıştırır. Hâlâ gereksinim, tasarım, geliştirme, test ve dağıtım yapılır, ancak hepsi aynı yinelemenin içinde döner.
Küçük bir örnek
Örneğin bir şirket müşteri portalı geliştiriyor olsun. Planlama aşamasında portalın hangi işlemleri sunacağı ve kimlerin kullanacağı belirlenir. Tasarımda oturum yönetimi, veritabanı yapısı ve ekranlar planlanır. Geliştirme sırasında ekip özellikleri küçük parçalar halinde yazar ve her değişikliği başka bir geliştiricinin incelemesinden geçirir.
Test aşamasında hem tek tek işlevler hem de uçtan uca kullanıcı akışları denenir. Dağıtımda önce sınırlı bir kullanıcı grubuna açılış yapılır, sorun çıkmazsa tüm kullanıcılara yayılır. Yayından sonra bakım sürer: hata düzeltmeleri, yeni talepler ve izleme verisi bir sonraki planlama turuna girdi olur. Döngü böylece kapanır ve yeniden başlar.
Güvenli yazılım geliştirme yaşam döngüsüyle ilişkisi
Klasik SDLC'de güvenlik sıklıkla test aşamasının sonunda, bir kontrol listesi olarak ele alınırdı. Güvenli yazılım geliştirme yaşam döngüsü (SSDLC) bu bakışı değiştirir: güvenlik, her aşamaya yayılan bir sorumluluk haline gelir.
- Gereksinimde: Güvenlik ve gizlilik gereksinimleri, işlevsel gereksinimlerle birlikte yazılır.
- Tasarımda: Tehdit modelleme yapılır, saldırı yüzeyi daraltılır.
- Geliştirmede: Güvenli kodlama pratikleri ve bağımlılık denetimi uygulanır.
- Testte: Güvenlik testleri ve zafiyet taraması rutin hale gelir.
- İşletimde: İzleme, olay müdahalesi ve yama yönetimi sürer.
İkisi arasındaki fark yeni aşama eklemek değil, mevcut aşamalara güvenlik faaliyetleri yerleştirmektir. Böylece zafiyetler, düzeltilmesi pahalı geç aşamalar yerine ucuz erken aşamalarda yakalanır.
Sık yapılan hatalar
- Aşamaları atlamak: Gereksinimi netleştirmeden kod yazmaya başlamak, sonradan yeniden işe yol açar.
- Modeli projeye göre değil alışkanlığa göre seçmek: Belirsizliği yüksek bir projede katı şelale uygulamak ya da uyum denetimi olan bir projede hiçbir dokümantasyon tutmamak sorun yaratır.
- Testi sona bırakmak: Test geç yapıldığında hataların maliyeti artar.
- Bakımı unutmak: Yazılımın ömrünün büyük bölümü yayından sonra geçer; bakım planlanmazsa teknik borç birikir.
- Güvenliği ek özellik saymak: Güvenlik sonradan eklendiğinde mimariyi değiştirmeyi gerektirebilir.
Mindset programlarında nerede çalışılır?
Güvenli Yazılım Geliştirme Yaşam Döngüsü (SSDLC) programının müfredatında şu başlıklar yer alır: • SSDLC Çerçevesi ve Olgunluk • Gereksinim ve Planlama Aşaması • Tasarım ve Mimari Aşaması • Geliştirme ve Test Aşaması • Dağıtım, Bakım ve Yanıt • Yönetişim, Ölçüm ve Atölye
CSSLP (Güvenli Yazılım Yaşam Döngüsü Uzmanı) Hazırlık Eğitimi programının müfredatında şu başlıklar yer alır: • Genel Bilgi • Güvenli Yazılım Kavramları • Güvenli Yazılım Gereksinimleri • Güvenli Yazılım Mimarisi ve Tasarımı • Güvenli Yazılım Uygulaması • Güvenli Yazılım Testi • Güvenli Dağıtım, Operasyon ve Bakım • Güvenli Yazılım Tedarik Zinciri • Soru Çözümü ve Sınav Hazırlığı
İlgili Mindset programı
Güvenli Yazılım Geliştirme Yaşam Döngüsü (SSDLC)
Sık sorulan sorular
SDLC ile çevik yöntem aynı şey mi?
Hayır. SDLC, yazılımın yaşam boyunca geçtiği aşamaları tanımlayan genel bir çerçevedir. Çevik yaklaşım ise bu aşamaları kısa döngülerle ve sürekli geri bildirimle yürüten bir modeldir. Yani çevik, SDLC'ye alternatif değil, onu uygulamanın bir yoludur. Seçilen model, aşamaların hangi sırayla ve ne sıklıkla tekrarlanacağını belirler, ancak aşamaların kendisi ortadan kalkmaz.
SDLC'nin hangi aşaması en önemlidir?
Aşamalar birbirine bağlı olduğu için tek bir aşamayı öne çıkarmak yanıltıcıdır. Yine de gereksinim ve tasarım aşamasındaki hatalar sonraki aşamalara yayılarak maliyeti büyüttüğünden, bu aşamalarda özenli çalışmak genellikle sonraki sorunları azaltır. Bunun nedeni, yanlış anlaşılan bir ihtiyacın kodlandıktan sonra düzeltilmesinin, yazılmadan önce netleştirilmesinden çok daha emek istemesidir.
Güvenli SDLC neden ayrı bir kavram olarak anılıyor?
Çünkü güvenlik geleneksel olarak son aşamada ele alınıyordu. Güvenli SDLC, gereksinimden işletime kadar her aşamaya güvenlik faaliyeti yerleştirir. Böylece zafiyetler yayın öncesinde, düzeltilmesi daha kolay olduğu erken aşamalarda yakalanır. Ayrıca erken aşamada bulunan bir tasarım zafiyeti, yazılım dağıtıldıktan sonra yama ile kapatılmaya çalışılandan çok daha düşük maliyetle giderilir.
SDLC yalnızca büyük ekipler için mi gereklidir?
Hayır. Küçük ekipler de gereksinim, tasarım, test ve bakım adımlarından geçer; fark, süreci ne kadar resmî yürüttüklerindedir. Küçük bir ekip hafif bir akışla çalışabilir, ancak aşamaları bilinçli yönetmek hata ve yeniden iş riskini azaltır. Bu çerçeve tek kişilik bir proje için bile aynı soruları sorar: ne yapılacak, nasıl kurulacak, nasıl doğrulanacak ve nasıl sürdürülecek.