11 praktik terbaik pengujian unit

Seorang pria bekerja pada buku catatan dengan 2 monitor untuk membantunya.

Penyusun

Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Apa saja praktik terbaik pengujian unit?

Praktik terbaik pengujian unit mendukung penulisan tes unit yang beroperasi secara independen dalam isolasi dan menunjukkan sifat konsistensi deterministik.

Tes unit yang baik mencerminkan pengembangan berbasis pengujian (TDD) dan menggunakan objek tiruan dan stub untuk membantu isolasi. Praktik terbaik juga mendukung integrasi berkelanjutan dan pengujian otomatis.

Apa yang dimaksud dengan pengujian unit?

Di antara berbagai jenis pengujian, pengujian unit memberikan pandangan yang hampir mikroskopis dari sebuah unit kode, yang merupakan komponen individual terkecil yang dievaluasi melalui pengujian perangkat lunak. Bahan utama yang diperlukan untuk pengujian unit yang tepat adalah isolasi sehingga fungsi unit dapat dievaluasi secara efektif.

Manfaat pengujian unit termasuk percepatan proses pengembangan perangkat lunak melalui otomatisasi dan penciptaan penghematan biaya tenaga kerja dengan memasukkan debugging awal dalam siklus hidup pengembangan perangkat lunak (SDLC). Upaya debugging tersebut mendukung penyimpanan setiap perubahan kode yang dibuat selama pengembangan dan meningkatkan kualitas kode secara keseluruhan.

Kerangka kerja pengujian unit membantu penguji menjalankan pengujian pada unit individu dan membangun basis kode keseluruhan yang lebih kuat. Test pass terjadi ketika sebuah tes memeriksa bagian tertentu dari kode dan menemukan bahwa tes dijalankan dengan benar, dan semua pemeriksaan terkait (juga disebut assertion) telah berhasil direalisasikan. Tes pass menunjukkan bahwa unit berperilaku seperti yang diharapkan.

Berita teknologi terbaru, didukung oleh insight dari pakar

Ikuti perkembangan tren industri yang paling penting—dan menarik—di bidang AI, otomatisasi, data, dan lainnya dengan buletin Think. Lihat Pernyataan Privasi IBM.

Terima kasih! Anda telah berlangganan.

Langganan Anda akan disediakan dalam bahasa Inggris. Anda akan menemukan tautan berhenti berlangganan di setiap buletin. Anda dapat mengelola langganan atau berhenti berlangganan di sini. Lihat Pernyataan Privasi IBM kami untuk informasi lebih lanjut.

Apa itu dependensi?

Pengujian unit adalah topik yang bercabang dengan berbagai aspek yang memerlukan deskripsi. Salah satu area ini menyangkut ketergantungan. Dalam konteks pengujian unit, dependensi merujuk pada layanan atau komponen eksternal yang dibutuhkan unit kode agar dapat beroperasi dengan baik.

Penting untuk mengelola ketergantungan tersebut secara efektif untuk menulis pengujian unit yang dapat diandalkan dan dapat dipelihara (dengan kata lain, test yang tetap valid, fleksibel, dan berguna dalam konteks jangka panjang, selama evolusi penuh basis kode).

Dengan manajemen dependensi yang efektif, penguji membangun rangkaian pengujian yang lebih kuat dan lebih andal yang beroperasi dengan perilaku yang diharapkan. Pengembang menggunakan injeksi ketergantungan untuk memasukkan (atau “menyuntikkan”) baris kode terkait ketergantungan ke dalam basis kode.

Pengembangan Aplikasi

Bergabunglah: Pengembangan aplikasi Enterprise di cloud

Dalam video ini, Dr. Peter Haumer membahas seperti apa pengembangan aplikasi perusahaan modern saat ini di hybrid cloud dengan menunjukkan berbagai komponen dan praktiknya, termasuk IBM Z Open Editor, IBM Wazi, dan Zowe. 

11 praktik terbaik untuk pengujian unit

Setiap strategi pengujian yang diuraikan di sini mendukung praktik terbaik dan mencerminkan gaya langsung metode pengujian.

1. Manfaatkan tiruan dan stub

Lingkungan pengujian bergantung pada penggunaan tiruan dan stub untuk mendorong isolasi mendalam yang diperlukan untuk pengujian.

Objek tiruan adalah duplikasi efektif yang membantu penguji mengevaluasi kemungkinan perilaku objek sebenarnya dengan menempatkan objek simulasi dalam isolasi yang dalam.

Stub memberi analis data tentang kemungkinan interaksi dengan dependensi eksternal, seperti komponen, sistem file, dan database.

2. Mempelajari pola penggunaan yang ekstrem

Deteksi kesalahan adalah bagian inti dari pengujian unit. Penguji mengevaluasi pola penggunaan ekstrem yang terjadi di dekat parameter atau batas operasi unit. Ini disebut kasus tepi dan mungkin tidak mudah terlihat, seperti dalam akses array di luar batas. Di sini, penguji mengetahui bahwa indeks untuk perincian melampaui nilai maksimum yang diizinkan untuk indeks tersebut.

