2009-03-05 69 views
6

Tôi có một ứng dụng C# với Visual Studio 2005. Mã có khoảng 300 KLOC, đã bị lạm dụng hơn 3 năm.Dọn dẹp mã không mong muốn C#

Khi tôi đã đi qua mã phát hiện ra rằng rất nhiều chức năng/phương pháp/tài sản không sử dụng. Không thể xóa mã theo cách thủ công (Yêu cầu kiểm tra từng thành viên và nếu không tìm thấy tài liệu tham khảo nào xóa nó.)

Tôi đang tìm cách tự động hóa quy trình này, bởi macro VS, sẽ đi qua từng thành viên trong mã, nếu có không có bất kỳ tài liệu tham khảo nó nên xóa nó, nếu tìm thấy bất kỳ tài liệu tham khảo, kiểm tra tài liệu tham khảo của thành viên gọi điện thoại của nó nếu gọi thành viên, không có bất kỳ tài liệu tham khảo cần xóa cả hai và như vậy.

Tôi chắc chắn một số người sẽ bị nứt trước đó.

+1

Hy vọng rằng, ứng dụng không sử dụng phản chiếu cho các phương thức gọi. – kenny

Trả lời

13

Resharper có chức năng Mã sạch và cung cấp dấu hiệu khá tốt về các phương thức/lớp học nào không được sử dụng.

+0

Tôi không chắc liệu nó có tự động hay không ... nhưng Resharper cho biết một phương thức có bất kỳ tham chiếu nào không. –

4

Bạn có thể truy vấn cơ sở mã của mình bằng NDepend sử dụng CQL để tìm hiểu phương thức và lớp học nào không được sử dụng.

+0

NDepend sẽ giúp bạn hiểu rõ hơn về codebase bằng cách cung cấp cho bạn thông tin về hầu hết các loại được sử dụng, phụ thuộc giữa các loại, phụ thuộc trực tiếp và gián tiếp, độ phức tạp được đo của các loại và phương pháp, v.v. – flq

0

Sử dụng lại hình ảnh thu nhỏ lần đầu tiên như cách khác đã đề xuất.

Resharper giả định phương pháp công cộng được sử dụng ở đâu đó bởi một hội đồng bên ngoài, ngay cả khi họ không, vì vậy tìm kiếm và thay thế "công khai" với "tư nhân" và biên dịch lại.

4

Cẩn thận với mã được gọi thông qua phản chiếu. Rất nhiều công cụ tái cấu trúc sẽ gắn cờ mã này khi không được truy cập khi thực tế là chúng.

An toàn nhất là chạy thử nghiệm đơn vị của bạn (bạn đã có những quyền này?) Trước và sau khi tái cấu trúc để đảm bảo rằng mọi thứ vẫn hoạt động.

0

Tôi đã sử dụng Gendarme (như FxCop) để xác định mã nào không được gọi. AFAIK nó không thể được tự động, nhưng ít nhất bạn không cần phải đi từng dòng.

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