2011-12-13 45 views
9

Tôi đang làm việc trên hệ thống SQL Server 2005 với nhiều mã được sao chép, nhiều phép tính lặp lại thay vì hàm, nhiều quy trình được lưu trữ chỉ khác nhau một chút thay vì được tham số hóa. Cũng rất nhiều gói SSIS rất giống nhau.Công cụ phát hiện mã sao chép/dán trong TSQL?

Di chuyển về phía trước, tôi muốn có thể phát hiện loại "mùi mã" này. Có rất nhiều công cụ xung quanh cho điều này, nhưng tôi đã không tìm thấy bất cứ điều gì cho SQL.

Bất kỳ ý tưởng nào về sản phẩm để sử dụng hoặc thực tiễn tốt nhất để áp dụng liên quan đến mã sao chép/dán trong TSQL?

Rất cám ơn ...

EDIT: Cảm ơn tất cả các phản hồi. Tôi chọc xung quanh với một vài người trong số họ, nhưng một trong đó trông đơn giản nhất và dễ sử dụng dường như là Atomiq. Tôi đã phải xuất khẩu tất cả các đối tượng của tôi vào tập tin .sql, sau đó đã phải sử dụng một tập tin thực thi để đổi tên tất cả các tập tin với phần mở rộng .sql to .cs vì nó không sử dụng .sql. Tuy nhiên, tôi đã nhận được một số thông tin tốt về các vấn đề lớn với mã của chúng tôi.

+1

hãy cẩn thận với những gì bạn thay đổi. Nếu bạn đang thực sự làm việc trên một hệ thống được xây dựng bởi một hack bạn sẽ không phá vỡ bất cứ điều gì. Tuy nhiên, nếu hệ thống được thực hiện bởi một người nào đó thực sự tốt, thì bạn có thể phá vỡ rất nhiều kế hoạch truy vấn tốt! –

Trả lời

7

Bạn có một vài cho mục đích đó:

  • Atomiq - thương mại
  • Black Duck Suite - thương mại (phần mềm phân tích bộ)
  • CloneDR - thương mại (Ada, C, C++, C#, Java, COBOL, Fortran, Python, VB.net, VB6, PHP4/5, PLSQL, SQL2011, XML, nhiều thứ khác)
  • ConQAT (Nguồn mở, hỗ trợ: ABAP, ADA, Cobol , C/C++, C#, Java, PL/I, PL/SQL, Python, Text, Transact SQL, Visual Basic, XML)
  • Simian (phần mềm)
4

Bạn có thể thử chạy Simian. Nó là một công cụ hỗ trợ nhiều ngôn ngữ (bao gồm cả SQL)

+0

Công cụ tìm kiếm tuyệt vời đó. +1 – gbn

1

Một công cụ đóng gói sẵn có lẽ sẽ là/Cách đơn giản nhất nhanh nhất để đạt được điều đó, nhưng là một cách để có được ở đó với điểm của hacker tối đa và niềm vui tối đa sẽ được chạy một Levenshtein distance algorithm chống lại các mã thủ tục lưu trữ trong cơ sở dữ liệu, có thể dễ dàng được truy cập bằng:

SELECT OBJECT_NAME(OBJECT_ID) as ProcName, 
     OBJECT_DEFINITION(OBJECT_ID) as ProcCode 
FROM sys.procedures 

Here is one example của một người nào đó thực hiện các thuật toán trong T-SQL.

Tất nhiên, bạn cũng cần phải lặp qua tất cả các procs và so sánh chúng một-một bao gồm tất cả các kết hợp, và sau đó cụm kết quả.

Tôi thực sự có thể tự mình thử, chỉ để đá!

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