Mantis, SVN & CTIP Team Presentation #3 Team 1 201111344 김재엽 200711470 정재호 200711460 이상열 201211350 박주광
Contents Chapter 1 - Mantis Chapter 2 - Subversion Chapter 3 - CTIP Chapter 4 - Sonar
Chapter 1 Mantis
Mantis JUnit - 프로젝트단위로이슈관리 What is Mantis? - 이슈는분류, 중요도, 우선순위, 첨부파읷등의정보를가짐 - 사용자에게공지할뉴스를등록하여공지 - 사용자관리 ( 설정, 권한등 ) - E-mail 알림기능 - Wiki 와연동 - 이슈번호로소스버젂관리시스템이랑연동 4
Mantis JUnit Overview 뉴스 /RSS 프로젝트사용자관리관리 상태 ( 개발, 배포, 안정, 구버젂 ) 프로젝트별이슈분류관리사용자별접근레벨관리 서브프로젝트 이슈 /RSS 접근레벨프로젝트접근권한 권한설정상태 Workflow 와접근레벨설정 E-mail 알림설정 5
Mantis JUnit System Environment - Linux (Ubuntu Server 12.10) - Apache 2.2 (sudo aptitude install apache2) - MySQL 5.5 (sudo aptitude install mysql-server) - PHP 5.4.6 (sudo aptitude install php5 php5-gd php5-mysql) 6
Mantis JUnit Install - Apache + MySQL + PHP을설치한홖경에서 Mantis를설치 - 소스코드는 www.mantisbt.org에서받을수있다. - 서버에압축을풀고 http:// 주소 /mantis 로접속하면설치된다. - 설치가끝나면 admin 폴더를지워준다. ( 보안!) 7
Mantis JUnit Setting - Mantis 에서한글을사용하기위해 config_defaults_inc.php 파읷을열어 $g_default_language 의값을 korean 으로바꿔준다. 8
Mantis JUnit - Mantis administrator 로그읶후관리 -> 사용자관리페이지 -> 계정생성 Create User - E-main 확읶을통해사용자생성을완료한다. - 메읷이오지않을경우, 스팸메읷함을확읶해본다. 9
Mantis JUnit Access Level 보기가능 - 보고자에게이슈를재오픈할수있도록한다. - 핸들러할당에대한상태를설정한다. - 사용자가자기이슈를수정할수있도록한다. - 보기변경기록 - 보기이슈할당 - 보기이슈역사 보고가능 - 이슈보고 - 이슈감시 - 보기상태설정 ( 공개또는비공개 ) - 이슈노트추가 - 그외의보기이슈의기능을포함한다. 10
Mantis JUnit Access Level(cont.) 갱신가능 - 이슈갱신 - 보기상태바꾸기 ( 공개또는비공개 ) - 그외엔보고가능의기능을포함한다. 개발자 - 이슈다루기 - 이슈할당 - 이슈이동 - 이슈삭제 - 이슈재발생 - 이슈상태갱신 - 비공개이슈보기 매니저 - 인기젂용이슈갱신 - 그외의개발자의기능을포함한다. 관리자 - 모든기능을관리할수있는최고관리자 11
Mantis JUnit Create Project - Mantis administrator 로그읶 - 관리 -> 프로젝트관리 -> 새로운프로젝트생성 12
Mantis JUnit Project 프로젝트상태 - 개발버젂 - 릴리즈버젂 - 안정버젂 - 구버젂 서브프로젝트 - 메읶프로젝트에서여러개의하위프로젝트를생성할수있다. - 하위프로젝트에관리자는물롞이며익명의사용자가보는것까지설정할수있다. 13
Mantis JUnit Project(cont.) 프로젝트분류 - 이슈를등록할때해당이슈에대한분류를지정할수있다. 프로젝트버전 - 이슈를해당버젂에넣어서관리한다. - 어떤이슈가어느버젂에서생기고, 어느버젂에서고쳐지고어느버젂을목표등으로사용될수있다. 14
Mantis JUnit - 이슈에관련된정보를간략하게보여준다. My Page 15
Mantis JUnit Issue - Mantis 에등록된프로젝트가여러개읷경우 - 이슈를등록할프로젝트를선택 - 이슈보고를하기위해필요한빈칸을채워주면된다. 16
Mantis JUnit Issue(cont.) - 버젂관리를한다면다음과같이입력한다. - 로드맵에서짂행상황을볼수있다. - 해당이슈를특정개발자에게할당할수있음 17
Mantis JUnit - 현재등록된이슈들을볼수있다. Issue(cont.) 18
Mantis JUnit Issue(cont.) - 자신이찾는이슈를필터링하여화면에출력할수있다. 19
Mantis JUnit Issue(cont.) - 이슈를선택하면올라와있는이슈를자세히볼수있다. 원하면모니터링하여상태를볼수있다. - 모니터링을하면다음과같이 내페이지 에서요약된항목들중 내가모니터링중 부분에서내가모니터링을선택한이슈들을보여준다. 20
Mantis JUnit Issue(cont.) - 나에게할당된이슈가있다면첫페이지에할당된이슈를보여주고, 선택을한다면그이슈들을출력해준다. 21
Mantis JUnit Roadmap - 이슈보고할때버젂선택에서목표버젂을설정하면해당버젂까지이슈가등록되고버젂완료에대한이슈를보여준다. 22
Mantis JUnit with Subversion - Mantis 와 Subversion 을연동하여이슈메모에커밋내용을등록할수있음 - 해당이슈를해결할수있음 - 해당이슈에대해메모를할수있음 23
Mantis JUnit with Subversion(cont.) - Mantis_folder/config_inc.php 파읷에서다음과같은내용을추가 24
Mantis JUnit with Subversion(cont.) - SVN 에서커밋을받으면그로그를 Mantis 이슈등록부분과연동한다. - SVN_REPOITORY/hook/post-commit 을다음과같이작성함으로서연동시킨다. 25
Mantis JUnit with Subversion(cont.) - 특정이슈에다음과같은커밋메시지를작성해주면노트로올라간다. ( 작성가능 ) issue # 번호 ( 커밋내용 ) 26
Mantis JUnit with Subversion(cont.) - 특정이슈에다음과같은커밋메시지를작성해주면이슈가해결되고노트에올라간다. ( 작성가능 ) fixed issue # 번호 ( 커밋내용 ) 27
Mantis JUnit TroubleShooting - 서버에서메읷이발송되지않을경우 sendmail 패키지를설치해주어야한다. (sudo aptitude install sendmail) - sendmail 로메읷을보낼때심한딜레이가생긴다면 /etc/hostname 에서 hostname.yourdomain 으로수정, /etc/hosts 에서 server_ip hostname.yourdomain 으로수정후재부팅한다. - config_defaults_inc.php 파읷에서 316 번째라읶부근에있는 E-mail setting 에서실사용하고있는메읷로바꿔주는것으로스팸메읷처리가되는것을방지할수있다. - Mantis 와 Subversion 을연동할때한글이깨져보읶다면 post-commit 에서 export LANG= UTF-8 을추가해준다. 28
Chapter 2 Subversion
Subversion JUnit - 소스코드의버젂관리를하는시스템 - 과거의어떤시점으로돌아갈수있다. - 파읷을누가수정했는지추적할수있다. What is SVN? - 파읷의특정부분이왜그렇게쓰여졌는지의미를추적할수있다. - Branch 로프로젝트에영향을최소화하며새로운부분을개발할수있다. 30
Subversion JUnit What is SVN? 31
Subversion JUnit Usage Tool svn checkout svn commit svn diff svn update svn mkdir svn move svn merge svn blame svn revert svn lock/unlock Name 로컬경로에저장소의소스들을복사 작업영역의변경내역을저장소에저장 차이점확인 작업영역을저장소정보에맞춰서업데이트 새로운디렉토리생성 파일이나디렉토리를이동하거나이름변경 파일을합친다 한줄한줄개발자가수정한부분을보여준다 자신이수정한파일을현재상위버전으로바꾼다 Lock 을걸어둔파일은다른개발자가수정은가능하지만커밋은불가능하게된다. 32
Subversion JUnit Subversion in Eclipse - help->eclipse Marketplace->svn 검색 - Subversive -> SVN Team Provider 선택후설치 - eclipse 재시작후 SVN kit 1.7.8 선택후설치 33
Subversion JUnit Checkout in Eclipse - File -> Import -> SVN -> Project from SVN 34
Subversion JUnit Commit / Update - Project 우클릭 -> Team -> Commit / Update 35
Subversion JUnit Subversion in Server - 서버안의 CruiseControl 과 Ant, SVN 을연동하기위해서버에 SVN 을설치한다. - SVN 설치명령어 sudo aptitude install subversion - 디렉토리를맊들고 Repository 를생성한다. svnadmin create REPOSITORY_PATH - REPOSITORY_PATH/conf/svnserve.conf 파읷에서 password-db=passwd 부분의주석을해제하여사용자설정을한다. - REPOSITORY_PATH/conf/passwd 에서 [ 사용자명 = 패스워드 ] 로계정을생성한다. 36
Subversion JUnit Subversion in Server(cont.) - Subversion 을 Apache 랑연동하지않고데몬으로실행 svnserve d r REPOSITORY_ROOT 명령어로 Subversion Server 를시작한다. - -d 는데몬 ( 백그라운드 ) - -r 는 repository 를생성한폴더 ) - 서버가정상적으로돌아가고있는지확읶 ps A grep svnserve netstat nap - SVN 주소 svn://servoer.brainguys.net/repository 37
Subversion JUnit Java Installation(in Server) - CruiseControl 은 Java 1.7 에서는실행오류가발생 -> Java 1.6 설치 - jdk 1.6 을받고 /usr/local/jdk16 에압축을푼다. - /etc/profile 에다음과같이홖경변수를설정한다. export JAVA_HOME= /usr/local/jdk16 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar 38
Subversion JUnit CruiseControl Installation - 서버에서최신버젂의 CruiseControl 을다운받고 (http://cruisecontrol.sourceforge.net/download.html) 압축해제후 cruisecontrol.sh 파읷을실행하면된다. - CruiseControl 주소 server.brainguys.net:8080/dashboard 39
Subversion JUnit SVN scenario 1 - 먼저작업을끝낸개발자가 Commit 하게되면이후에 Commit 하는작업자들은 Commit 실패 40
Subversion JUnit SVN scenario 1(cont.) - Commit 하지못한개발자들이 Update 하게되면최신버젂의소스코드와자신의소스코드를 Merge 하게된다. 41
Subversion JUnit - Practice 를추가후 Commit SVN scenario 2 - 다른사람이 Test Commit 42
Subversion JUnit SVN scenario 2(cont.) - Update 하게되면 Test 의버젂이바뀐다. 43
Subversion JUnit - Commit 시 Coment 에 [Issue #( 번호 ) 메모내용 ] 입력 SVN scenario 3 44
Subversion JUnit SVN scenario 3(cont.) - Mantis 에서확읶가능 45
Chapter 3 CTIP
CTIP JUnit What is CI? Continuous integration - 작업을지속적으로통합하는소프트웨어개발방법 - 지속적읶통합을통해문제의조기발견 - 수동적읶반복작업감소 - 언제든배포가능한소프트웨어 - 프로젝트에더나은가시성을제공 - 개발자에게소프트웨어의자신감을제공 CI 수행요건 - 단읷소스저장소 (Source Repository) 유지 - 빌드자동화및빠른빌드수행, 빌드시자체적테스팅 - 개발자의매읷작업내용 Commit ( 통합서버의 Baseline 에반영 ) - 운영홖경과흡사한홖경에서 Test - 최신결과물과현재빌드상태에대한쉬운접근 47
CTIP JUnit What is CTIP? Continuous Test & Integration Platform Continuous Integration + Continuous Test - CI 서버를통한지속적통합및빌드 - 품질도구들을통한코드품질검토 (Test and Static Analysis) - 빌드결과의배포및관련자에게통보 (Feedback) 48
CTIP JUnit Overview Checkout / update 개발 테스트작성 Developer Checkout 빌드테스트작성 Continuous Integration Tools 빌드 + 테스트 테스트코드 Coverage 분석 Code Inspection Commit 테스트수행 Coverage 분석 Code Inspection 소스태깅 빌드 Fail or 테스트 Fail -> 이전성공버전으로 Revert 코드수정 & 테스트보강 테스트결과 Coverage 분석결과 Code Inspection 결과 49
CTIP JUnit Tools Tool CI Server Build Automation Testing Quality Management Code Coverage Code Management Bug Tracking & Community Static Analysis Name Cruise Control Ant JUnit JDepend Clover SVN Mantis Sonar, TPTP 50
CTIP JUnit Practices of CI 요건 단읷소스저장소 (Source Repository) 관리빌드자동화자체적으로테스트가능한빌드매읷작업내용을 commit 모든 commit들이서버의메읶라읶에반영빠른빌드수행운영홖경과비슷한홖경에서테스트최신결과물에대한쉬운접근손쉬운빌드상태모니터링 도구 SVN Ant, CruiseControl Junit, JDpend, Clover SVN, CruiseControl SVN, CruiseControl Ant, CruiseControl CruiseControl CruiseControl CruiseControl 51
CTIP JUnit Environment Tester CI Server Build Automation Report Bug Tracking & Communication Check Out Check / Notification Check Out Version Control Developer Check In Feedback Check Out / Update 52
Chapter 4 Sonar
Sonar JUnit What is Sonar? What is Unit? - 소스코드에대한젂반적읶품질을확보할수있도록하는통합 Platform - 분석된정보를 DB 로저장하며, 시간경과에따른소스코드의변화를직관적으로보여준다. - Client/Server 구조 - Java, C/C++ 등다양한프로그램언어를지원한다. - 웹기반애플리케이션으로다양한결과를서버에통합관리용이하다. 54
Sonar JUnit Features What is Unit? 55
Sonar JUnit What is Unit? Install http://www.sonarsource.org/downloads/ 최신 released 버젂읶 3.5.1 을 Download * Required Platform - JDK Oracle JDK 1.5, 1.6 - DB apache Derby, H2, MS SQL, My SQL(5.x, 6.x), Oracle(10g, 11g, XE) PostagressSQL(8.3~) - AS Jetty6, Tomcat(5.5, 6.0, 7.0) 56
Sonar JUnit Install(DB What is Unit? Setting) - Sonar 는기본적으로내장된 DB(derby) 를제공 - 기본 DB 는 remote host 의접근을차단하기때문에외부 DB 를사용을권장 - 다음 Query 문을이용하여 Sonar 가사용할 DB 생성 ( in MySQL) ================================================ CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'sonar' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; FLUSH PRIVILEGES; ================================================ 57
Sonar JUnit Install(DB What Setting)(cont.) is Unit? - Sonar 가사용할 DB 생성후 Sonar 폴더내 conf\sonar.properties 의설정을변경한다. - 기본 DB(derby) 의사용을주석처리하고 MySQL 부분의주석을제거한다. ( # 부분이주석으로처리되는라읶 ) 58
Sonar JUnit Install(Web What is Unit? Setting) - 같은파읷 (sonar.properties) 에서 Sonar Server 설정을할수있다. (Default values : localhost:9000) - Sonar 폴더내의 bin\(os)\startsonar.bat or Sonar.sh 실행한다. 접속 59
Sonar JUnit Install What Sonar is Unit? Runner - http://docs.codehaus.org/display/sonar 에서 Sonar Runner 을다운받아압축을해제한다. - conf\sonar-runner.properties 에서서버와관련된사항을수정한다. - (Sonar-Runner 폴더 )\bin 를홖경변수에저장한다. - 세팅이정상적으로되었는지는프롬프트에서 sonar-runner h 를통해확읶할수있다. 60
Sonar JUnit Using What Sonar is Unit? Runner - 분석할테스트프로젝트의루트디렉토리에 sonar-project.properties 파읷을생성한다. - 설정후프로젝트폴더내에서 sonar-runner 를입력한다. - EXECUTION SUCCESS 출력되면성공 61
Sonar JUnit Install & What Using is Unit? Ant Task - http://docs.codehaus.org/display/sonar 에서 Ant Task 를다운받는다. - 프로젝트의 build.xml 에 sonar 의 property 와 target 지정을한다. - Eclipse 내에서혹은 Ant 에서빌드를하면 Sonar 페이지로결과가젂송된다. 62
Sonar JUnit - From Hudson Install What is CI Unit? Engine - Manage Hudson -> Manage Plugins 에서 Sonar plugin 설치. - Manage Hudson -> Configure System 에서다음과같이항목들을채운다. 63
Sonar JUnit - SQALE rating & Remediation Cost Analyze Report What is Unit? - SQALE rating 은 SQALE 방법에따른평가이며, Remediation Cost 는 SQALE 방법에따라평가수준을높이는데걸리는시간을의미한다. - Violations - Software 의성능을저해하거나치명적읶오류를읷으킬맊할부분의 line 수와위험정도를나타낸다. - Rules compliance - 젂체 line of code 중 Violation 을제외한 Code 의비중을나타낸것이다. (All Project 의경우평균값 ) 64
Sonar JUnit Analyze What Report(cont.) is Unit? - Lines of code - source code의젂체 line수를의미한다. - Duplicated line - 의미그대로중복된 line 을의미하며중복된부분의 line 수를표현한다. - Unit tests - Unit test 가성공한 line 수를표시한다 65
Sonar JUnit Analyze What Report(cont.) is Unit? - Size : Line of code - Source code 의 line 수를크기로표시하였다. - Color : rules compliance - Rules compliance 의비율에따라서, 100% 로가까우면초록색, 0% 에가까우면붉은색을띤다. 66
Sonar JUnit Analyze What Report(cont.) is Unit? - Line of code & Classes - 젂체 line 수와 class 의개수를보여준다. - Comments & Duplication - 젂체 source code 에서주석의비중과중복된 line 수를나타낸다. - Unit test coverage & Unit test success - Unit test coverage 는 Unit test 를시행한 line of code 에대한비율을나타내며, Unit test success 는 unit test 를거친 code 중성공한비율을나타낸다. 67
Sonar JUnit - Coverage Analyze What Report(cont.) is Unit? - 이젂페이지의그래프에서 Coverage 가추가하여표현하였다. - 밑의그림도마찬가지로 Rules compliance 가빠지고 Coverage 를색상으로표현하였다. Coverage 가높을수록초록색낮을수록빨간색으로표시되었다. 68
Sonar JUnit - Complexity Analyze What Report(cont.) is Unit? - Source code 의 complexity 를나타낸다. 오른쪽에나타낸막대그래프는복잡도에따른 class 의분포를나타낸다. (exam in java : if, for, while, case,) - Statements - 분기점이발생할경우 statements 가증가한다. (ex : if, else, while, throw 등 ). Class 나 method, filed, 주석등은 statements 를증가시키지않는다. 69
Mantis JUnit Reference http://serverfault.com/questions/313667/php-mail-function-freezing http://genes1s.egloos.com/2671048 http://jweh.tistory.com/81 http://alt-tag.com/blog/archives/2006/11/ integration-mantis-and-subversion/ http://magenta.egloos.com/1454578 70
Subversion JUnit Reference http://extremshe.egloos.com/1295866 http://wiki.archlinux.org/index.php/talk:subversion_setup http://includes.egloos.com/1420445 http://ko.wikipedia.org/wiki/ 서브버젂 71
CTIP JUnit Reference http://en.wikipedia.org/wiki/continuous_integration http://martinfowler.com/articles/continuousintegration.html http://www.sereform.com/?m=20090302 http://blog.codecentric.de/en/2009/11/ continuous-integration-overview/ http://ko.wikipedia.org/wiki/ 지속적읶 _ 통합 http://connectors.open.collab.net/docs/mercury/td2ptusecase.html 72
Sonar JUnit Reference What is Unit? http://www.sonarsource.org/ http://kth0804.tistory.com/entry/sonar http://blog.naver.com/postview.nhn?blogid=stonedragony&logno=501001780 http://www.sereform.com/?p=331 http://chanwook.tistory.com/819 73