---
title: 'Kalite Güvencesi Nedir'
source: 'https://academia.sh/tr/kurslar/test-temelleri/kalite-guvencesi-nedir'
course: 'Kalite ve Test Temelleri'
language: tr
updated: '2026-08-17T18:10:53+00:00'
license: 'CC BY-SA 4.0'
---

# Kalite Güvencesi Nedir

Kalitenin belirtilmiş ve örtük beklentilere uygunluk olarak tanımı, ürün kalitesi ile süreç kalitesinin ayrı ölçülmesi ve denetimsiz kalan kuralın gizlediği kusur.

Bir program çalışıyor olabilir ve yine de yanlış olabilir. Testleri geçiyor olabilir ve yine
de kimsenin istemediği bir şeyi yapıyor olabilir. Doğru çalışıyor olabilir ve on saniyede
yanıt verdiği için kullanılamaz olabilir. Bu üç cümlenin ortak yanı, "çalışıyor" sözcüğünün
tek başına bir yargı taşımamasıdır. Bu müfredat o yargıyı kurar: bir yazılımın istenen şey
olduğuna nasıl karar verilir ve bu karar hangi kanıtlara dayanır?

Frontend Kalitesi kursundaki Test ve İzleme konusu birim, bileşen, tümleşim ve uçtan uca
testleri tarayıcı bağlamında tanıttı. Orada test, belirli bir alanın — tarayıcıda çalışan
arayüzün — kalite aracıydı. Burada konu tersine döner: test disiplininin kendisi, alandan
bağımsız olarak ele alınır. Örnekler JavaScript ve Node.js Çalışma Zamanı kurslarında
kurulan araçlarla yazılır, ama sorular dile ve platforma bağlı değildir.

## Kalite Bir Uygunluk Yargısıdır

Kalite, bir ürünün **belirtilmiş** (stated) ve **örtük** (implied) beklentileri karşılama
derecesidir. Bu tanımın iki yarısı da gereklidir.

Belirtilmiş beklenti yazılıdır: "öğrenci üyeler kitabı 28 gün ödünç alır". Örtük beklenti
yazılı değildir ama ihlal edildiğinde herkes fark eder: bir üyenin borcunun başka bir üyeye
görünmemesi, iade işleminin iki kez işlenmemesi, sayfanın açılmasının dakikalar sürmemesi.
Belirtim ne kadar dikkatli yazılırsa yazılsın, örtük beklentilerin tamamını içermez.

Bu yüzden kalite mutlak bir nitelik değil, bir **uygunluk yargısıdır**: neye uygunluk
sorusunun yanıtı verilmeden ölçülemez. Kurs boyunca kullanılacak alan küçük bir kütüphane
ödünç kitaplığıdır. Bu alan Backend müfredatındaki kütüphane sistemiyle aynıdır; burada o
sistemin kodu varsayılmaz, kurallar sıfırdan kurulur ve dersler boyunca aynı kitaplık
geliştirilir.

```js
// kitaplik.mjs — odunc kurallari
export const KURALLAR = {
  ogrenci: { oduncGun: 28, enCokOdunc: 10 },
  uye: { oduncGun: 14, enCokOdunc: 5 },
};

export function oduncSuresi(uyeTuru) {
  const kural = KURALLAR[uyeTuru];
  if (kural === undefined) throw new Error(`bilinmeyen uye turu: ${uyeTuru}`);
  return kural.oduncGun;
}

export function enCokOdunc(uyeTuru) {
  return KURALLAR[uyeTuru]?.enCokOdunc ?? 5;
}

export function sonTarih(alisGunu, uyeTuru) {
  return alisGunu + oduncSuresi(uyeTuru);
}
```

Tarihler gün numarasıyla temsil edilir: `sonTarih(1000, 'uye')` bin numaralı günde alınan
kitabın bin on dördüncü günde iade edileceğini söyler. Takvim aritmetiği ve saat dilimi
sorunları kalite tartışmasının konusu değildir; sabit bir gün sayacı örnekleri
belirlenimci (deterministic) tutar.

## Ürün Kalitesi ve Süreç Kalitesi

**Ürün kalitesi** (product quality) elde duran şeyin niteliğidir: kitaplık kuralları doğru
uyguluyor mu, hızlı mı, güvenli mi? **Süreç kalitesi** (process quality) o şeyi üreten
çalışma biçiminin niteliğidir: her kural bir denetime bağlanmış mı, değişiklikler gözden
geçiriliyor mu, kusurlar nereden geldiğiyle birlikte kaydediliyor mu?