Dalam kasus seperti itu, penguji sering akan dipaksa untuk kemudian memfaktorkan ulang kode, yang berarti untuk merestrukturisasi kode meskipun fungsinya sedang berlangsung.

3. Penggunaan pipeline CI/CD

Pipeline integrasi kontinu/pengiriman berkelanjutan (CI/CD) sangat penting untuk proses pengujian karena mereka mengotomatiskan fungsi pengujian.

Dengan menjalankan pipeline CI/CD, pengujian unit otomatis dapat dilakukan kapan saja perubahan kode diberlakukan. Pengujian otomatis dapat mendeteksi kesalahan di awal proses pengembangan dan berfungsi untuk menjaga kualitas kode.

4. Jaga agar pengujian tetap singkat, sederhana, dan cepat

Banyak faktor yang memengaruhi pemeliharaan pengujian. Agar dianggap dapat dipelihara, kode pengujian harus menunjukkan keterbacaan yang optimal, kejelasan menyeluruh, dan metode identifikasi yang baik. Singkatnya, pengujian harus menampilkan kode produksi berkualitas tinggi.

Mereka juga harus ditulis sebagai tes kecil dan terfokus yang berhubungan dengan modul tertentu. Tes juga harus dibuat dengan mempertimbangkan kecepatan karena tes yang lebih cepat dapat dilakukan lebih cepat dan sering.

5. Berhati-hatilah dengan konvensi penamaan

Jika penguji tidak mematuhi konvensi penamaan yang tepat, mudah bagi tes yang bagus untuk tersesat dalam pengocokan. Nama tes harus ringkas namun mengandung frasa yang cukup untuk menggambarkan subjek secara lengkap, sehingga dapat ditemukan dan diingat sesuai kebutuhan. Melabeli tes sebagai “Test-1” sama sekali tidak memberikan detail yang cukup tentang apa yang sedang diuji atau mengapa.

6. Membuat pengujian untuk semua kemungkinan

Membangun basis kode yang kuat membutuhkan pengujian yang membayangkan skenario positif dan negatif. Untuk skenario positif, penguji perlu menambahkan tes untuk input yang valid. Untuk skenario negatif, penguji perlu mengantisipasi input yang tidak terduga atau tidak valid.

Penting juga untuk menjaga cakupan pengujian kasus tepi dan kondisi batas untuk memastikan bahwa kode Anda cukup fleksibel untuk menangani semua jenis situasi.

7. Ikuti pola AAA

Pengujian harus mengikuti pola pengujian standar, seperti pola Arrange-Act-Assert (AAA) yang sudah mapan.

Pola AAA mengharuskan pengorganisasian dan persiapan kode dalam pengujian unit, lalu melakukan langkah apa pun yang diperlukan untuk melakukan pengujian. Terakhir, ini melibatkan penilaian kasus pengujian untuk melihat apakah kasus tersebut telah menghasilkan hasil pengujian yang diharapkan.

8. Uji sepenuhnya, uji sesering mungkin

Berapa banyak kode yang dapat diuji? Jumlah itu akan bervariasi sesuai dengan keadaan spesifik organisasi Anda. Namun, ketika pengujian adalah tujuannya, ada baiknya membidik setinggi mungkin secara realistis dan layak.

Penguji harus mencoba cakupan tes di suatu tempat dalam kisaran 70-80% dan memastikan frekuensi tes yang teratur.

9. Mengembalikan lingkungan pengujian

Pengujian harus dilakukan di lingkungan pengujian yang bersih. Ini berarti penguji harus mengikuti prosedur pembongkaran yang terkait dengan pemulihan sistem setelah pengujian selesai.

Tindakan teardown yang umum dilakukan mungkin mengharuskan penguji untuk menghapus file sementara, mengubah variabel global, atau mematikan koneksi database. Jika tidak, mudah untuk pengujian gagal terjadi karena bit kode liar yang ada yang tersandung pengujian di masa mendatang.

10. Jangan lupakan antarmuka publik

Saat merencanakan pengujian unit, ingatlah jenis penggunaan kode Anda. Antarmuka publik juga memerlukan pengujian, seperti halnya properti atau metode publik apa pun dalam kode.

Untuk mempertahankan fokus, lebih baik membatasi implementasi pengujian pada detail yang merupakan bagian dari antarmuka pemrograman aplikasi publik (API).

11. Menjaga agar pengujian disesuaikan dengan fungsionalitas kode

Ada perbedaan yang nyata antara fungsionalitas kode yang diuji dan business rules yang mungkin berlaku untuk sistem itu. Pengujian yang dilakukan harus mengevaluasi fungsionalitas kode saja.

Alat pengujian unit

