Lompat ke isi

Duplikasi kode: Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 26762664; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi
 
Baris 1: Baris 1:
'''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. 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''.
'''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.<ref>[https://www.informit.com/articles/article.aspx?p=457502&seqNum=5 Repetition The Bad Code Spotter's Guide InformIT]. ''www.informit.com''.</ref> 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.
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.
Baris 8: Baris 8:
* '''Pemrograman c''opy-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]].
* '''Pemrograman c''opy-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 ''s''ebuah bagian kode disalin karena sudah terbukti berfungsi. Biasanya, kode yang disalin mengalami modifikasi kecil seperti penggantian nama variabel atau penambahan/penghapusan baris kode.
* '''''Scrounging''''', yaitu dimana ''s''ebuah 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]].
* '''Kesalahan independen''' dimana ketika pengembang secara independen menulis kode untuk fitur yang serupa, kode yang dihasilkan sering kali mirip tetapi tidak identik secara [[sintaksis]].<ref>E Juergens. [https://doi.org/10.1109/csmr.2010.33 Code Similarities Beyond Copy &amp; Paste]. ''2010 14th European Conference on Software Maintenance and Reengineering''. IEEE. 2010-03. hlm. 78–87. doi:10.1109/csmr.2010.33.</ref>
* '''Kode yang dihasilkan secara otomatis'''. Dalam beberapa kasus, duplikasi kode merupakan hasil dari alat otomatis yang menghasilkan kode untuk meningkatkan kecepatan atau kemudahan pengembangan.
* '''Kode yang dihasilkan secara otomatis'''. Dalam beberapa kasus, duplikasi kode merupakan hasil dari alat otomatis yang menghasilkan kode untuk meningkatkan kecepatan atau kemudahan pengembangan.


Baris 29: Baris 29:
* Kerentanan [[perangkat lunak]] yang terdapat dalam kode duplikat mungkin terus ada jika pengembang tidak menyadari salinan tersebut.
* 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''. Namun, risiko kerusakan akibat refaktorisasi harus diperhitungkan.
Refaktorisasi kode duplikat dapat meningkatkan sejumlah metrik perangkat lunak, seperti mengurangi jumlah baris kode, kompleksitas siklomatik, dan ''coupling''.<ref>[https://refactoring.guru/refactoring/techniques Refactoring Techniques]. ''refactoring.guru''.</ref> Namun, risiko kerusakan akibat refaktorisasi harus diperhitungkan.


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


* Algoritma Baker
* Algoritma Baker<ref>[https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=a221ef2db03c492e597c12b28e15e18878f6d031 Wayback Machine]. ''citeseerx.ist.psu.edu''.</ref>
* Pencarian string Rabin–Karp
* Pencarian string Rabin–Karp<ref>[https://www.programiz.com/dsa/rabin-karp-algorithm Rabin-Karp Algorithm]. ''www.programiz.com''.</ref>
* Penggunaan ''abstract syntax trees''
* Penggunaan ''abstract syntax trees''<ref>Stephanie Rusdianto. [https://journal.ithb.ac.id/index.php/telematika/article/view/236 Penerapan Abstract Syntax Tree dan Algoritma Damerau-Levenshtein Distance untuk Mendeteksi Plagiarisme pada Berkas Source Code]. ''Jurnal Telematika''. 2019-02-05. Vol. 13 (2). hlm. 105–110. doi:10.61769/telematika.v13i2.236.</ref>
* Deteksi klon visual
* Deteksi klon visual<ref>Matthias Rieger. [https://dl.acm.org/doi/10.5555/646778.704176 Visual Detection of Duplicated Code]. ''Workshop ion on Object-Oriented Technology''. Springer-Verlag. 1998-07-20. hlm. 75–76. doi:10.5555/646778.704176. ISBN 978-3-540-65460-5.</ref>
* Deteksi klon matriks hitung
* Deteksi klon matriks hitung<ref>Xiliang Chen. [https://dl.acm.org/doi/10.5555/2667473.2667486 A replication and reproduction of code clone detection studies]. ''Proceedings of the Thirty-Seventh Australasian Computer Science Conference - Volume 147''. Australian Computer Society, Inc. 2014-01-20. hlm. 105–114. doi:10.5555/2667473.2667486. ISBN 978-1-921770-30-2.</ref><ref>Yang Yuan. [https://doi.org/10.1109/apsec.2011.13 CMCD: Count Matrix Based Code Clone Detection]. ''2011 18th Asia-Pacific Software Engineering Conference''. IEEE. 2011-12. doi:10.1109/apsec.2011.13.</ref>
* ''Locality-sensitive hashing''
* ''Locality-sensitive hashing''<ref>[https://www.pinecone.io/learn/series/faiss/locality-sensitive-hashing/ Locality Sensitive Hashing (LSH): The Illustrated Guide Pinecone]. ''www.pinecone.io''.</ref>
* ''Anti-unification''
* ''Anti-unification''<ref>Peter Bulychev. [http://syrcose.ispras.ru/2008/files/22_paper.pdf Duplicate Code Detection Using Anti-Unification]. 2008. doi:10.15514/SYRCOSE-2008-2-22.</ref>


== Contoh Kode Duplikat ==
== Contoh Kode Duplikat ==
Berikut adalah contoh kode duplikat untuk menghitung rata-rata elemen dalam sebuah array:Kode tersebut dapat disederhanakan menjadi satu fungsi:Penggunaan fungsi ini menghasilkan kode sumber yang lebih bersih dan bebas dari duplikasi: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.
Berikut adalah contoh kode duplikat untuk menghitung rata-rata elemen dalam sebuah array:<syntaxhighlight lang="c">
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;
</syntaxhighlight>Kode tersebut dapat disederhanakan menjadi satu fungsi:<syntaxhighlight lang="c">
int calc_average_of_four(int* array) {
    int sum = 0;
    for (int i = 0; i < 4; i++)
        sum += array[i];
    return sum / 4;
}
</syntaxhighlight>Penggunaan fungsi ini menghasilkan kode sumber yang lebih bersih dan bebas dari duplikasi:<syntaxhighlight lang="c">
extern int array1[];
extern int array2[];
 
int average1 = calc_average_of_four(array1);
int average2 = calc_average_of_four(array2);
</syntaxhighlight>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 ==
== Lihat pula ==
* [[Deduplikasi data]]
* [[Deduplikasi data]]
* [[Redundansi data]]
* [[Redundansi data]]
Baris 53: Baris 78:


== Referensi ==
== Referensi ==
 
<references />
 


== Sumber dan atribusi ==
== Sumber dan atribusi ==


Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Duplikasi+kode&oldid=26762664 Wikipedia bahasa Indonesia], revisi 26762664 (2025-01-07T00:31:33Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Duplikasi+kode&oldid=26762664 Wikipedia bahasa Indonesia], revisi 26762664 (2025-01-07T00:31:33Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->

Revisi terkini sejak 23 Agustus 2026 10.23

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:<syntaxhighlight lang="c"> 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; </syntaxhighlight>Kode tersebut dapat disederhanakan menjadi satu fungsi:<syntaxhighlight lang="c"> int calc_average_of_four(int* array) {

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

} </syntaxhighlight>Penggunaan fungsi ini menghasilkan kode sumber yang lebih bersih dan bebas dari duplikasi:<syntaxhighlight lang="c"> extern int array1[]; extern int array2[];

int average1 = calc_average_of_four(array1); int average2 = calc_average_of_four(array2); </syntaxhighlight>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.
  2. E Juergens. Code Similarities Beyond Copy & Paste. 2010 14th European Conference on Software Maintenance and Reengineering. IEEE. 2010-03. hlm. 78–87. doi:10.1109/csmr.2010.33.
  3. Refactoring Techniques. refactoring.guru.
  4. Wayback Machine. citeseerx.ist.psu.edu.
  5. Rabin-Karp Algorithm. www.programiz.com.
  6. Stephanie Rusdianto. Penerapan Abstract Syntax Tree dan Algoritma Damerau-Levenshtein Distance untuk Mendeteksi Plagiarisme pada Berkas Source Code. Jurnal Telematika. 2019-02-05. Vol. 13 (2). hlm. 105–110. doi:10.61769/telematika.v13i2.236.
  7. Matthias Rieger. Visual Detection of Duplicated Code. Workshop ion on Object-Oriented Technology. Springer-Verlag. 1998-07-20. hlm. 75–76. doi:10.5555/646778.704176. ISBN 978-3-540-65460-5.
  8. Xiliang Chen. A replication and reproduction of code clone detection studies. Proceedings of the Thirty-Seventh Australasian Computer Science Conference - Volume 147. Australian Computer Society, Inc. 2014-01-20. hlm. 105–114. doi:10.5555/2667473.2667486. ISBN 978-1-921770-30-2.
  9. Yang Yuan. CMCD: Count Matrix Based Code Clone Detection. 2011 18th Asia-Pacific Software Engineering Conference. IEEE. 2011-12. doi:10.1109/apsec.2011.13.
  10. Locality Sensitive Hashing (LSH): The Illustrated Guide Pinecone. www.pinecone.io.
  11. Peter Bulychev. Duplicate Code Detection Using Anti-Unification. 2008. doi:10.15514/SYRCOSE-2008-2-22.

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 26762664 (2025-01-07T00:31:33Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.