1. 도구개요 소개 정해진규칙에따라소스코드를검사해주고이에대한결과를 report 하게함으로서코딩효율을높여주는도구 주요기능 Code Check, Reporting 카테고리 세부카테고리정적분석 커버리지 Java, JavaScript, JSP, XML, XSL 도구난이도하 라이선스형태 / 비용 BSD-style / 무료사전설치도구 JDK, Eclipse 운영체제 Windows, Linux, Mac OS X, UNIX 도구버전 5.0.0 (2010. 10) 특징 작성한코드에대한위반사항 ( 위반되는코딩스타일, 불필요한코드 ) 를찾음 위반사항을명시한 report 파일 (pmd.xml, cpd.xml file) 에대한수정이쉬움 한번의클릭으로수많은규칙에대한수정이가능 적용회사 / 프로젝트 관련도구 제작사 공식홈페이지 Eclipse Metrics, Checkclipse, Checkstyle, CAP, FindBugs, Jamit, Simian maven http://pmd.sourceforge.net/ 1
2. 기능요약 정해진규칙에따라소스코드를검사해주고이에대한결과를 report 하게함으로서코딩효율을높여주는도구 주요기능 지원내용 소스코드검사범위 프로젝트 대상언어 Java, JavaScript, XML, XSL, JSP 코드위배사항발견지원 ( 코딩스타일및사용되지않는코드 ) 결과파일보고 지원 중복코드검사 지원 우선순위시각화지원 (5 단계 ) 규칙설정 지원 ( 사용자정의설정 / 기본설정 ) 1
3. 도구실행환경 JAVA 를지원하는 IDE 상에서설치및구현이가능 다양한 OS 를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 JDK, 자바기반도구 (IDE 등 ) 이필요 코드및플러그인형태 ( 여러 JAVA IDE 에최적화된형태 ), 도구에포함되어있는형태로제공 (Eclipse Plug-in 형태 ) Java IDE (Eclipse, NetBeans 등 ) JDK (Java development kit) Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 다운및설치하기 4.2 설치확인하기 1
4. 도구설치방법 4.1 다운및설치하기 (1/2) http://pmd.sourceforge.net/ 에서 다운 홈페이지에서 Download 클릭 2
4. 도구설치방법 4.1 다운및설치하기 (2/2) 압축을풀고, 5.0.0 을 Eclipse 가설치된폴더내의 plugins 폴더에복사 압축해제 plugins 폴더에복사 Eclipse ( 재 ) 실행 3
4. 도구설치방법 4.2 설치확인하기 설치확인하기 프로젝트폴더선택후마우스우클릭팝업메뉴에 를확인 4
5. 도구기능소개 세부목차 5.1 의주요기능 5.2 예제소개 5.3 를이용한코드검사하기 5.4 CPD를이용한중복코드검사하기 5.5 검사결과 Reporting하기 1
5. 도구기능소개 5.1 의주요기능 의주요기능 : 소스코드검사 / CPD 적용 / 보고서작성 프로젝트의코드를 Rule 에따라적절하게구현되어있는지확인 : 규칙기반 source code 검사 중복코드의검색 - CPD(Copy/Paste Detector) : Project properties 와 CPD 를이용하여 check 한결과를 report 로작성 [check 결과 reporting] [ 를이용한 code check] [CPD 를이용한중복체크 ] 2
5. 도구기능소개 5.2 예제소개 의기능을설명하기위한예제 : 퀵정렬 (Quick Sort) 퀵정렬예제는분할알고리즘을이용하여구현 정렬알고리즘중가장우수한평균수행속도를자랑 분할알고리즘 (Partition Algorithm) 은퀵정렬의기본개념» 분할알고리즘을기본으로사용하여정렬하고자하는배열을 2 개의하위배열로분할하고각각의하위배열에서는다시재귀적으로자신의배열을분할하여결국배열을정렬하는알고리즘» 멀리떨어짂자료를직접적으로치환함으로써정렬의수행속도를개선 퀵정렬의요구사항 배열을 2 개의하위배열즉, 왼쪽하위배열은피봇값보다작거나같은값으로이루어진배열, 그리고오른쪽하위배열은피봇값보다큰값으로이루어진배열 왼쪽하위배열에퀵정렬을다시실행 오른쪽하위배열에퀵정렬을다시실행 이과정을계속해서진행하되서로의자리값이엇갈리면피봇값과왼쪽에서찾은값을바꿈 3
5. 도구기능소개 5.3 를이용한코드검사하기 (1/9) 프로젝트생성 : QuickSort File New Project Java Project QuickSort 입력 Next 4
5. 도구기능소개 5.3 를이용한코드검사하기 (2/9) Quicksortmodel 패키지를생성 프로젝트선택후마우스우클릭 New Package quicksortmodel 입력 Finish 5
5. 도구기능소개 5.3 를이용한코드검사하기 (3/9) Quicksortmodel 패키지에클래스생성 Quicksortmodel 패키지마우스우클릭 New Class Partition 입력 6
5. 도구기능소개 5.3 를이용한코드검사하기 (4/9) Partition 클래스에테스트할 quicksort 코드작성 7
5. 도구기능소개 5.3 를이용한코드검사하기 (5/9) 기능및 Rule 에대한환경설정 QuickSort 프로젝트선택 Project Properties 8
5. 도구기능소개 5.3 를이용한코드검사하기 (6/9) 테스트하고자하는프로젝트에대해 를실행 프로젝트마우스우클릭 Check Code With 9
5. 도구기능소개 5.3 를이용한코드검사하기 (7/9) 코드검사의결과 Violations Outline : 검사결과에대한에러메시지와에러가발생한해당라인을보임 Violations Overview : 검사결과에대한 overview 를보임 10
5. 도구기능소개 5.3 를이용한코드검사하기 (8/9) Violations Overview Element : 우선순위에따른위반사항 #Violation : 위배된 code 수 #Violation/LOC : 위치에따른위배된 code 수 #Violation/Method : Method 에따른위배된 code 수 Project : 프로젝트이름 11
5. 도구기능소개 5.3 를이용한코드검사하기 (9/9) Violations Outline Error Message 를클릭하면해당코드를찾아갈수있음 12
5. 도구기능소개 5.4 CPD 를이용한중복코드검사 (1/3) 중복된코드를찾을때사용 : CPD 프로젝트마우스우클릭 Find Suspect Cut And Paste 13
5. 도구기능소개 5.4 CPD 를이용한중복코드검사 (2/3) 중복코드검색조건설정 OK 중복된코드를찾고, 프로젝트의 report 폴더에검색결과를보고 14
5. 도구기능소개 5.4 CPD 를이용한중복코드검사 (3/3) CPD View 창 : 중복된코드에대한정보를알림 Message 중한개를클릭하면해당코드를찾아감 15
5. 도구기능소개 5.5 검사결과 reporting 하기 (1/3) 리포팅하고자하는프로젝트에대해리포트생성. 프로젝트마우스우클릭 Generate reports 16
5. 도구기능소개 5.5 검사결과 reporting 하기 (2/3) 프로젝트폴더에 reports 라는폴더가있는것을확인 17
5. 도구기능소개 5.5 검사결과 reporting 하기 (3/3) Reports 폴더에생성되는파일 Pmd-report.csv : Microsoft Excel 파일 Pmd-report.html : html 파일 Pmd-report.txt : text 파일 Pmd-report.vb.html : VB 파일 Pmd-report.xml : xml 파일 각파일을클릭하면각각의확장자에따라서레포팅된결과를보임 18
6. 도구활용예제 세부목차 6.1 예제소개 6.2 요구사항개발 6.3 코드검사 6.4 코드검사결과 6.5 보고서작성 1
6. 도구활용예제 6.1 예제소개 (1/2) 예제시스템 : StringToken StringToken의 적용과정 StringToken 은 URL의토큰을분리해내는프로그램 Java.util 패키지에속해있는 StringTokenizer 클래스를이용하여토큰을분리 를이용하여소스코드를검사하고레포팅 URL이한단어씩분리하여출력위반되는코딩스타일을사용하여 가검사할수있게함 2
6. 도구활용예제 6.1 예제소개 (2/2) StringToken 의구현이슈 작성한코드를한눈에파악하기어렵고디버깅이힘듦 잘못된변수선언과너무짧은변수명을사용 코드검사한결과를문서로남기어정확한수정이필요 를도입하여소스스타일관리를진행 3
6. 도구활용예제 6.2 요구사항개발 (1/5) StringToken 을위한코드작성 File New Project Java Project 4
6. 도구활용예제 6.2 요구사항개발 (2/5) Java project 생성 Project 이름에 Test 설정 Finish 5
6. 도구활용예제 6.2 요구사항개발 (3/5) StringToken 코드를작성하기위한클래스생성 Test 프로젝트마우스우클릭 New Class Class Name StringToken 입력 Finish 6
6. 도구활용예제 6.2 요구사항개발 (4/5) StringToken 코드작성 StringTokenizer(String str) : 문자열 str 을기본적인구별자 ( \t\n\r) 로토큰을구별을위한생성자 StringTokenizer(String str, String delim) : 문자열 str 을구별자 (delim) 로토큰을구별을위한생성자 StringTokenizer(String str, String delim, boolean returntoken) 문자열 str 을구별자 (delim) 로토큰을구별하고, 구별자를토큰과마찬가지로 nexttoken() 에서반환할여부를 returntoken 값으로기술하는생성자 Boolean hasmoretokens() : 토큰이더이상있는지에대한여부 String nexttoken() : 다음토큰반환 String nexttoken(string delim) 새로운구별자 (delim) 를이용하여다음토큰반환 Int counttokens() 토큰의개수반환 7
6. 도구활용예제 6.2 요구사항개발 (5/5) 잘못된코딩스타일의사용 : 의코딩스타일추출기능확인을위한코드 클래스이름을 package 이름과동일하지않게설정 : 현재 package 이름은 default 입니다 사용되지않는파라미터 args 를선언 If else 문에중괄호를사용하지않음 St 와같이짧은변수이름을사용 st 와 token 같이지역변수이름을 final 로선언하지않음 8
6. 도구활용예제 6.3 의코드검사 코드작성후 를이용하여코드검사 프로젝트선택후마우스우클릭 Check Code With 9
6. 도구활용예제 6.4 의코드검사결과 의코드검사결과 앞서설정한잘못된코딩스타일모두검출 10
6. 도구활용예제 6.5 보고서작성 (1/2) 보고서작성하기 프로젝트선택후마우스우클릭 Generate reports 11
6. 도구활용예제 6.5 보고서작성 (2/2) 보고서작성결과 Test 프로젝트폴더에 reports 폴더가생성되며, reports 폴더에리포트파일이생성 잘못된코딩스타일에대한검사및보고가이루어짐 클래스이름을 package이름과동일하지않게설정 사용되지않는파라미터 args를선언 If else문에중괄호를사용하지않음 St와같이짧은변수이름을사용 st와 token같이지역변수이름을 final로선언하지않음 12
7. FAQ 질문 1) 의약자는무엇인가요? 답변 1 : 는특정단어의약자는아닙니다. 다음과같은여러가지의미를중의적으로사용하고있습니다. Pretty Much Done / Project Mess Detector / Project Monitoring Directives / Project Meets Deadline / Programming Mistake Detector / Pounds Mistakes Dead / Meaning Discovery / Programs of Mass Destruction / Programming Meticulous code 질문 2) 는 Java 에대한코드분석만지원하나요? 답변 2 : 아닙니다. 2012 년 5 월 1 일 Release 된 5.0.0 버전부터 Java 를포함하여 JavaScript, XML, XSL, JSP 도지원합니다. 1
8. 도구평가 활용성 개발자편의대로규칙을바꾸어사용할수있으며, 규칙에따른코드관리로활용하기에용이 범용성 대부분의자바를지원하는도구에서사용가능 호환성 Eclipse 위주로개발된플러그인이나, 제한적으로다른도구에서사용가능 성능 빠른작동성능, 도구에같이로드되고, 사용되어도일반적으로큰문제가없음 기타 5단계 UI 디자인을적용하여, 코딩의문제점에대한단계별인지가용이 도구평가의견 정해진규칙에따라코드를관리하여코딩컨벤션을대신할수있음 리포팅을이용하여잘못작성된코드를쉽게이해할수있음 개발자의편의대로규칙을바꿔원하는규칙으로 기능이용가능 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 CPD URL 코딩스타일코딩컨벤션토큰 Copy/Paste Detector. 중복된코드를검사해주는 의기능중하나 Uniform Resource Identifier. 웹상에서서비스를제공하는각서버들에있는파일들의위치를명시하기위한것. 접속해야될서비스의종류, 서버의위치 ( 도메인네임 ), 파일의위치를포함 Programming style. 컴퓨터프로그램의소스코드를작성할때사용되는규칙혹은가이드라인 프로그래머가소스코드를쉽게이해하고유지하는것을돕기위해따르는규칙. 컨벤션은문서화되어모든팀이나회사동료들이따르도록정규화될수있고, 또한각개인의코딩습관에따라다를수있음 문자열의분류화된블록 (block). 어휘분석기 (lexicalanalyzer) 에서문자열을스캐닝한뒤토큰화하면생성되며, 문자열을토큰화할경우프로그래머가정의하기에따라여러가지방식으로토큰을나눔 1