Testing, QA & Security Validation

Otomatis di CI/CD · deterministik · siap produksi

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 dtk

45% dari total suite · target: Coverage ≥ 90%

Component Test

620 test · Testing Library · ~1,4 mnt

20% dari total suite · target: Semua state & interaksi

Integration Test

410 test · Vitest + Testcontainers · ~4 mnt

15% dari total suite · target: Lintas layanan nyata

API Test

260 test · Supertest + Zod contract · ~2 mnt

8% dari total suite · target: Semua metode & error path

End-to-End Test

78 test · Playwright · ~11 mnt

6% dari total suite · target: Alur login → publish

Performance Test

24 test · k6 · ~15 mnt

3% dari total suite · target: SLO latency & throughput

Security Test

96 test · ZAP, Semgrep, Trivy · ~9 mnt

2% dari total suite · target: Nol temuan kritis

Production Validation

18 test · Synthetic monitor · Kontinu

1% 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

Varian & ukuranDisabled + loadingIcon-only punya aria-labelKeyboard Enter/Space

Modal / Dialog

Focus trapEscape menutupKembalikan fokus ke pemicuScroll lock

Timeline

10 klip × 2 detikDrag reorderSnap transisiZoom & playhead

Dashboard

Stat card renderChart empty stateLoading skeletonError boundary

Image Viewer

Zoom & panLazy loadAlt textFallback saat gagal

Video Player

Play/pauseSeek & bufferingCaption trackKontrol keyboard

Forms

Label terkait inputPesan error inlineSubmit ganda dicegahReset state

Navigation

Rute aktifSidebar mobileSkip linkFokus terlihat

Reusable Components

Snapshot propsTema terang/gelapRTL-safeReduced motion

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

GET/api/v1/projects
Pagination & filter401 tanpa token403 lintas tenantETag cache
POST/api/v1/projects
Validasi Zod422 payload salahIdempotency-Key201 + Location
PUT/api/v1/projects/:id
Replace penuh404 id asing409 versi bentrok
PATCH/api/v1/projects/:id
Partial updateField terlarang ditolakAudit trail tercatat
DELETE/api/v1/projects/:id
Soft deleteKaskade asetIdempoten saat diulang
POST/api/v1/workflows/:id/run
Rate limit per tenantKuota terlampaui → 429Resume dari tahap gagal
GET/api/v1/renders/:id
Status pollingSigned URL kedaluwarsaStreaming progress SSE

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

AspekMetodeAmbangJika menyimpang
Konsistensi karakterEmbedding wajah + perbandingan seed antar sceneSimilarity ≥ 0,88Kembalikan ke Image Generation
Konsistensi lingkunganHistogram palet + deteksi objek latarDelta palet ≤ 12%Kembalikan ke Prompt Generation
Konsistensi gaya visualStyle embedding (CLIP) antar 10 sceneVariance ≤ 0,10Regenerasi scene menyimpang
Konsistensi narasiLLM judge: alur, nama, tenseSkor ≥ 8/10Kembalikan ke Story Optimization
Konsistensi subtitleDiff transkrip voice vs subtitleWER ≤ 3%Regenerasi Subtitle
Konsistensi metadataCocokkan judul/tag dengan tema storyRelevansi ≥ 0,85Regenerasi SEO

Performance Testing

Target SLO per area dan hasil pengukuran terakhir

API Latency

Lulus

p95 · target < 400 ms · terukur 312 ms

Database Query

Lulus

p95 · target < 120 ms · terukur 88 ms

Redis

Lulus

p99 · target < 5 ms · terukur 3 ms

Queue wait

Lulus

p95 · target < 30 dtk · terukur 24 dtk

Image Generation

Lulus

per gambar · target < 12 dtk · terukur 9.4 dtk

Video Generation

Gagal

per klip 2 dtk · target < 45 dtk · terukur 52 dtk

Rendering

Lulus

video 20 dtk · target < 90 dtk · terukur 74 dtk

Upload

Lulus

50 MB · target < 20 dtk · terukur 13 dtk

Download

Lulus

50 MB via CDN · target < 8 dtk · terukur 5 dtk

Streaming

Lulus

time 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

Lulus

Job disimpan ke Redis AOF + DLQ; nol job hilang pada 14.000 pengguna.

Pemulihan otomatis

Lulus

Sistem kembali ke p95 < 400 ms dalam 6 menit setelah beban turun.

Tidak ada kerusakan permanen

Lulus

Tidak ada korupsi data, koneksi pool pulih, GPU node di-drain aman.

Backpressure

Lulus

Gateway mengembalikan 429 + Retry-After alih-alih menumpuk permintaan.

Soak Testing

72 jam berjalan terus-menerus tanpa degradasi

MetrikAwal72 jamVerdict
CPU38%41%Stabil
Memory2,1 GB2,3 GBTidak ada leak
GPU62%64%Stabil
Queue depth1215Stabil
Database connections8487Pool sehat
Storage4,2 TB4,9 TBLifecycle bekerja
Network310 Mbps322 MbpsStabil
Error rate0,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).

Lulus

Database tidak tersedia

Primary dimatikan

Failover replica < 30 dtk, tulis di-queue ulang.

Lulus

Redis gagal

Cluster node hilang kuorum

Cache miss graceful, antrean pindah ke node sehat.

Lulus

AI Provider gagal

Provider utama 500/timeout

Failover vendor kedua < 3 dtk, workflow tidak berhenti.

Lulus

Storage gagal

Blokir endpoint S3

Retry eksponensial + buffer lokal, job resume.

Waspada

Queue gagal

Worker dimatikan massal

Job tetap di antrean, resume saat worker kembali.

Lulus

Network terputus

Latensi +2s & packet loss 10%

Timeout terkontrol, circuit breaker aktif.

