2012-06-06 34 views
14

Tôi đang tìm kiếm một công cụ có thể so sánh mã nguồn tương tự.Máy phát hiện mã tương tự

Hiện tại, chúng tôi có một hệ thống rất nhỏ, có số lượng dương tính giả lớn và những mặt tích cực thực sự có thể dễ dàng bị chôn vùi trong đó.

yêu cầu của tôi là:

  • lượng một cách hợp lý nhỏ dương tính giả
  • tỷ lệ phát hiện tốt (yeah những đang đi với nhau)
  • lý tưởng với một đầu ra phức tạp hơn chỉ là một giá trị duy nhất
  • có thể sử dụng cho C (C99) và C++ (C++ 03 và tối ưu C++ 11)
  • vẫn được duy trì
  • có thể sử dụng cho đồng mparing hai tập tin nguồn với nhau
  • khác có thể sử dụng trong chế độ không tương tác

EDIT:

Để tránh nhầm lẫn, hai đoạn mã sau đây là giống hệt nhau và cần được phát hiện như vậy:

for (int i = 0; i < 10; i++) { bla; }

int i; while (i < 10) { bla; i++; }

cùng ở đây:

int x = 10; y = x + 5;

int a = 10; y = a + 5;

+1

Khác biệt có đáp ứng một số nhu cầu của bạn không? –

+1

@HighPerformanceMark LOL, không phải vậy. –

+2

có vẻ như bạn muốn một công cụ so sánh sự giống nhau về ngữ nghĩa của 2 mã, chứ không phải là cú pháp. Tôi nghi ngờ rằng đây là một vấn đề chưa được giải quyết và rằng SO sẽ đấu tranh để tìm một giải pháp thỏa đáng cho bạn. Tôi nghĩ rằng, như được viết, câu hỏi ban đầu của bạn sẽ đánh lừa rất nhiều độc giả cũng giống như nó đã lừa dối tôi. Tôi cũng nghĩ rằng bạn nên viết lại nó hoàn toàn để nêu rõ loại so sánh mà bạn quan tâm. –

Trả lời

15

Tôi đã sử dụng MOSS trong quá khứ: http://theory.stanford.edu/~aiken/moss/ để phát hiện mã đạo văn. Kể từ khi nó hoạt động trên một mức độ ngữ nghĩa, nó sẽ phát hiện các tình huống bạn đã trình bày ở trên. Công cụ này nhận thức được ngôn ngữ, vì vậy các chú thích không được xem xét trong phân tích, và nó đi một chặng đường dài trong việc phát hiện mã đã được sửa đổi thông qua tìm kiếm và thay thế đơn giản các tên biến và/hoặc hàm.

Lưu ý: Tôi đã sử dụng công cụ này vài năm trước khi tôi dạy khoa học máy tính ở trường cấp hai và nó đã làm việc tuyệt vời khi phát hiện mã đã được rút ra từ internet. Đây là một tài khoản cũng như các tài liệu của ứng dụng tương tự: http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

Nếu bạn google "phần mềm đo lường sự tương đồng", bạn nên tìm một vài số truy cập hữu ích hơn: http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

+0

Dường như liên kết tới fie1012.org không còn hợp lệ. Bạn có thể cung cấp liên kết thay thế không? – Eric

+1

Hãy thử cái này: http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986

6

Sự cố của bạn trong Thuật ngữ khoa học máy tính có thể được nêu dưới dạng Mã nguồn Phát hiện đạo văn. Một khởi đầu tốt đẹp là đọc bài viết này trên Tiến sĩ Dobbs: Detecting Source-Code Plagiarism. Nó liệt kê các thuật toán để phát hiện đạo văn trong mã nguồn.

Lưu ý: Những gì bạn đã yêu cầu thực sự là một vấn đề khó khăn tính toán :)

1

Bạn có thể thử duplo. Nó sẽ tìm thấy các dòng phổ biến. Nó có một số khả năng bỏ qua các thay đổi khoảng trắng, nhưng không phát hiện mã với các biến được đổi tên, vì vậy nó là một trợ giúp dọn dẹp nhiều hơn một sự trợ giúp khi phát hiện đạo văn.

1

Tôi bắt đầu sử dụng JPLAG (https://github.com/jplag/jplag) để kiểm tra sự giống nhau về mã và so sánh sinh viên hoạt động trong các tệp Java và văn bản. Nó hoạt động tốt để kiểm tra cấu trúc mã giống nhau và thay thế biến.

Các vấn đề liên quan