SVN, Mantis, JFeature, JUnit 사용법및 CTIP 개론 Software Modeling & Analysis 소프트웨어모델링및분석 보고서 #2 Team. T1 201111388 조연호 201211374 이창오 201211379 장종훈 201314196 양동혁
목차 1. SVN... 3 A. 소개... 3 B. 사용모델... 3 C. 기능... 4 D. 용어... 5 E. SVN 툴... 5 F. 사용방법... 5 2. Mantis... 8 A. 소개... 8 B. 특징... 8 C. 설치및실행... 9 3. JFeature... 14 A. 개요...14 B. 소개...14 C. 특징...15 D. 실행환경...15 E. 기능...16 F. 설치및실행...16 4. JUnit... 18 A. 소개...18 B. 사용방법...18 C. Useful Methods...21 5. CTIP... 22 A. 소개...22 B. 제공기능...23 C. 특징...23 D. 영역...24 E. 도구...25 6. 레퍼런스... 26-2 -
1. SVN A. 소개 SVN은자유소프트웨어버전관리시스템이다. 원래 CVS를사용했으나디렉토리의이동이나이름변경등과같은한계점때문에 SVN이라는개량시스템이나오게되었다. 한프로젝트의소스코드를하나의중앙저장소 ( 서버 ) 에위치하고, 해당저장소는포함하고있는파일과디렉토리의모든변경사항을기억하고있게된다. 또한서브버전은여러컴퓨터에서네트위크를통해접근할수있으며, 다수의사람들이파일을수정할수있는협업을가능하게한다. 모든작업에대해서는버전이자동으로매겨지므로잘못된수정이이뤄졌어도쉽게되돌릴수있다. B. 사용모델 SVN은 Copy-Modify-Merge 모델을사용한다. 각각의사용자는서버저장소에개인적인작업복사본을만들어작업하며수정이완료된시점에서저장소에변경사항을반영한다. 또한변경대상에대해다른수정 - 3 -
자에의한변경사항이존재한다면자신의복사 / 수정본과병합할수있다. 병합시새로운변경사항중자신이수정한부분과겹치는부분에대해서는사용자끼리의견교환후수동으로선택한다. 이렇게변경된작업들은위에서말한것처럼버전이자동으로매겨져저장이되는데, 버전관리를하는이유는다음과같다. 여러사람이한프로젝트의소스코드를관리할수있다. 대규모수정작업을안전하게진행할수있다. 소스코드의변경사항을추적할수있다. 새롭게개발한부분을검증후프로젝트에병합할수있다. 프로젝트의영향을최소화하면서새로운부분개발을할수있다. C. 기능 i. Directory Versioning 가상버전파일시스템을구현하여, 디렉토리트리전반의모든변화를기록한다. 그리고파일과디렉토리에함께버전이부여된다. ii. 실제적인버전히스토리 파일과디렉토리모두추가, 삭제, 복사, 이름변경이자유롭다. 또한새로운 파일이추가될때마다해당하는새로운히스토리가시작된다. iii. 원자적 Commit 개별적인수정사항들이모두저장소에적용이되든지, 아니면하나도적용이 되지않는다. 이는사용자들이수정사항들을논리적단위로적용하여, 수정사 항의일부만적용되어발생되는문제를예방해준다. iv. 버전화된메타데이터 각각의파일과디렉토리는키와값의속성집합을가지고있어서임의의키와값을저장할수있다. 이속성값또한파일과같이계속버전화된다. v. 네트워크레이어의선택 SVN은새로운네트워크메커니즘을구현하기쉽도록하는추상적저장소접근법을가지고있으며 Apache HTTP 서버에확장모듈로플러그인될수있기때문에견고하고상호동작이쉽다. vi. 일관된데이터핸들링 SVN 은파일의차이점을바이너리대조알고리즘을이용하기때문에텍스트와 - 4 -
바이너리파일모두에서동일하게동작한다. 두종류의파일모두저장소에압 축되어저장되며차이점은네트워크를통해양방향으로전송된다. vii. 효율적인브랜칭과태깅 SVN 은브랜치와태그를단순히프로젝트를복사하는방법으로생성하므로시 간이절약된다. D. 용어 용어 설명 Repository 서버저장소 Working Copy Repository에서받은개인적인작업복사본 Import 최초로 Repository 에자료를올리는행위 Export Repository에서버전관리정보를제외한자료를내려받는행위 Check Out Repository에서버전관리정보를포함한자료를내려받는행위 Commit 개인작업영역에서의변경내역을 Repository에반영 Revision 갱신번호. 저장소에서의수정이발생할때마다자동으로증가 Trunk 개발가지들중에가장중심이되는줄기 Branch 특정버전으로의뻗어나가기 ( 부분개발 ) Merge 두저장소의트리를비교하고그차이점을작업본에적용 Tag 개발버전의스냅샷 E. SVN 툴 i. TortoiseSVN Windows 기반의 SVN 툴로 SVN의 Client 역할을해준다. 자체동작기능을가지고있지않기때문에 Windows의 Poplist 기능으로동작한다. 자체 GUI를가지고있다. ii. SVN X Mac OS에서사용되는 SVN 툴로써 GUI로구현되어있다. F. 사용방법 i. Check Out Check Out은저장소에있는파일을최초로사용자의컴퓨터로가져올때실행하는명령어로써최초한번만사용한다. - 5 -
URL of repository 에서버도메인또는 IP/ 서버 DP 생성한저장소폴더를입력 한다. 계정을입력한다. 완료시위와같이폴더이미지가변화한다. ii. Commit Check Out 한폴더에원하는파일을만든후파일추가하기를선택한다. SVN Commit 을선택한다. Commit 이완료되면 Revision 이올라간다. - 6 -
iii. Update 저장소에저장된최신의 Revision 으로자신의소스를변경하는작업이다. 마우 스오른쪽클릭시나타나는 SVN 업데이트를선택한다. 계정입력시자신의파일이저장소의파일로변경된다. - 7 -
2. Mantis A. 소개 Mantis는웹기반의무료버그관리시스템이다. 설치가쉽고, 사용하기편리하여이슈를관리해야하는공동작업프로젝트개발시유용하게사용되고있다. Kenzaburo Ito가개발한 Mantis는 PHP 스크립트언어로작성되었고, 웹서버 (Apache, IIS) 와 MySQL이설치되어있는 Windows, OS/2, MacOS, UNIX 등의환경에서사용할수있다. 웹기반의시스템이기때문에대부분의웹브라우저에서문제없이기능수행이가능하다. GNU General Public License(GPL) 라이선스에의거한오픈소스가특징이며, 현재버전 1.2.19가최신버전이다. B. 특징 i. 복수프로젝트대응 Mantis는한번의설치로여러개의프로젝트를생성하여관리할수있다. 또한부모프로젝트하위에한단계낮은레벨의자식프로젝트를생성하여구조적인관리가가능하다. 카테고리기능도지원하여프로젝트내이슈에쉽게접근할수있다. ii. 국제화대응 오픈소스인 Mantis 는세계각국의개발자들로부터유지보수가되고있다. 포럼은물론이고, 실제 Mantis 를활용한버그트래커도직접운영하고있어다 양한언어를완벽하게지원한다는특징이있다. iii. 이메일통지 프로젝트에서발생하는다양한이슈를이메일로알려주는기능도포함하고있 다. 이기능을통해개발자는놓치는이슈없이즉각대응할수있다는장점이 있다. iv. 커스텀필드추가기능 Mantis는프로젝트별로개발자가임의로생성하는커스텀필드추가기능을제공한다. 문자또는숫자, 부동소수, 체크박스, 날짜등다양한형식을지원하여개발자들의편의를도모한다. v. 변경이력관리버그추적시스템의필수기능인프로젝트변경이력관리기능도강력하다. 프로젝트에참여한개발자들의작업내용을쉽게관리할수있고, 프로젝트내변경사항이발생할때마다변경사항을항시기록한다. - 8 -
vi. 다양한출력형식 Mantis는 CSV 또는 Microsoft Excel, Word 형식으로내보낼수있는기능을지원한다. 언제든지작업내용을다양한형식으로출력할수있으며, 웹서버가오프라인일경우에도활용할수있다는장점이있다. C. 설치및실행다음은 Windows 기반에서 PHP와 IIS, MySQL 환경으로 Mantis를설치하는과정이다. i. PHP 및 MySQL 설치 IIS 설치후 PHP 및 MySQL 을설치한다. 개별로다운받아설치하는방법도 있지만, PHP Setup for IIS 라는프로그램을활용하면두가지를한번에설치할 수있어편리하다. ii. Mantis 설치 Mantis 공식홈페이지로들어가최신버전의 Mantis 를내려받는다. 따로설 치과정없이압축만풀어서사용하면된다. - 9 -
iii. IIS 설정 가상디렉토리이름을입력하고, 압축을푼 Mantis 의경로를지정한다. iv. DB 생성 Language 를 Korean (ko-uft-8) 로수정하고, 초기암호 123456 을입력하여로 그인한다. - 10 -
새데이터베이스만들기 에서 Mantis 혹은원하는이름을입력하여새로운데이터베이스를생성한다. 아래의 암호변경 을선택하여초기암호 123456 대신자신만의암호를사용하는것이보안상안전하다. v. Mantis 설정 Mantis 설치경로로이동하여 config_default_inc.php 파일을 config_inc.php 파일로복사한다. 그리고다음과같이수정한다. [DB 설정 ] $g_hostname = 'localhost'; $g_db_username = 'root'; $g_db_password = ''; //DB 생성과정에서암호를변경하였다면변경한패스워드를입력한다. ( 초기암호 123456 ) $g_database_name = ''; //DB 생성과정에서생성한새로운데이터베이스이름을입력한다. $g_db_type = 'mysql'; [Mail 설정 ] $g_phpmailer_method = 2; $g_smtp_host = 'localhost'; $g_smtp_username = 'syjung'; // 사용자에맞도록메일설정 $g_smtp_password = 'zero04'; // 사용자에맞도록패스워드설정 - 11 -
vi. Mantis DB 연동테스트 Type of Database 와 Hostname, Username, Password, Database name 을입력하 고 Install/Upgrade Database 버튼을누른다. 위와같은화면이출력된다면정상적으로연동이되었음을의미한다. 아래의 Continue 를클릭하여 Mantis 를사용할수있다. - 12 -
vii. Mantis 시작 최초시작시두가지의오류메시지가출력된다. Administrator 의암호를변 경한후 Mantis 설치경로에서 Admin 폴더를삭제하면두가지의오류메시지 모두처리되어정상적으로사용할수있다. - 13 -
3. JFeature A. 개요 JFeature는 Technobuff사에서제작된오픈소스로, 개발한코드의요구사항에집중할수있는 Feature/Requirement Coverage Tool이다. 요구사항들을기록하고, 이들을 JUnit Test Case와매치함으로써프로세스를단순화할수있는도구이다. B. 소개요구사항들을기록하고이들을 JUnit Test Case와매치함으로써프로세스를단순화할수있다. i. 주요기능요구사항기록및 Report 생성 ii. 카테고리 Requirement Analysis & Management iii. 세부카테고리 요구사항모델링 iv. 라이선스형태및비용 Common Public License 1.0 무료 Commercial License 유료 v. 사전설치도구 Eclipse 3.4 ~ 4.3 vi. 운영체제 Windows, Linux, UNIX, Mac OS X vii. 장점 1. JUnit의 Test Case 메소드와통합 2. 요구사항의수정사항발생시즉시뷰를제공하므로빠른편집가능 3. 요구사항의반영여부를 Coverage 형태로쉽게확인가능 4. 요구사항들을편집하는확장인터페이스추가리포팅포맷 (Commercial Version의추가기능 ) - 14 -
5. 요구사항 Spec 반출 (Commercial Version 의추가기능 ) viii. 관련도구 IBM Rational DOORS, CaliberRM, RequisitePro ix. 제작사 Technobuff (http://www.technobuff.net) C. 특징 i. 개발중간에요구사항에맞는기능을확인할수있다. ii. iii. iv. 이클립스플러그인을통하여요구사항을편리하게관리하는편집창과요구사항에대한코드의커버리지를볼수있는뷰를제공한다. JUnit과연동하여요구사항에대한 Break, No Coverage 등과같이요구사항커버리지에대한자세한보고서를제공한다. 커스텀 Ant와연동하여자동화된빌드에맞춰서전체프로젝트에대한요구사항커버리지를만들어낼수있다. v. Round Trip Engineering을통해프로젝트진행중간에외부요구사항파일과 JFeature의요구사항파일을동기화시킨다. vi. 리팩토링으로단위테스트의변경에따라요구사항파일을최신상태로유지한다. vii. CSV, XML 파일로부터요구사항들을추출한다. viii. 테스트메소드에디터를통하여요구사항에맞는테스트메소드를정의한다. ix. 요구사항셀렉터를통하여요구사항간의의존성을정의한다. D. 실행환경 i. OS 1. Windows XP, 7 : 32, 64-bit 지원 2. Linux : 32, 64-bit 지원 3. UNIX : 32, 64-bit 지원 4. Mac OS X : 32, 64-bit 지원 ii. iii. JDK Eclipse 코드및 Eclipse 플러그인, 도구에포함되어있는형태로제공된다. - 15 -
E. 기능 기능 지원여부 요구사항반영여부확인 지원 (Coverage 형태 ) 타플러그인환경지원 지원 (JUnit) 코드추적 지원 IDE 내별도의편집기제공 지원 요구사항 Spec 반출 일부지원 (Commercial Version) 리포팅 기본포맷지원 (Commercial Version) Round Trip Engineering 지원 ( 파일보관형태 ) F. 설치및실행 Technobuff 홈페이지에서 JFeature 를다운로드한다. - 16 -
다운로드받은압축파일의압축을풀고, JFeature1.2 를 Eclipse 가설치된폴더내의 plugins 폴더에복사한다. (Eclipse 버전 3.4 ~ 4.3 만지원한다.) Eclipse 를실행하여추가된플러그인으로 새로만들기 한다. - 17 -
4. JUnit A. 소개 JUnit은우리가만든프로그램이원하는방향으로동작하는지기대값과결과값을비교하여알아볼수있는테스트툴이다. 대형프로젝트의경우시나리오와로직이나온후로직의모든문제를테스트하는것은시간적으로문제가많다. 또한클래스파일을테스트할때, 반드시 main 메소드를만들어겉으로만테스트하는것은엄연한의미에서테스트라고보기힘들다. JUnit은작은범위만을테스트한후그범위들을모아전체적으로이상이없다고판정을내려준다. 비행기로예를들자면비행기를만들어직접하늘에날게하는것이아니라부품또는기능마다하나씩살펴보고, 모든것들이각자이상이없다면비행기자체도결합이없다고결론을내리는방식이다. Test Case는일련의테스트를실행하기위한장치로서 Fixture와기능, 원시코드경로, 멤버함수간의상호작용을정의하는것이다. 전형적으로작성한모든클래스는 Test Case를가지고있어야한다. 테스트 Fixture는테스트수행에필요한자원인 Primitive 변수와오브젝트를제공하는것이다. 동일하거나유사한오브젝트에대한테스트가두개이상있을경우테스트환경을 Setup하기위한코드를각테스트에서꺼내어하나의메소드에넣어둔다. 동일하거나유사한환경에서실행되는테스트를위한설정을테스트 Fixture라고한다. Test Suite는관련된테스트케이스를모아놓은것을말한다. B. 사용방법 JUnit 홈페이지 (http://www.junit.org) 에서 junit.jar 파일을다운로드하여자바 Class Path에 jar 파일을설정한다. 아래의소스코드는 JUnit을이용한 Test Case를 extend 하여메소드를테스트하는소스코드이다. package tddbook; import junit.framework.*; import junit.textui.*; public class JUnitTutorialTest extends TestCase { public JUnitTutorialTest(String arg0) { super(arg0); } public void testnumber() { - 18 -
} int expected = 10; assertequals(expected, 2*5); } public static void main(string[] args) { } TestRunner.run(JUnitTutorialTest.class); 위와같은소스코드가전형적인 JUnit을이용한소스코드의틀이라고할수있다. 위의 testnumber가실제적인테스트를행하는메소드이며, 이렇게메소드명이 test 로시작하는메소드들은원하는만큼만들어서사용할수있다. testnumber 메소드를보면 assertequals 라는 Test Case를통해서 extend 받은메소드를이용하여 2*5의결과값이기대한값 (expected) 와일치하는지비교한다. 소스코드실행결과는아래와같다. Time: 0.01 OK (1 test) 자세히보면가장윗줄에점 (.) 을볼수있는데, 이것은 test 로시작하는메소드들의개수 ( 테스트의개수 ) 를의미한다. Time은테스트하는데소요된시간을의미하며 OK 는 1개의테스트가성공했음을알려준다. 이렇듯텍스트로그결과를보여주는까닭은우리가 main 메소드에서 junit.textui.testrunner을사용했기때문이며이외에도 awt나 swing을이용한비주얼적인결과를볼수도있다. JUnitGui awt, swing 을이용한유닛테스팅 package tddbook; import junit.framework.testcase; public class JUnitTutorialTest extends TestCase { public JUnitTutorialTest(String arg0) { super(arg0); } public void testnumber() { int expected = 10; - 19 -
} assertequals(expected, 2*5); } public void testfailmessage() { int expected = 10; assertequals(expected, 3*5); } public static void main(string args[]) { junit.textui.testrunner.run(junittutorialtest.class); } 위의소스코드는 testfailmessage 메소드를추가한소스코드이다. 소스코드를보면 expected 값은 10이지만, 3*5의값은 10이아니다. 위의소스코드를실행하면아래와같은실행결과가나타난다...F Time: 0.01 There was 1 failure: 1) testfailmessage(tddbook.junittutorialtest)junit.framework.assertionfailederror: expected:<10> but was:<15> at tddbook.junittutorialtest.testfailmessage(junittutorialtest.java:17) at sun.reflect.nativemethodaccessorimpl.invoke0(native Method) at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.j ava:39) at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodacces sorimpl.java:25) at tddbook.junittutorialtest.main(junittutorialtest.java:21) FAILURES!!! Tests run: 2, Failures: 1, Errors: 0 두개의점은테스트의개수를뜻하며오른쪽의 F 는테스트가실패 (Fail) 되었음을의미한다. There was 1 failure: 아래에는테스트의실패이유와 Trace가나타난다. 예상대로기대값과결과값이달라 AssertionFailedError 가발생했음을알려준다. 마지막줄은총 2개의테스트중 1개의 Fail이있고, Error는 0개임을말한다. 테스트코드에서 Fail과 Error는다르다. Fail은우리가테스트한기대값과결과값이다를때발생하 - 20 -
지만, Error는코드상의오류나 NullPointerException 와같이예측못한 Exception이발생할때나타난다. setup JUnit 테스트코드의 setup 메소드는특별한의미를지니고있다. 주로소스코드내에서사용할리소스를초기화시킬때 setup 메소드를이용한다. 즉, 각각의테스트코드가항상 new Person() 이라는 statement를실행한다면이것을 setup 메소드에선언하여테스트메소드가실행될때마다수행하게끔할수있는것이다. 결국 setup 메소드는각각의테스트메소드들이수행되기바로직전에매번실행되는것이다. teardown setup 메소드와는반대로테스트메소드가종료될때마다수행되는메소드이다. 사용한리소스를 Clear 할때주로사용된다. C. Useful Methods 메소드명기능 asserttrue(x); x가참인지테스트한다. assertfalse(x); x가거짓인지테스트한다. assertnull(x); x가 Null 값인지테스트한다. assertnotnull(x); x가 Null 값이아닌지테스트한다. fail(msg); 무조건실패시키고 msg를출력한다. 주로 Exception 테스트시사용한다. - 21 -
5. CTIP A. 소개 CTIP은지속적통합 (Continuous Integration, 이하 CI) 개념을 Java 기반의개발프로젝트에쉽게적용하기위한플랫폼이다. CI는수년전부터많은이슈가되어왔고, 상당한성숙단계에이른개발활동 (Development Practice) 이다. CI는대표적인 Agile 개발프로세스인 Extreme Programming의개발 Practice 중하나로포함되어있다. 손쉽게 CI를적용하기위한다양한 CI 서버들이개발되었고, 현재많은프로젝트에도입되어성공적인프로젝트수행에공헌을하고있다. 기존의많은개발프로젝트들의막바지통합과정은참으로고통스러운과정이었다. 개발자의환경에서는정상적으로실행되던코드들을통합서버에올리기만하면알수없는에러들이발생했고, 모듈간약속된인터페이스는갑자기변경되어서로연동이되지않는문제가생겼다. 이러한통합과정의문제를해결하기위해 Martin Fowler의글 Continuous Integration 에서기존개발단계의후반에수행되던통합활동을일상적인개발활동에자연스럽게녹이는 CI를해결책으로제시한다. CI 활동을간단히설명하면다음과같다. 개발자는소스저장소로부터최신소스를내려받는다. (Check Out) 개발자는코드를작성한후자신의개발기에서정상적으로동작하는지충분히검증한다. 검증이끝난후개발자는작업내용을소스저장소에올린다. (Check In) 개발자 ( 또는통합관리자또는자동화된시스템 ) 는통합서버에서방금작업한코드가반영된전체코드내용에대한빌드를수행한다. 만약빌드가실패할경우실패원인을분석하고, 문제를해결하여빌드가성공될수있도록한다. CI가이상적으로수행된다면개발막바지의통합작업이필요없게된다. 통합서버의최신빌드에는개발자가작업한내용들이자연스럽게통합이되어있기때문이다. 2008년 JOLT 상을수상한책인 Continuous Integration: Improving Software Quality and Reducing Risk 에서는 CI의수행을통한주요이점을다음과같이제시하고있다. 위험을줄일수있다. 수동으로수행해야하는반복작업을줄일수있다. - 22 -
언제, 어느장소에서도배포가능한소프트웨어를만들수있다. 프로젝트에대한더나은가시성을제공한다. 개발팀에게소프트웨어제품에대한자신감을불어넣는다. 이러한목적을달성하기위해서 Martin Fowler가제시하는성공적인 CI 수행의요건은다음과같다. 단일소스저장소 (Source Repository) 를유지하라. 빌드를자동화하라. 빌드가자체적으로테스트가능하도록하라. 모든사람은매일작업내용을커밋 (Commit) 하라. 모든커밋들은통합서버의메인라인에반영되어야한다. 각빌드가빨리수행되도록하라. 운영환경과되도록비슷한환경에서테스트하라. 최신결과물에쉽게접근할수있도록하라. 현빌드상황을쉽게알수있도록하라. 위의요건중일부는개발팀의업무프로세스정의와같은정책적인부분이고, 일부요건들은시스템적으로뒷받침되어야하는부분이다. 이중시스템적으로뒷받침되어야하는부분을구현한것이 CI 서버, 소스버전관리시스템과같은도구들이다. CTIP도이러한시스템적요건을효과적으로구성하기위해고안되었다. B. 제공기능 i. CI 서버를통한지속적통합및빌드 ii. 품질도구들을통한코드품질검토 ( 테스트및정적분석 ) iii. 빌드결과의배포및관련자에게통보 C. 특징 i. 단일소스저장소 (Source Repository) 관리 소스코드버전관리시스템을도입하여소스코드를일관성있게관리한다. ii. 빌드자동화 CI 서버와 Ant 빌드스크립트를통해빌드를자동화한다. iii. 자체적으로테스트가능한빌드 - 23 -
코드품질관리도구들을통한단위테스트등의테스트성공여부와서버의 deploy 성공여부를통해빌드성공여부를확인한다. iv. 빠른빌드수행 CI 서버와 Ant 빌드스크립트를통해단계적빌드 (Staged Build) 를구성합니다. v. 운영환경과유사한환경구성 CI 서버의환경을운영환경과유사하도록구성한다. vi. 최신결과물에대한쉬운접근 CI 서버를통해최신빌드결과물및빌드리포트를쉽게내려받을수있다. vii. 손쉬운빌드상태모니터링 CI 서버가제공하는 RSS feed 혹은이메일전송기능을통해빌드상태를모 니터링할수있다. D. 영역 i. 소스코드버전관리영역 CVS, SVN 등의소스코드버전관리시스템을사용하여프로젝트전체소스코드의일관성을유지한다. 개발자는버전관리시스템의 Repository로부터최신소스를 Check Out 하고, 작업내용을 Check In 한다. ii. 빌드및배포관리영역 CI 서버를통해지속적으로빌드를수행하고, 대상서버에대한배포작업을수행한다. 빌드주기는정해진시점에수행 (Nightly build) 하거나버전관리시스템의 Repository에변경이있을경우즉시수행될수있다. 소스코드버전관리시스템으로부터최신소스를받아온다. 코드품질관리도구를실행한다. 빌드결과를개발자에게통보한다. 서버에빌드된어플리케이션을배포한다. iii. 코드품질관리영역 오픈소스코드검토도구를활용하여코드품질을확인하고, 결과를개발자 에게통보한다. 다양한오픈소스및상용품질관리도구가개발되어있으므로 필요에따라선택하여적용할수있다. iv. 대상서버군 - 24 -
운영서버배포를위한스테이징서버, 테스트실행을위한테스트서버등을운영한다. E. 도구 CTIP의각영역에서는적절한도구를선정하여영역에서필요한기능을제공해야한다. 기본적으로 CI 서버와소스코드버전관리시스템, 빌드시스템, 품질관리도구가필요하다. 다양한오픈소스및상용도구들이개발되어있기때문에특별한기능이필요하지않은경우굳이이러한도구를개발할필요는없다. 도구는도구자체의기능, 프로젝트특성, 팀의도구에대한익숙함등을고려하여선정한다. - 25 -
6. 레퍼런스 A. 도서 i. JUnit in Action : 단위테스트의모든것피터타치브외 3인저 이복연역 인사이트 2011. 7. 3 B. 웹사이트 i. TortoiseSVN http://tortoisesvn.net/ ii. iii. iv. Mantis http://www.mantisbt.org/ Mantis 포럼 http://www.mantisbt.org/forums/ Technobuff http://www.technobuff.net/ v. JUnit http://junit.org/junit4/ - 26 -