Saya tidak berbicara tentang alat diff. Saya benar-benar ingin melihat apakah suatu proyek berisi kode yang mungkin telah "dire-refactored" dari proyek lain. Kemungkinan nama fungsi, nama variabel, dan yang lainnya akan diubah. Kondisional mungkin dibalik, dll.
tools
comparison
Tamara Wijsman
sumber
sumber
Jawaban:
Ketika saya mengajar rekayasa perangkat lunak, saya menggunakan layanan (gratis) di Stanford yang disebut MOSS (Ukuran Kesamaan Perangkat Lunak). Ini memungkinkan saya untuk mendeteksi plagiarisme antara proyek siswa dengan sangat mudah. Sistem ini juga memungkinkan saya untuk memasukkan contoh kode "dikenal baik" yang telah saya gunakan selama kelas yang akan diabaikan.
Hal yang hebat (benar-benar masalah sampingan) tentang hasil yang muncul adalah bahwa kita dapat mengetahui siswa mana yang bekerja bersama --- bahkan jika mereka tidak secara terang-terangan menyalin kode, mereka membahas masalah cukup bahwa kode mereka mirip. Bagian yang menyedihkan adalah menemukan siswa aneh yang TIDAK MENDAPATKAN SIMULASI dengan kode lainnya. Mereka biasanya tidak melakukannya dengan baik.
sumber
Anda mungkin dapat menggunakan alat PMD untuk menemukan apa yang Anda cari. Ini dimaksudkan untuk mendeteksi potong dan rekatkan dalam basis kode tetapi jika Anda menyertakan sumber proyek asal yang dicurigai dapat membantu Anda melihat di mana kode disalin dari itu.
sumber
Hal terdekat yang saya tahu dari apa yang Anda cari adalah Clone Detective. Ini adalah plug-in Visual Studio.
sumber
Kedengarannya Anda ingin menghitung perbedaan antara dua pohon sintaksis abstrak (AST), jadi Anda mungkin tertarik dengan alat Smart Differencer .
Ditemukan di https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff .
sumber
Bahkan jika Anda tidak berbicara tentang alat diff, Anda masih dapat menggunakannya untuk ini, setidaknya sampai batas tertentu. Jika saya melihat dua bagian kode yang terlihat mirip, misalnya, saya sering menempelkan keduanya ke BeyondCompare untuk melihat berapa banyak pekerjaan yang akan disederhanakan dengan refactoring fungsi umum keluar.
Di sisi lain, jika Anda tidak tahu di mana kode yang sama, tetapi Anda hanya bertanya-tanya apakah ada di suatu tempat ... apa yang Anda cari? Alat otomatis untuk mendeteksi plagiarisme? Saya tidak yakin ada hal seperti itu.
sumber
Artikel ini pada wikipedia tentang subjek juga mencakup tautan ke beberapa alat yang dapat digunakan untuk menemukan kode yang sama atau duplikat. Kami memiliki alat internal untuk ini, jadi saya tidak terbiasa dengan alat eksternal yang disebutkan dalam artikel.
sumber
Apa yang benar-benar ingin Anda lakukan adalah melihat apakah ada kode yang dikloning (disalin) di kedua proyek (kedua proyek yang terdiri dari set file yang mungkin besar). Anda dapat melakukan ini dengan menjalankan alat deteksi kloning. Wikipedia mencantumkan beragamnya.
Untuk memutuskan secara kasar jika ada banyak penyalinan, Anda hanya perlu mencocokkan baris sumber, dan ada berbagai detektor klon sumber-garis yang tepat di luar sana. Saya percaya PMD adalah salah satunya. Yang tidak akan dilakukan adalah menemukan kode yang disalin-tempel-edit; mereka akan menemukan kode copy-paste-tidak-berubah boilerplate kemungkinan melilit copy-past-diedit hal-hal.
Jika Anda ingin melihat detail dari penyalinan untuk copy-past-edit kode, Anda memerlukan detektor klon yang menemukan klon "parameter". Detektor berbasis token melakukan ini untuk pengeditan yang menggantikan hanya nama variabel atau konstanta.
Detektor berbasis pohon abstrak-sintaksis (AST) melakukan ini untuk pengeditan yang melibatkan potongan yang lebih besar, seperti ekspresi, pernyataan, penyisipan, penghapusan, dll. Yang terakhir ini cenderung memberikan jawaban yang lebih baik, karena tidak seperti detektor token, mereka dapat menggunakan struktur bahasa kode sumber komputer sebagai panduan.
Alat CloneDR kami adalah pendeteksi semacam itu.
Saya tidak tahu alat yang benar-benar akan menemukan kode "setara" (kondisional terbalik), dll. Para peneliti telah membangun detektor klon yang melakukan sesuatu seperti ini, tetapi kombinatorik membuat ini sangat mahal untuk dieksekusi, dan prototipe penelitian berskala buruk.
sumber
Saya sangat suka bagaimana CCFinderX memvisualisasikan kesamaan, jadi Anda mungkin ingin memeriksanya juga. Mendukung beberapa bahasa, gratis dan cukup mudah diatur (Python 2.6).
sumber