İnşa: programlama yönetimi, dokümantasyon ve test
Kodlama sürecini yönetme, sistem ve kullanıcı dokümantasyonu, test seviyeleri (unit, integration, system, acceptance), black-box ve white-box test, sınır değerler ve test case yazma. Finalde test case tablosu ve test türü soruları gelir.
Tasarım bitti, sıra inşada (construction): kod yazılır, test edilir, belgelenir. Bu aşama genelde projenin en çok kişi ve zaman gerektiren kısmıdır. Analist burada kod yazmaktan çok yönetir ve doğrular: programcıların aynı planla çalışmasını, testlerin gereksinimlere bağlanmasını, kullanıcıya doğru belgenin gitmesini sağlar. Final sınavında test seviyeleri, black-box ile white-box farkı ve “bu fonksiyon için test case’leri yaz” sorusu gelir.
Altın kurallar:
- Test seviyeleri sırayla: unit → integration → system → acceptance.
- Black-box spesifikasyondan, white-box koddan.
- Sınırda test et: alt − 1, alt, üst, üst + 1.
- Her alternate flow bir test case’tir. 7. haftadaki description’lar test planının hammaddesidir.
Programlama yönetimi
Proje yöneticisinin bu aşamadaki üç işi:
1. Programcılara görev atamak. Modüller (paketler, sınıflar) programcılara dağıtılır. Birbirine çok bağımlı modüller aynı kişiye ya da aynı küçük ekibe verilir. Ekip büyüdükçe iletişim yükü artar (3. haftadaki kanal), bu yüzden “geç kalan projeye adam eklemek” işe yaramaz.
2. Aktiviteleri koordine etmek.
- Haftalık toplantılar, kısa ilerleme raporları.
- Standartlar: adlandırma, kodlama, yorum kuralları.
- Kod kontrolü (source code control / version control): kim hangi dosyayı değiştirdi, hangi sürüm test edildi. Git gibi araçlar.
- Üç ortam: geliştirme (development), test, üretim (production). Kod bir ortamdan diğerine kontrollü geçer.
3. Takvimi yönetmek. İş planı güncel tutulur, gecikmeler erken fark edilir. Scope creep bu aşamada da kontrol edilir: yeni istekler change request ile gelir.
Klasik hatalar:
| Hata | Açıklama |
|---|---|
| Research-oriented development | Ekibin bilmediği yeni teknolojiyi projede öğrenmeye çalışması; takvimi kayar |
| Using low-cost personnel | Ucuz ama deneyimsiz ekip; verimlilik farkı maliyet farkından büyük |
| Lack of code control | Sürüm karmaşası, birbirinin kodunu ezme |
| Inadequate testing | Takvim sıkışınca ilk kesilen test olur; sonra en pahalı hata bulunur |
Dokümantasyon
| Tür | Kimin için | İçerik |
|---|---|---|
| System documentation | Geliştiriciler ve bakım ekibi | Analiz ve tasarım modelleri, kod yorumları, API belgeleri, kurulum notları |
| User documentation | Son kullanıcılar | Sistemin nasıl kullanılacağı |
Kullanıcı dokümantasyonunun üç türü:
| Tür | Soru | Örnek |
|---|---|---|
| Reference documents (online help) | “Bu fonksiyon ne yapar?” | “Dondur butonu üyeliği 30 güne kadar askıya alır.” |
| Procedures manuals | “Şu işi nasıl yaparım?” | “Üyelik nasıl yenilenir: 1. Profil 2. Üyelik 3. Yenile …” |
| Tutorials | “Sistemi nasıl öğrenirim?” | İlk kullanımda adım adım rehber |
Online dokümantasyonun artıları: arama yapılabilir, güncellemesi kolay, ekranla bağlamsal (context-sensitive help). Belgeler kullanıcının dilinde yazılır: teknik jargon yok, görev odaklı başlıklar (“Ders rezervasyonu yap”), kısa adımlar.
Test
Test planı
Test planı analizde başlar. Her test case şu bilgileri içerir:
| Alan | Örnek |
|---|---|
| Test ID | TC-04 |
| Amaç | Ceza kitap bedelini aşmamalı |
| Ön koşul | Kitap bedeli 100 TL |
| Girdi | daysLate = 80, isStaff = false |
| Beklenen çıktı | 100.0 |
| Gerçek çıktı | (test sırasında yazılır) |
| Sonuç | Geçti / Kaldı |
Test seviyeleri
| Seviye | Ne test edilir | Nasıl | Kim |
|---|---|---|---|
| Unit | Tek sınıf / metot | Black-box ve white-box | Programcı |
| Integration | Modüllerin birlikte çalışması | UI testing, use scenario testing, data flow testing, system interface testing | Test ekibi |
| System | Bütün sistem gereksinimleri karşılıyor mu | Requirements, usability, security, performance, documentation testing | Test ekibi, analist |
| Acceptance | Kullanıcı kabul ediyor mu | Alpha (test verisi), beta (gerçek veri) | Kullanıcılar |
Integration testing türleri: User interface testing (her arayüz fonksiyonu), use scenario testing (bir use case’i uçtan uca), data flow testing (veri modüller arasında doğru akıyor mu), system interface testing (dış sistemlerle veri alışverişi, ör. ödeme sağlayıcısı).
Integration stratejileri: Top-down (üst modüller önce, alttakiler yerine stub), bottom-up (alt modüller önce, üstteki çağıran yerine driver), big bang (hepsi birden; hata bulmak zor).
System testing türleri: requirements testing (her gereksinim karşılanıyor mu), usability testing, security testing, performance testing (yük, stres: 12. haftadaki 167 istek/sn hedefi), documentation testing (belgelerdeki adımlar gerçekten çalışıyor mu).
Black-box ve white-box
| Black-box | White-box | |
|---|---|---|
| Kaynak | Spesifikasyon (gereksinim, description, sınıf sözleşmesi) | Kaynak kod |
| Bakılan | Girdi → beklenen çıktı | Dallar, döngüler, yollar |
| Teknikler | Equivalence partitioning, boundary value analysis | Statement/branch coverage, cyclomatic complexity |
| Yakaladığı | Eksik ya da yanlış işlev | Hiç çalışmayan kod, yanlış dal |
Equivalence partitioning: Girdi uzayını aynı davranması beklenen sınıflara böl, her sınıftan bir değer test et. Boundary value analysis: her sınırın altını, kendisini, üstünü test et.
Cyclomatic complexity: Koddaki bağımsız yol sayısı.
akış grafiğindeki kenar, düğüm sayısıdır. Branch coverage için en az test case gerekir.
Çözümlü örnek: ceza hesaplama metodu
Kütüphane sisteminden bir metot. Kural: gecikilen her gün 2 TL; personel yarı fiyat öder; ceza kitap bedelini geçemez; gecikme yoksa ceza 0.
static double fine(int daysLate, boolean isStaff, double bookPrice) {
if (daysLate <= 0) return 0;
double f = daysLate * 2.0;
if (isStaff) f = f / 2;
if (f > bookPrice) f = bookPrice;
return f;
}
Adım 1: Cyclomatic complexity. Üç if → V(G) = 3 + 1 = 4. En az dört bağımsız yol:
Yol 1: daysLate <= 0 → return 0
Yol 2: >0, staff değil, sınır altı
Yol 3: >0, staff, sınır altı
Yol 4: >0, staff değil, sınır üstü
Adım 2: Black-box sınıflar ve sınırlar. daysLate için: ≤ 0 (ceza yok), ≥ 1 (ceza var). Sınır: 0 ve 1. Ceza için: bedelin altı, eşit, üstü.
Adım 3: Test case tablosu (bookPrice = 100):
| ID | daysLate | isStaff | Beklenen | Neyi test ediyor |
|---|---|---|---|---|
| TC1 | 0 | false | 0.0 | Sınır: gecikme yok |
| TC2 | 5 | false | 10.0 | Normal ceza (yol 2) |
| TC3 | 5 | true | 5.0 | Personel indirimi (yol 3) |
| TC4 | 80 | false | 100.0 | Üst sınır: kitap bedeli (yol 4) |
| TC5 | 1 | false | 2.0 | Sınır: ilk ceza günü |
| TC6 | -3 | false | 0.0 | Geçersiz/negatif girdi |
Hepsini çalıştırınca:
System.out.println("TC1 " + fine(0, false, 100));
System.out.println("TC2 " + fine(5, false, 100));
System.out.println("TC3 " + fine(5, true, 100));
System.out.println("TC4 " + fine(80, false, 100));
System.out.println("TC5 " + fine(1, false, 100));
System.out.println("TC6 " + fine(-3, false, 100));
TC1 0.0
TC2 10.0
TC3 5.0
TC4 100.0
TC5 2.0
TC6 0.0
TUZAK · sadece “mutlu yol” test etmek. TC2 tek başına geçer ve metodu “doğru” gösterir. Hataların çoğu sınırlarda (TC1, TC5), kısıtlarda (TC4) ve beklenmeyen girdide (TC6) çıkar.
İPUCU · use case’ten test case. 7. haftadaki Reserve Book description’ındaki her alternate flow (2a, 3a, S-1.2a, S-1.3a, 5a) bir system test case’idir. Normal flow da bir tanesidir: en az 6 test case hazır.
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Test implementation’da başlar | Test planı analizde başlar |
| Black-box kodu inceler | Spesifikasyonu kullanır; kodu white-box inceler |
| Sınır değer = sadece sınırın kendisi | Altı, kendisi, üstü |
| Stub = driver | Stub çağrılanın, driver çağıranın yerine geçer |
| Acceptance testi programcı yapar | Kullanıcılar yapar |
| Alpha gerçek veriyle, beta test verisiyle | Tersi: alpha test verisi, beta gerçek veri |
| Procedures manual = reference doc | Reference fonksiyonu, procedures manual görevi anlatır |
| V(G) = if sayısı | V(G) = karar sayısı + 1 |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
Which test level checks that individual classes or methods work correctly in isolation?
- Unit test
- Integration test
- System test
- Acceptance test
Cevabı göster
Unit test tek bir modülü (sınıf, metot) tek başına test eder. Integration test modüllerin birlikte çalışmasını, system test bütün sistemin gereksinimleri karşılamasını, acceptance test kullanıcının sistemi kabul edip etmediğini test eder.
Black-box testing designs test cases from what?
- The source code structure
- The specification (requirements, use case descriptions, class contracts)
- Programmer intuition only
- The database schema
Cevabı göster
Black-box testte kodun içine bakılmaz; girdiler ve beklenen çıktılar spesifikasyondan çıkarılır. White-box testte kodun yapısı (dallar, döngüler, yollar) incelenerek test case yazılır.
A reservation length must be between 1 and 48 hours (integers). Using boundary value analysis, which values should you test?
Cevabı göster
Hatalar sınırlarda yoğunlaşır. Her sınırın hemen altı, kendisi ve hemen üstü test edilir: alt sınır için 0 ve 1 (ve 2), üst sınır için 48 ve 49 (ve 47). 0 ve 49 reddedilmeli, 1 ve 48 kabul edilmeli.
Using equivalence partitioning for the same rule, how many partitions are there?
Cevabı göster
Aynı şekilde davranması beklenen girdiler bir sınıfta toplanır, her sınıftan bir temsilci test edilir: −5 (geçersiz), 24 (geçerli), 60 (geçersiz). Sayı olmayan girdi de dördüncü bir geçersiz sınıf olarak eklenebilir.
What does the method on this page return for fine(30, true, 25)?
static double fine(int daysLate, boolean isStaff, double bookPrice) {
if (daysLate <= 0) return 0;
double f = daysLate * 2.0;
if (isStaff) f = f / 2;
if (f > bookPrice) f = bookPrice;
return f;
}Cevabı göster
daysLate = 30 > 0. f = 30 × 2.0 = 60.0. isStaff true → f = 30.0. 30.0 > 25 → f = 25.0. Ceza kitap bedeliyle sınırlanır.
Same method: what does fine(50, false, 100) return, and why is it a good test case?
Cevabı göster
f = 50 × 2.0 = 100.0. 100.0 > 100 yanlış, f değişmez: 100.0. Sınırda (eşitlik) > yerine yanlışlıkla >= yazılsa sonuç aynı olurdu ama 51 gün ile farkı görürsün; eşitlik ve bir fazlası birlikte test edilir.
What is the cyclomatic complexity of the fine() method?
Cevabı göster
Üç karar noktası var (üç if). V(G) = karar sayısı + 1 = 4. Akış grafiğinden de: tek çıkışlı grafikte 12 kenar, 10 düğüm → 12 − 10 + 2 = 4. White-box testte en az 4 bağımsız yol test edilmeli.
A method has 4 if statements and 1 while loop (no compound conditions). What is its cyclomatic complexity?
Cevabı göster
Her if ve her döngü bir karar noktasıdır: 4 + 1 = 5 karar. V(G) = 5 + 1 = 6.
During integration testing, module A calls module B, which is not written yet. What do you use in place of B?
- A driver
- A stub
- A beta tester
- A regression test
Cevabı göster
Stub, henüz yazılmamış ve çağrılan modülün yerine geçen basit sahte modüldür (top-down entegrasyon). Driver ise henüz yazılmamış ve çağıran modülün yerine geçen test kodudur (bottom-up entegrasyon).
Acceptance testing done by users at the developer's site with test data is called what? And when done at the user's site with real data?
Cevabı göster
Alpha test: kullanıcılar sistemi kontrollü ortamda, test verisiyle dener. Beta test: kullanıcılar sistemi gerçek ortamda, gerçek veriyle kullanır ve sorunları raporlar. İkisi de acceptance testin parçasıdır.
Which document type helps a user complete a specific business task step by step, such as 'How to renew a membership'?
- Reference document
- Procedures manual
- Tutorial
- System documentation
Cevabı göster
Reference document: bir fonksiyonun ne yaptığını anlatır (online help). Procedures manual: bir iş görevini baştan sona nasıl yapacağını anlatır. Tutorial: sistemi öğretir. System documentation ise geliştirici ve bakımcılar içindir.
Why is regression testing needed after fixing a bug?
Cevabı göster
Bir değişiklik başka yerleri bozabilir. Regression testing, daha önce geçen testlerin yeniden çalıştırılmasıdır. Otomatik test takımı (unit testler) bu yüzden değerlidir.
Doğrulama: fine() metodunun bütün test case beklenen çıktıları JDK ile çalıştırıldı (java verify/SEN2022/Fine13.java). Cyclomatic complexity hem V(G) = E - N + 2 hem karar sayısı + 1 ile node'da hesaplandı; sınır değer ve denklik sınıfı listeleri de aynı dosyada (verify/SEN2022/13.mjs). Kavramsal sorular standart test seviyesi ve dokümantasyon tanımlarıyla karşılaştırıldı.