NeoBank Canlıya Çıkış Kalite Dosyası (Gerçek Proje Simülasyonu)
Sıfırdan kurulan yeni nesil dijital banka NeoBank‘ın ilk Kalite Mühendisi (Lead QA) olarak masaya oturdun. Bankanın lansman sürümünde (V1.0) canlıya çıkacak 3 kritik modülü var:
-
Dijital Kayıt (KYC): T.C. Kimlik No, Doğum Tarihi ve Telefon ile kayıt; SMS OTP doğrulaması.
-
Anlık Para Yükleme: Tanımlı karttan cüzdana para aktarımı (Limitler: Min 20 TL, Max 10.000 TL).
-
Karekod (QR) ile Ödeme: Üye işyerinde QR okutarak cüzdan bakiyesinden anında ödeme.
Aşağıdaki dosya; bir testçinin mülakatlarda, portfolyosunda ve profesyonel kariyerinde sunabileceği uçtan uca Resmi Kalite ve Test Teslimat Dokümanıdır.
1. Test Stratejisi ve Risk Analizi (Risk-Based Testing)
Bir bankada her şeyi aynı anda ve sonsuza kadar test edemezsin (ISTQB İlke 2: Eksiksiz Test İmkânsızdır). Bu yüzden kaynaklarımızı en büyük finansal ve yasal yıkım yaratabilecek risk alanlarına odaklarız.
+----------------------------------------------------------------------------------------------------+
| NEOBANK RİSK ÖNCELİKLENDİRME MATRİSİ |
+---------+----------------------------+----------+--------+-----------------------------------------+
| RİSK ID | RİSK TANIMI | OLASILIK | ETKİ | İLİŞKİLİ ISTQB İLKESİ & AKSİYON |
+---------+----------------------------+----------+--------+-----------------------------------------+
| RSK-01 | QR Ödemede Çift Çekim veya | Orta | Kritik | İlke 6: Test bağlama bağlıdır. Finansta |
| | Paranın Havada Kalması | | (Afet) | veri bütünlüğü (Atomicity) 1 numaradır. |
+---------+----------------------------+----------+--------+-----------------------------------------+
| RSK-02 | Sahte Kimlikle Kayıt / | Düşük | Kritik | İlke 3: Erken test (Shift-Left). BDDK/ |
| | OTP Aşımı (KYC Zafiyeti) | | (Yasal)| MASAK cezalarını önlemek için zorunlu. |
+---------+----------------------------+----------+--------+-----------------------------------------+
| RSK-03 | Limit Aşımı (Bakiye Eksiye | Yüksek | Yüksek | İlke 1: Test kusurların varlığını |
| | Düşürme / Kuruş Sapması) | | (Maddi)| gösterir. Sınır değer kontrolleri şart. |
+---------+----------------------------+----------+--------+-----------------------------------------+
-
Risk 1 (QR Ödeme / Veri Bütünlüğü Riski): Kullanıcının parası cüzdandan düşüp POS cihazı onay vermezse veya internet koptuğunda mükerrer çekim yapılırsa tüketici güveni sıfırlanır. Test odağı: Yarış durumları (Race condition), zaman aşımı (Timeout) ve ters işlem (Rollback) senaryoları.
-
Risk 2 (KYC ve Kimlik Güvenliği Riski): Reşit olmayanların, kara listedeki kişilerin veya başkasının T.C. kimlik numarasıyla kayıt olunması bankanın lisansının iptaline yol açar. Test odağı: Nüfus Müdürlüğü (NVİ) servis entegrasyonu ve SMS OTP brute-force koruması.
-
Risk 3 (Para Yükleme / Sınır Aşımı Riski): Kullanıcının hesabına 20 TL altı veya 10.000 TL üzeri yükleme yapabilmesi ya da karttan para çekilmeden cüzdana bakiye tanımlanması doğrudan nakit kaçağı yaratır. Test odağı: BVA (Sınır Değer Analizi) ve eksi bakiye zorlamaları.
2. Gereksinim İzlenebilirlik Matrisi (RTM) ve Test Paketi
Aşağıdaki senaryolar ECP (Eşdeğerlik Payları), BVA (Sınır Değer Analizi) ve Karar Tablosu teknikleri kullanılarak türetilmiştir.
| Test ID | Modül | Uygulanan Teknik | Test Senaryosu ve Girdi Verisi | Beklenen Sonuç |
| TC-KYC-01 | KYC Kayıt | ECP (Geçerli Sınıf) | Geçerli 11 haneli T.C., Doğum Yılı: 1995, Geçerli GSM | NVİ doğrulaması başarılı, SMS OTP ekranına yönlendirilir. |
| TC-KYC-02 | KYC Kayıt | BVA (Yaş Sınırı: 18) | Tam 18 yaşını doldurduğu gün (Bugün – 18 yıl) | Kayıt onaylanır (18 yaş sınırı sınır değerinde geçer). |
| TC-KYC-03 | KYC Kayıt | BVA (Yaş Sınırı: 18) | 18 yaşını doldurmasına 1 gün kala (Bugün – 18 yıl + 1 gün) | Hata: “18 yaşından küçükler hesap açamaz.” Kayıt engellenir. |
| TC-KYC-04 | KYC / OTP | Karar Tablosu | Hatalı OTP kodu 3 kez peş peşe girilir | Hesap 15 dakika kilitlenir, “Çok fazla deneme yaptınız” uyarısı. |
| TC-TOP-01 | Para Yükleme | BVA (Alt Sınır: 20 TL) | Yükleme Tutarı: 19.99 TL |
Hata: “Minimum yükleme tutarı 20.00 TL’dir.” İşlem engellenir. |
| TC-TOP-02 | Para Yükleme | BVA (Alt Sınır: 20 TL) | Yükleme Tutarı: 20.00 TL |
Karttan 20 TL çekilir, cüzdan bakiyesine tam 20 TL eklenir. |
| TC-TOP-03 | Para Yükleme | BVA (Üst Sınır: 10.000) | Yükleme Tutarı: 10.000,00 TL |
İşlem başarılı, bakiye tam 10.000 TL artar. |
| TC-TOP-04 | Para Yükleme | BVA (Üst Sınır: 10.000) | Yükleme Tutarı: 10.000,01 TL |
Hata: “Tek seferde maksimum 10.000 TL yüklenebilir.” |
| TC-PAY-01 | QR Ödeme | Karar Tablosu | Bakiye: 100 TL, QR Tutar: 150 TL, Ek Limit: Yok | Hata: “Yetersiz Bakiye.” İşlem reddedilir, bakiyeden para düşmez. |
| TC-PAY-02 | QR Ödeme | ECP (Negatif Veri) | Süresi Dolmuş / Geçersiz Formatlı QR Okutulur | Hata: “Geçersiz veya süresi dolmuş QR Kod.” Cüzdan etkilenmez. |
3. Kurumsal Standartta Jira Hata Kaydı (Bug Ticket)
================================================================================
JIRA KUSUR BİLETİ (DEFECT TICKET)
================================================================================
Issue Type : Bug
Project : NeoBank Core Mobile App (NEO)
Key : NEO-4891
Summary : [QR Payment] Bakiye cüzdandan düşmesine rağmen POS onay vermiyor ve para iade edilmiyor (Rollback Failure)
Priority : P1 - Blocker / Urgent
Severity : Critical (Finansal Veri Tutarsızlığı / Para Kaybı)
Component : Payment-Gateway, Wallet-Core, QR-Service
Affects Ver : v1.0.0-RC3
Environment : Test-Staging-02 / iOS 17.4 (iPhone 14) & Android 14 (Samsung S23) / Pax A920 POS Terminali
Reporter : Caner Test Mimarı (Lead QA)
Assignee : Mehmet Backend Lead & Zeynep Payment Gateway Dev
AÇIKLAMA (DESCRIPTION):
Kullanıcı üye işyerinde 250.00 TL tutarındaki QR kodu okuttuğunda; mobil cüzdan bakiyesinden
250.00 TL anında düşmektedir. Ancak POS terminali ağ zaman aşımı (Timeout) hatası vererek fiş
üretmemekte; arka planda distributed transaction (iki fazlı ödeme) mekanizması başarısız olduğu
halde cüzdana ters işlem (otomatik para iadesi / rollback) yapılmamaktadır.
YENİDEN ÜRETİM ADIMLARI (STEPS TO REPRODUCE):
1. Cüzdanında 1.000 TL bakiye bulunan test kullanıcısı (User_ID: 884102) ile mobil uygulamaya giriş yapılır.
2. Üye işyeri POS cihazından 250.00 TL tutarında dinamik bir ödeme QR kodu üretilir.
3. Uygulamada "QR ile Öde" butonuna basılarak kamera ile kod okutulur.
4. Ödeme onay ekranında "Onayla" butonuna basılır.
5. Tam bu esnada POS terminalinin internet bağlantısı simüle edilerek zayıflatılır (3G / %50 Paket Kaybı).
BEKLENEN SONUÇ (EXPECTED RESULT):
POS terminali ödeme onayını alamadığı için işlem iptal edilmelidir. Banka Core servisi POS'tan
"HTTP 200 SUCCESS" teyidi alamadığı için cüzdandan düşülen 250.00 TL'yi mikro saniyeler içinde
otomatik olarak kullanıcı cüzdanına iade etmeli (ROLLBACK), ekranda "Ödeme tamamlanamadı,
bakiyenizden düşülen tutar iade edilmiştir" uyarısı çıkmalıdır.
GERÇEKLEŞEN SONUÇ (ACTUAL RESULT):
Mobil uygulamada bakiye 1.000 TL'den 750 TL'ye düşmekte ve ekranda "Ödeme Alındı" yazmaktadır.
Ancak POS terminali "Zaman Aşımı - Hata Kodu: 92" vererek fiş kesmemektedir. Kullanıcının
250 TL'si sistemde kaybolmakta, iade tetiklenmemektedir.
KANITLAR & LOG DÖKÜMÜ (ATTACHMENTS & LOGS):
- Ekran Kaydı : qr_payment_timeout_failure.mp4
- Network Log : payment_gateway_trace_id_99201.har
- Backend Log Kesiti:
[ERROR] [TxId: 99201] POS_Handshake_Timeout after 5000ms.
[FATAL] [TxId: 99201] RollbackEventPublisher failed! Wallet-Core could not revert balance for User: 884102.
================================================================================
4. Fonksiyonel Olmayan Test Matrisi (Non-Functional SLA)
+----------------------------------------------------------------------------------------------------+
| FONKSİYONEL OLMAYAN KALİTE MATRİSİ |
+---------------+------------------------+------------------------------------+----------------------+
| KALİTE NİTELİĞİ| HEDEF MODÜL | DENETİM VE TEST YÖNTEMİ | BAŞARI METRİĞİ (SLA) |
+---------------+------------------------+------------------------------------+----------------------+
| 1. Performans | QR Ödeme & Bakiye | JMeter ile 2.000 eşzamanlı sanal | Yanıt Süresi (P95) |
| (Load/Stress| Sorgulama | kullanıcı yükü altında 10 dk stres | < 1.2 saniye; |
| | | koşumu. | Hata Oranı < %0.01 |
+---------------+------------------------+------------------------------------+----------------------+
| 2. Güvenlik | KYC Kayıt & SMS OTP | OWASP ZAP ile aynı IP ve hesaba | 3 hatalı denemede |
| (Anti-Brute)| Akışı | saniyede 50 adet sahte OTP isteği | HTTP 429 & IP bazlı |
| | | fırlatılması. | 15 dk tam blokaj |
+---------------+------------------------+------------------------------------+----------------------+
| 3. Erişile- | Para Yükleme ve Giriş | Google Lighthouse & Ekran Okuyucu | WCAG 2.1 AA Uyumu; |
| bilirlik | Ekranları | (VoiceOver / TalkBack) ile fare | Contrast Oranı > 4.5:1|
| (A11y) | | olmadan sadece klavye testi. | Tab tuzağı: 0 |
+---------------+------------------------+------------------------------------+----------------------+
5. Çevik Kalite Standartları: DoR ve DoD Kuralları
Takımın sprint içinde “Bize test için vakit kalmadı” ya da “Bu iş eksik analiz edilmiş” kavgalarına düşmemesi için ilan ettiğimiz kalite sınırları:
Definition of Ready – DoR (Geliştirmeye Başlama Şartları)
Bir iş kartı (User Story) geliştiricinin masasına gitmeden önce şu 5 şartı sağlamak zorundadır:
-
Kabul Kriterleri (Acceptance Criteria) Eksiksiz Olmalı: Pozitif akışın yanında en az 3 adet negatif/sınır senaryo açıkça tanımlanmış olmalıdır.
-
Three Amigos İmzası: Analist (PO), Yazılımcı (Dev) ve Test Mühendisi (QA) hikâyeyi toplantıda birlikte tartışmış ve soru işareti bırakmamış olmalıdır.
-
Kullanıcı Arayüzü (Figma) Onayı: Tasarımların tüm mobil çözünürlükleri, hata pencereleri ve boş durum (empty state) görselleri hazır olmalıdır.
-
Bağımlılıklar Çözülmüş Olmalı: Entegrasyon yapılacak dış servisler (ör. NVİ Kimlik Doğrulama, SMS Gateway) test ortamında çalışır ve erişilebilir olmalıdır.
-
Hikâye Tahmin Puanı (Story Point): İş kartı sadece geliştirme süresiyle değil, test ve senaryo tasarım eforu da dahil edilerek puanlanmış olmalıdır.
Definition of Done – DoD (Canlıya Çıkış Şartları)
Geliştirilen hiçbir kod şu 5 maddeyi eksiksiz tamamlamadan “Bitti” sayılıp canlıya alınamaz:
-
Birim Test (Unit Test) Barajı: Geliştiricinin yazdığı kodlarda birim test kapsama oranı (Code Coverage) en az %80 olmalı ve tüm testler yeşil yanmalıdır.
-
Fonksiyonel QA Kabulü: Jira biletine bağlı tüm test senaryoları (ECP, BVA) QA ortamında koşulmuş, passed olmuş ve test koşum raporu eklenmiş olmalıdır.
-
Sıfır Kritik Kusur Kuralı: Sistemde çözülmemiş tek bir Blocker (P1) veya Critical (P2) seviyesinde açık kusur bulunmamalıdır.
-
Regresyon ve Duman Testi Onayı: Yeni eklenen modülün eski modülleri bozmadığı (Regression Suite) CI/CD hattında otomatik doğrulanmış olmalıdır.
-
Güvenlik ve Regülasyon İmzası: Statik kod güvenliği taramasından (SonarQube/SAST) geçmiş olmalı, KVKK kapsamında açıkta tutulan log bulunmadığı teyit edilmelidir.