Ana içeriğe geç
Kesit SQL
Orta · BT İş Analizi

Agile ve Waterfall ortamlarında iş analizi

Gereksinim toplama teknikleri, MoSCoW, use case ile kullanıcı hikâyesi, izlenebilirlik matrisi (RTM), tel çerçeve, FRD ve SRS, Scrum ve sprintte iş analisti, boşluk analizi.

Uygulamada aç, 14 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Kupon talebini baştan sona yürüttün, ama bir şeyi açık bıraktık: bu iş hangi düzende yürüyor? Aynı analist bir şirkette Agile (çevik) çalışır, iki haftada bir sprint toplantısına girer; başka bir şirkette Waterfall (şelale) düzeninde onay imzası bekleyen uzun bir doküman yazar. Bu derste iki ortamın araçlarını yine kupon talebi üzerinden görüyorsun. Süreci tek bir ders öğretmez; amaç, iş ilanında ve görüşmede geçen adların ne olduğunu bilmek ve birini uygulayacak kadar görmektir.

Gereksinim toplama teknikleri (elicitation)

Gereksinim hazır gelmez, onu çıkarırsın. Hangi tekniği seçeceğin sorduğun soruya bağlıdır.

TeknikEn çok ne zaman?KupondaTuzak
Görüşme (interview)Bir kişiden derin bilgi gerektiğindeDestek ekibi şefiyle “son şikâyet neydi?”Tek kişinin görüşünü kural sanmak
Çalıştay (workshop)Birden çok paydaş aynı karara varacaksaPazarlama ve finans kupon süresini birlikte tartışırGündemsiz toplantı; en yüksek ses kazanır
Gözlem (observation)İnsanlar yaptığını tam anlatamıyorsaDestek çalışanının elle kupon verişini izlemekİzlendiğini bilen kişi farklı davranabilir
Doküman inceleme (document review)Yazılı kural, sözleşme, eski sistem varsaVeri sözlüğünde “400 TL üzeri ücretsiz”Doküman eskimiş olabilir; süreç derslerinde veriyle sınadığın gibi doğrula

Tek teknik nadiren yeter: dokümanı oku, görüşmede sor, çelişkiyi çalıştaya taşı, sonucu gözlemle sına. AS-IS sütununu görüşmeden yazdığımızı hatırla; gözlem, “kendi yorumuyla karar verir” cümlesini kanıtlar ya da çürütür.

Önceliklendirme: MoSCoW

MoSCoW dört kovadır: Must (bu olmadan sürüm çıkmaz), Should (önemli ama geçici çözümü var), Could (yer kalırsa), Won't (bu sürümde yok, reddedilmedi).