Aradaki bağ tek yönlü ve olasılıksaldır. İyi bir süreç iyi bir ürünü garanti etmez, ama
kötü bir süreç iyi ürünü **tekrarlanamaz** kılar: bir sürüm iyi çıkar, sonraki çıkmaz ve
farkın nereden geldiği bilinemez. Kalite güvencesinin ilgi alanı asıl budur.

İki niteliği ayrı ayrı ölçmek için önce kuralların makine okunur bir listesi gerekir.

```js
// belirtim.mjs — yazili kurallarin makine okunur listesi
export const BELIRTIM = [
  { no: 'K1', metin: 'Ogrenci odunc suresi 28 gundur' },
  { no: 'K2', metin: 'Uye odunc suresi 14 gundur' },
  { no: 'K3', metin: 'Ogrenci en cok 10 kitap odunc alabilir' },
  { no: 'K4', metin: 'Uye en cok 5 kitap odunc alabilir' },
  { no: 'K5', metin: 'Bilinmeyen uye turu reddedilir' },
  { no: 'K6', metin: 'Son tarih, alis gunu ile odunc suresinin toplamidir' },
];
```

## İki Ölçümü Ayırmak

Ürün kalitesi ölçümü "yazılmış denetimlerin kaçı geçiyor" sorusunu yanıtlar. Süreç kalitesi
ölçümü bambaşka bir soru sorar: "belirtimdeki kuralların kaçının bir denetimi var?" İkinci
soruya **izlenebilirlik** (traceability) denir ve yanıtı ürünün kendisine değil, ürünle
belirtim arasındaki bağa bakar.

```js
// denetim.mjs — iki ayri olcum: urun kalitesi ve surec kalitesi
import assert from 'node:assert/strict';
import { BELIRTIM } from './belirtim.mjs';
import { oduncSuresi, enCokOdunc, sonTarih } from './kitaplik.mjs';

const DENETIMLER = {
  K1: () => assert.equal(oduncSuresi('ogrenci'), 28),
  K2: () => assert.equal(oduncSuresi('uye'), 14),
  K3: () => assert.equal(enCokOdunc('ogrenci'), 10),
  K6: () => assert.equal(sonTarih(1000, 'uye'), 1014),
};

let gecen = 0;
const dusen = [];
for (const [no, denetim] of Object.entries(DENETIMLER)) {
  try {
    denetim();
    gecen += 1;
  } catch {
    dusen.push(no);
  }
}

const denetimsiz = BELIRTIM.filter((k) => DENETIMLER[k.no] === undefined).map((k) => k.no);

console.log(`urun kalitesi : ${gecen}/${gecen + dusen.length} denetim gecti`);
console.log(`surec kalitesi: ${BELIRTIM.length} kuraldan ${BELIRTIM.length - denetimsiz.length} tanesi denetleniyor`);
console.log(`denetimsiz kural: ${denetimsiz.join(', ')}`);
```

```
urun kalitesi : 4/4 denetim gecti
surec kalitesi: 6 kuraldan 4 tanesi denetleniyor
denetimsiz kural: K4, K5
```

Birinci satır kusursuz görünür. İkinci satır, birinci satırın neyi kapsamadığını söyler.
Ürün kalitesi ölçümü yalnız **sorulmuş sorular** hakkında bilgi verir; sorulmamış sorular
o ölçümün içinde görünmez. Süreç kalitesi ölçümü tam olarak bu boşluğu adlandırır.

## Denetimsiz Kalan Kuralın Bedeli

İki eksik denetim yazıldığında ne olduğu görülür.

```js
// denetim-tam.mjs — denetimsiz kalan iki kural da yazildi
import assert from 'node:assert/strict';
import { oduncSuresi, enCokOdunc, sonTarih } from './kitaplik.mjs';

const DENETIMLER = {
  K1: () => assert.equal(oduncSuresi('ogrenci'), 28),
  K2: () => assert.equal(oduncSuresi('uye'), 14),
  K3: () => assert.equal(enCokOdunc('ogrenci'), 10),
  K4: () => assert.equal(enCokOdunc('uye'), 5),
  K5: () => {
    assert.throws(() => oduncSuresi('konuk'));
    assert.throws(() => enCokOdunc('konuk'));
  },
  K6: () => assert.equal(sonTarih(1000, 'uye'), 1014),
};

for (const [no, denetim] of Object.entries(DENETIMLER)) {
  try {
    denetim();
    console.log(`${no} gecti`);
  } catch (hata) {
    console.log(`${no} dustu: ${hata.message.split('\n')[0]}`);
  }
}
```

