Ünite 2 / 12

Gereksinim Analizi ve Yazılım Tasarımı

Kazanimlar:

  • Belirsiz iş isteklerini AI desteğiyle net, test edilebilir yazılım gereksinimlerine ve kullanıcı hikâyelerine dönüştürebilme
  • Sistem tasarımı, veri modeli ve mimari kararların artı-eksilerini AI ile yapılandırılmış biçimde karşılaştırabilme
  • AI'ın önerdiği tasarımı gereksinimlere, ölçeklenebilirliğe ve kısıtlara karşı eleştirel olarak doğrulayabilme

Yazılım projelerinin büyük kısmı kötü kod yüzünden değil, yanlış anlaşılmış gereksinim yüzünden başarısız olur. "Kullanıcılar rapor indirebilsin" gibi tek cümlelik bir istek, arkasında düzinelerce cevaplanmamış soru saklar: Hangi formatta? Kim yetkili? Kaç kayıt? Yavaşsa ne olur? Gereksinim analizi (bir iş isteğini net, test edilebilir teknik ihtiyaçlara çevirme işi) ve yazılım tasarımı (bu ihtiyaçları karşılayacak yapının kâğıt üstünde kurgulanması), kod yazmadan önceki en pahalı hataların önlendiği aşamadır. Bu ünitede AI'ı bu aşamada bir "düşünce ortağı" olarak kullanmayı öğreneceğiz: belirsizliği açığa çıkaran, seçenekleri sıralayan, ama son kararı size bırakan bir ortak.

AI burada iki büyük değer üretir. Birincisi, sizin atladığınız soruları sorar; bir istekteki gizli varsayımları ve kenar durumları yüzeye çıkarır. İkincisi, bir tasarım kararının artılarını ve eksilerini hızlıca tablolaştırır. Ancak tehlike de burada: AI, bağlamınızı (bütçe, ekip, mevcut sistem, yasal kısıt) tam bilmeden "en iyi uygulama" diye genel geçer tavsiyeler verir. Bu tavsiyeleri kendi gerçeğinize karşı süzmek sizin işinizdir.

Kavramlar: Kullanıcı hikâyesi (user story): Bir ihtiyacı "... olarak, ... yapabilmek istiyorum, çünkü ..." kalıbında ifade eden kısa cümle. Kabul kriteri (acceptance criteria): Bir işin "bitti" sayılması için sağlanması gereken, test edilebilir koşullar. Fonksiyonel olmayan gereksinim: Hız, güvenlik, ölçeklenebilirlik gibi "ne yapacağı" değil "nasıl davranacağı" ile ilgili gereksinimler.

Belirsiz İstekten Test Edilebilir Gereksinime

İyi bir gereksinim ölçülebilir ve doğrulanabilirdir. "Sistem hızlı olsun" değil, "arama sonuçları 500 ms içinde dönsün" gibi. AI'ı belirsizliği daraltmak için kullanmanın adım adım yolu:

  1. İsteği olduğu gibi verin ve soru ürettirin. AI'dan çözüm değil, önce "bu istekte belirsiz olan her şeyi soru olarak listele" isteyin.
  2. Cevapları siz verin. Bağlamı yalnızca siz bilirsiniz; AI'ın sorularını gerçek iş kısıtlarınızla yanıtlayın.
  3. Kullanıcı hikâyelerine ve kabul kriterlerine çevirtin. Netleşen ihtiyacı test edilebilir maddelere dönüştürün.
  4. Kenar durumları ve olumsuz senaryoları ekletin. "Boş sonuç", "yetkisiz kullanıcı", "çok büyük dosya" gibi.

Belirsizlik çıkarma promptu:"Aşağıdaki iş isteğini bir yazılım gereksinimine çevireceğiz.Henüz çözüm önerme. Önce bu istekte cevaplanmamış olan TÜM belirsizliklerive gizli varsayımları soru listesi olarak çıkar. Soruları şu başlıklardagrupla: kapsam, kullanıcı/yetki, veri hacmi, performans, hata durumları,güvenlik. İstek: 'Kullanıcılar sipariş geçmişini rapor olarak indirebilsin.'"

