Duplikasi kode

bagian dari kode sumber yang muncul lebih dari satu kali di lingkungan yang sama
Revisi sejak 15 Desember 2024 04.07 oleh Etewe (bicara | kontrib) (Pembuatan artikel baru)
(beda) ← Revisi sebelumnya | Revisi terkini (beda) | Revisi selanjutnya → (beda)

Duplikasi kode adalah situasi di mana terdapat potongan kode sumber yang muncul lebih dari sekali, baik dalam satu program maupun di antara program-program yang dimiliki atau dikelola oleh entitas yang sama. Duplikasi kode biasanya dianggap tidak diinginkan karena berbagai alasan[1]. Umumnya, terdapat syarat minimum terhadap jumlah kode yang harus muncul dalam sebuah urutan agar dianggap sebagai duplikasi, bukan sekadar kemiripan yang kebetulan. Urutan kode yang sama ini sering disebut sebagai code clones atau hanya clones, dan proses otomatis untuk menemukan duplikasi dalam kode sumber disebut clone detection.

Dua potongan kode dapat dianggap sebagai duplikasi meskipun tidak identik secara karakter per karakter. Misalnya, kode tersebut mungkin identik hanya setelah penghapusan karakter spasi dan komentar, atau identik secara token-per-token dengan sedikit variasi. Bahkan, kode yang hanya identik secara fungsional juga dapat dianggap sebagai duplikasi.

Penyebab kemunculan

Duplikasi kode dapat terjadi karena beberapa alasan, antara lain:

  • Pemrograman copy-and -paste dimana pemrogram menyalin dan menempelkan kode, sering kali untuk menghemat waktu atau karena alasan lain, seperti kurangnya pemahaman tentang bahasa pemrograman. Dalam pengaturan akademis, hal ini bahkan dapat dikaitkan dengan plagiarisme.
  • Scrounging, yaitu dimana sebuah bagian kode disalin karena sudah terbukti berfungsi. Biasanya, kode yang disalin mengalami modifikasi kecil seperti penggantian nama variabel atau penambahan/penghapusan baris kode.
  • Kesalahan independen dimana ketika pengembang secara independen menulis kode untuk fitur yang serupa, kode yang dihasilkan sering kali mirip tetapi tidak identik secara sintaksis[2].
  • Kode yang dihasilkan secara otomatis. Dalam beberapa kasus, duplikasi kode merupakan hasil dari alat otomatis yang menghasilkan kode untuk meningkatkan kecepatan atau kemudahan pengembangan.

Cara memperbaiki

Cara paling umum untuk mengatasi duplikasi kode adalah dengan memindahkan kode ke dalam satu unit tersendiri, seperti fungsi atau modul, dan memanggil unit tersebut dari berbagai tempat yang sebelumnya menggunakan kode yang sama. Pendekatan ini juga dapat didukung dengan penggunaan komponen open-source yang ditempatkan di lokasi terpusat.

Biaya dan manfaat

Kerugian Duplikasi Kode:

  • Kesulitan Pemeliharaan: Kode yang lebih panjang lebih sulit untuk dikelola. Jika terjadi pembaruan pada salah satu salinan kode, kemungkinan salinan lain tidak diperbarui.
  • Rentan terhadap Kerusakan: Jika satu salinan kode digunakan untuk tujuan berbeda dan diperbarui, pembaruan tersebut mungkin tidak relevan atau bahkan merusak fungsi lainnya.

Keuntungan Duplikasi Kode:

  • Dalam beberapa kasus, duplikasi dapat menjadi solusi terbaik jika bahasa pemrograman yang digunakan memiliki keterbatasan atau abstraksi yang terlalu kompleks.

Pertimbangan Lain:

  • Duplikasi kode secara otomatis, seperti yang dihasilkan oleh generator kode, tidak relevan dengan isu-isu ini jika hanya ada satu salinan dalam kode sumber.
  • Kerentanan perangkat lunak yang terdapat dalam kode duplikat mungkin terus ada jika pengembang tidak menyadari salinan tersebut.

Refaktorisasi kode duplikat dapat meningkatkan sejumlah metrik perangkat lunak, seperti mengurangi jumlah baris kode, kompleksitas siklomatik, dan coupling[3]. Namun, risiko kerusakan akibat refaktorisasi harus diperhitungkan.

Deteksi duplikasi kode

