Apa yang dimaksud dengan pengujian unit?

Pengembang bekerja di komputer mereka

Penyusun

Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Apa yang dimaksud dengan pengujian unit?

Pengujian unit adalah metode pengembangan berbasis pengujian (TDD) untuk mengevaluasi perangkat lunak yang memberikan perhatian khusus pada setiap komponen atau unit kode—peningkatan sekecil mungkin.

Pengujian unit melibatkan pengisolasian unit sehingga fungsionalitas dapat dikonfirmasi sebelum unit diintegrasikan dengan bagian lain dari aplikasi. 

Kerangka kerja pengujian unit menawarkan manfaat langsung dan jangka panjang. Dalam jangka pendek, pengujian unit memfasilitasi proses pengembangan yang lebih cepat dengan memungkinkan pengujian otomatis . Dalam jangka panjang, pengujian unit menghasilkan penghematan biaya tenaga kerja karena lebih sedikit debugging yang diperlukan di kemudian hari dalam siklus pengembangan perangkat lunak (SDLC), ketika biaya tersebut cenderung jauh lebih tinggi.

Alasan lebih sedikit debugging diperlukan adalah karena kualitas kode yang ditingkatkan yang didukung pengujian unit. Pengujian unit mendorong deteksi kesalahan yang bersifat preemtif dan waspada, yang semuanya terjadi jauh lebih awal dalam proses pengembangan. Dengan berkonsentrasi pada masing-masing unit, penguji dapat fokus pada "unit berjalan", yang merupakan potongan kode atau baris kode yang sedang dievaluasi.

Efek utamanya adalah membangun basis kode yang lebih kuat di mana perubahan kode didefinisikan dan dibuat dengan aman dan lebih awal selama pengujian perangkat lunak, sehingga menggantikan kode lama yang mungkin tetap ada.

Dari semua jenis pengujian, pengujian unit dapat dianggap sebagai contoh paling murni dari disiplin “shift-left”. Tujuan dari metode pengujian shift-left adalah untuk memindahkan bagian tertentu dari pengujian perangkat lunak ke bagian awal dalam SDLC, berdasarkan garis waktu proyek yang telah direncanakan yang beralih secara berurutan dari kiri ke kanan.

Jadi, jika penguji mengutak-atik bagian terkecil dari kode sumber, maka penguji bekerja pada tingkat paling dasar proyek, menempatkannya di garis waktu proyek paling kiri. Faktanya, pengujian unit sejauh ini dapat dilakukan secara shift-left sehingga dimulai sebelum rekayasa perangkat lunak yang sebenarnya dilakukan. Salah satu aspek dari pengujian unit adalah mendorong pengembang perangkat lunak untuk mempertimbangkan potensi masalah unit dan mengatasinya secara mental ketika masih dalam tahap desain awal.

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.

Pengujian unit versus jenis pengujian lainnya

Dalam arena pengujian perangkat lunak, ada beberapa jenis pengujian yang tampaknya memiliki sifat dan fungsionalitas tertentu.

Misalnya, mudah untuk melihat mengapa sesekali ada kebingungan antara pengujian unit dan tes sederhana. Dari namanya, terdengar seolah-olah kedua istilah tersebut memiliki arti yang sama, dan kita tahu bahwa pengujian unit difokuskan pada bagian kode yang sederhana. Namun, meskipun pengujian unit diturunkan skalanya untuk menguji bagian kode yang mendasar, pengujian sederhana—terlepas dari namanya—dapat jauh lebih luas dan lebih kompleks.

Pengujian sederhana juga dapat digunakan untuk berbagai tujuan, seperti pengujian integrasi (untuk melihat seberapa baik komponen berfungsi bersama). Pengujian sederhana bahkan dapat digunakan untuk melakukan pengujian menyeluruh (untuk mengukur kinerja sistem total). Perbedaan utamanya berkaitan dengan lingkungan pengujian masing-masing. Pengujian unit berusaha untuk menguji kode secara terpisah, sementara pengujian sederhana mungkin atau mungkin tidak melakukannya.

Untungnya, ambiguitas pada jenis pengujian lainnya jauh lebih kecil. Misalnya, pengujian penerimaan, yang menganalisis seluruh sistem perangkat lunak dan seberapa efektif sistem tersebut memenuhi ekspektasi bisnis dan memenuhi kebutuhan pengguna. Pengujian penerimaan terjadi di akhir SDLC, tepat setelah pengujian regresi (yang memastikan perubahan kode tidak menyebabkan eror pada fungsionalitas) dan sebelum penerapan sistem.

Biasanya, perbedaan yang paling signifikan antara pengujian unit dan jenis pengujian lainnya adalah lokasinya di dalam SDLC. Pengujian unit perlu dilakukan di awal siklus hidup itu. Perbedaan utama lainnya terkait dengan apakah kode sedang diperiksa secara terpisah.

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. 

Lima langkah pengujian unit

