Apa itu Pengujian Mutasi? (Contoh)
⚡ Ringkasan Cerdas
Pengujian Mutasi sengaja memasukkan kesalahan kecil ke dalam kode sumber dan kemudian menjalankan rangkaian pengujian yang ada terhadap setiap versi yang salah, mengukur apakah pengujian tersebut cukup kuat untuk mendeteksi perubahan tersebut.
Apa itu Pengujian Mutasi?
Pengujian Mutasi Mutasi adalah jenis pengujian perangkat lunak di mana pernyataan-pernyataan tertentu dalam kode sumber diubah, atau dimutasi, untuk memeriksa apakah kasus uji mampu menemukan kesalahan dalam kode sumber. Tujuan dari Pengujian Mutasi adalah untuk memastikan kualitas kasus uji dalam hal ketahanan, sehingga kasus uji tersebut gagal terhadap kode sumber yang telah dimutasi.
Perubahan yang dilakukan pada program mutan harus dijaga agar sekecil mungkin, sehingga tidak memengaruhi tujuan keseluruhan program. Pengujian Mutasi juga disebut strategi pengujian berbasis kesalahan, karena melibatkan pembuatan kesalahan secara sengaja dalam program. Ini adalah bentuk dari Putih Box pengujian yang diterapkan terutama selama Pengujian Unit.
Pengujian Mutasi diusulkan pada tahun 1971 dalam makalah mahasiswa oleh Richard Lipton dan diformalkan dalam makalah tahun 1978 "Hints on Test Data Selection" oleh DeMillo, Lipton, dan Sayward. Metode ini kehilangan momentum karena biaya komputasi pada saat itu dan sejak itu kembali mendapatkan tempat berkat bahasa pemrograman seperti... Java, C#, Python, JavaSkrip, dan XML.
Bagaimana cara menjalankan Pengujian Mutasi?
Berikut adalah langkah-langkah untuk melakukan pengujian mutasi, yang juga dikenal sebagai analisis mutasi:
Langkah 1: Kesalahan dimasukkan ke dalam kode sumber program dengan membuat banyak versi yang disebut mutan. Setiap mutan harus berisi satu kesalahan, dan tujuannya adalah untuk menyebabkan versi mutan tersebut gagal, yang menunjukkan efektivitas kasus uji.
Langkah 2: Kasus uji diterapkan pada program asli dan juga pada program mutan. A Uji Kasus harus memadai, dan disesuaikan untuk mendeteksi kesalahan dalam suatu program.
Langkah 3: Bandingkan hasil dari program asli dan program mutan.
Langkah 4: Jika program asli dan program mutan menghasilkan keluaran yang berbeda, maka program mutan tersebut akan dihentikan oleh kasus uji. Oleh karena itu, kasus uji tersebut cukup baik untuk mendeteksi perubahan antara program asli dan program mutan.
Langkah 5: Jika program asli dan program mutan menghasilkan keluaran yang sama, mutan tersebut tetap dipertahankan. Dalam kasus seperti itu, perlu dibuat kasus uji yang lebih efektif untuk mematikan semua mutan.
Diagram di bawah ini tracProsesnya sama, yaitu lima langkah, mulai dari program awal hingga pembentukan mutan dan akhirnya diputuskan apakah seseorang terbunuh atau selamat.
Bagaimana Cara Membuat Program Mutan?
Mutasi hanyalah perubahan sintaksis tunggal yang dilakukan pada sebuah pernyataan program. Setiap program mutan harus berbeda dari program aslinya tepat satu mutasi.
| Program Asli | Program Mutan |
| Jika (x>y) Cetak “Halo” Lain Cetak “Hai” |
Jika (x Cetak “Halo” Lain Cetak “Hai” |
Pada pasangan di atas, hanya operator perbandingan yang berubah, namun kasus uji di mana x lebih besar dari y sekarang mencetak "Hi" alih-alih "Hello". Ilustrasi tersebut menunjukkan satu perubahan sintaksis.
Apa yang harus diubah dalam Program Mutan?
Ada beberapa teknik yang dapat digunakan untuk menghasilkan program mutan. Tiga kelompok di bawah ini mencakup sebagian besar operator mutasi yang disertakan dalam perangkat lunak.
| Operadan operator pengganti | Operator modifikasi ekspresi | Operator modifikasi pernyataan |
| Gantikan operan dengan operan lain (x dengan y, atau y dengan x) atau dengan nilai konstan. | Mengganti operator, atau memasukkan operator baru, dalam sebuah pernyataan program. | Pernyataan terprogram dimodifikasi untuk membuat program mutan. |
| Contoh: Jika(x>y) ganti nilai x dan y If(5>y) ganti x dengan konstanta 5 |
Contoh: Jika(x==y) Kita dapat mengganti == dengan >= dan mendapatkan program mutan sebagai berikut: If(x>=y) dan memasukkan ++ ke dalam pernyataan Jika(x==++y) |
Contoh: Hapus bagian else dalam pernyataan if-else Hapus seluruh pernyataan if-else untuk memeriksa bagaimana program berperilaku. |
Beberapa contoh operator mutasi:
- Penggantian label GOTO
- Penggantian pernyataan pengembalian
- Penghapusan pernyataan
- Penyisipan operator unary (seperti – dan ++)
- Penggantian konektor logis
- Penggantian nama array yang sebanding
- Menghapus bagian else dari pernyataan if-else
- Menambah atau mengganti operator
- Penggantian pernyataan dengan mengubah data
- Modifikasi data untuk variabel
- Modifikasi tipe data dalam program
OperaTors yang menyentuh kondisi batas paling sering bertahan hidup, sehingga hasil mutasi sering kali mengarah kembali pada celah-celah dalam analisis nilai batas.
Jenis Pengujian Mutasi
In Rekayasa Perangkat LunakPengujian mutasi pada dasarnya dikategorikan menjadi tiga jenis — mutasi pernyataan, mutasi nilai, dan mutasi keputusan.
- Mutasi Pernyataan – sebuah pernyataan dipotong, ditempel, atau dihapus, sehingga hasilnya mungkin berupa penghapusan beberapa baris kode.
- Mutasi Nilai – Nilai parameter dan konstanta utama dimodifikasi, misalnya mengubah batas loop atau ambang batas.
- Mutasi Keputusan – pernyataan kontrol diubah, misalnya membalikping operator relasional atau meniadakan suatu kondisi.
Alat-alat mengelompokkan operatornya di bawah tiga judul ini, sehingga keluarga yang menghasilkan mutan yang bertahan memberi tahu penguji jenis pernyataan apa yang hilang. Mutan keputusan yang bertahan biasanya menandai cabang yang belum diuji, yang tumpang tindih dengan pengujian loop.
Otomatisasi Pengujian Mutasi
Pengujian mutasi sangat memakan waktu dan rumit untuk dilakukan secara manual, sehingga disarankan untuk menggunakan alat otomatisasi, yang juga mengurangi biaya. Alat mutasi mengkompilasi mutan, menjadwalkan eksekusi, mencatat mutan mana yang dihentikan oleh setiap pengujian yang gagal, dan melaporkan skornya.
Daftar alat yang tersedia:
- Stryker — sebuah kerangka kerja pengujian mutasi sumber terbuka dengan edisi untuk JavaNaskah dan TypeScript (StrykerJS), C# dan .NET (Stryker.NET), dan Scala (Stryker4s).
- PIT, juga ditulis PITest — sebuah sistem pengujian mutasi untuk Java dan JVM yang memodifikasi bytecode yang telah dikompilasi dan terhubung ke Maven dan Gradle membangun di samping JUnit.
Keduanya berjalan sebagai langkah pembangunan, jadi keduanya termasuk dalam kategori yang sama. integrasi berkelanjutan saluran pipa seperti bagian lainnya pengujian otomasi pada.
Skor Mutasi
Skor mutasi didefinisikan sebagai persentase mutan yang terbunuh dari total jumlah mutan.
Skor Mutasi = (Mutan yang Terbunuh / Jumlah Mutan Total) * 100
Rumusnya ditampilkan di bawah ini dalam bentuk yang dilaporkan oleh sebagian besar alat.
Kasus uji digambarkan sebagai mutasi yang memadai ketika skor mencapai 100 persen. Dalam praktiknya, penyebut harus tidak termasuk mutan setara — mutan yang sintaksisnya yang diubah berperilaku persis seperti aslinya, sehingga tidak ada pengujian yang dapat menghapusnya. Oleh karena itu, alat-alat tersebut melaporkan mutan yang dihapus dibagi dengan mutan yang dihapus ditambah mutan non-ekuivalen yang bertahan, dan memungkinkan penguji untuk menandai yang setara.
Hasil eksperimen menunjukkan bahwa pengujian mutasi merupakan cara efektif untuk mengukur kecukupan kasus uji. Kelemahan utamanya adalah biaya pembuatan mutan dan pelaksanaan setiap kasus uji terhadap masing-masing mutan.
Pengujian Mutasi vs Code Liputan
High cakupan tes Hal itu tidak membuktikan pengujian yang kuat. Cakupan baris dan cabang mencatat pernyataan mana yang dijalankan, bukan apakah ada sesuatu yang diverifikasi setelahnya, sehingga pengujian yang memanggil suatu metode dan tidak menegaskan apa pun tetap dianggap tercakup. Pengujian Mutasi menutup celah itu, karena mutan hanya mati ketika suatu pernyataan benar-benar gagal.
| Aspek | Code liputan | Skor mutasi |
| Apa yang diukur | Baris atau cabang mana yang dieksekusi oleh pengujian? | Kesalahan yang disuntikkan tersebut terdeteksi oleh pengujian. |
| Sensitif terhadap pernyataan | Tidak — pengujian tanpa pernyataan sama sekali tetap menambah cakupan. | Ya — mutan bertahan hidup ketika tidak ada pernyataan yang gagal. |
| Biaya lari | Satu kali uji coba dengan instrumentasi. | Satu kali uji coba per mutan yang bertahan hidup, sejauh ini lebih lambat. |
| Penggunaan khas | Gerbang cepat pada setiap komitmen | Pemeriksaan berkala yang lebih mendalam pada modul-modul penting. |
| Mode gagal | Cakupan 100 persen tanpa verifikasi nyata | Mutan setara yang tidak pernah bisa dibunuh |
Kedua metrik tersebut saling melengkapi. Cakupan (coverage) menunjukkan kode yang tidak pernah dijangkau; skor mutasi (mutation score) menunjukkan kode yang dijangkau tetapi tidak pernah diperiksa. Keduanya memberikan input yang sama. proses manajemen cacat, di samping langkah-langkah seperti kepadatan cacat.
Keuntungan Pengujian Mutasi
Berikut ini adalah keuntungan dari Pengujian Mutasi:
- Ini adalah pendekatan yang ampuh untuk mencapai cakupan program sumber yang tinggi.
- Ini menguji rangkaian pengujian itu sendiri, yang tidak dilakukan oleh metode lain. teknik pengujian perangkat lunak langsung.
- Pengujian mutasi memberikan tingkat deteksi kesalahan yang baik bagi pengembang perangkat lunak.
- Metode ini mengungkap ambiguitas dalam kode sumber dan memiliki kemampuan untuk mengekspos kesalahan yang tidak pernah ditemukan oleh eksekusi biasa.
- Mutan yang selamat dapat ditindaklanjuti: masing-masing menyebutkan baris kode tertentu dan perubahan spesifik yang gagal diperhatikan oleh rangkaian perangkat lunak tersebut.
- Pelanggan mendapatkan manfaat dari pengujian ini dengan menerima sistem yang lebih andal dan stabil.
Kekurangan Pengujian Mutasi
Di sisi lain, berikut adalah kekurangan dari Pengujian Mutasi:
- Pengujian mutasi sangat mahal dan memakan waktu, karena sejumlah besar program mutan perlu dihasilkan dan dikompilasi.
- Karena memakan waktu, dapat dikatakan bahwa pengujian ini tidak dapat dilakukan tanpa alat otomatisasi.
- Setiap mutan diuji dengan jumlah kasus uji yang sama seperti program aslinya, sehingga populasi mutan yang besar harus dijalankan terhadap seluruh rangkaian uji.
- Mutan yang setara tidak dapat dibunuh oleh tes apa pun, dan memisahkan mereka dari penyintas sejati biasanya membutuhkan peninjauan manual.
- Karena metode ini mengubah kode sumber, maka metode ini tidak berlaku untuk... Black Box pengujian.
Kapan Menggunakan Pengujian Mutasi?
Profil biaya di atas berarti Pengujian Mutasi jarang dijalankan di seluruh basis kode pada setiap commit. Pengujian ini akan menguntungkan jika kesalahan yang tidak terdeteksi sangat mahal dan kode yang diuji cukup kecil sehingga dapat bermutasi dengan cepat.
- Logika yang kritis terhadap keselamatan atau keuangan. — perhitungan pembayaran, aturan pajak, dan pemeriksaan otorisasi, di mana jawaban salah yang tidak menimbulkan masalah lebih buruk daripada kecelakaan.
- Suite dengan cakupan yang mencurigakan tingginya — ketika cakupan menunjukkan angka mendekati 100 persen tetapi masih ada kerusakan yang lolos dari pengawasan.
- Kode lama sedang direfaktor. — Hasil mutasi mengungkapkan apakah tes yang ada dapat mendeteksi regresi.
- Pustaka dan komponen bersama — kesalahan pada barang yang digunakan kembali komponen dikalikan dengan setiap penelepon.
- Tim-tim sedang berlatih pengembangan berbasis tes — Skor tersebut memeriksa apakah tes yang ditulis pertama kali benar-benar berfungsi.
Biasanya tidak ada gunanya menjalankan pengujian pada prototipe sekali pakai, pada kode yang kurang terstruktur atau kode yang dihasilkan tanpa logika percabangan, atau pada rangkaian pengujian yang didominasi oleh kinerja yang lambat. tes integrasi yang mana sekali jalan saja sudah memakan waktu berjam-jam.
Oleh karena itu, sebagian besar tim membatasi eksekusi pada file yang berubah, menetapkan ambang batas untuk modul yang penting, dan membiarkan proses yang lebih luas berjalan secara bertahap. pengujian regresi suite membawa sisanya siklus hidup pengujian perangkat lunak.



