Microsoft FxCop

In: Programming

11 Feb 2009

팀 단위로 개발할 때는 전체 소스 코드에 걸쳐서 어떤 단일화된, 미리 협의된 규칙이 필요한데, 코드 리뷰를 통해서 할 수도 있지만, 아무래도 이런 걸 자동으로 체크해 주는 도구가 있으면 어떨까 하는 생각을 한 적이 있다. 만들어 보려고 시도해 본 적은 있지만 복잡도가 장난 아니라는 생각에 정규식 조합 툴 좀 만들다가 GG 쳤다. ㅋㅋ

그런데, 요즘 .NET 으로 개발해 보면서 Microsoft의 몰랐던 도구들을 몇 가지 알았다. 그 중의 하나가 FxCop이다.

FxCop

아쉽게도 Managed Language만 지원한다. 즉, Unmanaged C++(흔히 말하는 Native C++)는 지원하지 않는다. 아무래도 Managed Language(여기서는 C#)의 강력한 리플렉션 기능이 있기에, 이런 툴도 가능할 것이다.

예전에 생각한 건 단순한 코딩 컨벤션 정도이지만, 이 툴은 정말 다양한 내용을 체크한다.

네이밍 관련해서 잡힌 거 하나 보면,

RuleFile     : Naming Rules  (String)

Info         : “Do not use underscores when specifying identifiers.
Some generated Visual Studio identifiers for applications
contain underscore characters. Underscore characters
should generally be avoided in public identifiers.”

이름 붙일 때, _ (언더스코어) 쓰지 말라는 거다.

이벤트 핸들러 선언과 관련된 부분도 있다. 원문 중 설명 부분을 옮겨 보면

RuleFile     : Security Rules  (String)

Info         : “It appears that an event handler is externally visible
or that an EventArgs parameter is being exposed in
a visible method decorated with a security demand.
There can be problems exposing sensitive functionality
in an event handler function; the security demand might
not do what you expect.”

Security 관련 규칙 위반으로, 이벤트 핸들링을 처리하는 함수가 public으로 선언되어 있다는 것이다. FxCop에 선언된 규칙으로는 private으로 해야 한다.

대충 코딩 한 흔적(…)을 잡기 위한 규칙도 미리 정의 되어 있다.

RuleFile     : Design Rules  (String)

Info         : “You should not catch Exception or SystemException.
Catching generic exception types can hide run-time
problems from the library user, and can complicate
debugging. You should catch only those exceptions that
you can handle gracefully.”

예외 처리 귀찮아서(…) 그냥 Exception으로 몽땅 다 잡았더니 친절하게도 후딱 고치라고 알려 준다.

기본적으로 제공되는 룰 셋은 Microsoft 내부적으로 .NET Framework 개발 시에도 사용하는 듯 하다. .NET Framework에서 클래스 라이브러리(또는 애플리케이션)을 개발한다면, 이런 규칙을 지키는 것이 좋다라고 권고하고 있다. 아마도 이 기본 룰 셋은 Framework Design Guidelines에서 나온 내용들일 것이다.

모든 규칙을 다 지킬 필요는 없고, 필요한 것만 체크하도록 설정하고, 프로젝트에서 필요한 추가적인 규칙들은 새로 만들어서 쓰면 괜찮을 듯 하다. 만드는 방법은 한 번 찾아보고;;;

Comments are closed.

Categories