Ada lima langkah yang diketahui secara umum untuk pengujian unit, yang harus ditangani secara berurutan.

1. 1. Identifikasi unit

Di sini, penguji memilih kode pengujian unit yang akan dianalisis, yang mungkin merupakan fungsi, kelas, atau metode.

2. Pilih pendekatan

Pilihan berikutnya melibatkan jenis pengujian yang akan diterapkan, apakah itu pengujian manual atau pengujian unit otomatis melalui salah satu dari banyak kerangka kerja yang memungkinkan.

3. Menetapkan lingkungan pengujian

Dalam persiapan untuk pengujian unit yang sebenarnya, penguji perlu memastikan bahwa lingkungan pengujian memenuhi semua persyaratan untuk menjalankan pengujian, termasuk data pengujian, ketergantungan, dan objek tiruan. Sangat penting untuk menggunakan lingkungan pengembangan terintegrasi (IDE) pada titik ini.

IDE adalah aplikasi perangkat lunak yang dapat dianggap sebagai semacam pisau serbaguna, berisi semua alat yang diperlukan untuk menulis, membangun, menguji, dan men-debug kode. IDE mendorong pembuatan dan pelaksanaan pengujian unit.

4. Membuat dan menggunakan kasus pengujian

Penguji memilih kerangka kerja unit dan menulis kasus uji yang akan digunakan. Selama pengembangan dan pelaksanaan pengujian, pengompilasi mengubah pengujian yang ditulis dalam bahasa pemrograman menjadi kode yang dapat dieksekusi. Setelah melakukan kasus uji, penguji mengonfirmasi hasil pengujian.

5. Debug dan selesaikan masalah

Akhirnya, tinggal satu langkah berikutnya yang tersisa. Jika salah satu kasus pengujian gagal, penguji perlu men-debug kode dan mengonfirmasi akar masalah. Kemudian, masalah tersebut harus diperbaiki. Setelah itu, penguji perlu menjalankan pengujian unit lagi untuk memastikan bug dalam kode telah diperbaiki.

Alat pengujian unit

