SEN2022 · 13. hafta · Construction: Programming, Documenting and Testing

İ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.

constructionprogramming managementprogrammer productivitysystem documentationuser documentationreference documentsprocedures manualstutorialstest plantest caseunit testintegration testsystem testacceptance testalpha testbeta testblack-box testingwhite-box testingequivalence partitioningboundary value analysiscyclomatic complexityregression testingstubdriver

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:

  1. Test seviyeleri sırayla: unit → integration → system → acceptance.
  2. Black-box spesifikasyondan, white-box koddan.
  3. Sınırda test et: alt − 1, alt, üst, üst + 1.
  4. 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 n(n−1)/2n(n-1)/2 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:

HataAçıklama
Research-oriented developmentEkibin bilmediği yeni teknolojiyi projede öğrenmeye çalışması; takvimi kayar
Using low-cost personnelUcuz ama deneyimsiz ekip; verimlilik farkı maliyet farkından büyük
Lack of code controlSürüm karmaşası, birbirinin kodunu ezme
Inadequate testingTakvim sıkışınca ilk kesilen test olur; sonra en pahalı hata bulunur

Dokümantasyon

TürKimin içinİçerik
System documentationGeliştiriciler ve bakım ekibiAnaliz ve tasarım modelleri, kod yorumları, API belgeleri, kurulum notları
User documentationSon kullanıcılarSistemin nasıl kullanılacağı

Kullanıcı dokümantasyonunun üç türü:

TürSoruÖ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 IDTC-04
AmaçCeza kitap bedelini aşmamalı
Ön koşulKitap bedeli 100 TL
GirdidaysLate = 80, isStaff = false
Beklenen çıktı100.0
Gerçek çıktı(test sırasında yazılır)
SonuçGeçti / Kaldı

Test seviyeleri

SeviyeNe test edilirNasılKim
UnitTek sınıf / metotBlack-box ve white-boxProgramcı
IntegrationModüllerin birlikte çalışmasıUI testing, use scenario testing, data flow testing, system interface testingTest ekibi
SystemBütün sistem gereksinimleri karşılıyor muRequirements, usability, security, performance, documentation testingTest ekibi, analist
AcceptanceKullanıcı kabul ediyor muAlpha (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-boxWhite-box
KaynakSpesifikasyon (gereksinim, description, sınıf sözleşmesi)Kaynak kod
BakılanGirdi → beklenen çıktıDallar, döngüler, yollar
TekniklerEquivalence partitioning, boundary value analysisStatement/branch coverage, cyclomatic complexity
YakaladığıEksik ya da yanlış işlevHiç ç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ı.

V(G)=E−N+2ya daV(G)=karar sayısı+1V(G) = E - N + 2 \qquad \text{ya da} \qquad V(G) = \text{karar sayısı} + 1

EE akış grafiğindeki kenar, NN düğüm sayısıdır. Branch coverage için en az V(G)V(G) 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):

IDdaysLateisStaffBeklenenNeyi test ediyor
TC10false0.0Sınır: gecikme yok
TC25false10.0Normal ceza (yol 2)
TC35true5.0Personel indirimi (yol 3)
TC480false100.0Üst sınır: kitap bedeli (yol 4)
TC51false2.0Sınır: ilk ceza günü
TC6-3false0.0Geç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üşünceDoğrusu
Test implementation’da başlarTest planı analizde başlar
Black-box kodu incelerSpesifikasyonu kullanır; kodu white-box inceler
Sınır değer = sadece sınırın kendisiAltı, kendisi, üstü
Stub = driverStub çağrılanın, driver çağıranın yerine geçer
Acceptance testi programcı yaparKullanıcılar yapar
Alpha gerçek veriyle, beta test verisiyleTersi: alpha test verisi, beta gerçek veri
Procedures manual = reference docReference 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ç.

Soru 1kolay

Which test level checks that individual classes or methods work correctly in isolation?

  1. Unit test
  2. Integration test
  3. System test
  4. Acceptance test
Cevabı göster
A) Unit test

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.

Soru 2kolay

Black-box testing designs test cases from what?

  1. The source code structure
  2. The specification (requirements, use case descriptions, class contracts)
  3. Programmer intuition only
  4. The database schema
Cevabı göster
B) The specification (requirements, use case descriptions, class contracts)

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.

Soru 3orta

A reservation length must be between 1 and 48 hours (integers). Using boundary value analysis, which values should you test?

Cevabı göster
0, 1, 48, 49 (optionally 2 and 47)

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.

Soru 4orta

Using equivalence partitioning for the same rule, how many partitions are there?

Cevabı göster
3 (below 1 invalid, 1 to 48 valid, above 48 invalid)

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.

Soru 5orta

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
25.0

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.

Soru 6zor

Same method: what does fine(50, false, 100) return, and why is it a good test case?

Cevabı göster
100.0; it hits the boundary where the fine exactly equals the book price.

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.

Soru 7orta

What is the cyclomatic complexity of the fine() method?

Cevabı göster
4

Üç 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.

Soru 8kolay

A method has 4 if statements and 1 while loop (no compound conditions). What is its cyclomatic complexity?

Cevabı göster
6

Her if ve her döngü bir karar noktasıdır: 4 + 1 = 5 karar. V(G) = 5 + 1 = 6.

Soru 9orta

During integration testing, module A calls module B, which is not written yet. What do you use in place of B?

  1. A driver
  2. A stub
  3. A beta tester
  4. A regression test
Cevabı göster
B) A stub

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).

Soru 10orta

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; beta test

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.

Soru 11orta

Which document type helps a user complete a specific business task step by step, such as 'How to renew a membership'?

  1. Reference document
  2. Procedures manual
  3. Tutorial
  4. System documentation
Cevabı göster
B) Procedures manual

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.

Soru 12kolay

Why is regression testing needed after fixing a bug?

Cevabı göster
To make sure the fix did not break parts of the system that worked before.

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ı.

Deftere not kartı

Programlama yönetimi: görev ata, koordine et (kod kontrolü, standartlar), takvimi izle Klasik hatalar: araştırma tarzı geliştirme, düşük maliyetli personel, kod kontrolü yok, yetersiz test Dokümantasyon: system (geliştirici için) vs user (kullanıcı için) User doc: reference (ne yapar), procedures manual (nasıl yapılır), tutorial (öğretir) Test seviyeleri: unit → integration → system → acceptance (alpha, beta) Black-box: spesifikasyondan; White-box: koddan (dallar, yollar) Denklik sınıfı: her sınıftan bir temsilci Sınır değer: alt-1, alt, üst, üst+1 (1..48 → 0,1,48,49) Cyclomatic: V(G) = E - N + 2 = karar + 1 Stub = çağrılanın yerine (top-down); Driver = çağıranın yerine (bottom-up) Regression: düzeltmeden sonra eski testleri tekrar çalıştır Test case: ID, amaç, ön koşul, girdi, beklenen çıktı, gerçek çıktı, sonuç