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.


 

 

Last modified: Wednesday, 3 September 2025, 1:13 AM