Anda di halaman 1dari 6

MENDETEKSI CODE CLONE DENGAN MENGGUNAKAN

PENDEKATAN SYMANTIC (Clone Type IV)

OLEH
ANDI Syarwani
D032191020

JURUSAN TEKNIK ELEKTRO


KONSENTRASI TEKNIK INFORMATIKA
SEKOLAH PASCA SARJANA UNHAS 2019
I. RUMUSAN MASALAH
Code clone adalah istilah pemrograman komputer yang menggambarkan terjadinya
urutan code sumber lebih dari sekali di seluruh program yang berbeda dimiliki oleh suatu
entitas. Menurut peneliti, code clone adalah potongan code yang biasanya disalin dan
diulangi oleh pengembang perangkat lunak, yang dibuat dengan suka rela di berbagai
bagian perangkat lunak.
Deteksi Code clone adalah masalah yang terkenal dalam rekayasa perangkat lunak.
Cloning dapat terjadi karena berbagai alasan seperti peningkatan kinerja, menyalin code
yang ada, accidently identical, gaya pengcodean, kegagalan mengidentifikasi dll.
Clone secara luas diklasifikasikan menjadi dua jenis, clone sintaksis dan semantik. Dua
potongan code adalah tepat satu sama lain jika persis sama kecuali spasi, blancks, dan
komentar. Clone yang diubah namanya serupa kecuali untuk nama variabel, tipe, literal dan
fungsi. Clone Gapped adalah clone jika mirip, tetapi dengan modifikasi seperti pernyataan
yang ditambahkan atau dihapus, dan penggunaan pengidentifikasi berbeda, literal, tipe,
spasi putih, tata letak, dan komentar. Dua buah code adalah Semantic Clones, jika mereka
secara semantik serupa tanpa secara sintaksis serupa.
Meskipun deteksi clone sintaksis dapat dilakukan dengan relatif mudah, clone semantik
lebih sulit dideteksi. Ini terutama berlaku untuk code tes, di mana semantik berbeda dari
code produksi. code produksi biasanya melakukan beberapa perhitungan yang dapat
diwakili dengan grafik ketergantungan program, sementara code uji memverifikasi
semantik code produksi, memverifikasi properti yang dapat diobservasi melalui pernyataan
yang tegas.
Dalam makalah ini, kita akan membahas beberapa penelitian yang telah dilakukan
terkait code clone tipe IV (semantic clone) menggunakan metode
1. Kombinasi dari dua metode AMS dan Program Dependency Graph (PDG) telah
digunakan. Metode mengeksekusi cuplikan code juga digunakan dengan nilai acak.
Metode yang disajikan dalam penelitian ini dibandingkan dengan metode berbasis AMS
[1];
2. Pendekatan hibrida berbasis semantik yang mengeksekusi fungsi biner templat dengan
kasus pengujiannya, dan meniru pelaksanaan setiap fungsi target untuk perbandingan
clone dengan informasi runtime yang dimigrasikan dari fungsi templat tersebut [2];
3. Eksekusi simbolik untuk menghasilkan representasi perilaku uji, yang kemudian
dibandingkan [3].

II. PENELITIAN TERKAIT