Lulus

Security Testing

Pengujian OWASP + supply chain pada setiap rilis

SQL Injection

Lulus

Fuzz payload + query parametrized audit

Semua akses lewat Prisma/parameter binding.

Cross-Site Scripting (XSS)

Lulus

DOM & stored XSS probe, audit dangerouslySetInnerHTML

Sanitasi output + CSP ketat.

CSRF

Lulus

Cross-origin form + token absen

SameSite=Lax + token per sesi.

Broken Authentication

Lulus

Brute force, token tampering, replay

Rate limit + rotasi JWT + MFA admin.

Broken Authorization

Lulus

IDOR lintas tenant di setiap endpoint

RLS + cek tenant di server function.

Rate Limiting

Lulus

Burst 10.000 req/menit per token

429 + Retry-After konsisten.

Session Hijacking

Lulus

Pencurian cookie, fixation

HttpOnly, Secure, rotasi saat privilege naik.

API Abuse

Waspada

Scraping & kuota berlebih

Tambah kuota adaptif per tenant.

File Upload Validation

Lulus

Magic 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

Lulus

gitleaks + audit bundle klien

Nol secret di kode dan bundle browser.

Dependency Vulnerability

Lulus

npm audit + OSV harian

Nol High/Critical terbuka.

Container Vulnerability

Lulus

Trivy 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

Lulus

Semua aksi dapat dicapai dengan Tab/Enter/Escape

ARIA Labels

Lulus

Tombol ikon punya aria-label deskriptif

Screen Reader

Lulus

Landmark, heading berurutan, live region untuk progres

Color Contrast

Lulus

Teks ≥ 4.5:1, elemen besar ≥ 3:1 (WCAG AA)

Focus Indicator

Lulus

Ring fokus terlihat di tema terang & gelap

Reduced Motion

Waspada

prefers-reduced-motion menonaktifkan animasi besar

Semantic HTML

Lulus

Satu <main>, list semantik, label terkait input

Cross Platform Testing

Konsistensi tampilan dan fungsi lintas perangkat

Desktop 1920×1080

Lulus

Chrome, Edge, Firefox, Safari

Laptop 1440×900

Lulus

Chrome, Safari

Tablet 820×1180

Lulus

Safari iOS, Chrome Android

Mobile 390×844

Lulus

Safari iOS, Chrome Android

Mobile kecil 360×640

Waspada

Chrome Android

Visual Regression Testing

Snapshot per halaman × 3 breakpoint × 2 tema

DashboardStoryboardTimelineEditorSettingsExportThumbnail

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)

  1. 1Login
  2. 2Membuat Project
  3. 3Menulis Narasi
  4. 4Generate Storyboard
  5. 5Generate Image
  6. 6Generate Video
  7. 7Generate Voice
  8. 8Generate Subtitle
  9. 9Render
  10. 10Export
  11. 11Publish

Observability Validation

Memastikan pilar observability benar-benar hidup

Monitoring aktif

Lulus

Query Prometheus untuk metrik kunci setiap service

Logging aktif

Lulus

Cari requestId uji di Loki dalam 30 detik

Tracing aktif

Lulus

Trace end-to-end memuat span ai.request & render.job

Alert aktif

Lulus

Trigger alert sintetis, verifikasi kanal notifikasi

Health Check aktif

Lulus

Semua /health & /ready mengembalikan 200

Backup & Recovery Testing

Uji pemulihan berkala sesuai RTO/RPO

Backup Database

Lulus

Target Selesai < 20 menit · hasil 14 menit

Restore Database

Lulus

Target RTO < 30 menit · hasil 22 menit

Backup Storage

Lulus

Target Metadata harian konsisten · hasil Konsisten

Restore Storage

Lulus

Target RTO < 2 jam · hasil 1 jam 35 menit

Recovery Workflow

Lulus

Target Workflow resume dari tahap terakhir · hasil Resume otomatis

Recovery Configuration

Lulus

Target 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

QA-412HighVideo Generation

Klip 2 detik melewati target 45 dtk pada beban tinggi.

QA-418MediumAPI Abuse

Kuota adaptif per tenant belum aktif.

QA-423MediumAccessibility

prefers-reduced-motion belum mematikan animasi timeline.

QA-427LowMobile 360px

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

    Lint

    ESLint + typecheck

    Blocking — pipeline berhenti bila gagal

  2. 2

    Unit Test

    Coverage ≥ 90%

    Blocking — pipeline berhenti bila gagal

  3. 3

    Component Test

    Nol kegagalan interaksi

    Blocking — pipeline berhenti bila gagal

  4. 4

    Integration Test

    Testcontainers hijau

    Blocking — pipeline berhenti bila gagal

  5. 5

    API Test

    Contract test sesuai OpenAPI

    Blocking — pipeline berhenti bila gagal

  6. 6

    Security Scan

    Nol High/Critical

    Blocking — pipeline berhenti bila gagal

  7. 7

    Performance Validation

    p95 < 400 ms pada smoke load

    Blocking — pipeline berhenti bila gagal

  8. 8

    End-to-End Test

    Alur login → publish lulus

    Blocking — pipeline berhenti bila gagal

  9. 9

    Build

    Image + SBOM ditandatangani

    Blocking — pipeline berhenti bila gagal

  10. 10

    Deploy Staging

    helm --atomic

    Blocking — pipeline berhenti bila gagal

  11. 11

    Smoke Test

    Playwright happy-path

    Blocking — pipeline berhenti bila gagal

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

Unit TestIntegration TestAPI TestEnd-to-End TestVisual Regression Test

Suite regresi penuh berjalan pada setiap pull request dan sebelum deploy produksi. Fitur lama yang rusak akibat perubahan baru langsung memblokir merge.