Resume Tentang Code Clone [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

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 programprogram 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.