Pengembang memiliki berbagai alat yang tersedia untuk digunakan dalam pengujian unit. Berikut adalah yang paling populer digunakan:

  • Jest: Pilihan yang disukai oleh pengembang berpengalaman dan pemula (yang menghargai kemudahan penggunaannya), kerangka kerja Jest menganalisis komponen React dan JavaScript. Ini berupaya memberikan pengalaman pengujian tanpa konfigurasi dengan waktu penyiapan minimal dan pembuatan pengujian yang cepat. Kelebihan lainnya adalah cara Jest melaporkan cakupan pengujian dan menilai jumlah total kode yang tunduk pada validasi.
  • JUnit: Ketika komponen Javaperlu dievaluasi, penguji biasanya memilih JUnit. JUnit menyediakan organisasi kode yang optimal, perbaikan kode yang lebih serbaguna dan deteksi kesalahan yang lebih baik. Untuk pakaian yang mengutamakan keserbagunaan, JUnit memberikannya dalam jumlah besar. Tidak hanya merampingkan proses pengujian, tetapi juga dapat digunakan selama integration testing dan functional testing seluruh sistem.
  • Pytest: Pytest dengan mudah mengelola penulisan dan pelaksanaan tes yang dibangun di sekitar bahasa pemrograman Python. Pytest juga dapat digunakan dalam pengujian unit, integration testing, functional testing dan pengujian ujung ke ujung. Dan dikenal karena menawarkan dukungan bawaan untuk parameterisasi pengujian, sehingga Anda dapat menjalankan pengujian yang sama dengan variabel yang berbeda—tanpa duplikasi kode.
  • xUnit: Pengembang yang bekerja dalam bahasa pemrograman C# biasanya menggunakan kerangka kerja pengujian unit sumber terbuka yang populer, xUnit. Para pengembang menghargai lingkungan pengujiannya yang sempurna untuk menghasilkan jenis isolasi mendalam yang diperlukan untuk menguji komponen. Bahkan bekerja dengan baik dengan alat pengujian lain untuk membantu mendorong alur kerja operasi yang mulus. Sintaks xUnit membantu dalam menyederhanakan pembuatan tes.

Bagaimana AI memengaruhi pengujian unit

Sekarang ini, secara umum dipahami bahwa semua komputasi sedang dalam tahap transisi, yang sedang mengalami revolusi akibat kekuatan pemrosesan dari kecerdasan buatan (AI). Pengujian unit mulai merasakan manfaatnya sendiri berkat AI:

  • Cakupan pengujian komprehensif: Aspek terpenting dari pengujian unit adalah deteksi kesalahan, dan AI dapat menemukan kesalahan yang mungkin terlewatkan oleh penguji manusia. Selain itu, AI dapat membuat tes “penyembuhan mandiri” yang belajar dari waktu ke waktu. Itu adalah perkembangan besar.
  • Penulisan tes yang ditingkatkan: Penguji mendasarkan lingkungan produksi pada situasi yang sering berubah-ubah dan kebutuhannya dapat berubah dengan cepat. Untungnya, AI dapat mencapai hal-hal rumit dengan cepat, seperti mengembangkan seluruh rangkaian pengujian unit untuk menjaga tim pengembangan sesuai jadwal.
  • Masukan yang konstan: Salah satu keuntungan dari penggunaan AI adalah cara AI memperlancar dan memperkuat penggunaan lingkungan pengembangan, belum lagi DevOps dan pipeline CI/CD. Imbalan langsung bagi para penguji adalah masukan berkelanjutan yang bisa mereka dapatkan, yang pada gilirannya memungkinkan siklus pengembangan yang lebih cepat.
  • Analisis pengujian khusus: Dengan AI, penguji memiliki lebih banyak keleluasaan dalam hal jenis pengujian yang dapat mereka jalankan. Misalnya, AI dapat melakukan analisis akar masalah untuk menilai akar masalah kegagalan pengujian. Demikian pula, AI dapat melakukan tes yang lebih rumit, seperti analisis kegagalan tes prediktif, dengan menggunakan pola kode dan data historis untuk meramalkan kegagalan pengujian di masa depan.
Solusi terkait
IBM Enterprise Application Service for Java

Layanan penyewa tunggal yang dikelola sepenuhnya untuk mengembangkan dan menyediakan aplikasi Java.

Jelajahi Aplikasi Java
Solusi DevOps

Gunakan perangkat lunak dan alat bantu DevOps untuk membangun, menerapkan, dan mengelola aplikasi cloud native di berbagai perangkat dan lingkungan.

Jelajahi solusi DevOps
Layanan Pengembangan Aplikasi Perusahaan

Pengembangan aplikasi cloud berarti membangun sekali, mengulangi dengan cepat, dan menerapkan di mana saja.

Layanan pengembangan aplikasi
Ambil langkah selanjutnya

Layanan Konsultasi Pengembangan Aplikasi IBM Cloud menawarkan panduan pakar dan solusi inovatif untuk menyederhanakan strategi cloud Anda. Bermitralah dengan para pakar cloud dan pengembangan IBM untuk memodernisasi, menskalakan, dan mempercepat aplikasi Anda, sehingga memberikan hasil yang transformatif bagi bisnis Anda.

Jelajahi layanan pengembangan aplikasi Mulai membangun dengan IBM cloud secara gratis