작은 개인 프로젝트에 CI를 적용해 보며 자연스레 떠오르게 되는 생각이 있네요. 정적분석이란 코드 냄새맡기를 자동화 해주는게 아닐까 하고요.
CI 도입이 그닥 간단한 일은 아니기에(공부할게 얼마나 많던지;) ant 빌드 스크립트를 작성하는 것 부터 시작해서 조금씩 도입 수준을 높여가고 있습니다. 아직 CI 툴은 도입하지 못하고 빌드 스크립트를 계속 확장하고 삽질하고 다듬고 있습니다. 프로젝트의 한 부분이 완성될 때마다 잠시 멈춰 CI 진도를 나가는 거지요.
코드 정적분석 툴을 도입해 보려고 이것저것 찾아보는데 문득 드는 생각이 정적분석은 리팩토링을 위한 냄새맡기가 아닐까 였습니다. CPD 같은 경우에는 복사/붙여넣기 한(중복된) 코드를 찾아주지요. 마틴 파울러는 그의 책 리팩토링에서 중복된 코드를 악취 퍼레이드의 일등으로 꼽아놓았습니다. 이런 중복된 코드를 치유하기 위한 적당한 리팩토링은 Extract Method, Pull Up Method, Extract Class와 같은 것들이 있지요. 순환 복잡도를 계산해주는 툴도 있습니다. 순환 복잡도가 높으려면 아무래도 긴 메소드가 되기 마련입니다. 역시 리팩토링 대상이 됩니다.
그 외에도 코드 속 나쁜 냄새로 지적되는 긴 파라미터 리스트(CheckStyle로 찾을 수 있겠죠?), 확산적 변경 등도 많은 부분은 정적분석을 통해 찾아낼 수 있는 것 같습니다.
리팩토링 공부하면서 느꼈던게 ‘나쁜 냄새’ 맡는 부분이 가장 어렵다는 것이었습니다. 코드를 읽는다는 것 자체가 쉬운 일이 아니니까요. 그런 걸 도와줄 수 있는게 정적분석 도구들인 것 같습니다.