Introduction to SVN, MantisBT, JFeature, JUnit 사용법및 CTIP 개론 과목명 : 소프트웨어모델링및분석 교수명 : 유준범교수님 제출일 : 2016.04.07.( 목 ) 팀 원 : 201211341 김태현 201411269 고수창 200911411 이상규
Contents 1. SVN a. SVN 개요 b. SVN 설명 c. SVN 사용법 2. MantisBT a. MantisBT 개요 b. MantisBT 설치 c. MantisBT 사용법 3. JFeature a. JFeature 개요 b. JFeature 사용법 4. JUnit a. JUnit 개요 b. JUnit 사용법 5. CTIP 개론
1. SVN a. SVN 개요 Subversion(SVN, 버전관리시스템 ) 은프로젝트전반적으로사용하는파일들을관리하기위한시스템이다. Subversion 은다수의개발자가프로그램을개발할때개발된버전관리는통해 History 를관리할수있도록하며전체팀의공통모듈을일관성있게관리할수있도록한다. b. SVN 설명 Subversion 은실제의작업용디렉토리 ( 작업공간 ) 이외에, 저장소 (Repository) 라고하는영역에최초의데이터와그이후의갱신이력이나변경분정보를저장한다. 저장소는여러개생성가능 사용할수있는파일이나디렉토리는 import 로저장소에등록 checkout 을실행하면저장소내용이작업공간에복사되고동시에관리정보를수록하는.svn 디렉토리가생성 ( 이작업은최초 1 회만필요하다.) commit 으로작업공간의변경내용이저장소에등록되며, 저장소에있는변경내용을작업공간에반영하려면 update 를사용 관리정보없이저장소내용을가져오려면 export 를사용
Subvision 의아키텍처저장소 (Subversion Repository) 에서는모든데이터의버전들을관리하며, 클라이언트프로그램은로컬환경의복사된데이터를관리한다. 이사이에서다양한저장소액세스 (RA, Repository Access) 를통하여통신한다. Subvision 의구성요소 svn: 커맨드라인클라이언트프로그램 svnversion: 복사된작업공간의버전을관리를하는프로그램 svnlook: Subversion 의저장소를조사하기위한툴 svnadmin: Subversion 의저장소를조정하거나복원하기위한시스템관리자용프로그램 svndumpfilter: Subversion 저장소의덤프파일형식데이터에대한필터프로그램 mod_dav_svn: 네트워크의다른사용자가저장소를사용할수있도록하는 Apache HTTP 서버플러그인모듈 svnserve: demon 이나 SSH 를통해사용하는독립서버프로그램으로네트워크에있는저장소를사용할수있도록함
c. SVN 사용법 (1) SVN 클라이언트설치 http://tortoisesvn.net/downloads 에서시스템에알맞은버전을설치한다. 설치후탐색기컨텍스트메뉴에서 SVN 작용메뉴가추가된것을확인할수있다. (2) 프로젝트 Checkout ( 저장소내용을작업공간에반영 ) 1. 작업디렉토리를만든다. 예 ) D:\SMA_project 2. 해당디렉토리폴더의컨테스트메뉴에서 SVN Checkout 을선택한다. 3. 저장소주소를입력한다. 예 ) svn://192.24.7.241/sma/trunk 4. Checkout 완료까지대기한다.
(3) 프로젝트 Commit ( 작업공간의변경내용을저장소에반영 ) 1. 작업디렉토리폴더내에 Commit 할파일을선택하고컨텍스트메뉴에서 SVN Commit 을누른다. 2. add 할파일을체크하고확인을누른다. Subvision의주요기능 디렉토리의버전관리 Subversion는시간과함께디렉토리트리전체의변경에확인할수있는가상적인버전관리시스템을구현하고있다. 디렉토리에도버전정보가추가된다. 버전이력기능강화 Subversion에서는파일과디렉토리의모두에대해서추가, 삭제, 복사, 명칭변경을할수있다. 신규추가되는모든파일은, 그상태에서새롭게시작되는이력을갖는다. Atomic Commit 변경점의모임은, 그것전체가저장소에완전하게반영되는지, 전혀반영되지않는지중하나다. 개발자는논리적으로한묶음의변경을만들어 Commit할수있어일부만이저장소에반영되어버리는문제가발생하지않는다. 메타데이타버전관리 파일과디렉토리는각각관련한속성키와값의조합이며임의의키 / 값의조합를생성해보존할수있다. 속성도파일의내용과동일하게버전관리된다. 네트워크레이어의선택 Subversion은저장소에액세스하기위한추상레이어가있어, 새로운네트워크프로그램을간단하게구현할수있다. Subversion은 HTTP 서버의확장모듈플러그인으로사용할수있어신뢰성과상호호환성을가진다. 서버가제공하고있는기존의기능 ( 인증, 인가, 데이터압축등 ) 을곧바로이용할수있다. 쉽게단독 Subversion 프로세스를이용할수있다. 이서버는독자적인프로토콜에의하여 SSH를이용한터널통신을실행할수있다. 데이터처리의일관성 Subversion은동일한알고리즘을사용해파일의변경내용을표현한다. 효율적인브랜치, 태그의작성 브랜치와태그를작성하는비용은프로젝트의크기에비례하지않는다. Subversion은하드링크로서알려져있는방법과비슷한방법을사용하여단지프로젝트를복사하는것으로브랜치와태그를만든다. 따라서브랜치, 태그의작성에는상대적으로짧은시간이소모된다. 확장하기쉬움 Subversion는잘설계된 API로완성된 C의공유라이브러리의모임으로구현되어있으며, 이는유지보수나다른어플리케이션이나언어와연동하여사용하기가쉽다.
SVN의주요명령어 checkout 저장소를 checkout하면로컬컴퓨터에원하는프로젝트의사본을생성하며이사본은지정된저장소의최신개정판을포함함 최신버전이아닌원하는버전으로 checkout하는것도가능함 commit 체크인 (checkin) 이라고도하며 checkout한소스를수정, 파일추가, 삭제한후로컬사본에대한변경사항을저장소에갱신하는것임 commit을하면 Subversion의경우전체리비전이 1 증가하게됨 commit 이후에사용자는 update로특정파일의최신버전을볼수있음 update 사용자의가장최근변경사항이있는작업사본을저장소와동기화하는것으로, 파일의가장최근작업사본을로컬드라이브로가져옴 ( 바뀐부분만가져옴 ) 파일을변경하기전에언제나갱신을수행하는것이최우선원칙임 import 아무것도들어있지않은저장소에맨처음소스를넣는작업임 export checkout과달리버전관리파일들을뺀순수한소스파일을받아올수있음 오픈소스프로젝트의경우소스를압축하여릴리즈할때사용함 conflict 한파일의일부행을두명이상의사용자가변경했을때또는저장소에파일을갱신할때충돌이발생함 revision 소스파일등을수정하여 commit하게되면일정한규칙에의해숫자가증가하게되는데, 이숫자가저장소에저장된각각의파일버전임 여러개의파일중하나만변경하여 commit 하더라도모든파일의버전은올라가며버전은프로젝트단위로증가함 trunk 프로젝트에서가장중심이되는디렉토리로모든프로그램개발작업은 trunk 디렉토리에서이루어짐 trunk 디렉토리아래에는바로소스들의파일과디렉토리가들어가게됨 branches trunk 디렉토리에서프로그램을개발하다보면큰프로젝트에서또다른작은분류로빼서따로개발해야할경우가생기는데, 이때 branches 디렉토리안에또다른디렉토리를두어그안에서개발함 브랜치는대부분주요개발브랜치를컴파일러오류나버그로방해하지않고새로운기능을테스트할경우에생성함 tag 태그디렉토리는프로그램을개발하면서정기적으로릴리즈를할때그때그때발표한소스를따로저장하는공간임 태깅은기본적으로개정판번호 (Revision Number) 와상관없이각파일에라벨을붙이는것이며이작업은작업사본에할수도있고저장소자체에할수도있음
hook 후크는새로운개정판의생성이나버전관리가되지않은속성의수정과같은저장소이벤트에의해실행되는프로그램임 후크는그이벤트가무엇인지, 어떤목표로작동하는지, 이벤트를실행한사람의사용자이름이무엇인지알려줌 lock 사용자가작업사본파일을수정할독점적권리를요구하는장치임 merge 병합은하나의브랜치에대한변경사항을다른브랜치와합쳐서트렁크로반영하는것 ( 반대의경우도가능 ) 이때의다른브랜치역시트렁크일수있음
2. MantisBT a. MantisBT 개요 MantisBT 는 2000 년 11 월에공개된웹기반의버그추적시스템이다. 시간이지나면서이시스템은엄청나게인기를얻게되었고, 지금은가장인기있는오픈소스기반의버그추적시스템중의하나가되었다. MantisBT 는 PHP 로개발되었으며, MySQL, MSSQL, PostgreSQL, DB2 등의다중데이터베이스를지원한다. MantisBT 는 PHP script 와위의언급된 DBMS 중하나를지원하는어떤 OS 에서도실행이가능하다. b. MantisBT 설치 New installation Upgrade 1. 시스템요구사항을확인한다. 2. MantisBT를다운로드한다. 3. 설치스크립트를실행한다. 4. 시스템을설정한다. 5. Post installation을실행한다. 1. MantisBT를다운로드한다. 2. 시스템을백업한다. 3. 유지를위해사이트를닫는다. 4. 업그레이드스크립트를실행한다. 5. Post installation을실행한다. c. MantisBT 사용법 i. mantisbt.org에서 MantisBT를다운로드를한다. ii. 압축해제한다. iii. /usr/local/apache로옮긴다. iv. http://dev.viskit.co.kr:20080/mantis/admin 세팅후삭제 v. Config_inc.php 파일수정
vi. vii. http://dev.viskit.co.kr:20080/mantis 접속 관리자계정으로로그인 viii. 상단메뉴 Manage 클릭
ix. 계정테이블위에 Create New Account 클릭 x. ID, e mail, access level 작성후생성 xi. xii. E mail 접속후, mantis 가입메일에서링크클릭 PW 설정후 update 유저클릭
xiii. Manage Manage Projects Create New Project 클릭 xiv. Project 정보입력후 Add project xv. 다음프로젝트에서사용자추가 xvi. Report Issues 에서 Project 선택
xvii. 세부정보입력후이슈등록 xviii. View issuesd 에서이슈를확인한다.
3. JFeature a. JFeature 개요 요구사항들을기록하고이들을 JUnit Test Case 와매치함으로써프로세스를단순화시키는데사용하는도구 요구사항을기록하고보고서를생성한다. JFeature 특징 JUnit 의 Test case 메소드와통합 요구사항의수정사항이생겼을때, 즉시뷰를제공하므로빠른편집이가능 요구사항이반영여부를 Coverage 형태로쉽게확인 JFeature 기능 요구사항반영여부확인 타플러그인환경지원 코드추적 IDE 내별도편집기제공 요구사항스펙반출 (Commercial Version) 리포팅 (Commercial Version) Round trip engineering 지원 b. JFeature 사용법 http://www.technobuff.net/ 에서 JFeature 를다운받는다.
압축을풀고, Eclipse 의 plugins 폴더에 net.technobuff.jfeature 폴더를붙여넣는다. Eclipse 를실행하여 JFeature 가추가되었는지확인한다.
JFeature 사용예제 1. 엑셀에요구사항을입력하여정리한다. 2. CSV 파일로저장한다.
3. 새로운자바프로젝트를생성한다. 4. CSV 파일을 Import 한다.
5. CSV 를 Import 한결과가나온다. 6. 회원로그인에대한 Test case 를작성한다.
7. 요구사항과매칭되는 Test 메소드를연결한다. 8. 보고서결과가나온다.
4. JUnit a. JUnit 개요 JUnit 은자바프로그래밍언어로짜여진유닛테스팅프레임워크로, 테스트주도개발 (TDD, Test Driven Development) 에서중요하게여겨진다. 자동화테스트를위한전용프레임워크의필요성을중히여긴에릭감마와켄트벡이 1997 년에제작하였다. JUnit 개념 JUnit 개념 역할 Assert 테스트하려는조건을명시. assert 메소드는조건이만족되면그대로진행하고만족되지않으면예외를던진다. JUnit 의 Assert 클래스에정의된 assert 메소드는다음과같다. assertxxx 메소드 사용목적 assertarrayequals("message", A, B) 배열 A 와 B 가일치함을확인 assertequals("message", A, B) 객체 A 와 B 의값이일치함을확인. B 를파라미터로하여 A 의 equals() 메서드를호출함 assertsame("message", A, B) 객체 A 와 B 가같은객체임을확인. asserttrue("message", A) 조건 A 가참임을확인 assertnotnull("message", A) 객체 A 가 null 이아님을확인 Test @Test 주석이부여된메소드. JUnit 은먼저메소드를포함하는클래스를만들고, 주석처리된메소드를찾아호출한다. Test Class @Test 메소드를포함한클래스이다. Suite 여러테스트클래스를하나로묶는수단을제공한다. Runner 테스트를실행시킨다.
b. JUnit 사용법 http://www.junit.org 에서 junit.jar 을다운로드받아서사용할수있다. Eclipse IDE 를사용할경우의사용예 1. 자바프로젝트를만들고 main package 를만들어서그아래예제클래스 JunitExamMain.java 를만든다. 2. 프로젝트특성에서라이브러리추가를선택한다.
3. JUnit 을추가한다.
4. JunitExamMain.java 에예제메소드 add 를작성한다. 5. test package 를만들어그밑에 JUnit Test Case 파일을만든다.
6. JunitExamTest.java 클래스를작성한다. 7. 실행도구 > JUnit test 를실행한다.
테스트의준비와실행정리 setup() 테스트대상클래스의메소드구조와상관없이테스트메소드가실행되기전에수행된다. 코드내에서사용할리소스를초기화할때이용한다. ( 테스트대상클래스의객체를생성, 네트워크연결시작, DB에연결 ) testxxx() XXX는테스트대상클래스의메소드이름이다. 모든테스트대상메소드이름은 test로시작해야한다. 이메소드의내에 assertxxx() 를이용하여테스트결과를확인하는작업을수행한다. teardown() 메소드는각각의테스트메소드들이실행되고난다음에호출된다. 사용한리소스를정리할때이용한다. ( 테스트대상클래스의객체를제거, 네트워크연결종료, DB 연결종료 ) 테스트의준비와실행정리 ( 주석기반 ) 메소드에부여되는 Annotation ( 해당메소드가반드시 public이어야한다 ) @Before 이 Annotation이부여된메소드는 @Test 메소드가호출되기직전에실행된다. @Test 실제테스트를할대상메소드에작성한다. @After 이 Annotation이부여된메소드는 @Test 메소드가호출된후에실행된다. @Ignore 해당메소드를실행하지않도록한다. 원한다면여러개의 @Before와 @After method를정의할수도있지만, 이들사이의실행순서를정하는방법은없다. 메소드에부여되는클래스대상 Annotation ( 해당메소드가반드시 public이고 static이어야한다.) @BeforeClass 클래스안에정의된모든 @Test method들이수행하기전한번만호출 @AfterClass 클래스안에정의된모든 @Test method들이수행된후한번만수행
5. CTIP a. CTIP 개요 CTIP 은 CI 개념을 Java 기반의개발프로젝트에쉽게적용하기위한 Platform 이다. CTIP 이제공하는기능은다음과같다. CI 서버를통한지속적통합및빌드 품질도구들을통한코드품질검토 ( 테스트및정적분석 ) 빌드결과의배포및관련자에게통보 CI (Continous Integration) 소프트웨어개발에서 Build 의프로세스를지속적으로수행하는것 지속적으로개발된 unit 코드에대한 integration 작업을수행하여, 항상최신의상태를유지한다. Agile 개발방법론 / 프로세스중의하나인 XP(eXtream Programming) 의 Practice 중하나 지속적인통합은팀의구성원들이자신들의작업한내용을자주통합하는개발지침을말한다. 다음은이를도식화한 CTIP 의전체적인구조이다.
CTIP 은크게코드품질관리영역, 빌드및배포관리영역, 소스코드버전관리영역, 그리고대상서버군으로구성되어있다. 다음은각영역에대한설명이다. 소스코드버전관리 : CVS, SVN 등의소스코드버전관리시스템을사용하여프로젝트전체소스코드의일관성을유지한다. 개발자는버전관리시스템의 repository 로부터최신소스를 checkout 하고, 작업내용을 check in 한다. 빌드및배포관리 : CI 서버를통해지속적으로빌드를수행하고, 대상서버에대한배포작업을수행한다. 빌드주기는정해진시점에수행하거나 (nightly build 가이에해당한다 ), 버전관리시스템의 repository 에변경이있을경우즉시수행될수있다. 코드품질관리 : 오픈소스코드검토도구를활용하여코드품질을확인하고, 결과를개발자에게통보한다. 다양한오픈소스및상용품질관리도구가개발되어있으므로필요에따라선택하여적용할수있다. 서버군 : 운영서버배포를위한스테이징서버, 테스트실행을위한테스트서버등을운영한다. CTIP 의예 CTIP 의각영역에서는적절한도구를선정하여영역에서필요한기능을제공해야한다. 다양한오픈소스및상용도구들이개발되어있기때문에특별한기능이필요하지않은경우, 굳이직접이러한도구를개발할필요는없다. 도구는도구자체의기능, 프로젝트특성, 팀의도구에대한익숙함등을고려하여선정한다.