Beberapa algoritma telah dikembangkan untuk mendeteksi duplikasi kode, di antaranya:

  • Algoritma Baker[4]
  • Pencarian string Rabin–Karp[5]
  • Penggunaan abstract syntax trees[6]
  • Deteksi klon visual[7]
  • Deteksi klon matriks hitung[8][9]
  • Locality-sensitive hashing[10]
  • Anti-unification[11]

Contoh Kode Duplikat

Berikut adalah contoh kode duplikat untuk menghitung rata-rata elemen dalam sebuah array:

extern int array_a[];
extern int array_b[];

int sum_a = 0;
for (int i = 0; i < 4; i++)
    sum_a += array_a[i];
int average_a = sum_a / 4;

int sum_b = 0;
for (int i = 0; i < 4; i++)
    sum_b += array_b[i];
int average_b = sum_b / 4;

Kode tersebut dapat disederhanakan menjadi satu fungsi:

int calc_average_of_four(int* array) {
    int sum = 0;
    for (int i = 0; i < 4; i++)
        sum += array[i];
    return sum / 4;
}

Penggunaan fungsi ini menghasilkan kode sumber yang lebih bersih dan bebas dari duplikasi:

extern int array1[];
extern int array2[];

int average1 = calc_average_of_four(array1);
int average2 = calc_average_of_four(array2);

Duplikasi kode merupakan masalah umum dalam pengembangan perangkat lunak yang dapat berdampak pada pemeliharaan, efisiensi, dan keandalan perangkat lunak. Meskipun sering kali dihindari, duplikasi dapat menjadi solusi terbaik dalam kondisi tertentu. Oleh karena itu, pemahaman mendalam tentang konteks dan alat bantu deteksi duplikasi menjadi penting dalam pengelolaan kode sumber.

Lihat pula

Referensi

  1. ^ "Repetition | The Bad Code Spotter's Guide | InformIT". www.informit.com. Diakses tanggal 2024-12-15. 
  2. ^ Juergens, E; Deissenboeck, F; Hummel, B (2010-03). "Code Similarities Beyond Copy &amp; Paste". 2010 14th European Conference on Software Maintenance and Reengineering. IEEE: 78–87. doi:10.1109/csmr.2010.33. 
  3. ^ "Refactoring Techniques". refactoring.guru (dalam bahasa Inggris). Diakses tanggal 2024-12-15. 
  4. ^ "Wayback Machine". citeseerx.ist.psu.edu. Diakses tanggal 2024-12-15. 
  5. ^ "Rabin-Karp Algorithm". www.programiz.com. Diakses tanggal 2024-12-15. 
  6. ^ Rusdianto, Stephanie; Chaniago, Ria (2019-02-05). "Penerapan Abstract Syntax Tree dan Algoritma Damerau-Levenshtein Distance untuk Mendeteksi Plagiarisme pada Berkas Source Code". Jurnal Telematika. 13 (2): 105–110. doi:10.61769/telematika.v13i2.236. ISSN 2579-3772. 
  7. ^ Rieger, Matthias; Ducasse, Stéphane (1998-07-20). "Visual Detection of Duplicated Code". Workshop ion on Object-Oriented Technology. ECOOP '98. Berlin, Heidelberg: Springer-Verlag: 75–76. doi:10.5555/646778.704176. ISBN 978-3-540-65460-5. 
  8. ^ Chen, Xiliang; Wang, Alice Yuchen; Tempero, Ewan (2014-01-20). "A replication and reproduction of code clone detection studies". Proceedings of the Thirty-Seventh Australasian Computer Science Conference - Volume 147. ACSC '14. AUS: Australian Computer Society, Inc.: 105–114. doi:10.5555/2667473.2667486. ISBN 978-1-921770-30-2. 
  9. ^ Yuan, Yang; Guo, Yao (2011-12). "CMCD: Count Matrix Based Code Clone Detection". 2011 18th Asia-Pacific Software Engineering Conference. IEEE. doi:10.1109/apsec.2011.13. 
  10. ^ "Locality Sensitive Hashing (LSH): The Illustrated Guide | Pinecone". www.pinecone.io (dalam bahasa Inggris). Diakses tanggal 2024-12-15. 
  11. ^ Bulychev, Peter; Minea, Marius (2008). "Duplicate Code Detection Using Anti-Unification" (PDF). doi:10.15514/SYRCOSE-2008-2-22.