코드 메트릭 개요
업데이트: 2007년 11월
코드 메트릭은 개발자가 개발 중인 코드에 대해 더 정확히 파악할 수 있도록 하는 소프트웨어 측정 방법입니다. 코드 메트릭의 이점을 활용하면 개발자는 수정해야 하거나 더욱 철저하게 테스트해야 하는 형식 및/또는 메서드를 알 수 있습니다. 개발 팀에서는 소프트웨어를 개발하는 동안 잠재적인 위험을 파악하고, 프로젝트의 현재 상태를 이해하며, 진행 상황을 추적할 수 있습니다.
소프트웨어 측정
다음 목록에서는 Visual Studio에서 계산하는 코드 메트릭 결과를 보여 줍니다.
유지 관리 인덱스 – 코드 유지 관리 작업의 상대적인 편의성을 나타내는 0부터 100 사이의 인덱스 값을 계산합니다. 값이 크면 유지 관리 작업이 편리함을 의미합니다. 계산은 핼스테드 볼륨(Halstead Volume), 순환 복잡성 및 코드 줄 수를 기반으로 합니다. 색으로 구분된 등급을 사용하여 코드에서 문제가 있는 부분을 신속하게 식별할 수 있습니다. 녹색 등급은 20에서 100 사이이며 코드의 유지 관리 편의성이 양호함을 나타냅니다. 노랑 등급은 10에서 19 사이이며 코드의 유지 관리 편의성이 중간 정도임을 나타냅니다. 빨강 등급은 0에서 9 사이이며 유지 관리 편의성이 낮음을 나타냅니다.
순환 복잡성(Cyclomatic Complexity) – 코드 구조의 복잡성을 측정합니다. 순환 복잡성은 if 블록, switch case 및 do, while, foreach, for 루프 같은 프로그램의 흐름에서 서로 다른 코드 경로 수를 계산한 다음 합계에 1을 더해 생성합니다. 컨트롤의 흐름이 복잡한 프로그램에서 좋은 코드 검사 결과를 얻고 유지 관리 노력을 줄이려면 단위 테스트를 더 많이 수행해야 합니다.
상속 수준 – 클래스 계층 구조의 루트로 확장되는 클래스 정의의 수를 나타냅니다. 계층 구조가 복잡할수록 특정 메서드 및 필드가 정의되거나 재정의되어 있는 위치를 파악하기 어렵습니다. 클래스 수준의 경우 이 수는 상속 트리에서 0부터 시작하는 형식 위에 있는 형식의 수를 계산하여 생성하며 인터페이스는 제외됩니다. 네임스페이스 및 프로젝트 수준에서는 해당 네임스페이스 또는 프로젝트 내에 있는 모든 형식에 대해 가장 높은 상속 수준을 계산합니다.
클래스 결합 – 매개 변수, 지역 변수, 반환 형식, 메서드 호출, 제네릭 또는 템플릿 인스턴스화, 기본 클래스, 인터페이스 구현, 외부 형식에 정의된 필드, 특성 데코레이션 등을 통한 고유한 클래스의 결합을 측정합니다. int32, 문자열, 개체 같은 기본 및 기본 제공 형식은 계산에서 제외됩니다. 잘 설계된 소프트웨어에서는 형식과 메서드 간에 응집력은 높은 반면 결합력은 낮습니다. 결합력이 높으면 다른 형식에 대한 상호 종속성이 크기 때문에 다시 사용하거나 유지 관리하기가 어렵습니다.
코드 줄 수 – 대략적인 코드의 줄 수를 나타냅니다. 이 수는 IL 코드를 기초로 계산되므로 소스 코드 파일의 줄 수와 정확히 일치하지는 않습니다. 공백, 주석, 괄호와 멤버, 형식, 네임스페이스 선언은 계산에서 제외됩니다. 이 수치가 매우 높으면 형식 또는 메서드의 작업 부하가 너무 크므로 서로 분리해야 할 수 있습니다. 형식이나 메서드를 유지 관리하기 어려울 수도 있습니다.
무명 메서드
무명 메서드는 이름이 없는 메서드입니다. 무명 메서드는 코드 블록을 대리자 매개 변수로 전달할 때 가장 자주 사용됩니다. 메서드나 접근자처럼 멤버에서 선언되는 무명 메서드의 메트릭 결과는 메서드를 선언하는 멤버와 연결됩니다. 메서드를 호출하는 멤버와는 연결되지 않습니다.
코드 메트릭의 무명 메서드 처리 방법에 대한 자세한 내용은 무명 메서드 및 코드 분석을 참조하십시오.
생성된 코드
일부 소프트웨어 도구 및 컴파일러는 프로젝트에 추가되는 코드 및 프로젝트 개발자가 보거나 변경할 수 없는 코드를 생성합니다. 대부분의 경우 코드 메트릭에서 메트릭 값을 계산할 때는 생성된 코드를 무시합니다. 그러면 메트릭 값에 개발자가 보고 변경할 수 있는 코드가 반영됩니다.
Windows Forms에 대해 생성된 코드는 개발자가 보고 변경할 수 있는 코드이므로 무시되지 않습니다.
코드 메트릭 결과 창
Visual Studio에서 코드를 분석하면 코드 메트릭 결과 창에 그 결과가 표시됩니다. 이 창에는 맨 위에 도구 모음이 있고 계산된 결과가 표시되는 열이 있습니다.
계층 구조 열에는 코드 계층 구조를 나타내는 트리 뷰가 있습니다. 이 계층 구조를 확장하거나 축소하여 필요한 세부 수준을 표시할 수 있습니다. 나머지 열에는 계산된 결과가 표시됩니다. 필요에 따라 결과 열을 숨기거나 정렬할 수 있습니다. 자세한 내용은 방법: 열 추가, 제거 또는 다시 정렬을 참조하십시오.
유지 관리 열에는 아이콘과 숫자로 된 결과가 있습니다. 녹색 아이콘은 유지 관리의 편의성이 상대적으로 높음을 나타냅니다. 노란색 아이콘은 유지 관리의 편의성이 보통임을 나타냅니다. 빨간색 아이콘은 유지 관리의 편의성이 낮고 문제가 될 가능성이 있음을 나타냅니다. 이러한 색 표시기는 FxCop 규칙 AvoidUnmaintainableCode에 사용되는 심각도 범주에 해당합니다. 이 규칙은 유지 관리 인덱스가 10 미만이면 오류를, 인덱스가 10에서 20 사이이면 경고를 발생시키고, 인덱스가 20 이상이면 오류나 경고를 발생시키지 않습니다. 유지 관리 인덱스는 순환 복잡성, 코드 줄 및 계산 복잡성이라는 세 가지 메트릭을 합성한 것으로, 해당 값은 단위로 표시되지 않습니다.
창에서 열을 기준으로 결과를 정렬할 수 있습니다. 열 머리글만 클릭하면 됩니다. 열 머리글을 다시 클릭하면 창이 역순으로 정렬됩니다.