Posts Tagged ‘code clone’

중복 코드 검출

Friday, October 10th, 2008

요즘 중복 코드를 어떻게 자동으로 검출할 수 있을까 싶어 이것 저것 도구들을 살펴보고 있다. 직접 만들 수 있으면 얼마나 좋을까마는, 그럴 실력이 안되니 도구들을 살펴볼밖에..

때마침 InfoQ에 중복 코드 검출 도구를 개발한 사람과의 인터뷰 기사가 올라왔다. Immo Landwerth(독일인인가 본데, 그러면 이모 란트베르트 정도 될까?)가 개발한 도구는 Clone Detective for Visual Studio 이며, C#을 대상으로 한 도구인 모양이다. 인터뷰 내용 중에 와닿는 내용이 있어 담아 놓는다.

  • 우리 프로젝트의 목표는 중복 코드 검출을 개발자가 직접 사용할 수 있도록 하는 것이다. 그래서 독립 프로그램이 아닌 비주얼 스튜디오 플러긴 형태로 만든 것이다.
  • 중복된 코드 부분에 보라색 표시를 해둠으로써 중복 코드를 굳이 제거하지 않고 당장은 유지하더라도 나중에 어느 한쪽만 고치는 오류 없이 일관성을 유지할 수 있게 도와준다.

맞다! 그동안 찾은 도구들은 하나같이 사용이 불편하다. 중복을 제거하자고 간신히 설득하더라도 사용하기 불편한 도구로 인해 일을 진행하기 어렵다. 그리고 막상 중복을 제거하자니 사이드이펙트도 겁나고, 안전하게 제거할 수 있을지도 모르겠는 경우가 흔하다. 이럴 때를 대비해 표시라도 남겨두어 나중에 중복 코드임을 까먹지 않게만 해줘도 어딘가.

여전히, C/C++에서의 중복 코드 검출 도구는 손에 딱 맞는 것이 없고, 리팩터링은 손으로 직접 해야 하며, 단위 테스트 없는 레거시 코드이니 갈길은 멀고도 멀다.

참고로 지금 검토 중인 도구를 소개한다.

  • CCFinderX (http://www.ccfinder.net/) – 명령줄 도구와 GUI 껍데기가 제공된다. 명령줄 도구 사용이 쉽지 않고, 출력 결과를 이해하기도 쉽지 않다. 그래도 조금 들어다보면 실행속도가 빠르고 검출 결과도 훌륭하다. 우선은 이 도구를 적당히 활용할 생각이다.
  • CPD (http://pmd.sourceforge.net/cpd.html) – PMD라는 코드 품질 관련하여 Java에서는 꽤 알려진 도구의 하위 기능으로 제공되는데, GUI가 제공되어 CPD만 단독으로 사용이 가능하다. C/C++를 지원한다고는 하지만 조금 복잡한 코드에서는 오류를 일으키기도 한다.