```
K1 gecti
K2 gecti
K3 gecti
K4 gecti
K5 dustu: Missing expected exception.
K6 gecti
```

Kusur `enCokOdunc` işlevindedir: bilinmeyen bir üye türü geldiğinde hata vermek yerine
sessizce beş döndürür. Kayıtlı olmayan bir kişi kitap alabilir ve sistem bunu bir üye
davranışı sanır. Kusur her zaman oradaydı; ürün kalitesi ölçümü onu göremiyordu, çünkü
kimse o soruyu sormamıştı.

Buradaki ders, dördüncü satırın çıkmasından daha geneldir. Ürün ölçümü yalnız kendi
kapsamı içinde konuşur; kapsamın nerede bittiğini söyleyen şey süreç ölçümüdür. "Bütün
testler geçiyor" cümlesi, hangi soruların hiç sorulmadığı bilinmeden bir kalite iddiası
değildir.

## Güvence, Kontrol ve Test

Üç terim sık sık birbirinin yerine kullanılır; kapsamları farklıdır.

**Kalite güvencesi** (quality assurance) sürece yöneliktir ve önleyicidir. Kuralların
yazılı olması, her kuralın bir denetime bağlanması, değişikliklerin gözden geçirilmesi,
kusurların kaydedilmesi bu başlığa girer. Sorusu şudur: kusurun ortaya çıkmasını ne
engelliyor?

**Kalite kontrolü** (quality control) ürüne yöneliktir ve tespit edicidir. Elde duran
sürümün beklentileri karşılayıp karşılamadığına bakar. Sorusu şudur: bu sürümde kusur var
mı?

**Test** kalite kontrolünün başlıca yöntemidir, ama tek yöntemi değildir. Gözden geçirme,
biçimsel çözümleme ve statik denetim de kusur bulur. Test, programı **çalıştırarak** kanıt
üretmesiyle ayrılır: gözlenen davranışı beklenenle karşılaştırır.

Üçünün ilişkisi hiyerarşiktir: test, kalite kontrolünün bir aracıdır; kalite kontrolü,
kalite güvencesinin bir parçasıdır. Bu kurs ağırlıklı olarak test hakkındadır, ama testin
neyi kanıtladığı ve neyi kanıtlayamadığı sorusu güvence düzeyinde yanıtlanır.

Testin kanıtlayamadığı şeyin adı da bellidir: bir test yalnız kusurun **varlığını**
gösterebilir, yokluğunu gösteremez. Sonlu sayıda girdiyle sonsuz girdi kümesi denenemez.
Bu yüzden testin işi "kusursuzluğu kanıtlamak" değil, "kusur bulma olasılığı en yüksek
girdileri seçmektir". Test tasarımının bütün teknikleri bu seçim probleminin yanıtıdır.

## Özet

- Kalite, belirtilmiş ve örtük beklentilere uygunluk derecesidir; neye uygunluk sorusu
  yanıtlanmadan ölçülemez.
- Ürün kalitesi elde duran şeyin, süreç kalitesi onu üreten çalışma biçiminin niteliğidir;
  iyi süreç iyi ürünü garanti etmez ama kötü süreç iyi ürünü tekrarlanamaz kılar.
- İzlenebilirlik ölçümü "kuralların kaçının denetimi var" sorusunu sorar; ürün ölçümü
  yalnız sorulmuş sorular hakkında bilgi verir.
- Örnekte dört denetimin dördü geçiyordu; denetimsiz iki kuraldan biri yazıldığında
  bilinmeyen üye türünün sessizce kabul edildiği kusur ortaya çıktı.
- Kalite güvencesi önleyici ve sürece, kalite kontrolü tespit edici ve ürüne yöneliktir;
  test kalite kontrolünün programı çalıştırarak kanıt üreten yöntemidir.
- Test kusurun varlığını gösterebilir, yokluğunu gösteremez.

## Sonraki Adım

Bu derste denetimler belirtimden türetildi: yazılı kural neyse, denetim onu sordu. Bu,
"kitaplık belirtime uyuyor mu" sorusudur. Ama belirtimin kendisi yanlışsa ne olur? Kurallar
eksiksiz uygulanmış, her denetim yeşil ve sonuç yine de hatalı olabilir — çünkü yazılı
kural, kütüphanenin gerçekten uyguladığı kural değildir. Sonraki ders bu iki soruyu ayırır:
doğru inşa etmek ile doğru şeyi inşa etmek.
