Saat menulis perangkat lunak, kesalahan pasti akan terjadi pada kode Anda. Ini bisa dalam bentuk kesalahan sintaks, kesalahan logika, kesalahan runtime, kesalahan kinerja, kesalahan data, atau lebih buruk lagi.
Sifat kesalahan yang hampir ada di mana-mana saat menulis perangkat lunak membuat pengujian perangkat lunak merupakan langkah penting dalam pengembangan perangkat lunak. Pengujian yang tepat dan efektif tidak hanya menghasilkan perangkat lunak berkualitas tinggi yang memenuhi kebutuhan pengguna, tetapi juga perangkat lunak yang sesuai dengan peraturan dan memiliki sedikit atau tidak ada kerentanan yang dapat dimanfaatkan oleh penyerang.
Pengujian perangkat lunak dapat dilakukan dalam bentuk pengujian otomatis, pengujian unit, pengujian integrasi, atau pengujian seluruh perangkat lunak melalui pengujian sistem.
Namun, hal penting yang muncul selama perangkat lunak adalah bagaimana Anda menentukan apakah perangkat lunak Anda telah diuji secara komprehensif. Apakah tes yang Anda jalankan pada perangkat lunak sudah cukup?
Sudahkah Anda menguji sepenuhnya semua bagian dari perangkat lunak Anda, atau ada potongan kode yang belum diuji sama sekali?
Pertanyaan seperti itu pasti muncul saat melakukan pengujian perangkat lunak, dan inilah yang membuat cakupan kode begitu penting.
Cakupan kode adalah metrik pengujian perangkat lunak yang memberi tahu Anda seberapa banyak kode Anda telah dieksekusi dan dengan demikian diuji oleh pengujian yang Anda jalankan pada perangkat lunak yang Anda uji. Hasil cakupan kode dinyatakan sebagai persentase.
Persentase ini menunjukkan seberapa banyak kode Anda telah dicakup oleh pengujian yang Anda jalankan pada kode tersebut. Misalnya, jika Anda menjalankan pengujian dan mendapatkan kembali cakupan kode sebesar 60%, berarti 40% dari kode Anda belum tercakup oleh pengujian yang telah Anda tulis, sehingga mungkin ada kesalahan dan kerentanan dalam kode yang belum diuji.
Untuk alasan ini, cakupan kode memungkinkan Anda menganalisis keefektifan dan kelengkapan pengujian yang telah Anda jalankan pada perangkat lunak Anda. Ini bermanfaat untuk memastikan perangkat lunak diuji dengan benar dan komprehensif sebelum dirilis. Ini mengurangi bug perangkat lunak dalam perangkat lunak produksi yang dapat memengaruhi pengalaman pengguna dengan perangkat lunak tersebut.
Cakupan kode sebanyak 100% tidak berarti bahwa perangkat lunak yang Anda tulis benar-benar bebas dari kesalahan, Anda ingin membidik cakupan kode yang tinggi untuk memastikan pengujian perangkat lunak Anda yang efisien.
Dalam industri kritis seperti kedirgantaraan dan kedokteran, di mana kesalahan perangkat lunak dapat mengakibatkan kematian, peraturan menuntut cakupan perangkat lunak 100% selama pengujian.
Jenis Metrik Cakupan Kode
Ada beberapa jenis metrik cakupan kode yang dapat diukur saat menguji perangkat lunak. Mereka termasuk:
- Cakupan Pernyataan – mengukur persentase pernyataan yang dapat dieksekusi dalam kode sumber yang telah dieksekusi selama pengujian.
- Cakupan Fungsi – mengukur persentase fungsi yang ditentukan yang telah dipanggil selama pengujian.
- Cakupan Cabang – mengukur persentase cabang atau kemungkinan jalur yang telah dijalankan dari semua titik keputusan dalam kode sumber. Ini digunakan untuk memastikan bahwa semua cabang yang muncul dari struktur kontrol keputusan seperti pernyataan if, switch, dan pernyataan if else telah diuji sepenuhnya.
- Cakupan kondisi – mengukur persentase ekspresi boolean yang telah diuji untuk nilai benar dan salah.
- Cakupan Loop – mengukur persentase loop dalam kode sumber yang telah dieksekusi selama pengujian.
- Cakupan Jalur – mengukur persentase semua kemungkinan jalur eksekusi dalam kode sumber yang telah diuji.
Metrik di atas biasanya disertakan dalam laporan cakupan kode.
Praktik Terbaik Cakupan Kode
Ada praktik terbaik tertentu yang direkomendasikan saat melakukan cakupan kode untuk memastikan efektivitas dan kualitas cakupan kode. Mereka termasuk:
Memiliki tujuan cakupan yang jelas
Dalam setiap pengujian perangkat lunak yang dilakukan, tetapkan persentase cakupan target untuk setiap metrik cakupan pengujian yang sesuai. Ini bermanfaat tidak hanya memberikan target pengujian yang jelas tetapi juga membantu mengurangi cacat pada perangkat lunak dengan mengarahkan upaya tim dalam meningkatkan cakupan kode. Ini juga membantu memastikan bahwa pengujian perangkat lunak mendapat perhatian yang layak selama pengembangan perangkat lunak.
Fokus pada Kualitas Tes
Penting untuk diperhatikan bahwa cakupan kode hanya menunjukkan persentase kode yang telah diuji dan tidak menunjukkan apakah kode tersebut telah diuji dengan benar atau apakah perangkat lunak tersebut bebas bug. Oleh karena itu daripada hanya berfokus untuk mendapatkan cakupan kode mendekati 100 persen, penekanannya harus pada kualitas penulisan dan pengujian efektif yang menguji perangkat lunak dengan benar dan menambah nilai.
Tingkatkan cakupan kode dalam kode yang sering berubah
Meskipun mencapai angka cakupan kode yang tinggi dalam proyek besar mungkin sulit, upaya dapat dilakukan untuk memastikan bahwa cakupan kode menjadi lebih baik dari waktu ke waktu.
Cara terbaik untuk melakukannya adalah dengan meminta cakupan kode tinggi lebih dari 90 persen di setiap komit baru yang dibuat untuk basis kode proyek.
Menegakkan cakupan kode tingkat komit tidak hanya realistis dan layak tetapi juga memastikan bahwa setiap perubahan baru yang dilakukan pada perangkat lunak memiliki cakupan kode yang sangat baik.
Mengukur dan menganalisis data cakupan kode
Memanfaatkan hasil yang didapat dari cakupan kode untuk mengidentifikasi area yang masih membutuhkan pengujian dan juga untuk memandu upaya pengujian di masa mendatang dengan prioritas pada area dengan cakupan kode yang rendah.
Menganalisis data cakupan kode untuk mengidentifikasi area kritis aplikasi yang belum diuji dan mengarahkan upaya Anda untuk sepenuhnya menguji area kritis yang belum teruji. Menggunakan data cakupan kode untuk meningkatkan dan memprioritaskan perangkat lunak menghasilkan perangkat lunak yang teruji lebih baik dengan lebih sedikit cacat.
Cakupan Kode vs. Cakupan Tes
Padahal keduanya digunakan untuk memastikan keefektifan tes, cakupan kode dan cakupan tes pada dasarnya berbeda dalam penggunaannya dan apa yang mereka ukur.
Cakupan Tes adalah metrik yang digunakan untuk menentukan sejauh mana tes tertulis mencakup persyaratan perangkat lunak. Ini melibatkan pengujian setiap persyaratan perangkat lunak, dan ini membantu memastikan seberapa baik perangkat lunak telah diuji sehubungan dengan pemenuhan persyaratannya.
Hasil uji cakupan menunjukkan persentase kebutuhan perangkat lunak yang telah diuji. Cakupan tes biasanya dilakukan oleh profesional jaminan kualitas.
Cakupan kode, di sisi lain, adalah metrik pengujian perangkat lunak yang digunakan untuk menentukan persentase kode sumber yang telah dieksekusi oleh pengujian tertulis.
Hasil cakupan kode menunjukkan sejauh mana pernyataan, fungsi, jalur, loop, cabang, dan kondisi dalam kode sumber telah dieksekusi oleh pengujian unit tertulis. Cakupan kode digunakan untuk mengevaluasi seberapa baik tes tertulis mencakup kode sumber dan biasanya dilakukan oleh pengembang perangkat lunak.
Cakupan kode adalah metrik penting untuk diukur saat melakukan pengujian perangkat lunak. Berikut adalah beberapa alat untuk membantu Anda dengan cakupan kode:
Semanggi
Clover adalah alat cakupan kode sumber terbuka yang awalnya dikembangkan oleh Atlassian, sebuah perusahaan perangkat lunak Australia yang mengembangkan produk untuk tim pengembangan perangkat lunak. Alat ini ditulis murni di Java dan dapat berjalan di sistem operasi apa pun yang memenuhi persyaratan Java Runtime Environment.
Clover dapat digunakan untuk melakukan cakupan kode pada kode yang ditulis dalam bahasa pemrograman Java, Groovy, atau AspectJ. Ini memiliki dukungan untuk kerangka pengujian seperti JUnit, TestNG, dan Spock, dan juga dapat diintegrasikan dengan IDE seperti IntelliJ IDEA dan Eclipse.
Clover dapat digunakan untuk mengukur metrik cakupan kode seperti cakupan metode, pernyataan, cabang, global, dan per tes.
Dari latihan cakupan kode, ini dapat menghasilkan laporan HTML yang sangat dapat dikonfigurasi yang menunjukkan hasil cakupan kode selain area berisiko teratas dalam perangkat lunak dan dapat digunakan dalam pengoptimalan pengujian.
Laporan juga dapat dihasilkan dalam PDF, XML, JSON, atau teks biasa. Keuntungan utama semanggi adalah dapat diintegrasikan dengan banyak alat berbeda dan secara aktif dikembangkan dan diperbaiki.
JaCoCo
JaCoCo adalah pustaka cakupan kode gratis untuk bahasa pemrograman Java yang dikembangkan oleh tim EclEmma. Pustaka diimplementasikan dalam EclEmma, yang merupakan alat cakupan kode Java gratis untuk Eclipse IDE.
JaCoCo menyediakan analisis cakupan yang kaya yang hasilnya segera diringkas dan disorot dalam editor kode Sumber Java dan memungkinkan pengguna menelusuri hasil cakupan ke tingkat metode.
Hasilnya ditampilkan menggunakan kode warna yang dapat disesuaikan yang menyoroti baris kode yang telah sepenuhnya, sebagian, atau belum dicakup oleh pengujian yang dijalankan pada kode sumber. Ini memungkinkan penggabungan dan pertimbangan berbagai uji coba untuk mencapai cakupan kode total dari kode sumber.
JaCoCo adalah alat yang ringan dan tidak memerlukan modifikasi proyek Anda atau melakukan pengaturan lain untuk digunakan untuk analisis cakupan kode.
Cobertura
Cobertura adalah alat cakupan kode Java sumber terbuka dan gratis yang didasarkan pada Jcoverage dan dapat digunakan sendiri, melalui skrip Ant, atau melalui plugin Maven. Menggunakannya melalui plugin Maven adalah cara paling umum untuk menggunakan Cobertura untuk cakupan kode.
Cobertura mengukur persentase garis atau cabang yang telah dieksekusi oleh pengujian yang dijalankan pada kode sumber Java. Ini memberikan metrik seperti cakupan garis yang menunjukkan persentase pernyataan yang dieksekusi selama pengujian, dan juga cakupan cabang yang menunjukkan persentase cabang yang dicakup selama pengujian.
Ini juga menunjukkan faktor kompleksitas yang meningkat seiring bertambahnya jumlah cabang dalam kode Java Anda.
Hasil cakupan kode disajikan dalam HTML atau XML, menunjukkan bagian mana dari kode sumber yang belum diuji. Selain menunjukkan hasil cakupan pengujian, Cobertura juga dapat digunakan untuk menemukan kode dan bug yang belum diuji dan juga mengidentifikasi kode yang tidak dapat dijangkau.
Istanbul
Istanbul adalah alat cakupan kode untuk kode JavaScript dengan dukungan untuk ES6+. Alat ini dapat diinstal di proyek Javascript apa pun sebagai ketergantungan pengembangan menggunakan manajer paket node.
Istanbul menyediakan metrik cakupan kode seperti pernyataan, cabang, fungsi, dan cakupan garis. Itu juga menunjukkan baris dalam kode sumber yang belum dicakup oleh pengujian. Ini dilakukan dengan menambahkan penghitung baris ke kode JavaScript Anda sehingga dapat melacak sejauh mana pengujian unit Anda mengeksekusi kode sumber Anda.
Hasil cakupan kode oleh Istanbul dapat ditampilkan di terminal atau dalam bentuk HTML. Selain itu, Istanbul menawarkan dukungan untuk aplikasi yang menelurkan subproses, cakupan sumber yang dipetakan dari proyek Babel dan TypeScript.
Pytest-cov
Pytest-cov adalah plugin Python gratis yang digunakan untuk menghasilkan laporan cakupan kode untuk kode Python. Itu diinstal menggunakan Pip penginstal paket Python dan dioperasikan dari baris perintah.
Laporan cakupan kodenya menunjukkan pernyataan dalam proyek Python Anda, yang tidak dicakup oleh pengujian, dan memberikan persentase cakupan pengujian yang menunjukkan persentase kode Python Anda yang dicakup oleh pengujian.
Pytest-cov menawarkan dukungan subproses, dukungan xdist, dan perilaku pytest yang konsisten. Perilaku default Pytest-cov saat melakukan pengujian adalah menghapus file data cakupan yang ada untuk memastikan data baru dan bersih untuk setiap pengujian baru. Namun, ini juga memungkinkan pengguna untuk menggabungkan hasil uji cakupan kode dari uji coba sebelumnya.
Cakupan.py
Coverage.py adalah alat cakupan kode untuk program Python, dan dipasang di proyek menggunakan pip.
Secara default, ini mengukur cakupan baris atau pernyataan dan memberikan hasil yang menunjukkan jumlah pernyataan dalam program, yang terlewatkan oleh pengujian, dan cakupan persentase dari pengujian, dan juga menunjukkan baris dalam kode sumber Python Anda yang telah dilewatkan oleh tes. Namun, masih dapat dikonfigurasi untuk mengukur cakupan cabang dalam program Python.
Coverage.py juga dapat digunakan untuk mengetahui tes mana yang menjalankan baris mana dalam kode sumber. Laporan cakupan kodenya dapat disajikan di terminal dan juga dalam format HTML, XML, JSON, dan LCOV.
SimpleCov
SimpleCov adalah alat cakupan kode yang kuat untuk bahasa pemrograman Ruby. Ini menggunakan pustaka cakupan bawaan Ruby untuk mengumpulkan data yang relevan untuk digunakan dalam menentukan cakupan kode setelah menjalankan pengujian.
Hal terbaik tentang SimpleCov adalah presentasi hasil cakupan kodenya. Itu juga menggabungkan hasil dari berbagai jenis pengujian yang dilakukan sehingga laporan yang dihasilkan menunjukkan hasil dari semua pengujian yang dilakukan, memungkinkan identifikasi bagian kode yang belum diuji dengan mudah.
Itu juga memformat kode sumber dengan kode warna yang dapat dengan mudah digunakan untuk mengidentifikasi bagian kode yang teruji dan belum teruji. Secara default, SimpleCov mengukur dan melaporkan cakupan garis pengujian. Namun, ini dapat dikonfigurasi untuk mengukur dan melaporkan cakupan cabang dari pengujian yang dilakukan.
Penutup Dalam
Deep Cover adalah alat cakupan kode yang akurat untuk kode Ruby. Ia menawarkan laporan cakupan jalur yang lebih akurat dengan memastikan bahwa suatu jalur dianggap tercakup hanya jika dijalankan seluruhnya dan bukan sebagian.
Selain itu, ia menawarkan dukungan untuk cakupan node dan cabang yang secara opsional dapat digunakan untuk mengetahui apakah ada beberapa cabang yang tidak diambil oleh pengujian.
Deep Cover tidak hanya mudah digunakan tanpa memerlukan konfigurasi, tetapi juga dapat diintegrasikan ke dalam proyek menggunakan alat cakupan kode lain seperti pustaka cakupan kode bawaan Ruby atau SimpleCov. Dalam kasus seperti itu, Deep Cover membuat alat lebih ketat dengan hanya menandai baris sebagai dieksekusi hanya jika semua yang ada di baris kode dieksekusi sepenuhnya.
Kesimpulan
Meskipun cakupan kode yang lebih tinggi belum tentu menghasilkan perangkat lunak yang bebas dari kesalahan, ini adalah metrik penting yang perlu diperhitungkan saat menguji perangkat lunak. Cakupan kode penting dalam mengevaluasi seberapa banyak tes yang ditulis benar-benar menguji kode sumber perangkat lunak.
Selain itu, bekerja untuk meningkatkan cakupan kode selama pengujian menghasilkan perangkat lunak yang teruji lebih baik yang tidak terlalu rentan terhadap kesalahan dalam produksi. Untuk melakukan cakupan kode saat menguji perangkat lunak, pertimbangkan untuk menggunakan alat yang disarankan dalam artikel.
Anda juga dapat menjelajahi alat pengujian beban berbasis cloud.