8 poin oleh ohjongin 2022-06-22 | 9 komentar | Bagikan ke WhatsApp

Bahkan kode Kotlin sederhana seperti ini pun sangat sulit, nyaris mustahil, untuk menguji semua percabangannya. Alasannya, saat Kotlin mengompilasi kode ini menjadi bytecode, ia membuat percabangan yang tidak dimaksudkan oleh penulis kode.

when(answer) {
"yes" -> true
else -> false
}

Di satu sisi, Kotlin menyediakan banyak fitur praktis bagi pengembang yang menulis kode, tetapi saat dikompilasi menjadi bytecode, seperti ini, ia juga menghasilkan banyak percabangan yang tidak terlihat oleh pengguna. jacoco, alat test coverage yang paling luas digunakan di platform JVM, menghitung branch coverage berdasarkan bytecode, sehingga bisa saja menuntut cakupan atas branch yang tidak disadari oleh pengembang yang memakai bahasa Kotlin. Karena itu, jika pengembang Kotlin mencoba mencapai test coverage 100%, dalam kasus seperti di atas mereka kadang perlu melakukan dekompilasi, dan jika lebih sial lagi, dekompilasi bisa gagal sehingga mereka harus melihat bytecode secara langsung untuk memeriksa branch apa saja yang ada.

9 komentar

 
youknowone 2022-06-23

Rasanya seperti membalik prioritas utama dan sekunder kalau kode sampai dipelintir demi mengejar pelacakan coverage 100%.

 
innoceive 2022-06-23

Kodenya tidak dipelintir. Hanya saja ada cara lain yang lebih nyaman dari sudut pandang manusia.

 
regentag 2022-06-23

Di bidang pertahanan (sistem persenjataan), pedoman dari DAPA mewajibkan cakupan kode 100%.
Secara realistis, mencapai 100% itu sulit, tetapi setahu saya sebagai gantinya untuk bagian yang tidak bisa dicakup harus diberi penjelasan satu per satu mengapa bagian tersebut tidak dapat dicakup.

 
doldari 2022-06-22

100% pengujian yang gila…

 
roxie 2022-06-23

wkwkwk

 
ganadist 2022-06-22

Untuk kasus percabangan enum / sealed / boolean, jika tidak ditangani dengan benar, kompiler telah diubah sehingga di Kotlin 1.6 akan muncul peringatan, dan mulai 1.7 akan menjadi error.

https://youtrack.jetbrains.com/issue/KT-47709

 
525hm 2022-06-22

Saya sudah membaca isinya dengan baik di slash 21 haha

 
ohjongin 2022-06-22

Ah~ jadi itu memang konten yang muncul di slash 21 ya... saya pertama kali melihatnya dari Twitter kenalan saya... maaf telat sadar...