2009-04-29 27 views
11

Gần đây tôi đã làm việc thông qua một thiết kế mã hóa, tái cấu trúc và cải tiến chung để tăng mức độ phù hợp. Ngoài ra, trong một vài tập tin tôi đã loại bỏ dư thừa bằng cách sử dụng báo cáo, phương pháp di chuyển để chức năng tương tự là gần nhau, thêm khu vực vv nhưng không thực sự thay đổi chức năng của mã trong tập tin.Có công cụ hợp nhất nào để kiểm soát nguồn hiểu mã không?

Trong khi đó, các nơi khác trong nhóm các nhà phát triển khác đang sửa lỗi và thay đổi dòng mã ở đây và ở đó. Rõ ràng khi nói đến sáp nhập này có thể là một vấn đề vì số dòng không còn phù hợp và các phương pháp có thể đã di chuyển.

Bây giờ, tôi hiểu quy tắc chung trong môi trường được kiểm soát nguồn có thể là một điều nguy hiểm để di chuyển các phương pháp xung quanh và chúng tôi quyết định lợi ích vượt quá chi phí. Những gì tôi không hiểu tuy nhiên là lý do tại sao nó phải theo cách này.

Nói rằng tập tin ban đầu của tôi là một máy tính đơn giản:

public class Calculator 
{ 
    public int Subtract(int a, int b) 
    { 
     return a + b; 
    } 

    public int Add(int a, int b) 
    { 
     return a + b; 
    } 
} 

Và tôi quyết định rằng tôi muốn các phương pháp để được tự chữ cái:

public class Calculator 
{ 
    public int Add(int a, int b) 
    { 
     return a + b; 
    } 

    public int Subtract(int a, int b) 
    { 
     return a + b; 
    }   
} 

Trong khi nhà phát triển khác sửa lỗi trong phương pháp trừ

public class Calculator 
{ 
    public int Subtract(int a, int b) 
    { 
     return a - b; 
    } 

    public int Add(int a, int b) 
    { 
     return a + b; 
    } 
} 

Công cụ hợp nhất chuẩn có thể yêu cầu bạn phải hợp nhất thủ công có hai tệp, nhưng một tệp đã hiểu chức năng của mã sẽ dễ dàng có thể điều chỉnh hai thay đổi này. Điều tương tự cũng áp dụng cho việc xóa hoặc thêm các phương thức, nhận xét, vùng hoặc sử dụng câu lệnh khác. Vì vậy, để (cuối cùng!) Nhận được câu hỏi: Có bất kỳ công cụ hợp nhất nào có hiểu biết thông minh về chức năng của mã và có thể hợp nhất hai tệp ở trên mà không cần bất kỳ sự can thiệp nào của con người không? Không. Nếu không, tai sao không? Có bất kỳ biến chứng nào khiến cho vấn đề này không thể giải quyết được (dĩ nhiên là hiểu nó không đơn giản như tôi ngụ ý - nhưng không thể vì một lý do nào đó mà tôi không thể thấy?)

Tôi sử dụng C# trong mã nguồn của tôi và rất thích một cái gì đó mà làm việc với điều đó, nhưng tôi quan tâm đến việc nếu điều này tồn tại bất cứ nơi nào trong thế giới của lập trình ...


tôi đã thực sự lo ngại về độ dài của câu hỏi này, nhưng đã chỉnh sửa để thêm cách tôi mong đợi hệ thống nguồn thông minh hoạt động:

Khi tệp máy tính ban đầu được chọn trong hệ thống sẽ p ass tập tin và tạo ra một hệ thống các lớp:

File: Calculator.cs 
| 
|--Class[0]: Calculator 
    | 
    |--Method[0]: Subtract 
     | 
     |--Line[0]: return a + b; 
    | 
    |--Method[1]: Add 
     | 
     |--Line[0]: return a +b; 

(Với dòng thêm vào đó cho niềng răng vv ...)

Khi tôi kiểm tra trong mã của tôi (làm cho các phương pháp tự chữ cái) nó cập nhật phân cấp ở trên để Subtract trở thành Method [1] và Add trở thành Method [0].

Nhà phát triển thứ hai kiểm tra mã của anh ta (rõ ràng là hệ thống kiểm soát nguồn biết dựa trên bản gốc) và thông báo thay đổi cho dòng đầu tiên bị trừ. Bây giờ, thay vì tìm dòng đó theo số dòng trong tệp tổng thể, nó biết rằng nó có thể tìm thấy nó một Calculator.cs/Calculator/Subtract/0 và thực tế là phương thức đã thay đổi vị trí không quan trọng, nó vẫn có thể làm cho hợp nhất công việc.

