Quality Assurance Shorts Studio AI
Sistem pengujian enterprise yang memastikan setiap fitur — dari utilitas kecil hingga pipeline AI 16 tahap — bekerja benar, aman, stabil, dan tahan beban tinggi sebelum masuk produksi.
Total test
3.346
Pass rate
98.7%
Coverage
91.4%
Durasi pipeline
27 mnt 41 dtk
Testing Pyramid
Basis lebar di unit & integration agar umpan balik tetap cepat
Unit Test
1.840 test · Vitest · ~28 dtk45% dari total suite · target: Coverage ≥ 90%
Component Test
620 test · Testing Library · ~1,4 mnt20% dari total suite · target: Semua state & interaksi
Integration Test
410 test · Vitest + Testcontainers · ~4 mnt15% dari total suite · target: Lintas layanan nyata
API Test
260 test · Supertest + Zod contract · ~2 mnt8% dari total suite · target: Semua metode & error path
End-to-End Test
78 test · Playwright · ~11 mnt6% dari total suite · target: Alur login → publish
Performance Test
24 test · k6 · ~15 mnt3% dari total suite · target: SLO latency & throughput
Security Test
96 test · ZAP, Semgrep, Trivy · ~9 mnt2% dari total suite · target: Nol temuan kritis
Production Validation
18 test · Synthetic monitor · Kontinu1% dari total suite · target: Smoke tiap 5 menit
Unit Testing
Target coverage minimal 90% per area
Utilities
96%Format durasi, slug, clamp, retry backoff
Helper Functions
94%Cost estimator, timeline math, token counter
Hooks
91%useWorkflow, useHydrated, useTheme, usePipeline
Business Logic
93%Model selection, fallback, stage transition
State Management
92%Zustand store: project, workflow, editor, settings
Validation
98%Skema Zod, flexText/flexList, batas panjang
Parser
95%Parsing JSON AI, SRT/VTT, metadata media
Formatter
97%Timecode, ukuran file, mata uang, bahasa
Component Testing
Semua state dan interaksi diverifikasi
Button
Modal / Dialog
Timeline
Dashboard
Image Viewer
Video Player
Forms
Navigation
Reusable Components
Integration Testing
Lintas layanan dengan dependensi nyata (Testcontainers)
Frontend ↔ Backend
Server function + SSR loader, retry, dan error boundary.
Fixture: MSW + server nyata
Backend ↔ Database
Transaksi, RLS per tenant, migrasi, rollback.
Fixture: Testcontainers Postgres
Backend ↔ Redis
Cache hit/miss, TTL, invalidasi, kegagalan koneksi.
Fixture: Redis ephemeral
Backend ↔ Queue
Publish/consume, retry, DLQ, idempotency key.
Fixture: BullMQ in-memory Redis
Backend ↔ AI Providers
Sukses, timeout, rate limit, fallback lintas vendor.
Fixture: Mock provider + kontrak nyata (nightly)
Workflow ↔ Storage
Upload aset, signed URL, resume, pembersihan temp.
Fixture: MinIO S3-compatible
Auth ↔ Authorization
JWT valid/kedaluwarsa, RBAC per peran, MFA admin.
Fixture: Auth service nyata
API Testing
Validasi input, respons, error handling, auth, dan kontrak OpenAPI
AI Workflow Testing
Kontrak output setiap tahap sebelum diteruskan ke tahap berikutnya
Script Analysis
Output kontrak
StoryAnalysis JSON
Assertion
Tema, mood, target audiens terisi; panjang narasi 40–120 kata.
Gagal assertion → tahap ditandai failed, pipeline berhenti dan job dikembalikan ke antrean retry tahap tersebut.
AI Consistency Testing
Deteksi penyimpangan dan rollback otomatis ke tahap terkait
| Aspek | Metode | Ambang | Jika menyimpang |
|---|---|---|---|
| Konsistensi karakter | Embedding wajah + perbandingan seed antar scene | Similarity ≥ 0,88 | Kembalikan ke Image Generation |
| Konsistensi lingkungan | Histogram palet + deteksi objek latar | Delta palet ≤ 12% | Kembalikan ke Prompt Generation |
| Konsistensi gaya visual | Style embedding (CLIP) antar 10 scene | Variance ≤ 0,10 | Regenerasi scene menyimpang |
| Konsistensi narasi | LLM judge: alur, nama, tense | Skor ≥ 8/10 | Kembalikan ke Story Optimization |
| Konsistensi subtitle | Diff transkrip voice vs subtitle | WER ≤ 3% | Regenerasi Subtitle |
| Konsistensi metadata | Cocokkan judul/tag dengan tema story | Relevansi ≥ 0,85 | Regenerasi SEO |
Performance Testing
Target SLO per area dan hasil pengukuran terakhir
API Latency
Lulusp95 · target < 400 ms · terukur 312 ms
Database Query
Lulusp95 · target < 120 ms · terukur 88 ms
Redis
Lulusp99 · target < 5 ms · terukur 3 ms
Queue wait
Lulusp95 · target < 30 dtk · terukur 24 dtk
Image Generation
Lulusper gambar · target < 12 dtk · terukur 9.4 dtk
Video Generation
Gagalper klip 2 dtk · target < 45 dtk · terukur 52 dtk
Rendering
Lulusvideo 20 dtk · target < 90 dtk · terukur 74 dtk
Upload
Lulus50 MB · target < 20 dtk · terukur 13 dtk
Download
Lulus50 MB via CDN · target < 8 dtk · terukur 5 dtk
Streaming
Lulustime to first frame · target < 1,5 dtk · terukur 1.1 dtk
Load Testing
Geser skala pengguna untuk melihat perilaku sistem
Throughput
1.350 rps
Latency p95
318 ms
Error rate
0.09%
Antrean render
61
Pod aktif
34
Verdict
stabil
Render bersamaan
30% pengguna memicu render 20 detik dalam jendela 5 menit.
Pengaman: Autoscale GPU pool + antrean prioritas high.
Upload bersamaan
Upload aset 20–80 MB via signed URL langsung ke storage.
Pengaman: Bypass API, multipart upload, backpressure.
Login bersamaan
Lonjakan 5.000 login/menit saat kampanye.
Pengaman: Rate limit per IP, cache JWKS, replica auth.
AI Request bersamaan
Beban penuh ke provider LLM & image.
Pengaman: Queue batching, failover vendor, cost guard.
Stress Testing
Didorong melewati kapasitas normal (14.000 pengguna)
Tidak ada kehilangan data
LulusJob disimpan ke Redis AOF + DLQ; nol job hilang pada 14.000 pengguna.
Pemulihan otomatis
LulusSistem kembali ke p95 < 400 ms dalam 6 menit setelah beban turun.
Tidak ada kerusakan permanen
LulusTidak ada korupsi data, koneksi pool pulih, GPU node di-drain aman.
Backpressure
LulusGateway mengembalikan 429 + Retry-After alih-alih menumpuk permintaan.
Soak Testing
72 jam berjalan terus-menerus tanpa degradasi
| Metrik | Awal | 72 jam | Verdict |
|---|---|---|---|
| CPU | 38% | 41% | Stabil |
| Memory | 2,1 GB | 2,3 GB | Tidak ada leak |
| GPU | 62% | 64% | Stabil |
| Queue depth | 12 | 15 | Stabil |
| Database connections | 84 | 87 | Pool sehat |
| Storage | 4,2 TB | 4,9 TB | Lifecycle bekerja |
| Network | 310 Mbps | 322 Mbps | Stabil |
| Error rate | 0,05% | 0,06% | Di bawah SLO |
Chaos Engineering
Injeksi kegagalan terjadwal dengan verifikasi pemulihan otomatis
Server (pod) mati
Pod kill acak tiap 10 menit
Reschedule < 60 dtk, nol request gagal (PDB + retry).
LulusDatabase tidak tersedia
Primary dimatikan
Failover replica < 30 dtk, tulis di-queue ulang.
LulusRedis gagal
Cluster node hilang kuorum
Cache miss graceful, antrean pindah ke node sehat.
LulusAI Provider gagal
Provider utama 500/timeout
Failover vendor kedua < 3 dtk, workflow tidak berhenti.
LulusStorage gagal
Blokir endpoint S3
Retry eksponensial + buffer lokal, job resume.
WaspadaQueue gagal
Worker dimatikan massal
Job tetap di antrean, resume saat worker kembali.
LulusNetwork terputus
Latensi +2s & packet loss 10%
Timeout terkontrol, circuit breaker aktif.
LulusSecurity Testing
Pengujian OWASP + supply chain pada setiap rilis
SQL Injection
LulusFuzz payload + query parametrized audit
Semua akses lewat Prisma/parameter binding.
Cross-Site Scripting (XSS)
LulusDOM & stored XSS probe, audit dangerouslySetInnerHTML
Sanitasi output + CSP ketat.
CSRF
LulusCross-origin form + token absen
SameSite=Lax + token per sesi.
Broken Authentication
LulusBrute force, token tampering, replay
Rate limit + rotasi JWT + MFA admin.
Broken Authorization
LulusIDOR lintas tenant di setiap endpoint
RLS + cek tenant di server function.
Rate Limiting
LulusBurst 10.000 req/menit per token
429 + Retry-After konsisten.
Session Hijacking
LulusPencurian cookie, fixation
HttpOnly, Secure, rotasi saat privilege naik.
API Abuse
WaspadaScraping & kuota berlebih
Tambah kuota adaptif per tenant.
File Upload Validation
LulusMagic byte palsu, polyglot, zip bomb
Cek MIME nyata + batas ukuran + scan.
Path Traversal
Lulus../ pada key storage & nama file
Normalisasi path + allowlist karakter.
Secret Exposure
Lulusgitleaks + audit bundle klien
Nol secret di kode dan bundle browser.
Dependency Vulnerability
Lulusnpm audit + OSV harian
Nol High/Critical terbuka.
Container Vulnerability
LulusTrivy image scan + cosign verify
Base image di-patch mingguan.
Authentication Testing
Seluruh jalur identitas dan otorisasi
- Login: kredensial benar, salah, akun terkunci setelah 5 percobaan.
- Logout: token dicabut, sesi lain opsional diakhiri.
- Refresh Token: rotasi, deteksi penggunaan ulang token lama.
- Password Reset: token sekali pakai, kedaluwarsa 15 menit.
- OAuth: state/PKCE valid, penolakan callback tanpa state.
- Magic Link: sekali pakai, terikat perangkat, kedaluwarsa 10 menit.
- Session Expiration: idle timeout dan absolute timeout.
- RBAC: viewer, editor, admin, owner — akses lintas peran ditolak.
Data Validation
Setiap kasus wajib menghasilkan pesan kesalahan yang jelas
Input kosong
Pesan "Wajib diisi" di field terkait, submit diblokir.
Input terlalu panjang
Batas karakter ditegakkan klien & server, 422 dari API.
Karakter khusus / emoji
Diterima dan di-escape; skrip tidak dieksekusi.
File tidak valid
Tolak berdasarkan magic byte, bukan ekstensi.
Ukuran file terlalu besar
Ditolak sebelum upload, pesan menyebut batas.
Format media salah
ffprobe menolak, pesan menyebut format yang didukung.
Metadata rusak
Parser gagal aman, job ditandai invalid tanpa crash.
Accessibility Testing
Target WCAG 2.2 AA (axe-core + audit manual)
Keyboard Navigation
LulusSemua aksi dapat dicapai dengan Tab/Enter/Escape
ARIA Labels
LulusTombol ikon punya aria-label deskriptif
Screen Reader
LulusLandmark, heading berurutan, live region untuk progres
Color Contrast
LulusTeks ≥ 4.5:1, elemen besar ≥ 3:1 (WCAG AA)
Focus Indicator
LulusRing fokus terlihat di tema terang & gelap
Reduced Motion
Waspadaprefers-reduced-motion menonaktifkan animasi besar
Semantic HTML
LulusSatu <main>, list semantik, label terkait input
Cross Platform Testing
Konsistensi tampilan dan fungsi lintas perangkat
Desktop 1920×1080
LulusChrome, Edge, Firefox, Safari
Laptop 1440×900
LulusChrome, Safari
Tablet 820×1180
LulusSafari iOS, Chrome Android
Mobile 390×844
LulusSafari iOS, Chrome Android
Mobile kecil 360×640
WaspadaChrome Android
Visual Regression Testing
Snapshot per halaman × 3 breakpoint × 2 tema
Perbandingan piksel dengan toleransi 0,1%; diff otomatis dilampirkan ke pull request dan wajib disetujui sebelum merge.
End-to-End Testing
Alur lengkap tanpa intervensi manual (Playwright)
- 1Login
- 2Membuat Project
- 3Menulis Narasi
- 4Generate Storyboard
- 5Generate Image
- 6Generate Video
- 7Generate Voice
- 8Generate Subtitle
- 9Render
- 10Export
- 11Publish
Observability Validation
Memastikan pilar observability benar-benar hidup
Monitoring aktif
LulusQuery Prometheus untuk metrik kunci setiap service
Logging aktif
LulusCari requestId uji di Loki dalam 30 detik
Tracing aktif
LulusTrace end-to-end memuat span ai.request & render.job
Alert aktif
LulusTrigger alert sintetis, verifikasi kanal notifikasi
Health Check aktif
LulusSemua /health & /ready mengembalikan 200
Backup & Recovery Testing
Uji pemulihan berkala sesuai RTO/RPO
Backup Database
LulusTarget Selesai < 20 menit · hasil 14 menit
Restore Database
LulusTarget RTO < 30 menit · hasil 22 menit
Backup Storage
LulusTarget Metadata harian konsisten · hasil Konsisten
Restore Storage
LulusTarget RTO < 2 jam · hasil 1 jam 35 menit
Recovery Workflow
LulusTarget Workflow resume dari tahap terakhir · hasil Resume otomatis
Recovery Configuration
LulusTarget Rebuild infra via Terraform < 4 jam · hasil 3 jam 10 menit
Acceptance Criteria
6 dari 7 kriteria terpenuhi
- ✓Seluruh test kritis lulus
- ✓Tidak ada bug prioritas tinggi
- ✓Tidak ada kerentanan keamanan kritis
- ✓AI Workflow berhasil end-to-end
- !Performa memenuhi target
- ✓Monitoring dan logging aktif
- ✓Dokumentasi diperbarui
Test Reporting
Laporan otomatis setiap pipeline (JUnit + HTML + Slack digest)
Berhasil
3.302
Gagal
9
Dilewati
35
Coverage
91.4%
Daftar bug terbuka
Klip 2 detik melewati target 45 dtk pada beban tinggi.
Kuota adaptif per tenant belum aktif.
prefers-reduced-motion belum mematikan animasi timeline.
Tabel encoding butuh scroll horizontal tambahan.
Rekomendasi perbaikan
- Naikkan concurrency GPU worker atau pecah klip video menjadi sub-job paralel.
- Aktifkan kuota adaptif per tenant di gateway sebelum rilis publik.
- Tambahkan guard prefers-reduced-motion pada animasi timeline dan progress shine.
- Tambah snapshot visual untuk breakpoint 360px pada halaman export.
CI/CD Integration
Semua pengujian berjalan sebelum deployment — gagal berarti berhenti
- 1
Lint
ESLint + typecheck
Blocking — pipeline berhenti bila gagal
- 2
Unit Test
Coverage ≥ 90%
Blocking — pipeline berhenti bila gagal
- 3
Component Test
Nol kegagalan interaksi
Blocking — pipeline berhenti bila gagal
- 4
Integration Test
Testcontainers hijau
Blocking — pipeline berhenti bila gagal
- 5
API Test
Contract test sesuai OpenAPI
Blocking — pipeline berhenti bila gagal
- 6
Security Scan
Nol High/Critical
Blocking — pipeline berhenti bila gagal
- 7
Performance Validation
p95 < 400 ms pada smoke load
Blocking — pipeline berhenti bila gagal
- 8
End-to-End Test
Alur login → publish lulus
Blocking — pipeline berhenti bila gagal
- 9
Build
Image + SBOM ditandatangani
Blocking — pipeline berhenti bila gagal
- 10
Deploy Staging
helm --atomic
Blocking — pipeline berhenti bila gagal
- 11
Smoke Test
Playwright happy-path
Blocking — pipeline berhenti bila gagal
- 12
Deploy Production
Approval + canary
Blocking — pipeline berhenti bila gagal
Checklist Kesiapan Produksi
Wajib hijau sebelum rilis
- ✓Semua test kritis hijau di pipeline terakhir.
- ✓Coverage unit ≥ 90% dan tidak turun dari rilis sebelumnya.
- ✓Nol kerentanan High/Critical pada dependency dan container.
- ✓AI Workflow 16 tahap lulus uji end-to-end di staging.
- ✓Load test 1.000 pengguna stabil, 10.000 pengguna terdegradasi terkendali.
- ✓Chaos experiment terjadwal lulus dengan pemulihan otomatis.
- ✓Visual regression tanpa diff tak terduga.
- ✓Observability (monitor, log, trace, alert, health) tervalidasi.
- ✓Backup & restore diuji dalam 7 hari terakhir.
- ✓Laporan QA dan dokumentasi rilis diperbarui.
Best Practice QA
Prinsip kerja tim QA AI Production Studio
- Test deterministik: nol sleep tetap, gunakan waiting berbasis kondisi.
- Isolasi data per test dengan factory + database bersih per suite.
- Mock provider AI di CI cepat; kontrak nyata dijalankan nightly.
- Golden dataset narasi untuk menilai kualitas output AI dari rilis ke rilis.
- Flaky test dikarantina otomatis dan wajib diperbaiki dalam 3 hari.
- Shift-left security: Semgrep & gitleaks berjalan pada tiap pull request.
- Setiap bug produksi wajib melahirkan satu test regresi baru.
Regression Testing
Dijalankan pada setiap perubahan kode
Suite regresi penuh berjalan pada setiap pull request dan sebelum deploy produksi. Fitur lama yang rusak akibat perubahan baru langsung memblokir merge.