Sejumlah besar penelitian telah dilakukan di kedua bidang code cloning dan
obfuscation. Sejumlah alat yang efektif dan metode komputasi telah dikembangkan untuk
mengatasi masalah pendeteksian clone code dan mendeteksi code yang dikaburkan secara
independen.
Gupta, dkk. Sistem yang diusulkan Deteksi code clone yang mengidentifikasi apakah
code yang diberikan dijiplak atau tidak. Alat perangkat lunak yang disajikan dalam makalah
ini mendeteksi kesamaan yang ditemukan antara file sumber yang ditulis dalam bahasa
pemrograman java. Tujuan utama dari proyek ini adalah untuk membuat kesadaran akan
pentingnya pekerjaan individu sendiri. Alat ini dikembangkan dan diuji untuk proses
evaluasi tugas individu yang ditulis oleh siswa yang belajar bahasa pemrograman [4].
Komodoor, dkk. adalah yang pertama untuk menyelidiki pendekatan baru untuk
mendeteksi clone semantik. Mereka mengusulkan penggunaan grafik ketergantungan
program dan pengirisan program [5]. Kemudian disusul oleh Krinke yang menunjukkan
bagaimana grafik dependensi progam dapat digunakan untuk mendeteksi clone semantik
[6].
Jiang, dkk. yang menerapkan pengujian acak untuk mendeteksi output fungsi yang
serupa. Teknik mereka adalah yang pertama untuk mendeteksi clone semantik tanpa
kesamaan sintaksis, namun mereka tidak dapat diterapkan pada code uji. Untuk saat ini
belum diketahui apakah layak atau tidak untuk mendeteksi clone semantik dalam code uji
[7].
Analisis code clone biner memiliki teknik yang sudah ada mengadopsi metode statis
yang tergantung pada fitur semantik-kurang atau metode dinamis yang hanya peduli
tentang code yang dieksekusi. Metode statis BinGo [8] menangkap perilaku fungsi biner
dengan mengambil sampelnya dengan nilai acak. Untuk metode dinamis, BLEX [9] mengejar
cakupan code yang tinggi dengan biaya menghentikan eksekusi normal fungsi biner,
mendistorsi semantik yang disimpulkan dari fitur-fitur yang dikumpulkannya.

III. METODOLOGI PENELITIAN


Menggunakan Kombinasi dari dua metode AMS dan Program Dependency Graph (PDG),
metode ini akan menerapkan normalisasi awal pada code input untuk menghapus
penyimpangan dari teks input. code yang dinormalisasi kemudian dikirim ke tahap analisis
leksikal. Kemudian kondisi yang ada diekstraksi dan proposisi untuk variabel dibuat sesuai
dengan pernyataan yang diberikan kepada mereka. Sekarang, menurut pernyataan yang
diekstraksi dan pernyataan yang dikaitkan dengan setiap variabel, pernyataan dibuat dan
disimpan untuk masing-masing variabel. Pada langkah berikutnya, output dari dua tahap
analisis leksikal dan normalisasi sekunder dikirim ke langkah "membandingkan PDG dari
dua code sumber" serta "membandingkan AMS variabel dari dua code sumber". dalam AMS
analisis komparatif variabel dari dua code sumber, AMS variabel dibandingkan biaksial, dan
dalam hal kesetaraan, ketergantungan kendali mereka dan data mereka diekstrak dan
diterbitkan secara terpisah dalam output.

Metode ini [c] perilaku percobaan empiris untuk mengevaluasi efektivitas dan kapasitas
BINMATCH. Pertama, BINMATCH dievaluasi dengan binari yang dikompilasi dengan
konfigurasi kompilasi yang berbeda, termasuk opsi varian optimasi dan kompiler. Hasilnya
kemudian dibandingkan dengan solusi yang ada (§VB). Kedua, kami mengevaluasi
efektivitas BINMATCH dalam menangani kebingungan dengan membandingkan program-
program biner dengan versi-versi kaburnya (§VC). Terakhir, dengan contoh yang
memotivasi NConvert menggambarkan d dalam §II-A, kami menunjukkan bagaimana
BINMATCH menemukan fungsi cacat yang terhubung secara statis dari NConvert (§VD).

Dengan menggunakan eksekusi simbolis untuk menghasilkan representasi perilaku


