Apa itu pengujian unit?
Pengujian unit adalah proses di mana Anda menguji unit fungsional terkecil dari kode. Pengujian perangkat lunak membantu memastikan kualitas kode, dan ini merupakan bagian yang tidak dapat terpisahkan dari pengembangan perangkat lunak. Pengujian ini adalah praktik terbaik pengembangan perangkat lunak untuk menulis perangkat lunak sebagai unit fungsional kecil, lalu menulis pengujian unit untuk setiap unit kode. Anda dapat terlebih dahulu menulis pengujian unit sebagai kode. Kemudian, jalankan kode pengujian tersebut secara otomatis setiap kali Anda membuat perubahan dalam kode perangkat lunak. Dengan cara ini, jika pengujian gagal, Anda dapat dengan cepat mengisolasi area kode yang memiliki bug atau kesalahan. Pengujian unit memberlakukan paradigma berpikir modular dan meningkatkan cakupan dan kualitas pengujian. Pengujian unit otomatis membantu memastikan Anda atau developer Anda memiliki lebih banyak waktu untuk berkonsentrasi pada pengodean.
Apa itu pengujian unit?
Pengujian unit adalah blok kode yang memverifikasi keakuratan blok kode aplikasi yang lebih kecil dan terisolasi, biasanya berupa fungsi atau metode. Pengujian unit dirancang untuk memeriksa apakah blok kode berjalan seperti yang diharapkan, sesuai dengan logika teoritis developer di baliknya. Pengujian unit hanya mampu berinteraksi dengan blok kode melalui input dan output yang dinyatakan (benar atau salah).
Satu blok kode mungkin juga memiliki satu rangkaian pengujian unit, yang dikenal sebagai kasus uji. Satu rangkaian kasus uji yang lengkap mencakup seluruh perilaku yang diharapkan dari blok kode, tetapi tidak selalu diperlukan untuk mendefinisikan rangkaian kasus uji secara lengkap.
Ketika blok kode membutuhkan bagian lain dari sistem untuk dijalankan, Anda tidak dapat menggunakan pengujian unit dengan data eksternal tersebut. Pengujian unit harus dijalankan secara terpisah. Data sistem lainnya, seperti basis data, objek, atau komunikasi jaringan, mungkin diperlukan untuk fungsionalitas kode. Jika demikian, Anda harus menggunakan stub data sebagai gantinya. Menulis pengujian unit paling mudah dilakukan untuk blok kode yang kecil dan sederhana secara logika.
Strategi pengujian unit
Untuk membuat pengujian unit, Anda dapat mengikuti beberapa teknik dasar untuk memastikan cakupan semua kasus uji.
Pemeriksaan logika
Apakah sistem melakukan penghitungan yang tepat dan mengikuti jalur yang benar melalui kode yang diberikan input yang benar dan diharapkan? Apakah semua jalur melalui kode dicakup oleh input yang diberikan?
Pemeriksaan batas
Untuk input yang diberikan, bagaimana sistem merespons? Bagaimana caranya merespons terhadap input tipikal, kasus edge, atau input yang tidak valid?
Anggaplah Anda mengharapkan input bilangan bulat antara 3 dan 7. Bagaimana sistem merespons ketika Anda menggunakan 5 (input tipikal), 3 (kasus edge), atau 9 (input tidak valid)?
Penanganan kesalahan
Ketika ada kesalahan dalam input, bagaimana sistem merespons? Apakah pengguna diminta untuk input lain? Apakah perangkat lunak macet?
Pemeriksaan berorientasi objek
Jika status objek persisten diubah dengan menjalankan kode, apakah objek diperbarui dengan benar?
Contoh pengujian unit
Berikut adalah contoh metode yang sangat mendasar dalam Python dan beberapa kasus uji dengan kode pengujian unit yang sesuai.
Metode Python
def add_two_numbers(x, y):
return x + y
Pengujian unit yang sesuai
def test_add_positives():
result = add_two_numbers(5, 40)
assert result == 45
def test_add_negatives():
result = add_two_numbers(-4, -50)
assert result == -54
def test_add_mixed():
result = add_two_numbers(5, -5)
assert result == 0
Apa manfaat dari pengujian unit?
Pengujian unit bermanfaat bagi proyek pengembangan perangkat lunak dalam banyak hal.
Penemuan bug yang efisien
Jika ada kesalahan input, output, atau kesalahan berbasis logika dalam sebuah blok kode, pengujian unit membantu Anda menangkap kesalahan tersebut sebelum bug mencapai tahap produksi. Saat kode berubah, Anda menjalankan rangkaian pengujian unit yang sama, bersama pengujian lain, seperti pengujian integrasi dan mengharapkan hasil yang sama. Jika pengujian gagal (juga disebut uji rusak), hal ini menunjukkan adanya bug berbasis regresi.
Pengujian unit juga membantu menemukan bug lebih cepat dalam kode. Developer Anda tidak menghabiskan banyak waktu untuk aktivitas debugging. Mereka dapat dengan cepat menunjukkan bagian kode yang memiliki kesalahan dengan tepat.
Dokumentasi
Mendokumentasikan kode sangat penting untuk mengetahui dengan tepat apa yang seharusnya dilakukan oleh kode tersebut. Konon, pengujian unit juga bertindak sebagai bentuk dokumentasi.
Developer lain membaca pengujian untuk melihat perilaku apa yang diharapkan ditunjukkan kode saat dijalankan. Mereka menggunakan informasi untuk mengubah atau memfaktor ulang kode. Kode pemfaktoran ulang membuatnya lebih beperforma dan tersusun dengan baik. Anda dapat menjalankan pengujian unit lagi untuk memeriksa apakah kode berfungsi seperti yang diharapkan setelah perubahan.
Bagaimana developer menggunakan pengujian unit?
Developer menggunakan pengujian unit pada berbagai tahap siklus pengembangan perangkat lunak.
Pengembangan berbasis pengujian
Pengembangan berbasis pengujian (TDD) adalah ketika developer membangun pengujian untuk memeriksa persyaratan fungsional perangkat lunak sebelum mereka membangun kode lengkap itu sendiri. Dengan menulis pengujian terlebih dahulu, kode langsung dapat diverifikasi terhadap persyaratan setelah pengodean selesai dan pengujian dijalankan.
Setelah menyelesaikan blok kode
Setelah sebuah blok kode dianggap selesai, pengujian unit harus dikembangkan jika belum dilakukan berkat TDD. Kemudian, Anda dapat langsung menjalankan pengujian unit untuk memverifikasi hasilnya. Pengujian unit juga dijalankan sebagai bagian dari rangkaian lengkap pengujian perangkat lunak lainnya selama pengujian sistem. Pengujian unit biasanya adalah rangkaian pengujian pertama yang berjalan selama pengujian perangkat lunak sistem penuh.
Efisiensi DevOps
Salah satu kegiatan inti dalam penerapan DevOps untuk praktik pengembangan perangkat lunak adalah integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD). Setiap perubahan pada kode secara otomatis diintegrasikan ke basis kode yang lebih luas, dijalankan melalui pengujian otomatis, lalu akan dilakukan deployment jika pengujian lulus.
Pengujian unit merupakan bagian dari rangkaian pengujian bersama pengujian integrasi. Pengujian unit berjalan secara otomatis di alur CI/CD untuk memastikan kualitas kode karena ditingkatkan dan diubah dari waktu ke waktu.
Kapan pengujian unit kurang bermanfaat?
Pengujian unit tidak selalu diperlukan untuk setiap kasus uji tunggal di setiap blok kode di setiap proyek tunggal. Berikut adalah beberapa contoh kapan pengujian unit berpotensi dihilangkan.
Ketika waktu terbatas
Bahkan dengan kerangka kerja pengujian unit generatif, menulis pengujian unit baru membutuhkan banyak waktu developer Anda. Meski pengujian unit berbasis input dan output mungkin mudah dibuat, pemeriksaan berbasis logika lebih sulit.
Ketika developer Anda mulai menulis pengujian, mereka juga melihat peluang pemfaktoran ulang dalam blok kode dan penyelesaian mereka terganggu. Hal ini dapat menyebabkan perpanjangan jadwal pengembangan dan masalah anggaran.
Aplikasi UI/UX
Ketika sistem utama lebih mementingkan tampilan dan rasa daripada logika, mungkin tidak banyak pengujian unit yang harus dijalankan. Jenis pengujian lain, seperti pengujian manual, adalah strategi yang lebih baik daripada pengujian unit dalam kasus ini.
Basis kode warisan
Menulis pengujian untuk membungkus kode warisan yang sudah ada bisa jadi hampir mustahil, tergantung pada gaya kode yang ditulis. Karena pengujian unit membutuhkan data dummy, menulis pengujian unit untuk sistem yang sangat terhubung dengan banyak penguraian data dapat memakan banyak waktu.
Persyaratan yang berkembang pesat
Tergantung pada proyeknya, perangkat lunak dapat berkembang, berubah arah, atau seluruh bagiannya dibuang sama sekali dalam sprint kerja tertentu. Jika kebutuhan cenderung sering berubah, tidak ada banyak alasan untuk menulis pengujian unit setiap kali sebuah blok kode dikembangkan.
Apa praktik terbaik pengujian unit?
Kami memberikan beberapa praktik terbaik pengujian unit untuk mendapatkan hasil maksimal dari proses Anda.
Gunakan kerangka pengujian unit
Menulis pengujian unit yang eksplisit dan sepenuhnya disesuaikan untuk setiap blok kode akan membuang waktu. Ada kerangka kerja pengujian otomatis untuk setiap bahasa pemrograman populer.
Misalnya, Python memiliki pytest dan unittest sebagai dua kerangka kerja yang berbeda untuk pengujian unit. Kerangka kerja pengujian digunakan secara luas di seluruh proyek pengembangan perangkat lunak dari semua ukuran.
Otomatiskan pengujian unit
Pengujian unit harus dipicu pada peristiwa yang berbeda dalam pengembangan perangkat lunak. Sebagai contoh, Anda bisa menggunakannya sebelum mendorong perubahan ke cabang menggunakan perangkat lunak kontrol versi atau sebelum menerapkan pembaruan perangkat lunak.
Pengujian unit juga dapat berjalan pada proyek yang lengkap, yang ditetapkan pada jadwal yang ditentukan. Pengujian unit otomatis memastikan pengujian dijalankan di semua peristiwa dan kasus yang sesuai sepanjang siklus pengembangan.
Tegaskan sekali
Untuk setiap pengujian unit, hanya boleh ada satu hasil yang benar atau salah. Pastikan bahwa hanya ada satu pernyataan tegas dalam pengujian Anda. Pernyataan tegas yang gagal dalam blok yang terdiri dari beberapa pernyataan dapat menyebabkan kebingungan tentang pernyataan mana yang menghasilkan masalah.
Terapkan pengujian unit
Pengujian unit adalah bagian penting dalam membangun perangkat lunak, tetapi banyak proyek yang tidak mendedikasikan sumber daya untuk itu. Ketika proyek dimulai sebagai prototipe, yaitu upaya kecil berbasis komunitas, atau hanya dikodekan dengan cepat, pengujian unit dapat ditinggalkan karena keterbatasan waktu.
Namun, ketika Anda membangun proyek dengan pengujian unit sebagai praktik standar sejak awal, prosesnya menjadi jauh lebih mudah untuk diikuti dan diulang.
Apa perbedaan antara pengujian unit dan jenis pengujian lainnya?
Ada banyak jenis metode pengujian perangkat lunak lain di samping pengujian unit. Jenis-jenis metode tersebut semua memiliki peran khusus dalam siklus pengembangan perangkat lunak:
- Pengujian integrasi memeriksa bahwa berbagai bagian dari sistem perangkat lunak yang dirancang untuk berinteraksi dapat melakukannya dengan benar.
- Pengujian fungsional memeriksa apakah sistem perangkat lunak telah memenuhi persyaratan perangkat lunak yang telah diuraikan sebelum dibangun.
- Pengujian performa memeriksa apakah perangkat lunak berjalan sesuai persyaratan performa yang diharapkan, seperti kecepatan dan ukuran memori.
- Pengujian penerimaan adalah ketika perangkat lunak diuji secara manual oleh pemangku kepentingan atau kelompok pengguna untuk memeriksa apakah perangkat lunak berfungsi sesuai dengan yang mereka harapkan.
- Pengujian keamanan memeriksa perangkat lunak terhadap kerentanan dan ancaman yang diketahui. Hal ini termasuk analisis permukaan ancaman, yang mencakup titik masuk pihak ketiga ke perangkat lunak.
Metode pengujian ini biasanya memerlukan alat khusus dan proses independen untuk memeriksa perangkat lunak. Banyak metode pengujian juga dilakukan setelah fungsionalitas aplikasi dasar telah dikembangkan.
Sebaliknya, pengujian unit berjalan setiap kali kode dibangun. Pengujian unit dapat ditulis segera setelah kode apa pun ditulis dan tidak memerlukan alat khusus untuk menjalankannya. Unit pengujian dianggap sebagai salah satu jenis pengujian perangkat lunak yang paling dasar.
Bagaimana AWS dapat membantu kebutuhan pengujian unit Anda?
Amazon Web Services (AWS) memberi developer sejumlah besar keuntungan. Anda dapat mengembangkan dan menjalankan kode dan perangkat lunak pengujian, seperti melalui pengujian unit dan pengujian integrasi. Anda juga dapat menjalankan alur DevOps dan mengejar banyak peluang pengembangan.
Alat developer AWS menawarkan lingkungan pengembangan terintegrasi (IDE), plugin, dan SDK untuk beberapa bahasa pemrograman dan kasus penggunaan pemrograman. Di antara manfaat lainnya, alat ini membuat pengujian unit lebih efisien.
AWS Fargate adalah sebuah mesin komputasi nirserver dengan harga bayar sesuai penggunaan yang memungkinkan Anda fokus dalam membangun aplikasi tanpa perlu mengelola server. Anda dapat dengan mudah menjalankan perangkat lunak pengujian unit otomatis di Fargate untuk menyederhanakan pengembangan aplikasi Anda.
Anda juga dapat menemukan perangkat lunak pengujian unit pihak ketiga di AWS Marketplace. Anda dapat mengimplementasikan perangkat lunak dengan cepat dan dengan kontrol yang Anda butuhkan. Penjual AWS Marketplace menawarkan opsi harga yang fleksibel sehingga Anda dapat membayar apa yang Anda butuhkan saat membutuhkannya.
Mulai pengujian unit di AWS dengan membuat akun sekarang juga.