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.
Buletin industri
Ikuti perkembangan tren industri yang paling penting—dan menarik—di bidang AI, otomatisasi, data, dan lainnya dengan buletin Think. Lihat Pernyataan Privasi IBM.
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.
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.
Ada lima langkah yang diketahui secara umum untuk pengujian unit, yang harus ditangani secara berurutan.
Di sini, penguji memilih kode pengujian unit yang akan dianalisis, yang mungkin merupakan fungsi, kelas, atau metode.
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.
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.
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.
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.
Ketika pengembang menulis pengujian dan menjalankan pengujian, tersedia berbagai alat pengujian bagi mereka, tergantung pada kebutuhan spesifik mereka:
Pengujian unit mewakili pendekatan pengujian yang sangat interaktif dan praktis, seperti yang diilustrasikan oleh strategi pengujian ini.
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.
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.
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.
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.
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:
Layanan penyewa tunggal yang dikelola sepenuhnya untuk mengembangkan dan menyediakan aplikasi Java.
Gunakan perangkat lunak dan alat bantu DevOps untuk membangun, menerapkan, dan mengelola aplikasi cloud native di berbagai perangkat dan lingkungan.
Pengembangan aplikasi cloud berarti membangun sekali, mengulangi dengan cepat, dan menerapkan di mana saja.