pengujian, berikut adalah langkah bagaimana sistem ini bekerja. Pertama adalah metode
deteksi. code uji memverifikasi properti yang dapat diamati dari code produksi
menggunakan pernyataan tegas. Pernyataan-pernyataan ini menegaskan apa yang sedang
diverifikasi oleh tes, dan oleh karena itu mendefinisikan perilaku tes. Kedua, menggunakan
alat open-source T-CORE yang menggunakan eksekusi simbolik untuk menghasilkan pohon
perilaku uji dari setiap pernyataan. Eksekusi simbolis ini akan melewati code baris demi
baris, mensimulasikan kondisi memori saat ini di setiap langkah. Ketiga, mengevaluasi
teknik yang diusulkan di Apache Common Math Library. Metode ini akan mengecualikan
file-file ini dari dataset. Dataset terakhir terdiri dari 360 fi le dari suite tes Apache Commons
Math Library, yang berisi 32 KLOC dan 1613 unit test. Yang keempat, melakukan langkah
postprocessing untuk menyaring semua pasangan clone yang tidak perlu. Jika pernyataan
dari satu tes dicocokkan dengan pernyataan dari tes lain, kemungkinan pernyataan lain
dalam tes tersebut akan cocok juga. Ini menghasilkan pasangan clone unik dari granularity
uji. Terakhir, evaluasi. Setelah memiliki semua clone, maka mereka mengklasifikasikannya
berdasarkan tipe: tipe-I ke tipe-IV, atau sebagai false positive. Klasifikasi ini dilakukan secara
manual oleh penulis dengan memeriksa kedua tes dari masing-masing pasangan clone.

IV. HASIL
Mengakses metode ini [5], itu menunjukkan bahwa yang diusulkan telah mendeteksi
sekitar 66% dari . Dalam beberapa contoh ini, mereka menempatkan perintah loop seperti
"For and While" sehingga algoritma yang diusulkan tidak memiliki kemampuan untuk
membedakan mereka yang merupakan bagian dari pengurangan persentase deteksi terkait
dengan perintah ini. Perlu dicatat bahwa potongan-potongan code input relatif sederhana,
dan code-code itu pada tingkat contoh yang sama diberikan di seluruh kertas.

Penelitian lain, yang menghadirkan BINMATCH untuk menganalisis program biner ELF
(Executable and Linkable Format) pada arsitektur IA-32. Karena metode ini berbasis
semantik, BINMATCH dapat di-porting ke platform lain, misalnya, file PE (Portable
Executable) di Windows. fungsi inline menimbulkan ancaman bagi keakuratan BINMATCH.
Secara empiris, kompiler menggarisbawahi suatu fungsi karena fungsinya pendek dan
dipanggil beberapa kali. Yaitu, ukuran dan waktu doa mungkin fitur dari fungsi sebaris.
Dengan demikian, dimungkinkan untuk mendeteksi fungsi sebaris dengan teknik
pembelajaran mesin.
Dari 755 pasangan clone yang ditemukan oleh T-CORE, 259 adalah tipe-IV clone.
Gambar 1 menunjukkan contoh clone tipe-IV. Dalam contoh ini, dua integrator berbeda
sedang diuji. Integrator itu sendiri, seperti yang diterapkan dalam code produksi, adalah
clone tipe-IV: mereka masing-masing menerapkan algoritma yang berbeda untuk integrasi
suatu kurva. Dua tes ini memverifikasi properti yang sama dari algoritma integrasi yang
berbeda pada kurva yang sama. Kami menyatakan bahwa semantik tes (apa yang sedang
diverifikasi) adalah sama, namun bagaimana hal itu dilakukan (algoritma dan
parameternya) berbeda. Oleh karena itu, kedua tes ini juga merupakan clone tipe-IV.

Gambar 1 : Contoh hasil clone type IV

V. KESIMPULAN dan SARAN


