ReSharper Platform Rider

인수인계 받은 코드가 Copy/Paste 로 작성된 엉망인 코드인가요?

물론 흑백의 극단적인 세상은 아니지만, 자주 이중 코드를 발견하거나 오류로 이중 작성을 하기도 합니다. 큰 회사에서는 더 자주 일어나느 일이죠. 이유가 중요한게 아닙니다. 더 중요한 것은 사용하는 툴로 그런 문제를 해결할 수 있는지 아는것이죠. 늘어나는 코드 속에 중복 코드를 찾아주는 툴에 조금은 기대어 보세요.

오늘의 포스팅은  dupFinder command-line tool 에 대한 내용입니다. C# and VB.NET code에서 중복된 코드를 찾아보세요. ReSharper Command-Line Tools  NuGet package 에서 확인 가능하며 TeamCity build step 에서도 가능합니다. 무료이기 때문에 어떠한 CI 또는 DevOps 관련 환경에서 사용하기 좋습니다.

참고 : DupFinder 는 윈도우 전용입니다. YouTrack issue 에서 다른 플랫폼 지원 여부를 향후 실시간으로 확인하실 수 있겠습니다.

중복 코드란 무엇인가?

당연하겠지만, 코드를 복사 / 붙여넣기 하는 행위가 바로 중복 코드를 만드는 원인입니다. 실무에서 자주 있는 현상은 바로 개발자가 각각 비슷한 구조의 코드를 만들지만 다른 네이밍이나 코드 포맷, 스타일을 달리하여 작성하게 되는 경우도 있겠죠.

DupFinder 에서는 코드 조각(code fragments) 의 유사성이 비용(costs)으로  측정됩니다. 비용은 순환적 복잡성(cyclomatic complexity )과 같은 상대적 단위로 제공됩니다. 비용이 클 수록 중복 코드의 비율이 커진다는 것이죠.

중복 메트릭스 수집

DupFinder 는 CLI 툴입니다. 이는 솔루션 파일, 폴더 또는 개발 파일에 적용될 수 있습니다. 일반적인 요구사항은 생성된 코드를 제외하는 것이겠죠:

dupFinder FunkyApp.sln --output=report.xml --exclude=“**/*.Generated.cs”

생성된 XML 리포트 최상단에 축적된 통계 데이터를 보이게 되고 기존 로그 분석을 위해 사용될 수 있습니다.

2 duplicate code

더 흥미롭게도 발견 된 중복코드의 개별 데이터가 포함되어 있습니다. 여기에는 중복코드의 실제 비용과 관련 조각에 대한 파일 이름, 라인 오프셋 및 열 오프셋이 포함됩니다.:

3 duplicate code

사용처의 솔루션에 따라 결과를 가장 적절하게하기 위해 비용 임계 값 역할을 하는 --discard-cost 매개 변수(parameter)를 사용해야 할 수도 있습니다 . 실제 코드 를 보고서에 포함 하기 위해 --show-text 매개 변수 를 추가 할 수도 있습니다 . 도움말 설명서에는 다양한 명령 줄 옵션이 설명되어 있습니다 .

사람이 읽을 수 있는 보고서

XML에 얽매이는 것이 보고서를 분석하는 효율적 방법은 아니겠죠. 커스텀 XSL 변환(XSL transformation) 을 적용함으로써 우리는 이것을 훨씬 더 쉽게 읽을 수 있습니다. TeamCity는 새로운 Duplicates 보고서 탭을 보여줍니다.이  에서는 범위별로 결과를 탐색하고 조각을 나란히 표시 할 수 있습니다.

dupfinder-duplicates-report

코딩하며 실시간으로 중복 검사하세요

ReSharper (및 Rider)는 dupFinder CLI의 기능을 넘어 시간이 지남에 따라 반복되는 중복 을 피할 수 있습니다 . 프래그먼트를 식별하고 코드를 자체 메소드에 캡슐화하여 코드베이스의 어느 위치에서든 더 간결하게 호출 할 수 있다고 가정 해 보겠습니다. 그래도 동료 개발자는 이전 조각을 반복해서 사용합니다. 이것은 커스텀 SSR 패턴 을 생성 하기에 좋은 시간 이며, 복제물이 쓰여지는 순간에 코드 검사를 보여줄 것입니다.

ReSharper를 다운로드 하거나 Rider에게 시도해보십시오 . 우리는 귀하의 의견을 듣고 싶습니다!

The Drive to Develop
JetBrains 팀

해당 포스트는 하기 URL 의 원문을 번역하여 기재되었습니다.

SOLID Veteran or Copy/Paste Master? Finding duplicate code

image description

Discover more