Memahami Acceptance Scenario: Menghubungkan Ekspektasi dan Pengujian dengan Cucumber


Dalam pengembangan perangkat lunak, menghasilkan produk yang memenuhi ekspektasi klien bergantung pada komunikasi yang jelas, ekspektasi yang terdefinisikan dengan baik, serta pengujian yang efektif. Software Development Life Cycle (SDLC) menyediakan pendekatan terstruktur melalui fase-fase seperti perencanaan, analisis kebutuhan, desain, implementasi, pengujian, deployment, dan pemeliharaan. Sementara itu, metodologi Agile memperkenalkan fleksibilitas dan progres iteratif, memungkinkan tim untuk beradaptasi dengan cepat terhadap perubahan dan terus menerus memberikan nilai.
Pada inti dari SDLC dan Agile terdapat fase Requirement Analysis, di mana pengembang, QA engineer, dan klien berkolaborasi untuk mendefinisikan apa yang harus dicapai oleh perangkat lunak yang akan dikembangkan. Kolaborasi ini penting untuk menghilangkan kesenjangan pemahaman sehingga memastikan semua orang memiliki perspektif yang sama. Pusat dari pemahaman ini adalah konsep Acceptance Scenario, yang akan kita eksplorasi secara mendalam.
Acceptance Scenario: Jembatan Antara Kebutuhan Pengguna dan Pengujian
Acceptance Scenario adalah deskripsi rinci bagaimana sistem harus berperilaku dalam situasi tertentu dari perspektif pengguna. Acceptance Scenario berperan menggambarkan kebutuhan, memastikan bahwa pihak developer, tester, dan klien selaras soal hasil yang diharapkan.
Acceptance Scenario:
Menggambarkan Perilaku: Menguraikan fungsionalitas berdasarkan interaksi pengguna.
Memberikan Kejelasan: Membantu menghilangkan ambiguitas menyangkut kebutuhan pengguna yang sebenarnya.
Memandu Pengujian: Berfungsi sebagai dasar untuk membuat case dan skenario pengujian perangkat lunak.
Pentingnya Acceptance Scenario
Menyelaraskan Ekspektasi: Memastikan semua stakeholder memiliki visi yang sama tentang fitur yang diinginkan.
Memfasilitasi Komunikasi: Menjembatani kesenjangan antara anggota tim teknis dan non-teknis.
Meningkatkan Kualitas: Mendorong pengujian yang lebih menyeluruh dan terfokus, sehingga mengurangi cacat perangkat lunak.
Mengimplementasikan Acceptance Scenario dengan Given-When-Then dan Feature Files
Untuk memformalkan Acceptance Scenario, kita menggunakan metode Given-When-Then yang ditulis sebagai Feature Files (berekstensi .feature
), dengan memanfaatkan bahasa Gherkin. Pendekatan ini adalah inti dari Behavior-Driven Development (BDD).
Memahami Given-When-Then dan Feature Files
Format Given-When-Then
Format Given-When-Then adalah cara yang sederhana dan terstruktur untuk menuliskan skenario pengujian:
Given: Menggambarkan konteks awal atau prasyarat sebelum tindakan dilakukan.
When: Menentukan tindakan atau peristiwa yang memicu skenario.
Then: Merinci hasil atau konsekuensi yang diharapkan setelah tindakan.
Format ini membantu memecah pendefinisian kebutuhan menjadi pernyataan yang jelas dan dapat diuji, yang mudah dipahami oleh semua stakeholder, termasuk anggota tim non-teknis.
Feature Files dan Bahasa Gherkin
Feature Files adalah file teks dengan ekstensi .feature
yang berisi satu atau lebih skenario yang ditulis dalam format Given-When-Then menggunakan bahasa Gherkin. Gherkin adalah bahasa “domain specific” yang dapat dipahami oleh anggota tim non-teknis yang memungkinkan Anda mendeskripsikan perilaku perangkat lunak tanpa harus menjadi terlalu teknis dan terjebak mendeskripsikan implementasi detail fungsionalitas yang diinginkan.
Karakteristik utama dari Gherkin dan Feature Files:
Mudah Dibaca Manusia: Ditulis dalam bahasa sehari-hari (atau bahasa alami lainnya), membuatnya dapat diakses oleh stakeholder non-teknis.
Terstruktur: Mengikuti sintaks dan struktur tertentu, yang memungkinkan tool seperti Cucumber untuk menganalisis dan menjalankannya.
Spesifikasi yang Dapat Dieksekusi: Berfungsi baik sebagai dokumentasi maupun sebagai tes yang dapat dijalankan untuk memvalidasi perilaku perangkat lunak.
Contoh Given-When-Then yang Mudah Dipahami
Mari kita pertimbangkan skenario sederhana di mana seorang pengguna ingin login ke dalam aplikasi.
Contoh:
Feature: User Login
Scenario: Successful login with valid credentials
Given the user is on the login page
When the user enters a valid username and password
And clicks the login button
Then the user should be redirected to the dashboard
And a welcome message should be displayed
Penjelasan:
Feature: Menggambarkan fungsionalitas yang diuji—dalam hal ini, "User Login".
Scenario: Mewakili situasi atau kasus penggunaan tertentu.
Given: Menetapkan keadaan awal—pengguna berada di halaman login.
When: Menentukan tindakan—pengguna memasukkan kredensial valid dan klik login.
Then: Menggambarkan hasil yang diharapkan—pengguna diarahkan ke dashboard, dan pesan selamat datang ditampilkan.
Dengan menulis skenario dengan cara ini, semua orang yang terlibat dalam proyek dapat memahami apa yang diharapkan, dan pengembang dapat mengimplementasikan fungsionalitas untuk memenuhi spesifikasi ini.
Implementasi Praktis Menggunakan Cucumber
Cucumber adalah alat pengujian yang mendukung BDD dengan menjalankan tes otomatis yang ditulis dalam bahasa sehari-hari. Berikut adalah cara Anda dapat mengimplementasikan Acceptance Scenario menggunakan Cucumber.
Langkah 1: Definisikan Acceptance Scenario
Scenario: Pengguna berhasil login dengan kredensial yang valid.
Langkah 2: Tulis Feature File
Buat file bernama login.feature
:
Feature: User Login
Scenario: Successful login with valid credentials
Given the user is on the login page
When the user enters a valid username and password
And clicks the login button
Then the user should be redirected to the dashboard
And a welcome message should be displayed
Langkah 3: Siapkan Project
Kita akan menggunakan JavaScript dengan Node.js dan Cucumber.js.
Instal Dependensi
npm init -y
npm install @cucumber/cucumber --save-dev
Langkah 4: Tulis Step Definitions
Buat folder features/step_definitions
dan tambahkan file login.steps.js
:
// features/step_definitions/login.steps.js
const { Given, When, Then } = require('@cucumber/cucumber');
const assert = require('assert');
let currentPage;
let user;
Given('the user is on the login page', function () {
currentPage = 'login';
});
When('the user enters a valid username and password', function () {
user = { username: 'testuser', password: 'password123' };
this.enteredUsername = user.username;
this.enteredPassword = user.password;
});
When('clicks the login button', function () {
if (
this.enteredUsername === 'testuser' &&
this.enteredPassword === 'password123'
) {
currentPage = 'dashboard';
this.welcomeMessage = `Welcome, ${this.enteredUsername}!`;
} else {
currentPage = 'login';
this.errorMessage = 'Invalid credentials';
}
});
Then('the user should be redirected to the dashboard', function () {
assert.strictEqual(currentPage, 'dashboard');
});
Then('a welcome message should be displayed', function () {
assert.strictEqual(this.welcomeMessage, `Welcome, ${this.enteredUsername}!`);
});
Langkah 5: Konfigurasi Cucumber
Buat file konfigurasi cucumber.js
:
// cucumber.js
module.exports = {
default: `--publish-quiet --require features/step_definitions/*.js`,
};
Langkah 6: Jalankan Tes
Eksekusi tes menggunakan CLI Cucumber:
npx cucumber-js
Langkah 7: Tinjau Hasil Tes
Anda akan melihat output yang menunjukkan bahwa semua langkah telah berhasil:
1 scenario (1 passed)
5 steps (5 passed)
Kesimpulan
Acceptance Scenario adalah alat penting untuk memastikan bahwa fitur perangkat lunak memenuhi kebutuhan dan ekspektasi semua stakeholder. Dengan memanfaatkan format Given-When-Then dan Feature Files dengan bahasa Gherkin, tim dapat membuat persyaratan yang jelas dan dapat diuji yang menjembatani kesenjangan antara klien, pengembang, dan tester.
Mengimplementasikan skenario ini dengan alat seperti Cucumber memungkinkan pengujian otomatis, meningkatkan efisiensi dan kualitas perangkat lunak. Praktik ini tidak hanya memperbaiki proses pengembangan tetapi juga mendorong kolaborasi dan transparansi.
Langkah Selanjutnya
Mulai Menulis Acceptance Scenario: Berkolaborasi dengan tim Anda untuk mendefinisikan skenario untuk fitur yang akan datang.
Adopsi Format Given-When-Then: Gunakan struktur ini untuk memperjelas persyaratan.
Manfaatkan Feature Files: Dokumentasikan skenario dengan cara yang dapat dibaca dan dieksekusi.
Integrasikan Cucumber untuk Pengujian: Otomatiskan tes penerimaan Anda untuk memastikan validasi yang berkesinambungan.
Dengan berfokus pada Acceptance Scenario, Anda meningkatkan komunikasi, mengurangi kesalahpahaman, dan menghasilkan perangkat lunak yang benar-benar memenuhi kebutuhan pengguna.
Referensi
Dokumentasi Cucumber: https://cucumber.io/docs
Panduan Bahasa Gherkin: https://cucumber.io/docs/gherkin/
Pengantar Behavior-Driven Development: https://dannorth.net/introducing-bdd
Manifesto Agile: http://agilemanifesto.org
Catatan: Contoh kode disederhanakan untuk tujuan demonstrasi. Dalam aplikasi dunia nyata, Anda akan berinteraksi dengan halaman web sebenarnya menggunakan alat seperti Selenium WebDriver atau Cypress.
Subscribe to my newsletter
Read articles from Eklemis Santo Ndun directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Eklemis Santo Ndun
Eklemis Santo Ndun
Hi there, I'm a developer from Indonesia. I love learning new things especially technology. Now, not only do i love learning new things, but also to write about what i've learnt. In regular work day, i deal a lot with Images files, SQL Server, MS Access and Excel as well. To make my daily target reached with high quality and shorter time, i automate many of my task with help of Python. In some months where my regular task is not much, i spent time develop web apps to automate my colleagues regular task as well. Out of regular work time, i spend time learning and creating project with Javascript (and Html and CSS), learn UI/UX design with Figma, code Python scripts(Machine Learning), and Rust programming language. To help better remembering all things i've learnt, now i learn to write about them as well.