1. Hasil penggunaan memori abstrak dan grafik ketergantungan program menunjukkan
bahwa semakin besar ukuran code, telah menyebabkan peningkatan runtime. Juga,
urutan mendefinisikan variabel dalam dua potong code memengaruhi kecepatan lari
(karena eksekusi pernyataan). Semakin banyak definisi variabel yang berbeda dalam
dua bagian code, alat juga harus memiliki lebih banyak eksekusi untuk mencapai hasil
yang diinginkan.
2. Selama eksekusi dan emulasi, BINMATCH menangkap tanda tangan semantik fungsi
untuk analisis clone. Hasil percobaan menunjukkan bahwa BINMATCH kuat untuk
transformasi code semantik yang setara, termasuk konfigurasi kompilasi yang berbeda
dan kebingungan yang umum digunakan. Selain itu, kami menunjukkan bahwa
BINMATCH berkinerja lebih baik daripada solusi canggih untuk analisis clone code biner,
seperti BinDiff dan Kam1n0.
Salah satu hal yang dapat dilakukan dalam algoritma PDG adalah menggunakan metode
perbandingan kondisi alih-alih bersaing mereka berdasarkan code hash. Tindakan ini
akan meningkatkan akurasi metode PDG. Itu juga bisa mengurutkan file input dan
bahkan perintah input berdasarkan jumlah variabel, jumlah fungsi, jenisnya, jumlah
baris, dan sebagainya. Kemudian, deteksi code clone akan lebih mudah di antara
masing-masing kelompok. Ini akan meningkatkan kecepatan menemukan code clone.
3. Metode yang diusulkan dengan menggunakan eksekusi simbolik untuk menghasilkan
representasi perilaku uji, yang dibandingkan. diperagakan di suite uji Apache Commons
Math Library bahwa pendekatan kami mendeteksi 755 pasangan clone dengan
ketepatan 98%. itu juga menunjukkan bahwa 259 dari 755 pasangan clone yang
terdeteksi adalah clone tipe-IV. Ini menegaskan bahwa layak dan layak untuk
menyelidiki clone semantik dalam code uji.
Saran untuk metode ini yakni dikarenakan penyelidikan awal ini terbatas dalam ukuran,
ancaman yang ada tidak dapat digeneralisasikan. Dalam penelitian selanjutnya,
eksperimen yang sama masih membutuhkan dataset yang lebih besar dan dibandingkan
dengan alat pendeteksi clone lainnya.

VI. REFERENSI
[1] Hamid Nasirloo, Fatemeh Azimzadeh. “Semantic Code Clone Detection Using Abstract Memory States and
Program Dependency Graphs”, 2018 4th International Conference on Web Research (ICWR), pp. 19 – 27,
2018.

[2] Y. Hu, Y. Zhang, J. Li, and H. Wang. “BinMatch: A Semantics-based Hybrid Approach on Binary Code Clone
Analysis”, 2018.

[3] B. v. Bladel, dan S. Demeyer., “A Novel approach for detecting Type -IV Clones in Test Code”, IWSC 2019
Huangzhu China, 2019, pp. 8 – 12.

[4] Nisha Gupta, Charmi hariya, Vanshika Gandhi, Vishaka Shelke, “Detection Of Code Clones”,

[5] R. Komondoor dan S. Horwitz., “Using slicing to identify duplication in source code,” in International static
analysis symposium. Springer, 2001, pp. 40–56.

[6] J. Krinke, “Identifying similar code with program dependence graphs,” in Reverse Engineering, 2001.
Proceedings. Eighth Working Conference on. IEEE, 2001, pp. 301–309.

[7] L. Jiang and Z. Su., “Automatic mining of functionally equivalent code fragments via random testing,” pada
Proceedings of the eighteenth international symposium on Software testing and analysis. ACM, 2009, pp.
81–92.

[8] M. Chandramohan, Y. Xue, Z. Xu, Y. Liu, C. Y. Cho, dan H. B. K. Tan. Bingo: “Cross-architecture cross-os binary
search”, pada Proceedings of the 24th ACM SIGSOFT International Symposium on Foundations of Software
Engineering (FSE), 2016.

[9] M. Egele, M. Woo, P. Chapman, dan D. Brumley. “Blanket execution: dynamic similarity testing for program
binaries and components”, In Proceedings of the 23rd USENIX Security Symposium (USENIX Security), 2014.

Anda mungkin juga menyukai