KovaKupondaNeden burada?
MustKupon üretimi, tutar kuralı, “yalnız teslim”, aylık sınırBunlar olmadan para yanlış gider
ShouldUygulama içi bildirim, operasyon raporuBir süre elle ya da sorguyla idare edilir
CouldKupondan sonra iadede otomatik iptalAçık soru kapanınca; önce elle iptal edilebilir
Won'tÖdeme ekranının yeniden tasarımıAyrı talep; kapsam dışına yazıldı
Her şey Must ise öncelik yokturPaydaş için her madde önemlidir. Sor: “Bu olmadan sürümü çıkarsak ne olur?” Cevap “kötü olur ama para ya da hukuk sorunu doğmaz” ise Must değildir. Önceliği MoSCoW'la yazmak kararı ürün sahibinden almaz; ona tartışacak bir liste verir.
CREATE TABLE ba_gereksinim (grs VARCHAR(10), baslik VARCHAR(60), oncelik VARCHAR(10), puan INT);
INSERT INTO ba_gereksinim VALUES ('GRS-01', 'Geç teslimde kupon üret', 'Must', 8);
INSERT INTO ba_gereksinim VALUES ('GRS-02', 'Tutarı karar tablosundan hesapla', 'Must', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-03', 'Yalnız teslim durumu kupon alır', 'Must', 2);
INSERT INTO ba_gereksinim VALUES ('GRS-04', '2.700 saniye geç sayılmaz', 'Must', 1);
INSERT INTO ba_gereksinim VALUES ('GRS-05', 'Ayda en çok iki kupon', 'Must', 5);
INSERT INTO ba_gereksinim VALUES ('NFR-01', 'Kupon en geç 5 dakikada görünür', 'Must', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-06', 'Kuponu uygulama içinde bildir', 'Should', 5);
INSERT INTO ba_gereksinim VALUES ('GRS-07', 'Operasyon için kupon raporu', 'Should', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-08', 'Kupondan sonra iadede kuponu iptal et', 'Could', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-09', 'Ödeme ekranını yeniden tasarla', 'Wont', 13);
SELECT oncelik, COUNT(*) AS gereksinim, SUM(puan) AS puan
FROM ba_gereksinim
GROUP BY oncelik
ORDER BY oncelik;

Puan, ekibin verdiği göreli büyüklüktür (story point). Bu örnekte Must toplamı 22 puan. Ekibin bir sprintte 20 puan yaptığını varsayarsak Must'ların hepsi bile sığmıyor: ya kapsam küçülür ya süre uzar. Bu cümle, “hepsi önemli” tartışmasını sayıya çevirir.

Kullanım senaryosu (use case) ve kullanıcı hikâyesi

Aynı gereksinimi iki biçimde yaz, farkı görürsün.

KULLANICI HİKÂYESİ
Bir müşteri olarak,
siparişim söz verilen süreyi aştığında otomatik telafi kuponu almak istiyorum,
böylece destek ekibine yazmadan hakkım olanı alırım.
(Ayrıntı kabul kriterlerinde.)
KULLANIM SENARYOSU UC-01: Geç teslime kupon üret
Aktör: Kupon işi (zamanlanmış sistem). İlgili: Müşteri.
Ön koşul: Siparişin teslim kaydı oluşmuş.
Ana akış:
  1. İş, teslim süresini saniye olarak hesaplar.
  2. İş, süreyi 2.700 ile karşılaştırır; aşıyorsa devam eder.
  3. İş, müşterinin bu ayki kupon sayısını okur; ikiden azsa devam eder.
  4. İş, tutarı karar tablosundan bulur, kuponu yazar.
  5. Sistem müşteriye bildirim gönderir.
Alternatif akışlar:
  2a. Süre aşmıyor: kupon yok, süreç biter.
  3a. Sınır dolu: kupon yok, "sınır dolu" kaydı yazılır.
  4a. Kayıt hatası: hata kuyruğuna düşer, operasyon inceler.
Son koşul: Siparişin en çok bir kuponu vardır ya da nedeni kayıtlıdır.
Kullanıcı hikâyesiKullanım senaryosu
AmacıKonuşmayı başlatmak, değeri söylemekEtkileşimi adım adım tarif etmek
AyrıntıKısa; ayrıntı kabul kriterinde ve konuşmadaAna ve alternatif akış içinde yazılı
Sık görüldüğü yerAgile ekiplerDoküman ağırlıklı projeler, sözleşmeye bağlı işler
EksiğiBirbirine bağlı akışları bir arada göstermezYazması ve güncel tutması pahalı

İkisi rakip değildir. Alternatif akışı çok olan bir işte önce use case yazıp hikâyeleri ondan çıkarmak yaygın bir yoldur: 2a, 3a ve 4a burada ayrı kabul kriterleri olur.

İzlenebilirlik matrisi (RTM, requirements traceability matrix)

RTM, her gereksinimi kaynağına, hikâyesine, testine ve hatasına bağlayan tablodur. İki soruyu cevaplar: ileri yön, bu gereksinim test edildi mi? Geri yön, bu test ya da kod hangi gereksinim için var? Geri yönde sahibi çıkmayan iş, kimsenin istemediği iştir.

GereksinimKaynakHikâyeTestSonuçHata
GRS-03 Yalnız teslimFinans görüşmesiKUP-12olumsuz-iptal, olumsuz-iade1 geçti, 1 kaldıHATA-31
GRS-04 Sınır 2.700Karar tablosu K2KUP-12sinir-2700, sinir-27011 geçti, 1 kaldıHATA-32
NFR-01 5 dakikaGörüşmeKUP-14yok?

RTM genellikle tablo ya da Jira bağlantılarıdır. Veriye dökülürse boşlukları SQL bulur: test edilmemiş gereksinim, eşi olmayan satırla aynı kalıptır.

CREATE TABLE ba_gereksinim (grs VARCHAR(10), baslik VARCHAR(60), oncelik VARCHAR(10), puan INT);
INSERT INTO ba_gereksinim VALUES ('GRS-01', 'Geç teslimde kupon üret', 'Must', 8);
INSERT INTO ba_gereksinim VALUES ('GRS-02', 'Tutarı karar tablosundan hesapla', 'Must', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-03', 'Yalnız teslim durumu kupon alır', 'Must', 2);
INSERT INTO ba_gereksinim VALUES ('GRS-04', '2.700 saniye geç sayılmaz', 'Must', 1);
INSERT INTO ba_gereksinim VALUES ('GRS-05', 'Ayda en çok iki kupon', 'Must', 5);
INSERT INTO ba_gereksinim VALUES ('NFR-01', 'Kupon en geç 5 dakikada görünür', 'Must', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-06', 'Kuponu uygulama içinde bildir', 'Should', 5);
INSERT INTO ba_gereksinim VALUES ('GRS-07', 'Operasyon için kupon raporu', 'Should', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-08', 'Kupondan sonra iadede kuponu iptal et', 'Could', 3);
INSERT INTO ba_gereksinim VALUES ('GRS-09', 'Ödeme ekranını yeniden tasarla', 'Wont', 13);
CREATE TABLE ba_testler (test VARCHAR(20), grs VARCHAR(10), sonuc VARCHAR(10));
INSERT INTO ba_testler VALUES ('olumlu-30', 'GRS-01', 'gecti');
INSERT INTO ba_testler VALUES ('olumlu-60', 'GRS-02', 'gecti');
INSERT INTO ba_testler VALUES ('olumsuz-iptal', 'GRS-03', 'gecti');
INSERT INTO ba_testler VALUES ('olumsuz-iade', 'GRS-03', 'kaldi');
INSERT INTO ba_testler VALUES ('sinir-2700', 'GRS-04', 'kaldi');
INSERT INTO ba_testler VALUES ('sinir-2701', 'GRS-04', 'gecti');
INSERT INTO ba_testler VALUES ('aylik-sinir', 'GRS-05', 'kaldi');
INSERT INTO ba_testler VALUES ('bildirim-metni', 'GRS-06', 'gecti');
SELECT g.grs, g.baslik, COUNT(t.test) AS test_sayisi
FROM ba_gereksinim g
LEFT JOIN ba_testler t ON t.grs = g.grs
GROUP BY g.grs, g.baslik
ORDER BY g.grs;

Tel çerçeve (wireframe)

Tel çerçeve, ekranın düzenini ve akışını renksiz, kaba biçimde gösterir. Amacı tasarım seçmek değil, “bu ekranda ne var, tıklayınca nereye gidiyor?” sorusunu erken konuşmaktır.

+------------------------------+
| Siparişlerim > #5045         |
|------------------------------|
| [!] Teslimat geç kaldı       |
|     30 TL kupon tanımlandı   |
|     Son kullanım: 07.01.2025 |
|     [ Kuponu kullan ]        |
|------------------------------|
| Sipariş ayrıntıları ...      |
+------------------------------+

Bu kaba çizim hemen soru üretir: kupon geçerlilik tarihi nereden gelecek, kullanılmış kuponda düğme ne olacak? Sonraki adımlar: mockup görsel tasarımı gösterir, prototip tıklanabilir. İş analisti çoğu zaman yalnız tel çerçeveyi çizer ya da tasarımcıyla konuşur; sonuç ekranın kararı tasarım ekibindedir.

Doküman adları: BRD, FRD, SRS

DokümanSorusuKim okur?Kuponda
BRD (business requirements document)İş neden ve ne istiyor?İş birimi, yönetimSorun, başarı ölçüsü, kapsam, iş kuralı
FRD (functional requirements document)Sistem ne yapacak?Analist, geliştirici, testKupon işinin davranışı, ekranlar, hata durumları
SRS (software requirements specification)Yazılım hangi koşullarla nasıl davranacak?Geliştirici, mimar, testİşlevsel ve işlevsel olmayan gereksinim, arayüz, kısıtlar

Bu adlar kuruma göre değişir: bazı şirkette tek bir doküman üçünü taşır, bazısında FRD ile SRS aynı şeydir. Görüşmede “sizde bu belge ne içeriyor?” diye sormak bilgisizlik değil, doğru sorudur.

Waterfall ve Agile: aynı iş, farklı ritim

WaterfallAgile
GereksinimBaşta, büyük ölçüde tamamlanır ve onaylanırParça parça, işin yanında netleşir
Ana çıktıBRD, FRD ya da SRS, imzaBacklog (iş listesi), hikâye, kabul kriteri
DeğişiklikDeğişiklik talebi ve onayBir sonraki sprintin önceliği olur; kapsam büyükse yine görünür tartışılır
Uygun olduğu yerKapsamı sabit, sözleşmeli ya da denetime tabi işlerBelirsizliği yüksek, sık geri bildirim alınabilen işler

Çoğu kurum ikisinin karışımıyla çalışır. Waterfall'da analist belgeyi erken bitirir ve onayı alır; Agile'da yazıyı küçük tutar, sürekli güncel tutar. RTM ve mini BRD ikisinde de işe yarar, yalnız kalınlığı değişir.

Sprintte iş analisti

Scrum rehberi “iş analisti” diye bir rol tanımlamaz. Analist çoğu ekipte ürün sahibine ya da geliştirme ekibine destek verir. Aşağıdaki tablo yaygın kullanımı anlatır, kural değildir.

EtkinlikAmaçİş analisti ne yapar?
Backlog refinement (backlog inceleme)Yaklaşan işleri netleştirmek. Tören değil, sürekli süren etkinlikHikâyeyi ve kabul kriterini hazırlar, soruları kapatır
Sprint planlama (sprint planning)Bu sprintte ne yapılacağıKapsamı açıklar, kuralları cevaplar
Günlük toplantı (daily scrum)Ekibin günlük uyumuGerektiğinde katılır, engel olan soruyu alır
Sprint gözden geçirme (sprint review)Yapılanı paydaşla konuşmakPaydaşı getirir, geri bildirimi backlog'a yazar
Retrospektif (retrospective)Çalışma biçimini iyileştirmekGereksinim kaynaklı sorunları söyler

Boşluk analizi (gap analysis)

Boşluk analizi üç soru sorar: neredeyiz, nereye gidiyoruz, farkı kapatmak için ne gerekir? AS-IS ile TO-BE yan yana yazıldığında süreç boşluğu görünür; veri olan yerde boşluk sayıya çevrilir.

WITH t AS (
  SELECT order_id, customer_id, restaurant_id, courier_id, status, placed_at,
         ROUND((julianday(delivered_at) - julianday(placed_at)) * 86400) AS sure_sn
  FROM lk_orders
  WHERE placed_at >= '2024-10-01' AND placed_at < '2025-01-01'
)
SELECT COUNT(*) AS teslim,
       SUM(CASE WHEN sure_sn <= 2700 THEN 1 ELSE 0 END) AS zamaninda,
       ROUND(100.0 * SUM(CASE WHEN sure_sn <= 2700 THEN 1 ELSE 0 END) / COUNT(*), 1) AS oran
FROM t
WHERE status = 'teslim';

Dönemde teslimlerin %77,3'ü 45 dakikanın altında. Diyelim ki yönetim “%80 zamanında” hedefi koydu; bu rakam senaryonun varsayımıdır, sektör değeri değildir. Boşluk 181 teslimat: bu kadarı daha zamanında olsaydı hedef tutardı. Kupon bu boşluğu kapatmaz, çünkü geç teslimi azaltmaz, sonucunu yumuşatır. Boşluk analizinin faydası budur: istenen çözümün gerçekten farkı kapatıp kapatmadığını sordurur.

Alıştırmalara geç (14)