Tips & Guide

Memahami Software Testing (Unit Test, Integration Test) – Apa Perlu dan Dampaknya?

[Gambar: edumuch.com]
Mungkin Anda pernah mendengar istilah TDD (Test Driven Development) atau mungkin istilah-istilah seperti :

  1. Unit Tests
  2. Integration Tests
  3. Regression Tests
  4. Code Coverages

Semua yang saya sebutkan di atas tadi adalah metode testing yang saat ini banyak dipakai dalam pengembangan sebuah aplikasi.  Dan tulisan kali ini akan membahas tentang software testing.

Ketika kita mengimplementasikan TDD, alur yang benar adalah adalah :

Test -> Code -> Test

Saya pribadi bukan penganut TDD yang baik, tapi saya penganut software test.  Saya setuju dengan konsep software testing, karena sudah merasakan manfaat dari test ini.

Software testing yang dimaksud di sini bukan yang dilakukan oleh QA (Quality Assurance) yang melakukan test manual berdasarkan skenario yang sudah disiapkan -saya menyebutnya, “test klak klik”.  Yang dimaksud di tulisan ini adalah metode testing software yang dijalankan secara otomatis dengan menggunakan script atau dengan continuous integration semacam Jenkins.

Saya akan fokus di tiga hal, yaitu:

  1. Unit Test
  2. Integration Test
  3. Code Coverage

Catatan: Ruang lingkup di tulisan ini adalah untuk aplikasi berbasis web, yang saat ini semakin lama semakin kompleks yaitu bisa saja untuk :

  1. API (REST) Development
  2. Internal Service Development (microservice)
  3. Data Logic (manipulasi data yang berhubungan langsung dengan database)

Contoh kode-kode dalam tulisan ini adalah dalam bahasa program Python.

Unit Tests

Test di sini ditujukan untuk bagian-bagian terkecil dari sebuah sistem / aplikasi.  Contohnya misal untuk sebuah library atau helper. Test ini sangat cocok diimplementasikan jika kode library / helper kita tidak memiliki dependensi terhadap service di luar sistem aplikasi. Misal, kita memiliki sebuah helper untuk melakukan validasi terhadap sebuah string, dengan ekspektasi: melakukan trigger exception. Jika ternyata value dari variable string tersebut kosong, maka testnya bisa dibuat seperti ini:

def test_string_should_not_be_empty(self):

    with self.assertRaises(ValidationError):
       string_should_not_be_empty("")

Penjelasan kode di atas adalah Unit Test yang dibuat untuk melakukan test terhadap sebuah fungsi yang sudah di buat sebelumnya, dengan ekspektasi fungsi tersebut seharusnya akan men-trigger sebuah exception ValidationError jika kita memasukkan value string kosong (empty string).

Ok, ini mudah baik dari segi logic & test ekspektasinya.  Sekarang bagaimana kalau kita ingin melakukan test untuk semacam Internal Queue? Queue di sini bukan queue yang berhubungan dengan RabbitMQ, Redis atau semacamnya. Queue yang saya jadikan contoh di sini adalah fitur queue yang ada di framework Python yang bernama Tornado.  Queue di sini lebih ke arah design pattern Observer, hanya saja observer pattern di sini didesain untuk menangani aktivitas async (non blocking).


Jangan lupa ikuti kami di Twitter untuk mendapatkan update terbaru dari @LabanaID