2009-03-27 10 views
9

Có ai có kinh nghiệm giới thiệu FxCop với mã cũ không? Chúng tôi muốn xây dựng không thành công nếu bất kỳ ai giới thiệu mã vi phạm quy tắc. Nhưng trong thời gian này, điều này là không thể, vì mã di sản có hơn 9000 hành vi vi phạm.Bạn bắt đầu với FxCop trên mã cũ như thế nào?

Cách duy nhất để chặn các lỗi mà tôi biết là thông qua thuộc tính SuppressMessage, nhưng chỉ hoạt động trên các phương thức và thuộc tính GeneratedCodeAttribute. Điều cuối cùng này có thể được sử dụng cho các lớp và các không gian tên (nếu tôi nhớ chính xác), nhưng không nên sử dụng cho mã không được sinh ra (xem here).

Hiện tại, chúng tôi dành một chút thời gian mỗi ngày để xóa vi phạm, nhưng những vi phạm mới tiếp tục được giới thiệu, vì bản dựng của chúng tôi sẽ không thành công.

Bất kỳ ý tưởng nào?

Trả lời

6

Tôi đã ở trong tình huống tương tự. Tôi bắt đầu sử dụng FxCop trên một dự án hiện tại một thời gian trước đây, và đã có khá một vài lỗi lúc đầu. Những gì tôi đã làm là tắt tất cả các quy tắc, sau đó bật một nhóm tại một thời điểm, giải quyết các lỗi như tôi đã đi.

Nhóm bảo mật và hiệu suất là một nơi tốt để bắt đầu - họ đã giúp tôi tìm ra các vấn đề mà tôi không biết trước đây. Một số quy tắc là chủ quan và có thể không áp dụng đầy đủ cho dự án của bạn, nếu có. Ví dụ, nếu quốc tế hóa không phải là một vấn đề, sau đó rời khỏi nhóm đó tắt. Nếu có các quy tắc cụ thể không áp dụng cho bạn, chẳng hạn như quy tắc đặt tên, thì hãy tắt chúng.

Nếu bạn quản lý để xóa bộ lỗi cho một quy tắc nhất định, bạn có thể đặt công trình không thành công nếu các quy tắc đó bị vi phạm trong tương lai. Vì vậy, không có lỗi mới nào sẽ xảy ra.

Nếu đó là một dự án có kích thước, chỉ cần đi quy tắc một lúc, xem xét mức độ liên quan/tầm quan trọng của quy tắc và sửa lỗi hoặc tắt quy tắc nếu không áp dụng .

2

Bắt đầu bằng cách tự hỏi mình điều này: Bạn có sẵn sàng và có thể thay đổi mã cũ để tuân thủ các quy tắc FxCop không? Hoặc để đặt nó một cách khác nhau: Đây có phải là cách tốt nhất để dành thời gian của bạn?

Nếu bạn sẵn sàng dành thời gian và công sức, hãy bắt đầu bằng cách chọn một số ít quy tắc bạn thấy quan trọng nhất đối với chất lượng tổng thể và thực hiện chúng. Nếu điều này hữu ích, bạn có thể thêm một vài quy tắc, sửa mã và v.v.

Theo kinh nghiệm của tôi, không có cách tiếp cận lớn nào để thực hiện các quy tắc FxCop và các loại tương tự. Cách duy nhất khả thi là để có những khối nhỏ tại một thời điểm.

+0

+1 Đồng ý, cắn quan trọng tại một thời điểm. –

2

Bạn có thể thêm ngoại lệ cho các vi phạm cũ trong dự án FxCop. Bằng cách đó, bạn sẽ không cần phải thêm bất kỳ thuộc tính nào vào mã hiện tại của mình và bạn sẽ nhận được cảnh báo về tất cả các vi phạm mới.

Để thực hiện điều đó, hãy tạo một dự án trong GUI FxCop, chạy phân tích với các quy tắc của bạn, sau đó trong giao diện kết quả, chọn vi phạm bạn muốn bỏ qua ngay bây giờ. Nhấp chuột phải và chọn "Loại trừ". Cảnh báo đã chọn sẽ chuyển sang tab "bị loại trừ trong dự án". Khi bạn đã sẵn sàng để lấy lại và sửa chúng, hãy chọn và nhấp vào "đánh dấu là đang hoạt động".

Các loại trừ này được lưu trữ trong tệp .FxCop.

Tuy nhiên, tôi khuyên bạn nên giới thiệu các quy tắc dần dần, để làm mịn đường cong học tập cho mọi người.

+0

Làm thế nào để bạn thực hiện điều này? Đây có phải là tùy chọn 'Không kích hoạt tin nhắn chống lại mã cũ mà sửa chữa là một thay đổi phá vỡ'? Dường như nó đã biến mất trong phiên bản beta FxCop 1.36 (mà chúng tôi đang sử dụng). Và làm thế nào để FxCop biết vi phạm nào là mới, và cái nào cũ? – Peter

+0

Tôi không thấy tùy chọn bạn đang nói về trong phiên bản FxCop của tôi (1.36 tôi tin). Đã thêm làm rõ về "Loại trừ trong dự án" để đăng. –

0

Làm thế nào về các phương pháp sau đây:

  1. Run FxCop với tất cả các quy tắc trên có liên quan cho dự án của bạn
  2. Lưu kết quả làm cơ sở
  3. Phát triển mã mới
  4. Run FxCop
  5. Xóa tất cả kết quả khỏi đường cơ sở

điều này sẽ dẫn đến kiểm tra fxcop trên mã mới của bạn ....