Working with Microsoft Visual Studio 2005 Team System (정보문화사 2006, Richard Hundhausen 저, 안재우 역)에서 일부 발췌해서 요약한 슬라이드입니다. Team System이 많이 쓰이긴 하는 것 같지만, 아직 Unit Test, Static Analysis 등은 그렇게 많이 쓰이질 않는 듯한데, 매우 유용하고 좋은 도구인 것 같습니다.
메서드를 작성할 때에, Argument가 다 정상적으로 들어올거라고 가정해서는 절대로 안 된다. 반드시 다음과 같이 Validation 코드를 작성해서, 메서드의 가장 위에 둘 필요가 있다.
1. Argument 가 null인지 검사해서, null이라면 NullArgumentException을 던져야 한다. 아래 코드는 .NET Framework의 System.Windows.Annotations.Annotation 클래스의 WriteXml메서드의 가장 윗부분 코드이다.
public void WriteXml(XmlWriter writer) { if (writer == null) { throw new ArgumentNullException("writer"); } }
2. 각 argument값 자체의 이상 유무를 검사한다. 기본적인 string 이라면, 전에 올렸던 글처럼 IsNullOrEmpty 메서드를 써서 검사하고, 다른 type이라면.. -_-;; 다양한 것을 다 여기서 다루기는 힘드므로.. 일단 적절하게 검사한다. 아래 예제는 위에서도 사용한 System.Windows.Annotations.Annotation 클래스의 WriteXml메서드의 일부분인데, 넘어온 XML의 내부 스트링들을 IsNullOrEmpty메서드로 검사해서, 없을 경우 채워넣는 코드이다.
if (string.IsNullOrEmpty(writer.LookupPrefix("http://schemas.microsoft.com/windows/annotations/2003/11/core"))) { writer.WriteAttributeString("xmlns", "anc", null, "http://schemas.microsoft.com/windows/annotations/2003/11/core"); } if (string.IsNullOrEmpty(writer.LookupPrefix("http://schemas.microsoft.com/windows/annotations/2003/11/base"))) { writer.WriteAttributeString("xmlns", "anb", null, "http://schemas.microsoft.com/windows/annotations/2003/11/base"); } }
위 문서에서 제시하는 해결책은 다음과 같다. 1. Visual Studio 2003으로 개발한다 2. IIS 웹 사이트 속성에서 Mime Type에 확장자 tmp, 타입 text/plain 을 하나 추가한다. 비주얼 스튜디오 2002가 웹 프로젝트를 열기 전에 테스트할 목적으로 .tmp파일을 하나 생성해서 거기에 Request를 보내는데 IIS 6.0에서는 명시적으로 Mime Type에 추가시키지 않으면 블록을 해버린다고 한다. 나는 이 방법으로 해결했다. 3. 위 문서에 링크되어 있는 핫픽스를 설치한다.
아마도 나와 같은 특수한 경우가 아니라면 - 사실 나도 Windows 2003을 쓰고 있어서 그랬지만, 원래 우리 회사 솔루션의 예전 버전은 Windows 2000에 설치하는 것이 원칙이다 - 이런 문제를 만날 일이 없을 지도 모르겠다. 하지만 혹시라도 이런 일이 있다면, 참고하시길 바란다.
디자인 규칙은 클래스 라이브러리 디자인 가이드라인에 따르는 지를 검사하는 규칙들의 모음이다. 닷넷의 기본적인 사상에 부합되는 클래스, 인터페이스, 예외 처리 등의 디자인이 되었는지(예:CA1020 형식이 부족한 네임스페이스를 사용하지 마십시오), .NET Class Library에서 적용된 기본적인 설계 원칙들을 따르고 있는 지(예: CA1056 Uri 속성은 문자열이면 안 됩니다), .NET Framework의 기본적인 규칙을 따로 있는지(예:CA2210 어셈블리에는 올바른 강력한 이름을 사용해야 합니다) 등을 검사하는 것이라고 할 수 있다.