Kullanıcı hikâyesi + kabul kriteri promptu:"Aşağıdaki netleşmiş ihtiyacı, INVEST ilkelerine uygun kullanıcı hikâyelerineböl. Her hikâye için 3-5 test edilebilir kabul kriteri yaz (Given-When-Thenbiçiminde). En az 2 olumsuz senaryo (yetkisiz erişim, boş veri) ekle.İhtiyaç: [buraya netleşmiş ihtiyacı yaz]"

Tasarım Kararlarını AI ile Karşılaştırma

Tasarım, sürekli takas (trade-off) yapmaktır: hız mı esneklik mi, basitlik mi ölçeklenebilirlik mi? AI, bu takasları hızlı bir tabloya döker. Örneğin bir "bildirim gönderme" özelliği için senkron mu (istek anında gönder) yoksa asenkron mu (kuyruğa at, arka planda gönder) yaklaşımını tartışabilirsiniz.

Tasarım karşılaştırma promptu:"Bir 'kullanıcıya e-posta bildirimi gönderme' özelliği tasarlıyorum.İki yaklaşımı karşılaştır: (A) HTTP isteği sırasında senkron gönderim,(B) mesaj kuyruğuna atıp arka planda asenkron gönderim.Şu eksenlerde tablo yap: kullanıcı bekleme süresi, hata dayanıklılığı,karmaşıklık, altyapı maliyeti, hata ayıklama zorluğu. Sonunda hangi durumdahangisini seçeceğimi 2 cümleyle özetle. Kararı benim yerime verme."

Eksen

Senkron gönderim

Asenkron (kuyruk)

Kullanıcı bekleme süresi

Uzun (gönderimi bekler)

Kısa (hemen döner)

Hata dayanıklılığı

Düşük (gönderim patlarsa istek patlar)

Yüksek (yeniden dene mümkün)

Karmaşıklık

Düşük

Orta-yüksek (kuyruk altyapısı)

Altyapı maliyeti

Düşük

Ek bileşen gerekir

Uygun olduğu yer

Düşük hacim, basit uygulama

Yüksek hacim, kritik teslimat

İpucu: AI'a "kararı benim yerime verme, sadece seçenekleri ve koşulları göster" demek, sizi düşünmeye zorlar ve körü körüne bir öneriyi kabul etme riskini düşürür. En iyi tasarım kararı, bağlamınızı bilen kişinin (sizin) verdiği karardır.

Zayıf Prompt / Güçlü Prompt

ZAYIF:"Sipariş sistemi için bir veritabanı tasarla."(Sonuç: hangi ölçek, hangi ilişkiler, hangi kısıtlar belli değil; genel,gerçeğe uymayan bir şema.)GÜÇLÜ:"Küçük bir e-ticaret için veri modeli taslağı öner. Varlıklar: Müşteri,Sipariş, Ürün, SiparişKalemi. Kısıtlar: bir siparişte çok ürün olabilir;ürün fiyatı zamanla değişebilir ama geçmiş siparişte o anki fiyat korunmalı;günde ~500 sipariş bekleniyor. İlişkileri ve neden o kararı verdiğini açıkla.Fiyat geçmişi sorununu nasıl çözdüğünü özellikle belirt. Kod değil, varlıkve alan listesi olarak ver."

Güçlü promptun farkı; ölçeği (günde 500 sipariş), iş kuralını (geçmiş fiyat korunmalı) ve istenen çıktı biçimini vermesidir. "Geçmiş fiyat korunmalı" gibi tek bir cümle, tasarımı tamamen değiştirir; bunu belirtmezseniz AI yanlış ama makul görünen bir şema üretir.

Mini Vakalar

