brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jul 10. 2017

Code conventions check

#02 Code Analysis tools

Code Analysis tools




이전 글에서 작성한 Code conventions을 검사해주는 Checkstyle과 Findbugs, PMD를 안드로이드 스튜디오에서 직접 연동해 보겠습니다.




checkstyle


Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. It automates the process of checking Java code to spare humans of this boring (but important) task. This makes it ideal for projects that want to enforce a coding standard.

checkstyle은 프로그래머가 코딩 표준을 준수하여 Java 코드를 작성하도록 돕는 개발 도구입니다.


checkstyle 이용하기 위해서는 xml 형태로 작성해야 합니다. Fully import를 예로 들어보겠습니다.

import를 할 때 "*"을 이용해 전체를 import 하기보다는 필요한 부분만 import 하는 게 좋습니다.

이를 직접 확인하고 검사하기엔 import 하는 코드량이 너무 많습니다.

Bad: import foo.*;
Good: import foo.Bar;


이럴 땐 checkstyle의 AvoidStarImport을 이용하는 게 좋습니다.

// AvoidStarImport
Checks that there are no import statements that use the * notation.


"checks.xml" 파일에 아래처럼 "<module name="AvoidStarImport"/>" 한 줄만 추가해주면 됩니다.

이 한 줄만으로 알아서 다 체크를 해주게 됩니다.

<?xml version="1.0"?>
...
<module name = "Checker">

...

<module name="AvoidStarImport"/>  // Add this line

..


이 외에도 정말 많은 Checks 옵션들이 있으니 직접 확인해 보시기 바랍니다.



실제 이용한 예제는 아래 링크를 참조해 주시기 바랍니다.




Findbugs


Provides static byte code analysis to look for bugs in Java code from within IntelliJ IDEA. FindBugs is a defect detection tool for Java that uses static analysis to look for more than 200 bug patterns, such as null pointer dereferences, infinite recursive loops, bad uses of the Java libraries and deadlocks.

Findbugs는 Java 코드의 버그를 찾기 위해 정적 바이트 코드(static byte code)를 분석하여 버그 패턴을 찾는 결함 탐지 도구입니다.


Findbugs도 xml 형태로 작성해야 합니다. checkstyle과 달리 정적 바이트 코드 전체를 분석해주기에 별다른 옵션은 필요하지 않습니다.

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
    <Match>
        <Class name="~.*\.R\$.*"/>
    </Match>
    <Match>
        <Class name="~.*\.Manifest\$.*"/>
    </Match>
    <!-- All bugs in test classes, except for JUnit-specific bugs -->
    <Match>
        <Class name="~.*\.*Test" />
        <Not>
            <Bug code="IJU" />
        </Not>
    </Match>
</FindBugsFilter>


자세한 내용은 아래 링크들을 참조해 주시기 바랍니다.




PMD


PMD is a source code analyzer. It finds common programming flaws like unused variables, empty catch blocks, unnecessary object creation, and so forth.

PMD는 사용되지 않는 변수, 빈 catch 블록, 불필요한 개체 생성 등과 같은 일반적인 프로그래밍 결함을 찾아주는 코드 분석 도구입니다.


PMD를 이용하기 위해서는 xml 형태로 작성해야 합니다. 이용법은 checkstyle과 비슷합니다.


신경 쓰기 쉽지 않은 부분인데 Super class 선언에 관한 규칙을 보겠습니다.

Activity의 onCreate() 메서드에서는 "super.onCreate()" 를 가장 먼저 호출하고 다른 코드를 작성해야 합니다.

// Good
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // TODO
}

// Bad
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    // TODO
    super.onCreate(savedInstanceState);
}


PMD에서는 Android rule sets에 아래와 같이 Super class를 가장 먼저 체크해 주는 규칙을 제공해 주고 있습니다.


이용법은 간단합니다. 아래와 같이 해당 rule sets을 선언해주기만 하면 됩니다.

<?xml version="1.0"?>
...
    <rule ref="rulesets/java/android.xml" />
...


이 외에도 많은 rule sets들을 제공해주고 있으니 직접 확인해 보시기 바랍니다.




Sets code analysis tools


위에서 작성한 xml 파일들을 기반으로 실제 안드로이드 스튜디오와 연동을 해줘야 합니다.

관련된 코드는 아래 링크를 참조해 주시기 바랍니다.


https://github.com/oemilk/ilovepooq/blob/master/Ilovepooq/config/quality/quality.gradle


apply plugin: 'com.android.application'
apply from: '../config/quality/quality.gradle' // Add this line
android {
    ...
    lintOptions {
        abortOnError false // Add this line
    }
}

https://github.com/oemilk/ilovepooq/blob/master/Ilovepooq/app/build.gradle#L1-L29




Run code analysis tools


이제 안드로이드 스튜디오에서 실행해봅시다.


1. Edit Configurations


2. Add Gradle


3. Set Gradle project and Tasks info

Gradle project : path/config/quality/quality.gradle 경로를 추가합니다.

Tasks info : check를 추가합니다.

check는 모든 테스트를 실행한다는 의미입니다.


4. Run Gradle


5. Results

Messages : 안드로이드 스튜디오의 Messages에 전반적인 테스트 결과를 보여줍니다.

html file : path/app/build/reports/checkstyle/checkstyle.html 파일로 자세한 테스트 결과를 확인할 수 있습니다.


6. checkstyle.html

Java code style을 위반한 코드 위치와 내용을 보여줍니다.


7. pmd.html

Java code style을 위반한 코드 위치와 내용을 보여줍니다.


8. findbugs.html

버그 패턴을 분석한 결과를 보여줍니다.


9. Debug results

File - Settings - Build, Execution, Deployment - Complier - Command-line Options에 --stacktrace --debug 옵션을 설정합니다.

안드로이드 스튜디오의 Messages를 통해서도 테스트 결과를 확인할 수 있습니다.




자세한 내용은 아래 Git.wiki에서 확인할 수 있습니다.

https://github.com/oemilk/ilovepooq/wiki/3.-Check-Code-qualities




이 글은 아래 링크 내용들을 기반으로 작성했습니다.




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari