Yazilim Testi Nedir? Test Turleri Rehberi
"Calisiyor" ile "dogru calisiyor" arasinda buyuk fark var. Test yazmak sikicinir — ama test yazmamak cok daha pahalidir. Bir bug'in production'da duzeltilmesi, gelistirme asamasinda duzeltmenin 30 kati daha pahali.
Neden Test Yazmaliyiz?
- Hatalari erken yakalar
- Refactoring'i guvenli kilar
- Dokumantasyon goreviggorur
- Regression onler
- Kod kalitesini arttirir
- Deploy guvenini arttirir
Test Piramidi
Test piramidi, testlerin katmanlarini ve oranlarini gosterir:
Unit Test (Temel — en cok): Tek bir fonksiyon veya component'i test eder.
Integration Test (Orta): Birlestirme birden fazla birimi birlikte test eder.
E2E Test (Ust — en az): Tum uygulamayi kullanici perspektifinden test eder.
Test Turleri
1. Unit Test
Tek bir fonksiyonu veya component'i izole olarak test eder.
// toplam.js
function toplam(a, b) {
return a + b;
}
// toplam.test.js
test('iki sayiyi toplar', () => {
expect(toplam(2, 3)).toBe(5);
});
test('negatif sayilarla calisir', () => {
expect(toplam(-1, -2)).toBe(-3);
});
Araclar: Jest, Vitest, Mocha
2. Integration Test
Birden fazla birimin birlikte calismasini test eder.
test('kullanici kaydi ve giris', async () => {
await request(app)
.post('/api/register')
.send({ email: 'test@test.com', password: '12345678' })
.expect(201);
const res = await request(app)
.post('/api/login')
.send({ email: 'test@test.com', password: '12345678' })
.expect(200);
expect(res.body.token).toBeDefined();
});
Araclar: Supertest, Testing Library
3. E2E (End-to-End) Test
Tum uygulamayi basdan sona test eder.
test('kullanici giris yapar ve dashboard gorur', async ({ page }) => {
await page.goto('/login');
await page.fill('#email', 'test@test.com');
await page.fill('#password', '12345678');
await page.click('button[type="submit"]');
await expect(page).toHaveURL('/dashboard');
await expect(page.locator('h1')).toContainText('Hosgeldiniz');
});
Araclar: Playwright, Cypress, Selenium
4. Snapshot Test
Component'in gorunumunun degisip degismedigini kontrol eder.
5. Performance Test
Uygulamanin yuk altindaki davranisini test eder.
6. Security Test
Guvenlik aciklari ve zaafiyetleri tarar.
TDD (Test-Driven Development)
Test oncelikli gelistirme dongusu:
- Red — Once test yaz (baarisiz olur)
- Green — Testi geciren minimum kodu yaz
- Refactor — Kodu iyilestir (test hala gecmeli)
Test Kapsamı (Coverage) Hedefleri
| Katman | Hedef | |--------|-------| | Unit test | yuzde 80+ | | Integration test | Kritik akislar | | E2E test | Temel kullanici senaryolari | | Genel | yuzde 70-80 |
Test Araclari
| Arac | Tur | Dil | |------|-----|-----| | Jest | Unit/Integration | JavaScript | | Vitest | Unit/Integration | JavaScript (hizli) | | Playwright | E2E | Coklu dil | | Cypress | E2E | JavaScript | | Testing Library | Component | React/Vue/Angular | | SonarQube | Kod kalitesi | Coklu dil | | k6 | Performans | JavaScript |
Test Best Practices
- AAA paterni — Arrange, Act, Assert
- Bagimsiz testler — Her test izole calismalı
- Anlamli isimler — "test1" degil, "kullanici giris yapar"
- Mock ve stub — Dis bagimliliklari izole edin
- CI/CD'de otomatik calistirin
- Edge case'leri test edin — Sinir degerleri, bos veri
Sonuc
Yazilim testi yatirimdir — dogrudan gelir getirmez ama hata maliyetini dramatik sekilde dusurur. Unit testlerle baslayip, kritik akislari integration testlerle kapatin. Test yazan ekipler daha hizli ve guvenli release yapar.
Yazilim testi stratejisi ve otomasyon danismanligi icin benimle iletisime gecin: info@cagribilgehan.com. Projelerime goz atin: cagribilgehan.com