+0

Điều gì sẽ là kết quả của việc hòa giải "tự động"? Vấn đề là không hiểu ngôn ngữ nhiều như hiểu được ý định của các lập trình viên - và điều đó sẽ cần đến thần giao cách cảm! –

+0

Tôi có thể nghĩ rằng một hệ thống hiểu được chức năng của mã và có thể tách biệt khỏi bố cục sẽ thấy rằng thay đổi đầu tiên hoàn toàn là bố cục để áp dụng cho bố cục tệp và thay đổi thứ hai hoàn toàn là chức năng. với phương thức mà sự thay đổi chức năng diễn ra, bất kể phương thức đó có thể ở đâu. –

+0

Nghi ngờ của tôi là một con thú như vậy không tồn tại, nhưng tôi rất muốn thấy một số câu trả lời khác. Tôi có cảm giác rằng một hệ thống như vậy sẽ giáp với AI và sẽ dẫn đến SkyNET VCS. ;) –

Trả lời

3

Tôi nghĩ rằng Source Code in Database là một câu trả lời tiềm năng cho câu hỏi của bạn. Ý tưởng chung là bạn không có tập tin phiên bản, bạn có khối mã phiên bản. Hệ thống phiên bản biết về mã DOM và cho phép bạn truy vấn mã DOM để kiểm tra các chức năng, lớp học, những gì bạn có, để chỉnh sửa, biên soạn, v.v.

Do thứ tự của các phương thức không không nhất thiết phải quan trọng, chúng không được lưu trữ trong Cơ sở dữ liệu với bất kỳ thứ tự nào trong tâm trí. Khi bạn kiểm tra lớp học, bạn có thể chỉ định thứ tự mà bạn thích nhất (theo thứ tự chữ cái, công cộng/được bảo vệ/riêng tư, v.v.). Những thay đổi duy nhất quan trọng là những thay đổi giống như nơi bạn chuyển đổi + thành -. Bạn sẽ không có xung đột do sắp xếp lại các phương thức.

Thật không may, SCID vẫn còn rất trẻ và không có nhiều công cụ ngoài đó cho nó. Tuy nhiên, nó là một sự tiến hóa khá thú vị trong cách xem và chỉnh sửa mã.

Edit:Here's another reference for SCID

+0

Cảm ơn các liên kết, trông giống như ý tưởng đúng đắn và vui nhộn khi tôi đang viết "Với thêm dòng trong đó cho niềng răng vv ..." trong chỉnh sửa của tôi ở trên tôi thực sự nghĩ "Vít niềng răng, hãy để hệ thống kiểm soát nguồn thêm chúng và kết thúc cuộc chiến tab/không gian "nhưng không muốn phát tán sự cố. Rất vui khi thấy rằng chúng tôi đang hướng đến cách đó ngay cả khi chúng tôi chưa hoàn toàn ở đó. –

4

cách tiếp cận của chúng tôi với nhựa SCM vẫn còn xa mới là "hoàn thành", nhưng nó đã được phát hành và có thể giúp trong loại tình huống. Hãy xem Xmerge. Tất nhiên, phản hồi sẽ được hoan nghênh hơn và sẽ cấp một số giấy phép miễn phí ;-)

+2

Có vẻ tốt, mặc dù rõ ràng không phải 100% chức năng mà tôi đã hy vọng (chưa). Công cụ hợp nhất có sẵn riêng không? Rất tiếc, tôi không có quyền tổ chức thay đổi hoàn toàn hệ thống SCM nơi tôi làm việc, nhưng phiên bản dành cho máy tính để bàn của chức năng XMerge đó có thể rất tiện dụng. –

+0

Thông thường không, nhưng thả chúng tôi một dòng tại email hỗ trợ của chúng tôi (hỗ trợ tại codicesoftware.com) và chúng tôi sẽ nói về nó – pablo

+0

Và cũng có thể kiểm tra này: http://codicesoftware.blogspot.com/2010/07/xmerge-to -merge-refactored-code.html, nó là Xmerge mới của chúng tôi với sự hỗ trợ tái cấu trúc tốt hơn. Hy vọng bạn thích nó! – pablo

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