본문 바로가기

구글과인터넷/구글의특별한기능

Google CodePro AnalytiX 소개 - 안드로이드 개발/테스트를 위한 정적분석 도구 Static Analysis 이야기

안드로이드 정적분석 도구 - CodePro AnalytiX

소프트웨어 버그 수정 비용에 대한 유명한 조사 결과가 있다. 소프트웨어 버그를 요구단계에서 수정할 때의 비용을 1달러로 했을때 유지보수 단계에서 수정하면 100달러 이상이 들고 테스트 단계에서 수정하면 그 절반인 50달러, 코드 단계에서 수정하면 그 절반도 안되는 20달러밖에 비용이 들지 않는다는 조사이다. 




우리나라 옛 속담에도 '호미로 막을 것을 가래로 막는다'라고 하지 않았던가. 품질 향상은 시작단계에서부터 하면 더욱 효과가 있다. 개발자들에게 있어서는 바로 코드 단계에서 품질을 높이는 행위를 하면 효과가 있을 것이다. 바로, 코드를 검사해주는 정적분석 도구를 사용하는 것이다. 그렇다면 안드로이드 앱은 어떤 툴로 정석분석을 해야할까? 기존의 몇몇 자바용 정적분석툴을 그대로 쓰기에는 안드로이드 프레임워크를 지원하지 않기때문에 아무래도 한계가 있다. 안드로이드 정석분석을 지원하는 도구는 몇 있지만 비싸서 소규모 기업 및 개인개발자에게는 그저 '그림의 떡'이다. 


이에, 구글이 내놓은 해답이 있다. 



Google CodePro AnalytiX 소개

CodePro AnalytiX는 Java 개발자용 품질 및 보안 정적분석(Static Analysis)도구다. 개발자는 이 도구를 사용해서 소프트웨어 품질, 안정성, 유지보수성을 향상시키는데 큰 도움을 받을 수 있다. 원래는 유료였으나 대인배 구글이 2010년 9월 16일 인수 후, Eclipse 프로젝트에 오픈소스로 기부해서 누구든지 다운로드받아서 사용할 수 있다. 

CodePro AnalytiX는 아래에 설명한 기능을 제공한다. 

코드분석
가장 핵심적인 기능이다. 코드를 분석해서 어떤 코드가 잠재적으로 오류를 발생시킬 가능성이 있고, 어떤 코드가 보안적으로 문제가 될 수 있는지 알려준다. 




심각도(Severity)는 High, Medium, Low 이렇게 총 3가지 단계로 알려준다. High는 반드시 수정하는 것이 좋고, Low는 무시해도 그렇게 큰 상관은 없는 경고다. Medium은 상황에 맞게 취사선택해도 될 것이다.  


JUnit 테스트케이스 자동 생성

작성된 소스코드를 분석해서 자동으로 JUnit 테스트케이스를 생성한다. 다소 복잡하거나 특수한 테스트케이스 Input값이 아니라면 자동 생성되는 JUnit 테스트케이스는 그 자체만으로 상당히 좋은 품질을 지닌다. 하지만 TDD로 개발하는 개발자에게는 그렇게  유용한 옵션은 아니다. 




각종 S/W 메트릭
소스코드 내의 클래스에 대해서 각종 메트릭(metric)을 뽑아낼 수 있다. 메트릭이란 소프트웨어 공학에서 사용하는 소스코드의 계량화된 수치를 의미하는 것으로 이 수치로 해당 클래스가 얼마나 복잡한지, 수정을 해야하는 수준인지 알아낼 수 있다. 지원하는 주요 수치로는 아래 수치가 있다. 

- Lines of Code
- Line of Code Per Method
- Number of Methods Per Type
- Comments Ratio




코드 커버리지 측정
코드가 얼마나 실행되었는지를 측정할 수 있다. 코드상에서 모든 경로로 시험하는 테스트코드의 효율성을 평가하는데 사용하는데 가장 주된 이유일 것이다. Line, Block, Method Coverage를 측정할 수 있으며, 총 실행된 라인 수를 구할 수 있다. 






의존도(Dependency) 분석
CodePro AnalytiX는 여러 프로젝트 사이의 의존도 분석에도 사용할 수 있다. 패키지별 혹은 프로젝트 별 의존도 분석을 할 수 있으며 패키지간 Decoupling 리펙토링을 할 때 유용하게 사용될 수 있다. 





죽은코드(Dead Code) 분석
실행되지 않은 코드를 보통 "죽은 코드(혹은 데드코드, Dead Code)"라 한다. 죽은 코드는 실행파일의 용량을 크게 만들고, 개발자들이 코드를 읽기 어렵게 만들고 유지보수를 어렵게 만든다. 만에 하나 이 죽은 코드를 건드릴 경우 알 수 없는 결과를 낼 수 있기 때문에 바로 제거해주는 것이 좋다. Refactoring to Patterns의 저자 Joshua Kerievsky도 트위터에 Dead Code에 대해서 다음과 같이 말했다.

If you are not actively looking for dead code, you are likely living with zombies. 

CodePro AnalytiX는 소스코드를 검사해서 죽은 코드를 검출해낼 수 있다. 





유사코드 분석 

많은 정적분석 도구가 지원하듯 유사코드를 분석하는 기능을 제공한다. 이 기능은 리펙토링을 하려는 개발자들이 매우 환영할만한 기능이다. 메인버전 릴리즈 직후에는 소스코드가 깔끔할지 몰라도 수 많은 요구사항을 처리하고, 시간에 쫓기다보면 컨트롤+C,V의 유혹에서 자유로울 수 없는 것이 개발자들의 숙명이다. 일단 소스코드 복사 후 나중에 리펙토링을 하겠다고 생각해도 정작 붙여넣은 부분이 너무 많거나 소스코드가 방대한 경우 이조차도 쉽지 않다. 이 경우 CodePro AnalytiX의 유사코드 분석(Similar Code)를 사용하면 쉽게 찾아서 고칠 수 있다. 




설치
CodePro AnalytiX는 이클립스의 플러그인 형태로 제공되기 때문에, 설치는 아주 쉽다. 이클립스 메뉴 - Help - Install New Software 를 선택후, 자신의 이클립스 버전에 따라 아래 URL을 넣으면 된다. 

Eclipse 3.7 (Indigo)
http://dl.google.com/eclipse/inst/codepro/latest/3.7

Eclipse 3.6 (Helios)
http://dl.google.com/eclipse/inst/codepro/latest/3.6

Eclipse 3.5 (Galileo)
http://dl.google.com/eclipse/inst/codepro/latest/3.5

Eclipse 3.4 (Ganymede)
http://dl.google.com/eclipse/inst/codepro/latest/3.4

마치면서....
CodePro AnaytiX는 개발자에게 여러모로 유용한 정적분석 도구다. 또한 테스팅팀에서도 유용하게 사용할 수 있다.