Ketika pengembang menulis pengujian dan menjalankan pengujian, tersedia berbagai alat pengujian bagi mereka, tergantung pada kebutuhan spesifik mereka:

  • Jest: Kerangka kerja JavaScript untuk menguji komponen JavaScript dan React. Salah satu keunggulan Jest adalah cara yang berguna untuk melaporkan cakupan kode, termasuk persentase total kode yang sedang dievaluasi. Hal lainnya adalah fokusnya dalam memberikan pengalaman pengujian "tanpa konfigurasi" dengan waktu penyiapan minimal dan pengembang bebas untuk mulai menulis pengujian secepat yang mereka inginkan. Jest dianggap mudah digunakan dan ramah bagi pengembang.
  • JUnit: JUnit adalah kerangka kerja Java untuk menguji komponen Java . Keuntungan menggunakan JUnit mencakup pengelolaan kode yang lebih baik, deteksi kesalahan yang lebih menyeluruh, dan perbaikan kode yang lebih canggih. Selain itu, JUnit dikenal dapat membantu meningkatkan kualitas perangkat lunak dan merampingkan proses pengujian. Dan meskipun terutama digunakan untuk pengujian unit, JUnit juga dapat digunakan untuk pengujian integrasi dan pengujian fungsional (terhadap seluruh sistem).
  • Mocha: Mocha adalah kerangka kerja sumber terbuka untuk menguji kode JavaScript. Mocha memungkinkan otomatisasi pengujian dan eksekusi pengujian berdasarkan struktur “pengujian” dan “rangkaian pengujian”—alat organisasinya untuk menetapkan dan mengelompokkan tes. Kerangka kerja Mocha dianggap serbaguna dan dapat disesuaikan dengan berbagai kebutuhan pengujian. Keunggulan Mocha lainnya adalah pelaporan hasil pengujian yang menyeluruh, sehingga pengembang dapat mendeteksi kegagalan pengujian dan memulai upaya debugging.
  • NUnit: NUnit adalah kerangka kerja sumber terbuka lainnya, dirancang untuk bekerja dengan platform .NET dan bahasa terkait (seperti C#, VB.NET, dan F #). Kerangka kerja ini menawarkan pengujian unit berdasarkan atribut pengujian yang menetapkan metode pengujian dan bekerja dengan kode penyiapan sebelum pengujian dan kode pembersihan setelah pengujian. NUnit menyediakan berbagai metode pernyataan untuk membantu memverifikasi perilaku kode yang diperkirakan dan menggunakan console runner NUnit untuk eksekusi batch pengujian.
  • Pytest: Pytest adalah kerangka kerja untuk menulis dan menjalankan tes Python. Keserbagunaannya ditunjukkan dalam penggunaannya dalam pengujian unit, pengujian integrasi, pengujian menyeluruh, dan pengujian fungsional. Manfaat utamanya adalah dukungan bawaan yang disediakan untuk penentuan parameter pengujian, yang memungkinkan Anda menjalankan pengujian yang sama tetapi dengan konfigurasi atau input yang berbeda, tanpa harus menduplikasi kode pengujian. Kerangka kerja ini juga mendukung mocking dan patching yang mudah (menggunakan objek tiruan untuk sementara waktu untuk menggantikan objek, fungsi, atau metode yang sebenarnya), termasuk membuat objek tiruan untuk tujuan pengujian.
  • xUnit: Kerangka kerja pengujian unit sumber terbuka populer lainnya, xUnit, biasanya digunakan untuk pengembangan yang terkait dengan bahasa pemrograman C#. xUnit dirancang khusus untuk tujuan pengujian unit, sehingga unggul dalam menyediakan lingkungan yang menjalankan kode yang terisolasi untuk menguji komponen. XUnit juga dipuji karena sintaksnya yang intuitif dan mudah dipahami, yang menyederhanakan pembuatan tes. Selanjutnya, kerangka kerja ini terintegrasi dengan baik dengan alat pengujian lainnya untuk alur kerja operasi yang mulus.

Praktik terbaik pengujian unit

Pengujian unit mewakili pendekatan pengujian yang sangat interaktif dan praktis, seperti yang diilustrasikan oleh strategi pengujian ini.

Uji kode sebanyak mungkin

Sebanyak mungkin bagian penting dari kode perlu diuji dan dievaluasi. Anda tidak selalu dapat menguji 100% kode, tetapi tetap harus menargetkan persentase cakupan pengujian yang cukup tinggi, misalnya dalam kisaran 70-80%. Frekuensi pengujian juga harus ditingkatkan untuk mendukung pengujian konstan.

Gunakan mock dan stub

Mock dan stub sangat penting untuk upaya mengisolasi lingkungan pengujian dengan benar. Mock adalah ibarat uji coba ganda yang memungkinkan penguji memeriksa kemungkinan perilaku objek dalam isolasi yang lebih besar. Stub memungkinkan penguji untuk melihat bagaimana pengujian ganda terisolasi akan berinteraksi dengan dependensi eksternal seperti komponen.

Gunakan pipeline CI/CD

Menggunakan pipeline integrasi berkelanjutan/pengiriman berkelanjutan (CI/CD) adalah kunci untuk proses pengujian karena kedua pipeline ini mengotomatiskan fungsi pengujian. Dengan menjalankan pipeline CI/CD, pengujian unit otomatis dijalankan setiap kali perubahan kode dilakukan.

Pertimbangkan penggunaan ekstrem

Kasus ekstrem mencerminkan pola penggunaan ekstrem yang terjadi pada batas unit atau parameter operasi. Karena itu, kasus ekstrem sangat membantu untuk mengidentifikasi kesalahan yang mungkin tidak segera terlihat. Contoh kesalahan ini termasuk akses array di luar batas, ketika indeks yang digunakan untuk perincian melebihi nilai yang diizinkan untuk indeks tersebut. Dalam kasus seperti itu, sering kali perlu untuk melakukan refaktorisasi kode—merestrukturisasi kode dengan tetap mempertahankan fungsi yang ada.

Dampak AI pada pengujian unit

Seperti semua komputasi, kecerdasan buatan (AI) membawa kecepatan baru yang kuat dan manfaat lain untuk pengujian unit. Berikut adalah beberapa contoh bagaimana AI sekarang merevolusi pengujian unit: 

  • Penulisan pengujian yang lebih cepat: AI dapat membuat seluruh rangkaian pengujian unit lebih cepat daripada pengujian oleh manusia, yang dapat membantu menjaga tim pengembangan tetap berada di jalur untuk menyelesaikan pengujian yang diperlukan tanpa berdampak negatif pada siklus rilis produk mereka.
  • Cakupan pengujian yang lebih baik: AI melakukan pekerjaan yang luar biasa dalam mendeteksi kasus-kasus yang mungkin terlewatkan oleh penguji manusia. Namun, trik AI yang paling menakjubkan mungkin adalah kapasitasnya untuk menghasilkan tes “penyembuhan mandiri” yang dapat belajar dari pola perubahan kode, sehingga tes tetap relevan dari waktu ke waktu.
  • Analisis pengujian tingkat lanjut: AI menghadirkan kemampuan untuk menjalankan pengujian yang rumit, seperti analisis kegagalan tes prediktif, yang menggunakan data historis dan pola kode untuk menunjukkan dengan tepat kegagalan pengujian yang membayangi. Demikian pula, AI memungkinkan analisis akar masalah untuk mengidentifikasi akar masalah kegagalan pengujian.
  • Masukan yang berkelanjutan: Dengan AI yang mendorong pengujian unit, akan lebih mudah untuk mencapai integrasi yang kuat dengan lingkungan pengembangan serta pipeline DevOps dan CI/CD. Dengan Integrasi itu, penguji dapat menerima masukan berkelanjutan dan mencapai siklus pengembangan yang lebih cepat.
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