Sebuah tim bisa membangun perangkat lunak yang sesuai spesifikasi, tetapi tetap merilis produk yang salah. Sebaliknya, tim juga bisa membangun produk yang tepat di atas kode yang penuh cacat. Kegagalan pertama adalah masalah verifikasi. Kegagalan kedua adalah masalah validasi. Jika keduanya dicampuradukkan, proses quality assurance terlihat sibuk tetapi tidak efektif.
Panduan ini menjelaskan perbedaan verifikasi dan validasi, lalu menunjukkan cara menerapkannya dalam pengujian API menggunakan Apidog.
Apa itu verifikasi?
Verifikasi menjawab pertanyaan:
Apakah kita membangun produk dengan benar?
Dalam praktiknya, verifikasi memeriksa apakah implementasi sesuai dengan spesifikasi, desain, kontrak, dan standar yang sudah disepakati.
Verifikasi tidak menilai apakah spesifikasinya sudah benar. Ia hanya memastikan implementasi mengikuti spesifikasi tersebut.
Contoh aktivitas verifikasi:
- Code review
- Walkthrough desain
- Static analysis dan linting
- Unit test
- Pemeriksaan schema
- Pemeriksaan kontrak API
- Validasi status code, header, dan response body terhadap dokumentasi
Contoh sederhana:
POST /users
Jika spesifikasi mengatakan endpoint ini harus mengembalikan:
201 Created
Location: /users/{id}
maka verifikasi memastikan implementasi benar-benar mengembalikan 201 dan header Location.
Fokus verifikasi adalah artefak vs artefak:
- kode vs desain
- response vs schema
- implementasi vs spesifikasi
- endpoint vs kontrak API
Apa itu validasi?
Validasi menjawab pertanyaan:
Apakah kita membangun produk yang tepat?
Validasi memeriksa apakah perangkat lunak benar-benar menyelesaikan masalah pengguna. Fokusnya bukan lagi sekadar “sesuai dokumen”, tetapi “berguna dalam konteks nyata”.
Contoh aktivitas validasi:
- User acceptance testing
- Beta testing
- Usability testing
- End-to-end testing untuk alur kerja nyata
- Demo ke stakeholder
- Review integrasi oleh developer client
Contoh pada API:
Sebuah endpoint bisa sepenuhnya sesuai OpenAPI specification, tetapi tetap gagal validasi jika:
- model pagination sulit digunakan client
- authentication flow tidak cocok dengan integrasi yang ada
- response tidak menyediakan data yang benar-benar dibutuhkan
- contoh dokumentasi tidak mencerminkan penggunaan nyata
Validasi berfokus pada produk vs kenyataan.
Validasi vs verifikasi: perbedaannya
| Dimensi | Verifikasi | Validasi |
|---|---|---|
| Pertanyaan inti | Apakah kita membangunnya dengan benar? | Apakah kita membangun hal yang benar? |
| Dibandingkan dengan | Spesifikasi, desain, standar | Kebutuhan pengguna, penggunaan dunia nyata |
| Waktu | Berjalan terus selama development | Setelah ada sesuatu yang dapat digunakan |
| Metode umum | Review, static analysis, unit test, schema check | Acceptance test, beta test, end-to-end test, demo |
| Arah | Internal: artefak vs artefak | Eksternal: produk vs kenyataan |
| Menangkap | Bug, penyimpangan spesifikasi, contract drift | Requirement yang salah, UX buruk, workflow tidak cocok |
| Risiko jika dilewati | Kode salah terhadap spesifikasi yang benar | Produk sempurna untuk masalah yang salah |
Keduanya tidak saling menggantikan.
Verifikasi yang kuat tanpa validasi menghasilkan produk yang rapi, tetapi mungkin tidak dibutuhkan. Validasi yang kuat tanpa verifikasi menghasilkan ide yang benar, tetapi implementasinya tidak stabil.
Mnemonic sederhana:
Verifikasi menguji terhadap dokumen.
Validasi menguji terhadap tujuan.
Bagaimana ini terjadi dalam pengujian API
API membuat perbedaan ini lebih jelas karena biasanya memiliki kontrak eksplisit, seperti OpenAPI specification atau schema.
Kontrak tersebut menjadi dasar verifikasi.
Verifikasi API
Verifikasi API berarti memeriksa implementasi terhadap kontrak.
Checklist verifikasi API:
- Apakah setiap endpoint mengembalikan status code yang didokumentasikan?
- Apakah response body cocok dengan schema?
- Apakah nama field dan tipe data sesuai?
- Apakah required parameter benar-benar diwajibkan?
- Apakah error response mengikuti format yang didokumentasikan?
- Apakah header yang diwajibkan selalu dikirim?
Contoh assertion sederhana:
{
"status": 201,
"body": {
"id": "string",
"email": "string",
"created_at": "string"
}
}
Jika schema menyatakan email harus berupa string, maka response seperti ini lulus verifikasi:
{
"id": "usr_123",
"email": "dev@example.com",
"created_at": "2026-05-22T10:00:00Z"
}
Tetapi response ini gagal verifikasi:
{
"id": "usr_123",
"email": null,
"created_at": "2026-05-22T10:00:00Z"
}
Untuk konsistensi status code, lihat panduan tentang kode status HTTP apa yang harus digunakan oleh REST API.
Di lapisan ini, pengujian kontrak API adalah bentuk verifikasi. Tujuannya memastikan API producer tetap memenuhi kontrak yang digunakan API consumer.
Asersi API pada status, schema, header, dan body adalah unit kerja verifikasi.
Validasi API
Validasi API berarti memeriksa apakah API benar-benar membantu client menyelesaikan workflow nyata.
Checklist validasi API:
- Bisakah client login, membuat resource, memperbarui data, lalu menghapusnya tanpa workaround?
- Apakah data yang dikembalikan cukup untuk kebutuhan UI atau sistem client?
- Apakah authentication model cocok dengan integrasi yang ada?
- Apakah error message cukup jelas untuk ditangani client?
- Apakah dokumentasi dan contoh request mencerminkan penggunaan sebenarnya?
Contoh workflow validasi:
1. Register user
2. Login
3. Buat payment method
4. Buat transaksi
5. Cek status transaksi
6. Refund transaksi
7. Pastikan status akhir benar
Schema check pada satu endpoint adalah verifikasi. Workflow multi-step seperti di atas lebih dekat ke validasi karena menguji apakah API bekerja dalam konteks penggunaan nyata.
Untuk memahami lapisan ini, lihat skenario pengujian vs kasus pengujian.
Di mana Apidog cocok
Apidog membantu menjalankan verifikasi dan validasi API dalam satu workspace: desain, dokumentasi, pengujian, dan pelaporan.
Menggunakan Apidog untuk verifikasi
Untuk verifikasi, desain API menjadi sumber kebenaran.
Langkah praktis:
- Definisikan endpoint, parameter, request body, response body, dan status code.
- Buat test berdasarkan schema yang sama.
- Tambahkan assertion untuk:
- status code
- response schema
- required field
- header
- error format
- Jalankan test secara rutin.
- Integrasikan ke CI/CD agar kontrak diuji setiap perubahan kode.
Contoh assertion yang perlu ada untuk endpoint POST /payments:
- status code harus 201
- response harus memiliki payment_id
- payment_id harus string
- amount harus number atau integer sesuai spesifikasi
- currency harus mengikuti format yang disepakati
- error 400 harus mengikuti schema error
Dengan pendekatan ini, verifikasi tidak menggunakan salinan kontrak yang berbeda. Test berjalan terhadap sumber spesifikasi yang sama.
Untuk pipeline otomatis, lihat panduan mengotomatiskan pengujian API di CI/CD.
Menggunakan Apidog untuk validasi
Untuk validasi, gunakan skenario pengujian yang merangkai beberapa endpoint menjadi satu workflow.
Contoh skenario:
1. Register user
2. Login dan simpan token
3. Buat resource baru
4. Ambil resource tersebut
5. Update resource
6. Verifikasi perubahan
7. Hapus resource
8. Pastikan resource tidak bisa diambil lagi
Skenario seperti ini membantu menjawab pertanyaan validasi:
- Apakah API bisa digunakan seperti client sungguhan?
- Apakah urutan endpoint masuk akal?
- Apakah data dari satu step cukup untuk step berikutnya?
- Apakah workflow berhenti karena desain API yang tidak praktis?
Pelaporan per langkah juga membantu membedakan jenis kegagalan:
- Kegagalan verifikasi: schema mismatch, status code salah, header hilang.
- Kegagalan validasi: workflow multi-step tidak bisa diselesaikan, data tidak cukup, authentication flow tidak cocok.
Unduh Apidog untuk menyiapkan verifikasi tingkat kontrak dan validasi tingkat workflow pada API Anda.
Contoh dunia nyata
Bayangkan tim sedang membangun API pembayaran.
Spesifikasi menyatakan:
POST /payments
Request:
{
"amount": 10.5,
"currency": "USD"
}
Response sukses:
201 Created
{
"payment_id": "pay_123"
}
Response gagal untuk mata uang tidak valid:
400 Bad Request
{
"error": "INVALID_CURRENCY"
}
Dari sisi verifikasi
Verifikasi bisa lulus sepenuhnya:
- handler cocok dengan desain
- status code
201dikembalikan untuk request valid - response memiliki
payment_id - currency tidak valid menghasilkan
400 - error body cocok dengan schema
- contract test lulus
Dengan ukuran verifikasi, API ini benar.
Dari sisi validasi
Client pertama mulai mengintegrasikan API tersebut. Mereka menemukan bahwa amount memakai floating-point number.
Masalahnya muncul saat nilai seperti ini diproses:
0.1 + 0.2
Hasilnya bukan angka desimal yang ideal untuk transaksi uang:
0.30000000000000004
Implementasi tidak melanggar spesifikasi. Spesifikasi memang mengatakan amount adalah angka. Jadi verifikasi tidak akan menangkap masalah ini.
Masalahnya ada pada desain kontrak. Untuk uang, amount seharusnya dikirim sebagai unit minor integer, misalnya:
{
"amount": 1050,
"currency": "USD"
}
Artinya 1050 merepresentasikan 10.50 USD.
Ini adalah temuan validasi. Solusinya bukan sekadar memperbaiki kode agar sesuai spesifikasi. Solusinya adalah memperbaiki spesifikasi karena kontraknya salah.
Daftar periksa praktis untuk rilis API
Gunakan dua checklist berikut sebelum rilis.
Verifikasi: uji terhadap spesifikasi
Pastikan:
- Semua endpoint mengembalikan status code yang didokumentasikan.
- Semua response sesuai schema.
- Required parameter benar-benar diwajibkan.
- Request body divalidasi sesuai kontrak.
- Error response mengikuti format dokumentasi.
- Header yang diperlukan tersedia.
- Contract test lulus untuk endpoint yang digunakan consumer.
- Test berjalan di CI/CD.
Contoh minimal assertion:
GET /users/{id}
- status = 200
- body.id = string
- body.email = string
- body.created_at = ISO datetime
- jika user tidak ditemukan, status = 404
- error body mengikuti schema error
Validasi: uji terhadap tujuan
Pastikan:
- Client baru bisa menyelesaikan workflow inti dari awal sampai akhir.
- Data yang dikembalikan cukup untuk kebutuhan client.
- Authentication flow cocok dengan pola integrasi nyata.
- Error message bisa ditangani dengan jelas.
- Dokumentasi dan contoh request sesuai penggunaan aktual.
- Stakeholder mengonfirmasi API memecahkan masalah yang dimaksud.
Contoh workflow validasi:
User baru:
1. Membuat akun
2. Login
3. Membuat resource
4. Membaca resource
5. Mengubah resource
6. Menghapus resource
Ekspektasi:
- Tidak ada step yang membutuhkan workaround manual
- Token bisa dipakai antar-request
- Response menyediakan data yang dibutuhkan step berikutnya
- Error dapat dipahami dan ditangani client
Jika hanya checklist verifikasi yang lulus, Anda memiliki implementasi yang benar dari desain yang mungkin salah.
Jika hanya checklist validasi yang lulus, Anda memiliki ide yang tepat tetapi implementasinya belum stabil.
Rilis yang sehat membutuhkan keduanya.
Pertanyaan yang sering diajukan
Apakah verifikasi atau validasi dilakukan terlebih dahulu?
Verifikasi dimulai lebih awal dan berjalan terus selama development. Begitu ada kode atau kontrak, Anda bisa memeriksanya terhadap spesifikasi.
Validasi biasanya dilakukan setelah ada produk atau workflow yang bisa digunakan untuk diuji terhadap kebutuhan nyata.
Apakah pengujian sama dengan validasi?
Tidak.
Pengujian mencakup verifikasi dan validasi.
Contoh verifikasi:
- unit test
- schema check
- contract test
- status code assertion
Contoh validasi:
- user acceptance test
- beta test
- end-to-end workflow test
- demo stakeholder
Dapatkah software lulus verifikasi tetapi gagal validasi?
Ya.
Ini sering terjadi ketika implementasi cocok dengan spesifikasi, tetapi spesifikasinya menyelesaikan masalah yang salah.
Produk tersebut terverifikasi, tetapi tidak tervalidasi.
Bagaimana ini berlaku untuk pengujian kontrak API?
Pengujian kontrak API adalah verifikasi.
Ia memastikan API tetap memenuhi perjanjian yang didokumentasikan dengan consumer. Namun, contract testing tidak membuktikan bahwa kontrak tersebut adalah kontrak yang tepat. Itu tugas validasi.
Mana yang menemukan lebih banyak bug?
Verifikasi biasanya menemukan lebih banyak cacat kecil karena berjalan lebih sering dan lebih awal.
Validasi biasanya menemukan lebih sedikit masalah, tetapi dampaknya lebih besar karena masalah validasi sering berarti requirement, desain, atau workflow salah.
Bisakah otomatisasi mencakup keduanya?
Otomatisasi sangat cocok untuk verifikasi:
- schema check
- contract test
- status code assertion
- header assertion
- CI/CD test run
Validasi lebih sulit diotomatisasi sepenuhnya karena membutuhkan penilaian terhadap kebutuhan dunia nyata. Namun, end-to-end workflow test tetap bisa mengotomatisasi sebagian besar proses validasi teknis.
Top comments (0)