2.1 Tipe dan Proses Pengujian
Pengujian (testing) memegang peranan penting dalam menentukan kesuksesan sebuah produk digital, khususnya dalam proses pengembangan perangkat lunak. Prinsip dasar pengujian perangkat lunak bukan hanya sekadar untuk mencari bug atau cacat pada produk, tetapi juga merupakan sebuah proses validasi untuk menjamin hasil dari produk yang dikembangkan memenuhi standar kualitas, selaras dengan kebutuhan bisnis dan pengguna, serta dapat berjalan dengan baik di berbagai kondisi.
Di sinilah pentingnya memahami berbagai tipe dan proses pengujian, karena tidak semua pengujian memiliki tujuan atau pendekatan yang sama. Sebagai contoh, pengujian fungsional bertujuan untuk memastikan fitur berjalan sesuai dengan kebutuhan yang sudah ditentukan, sedangkan pengujian non-fungsional, seperti performance testing, berfokus pada bagaimana sistem bekerja ketika dihadapkan pada beban yang berat.
Di dunia industri, baik perusahaan besar seperti Tokopedia, Gojek, Traveloka, maupun startup kecil, menerapkan berbagai jenis pengujian yang disesuaikan dengan kebutuhan produk mereka. Pada aplikasi e-commerce, biasanya pengujian dilakukan terhadap sistem pembayaran dan proses checkout. Sedangkan pada bidang fintech, aspek keamanan dan akurasi data transaksi menjadi prioritas utama.
Pemahaman yang baik mengenai tipe-tipe pengujian, seperti unit testing, integration testing, system testing, acceptance testing, dan lainnya, beserta proses pengujianmulai dari tahap perencanaan hingga eksekusi dan pelaporan, akan membantu seorang QA Engineer, baik yang mengerjakan secara manual maupun otomatis, untuk merancang strategi pengujian yang tepat, efisien, dan berdampak langsung pada kualitas produk.
Selain itu, dalam kolaborasi lintas fungsi, pemahaman tentang proses pengujian dapat mempermudah komunikasi antara QA, developer, dan product owner. QA tidak hanya berperan melakukan pengujian, tetapi juga menjadi mitra strategis dalam menjaga kualitas produk digital.
Untuk membuka pembelajaran pada topik ini, berikut beberapa pertanyaan awal yang dapat membantu Digiers melihat gambaran besarnya.
Pernahkah Digiers menggunakan sebuah aplikasi yang tiba-tiba crash saat digunakan? Menurut Digiers, apakah itu bisa dicegah dengan proses testing yang tepat?
Dalam satu produk digital, fitur mana yang menurut Digiers paling penting untuk diuji terlebih dahulu? Mengapa?
Selain itu, sebelum kita masuk ke materi, yuk kenali dulu apa saja yang akan Digiers capai di akhir pembelajaran topik ini. Memahami tujuan pembelajaran membantu proses belajar menjadi lebih fokus dan terarah.
2.1.1 Jenis-jenis Pengujian: Functional dan Non Functional
Dalam Quality Assurance (QA), pengujian adalah proses penting untuk memastikan perangkat lunak yang dikembangkan sesuai dengan harapan pengguna dan memenuhi persyaratan yang telah ditetapkan. Namun, pengujian itu tidak selalu sama, ada berbagai jenis pengujian yang berbeda dalam cara melakukannya, fokus, dan tujuan, tergantung pada bagian aplikasi yang akan diuji.
Secara umum, jenis pengujian dalam QA dapat dibagi menjadi dua kelompok utama:
Gambar 2.1.1 Jenis Pengujian
1. Functional Testing
Functional testing adalah jenis pengujian yang berfokus pada pemeriksaan fungsi atau fitur dari sebuah perangkat lunak. Tujuannya adalah untuk memastikan bahwa setiap fitur aplikasi berjalan sesuai dengan kebutuhan atau spesifikasi bisnis yang telah ditetapkan. Pengujian ini tidak mempertimbangkan bagaimana fitur diimplementasikan secara teknis, melainkan berfokus pada apakah fitur tersebut memenuhi harapan pengguna.
Contoh functional testing:
● Apakah user bisa Login (masuk) ke dalam akun ketika username dan password valid?
● Apakah sistem menampilkan pesan error saat field input dikosongkan?
● Apakah pengguna dapat menambahkan produk ke dalam keranjang?
Tools: Selenium, Cypress, Postman, TestRail, Xray
Functional testing dapat dilakukan dengan cara:
● Manual yaitu metode pengujian perangkat lunak di mana seorang penguji melakukan proses pengujian secara langsung (manual) tanpa menggunakan bantuan alat atau skrip otomatis.
● Automation yaitu metode pengujian yang dilakukan dengan membuat sebuah skrip yang mampu berjalan secara otomatis tanpa adanya intervensi dari tester secara langsung.
Functional testing sendiri terdiri dari berbagai jenis, seperti:
● Unit Testing adalah pengujian terhadap bagian paling kecil dari aplikasi, seperti fungsi atau metode. Tujuannya untuk memastikan bahwa bagian tersebut bekerja sesuai dengan yang diharapkan.
Jenis unit testing:
○ Gorilla Testing: Menguji satu modul atau komponen secara intensif dan berulang-ulang.
● Integration Testing, dilakukan untuk menguji bagaimana beberapa unit atau modul yang sudah diuji secara terpisah dapat bekerja bersama dengan baik saat digabungkan.
Jenis integration testing:
○ Component Integration Testing: Menguji satu modul atau komponen secara intensif.
○ System Integration Testing: Menguji interaksi antar subsistem atau lapisan dalam sebuah aplikasi, seperti komunikasi antara antarmuka pengguna, logika bisnis, dan basis data.
○ End-to-end Integration Testing: Menguji gabungan beberapa modul atau komponen, misalnya, fitur login-logout, fitur checkout barang, atau fitur pembayaran, untuk membedakannya dari end-to-end testing pada level system testing.
● System Testing, menguji keseluruhan sistem atau aplikasi secara menyeluruh sebagai satu kesatuan. Hal ini bertujuan memastikan semua fitur di dalam aplikasi berjalan sesuai dengan spesifikasi yang sudah ditetapkan.
Jenis system testing:
○ End-to-End Testing: Pengujian dari beberapa alur yang melibatkan banyak modul dan komponen sehingga menjadi satu kesatuan sebuah fitur, seperti fitur pembelian barang dari user login, checkout, hingga payment.
○ Smoke Testing: Pengujian awal yang dilakukan untuk mengecek apakah fungsi-fungsi utama aplikasi berjalan.
○ Sanity Testing: Pengujian yang dilakukan untuk memastikan bahwa fungsi atau bagian kecil dari sistem masih berjalan dengan baik setelah ada perubahan kecil, seperti perbaikan bug atau pembaruan kode.
○ Monkey Testing: Pengujian acak pada suatu aplikasi tanpa menggunakan alur skenario yang pasti.
● Acceptance Testing adalah pengujian akhir yang dilakukan untuk memastikan aplikasi sudah memenuhi kebutuhan dan harapan pengguna atau pemilik produk. Biasanya, pengujian ini dilakukan sebelum aplikasi resmi dirilis ke lingkungan produksi.
Jenis acceptance testing:
○ Alpha Testing: Pengujian internal yang dilakukan oleh tim pengembang atau tim QA sebelum rilis ke publik.
○ Beta Testing: Pengujian yang dilakukan oleh beberapa pengguna sesungguhnya yang dipilih berdasarkan kriteria tertentu untuk mendapatkan umpan balik sebelum aplikasi dirilis secara resmi.
○ User Acceptance Testing: Pengujian yang berfokus pada verifikasi langsung oleh pengguna bahwa aplikasi memenuhi kebutuhan mereka.
● Regression Testing adalah pengujian yang dilakukan setelah perubahan kode (penambahan fitur, perbaikan bug, refactor) untuk memastikan bahwa fitur lama tidak rusak akibat perubahan baru. Pengujian ini sering menjadi bagian dari automated test suite dalam CI/CD pipeline.
Contoh:
● Developer menambahkan fitur diskon, maka QA mengecek bahwa proses checkout dan pembayaran tetap berfungsi
● Bug diperbaiki pada halaman profil, maka QA memastikan fitur edit password masih berfungsi
Tools: CI/CD pipelines, Jenkins, GitLab CI, Selenium, Robot Framework
2. Non-Functional Testing
Non-Functional testing adalah proses untuk menilai aspek-aspek yang tidak berkaitan langsung dengan fitur utama dari perangkat lunak, melainkan lebih kepada kualitas performa, keamanan, stabilitas, dan kemudahan penggunaan. Tujuannya adalah memastikan bahwa perangkat lunak bekerja optimal di berbagai kondisi dan memenuhi ekspektasi pengguna terkait kualitas layanan.
Contoh non-functional testing:
● Apakah situs tetap berjalan lancar saat diakses oleh banyak pengguna secara bersamaan?
● Seberapa cepat halaman bisa dimuat?
● Apakah tampilan dan fungsinya konsisten di semua perangkat?
● Apakah informasi pengguna disimpan dan diproses dengan aman?
Berikut adalah beberapa jenis non-functional testing yang umum digunakan:
● Security Testing, pengujian yang dilakukan untuk mengevaluasi seberapa aman suatu aplikasi dari potensi ancaman eksternal maupun internal. Tujuan utamanya adalah mengidentifikasi kerentanan (vulnerability) dan memastikan data sensitif terlindungi.
Jenis security testing:
○ Penetration Testing: Meniru serangan nyata oleh peretas untuk menemukan celah keamanan.
○ Fuzz Testing: Mengirimkan input data yang acak atau rusak untuk menguji validasi input.
○ Access Control Testing: Memastikan akses terhadap data sensitif hanya diberikan kepada pengguna yang berwenang.
● Usability Testing, pengujian yang dilakukan untuk mengevaluasi antarmuka pengguna (UI) dan pengalaman pengguna secara keseluruhan, biasanya dilakukan dengan melibatkan pengguna nyata. Fokusnya adalah kemudahan penggunaan, efisiensi, dan kepuasan pengguna.
Jenis usability testing:
○ Exploratory testing: Tes yang tidak menggunakan skrip atau test case formal, melainkan berdasarkan eksplorasi bebas oleh tester.
○ UI testing: Mengukur keakuratan dan konsistensi elemen visual antarmuka pengguna.
● Compatibility Testing, pengujian yang dilakukan untuk memastikan bahwa aplikasi dapat berfungsi dengan baik di berbagai lingkungan, seperti perangkat keras, sistem operasi, browser, dan perangkat lainnya.
Jenis compatibility testing:
○ Cross browser testing: Menguji kompatibilitas website pada berbagai browser dan versi berbeda.
○ Cross platform testing: Memastikan aplikasi berjalan lancar di berbagai sistem operasi dan perangkat.
● Performance Testing, pengujian yang bertujuan untuk mengukur respons dan kestabilan sistem saat digunakan dalam berbagai beban kerja. Fokusnya adalah menemukan hambatan dan memastikan sistem tetap stabil di kondisi nyata.
Contoh:
● Website penjualan tiket konser diuji dengan 100.000 pengunjung serentak
● Aplikasi keuangan diuji dengan ratusan transaksi dalam satu menit
Tools: JMeter, K6, Gatling, Locust, BlazeMeter
Jenis performance testing:
○ Volume testing: Mengukur performa saat sistem harus menangani volume data yang besar.
○ Scalability testing: Mengukur kemampuan aplikasi untuk bertumbuh dan beradaptasi terhadap peningkatan beban.
○ Endurance testing: Mengukur daya tahan sistem dalam menangani beban konstan dalam waktu panjang. Beban yang diberikan tersebut biasanya sama atau di atas threshold.
○ Recovery testing: Menguji kemampuan pemulihan sistem.
○ Load testing: Menguji coba performa suatu aplikasi dengan memberikan beban kerja pada tingkat ambang batas (threshold).
○ Stress testing: Mengukur batas maksimum sistem dalam menghadapi beban ekstrem.
○ Spike testing: Menguji performa sistem dengan meningkatkan atau menurunkan beban sistem secara tiba-tiba dan drastis untuk melihat bagaimana sistem merespons perubahan beban yang ekstrem.
Ilustrasi Grafik Perbandingan antara Load Test, Stress Test dan Spike Test
Gambar 2.1.2 Grafik Perbandingan antara Load Test, Stress Test dan Spike Test
Keterangan:
● Max Design Capacity (warna merah): threshold yang menunjukkan kapasitas maksimum sistem
● Normal Expected Utilisation (warna hijau muda): baseline atau rata-rata penggunaan normal.
1) Load Test
● Ditunjukkan pada bagian garis hijau tua yang mewakili beban pada periode tersibuk, yaitu waktu ketika sistem dipakai oleh banyak pengguna secara bersamaan.
● Tujuan: Menguji performa sistem pada beban tinggi (threshold) namun tetap di bawah atau sama dengan kapasitas maksimum.
● Threshold: Berhenti di atau sebelum menyentuh kapasitas maksimum.
2) Spike Test
● Lonjakan tajam berwarna garis oranye yang melebihi beban normal hingga mendekati atau sedikit menyentuh kapasitas maksimum.
● Tujuan: Menguji reaksi sistem terhadap lonjakan mendadak (misalnya trafik mendadak tinggi).
● Threshold: Bisa mendekati atau sedikit melebihi kapasitas maksimum untuk melihat stabilitas.
3) Stress Test
● Ditunjukkan pada bagian garis miring hitam yang terus naik melewati kapasitas maksimum.
● Tujuan: Menemukan batas toleransi (breaking point) di atas threshold maksimum.
● Threshold: Sengaja dilampaui untuk melihat kegagalan.
Memahami perbedaan antara functional testing dan non functional testing sangat penting bagi QA engineer, agar mampu merancang strategi pengujian yang tepat, efektif, dan berdampak langsung pada kualitas produk perangkat lunak yang dikembangkan. Berikut ini adalah tabel yang dapat membedakan masing-masing jenis pengujian.
Aspek |
Functional Testing |
Non Functional Testing |
Fokus Utama |
Verifikasi fungsi aplikasi berjalan sesuai requirement |
Evaluasi dari sisi performa, keamanan, dan pengalaman pengguna |
Waktu Pelaksanaan |
Seluruh fase pengembangan, baik dari awal hingga rilis. Namun, di fase awal biasanya hanya bisa dilakukan unit testing |
Umumnya dilakukan setelah functional testing selesai dilakukan atau ketika fungsi utama telah stabil, biasanya di tahap akhir pengembangan atau menjelang rilis |
Tujuan Utama |
Memastikan semua fungsi sesuai spesifikasi bisnis |
Memastikan sistem dapat berjalan secara optimal |
Pengujian |
Bisa dilakukan secara manual atau otomatis tergantung pada kompleksitas skenario |
Lebih sering dilakukan secara otomatis untuk mengukur performa dan aspek lain |
Catatan Penting |
Mengacu pada dokumen resmi (SRS, user stories) |
Bisa mengacu pada standar kualitas yang disepakati |
Tabel 2.1.1 Perbedaan Functional dan Non Functional Testing
⬛ Studi Kasus: Implementasi Jenis Pengujian di Berbagai Industri
Kasus 1: Functional Testing di E-Commerce
Seorang pengguna mencari produk "Samsung A53" dan menambahkannya ke keranjang. QA melakukan functional testing untuk memastikan bahwa:
● Produk tampil dalam hasil pencarian
● Tombol “Tambah ke Keranjang” berfungsi dengan baik
● Total harga di keranjang otomatis diperbarui sesuai harga produk
Jika fungsi-fungsi ini gagal, pengguna bisa merasa kecewa dan membatalkan transaksi. Functional testing memastikan alur dasar tetap berjalan sesuai harapan.
Kasus 2: Regression Testing di Fintech
Fitur “Tarik Tunai Tanpa Kartu (Cardless)” baru saja ditambahkan. Setelah integrasi fitur tersebut, QA melakukan regression testing untuk memverifikasi bahwa:
● Fitur lama seperti “Transfer Antar Bank” tetap berfungsi normal
● Tidak ada error saat proses login atau logout
● UI tidak mengalami perubahan tak terduga
Regression testing sangat penting untuk mencegah bug tersembunyi yang bisa menciptakan masalah besar jika dilewatkan, terutama di aplikasi keuangan.
Kasus 3: Performance Testing di Situs Penjualan Tiket
Situs penjualan tiket konser akan dibuka pada pukul 10 pagi. QA menjalankan performance testing dengan simulasi 100.000 pengguna yang mengakses sistem secara bersamaan.
Tanpa performance testing, sistem bisa down saat momen puncak ini, yang dapat menyebabkan kerugian besar, baik dari sisi bisnis maupun reputasi.