Vaka 1 — Gizli varsayım. Bir ekip "kullanıcı profil fotoğrafı yükleyebilsin" isteğini doğrudan kodlar. AI'a önce belirsizlik sorduran başka bir ekip ise "maksimum boyut? izinli formatlar? uygunsuz içerik denetimi? eski fotoğraf silinsin mi?" gibi 8 soru çıkarır. İlk ekip, 20 MB'lik dosyalar sunucuyu doldurduğunda sorunu üretimde öğrenir; ikinci ekip tasarımda çözer.

Vaka 2 — Yanlış ölçek varsayımı. AI, bir raporlama özelliği için karmaşık bir önbellek (cache) katmanı önerir. Mühendis, gerçek verinin günde yalnızca 30 rapor olduğunu belirtince AI öneriyi sadeleştirir. Ölçeği belirtmemek, gereksiz karmaşıklık maliyeti doğurur; belirtmek 2 haftalık gereksiz işi önler.

Vaka 3 — Kabul kriteri boşluğu. "Ödeme başarısız olursa ne olacak?" sorusu hiç sorulmadığı için bir sipariş sistemi, başarısız ödemede siparişi yine de "onaylandı" işaretler. AI'ın ürettiği olumsuz senaryo listesi bu boşluğu yakalar; 1 satırlık kabul kriteri, gerçek para kaybını önler.

Sık yapılan hatalar

  • İsteği doğrudan koda geçmek. Belirsizlik çözülmeden yazılan kod, yanlış problemi hızlıca çözer.
  • AI'ın genel "en iyi uygulama"sını körü körüne almak. Bağlamınızı (ölçek, bütçe, ekip) belirtmezseniz öneri size uymaz.
  • Fonksiyonel olmayan gereksinimleri atlamak. Hız, güvenlik ve ölçek belirtilmezse tasarım eksik doğar.
  • Sadece mutlu senaryoyu düşünmek. Boş veri, yetkisiz kullanıcı, hata durumu gibi olumsuz senaryolar tasarımda olmalıdır.
  • Kararı AI'a devretmek. AI seçenek üretir; hangi takasın işinize uyduğuna siz karar verirsiniz.

Özetle

Gereksinim analizi ve tasarım, en ucuz hataların yakalandığı aşamadır. AI burada belirsizliği açığa çıkaran sorular üretir, kullanıcı hikâyeleri ve kabul kriterleri taslaklar, tasarım takaslarını tablolaştırır. Ama bağlamı yalnızca siz bilirsiniz; AI'ın önerilerini ölçek, bütçe, ekip ve yasal kısıtlarınıza göre süzmek ve nihai kararı vermek sizin işinizdir. "Kararı benim yerime verme, seçenekleri göster" disiplini, hem daha iyi tasarım hem daha derin öğrenme getirir.

Uygulama görevi

Kendi bağlamınızdan tek cümlelik bir iş isteği seçin. Önce AI'a belirsizlik çıkarma promptunu uygulayın ve çıkan soruları gerçek kısıtlarınızla yanıtlayın. Sonra netleşen ihtiyacı en az 2 kullanıcı hikâyesine ve her biri için 3 kabul kriterine çevirtin; en az 1 olumsuz senaryo ekleyin. Son olarak bir tasarım kararı (senkron/asenkron, tablo yapısı vb.) için karşılaştırma tablosu ürettirip kendi kararınızı 2 cümleyle yazın.

Kontrol listesi

  • [ ] İsteği koda geçmeden önce belirsizlikleri soru olarak çıkardım.
  • [ ] Bağlamı (ölçek, yetki, performans, yasal kısıt) AI'a verdim.
  • [ ] Kullanıcı hikâyelerini test edilebilir kabul kriterlerine böldüm.
  • [ ] En az bir olumsuz/kenar senaryo ekledim.
  • [ ] Tasarım kararını takas tablosuyla değerlendirdim.
  • [ ] Nihai kararı kendi bağlamıma göre ben verdim, AI'a bırakmadım.