2014 소프트웨어검증 Eclipse, JUnit, 정적분석도구 T1 200911381 김진현 200911417 정명권 200911418 정세진
1. Eclipse 2. JUnit 3. STATIC ANALYSIS 4. PMD 5. Eclipse TPTP 6. FIND BUGS INDEX 2
IDE ECLIPSE 3
Eclipse v Ide 의한종류 v 주로 jdk 를설치하여 java 코드작성에이용 v c/c++, android 등의다양한언어지원 4
Eclipse - 설치 v http://eclipse.org 에서다운로드 v Os 선택후, 맞는버전에따라서다운로드후압축해제 5
Eclipse v Jdk 설치 v http://oracle.com 에서 downloads -> java for developer 항목에서 jdk 다운로드후설치 6
Eclipse v 제어판 \ 시스템및보안 \ 시스템 \ 고급시스템설정에서 jdk 설치된위치로환경변수설정 7
Eclipse - 사용법 v 프로젝트생성 v File -> new -> Java project v 같은방식으로 package, class 등생성가능 8
Eclipse v 실행 v 상단의화살표모양의버튼을누르고실행시킬프로젝트선택 v 마우스오른쪽버튼누르고 run as 선택 9
Eclipse v 디버깅 v 상단의벌레모양의버튼을누르고실행시킬프로젝트선택 v 마우스오른쪽버튼누르고 debug as 선택 10
Eclipse 라이브러리사용 v 외부라이브러리사용 v Eclipse 에서 project 에 jar 형태의외부라이브러리를추가하여사용가능 v 프로젝트이름에마우스오른쪽클릭 - > buildpath -> configuration build path 에서관리 11
Eclipse REF 1 12
Eclipse - 플러그인 v 플러그인 v 시스템에기능을추가하는코드 / 데이터의구조화된묶음 v 추가되는기능은코드라이브러리, 플랫폼확장, 문서등의형태로제공 v Help->install new software 메뉴에서 url 을이용하여설치 v Help->eclipse marketplace 에서검색을통해 plugin 을찾아서설치가능 v 대표적인예로는 subclipse(svn), ast view, android sdk 등이있다 13
Eclipse 14
자바를위한단위테스트작성프레임워크 JUNIT 15
JUnit v JUnit Java Unit Test 작성을위한산업표준프레임워크 v Unit Test 프로그램을작은단위로쪼개고각단위가제대로동작하는지검증하는것 문제가발생시그원인이되는단위를빠르게찾고해결할수있음 16
JUnit v 동작환경구성 Eclipse 설치 ( JUnit 은기본적으로포함되어있음 ) 테스트를수행할프로젝트의 Library 에 JUnit 를추가 테스트클래스를생성하고테스트코드를작성 17
JUnit v 테스트코드작성 테스트클래스를생성 단위테스트메소드를생성 메소드내부에서테스트대상클래스의인스턴스를선언 인자값을설정하고메소드를실행시켜결과를가져옴 JUnit 프레임워크에포함된 Assert 메소드들을이용하여결과를확인 18
JUnit v JUnit Assert 주요메소드 assertarrayequals(a, b) : 배열의값이일치하는지확인 assertequals(a, b) : 객체 a 와 b 가일치하는지확인 asserttrue(a) : a 가참인지확인 assertnotnull(a) : a 가 Null 이아닌지확인 etc : http://junit.sourceforge.net/javadoc/org/junit/assert.html 19
JUnit v 결과확인 문제가되는단위만확인하여빠른오류해결이가능 한번테스트케이스작성후지속적으로 활용이가능 오류발생시목표값과실제값을비교하여그원인을쉽게파악할수있음 테스트코드작성시 gui 와연관된부분에대해서 테스트케이스작성이쉽지않음 20
Introduce Static Analysis STATIC ANALYSIS 21
Static Analysis v What is the Static Analysis? 컴퓨터소프트웨어를분석하는방법중하나로서프로그램을실제로 실행해보지않고분석하는방법이다. 여러정적분석도구들을사용하여치명적일수있는오류들을미리 검출한다. 프로그램내부의논리적오류를찾아내는데도움을줄수있다. 22
Static Analysis v Benefit of Static Analysis 테스트를실행하기전에조기결함을발견할수있어시간낭비를줄일수있다. 코드와설계의의심스러운부분을조기에발견할수있다. 동적분석으로는발견하기어려운결함을발견할수있다. 소프트웨어모델상의의존도와불일치성을발견할수있다. 코드와설계에있어서유지보수성을향상시킬수있다. 잠재적인치명적결함을예방할수있다. 23
Static Analysis v Defects found through Static Analysis 정의되지않은값으로변수참조 모듈과컴포넌트간에일관되지않은인터페이스 사용되지않는변수나코드 코딩표준위반 보안의취약성 코드와모델의 syntax 위반 24
Static Analysis v Example of Static Analysis Tools Eclipse TPTP PMD Findbugs etc... 25
Static Analysis Tool for Source code PMD 26
PMD v Source code 를분석하는정적분석도구 v 코드의중복성을체크하는 cpd 를내포하고있음 v Unused variables, empty catch block, unnecessary object creation 등여러 programming flaw 를분석한다 v 지원언어로는 java, javascript, xml, xsl 등이있다 27
PMD - 설치법 v http://pmd.sourceforge.net/ - pmd 의 source code 및 release 버전다운로드주소 v Plugin 설치 다양한 IDE 지원 28
PMD - 사용법 v 정해진규칙 ( 룰 ) 기반의정적분석도구 v 정해진규칙을위반여부를체크 v 룰의 priorty 설정및 priority 확인이가능 v 기존에정의된룰을사용할수도있고 Xml 기반의 XPath 방법과 javaruleset 을상속받아서 java 로사용자정의규칙생성가능 v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 29
PMD v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 30
PMD v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 31
PMD v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 32
PMD v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 33
PMD v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 34
PMD v Windows -> preference-> pmd 에서룰의추가, 삭제및수정이가능 35
PMD v CPD 를통해중복코드를확인가능 v 검사하는최소 tile size 를지정 (tile = token) 36
PMD v 다양한 format 의 reports 기능을제공 37
PMD v 미리정의된 rule Naming Rule 짧은변수, 메소드이름사용 Code Size Rule Toomanyfields 같이구조화하지않고코드사이즈만증가시키는룰 Optimization Rule 최적화를위한룰 등이외에도많은룰셋이존재 각룰셋에는수십가지의세부 rule 들이존재 unreachable code 도검사가능 38
PMD v 적용할규칙과적용하지않을규칙선택해서세팅할수있다 v Project-> properties->pmd 39
PMD v 실행화면 40
PMD v 기본적인형태의 txt 형식의리포트 41
PMD v pmd v 유저가규칙을설정가능하므로프로젝트진행시팀에서정한네이밍룰, 코드스타일들을적용하여사용할수있다 v 공용적으로통용되는코드스타일들을적용하여코딩스타일형성에도움 v Command line 으로실행과 ant script 로의실행을지원해서 ant script 작성후컴파일시자동으로 pmd 가수행되도록만들수있다 v 하지만새규칙생성시에코드로구성되어쉽게작성하기가어렵다 42
PMD v Pmd ant script 예시 43
프로파일링을통한분석도구 ECLIPSE TPTP 44
Eclipse TPTP v Eclipse TPTP Eclipse Test & Performance Tool Platform Project 모니터링, 테스트자동화, 프로파일링등문제점을찾고해결하는기능을제공 이클립스플러그인으로제공되기때문에설치및분석이간편 정적분석을통한지속적인모니터링방식 v 설치방법 참고 : http://www.eclipse.org/tptp/home/downloads/ 45
Eclipse TPTP v 실행및분석 플러그인이정상적으로설치되면이클립스에서관련메뉴가생성 분석대상클래스를 Profile As 로실행하여분석시작 46
Eclipse TPTP v 객체사용현황분석 현재활성화된객체와총생성된객체, 그크기등의정보를알수있음 App 동작에따라서지속적인모니터링가능 어떤객체가더이상사용되지않을시점에활성화된객체가남아있을경우메모리누수가발생했음을알수있음 메모리누수발생객체는객체참조그래프를통해추가분석이필요 47
Eclipse TPTP v 객체참조그래프 특정객체가참조되는과정을그래프로표현 누수되는객체을참조하는클래스를발견할수있음 누락된메소드나논리적오류를발견할수있음 remove 가실행되지않음 48
Eclipse TPTP v 수행시간관련분석 어플리케이션의수행시간, 호출횟수등의정보도알수있음 특정 method 에서만수행시간이지연될경우문제점이존재한다고생각할수있음 49
Eclipse TPTP v 분석수행결과를 3 가지의형태로리포트도출이가능 50
Eclipse TPTP v 정확한문제발생지점을확인하기위해선지속적인모니터링이필요 v 코드가완전히동작가능한상태에서만분석및테스트가가능 51
Introduce Findbugs FINDBUGS 52
Findbugs v What is the Findbugs? 자바코드에대한정적분석툴 소스코드에서잠재적으로버그가발생할수있는부분에대한경고를출력한다. 컴파일된코드단계에서실시된다. 프로젝트 or 클래스단위로체크가가능하다. 코드의건전성이아닌버그의가능성에대해서검출한다. 53
Findbugs v How to install for Eclipse Eclipse Marketplace 에서 Findbugs 를검색하여다운받아 설치한다. 54
Findbugs v How to use 검사하고자하는프로젝트또는클래스우클릭 -> Find Bugs Team 부귀영화 55
Findbugs v Result and Debugging Windows -> Open Perspective -> Other -> Findbugs 발생가능한버그들의목록과원인 해당버그의상세정보와심각도및해결방안제시 Team 부귀영화 56
Findbugs v Benefit of Findbugs IDE 와밀접히통합되어있어언제든쉽게적용할수있다. 무료이다 (Open Source). 강력하고정확하다. 정적분석도구의한계인가능성만을제시 57
REFERENCES 1. JUnit, http://using.tistory.com/54 2. 유닛테스트, http://ko.wikipedia.org/wiki/ 유닛테스트 3. Eclipse TPTP, http://www.eclipse.org/tptp/home/ 4. Eclipse TPTP 예제, http://javacan.tistory.com/entry/125 5. http://pmd.sourceforge.net/ 58
Q & A E N D 59