Developer Testing Standard
Setiap fitur atau perubahan code yang dibuat developer perlu mempertimbangkan 4 jenis testing utama:
| Testing | Tujuan | Scope |
|---|---|---|
| Unit Test | Memastikan logic individual bekerja dengan benar | Function, class, module |
| Integration Test | Memastikan beberapa component bekerja dengan benar saat digabung | Service, repository, DB, external service |
| E2E Test | Memastikan complete business/user flow berjalan | Sistem secara keseluruhan |
| Security Test | Memastikan sistem aman terhadap misuse dan attack | Auth, authorization, input, API, data |
1. Unit Test — Logic
Unit test adalah test paling dasar dan paling banyak dibuat developer.
Function
↓
Input → Logic → OutputContoh:
calculateScore()validateEmail()calculateMCATScore()calculatePrice()
Tujuan:
Apakah logic/code ini menghasilkan hasil yang benar?
Unit test sebaiknya mencakup:
- Happy path
- Edge cases
- Invalid input
- Error handling
- Boundary conditions
2. Integration Test — Interaction
Integration test menguji ketika beberapa bagian code bekerja bersama.
API
↓
Controller
↓
Service
↓
Repository
↓
DatabaseContoh:
POST /users
→ validate
→ create user
→ save to DB
→ return responseTujuan:
Apakah component yang berbeda bisa bekerja dengan benar ketika diintegrasikan?
Integration test dapat mencakup:
- API dengan service
- Service dengan repository
- Repository dengan database
- Interaksi antar module
- Interaksi dengan external service
3. E2E Test — Business Flow
E2E (End-to-End) test menguji alur lengkap dari awal sampai akhir.
FE E2E
Login
↓
Dashboard
↓
Create Test
↓
Submit Test
↓
View ResultBE API-level E2E
POST /login
↓
POST /test
↓
POST /answer
↓
POST /submit
↓
GET /resultTujuan:
Apakah fitur secara keseluruhan bekerja sesuai flow yang diharapkan user/business?
E2E test sebaiknya fokus pada critical business flow, bukan seluruh kemungkinan kombinasi.
Contoh:
- Login
- Registration
- Checkout
- Payment
- Create/submit test
- Critical workflow aplikasi
E2E test sebaiknya lebih sedikit dibandingkan unit test karena biasanya lebih lambat dan lebih fragile.
4. Security Test — Protection
Security test menguji apakah code dan sistem aman terhadap penggunaan yang tidak seharusnya.
Area yang perlu diperhatikan:
- Authentication
- Authorization
- Input validation
- SQL injection
- XSS
- IDOR
- Privilege escalation
- Sensitive data exposure
Contoh authorization:
User A
↓
GET /users/B
↓
403 ForbiddenTujuan:
Apakah sistem tetap aman ketika menerima input atau request yang malicious atau berasal dari user yang tidak memiliki hak akses?
Security test terutama penting untuk:
- Authentication
- Authorization
- API endpoint
- Database query
- File upload
- Input handling
- Sensitive data
- Payment
- Admin functionality
Testing Strategy
Developer tidak harus selalu membuat keempat jenis test untuk setiap perubahan.
Pemilihan testing harus berdasarkan scope, risiko, dan dampak perubahan.
┌─────────────┐
│ E2E │
│ sedikit │
└──────┬──────┘
│
┌─────────▼─────────┐
│ Integration │
│ sedang │
└─────────┬─────────┘
│
┌───────────▼───────────┐
│ Unit Test │
│ banyak │
└───────────────────────┘
+ Security Testing
(cross-cutting concern)Prioritas
Unit Test — Wajib
Gunakan untuk business logic dan function/module yang memiliki behavior penting.
Integration Test — Wajib
Gunakan ketika terdapat interaksi antar component, database, API, atau service.
E2E Test — Untuk Critical Flow
Gunakan untuk memastikan business flow utama berjalan dari awal sampai akhir.
Security Test — Sesuai Risk
Wajib dipertimbangkan untuk fitur yang berkaitan dengan authentication, authorization, input, database, sensitive data, payment, dan akses privileged.
Developer Testing Principle
Unit Test untuk Logic, Integration Test untuk Interaction, E2E Test untuk Business Flow, Security Test untuk Protection.
Keempat testing ini menjadi baseline developer testing standard.
Tidak semua perubahan code harus memiliki keempat jenis test, tetapi developer harus menentukan testing layer yang relevan berdasarkan risiko dan scope perubahan.