큰 C # 응용 프로그램을 리팩터링해야하는데 결코 사용되지 않은 많은 기능을 발견했습니다. 사용하지 않는 코드를 확인하여 사용하지 않는 모든 기능을 제거하려면 어떻게해야합니까?
큰 C # 응용 프로그램을 리팩터링해야하는데 결코 사용되지 않은 많은 기능을 발견했습니다. 사용하지 않는 코드를 확인하여 사용하지 않는 모든 기능을 제거하려면 어떻게해야합니까?
답변:
예, ReSharper가이 작업을 수행합니다. 솔루션을 마우스 오른쪽 버튼으로 클릭하고 "코드 문제 찾기"를 선택하십시오. 결과 중 하나는 "사용되지 않은 기호"입니다. 사용하지 않는 클래스, 메소드 등이 표시됩니다.
좋은 질문이지만 위험한 물에서 밟고 있다는 경고를 받으십시오. 코드를 삭제할 때는 자주 컴파일하고 테스트해야합니다.
하나의 위대한 도구가 떠 오릅니다.
NDepend-이 도구는 놀랍습니다. 시작하는 데 약간의 시간이 걸리며 처음 10 분이 지나면 대부분의 개발자가 "Screw it!"이라고 말합니다. 앱을 삭제하십시오. NDepend에 대한 좋은 느낌을 받으면 앱이 어떻게 결합되는지에 대한 놀라운 통찰력을 제공합니다. 확인하십시오 : http://www.ndepend.com/ . 가장 중요한 것은이 도구를 사용하면 직접 발신자가없는 메서드를 볼 수 있습니다. 또한 어셈블리의 모든 메서드 (또는 어셈블리 간)에 대한 역의 완전한 호출 트리를 보여줍니다.
어떤 도구를 선택하든 가볍게 생각하는 것은 아닙니다. 특히 라이브러리 유형 어셈블리에서 공개 메소드를 처리하는 경우 앱이 언제 참조하는지 알 수 없으므로.
Jeff가 지적한 것처럼 NDepend 도구 는 사용되지 않은 메소드, 필드 및 유형을 찾는 데 도움이 될 수 있습니다.
비트를 정교화하기 위해 NDepend 는 LINQ 쿼리 (CQLinq)를 통한 코드 규칙 작성을 제안합니다 . 약 200 개의 기본 코드 규칙 이 제안되어 있으며 그 중 3 개는 사용하지 않거나 죽은 코드 감지 전용입니다.
기본적으로 사용되지 않는 방법을 감지하는 규칙은 다음과 같습니다.
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
그러나이 규칙은 순진하며 사소한 오 탐지를 반환합니다. 메소드가 호출되지는 않지만 사용되지 않는 많은 상황이 있습니다 (엔트리 포인트, 클래스 생성자, finaliser ...) 이것이 3 가지 기본 규칙이 더 정교해진 이유입니다.
NDepend는 Visual Studio 2017,2015, 2013, 2012, 2010에 통합되어 있으므로 IDE 내에서 이러한 규칙을 확인 / 탐색 / 편집 할 수 있습니다 . 이 도구는 CI 프로세스에 통합 될 수 있으며 위반 된 규칙 및 범인 코드 요소를 보여주는 보고서 를 작성할 수 있습니다 . NDepend에는 VS Team Services 확장 기능도 있습니다.
이 규칙의 소스 코드에 대한 위의 3 개 링크를 클릭하면 유형 및 메소드에 관한 링크가 약간 복잡하다는 것을 알 수 있습니다. 이는 사용되지 않는 유형 및 메소드뿐만 아니라 사용되지 않은 데드 유형 및 메소드 만 사용하는 유형 및 메소드 (재귀) 도 감지하기 때문 입니다.
이것은 정적 분석 이므로 규칙 이름에 잠재적 으로 접두사가 붙습니다 . 코드 요소가 리플렉션을 통해서만 사용되는 경우 이러한 규칙은이를 사용하지 않는 것으로 간주 할 수 있습니다 (이 경우에는 해당되지 않음).
이 세 가지 규칙을 사용하는 것 외에도 테스트를 통해 코드 적용 범위를 측정하고 전체 적용 범위를 확보하기 위해 노력하는 것이 좋습니다. 종종 테스트에서 다루지 못하는 코드는 실제로 버릴 수있는 사용되지 않거나 죽은 코드임을 알 수 있습니다. 이는 코드 분기에 도달 할 수 있는지 확실하지 않은 복잡한 알고리즘에 특히 유용합니다.
면책 조항 : 저는 NDepend에서 일합니다.
진실은 도구가 당신에게 100 % 특정 답변을 줄 수는 없지만 적용 범위 도구는 돈을 꽤 잘 운영 할 수 있다는 것입니다.
포괄적 인 단위 테스트 스위트로 계산할 경우 테스트 범위 도구를 사용하여 테스트 실행 중에 실행되지 않은 코드 줄을 정확하게 확인할 수 있습니다. 코드를 수동으로 분석해야합니다. 죽은 코드로 간주되는 것을 제거하거나 테스트 범위를 향상시키기 위해 테스트를 작성하십시오.
이러한 툴 중 하나는 NCover 이며, Sourceforge 에 오픈 소스 전구체가 있습니다. 다른 대안은 PartCover 입니다.
stackoverflow 에서이 답변 을 확인하십시오 .
FXCop은 코드 분석기입니다 ... 사용하지 않는 코드를 찾는 것 이상의 역할을합니다. FXCop을 잠시 동안 사용했는데 권장 사항이 없어서 제거했습니다.
NDepend가 더 가능성이 높은 후보 인 것 같습니다.