개발환경 2009.04.23-1 -
개발홖경목차 1. 개발환경개요 2. 구현도구 3. 개인빌드 (Maven) 4. 테스트도구 5. 형상관리 6. CI 서버 7. Deploy 8. 이슈관리 - 2 -
1. 개발홖경개요 1. 개발환경개요 2. 서비스도출 3. 개발환경구성요소 4. 적용오픈소스 5. 서비스별소개 6. 배포개발환경구성 - 3 -
1. 개발홖경개요 1. 개발홖경개요 개발환경은프레임워크이해관계자중응용 S/W 개발자를위한환경 전자정부개발프레임워크이해관계자주요관심사분석 응용 SW 개발자는전자정부개발프레임워크를기반으로어플리케이션을개발하며, 개발생산성향상을위해전자정부개발프레임워크로부터의개발지원기능이필요함 응용 SW 개발자 개발 실행 응용 SW 응용 SW 는전자정부개발프레임워크를기반으로개발되는어플리케이션으로써어플리케이션의효과적인동작을위한전자정부개발프레임워크의실행지원기능이필요함 전자정부개발프레임워크 개발프레임워크관리자는전자정부개발프레임워크의지속적인개선및유지보수를담당하며, 전자정부개발프레임워크의효과적인관리지원기능이필요함 관리 개발프레임워크관리자 운영 운영 SW 운영자 응용 SW 운영자는응용소프트웨어의운영과정에서어플리케이션의기반인전자정부개발프레임워크로부터의운영지원기능이필요함 - 4 -
2. 서비스도출 (1/2) 1. 개발홖경개요 응용 SW 개발자의역할인요구분석자, 분석설계자, 구현자, 테스터, 배포자, 형상및변경관리자, 프로젝트관리자등을지원하는사례분석결과는다음과같음개발환경서비스그룹사례분석 개발프레임워크기술구조사례연구 개발프레임워크 ( 사업자명 ) SYSTEMiER ( 삼성 SDS) Nexcore (SK C&C) LAF/J (LG CNS) Live Framework ( 현대정보기술 ) 한화프레임워크 ( 한화 S&C) ProFrame (TmaxSoft) 요구분석자지원서비스 N/A N/A N/A 분석설계자지원서비스 * N/A 모델링 모델링, MDSD 구현자지원서비스 Code/Conf. Generation, Debugging IDE, 템플릿및개발표준, 코드 Inspection 개발환경설치, IDE, Prototype, 코드 Inspection 테스터지원서비스 Test Automation, Test Reporting 단위테스트, 성능테스트 단위테스트, 성능테스트 배포자지원서비스 형상 / 변경관리자지원서비스 프로젝트관리자지원서비스 Deployment 형상관리 N/A 자동빌드형상관리 N/A 자동빌드형상관리 N/A N/A N/A Debugging Testing Deployment Version Control N/A N/S N/A N/A N/A 빌드 N/A RSD/RSA Transformation 디버깅, EMB Designer, ProMapper, DBIO Editor Service Tester Deploy Management 소스형상관리, 버그추적관리 버전관리, 개발자권한관리 N/A N/A - 5 -
2. 서비스도출 (2/2) 1. 개발홖경개요 전자정부개발프레임워크개발환경의서비스그룹은 Implementation Tool, Test Tool, Deployment Tool, 그리고 Configuration & Change Management Tool 등으로구성됨 개발환경서비스그룹도출 서비스그룹 설명 개발환경 Implementation Tool 업무프로그램구현을지원하는도구임 Implementation Tool Test Tool Deployment Tool Configuration & Change Management Tool Test Tool Deployment Tool Configuration & Change Management Tool 구현된업무프로그램의테스트를지원하는도구임 구현완료된업무프로그램을실행환경에배포가능한형태로패키징하고, 패키징된업무프로그램을실행환경에배포하는도구임 형상및변경관리지원도구임 환경 서비스그룹 - 6 -
3. 개발홖경구성요소 1. 개발홖경개요 개발환경은개발자 PC 에서개발서버, 운영서버로연결되는개발흐름을지원함 Implementation Tool Test Tool Deployment Tool Conf. & Change Mgt. Tool Debug Test Reporting Build Configuration Mgt. Editor Unit Test Deployment Change Management Methodology & Template 개발자 PC 개발서버 예 Coding Build 정상 Commit 여부 Source Compile TestCase Test Packaging Inspection 아니오 형상관리 CheckOut Build Compile Test Packaging Inspection Debugging 운영서버 WAS 재기동 Deploy - 7 -
4. 개발홖경선정오픈소스 1. 개발홖경개요 개발환경오픈소스 SW 1,2 차평가를통해선정된 14 개의오픈소스 SW 는다음과같음 No 서비스그룹서비스오픈소스라이선스 1 Source Editor Eclipse EPL & EDL 2 Editor UML Editor AmaterasUML EPL 1.0 구현도구 개발환경오픈소스 SW 평가결과 3 ERD Editor AmaterasERD EPL 1.0 4 Debug Eclipse EPL & EDL 5 6 Test Reporting Ant Apache License 2.0 Test Automation Ant Apache License 2.0 7 TestCase Junit CPL 테스트도구 8 Unit Test Mock Support EasyMock MIT 9 DB Support DbUnit LGPL 2.1 10 Test Coverage EMMA CPL 11 배포도구 Build Tool Maven Apache License 2.0 12 CI Server Hudson MIT 13 형상관리도구 Configuration Management Subversion Apache License, BSD-style 14 Change Management jtrac Apache License 2.0-8 -
5. 서비스별소개 - 구현도구 1. 개발홖경개요 개발자의코드작성및디버깅을지원하는도구로 Eclipse 기반하에추가 Plug-in 을제공 주요메커니즘 구성요소별상세 프로젝트팀 정책적용 구현도구 방법론 Plug-in 템플릿 구성요소 에디터 설명 편리한소스코드작성환경제공 UML, ERD 에디터제공 DBIO 에디터를통해 SQL 작성및수행결과확인가능 Included 디버거 에디터내에서편집모드와디버깅모드의전환을통한작업의편리성 Remote 디버깅제공 Plug-in 에디터 디버거 방법론 ( 개발절차 ) 어플리케이션을개발하기위한가이드제공 실행환경 템플릿 유형별템플릿제공 템플릿기반의코드제너레이션기능 (2 차사업수행예정 ) - 9 -
5. 서비스별소개 테스트도구 1. 개발홖경개요 개발자가자신의코드를테스트하기위해 JUnit 기반으로 TestCase 의작성및수행을지원하고, 자동 으로테스트하고리포팅하도록지원하는도구 주요메커니즘 구성요소별상세 구성요소 설명 구현도구 테스트도구 작성 테스트클래스 실행 테스트기반환경 테스트기반환경 Junit 기반의 Unit Test 작성지원 Mock 및 DB Support 작성 분석 Coverage 분석 Test Reporting Test Reporting Eclipse 기반의 Green Bar GUI HTML/XML/Excel 형식의 Reporting 지원 테스트대상모듈 Coverage 리포트 결과리포트 Coverage 분석 TestCase 가커버하는정도를수치및코드영역을통해확인 - 10 -
5. 서비스별소개 배포도구 1. 개발홖경개요 Maven 기반의개발자빌드와 CI 서버를통한지속적인통합을지향 주요메커니즘 구성요소별상세 구현도구 정책적용 배포도구 프로젝트팀 구성요소 설명 결과알림 리포트 결과확인 배포정책 빌드도구 Maven 기반의빌드수행 3 rd Party 라이브러리관리편의성을위한 Nexus Repository 제공 테스트도구 빌드자동화도구 빌드도구 저장소 서버 형상관리도 구 PM, QM 등 개발자 빌드자동화도구 형상관리도구와연계하여소스가변경된경우에만빌드를수행 배포정책에따라설정된주기에자동수행 빌드결과에대한리포트및피드백기능제공 서버이관및 WAS 기동 / 중지 - 11 -
5. 서비스별소개 형상관리 1. 개발홖경개요 형상요소의식별, 이력관리를지원하는형상도구와 JAVA 기반의이슈관리시스템제공 주요메커니즘 구성요소별상세 프로젝트팀형상관리배포도구 개발자 Check in/out Configuration Management 배포 빌드자동화도구 구성요소 Config. Mgmt 설명 Suversion 을그대로활용 이슈 ID 등록을통한이슈연계 백업 PL 이슈관리 Change Management 백업 저장소 Change Mgmt JAVA 기반의이슈관리시스템 이슈등록, 검색, 처리기능제공 CMO - 12 -
7. 배포개발홖경구성 (1/10) 1. 개발홖경개요 설치 egovframeworksample.zip 파일을 C:\ 드라이브에서압축을푼다. 디렉토리정보디렉토리설명 bin 실행파일디렉토리 apache-tomcat-6.0.14 Apache Tomcat 6 jdk1.5.0 eclipse maven/repository workspace egovframework.guideprogram. basicsample egovframework-guideprogramtestcase JDK_HOME 개발환경이포함된 Eclipse JEE Ganymede (3.4.2) Local Maven Repository Eclipse Workspace 실습용프로젝트테스트도구용샘플프로젝트 - 13 -
7. 배포개발홖경구성 (2/10) 1. 개발홖경개요 실행 C:\egovframeworkSample\eclipse 시작 를더블클릭하여 Eclipse 를실행한다. - 14 -
7. 배포개발홖경구성 (3/10) 1. 개발홖경개요 설정 Maven Installations 설정확인 - 15 -
7. 배포개발홖경구성 (4/10) 1. 개발홖경개요 설정 Maven Installations 설정확인 - 16 -
7. 배포개발홖경구성 (5/10) 1. 개발홖경개요 설정 Apache Tomcat 6 설정 - 17 -
7. 배포개발홖경구성 (6/10) 1. 개발홖경개요 설정 C:\egovframeworkSample\basicSampleDB.cmd 를더블클릭하여 basicsample 용 DB 를띄운다. - 18 -
7. 배포개발홖경구성 (7/10) 1. 개발홖경개요 설정 Eclipse의 Data Source Explorer View에서 basicsample HSQLDB 에서오른쪽버튼의 connect 를선택하여다음과같이테이블이설정되어있는지확인한다. - 19 -
7. 배포개발홖경구성 (8/10) 1. 개발홖경개요 설정 Eclipse 에서 Build Automatically 가선택되어있다. - 20 -
7. 배포개발홖경구성 (9/10) 1. 개발홖경개요 설정 프로젝트앞에빨간아이콘이있어오류가있다면 Update Maven Configuration 을실행해본다. - 21 -
7. 배포개발홖경구성 (10/10) 1. 개발홖경개요 테스트도구에서제공하는샘플프로젝트 실습에서사용할프로젝트 - 22 -
2. 구현도구 1. 개요 2. egovframework IDE 3. Source Code Editor 4. UML 작성 5. ERD 작성 6. DBIO 작성 7. DEBUG - 로컬디버깅 8. DEBUG - 리모트디버깅 9. egovframework Update 10. 참고자료 - 23 -
1. 개요 2. 구현도구 구현도구는 UML, ERD, Source Code, DBIO Editor 와 DEBUG 로구성 전자정부개발프레임워크구현도구 서비스그룹 설명 UML Editor ERD Editor Source Code Editor DBIO Editor DEBUG UML ERD Source Code Editor UseCase Diagram, Class Diagram 작성기능을제공 AmaterasUML 선정 ER 논리모델과물리모델작성을지원하며 DDL 생성, 테이블명세서생성, Reverse engineering 기능 AmaterasERD 선정 egovframe 기반의어플리케이션개발지원을위한프로젝트생성마법사, Perspective 및 Menu 등기능 Eclipse 선정 Eclipse platform (JEE package) DBIO Editor ibatis 실행환경을지원하기위한 SQL Map 기반의 DBIO 작성 Editor DEBUG 실행로컬또는원격으로실행중인프로그램에서오류를발견하고진단할수있는디버거기능 Eclipse 선정 - 24 -
1. 개요 - Package 구성 2. 구현도구 구현도구는 Eclipse JEE 를기반으로 Package 하고, UML, ERD, DBIO Editor 플러그인으로구성됨 구현도구가 Eclipse JEE 를기반으로하고있으므로아래와같은패키지가포함되어있다. - CVS(Concurrent Versions System) - EMF(Eclipse Modeling Framework) - GEF(Graphical Editing Framework) - JDT(Eclipse Java development tools) - Mylyn - UDC(Usage Data Collector) - WTP (Web Tools Platform ) : Web Tools, Jee Tools, XML Tools - RSE(RSE, Target Management - PDE(The Plug-in Development Environment) - Datatools(DTP, Data Tools Platform ) - 25 -
1. 개요 Eclipse 기본화면구성 2. 구현도구 Eclipse 기본화면은메뉴바, 툴바, 퍼스펙티브바, 4 개의 View 영역으로크게구분된다. 이 4 개의뷰를포함하는전체 영역을퍼스펙티브 (Perspective) 라고하고, 이 Eclipse Window 전체를워크벤치 (Workbench) 라부른다. 메뉴바 툴바 워크벤치 (Workbench) 퍼스펙티브바 중앙 View 영역 우측 View 영역 퍼스펙티브 (Perspective) 퍼스펙티브에따라사용자에게적합한뷰와메뉴가배치된다. 좌측 View 영역 하단 View 영역 Fast 뷰 : 잘사용하지않는화면들을최소화시켜놓고필요한시점에만잠깐홗성화시킬때사용된다. - 26 -
1. 개요 화면구성 2. 구현도구 구현도구는개발자가실행환경을쉽고편리하게개발할수있도록특성화된퍼스펙티브, 통합메뉴, 뷰, 에디터등을제공한다. egovframework 통합메뉴 egovframework 퍼스펙티브젂홖 DBIO, UML, ERD 등의다양한 Editor 제공 Package View, DataSource Explorer 등의뷰제공 OutlineView 등의홗용 DBIO Search, Query Result 등의뷰기능제공 - 27 -
2. egovframework IDE (1/3) 2. 구현도구 구현도구는실행환경기반의어플리케이션을개발하는개발자의편의성을위하여 Eclipse 기반의 Perspective, Menu, 프로젝트생성마법사등을제공한다. 프로젝트생성마법사 egovframework Core Project : 일반적인 JAVA Project 생성 egovframework Web Project : Web 기반프로젝트생성 egovfrmaework 기반의어플리케이션개발에적합한프로젝트홖경구성 - 28 -
2. egovframework IDE (2/3) 2. 구현도구 egovframework Perspective egovframework 기반의어플리케이션개발을위한최적의 View 초기세트와레이아웃을제공 egovframework 통합메뉴 egovframework 퍼스펙티브젂홖 DBIO, UML, ERD 등의다양한 Editor 제공 Package View, DataSource Explorer 등의뷰제공 OutlineView 등의홗용 DBIO Search, Query Result 등의뷰기능제공 - 29 -
2. egovframework IDE (3/3) 2. 구현도구 egovframework Menu egovframe Perspective 에서만활성화되는메뉴로 eclipse 내에서분산되어있는플러그인들의기능 (egovframework 에서필히사용되어지는기능 ) 을빠르게접근할수있는통합메뉴를제공 * 세부메뉴항목별설명 Start - New Core Project : egovframework Core Project 생성 - New Web Project : egovframework Web Project 생성 Analysis - New Usecase Diagram : Usecase Diagram 생성 Design - New ER Diagram : ER Diagram 생성 - New Class Diagram : Class Diagram 생성 Implementation - New SQL Map Config : SQL Map Config 파일의생성 - New SQL Map : SQL Map 파일의생성 - Show DBIO Search View : DBIO Search View 를나타나게함. - 30 -
3. Source Code Editor 2. 구현도구 Source Code Editor 는 Eclipse 내 Eclipse Java development tools(jdt) 를통해지원 Code Assist : Code 도움말기능 Quick Fix : Code 에러빠른수정가능 코드스타일적용 코드템플릿처리 Quick Type Hierarchy : 상속구조표시 Quick Outline : 코드개요표시 소스코드네비게이션 Mark Occurrences - 커서가위치한지역변수, 상수, 필드, 메소드, 클래스등의코드요소가나타나는곳이모두하이라이트된다 로컬히스토리 : file 수정이력비교 / 복구 - 31 -
4. UML 작성 2. 구현도구 오픈소스중선정된 UML 작성도구는 AmaterasUML로써 UseCase Diagram, Class Diagram 작성기능을제공 UseCase Diagram 작성 Use Case Diagram 작성할수있는기능을제공 Class Diagram 작성 Class Diagram 작성할수있는기능을제공 UseCase Diagram 작성 제약사항 UML 1.4 기반으로설계작업가능 UML 2.0 지원하지않음 Class Diagram 작성 - 32 -
5. ERD 작성 2. 구현도구 오픈소스중선정된 ERD 작성도구는 AmaterasERD 로서논리모델과물리모델작성을지원 ERD 생성 Entity 정의와 Entity 간의관계를표현할수있는작업창 DDL 작성 도구를이용해작성된 ER Diagram으로 Oracle, PostgreSQL, MySQL, hsqldb 등에맞게 DDL 스크립트를생성 Reverse Engineering 지원 Oracle, PostgreSQL, MySQL, hsqldb 등의 Database로부터테이블 Import가가능 테이블명세서 Export - 도구를이용해작성된 Table 들의명세서를 HTML 형식 Export 제약사항 ERWIN 모델링도구와호환불가 - 33 -
6. DBIO 작성 2. 구현도구 DBIO Editor 는 ibatis SQL Map API 를통해 DBIO 를개발하고자할때이를쉽고편리하게작성할 수있도록다음과같은 Editor 기능을제공한다. SQL Map Config Editor - SQL Maps 설정파일을 UI 형태로편집가능하도록지원 SQL Map Editor - SQL Maps 파일을 UI 형태로편집가능하도록지원 * ibatis SQL Map API 에서는기본적으로 SQL Map 파일과 SQL Map 설정파일이요구된다. - 34 -
6. DBIO 작성 - SqlMap Config Editor 2. 구현도구 SqlMap Config Editor는 ibatis SQL Maps 설정파일을 UI 형태로편집가능하도록지원하는도구 Transaction Manager 주요트랜잭션 Type과 DataSource Type 에필요한 Properties 항목을정의한다. SqlMap 목록 SqlMap 항목을추가, 삭제, 신규생성하고 SQLMapConfig 파일내등록을지원한다. Transaction Manager SQL Map 목록 - 35 -
6. DBIO 작성 - SqlMap Editor 화면구성 2. 구현도구 SqlMap Editor 는 ibatis SQL Maps 파일을 UI 형태로편집가능하도록지원하는도구임 그룹별구성요소 Tree 구성요소생성, 삭제, 검색, 바로가기기능 사용자 Layout 조정 수평, 수직레이아웃선택기능 In/out Section Parameter, Result 설정 (class, map 선택 ) Query Section SQL 쿼리작성시 Query Builder 기능제공 Test Section 쿼리에따른 Parameter Name 자동설정 Row Limit ( 쿼리테스트결과행길이제한 ) 쿼리 Test 결과에따른 VO 자동생성기능 Query Result : 쿼리수행결과확인 Source Tab : SqlMap XML 편집기능지원 SqlMap Outline View 구성요소바로가기기능지원 Source Tab 그룹별구성요소 Tree 사용자 Layout 조정 In/Out Section Query Section Test Section Query Result SQL Map Outline 뷰 - 36 -
6. DBIO 작성 - 쿼리작성 2. 구현도구 SqlMap Editor 에서는쿼리작성을용이하게하기위해 Query Builder 기능을제공함 - 37 -
6. DBIO 작성 - 쿼리 Test 및결과확인 2. 구현도구 SqlMap Editor 는 Test Section 과 Result View 를통해쿼리테스트기능을지원함 1 DB Info 를선택 쿼리 Test 절차 1 Query Section 에서 DB Info 를선택한다. 2 Query 작성 2 Query Section 에서 Query 를작성한다. 3 Test Section 에서 Parameter 값을입력한다. 3 Parameter 값입력 4 결과값을확인한다 Test Section 버튼설명 4 Query Result 확인 - Set Param : Parameter Name 을자동세팅한다. - Query Test : 쿼리테스트를수행한다. - Create VO : 쿼리결과에따른 VO 를생성한다. - Row Limit : 쿼리결과행길이제한 ( 기본값 =100) - 38 -
6. DBIO 작성 - VO 자동생성 2. 구현도구 SqlMap Editor 는개발자편이성을위해 VO(Value Object) 를자동생성하는기능을제공함 1 Create VO 클릭 3 쿼리수행결과에따른 VO Class 가생성됨 2 VO Class 명입력 - 39 -
7. DEBUG - 로컬디버깅 2. 구현도구 구현도구에는로컬또는원격으로실행중인프로그램에서오류를발견하고진단할수있는디버거를제공함 중단점설정 디버깅중프로그램의의심되는부분을집중적으로분석하기위해 Break point 를설정해디버깅포인트를지정한부분을하이라이트 스텝단위진행 프로그램을한스텝씩진행하면서프로그램의실행흐름과 내부상태를확인 스텝필터링 필터링대상프로그램의경우 Step Over 와같이동작하고, 필터링대상이아니면 Step Into 와같이동작한다. Debug View 의 Use Step Filters 버튼을눌러활성화 Evaluating Expressions 수행중인프로그램을중지시키지않고 상태를확인할수있는기능을제공 Variables View Variables View 를통해메소드에서 사용중인변수값의상태를확인할수있는기능지원 - 40 -
8. DEBUG - 리모트디버깅 2. 구현도구 원격컴퓨터의 WAS(Jboss, JEUS, WebLogic) 에서실행되는어플리케이션을디버깅 디버깅환경설정 WAS 환경설정파일에 -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n server 를정의 (Jeus 서버기준 ) 절차 1. 먼저위의환경설정으로원격지서버를가동하고해당 Java 프로그램을원격서버에 Deploy한것을전제로한다. 2. 메뉴 >Run > Debug Configurations 클릭. 3. Remote Java Application 에서마우스오른쪽버튼을클릭하여 NEW 를실행 4. Connection Properties 를입력하고적용 ( Apply ) 한뒤 Debug 버튼클릭 5. 웹브라우저에서해당프로그램을실행하면디버깅이진행된다. * 디버그방법 (BreakPoint 등 ) 은 로컬디버깅과동일하다. - 41 -
9. egovframework Update 2. 구현도구 사용자의개발환경에 egovframework 을설치하거나업데이트함 절차 1. eclipse 개발환경에서메뉴 > Help > Software Updates 를클릭한다. 2. Available Software 목록우측에있는 Add Site 버튼을클릭한다. 3. Location 입력항목에 http://192.168.100.16:8080/egovframework/update 를입력하고 OK 버튼을클릭한다. 4. 입력항목또는모든하위트리항목을선택하고 Install 버튼을클릭한다. - 42 -
10. 참고자료 2. 구현도구 Eclipse Home http://www.eclipse.org/ Amateras UML http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=amaterasuml Amateras ERD http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=amateraserd - 43 -
3. 개인빌드 1. Maven 개요 2. Maven 디렉터리구조 3. 빌드 Lifecycle 4. Maven 플러그인 5. 의존성관리메커니즘 6. Maven 저장소 7. 프로젝트객체모델 (Project Object Model) 8. Maven 이클립스통합 : m2eclipse 9. 참고자료 - 44 -
1. Maven 개요 (1/2) 3. 개인빌드 불필요한설정을최소화한다는개념아래 Ant 와같은빌드기능을제공할뿐아니라구조화된빌드기 능을통해 learning curve 및재사용성을향상시킴 Maven 특징 Maven 장점 Maven 단점 뛰어난의존성관리의존성자동업데이트저장소를통한라이브러리일괄관리 모든프로젝트에걸쳐쉽게적용가능한일관적인사용법 라이브러리및메타데이터저장을위한지속적으로확장되고있는저장소 쉽게작성가능한플러그인을통한확장성 동시에다수의프로젝트핸들링할수있는쉬운설정기반의메커니즘 repository 관리의불편함 - Maven 프로젝트의급속한발전으로 central repository 가제공하는라이브러리들이급속히증가하고있으나아직 3 rd 파티라이브러등미제공라이브러리들이있음 pom.xml 파일관리 - 메이븐프로젝트관리에대한모든내용이 pom.xml 파일에담기게되므로길고장황하게될수있음 프로젝트에특화된복잡한빌드기능제약 - 메이븐프로젝트특성상소프트웨어빌드에통용되는라이프사이클을제공하고있어세부항목또는특화된빌드환경에대한지원이미약함 간단한설정을통한배포관리 Java, C++ 등다수의프로그래밍언어지원 - 45 -
1. Maven 개요 (2/2) 3. 개인빌드 의존성관리, 라이브러리관리, 빌드생명주기및단계객체모델을갖는프로젝트관리도구로표준화 된빌드기능뿐만아니라리포팅및 documentation 생성기능등을제공 Maven 아키텍처 POM.XML Project Object Model Dependency Management Model Repositories (local and remote) Project life cycle and phases Plugins Source files Generated files Resources Binaries Packaged libraries 프로젝트객체모델 (POM): 메이븐엔진내장 + POM.XML 파일에서선언적으로제공 의존성관리모델 : 로컬및리모트저장소를이용하여관리 빌드생명주기와각단계 : 잘정의된단계들과빌드사이클에따라플러그인들을조율 - 46 -
2. Maven 디렉터리구조 3. 개인빌드 Best practices 을기반으로정규화된디렉터리구조를제공하고있으며모든소스파일들은 /src 디렉터리밑에빌드된 output 은 /target 디렉터리밑에위치함 Maven 표준디렉터리구조디렉터리 / 파일설명 /pom.xml 프로젝트객체모델. 해당프로젝트에대한전반적인정보를갖는다. /src/main/java Java 소스파일위치 /src/main/resources 배포할리소스, XML, properties, /src/main/webapp 웹어플리케이션관련파일위치 (WEB-INF, css 등 ) /src/test/java 테스트케이스 java 소스 /src/test/resources 테스트케이스리소스 /target 빌드된 output 이위치하는디렉터리 - 47 -
3. 빌드 Lifecycle (1/2) 3. 개인빌드 메이븐빌드는소프트웨어프로젝트의핵심적인빌드라이프사이클개념을따르고있으며빌드부터 artifact 의배포까지의라이프사이클을정의하고있음 빌드생명주기설명 Maven2 라이프사이클단계 (phase) 생명주기단계 validate generate-sources 설명 현재설정과 POM 의내용이유효한지확인 코드생성기가이다음의단계들에서컴파일되고처리할소스코드를생성하기시작하는순간 compile test package 소스코드를컴파일한다. 컴파일된클래스들은타깃디렉터리트리구조에저장된다. 컴파일된단위테스트를실행하고그결과를표시한다. 실행가능한바이너리파일들을 WAR 나 JAR 같은배포용압축파일로묶는다. install 압축파일을로컬메이븐저장소에추가한다. deploy 압축파일을원격메이븐저장소에추가한다. $mvn compile - 48 -
3. 빌드 Lifecycle (2/2) 3. 개인빌드 이클립스에서빌드라이프사이클에서정의한각단계들실행하기 메이븐프로젝트 -> Run As -> Maven build.. Goals: clean install - 49 -
4. Maven 플러그인 (1/2) 3. 개인빌드 메이븐은대부분의빌드작업시에플러그인을활용하며메이븐엔진이생명주기단계들과플러그인을 바인딩시켜빌드작업을컨트롤함 Maven Plugins 플러그인플랫폼으로써의메이븐 확장용이 자주사용하는플러그인들을모아패키징한상태로배포 대부분의개발작업시에추가플러그인불필요 단계 Plugin 설명 compile test 소스코드컴파일 단위테스트실행 package maven-jar-plugin 컴파일된바이너리파일들 로부터 jar 패키지생성 emma maven-compilerplugin maven-surefireplugin maven-emmaplugin Code coverage report 생성 가용한 Maven 플러그인매트릭스 - 50 -
4. Maven 플러그인 (2/2) 3. 개인빌드 pom.xml 에서의메이븐플러그인선언예제 - 51 -
5. 의존성관리메커니즘 (1/2) 3. 개인빌드 POM 에서선언적인 dependency 설정으로빌드및배포시에필요한라이브러리들을관리하고로컬 및원격저장소에서선언된라이브러리들을다운로드받아사용함 의존성설정 의존성분석순서 1. 로컬저장소에서의존성확인 2. 원격저장소리스트에서의존성확인 3. 1 과 2 가실패하면의존성에러보고 의존성 scope compile: 기본값으로모든클래스패스에서사용가능 provided: 컴파일과유사하나패키지에는포함되지않는다. 컨테이너나 JDK에서제공. 예 ) Servlet API for web apps runtime: 컴파일러가아닌런타임시에만사용됨예 ) JDBC dirvers test: 테스트단계에서만유용함예 )Junit system: provided와유사하나개발자가직접 JAR 파일을제공해야함. 저장소에서지정한 dependency를찾지않는다. 의존성선언항목 1. <groupid>: 부분적인프로젝트나조직에서의라이브러리집합을식별하기위해제공 2. <artifactid>: 프로젝트의실제이름으로 groupid 와합쳐져프로젝트식별에쓰임 3. <version>: 선언한의존성 artifact 의버전으로프로젝트내에서사용하는 artifcat 의일관성을추구할수있음 - 52 -
5. 의존성관리메커니즘 (2/2) 3. 개인빌드 pom.xml 파일에서의의존성설정및의존성분석 - 53 -
6. Maven Repository 3. 개인빌드 artifact 들의저장소로로컬및리모트 repository 로구성되며프로젝트는 pom.xml 에서선언한 dependency 들을저장소로부터불러와서사용함 메이븐저장소구조 Nexus 연동 로컬 repository 는 artifact 들을로컬파일시스템에 cache 하는기능으로리모트 repository 에서다운로드받아 artifact 들을저장하고관리한다. 리모트 repository 는주로 HTTP 서버로 3rd 파티에서제공하는 artifact 들을제외한거의모든 artifact 들을제공한다. Nexus는메이븐 repository 관리툴로리모트 repository의단점을보완하고 maven 프로젝트의사용편의성을높이기위해사용된다. 각개발자들은리모트 repository가아닌 Nexus 에서 dependency을다운받아사용함으로써프로젝트내의 artifact 버전등의일관성을유지하고 3rd 파티 artifact 등라이브러리를효과적으로공유할수있다. - 54 -
7. 프로젝트객체모델 (POM) (1/2) 3. 개인빌드 프로젝트의구조와내용을설명하고있으며 pom.xml 파일에프로젝트관리및빌드에필요한환경설 정, 의존성관리등의정보들을기술함 pom.xml POM Relationships Build Settings Coordinates groupid artifactid version Inheritance parent dependency management Project Information name description url inception year Aggregation modules Dependencies dependencies licenses developers contributors organization properties build Build Environment Environment Information issuemanagement cimanagement Maven Environment prerequisites profiles profile (activation, ) distributionmanagement packaging reporting mailinglists scm Repositories repositories pluginrepositories 프로젝트의세부메타데이터정보를포함 버전및설정관리, 빌드환경, 라이브러리저장소및의존성 - 55 -
7. 프로젝트객체모델 (POM) (2/2) 3. 개인빌드 프로젝트의 pom.xml 파일에빌드정보들을기술함 <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"> <modelversion>4.0.0</modelversion> <groupid>egovframework.dev.com</groupid> <artifactid>egovframework-dev-com</artifactid> <version>1.0</version> Artifact 정보 <packaging>war</packaging> <name>egovframework-dev-com Maven Webapp</name> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.4</version> <scope>test</scope> 의존성관리 </dependency> </dependencies> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> 플러그인선언 <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </project> - 56 -
8. Maven 이클립스통합 : m2eclipse 3. 개인빌드 m2eclipse 는 Eclipse IDE 에서 Maven 을사용하기위한플러그인으로 Maven 프로젝트생성뿐아니 라 Maven 빌드와 WTP(Web Tools Project) 의통합등다양한기능을제공함 m2eclipse 특징 메이븐프로젝트생성및불러오기 의존성관리및의존성통합 dependency 자동다운로드및업데이트 리모트 repository 탐색기능제공 POM 파일관리화면제공및 dependency list 에대한자동업데이트 다양한 SCM 저장소로부터메이븐프로젝트 check out 이클립스에서메이븐멀티모듈프로젝트생성기능제공 Web Tools Project (WTP) 와의연동 aspectj Development Tools (AJDT) 과의연동 Subversion 플러그인과의연동 - 57 -
8. Maven 이클립스통합 : m2eclipse 프로젝트생성 (1/2) 3. 개인빌드 배포된 egovframework Archetype 을이용한메이븐프로젝트생성예 Maven 프로젝트생성 Maven 프로젝트의 archetype 선택 egovframework 에서는메이븐프로젝트생성을위해두가지방식을제공하고있음 1. 구현도구에서제공하는 Perspective 를이용한 Maven 프로젝트생성 2. Maven archetype 을이용한프로젝트생성 : Archetype is a Maven project templating toolkit. - 프로젝트에특화된 pom.xml 및 resource 들을포함한 Maven 프로젝트생성 Maven Archetype 종류 1. 표준 Archetype maven-archetype-j2ee-simple maven-archetype-quickstart maven-archetype-portlet 2. egovframework Archetype egovframework-maven-webapp * Maven 제공 Archetype 종류 : http://repo1.maven.org/maven2/org/apache/maven/archetypes/ configure.. 버튼클릭으로제공된 archetype 을선택 - 58 -
8. Maven 이클립스통합 : m2eclipse 프로젝트생성 (2/2) 3. 개인빌드 egovframework Archetype 을이용한 Maven 프로젝트 egovframework-webapp Archetype 은 Spring 2.5 기반의 dependency 들을기본으로제공함 - 59 -
8. m2eclipse Maven 기본기능 3. 개인빌드 m2eclipse 에서제공하는메뉴에서메이븐설정및연동기능을호출할수있음 m2eclipse Maven 기능 Update Dependencies 기능 pom.xml 에 dependency 를추가하고 update dependencies 메뉴를선택하면저장소에서해당 artifact 를찾아프로젝트에 Cache 함 - 60 -
8. m2eclipse Maven 기본빌드기능 3. 개인빌드 (Maven) m2eclipse 는이클립스의 Run As 메뉴에 Maven 기본생명주기단계를추가하여빌드편의성을제공함 m2eclipse Maven 빌드기능 Maven install 기능 Maven install 메뉴를선택하요생명주기의각단계를실행하고프로젝트를패키징하여로컬 repository 에저장함 - 61 -
9. 참고자료 Apache Maven http://maven.apache.org/ Maven Central Repository http://mvnrepository.com/ M2eclipse http://m2eclipse.codehaus.org/ Nexus http://www.sonatype.com/books/nexus-book/reference/ - 62 -
4. 테스트도구 1. 테스트 2. 개요 3. 오픈소스 4. 테스트종류 5. Unit Test 6. Mock 7. DB Test 8. Test Automation 9. Test Reporting 10. Test Coverage 11. 참고자료 - 63 -
1. 테스트 (1/2) 4. 테스트도구 테스트 (Test) 테스트대상에입력값을넣었을때그결과가성공혹은실패의결과를내는것이다. 성공 입력 대상 결과 실패 수동테스트 vs. 자동테스트 Here! Here! - 64 -
1. 테스트 (2/2) 4. 테스트도구 장점 쉽다. 간편하다. 수동테스트 테스트불가능한상황이별로없다. 자동테스트 언제든지같은테스트를여러번수행가능 기존테스트는새테스트를작성하는발판이된다. ( 지식축적 ) 빠르므로자주돌려볼수있다. 개발자가코드개선활동을수행할때에도회귀테스트 (Regression Test) 를자주할수있다. 단점 휘발성 테스트항목이늘어난다면? 다른사람에게테스트내용을설명하기어려움 재현하기어려움 코드로작성해야한다. 기술, 노하우가필요하다 코드로테스트를작성할수없는상황이있다. ( 수동테스트와공조 ) 테스트도관리대상이다. 모듈화가잘되어있어야한다. 디자인의개선필요 Legacy Code의어려움 - 65 -
2. 개요 (1/2) 4. 테스트도구 테스트도구는 Unit Test, Mock, DB Test Framework 을통해 TestCase 작성을지원하고, Test Automation, Test Coverage, Test Reporting 등의기능을제공함 구현도구 TestCase 작성 테스트도구 Test 수행 작성 테스트클래스 실행 OOServiceTest Unit Test Framework 테스트대상모듈 MockDao 분석 Test Coverage OOService OODao 작성 <<Dataset>> DaoTest Mock Framework DB Test Framework 자동화 Test Automation 리포팅 DB DB Test Reporting 결과리포트 - 66 -
2. 개요 (2/2) 4. 테스트도구 테스트도구사용프로세스 write TestCases run TestCases analyze Test Coverage run automatically TestCases report Test results - 67 -
3. 오픈소스 4. 테스트도구 테스트도구에채택한오픈소스 구분오픈소스버전비고 write & run TestCases JUnit 4.4, 4.3 Test Framework EasyMock 2.4 Mock Framework Spring test 2.5.6 Spring Test Module DBUnit 2.4.2 DB Test Framework Unitils 2.2 JUnit, EasyMock, DbUnit, Spring Test, ibatis, Hibernate 등을유연 한구조로엮어서테스트할수있는기능제공 Test Coverage EMMA 2.0 Free Java code coverage tool EclEmma 1.3.2 EMMA Eclipse plugin run automatically & report Ant 1.6.5 Java-based build tool Maven 2.0 S/W project management & comprehension tool - 68 -
4. 테스트종류 4. 테스트도구 테스트도구는개발자가코드로작성하고도구를통해자동화할수있는테스트중단위테스트에해당하 며이후 Integration Test, Acceptance Test 까지범위를확장할수있는토대를마련함 MockDao IETest OOServiceTest OODao DB Unit Test File Integration Test Acceptance Test - 69 -
5. Unit Test (1/3) 4. 테스트도구 Unit Test 란대상코드에대해테스트하고자개발자가작성한코드로서, 주로특정메소드를실행해서 그결과가기대값과일치하는지확인하는형태이며, Unit Test 는서로독립적으로수행되어야함. 효과 작성한코드의설계개선작업시, 코드품질에대한확신 코드수정시버그를쉽게찾을수있게해줌 자동화된회귀테스트 (Regression Test) 를가능하게해주는 Source가됨 작성범위 주요흐름에대한테스트 (the happy path) 또다른주요흐름에대한테스트 (the main alternative path) 경계조건에대한테스트 (null 인자체크등 ) Exception 테스트 (Exception 발생하는조건에대한테스트 ) - 70 -
5. Unit Test (2/3) 구성 테스트프레임웍을사용하는 Class 공용으로사용하는테스트데이터 (test fixture) 테스트데이터준비 (Setup of test data) 테스트메소드 (testxxx) ( 테스트별준비 ) 테스트대상메소드실행 assert 문을이용한결과확인 (asserttrue, assertequals etc.) ( 내부메소드 ) 성공입력대상결과실패 4. 테스트도구 1: public class UserAdminTest { 2: 3: 4: /* Class under test */ private UserAdmin useradmin; 5: 6: 7: /* A simple test user */ private User user; // Test Data (Fixture) 8: /* An administrator role */ // 9: private Role adminrole; // 10: 11: 12: 13: 14: /** * Initializes the test fixture. */ @Before 15: 16: 17: public void setup() throws Exception { useradmin = new UserAdmin(); user = new User("John", "Doe"); // Test Data Setup 18: adminrole = new Role("Administrator"); // 19: } 20: 21: 22: 23: 24: 25: 26: /** * Test for method with... */ @Test public void testadduser() { user.setage(18); // Extra Test Setup 27: useradmin.adduser("jdoe", user, adminrole); // Use 28: Test Data 29: 30: 31: 32: User result = useradmin.getuser("jdoe"); assertequals("john", result.getfirstname()); assertequals("doe", result.getlastname()); 33: } 34: } - 71 -
5. Unit Test JUnit (3/3) 4. 테스트도구 JUnit 은자바프로그래밍언어를위한 Unit Test Framework 로, Unit Test 코드를작성하고자동화된 테스트를수행할수있는기능을제공함 - 72 -
6. Mock (1/3) 4. 테스트도구 Mock 객체는 Unit Test 의독립성 (isolation) 을높여주기위해사용하며, 테스트하고자코드와관련이 있는객체 (collaborator) 를흉내내어 Unit Test 를수행할수있도록도와주는객체임 Mock 객체를사용하는경우 진짜객체를준비, 설정하기어렵다 진짜객체가느리다. 진짜객체가사용자인터페이스를갖거나그자체이다. 진짜객체가아직없다. Mock 사용종류 이미구현된 Mock 객체사용 : Spring test (web, jndi), mockrunner EasyMock, JMock, Mockito 등의 Mock 라이브러리사용 Mock으로사용할가짜클래스직접구현 참고 : http://www.shinetech.com/display/www/what+are+mock+objects%3f - 73 -
6. Mock (2/3) 4. 테스트도구 Spring Test web 사용샘플 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: } 32: public class SessionMockTest { /** mock object of the HttpServletRequest */ private MockHttpServletRequest request; /** mock object of the HttpServletResponse */ private MockHttpServletResponse response; /** mock object of the HttpSession */ private MockHttpSession session; /** Target Class */ private Servlet servlet; @Before public void setup() throws Exception { servlet = new Servlet(); request = new MockHttpServletRequest(); session = new MockHttpSession(); } @Test public void testconfirmadmin() throws Exception { session.setattribute("userid", "administrator"); session.setattribute("password", "1234"); } request.setsession(session); servlet.confirmadmin(request, response); asserttrue(servlet.isadmin()); Spring Test 의 MockHttpServletResponse/Request MockHttpSession 등사용 테스트대상클래스 테스트데이터설정 실제 session 처럼사용하여테스트하고자하는메소드확인 - 74 -
6. Mock (3/3) 4. 테스트도구 Easymock + Unitils 샘플 1: @RunWith(UnitilsJUnit4TestClassRunner.class) 2: public class EgovControllerTest { 3: 4: @Mock 5: @InjectIntoByType 6: private EgovService mockservice; 7: 8: @TestedObject 9: private EgovController egovcontroller = new EgovController(); 10: 11: @Test 12: public void testselectlist() throws Exception { 13: assertnotnull(egovcontroller); 14: expect(mockservice.selectlist()).andreturn( 15: Arrays.asList(new Message(101), new Message(102))); 16: EasyMockUnitils.replay(); 17: 18: List<Message> resultlist = egovcontroller.selectlist(); 19: assertnotnull(resultlist); 20: assertequals(2, resultlist.size()); 21: } 22: 23: @Test 24: public void testinsert() throws Exception { 25: mockservice.insert(makevo()); 26: EasyMockUnitils.replay(); 27: 28: SessionStatus status = new SimpleSessionStatus(); 29: String view = egovcontroller.add(makevo(), status); 30: } 31: } Mock 으로생성할인터페이스에대한정의한뒤, 테스트대상클래스에 Mock 으로정의한클래스를세팅한다. 리턴값을갖는메소드를 Mock 클래스에정의하고리턴값을설정한뒤, 진짜객체처럼사용한다. 리턴하지않는메소드를 Mock 객체에정의후진짜객체처럼사용한다. - 75 -
7. DB Test (1/3) 4. 테스트도구 DB Test는 DAO와 DB 모두를통틀어 Persistence layer를테스트하는것을말하며, 테스트DB와테스트데이터를준비하여실제로 DB를이용한단위테스트를수행함 DB Test Framework DbUnit DbUnit 기능 DB 데이터를 XML 파일형태로 import/export DB 연결, DB 초기화 DB의데이터가기대값과같은지확인 빌드도구를통한테스트자동화기능제공 효율적인 DB Test를위해 DB 구조만갖고있는단위테스트용 DB 준비 각개발자마다별도의단위테스트용 DB 공간 Unitils, Spring Test 활용 - 76 -
7. DB Test (2/3) 4. 테스트도구 TestCase 작성 1: @RunWith(UnitilsJUnit4TestClassRunner.class) 2: @Transactional(TransactionMode.COMMIT) 3: @DataSet 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: } @SpringApplicationContext( { "/META-INF/persistence/connection/datasource-spring-with-unitils.xml", "/META-INF/spring/context-common.xml", "/META-INF/spring/context-sqlmap.xml" }) public class DaoOperationTest_noticeDao { @TestDataSource private DataSource datasource; /** Target Dao */ @SpringBean("noticeDao") private NoticeDao noticedao; private NoticeVo noticevo; @Test @ExpectedDataSet("/META-INF/**/AutoVerifyTestResultsTest_ExpectedDataSet.xml") public void testinsert() { assertnotnull(noticevo); noticedao.insert(noticevo); int count = noticedao.selectcount(); assertequals(4, count); } 3: 클래스시작할때같은위치에있는 DaoOperationTest_noticeDao.xml 파일을읽어 DB 를초기화 5: Datasource 연결정보 (Unitils 를사용함 ) 9 : 5 라인에서설정한파일에설정된 datasource 객체를설정함. Unitils 의 Datasource 정보사용 13 : Unitils 의 Injection of Spring beans - noticedao 라는이름으로정의된 Bean 을 Spring Application Context 로부터가져옴 19 : 지정된위치의 Dataset 파일을읽어들여, 메소드처리후반에서결과를비교함. assert 기능 - 77 -
7. DB Test (2/3) 4. 테스트도구 DataSet (AutoInsertionTestDataTest_DataSet.xml) <?xml version="1.0" encoding="utf-8"?> <dataset> <NOTICE NOTICE_ID="101" NOTICE_TITLE="101 번공지 " NOTICE_FILE_CNT="0" NOTICE_RETRIEVED_CNT="0" /> <NOTICE NOTICE_ID="102" NOTICE_TITLE="102 번공지 " NOTICE_FILE_CNT="0" NOTICE_RETRIEVED_CNT="0" /> <NOTICE NOTICE_ID="103" NOTICE_TITLE="103 번공지 " NOTICE_FILE_CNT="0" NOTICE_RETRIEVED_CNT="0" /> </dataset> DataSet 구조 <dataset> <TABLE_NAME COLUMN_NAME1= VALUE" COLUMN_NAME2= VALUE" /> </dataset> Expected DataSet (AutoVerifyTestResultsTest_ExpectedDataSet.xml) <?xml version="1.0" encoding="utf-8"?> <dataset> <NOTICE NOTICE_ID="201" NOTICE_TITLE="201 번공지 " NOTICE_CONTENTS=" 테스트용으로자동입력된공지사항 201 번입니다." NOTICE_LAST_MODIFIER="OracleDataSetTest.class" /> </dataset> - 78 -
8. Test Automation (1/2) 4. 테스트도구 작성된다수의 TestCase 를자동으로수행하여소스단위의품질을높이고자함. CI 서버와연계될때, 주기적인테스트수행으로인해목표시스템의품질을향상할수있음 Test Suite TestCase 모음 1. Test Suite Class 작성 Test Suite 설정방법 Test Suite Class 작성 빌드도구의 batchtest 묶음 @RunWith(Suite.class) @SuiteClasses( { HttpRequestMockTest.class, SessionMockTest.class, FileUploadMockTest.class, EmailMockTest.class, JDBCMockTest.class }) public class MockTestSuite { } 2. batchtest 로묶음 <junit...> <batchtest fork="yes" todir="${testreports.dir}"> <fileset dir="${testbuild.dir}"> <include name="**/*test.class" /> <exclude name="**/abstract*test.class" /> </fileset> </batchtest> </junit> - 79 -
8. Test Automation (2/2) 4. 테스트도구 Ant (build.xml) <junit forkmode="perbatch" printsummary="true" haltonfailure="yes" haltonerror="yes"> <classpath refid="master-classpath" /> <classpath refid="test-classpath" /> <classpath path="${testbuild.dir}" /> <formatter type="xml" /> <batchtest fork="yes" todir="${testreports.dir}"> <fileset dir="${testbuild.dir}"> <include name="**/*test.class" /> <exclude name="**/abstract*test.class" /> </fileset> </batchtest> </junit> Maven (pom.xml) goal : test <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <configuration> <reportformat>xml</reportformat> <excludes> <exclude>**/abstract*.java</exclude> </excludes> <includes> <include>**/*test.java</include> </includes> </configuration> </plugin> </plugins> </build> - 80 -
9. Test Reporting - HTML (1/4) 4. 테스트도구 Ant (build.xml) Maven (pom.xml) <!-- Junit Test Result Report --> <target name="junitreport" depends="tests"> <junitreport todir="${testhtml.dir}"> <fileset dir="${testreports.dir}"> <include name="test-*.xml" /> </fileset> <report format="frames" todir="${testhtml.dir}" /> </junitreport> </target> <reporting> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-report-plugin</artifactid> <version>2.4.2</version> </plugin> </plugins> </reporting> - 81 -
9. Test Reporting - Excel (2/4) 4. 테스트도구 Ant Default 로사용한예 <path id="egov.lib"> <path refid="master-classpath" /> <path location="${antlib.dir}/egovtest/egovframework-dev-tst-ant.jar" /> </path> Excel Reporting Ant Task 설정 <taskdef resource="egovtest.properties classpathref="egov.lib /> <!-- JUnit Excel Report --> <target name="egovtest" depends="tests"> <egov-junitreport todir="${testxls.dir}"> <fileset dir="${testreports.dir}" includes="**/test-*.xml" /> </egov-junitreport> </target> Default 사용예 Ant 템플릿엑셀파일을별도로사용한예 <target name="egovtest-full" depends="tests"> <egov-junitreport todir="${testxls.dir}" outputname="egovtest-junit-full.xls" templatepath="${basedir}/build/template-kr.xls" summary="0,b,6" packages="0,b,11" lists="1,a,5"> <fileset dir="${testreports.dir}" includes="**/test-*.xml" /> </egov-junitreport> </target> - 82 -
9. Test Reporting - Excel (3/4) 4. 테스트도구 Ant 템플릿엑셀파일을별도로사용한예 property 설명 todir outputname templatepath summary, packages, lists fileset 엑셀파일생성디렉토리엑셀파일명템플릿엑셀파일정보각엑셀테이블의헤더위치정보 (sheet, column, row) 테스트결과 XML 파일위치 summary:0,b,6 lists 위치 : 1,A,5 packages:0,b,11-83 -
9. Test Reporting - Excel (4/4) 4. 테스트도구 Maven (goal : egovtest:junit-xls) <build> <plugins> <!-- Egovframework JUnit Excel Reporting --> <plugin> <groupid>egovframework.dev</groupid> <artifactid>egovtest-maven-plugin</artifactid> <version>1.0.0-snapshot</version> </plugin> </plugins> </build> - 84 -
10. Test Coverage 4. 테스트도구 테스트코드가대상소스코드에대해테스트하는코드를작성했는지그커버하는정도를수치나코드 라인을통해알려줌 EMMA HTML 리포팅화면 EclEmma 화면 - 85 -
11. 참고자료 4. 테스트도구 Unitils Guildelines http://unitils.sourceforge.net/guidelines.html Mock Object를사용해서쉽게테스트하기 http://www.ibm.com/developerworks/kr/event/screencast/final/01/ mock object http://www.mockobjects.com/ Effective Unit Testing with DbUnit http://www.onjava.com/pub/a/onjava/2004/01/21/dbunit.html What is a mock objects http://www.shinetech.com/display/www/what+are+mock+objects%3f An early look at JUnit4 http://www.ibm.com/developerworks/java/library/j-junit4.html JUnit FAQ http://junit.sourceforge.net/doc/faq/faq.htm - 86 -
5. 형상관리 1. 개요 2. Subversion 개요 3. 소스공유 4. Checkout 5. Update 6. Commit 7. History 조회 8. 충돌해결 (merge) 9. 참고자료 - 87 -
1. 개요 5. 형상관리 소스버전관리도구는시스템형상요소 ( 소스및데이터 ) 를문서화하고변경을소스버전관리절차에따라관리하고, 효율적으로처리하기위한통제환경을의미 소스버전관리도구의특징및기능 형상요소 ( 소스및데이터 ) 에대한변경사항을관리 버전관리를수행하고, 배포도구를통해변경사항을배포 일정주기에백업도구를통해백업을수행 소스버전관리도구의구성요소및관계도 프로젝트팀소스관리도구배포도구 개발자 PL Check in/out Configuration Management 배포 백업 저장소 CMO - 88 -
2. Subversion 개요 (1/5) 5. 형상관리 Subversion(SVN) 의배경 CVS 의단점을개선하고 CVS 를대체할목적으로개발되었음 오픈소스기반의소스버전관리도구 (http://subversion.tigris.org) CVS 대비 Subversion의특장점 CVS와거의동일한사용법. CVS 사용자는누구나쉽게사용할수있음 Commit 단위 : CVS는개별파일별로리비전관리, SVN은변경이발생하는체인지셋 (Change Set) 별로리비전관리 Atomic Commit: 여러파일커밋시, 어느하나의파일에서커밋이실패할경우, CVS는해당파일앞의경우는커밋되고, 뒷파일은그대로남아있지만, SVN은모두이전상태로롤백 트리별, 파일별접근제어리스트지원 파일에대한이름변경 / 이동, 디렉터리버전관리도지원 CVS에비해빠른동작속도 (Update/Branching/Tagging Time) - 89 -
2. Subversion 개요 (2/5) 5. 형상관리 SVN 클라이언트 - Eclipse 플러그인 Subversive Polarion 커뮤니티그룹에서개발 Eclipse Ganymede 버전부터 SVN 클라이언트로공식채택 빠른 update, 안정적인동작 공식웹페이지 : http://www.eclipse.org/subversive/ Subclipse Tigris 커뮤니티그룹 (Subversion 개발커뮤니티 ) 에서개발 Subversion 초창기폭넓은사용자확보 Subversive 대비느린 update, 다수의버그로불안정 공식웹페이지 : http://subclipse.tigris.org/ - 90 -
2. Subversion 개요 (3/5) 5. 형상관리 SVN 클라이언트 Eclipse 플러그인설치 / 확인 1 Eclipse 메뉴, Help > Software Update... 3 설치후확인 Eclipse 메뉴, Help > About 2 플러그인 Update Sites 추가, Install 진행 - 91 -
2. Subversion 개요 (4/5) 5. 형상관리 저장소 (Repository) 모든프로젝트의프로그램소스들과소스에대한변경사항이저장됨 네트워크를통해서여러사람이접근 SVN에서는 Berkeley DB(Default) 또는파일시스템 (Optional) 을저장소로사용 저장소접근 1 Eclipse 메뉴, Window > Open Perspective > Other... > SVN Repository Exploring 2 Eclipse 메뉴, File > New > Repository Location 3 마법사에서, URL 과 Authentication 항목을입력 - 92 -
2. Subversion 개요 (5/5) 5. 형상관리 Revisions 소스파일등을수정하여커밋하게되면일정한규칙에의해숫자가증가 저장소에저장된각각의파일버전이라할수있음 SVN의경우파일별로리비전이매겨지지않고변경발생단위로전체리비전이매겨짐 리비전을보고프로젝트진행상황을알수있음 저장소를통해본리비전이해 커밋의단위 젂체리비젂번호증가 저장소의파일시스템 2 1 1 1 1 2 2 3 1 1 1 1 3 2 3 3 개별소스들의리비젂 - 93 -
3. 소스공유 (1/2) 5. 형상관리 프로젝트공유 새로운프로젝트를저장소에추가 1 Eclipse 패키지 / 네비게이션뷰, 프로젝트오른쪽클릭 > Team > Share Project... 2 Share Project 마법사, SVN 선택 3 Share Project 마법사, 저장소위치선택 > Finish - 94 -
3. 소스공유 (2/2) 5. 형상관리 소스단위공유 공유중인프로젝트내에서해당소스를저장소에추가 2 팝업창에서내용확인 > OK 1 Eclipse 패키지 / 네비게이션뷰, 대상소스오른쪽클릭 > Team > Add to Version Control... - 95 -
4. Checkout 초기 checkout 5. 형상관리 저장소에서전체소스의최종리비전을받아오는것 저장소인증정책에따라 ID, Password 입력여부가결정 3 패키지 / 네비게이션뷰에서체크아웃한프로젝트소스확인 2 SVN Repositories 뷰, 저장소를확장하여 trunk 아래의프로젝트선택 > Check Out 1 Eclipse 메뉴, Window > Open Perspective > Other... > SVN Repository Exploring - 96 -
5. Update 5. 형상관리 저장소에소스업데이트 체크아웃을한이후의타인에의한소스변경사항을확인 저장소에있는소스중로컬과비교하여변경된항목의최신버전의소스를가져옴 변경된항목의최신버전은로컬본에통합됨 Eclipse 패키지 / 네비게이션뷰, 업데이트대상소스들 / 패키지 / 프로젝트에서오른쪽클릭 > Team > Update - 97 -
6. Commit 5. 형상관리 Commit 로컬에체크아웃한소스를수정, 파일추가, 삭제등을한뒤저장소에저장하여갱신하는것 커밋을하면전체리비전이 1 증가 (CVS 의경우수정한각각파일의리비전이증가 ) 2 팝업창에서반영내용확인및 Comment 입력 1 Eclipse 패키지 / 네비게이션뷰, 커밋대상소스들 / 패키지 / 프로젝트에서오른쪽클릭 > Team > Commit... - 98 -
7. History 조회 5. 형상관리 History SVN에의해관리되는특정소스와관련된과거모든리비전의내역 History 조회 Eclipse의기본카테고리인 Team 의 History 뷰를통해조회할수있음 리비젂로그목록 1 Eclipse 패키지 / 네비게이션뷰, 대상소스오른쪽클릭 > Team > Show History 선택된리비젂의 Comment 선택된리비젂의구조와변경파일들 2 History 뷰에서대상소스의 History 목록과리비젂상세내역조회 - 99 -
8. 충돌해결 (1/2) 5. 형상관리 충돌 (Conflict) 로컬에체크아웃이후수정한소스를저장소에커밋할때, 저장소의리비전이더높을경우충돌발생 ( 타인에 의해수정되고커밋된상태 ) 충돌발생상황예 : 로컬리비젂 = 597 < 저장소리비젂 = 634 충돌해결방안 postpone: 즉시반영없이, 소스코드를계속수정. 수정이완료된시점에다시시도 ( 충돌해결안함 ) diff: 충돌된상황을비교. 로컬과저장소의소스의차이를비교 edit: 로컬의파일을다시열어수정 mine-full: 저장소의리비전내용을무시하고, 로컬의내용으로커밋. theirs-full: 로컬의수정내역을무시하고, 저장소의리비전으로대체하여업데이트 - 100 -
8. 충돌해결 (2/2) 5. 형상관리 충돌해결방안예 diff/edit: 로컬과저장소의소스를모두열어비교 / 편집 mine-full: 충돌이발생한파일에서오른쪽클릭 > Override and Commit... 선택 theirs-full: 충돌이발생한파일에서오른쪽클릭 > Override and Update... 선택 - 101 -
9. 참고자료 5. 형상관리 Subversion Project Home Page http://subversion.tigris.org/ CVS Project Home Page http://www.nongnu.org/cvs/ Subversive Eclipse Plug-in http://www.eclipse.org/subversive/ Subversive SVN Connectors Eclipse Plug-in http://www.polarion.com/products/svn/subversive.php?src=eclipseproject Subclipse Eclipse Plug-in http://subclipse.tigris.org/ - 102 -
6.CI 서버 1. CI 정의 2. CI 효과와특징 3. CI 구성요소 4. Hudson 개요 5. Hudson 특징및주요기능 6. Hudson 대시보드 7. Hudson 프로젝트메뉴 8. Hudson JUnit 테스트연동 9. Hudson 코드인스펙션도구연동 10. 참고자료 - 103 -
1. CI(Continuous Integration) 정의 6.CI 서버 여러명으로구성된팀이작업한것을자주 - 각팀원이하루에한번이상, 매일여러번 - 통합하는것을가 리키는소프트웨어개발 Practice 임 검토 변경사항을커밋한다 개발자 A 개인빌드실행 변경사항을커밋한다 버전관리저장소 (Subversion) 통합빌드머신 CI Server 개발자 B 개인빌드실행 - 104 -
2. CI(Continuous Integration) 효과와특징 6.CI 서버 효과 흔히발생하는일반적인위험을줄여준다. 에러를초기에발견할수있다. 자주통합할수록에러가발생하는범위가좁아에러를잡는것이수월해진다. 잘동작하고에러가거의없는 S/W를유지할수있다. 언제어느때라도배포할수있는 S/W를생성해낸다. 반복적인수작업을줄여준다. 프로젝트가시성을좋게해준다. 개발팀이 S/W 제품에대해보다큰자신감을갖게해준다. 특징 -소스코드일관성유지 : 소스관리시스템이필요하다. -자동빌드 : 빌드는 CI 툴에의해자동으로이루어져야한다. -자동테스트 : 소스검증과함께기능 / 비기능테스팅을매번검증함으로써코드의품질을높일수있다. -일일체크아웃과빌드 : 빌드주기가길어질수록개발자소스의오류발생확률이높아지고그만큼시간을낭비하게된다. - 105 -
3. CI 구성요소 6.CI 서버 CI(Continuous Integration) 는개발자, 버전관리저장소, CI 시스템, 빌드스크립트, 의사소통장치, 통 합빌드머신등으로구성됨 피드백메커니즘 ( 웹, 이메일, 위젯, RSS 등 ) 개발자 A 개발자 B 개인빌드변경사항커밋 버전관리저장소 (Subversion) watches 통합빌드머신 CI Server (Hudson) deploys uses merges Build Script (Maven) 정리소스코드컴파일데이터베이스통합테스트수행검사수행소트프웨어배포 개발서버 (Linux) DB Reports (Code Inspection Unit Test Test Coverage) - 106 -
4. Hudson 개요 6.CI 서버 Hudson 은오픈소스 CI 서버로소스빌드스크립트를사용한자동빌드및빌드결과를개발자에게피 드백하는메커니즘을제공함 초기화면 : 프로젝트리스트와빌드상태및빌드성공여부를보여줌 - 107 -
5. Hudson 특징및주요기능 6.CI 서버 Hudson 특징 쉬운 Installation : hudson.war형태로 servlet container에배포 웹기반 UI를통한쉬운설정및즉각적인피드백 플러그인기반의확장성제공 깔끔하고잘정의된문서및 API Hudson 주요기능 소프트웨어자동빌드 빌드주기에따른일일빌드또는주간빌드기능제공 지속적이고자동화된빌드검증 SCM 폴링 (polling) 기능을통한최신코드기반의빌드수행 지속적이고자동화된빌드테스트 태스트슈트실행을통한코드품질검증 빌드후속절차자동화 컴파일된코드의패키징및테스트리포팅기능제공 - 108 -
6. Hudson 대시보드 (dashboard) 6.CI 서버 Hudson 은빌드결과및테스트결과등을보여주는대시보드기능을제공함 - 109 -
7. Hudson 프로젝트메뉴 6.CI 서버 Hudson 은등록된프로젝트의소스코드변경내용추적을위한메뉴와수동빌드메뉴그리고프로젝 트빌드상태를보여주는메뉴등을제공함 기본메뉴 Changes : 빌드버젂별로 SCM 에서지난버젂에비해서변경된내용에대해변경자와커밋시에개발자가추가한 comment 를확인할수있음 Workspace : 프로젝트의빌드디렉터리로브라우저를통해빌드에사용된파일등을확인할수있음 Build Now : 스케줄에상관없이지금강제적으로빌드 Build History : 빌드수행시기와빌드상태및성공여부를보여줌 - 110 -
8. Hudson JUnit 테스트연동 6.CI 서버 Hudson 은 JUnit 테스트리포트를출력해주는기능을제공하며테스트의 Progress 누적그래프를프 로젝트초기화면에출력함 JUnit 테스트리포트 테스트 Progress 누적그래프 프로젝트의단위테스트결과및테스트소요시간등에관한리포트를보여줌 프로젝트빌드에따른 JUnit 테스트누적그래프로빌드번호화테스트 method 개수로빌드결과를보여줌 - 111 -
9. Hudson 코드인스펙션도구연동 6.CI 서버 Hudson 은코드인스펙션도구인 PMD 플러그인을제공하며연동을통한코드인스펙션결과리포트를 제공함 * 프로젝트의 Configure; 메뉴에서 PMD 결과생성설정 *PMD 인스펙션결과리포트 - 112 -
10. 참고자료 CI 정의 http://en.wikipedia.org/wiki/continuous_integration Continuous Integration (Martin Fowler) http://martinfowler.com/articles/continuousintegration.html#automatedeployment Hudson Home https://hudson.dev.java.net/ - 113 -
7.Deploy 1. 개요 2. 환경설정 3. 주요기능 - 114 -
1. 개요 7.Deploy 개발완료된 war 파일에대해 WAS 서버로의 FTP 이관, WAS Deploy 및해당 WAS 서버의기동 / 중지 기능을제공함 서버이관프로세스 서버이관시나리오 관리자로그인 서버정보등록 WAS 정보등록 WAS 기동및중지 1. 관리자로그인 2. 서버정보등록 : 프로젝트에서관리할서버정보 (IP) 를등록한다 3. WAS 정보등록 : 프로젝트에서사용하는 WAS 정보 ( 종류, 기동 / 중지스크립트 ) 를등록한다. 4. 배포작업등록 : 배포작업정보 ( 이관모듈, WAS 정보, FTP 경로, deploy 대상 ) 를등록한다. 5. WAS 기동및중지 : WAS 정보에따른서버의기동및중지를수행한다. 6. FTP 및 Deploy : 등록되어있는배포작업정보를참조하여 FTP 및 Deploy 를수행한다. 제약사항 배포작업등록 FTP 및 Deploy 지원가능 WAS: - Jeus, WebLogic, jboss - 115 -
2. 홖경설정 7.Deploy WAS 구동시환경변수로 deploy.script.home 과 deploy.path 를설정하고제공된 common.properties 파일의내용을 WAS 환경에맞게수정 WAS 구동시환경변수 Ddeploy.script.home=" 배포스크립트및로그파일이저장될디렉토리 Ddeploy.path="war 파일이존재하는루트디렉토리 " Hudson 주요기능 was.deploy.script.path=" 배포스크립트및로그파일이저장될디렉토리 " 배포대상 WAS 서버가 weblogic 인경우 - weblogic.deploy.jar.path="weblogic 설치하위의 weblogic.jar 파일의위치 " - weblogic.adm.id="weblogic admin id" - weblogic.adm.pwd="weblogic admin password" - 116 -
3. 주요기능 - 관리자로그인 7.Deploy 서버이관도구는 Admin 관리자계정하나만을두고있음 - 117 -
3. 주요기능 - 서버정보등록 7.Deploy 모듈배포를위한대상서버의정보를등록 서버정보등록순서 1. 서버이름, 서버 IP, 사용자아이디, 비밀번호를입력 2. 저장 버튼을클릭 3. 서버정보가등록된후서버목록화면으로이동 4. 목록 버튼을클릭하여서버목록화면으로이동 5. 취소 버튼을클릭하여작성한내용을초기화 - 118 -
3. 주요기능 - WAS 정보등록 7.Deploy 모듈배포를위한대상 WAS 의정보를등록 WAS 정보등록순서 1. WAS 명, 실행경로, 실행유저 ID, 실행유저 PWD, 기동스크립트, 중지스크립트, WAS 홈경로를입력 2. 서버명을선택한후등록했던서버명중해당 WAS 가설치된서버를선택 3. WAS 서버를선택 weblogic, jeus, jboss 4. 저장 버튼을클릭 5. WAS 정보가등록된후 WAS 목록화면으로이동 6. 목록 버튼을클릭하여 WAS 목록화면으로이동 7. 취소 버튼을클릭하여작성한내용을초기화 - 119 -
3. 주요기능 - 배포작업등록 7.Deploy 모듈배포를위한 FTP 경로등배포작업정보를등록 배포작업등록순서 1. 작업명, FTP 경로를입력 2. 대상 WAS 명을선택 3. 모듈선택 버튼을클릭하여배포대상모듈을선택 4. Deploy 대상을입력 jeus 인경우컨테이너명, weblogic 인경우 server 명을입력 5. Admin URL 을입력 weblogic 인경우입력 6. 저장 버튼을클릭 7. 배포작업정보가등록된후배포작업목록화면으로이동 8. 목록 버튼을클릭하여배포작업목록화면으로이동 9. 취소 버튼을클릭하여작성한내용을초기화 - 120 -
3. 주요기능 - FTP 로이관 7.Deploy 모듈배포를위한 FTP 로이관하는기능제공 FTP 순서 1. 배포작업목록을조회 2. 대상작업의 FTP 버튼을클릭하여대상모듈을해당 WAS 로젂송 3. FTP 가진행되는도중 작업중입니다 메시지출력 4. 젂송이완료되면 FTP 작업로그를화면에출력 - 121 -
3. 주요기능 - Deploy 7.Deploy 모듈배포를위한 Deploy 기능제공 Deploy 작업순서 1. 배포작업목록을조회 2. 대상작업의 Deploy 버튼을클릭하여 WAS 에 Deploy 3. Deploy 가진행되는도중 작업중입니다 메시지출력 4. Deploy 가완료되면 Deploy 작업로그를화면에출력 - 122 -
3. 주요기능 - WAS 기동 7.Deploy 모듈배포를위한 WAS 기동기능을제공 1. WAS 목록을조회 WAS 기동순서 2. 대상 WAS 의 기동 버튼을클릭하여 WAS 를기동 3. WAS 기동작업이진행되는도중 작업중입니다 메시지출력 4. WAS 기동작업이완료되면 WAS 기동작업로그를화면에출력 - 123 -
3. 주요기능 - WAS 중지 7.Deploy 모듈배포를위한 WAS 중지기능을제공 1. WAS 목록을조회 WAS 중지순서 2. 대상 WAS 의 중지 버튼을클릭하여 WAS 를중지 3. WAS 중지작업이진행되는도중 작업중입니다 메시지출력 4. WAS 중지작업이완료되면 WAS 중지작업로그를화면에출력 - 124 -
3. 주요기능 - 작업로그조회 7.Deploy 서버이관작업과관련된로그조회기능을제공 작업로그순서 1. 검색조건 ( 로그구분및검색기간 ) 을입력하고 검색 버튼을클릭 2. 검색조건에해당하는작업로그정보를출력 3. 상세조회할 작업로그 를클릭하면해당작업의작업로그조회화면으로이동하여상세정보출력 4. 목록 버튼을클릭하면작업로그목록화면으로이동 - 125 -
8. 이슈관리 1. 개요 2. Feature 3. Process 4. 주요기능 5. 참고자료 - 126 -
1. 개요 8. 이슈관리 프로젝트 ( 또는복수의프로젝트 ) 에서개발자간의커뮤니케이션을돕고체계적인이슈 ( 버그 ) 를 관리하는시스템을의미함 - 127 -
2. Feature 8. 이슈관리 이슈를체계적으로관리하기위해스페이스관리, 이슈관리, 통계, 대시보드등다양한기능을제공함 Feature 상세내용 Easy to Install 별도의 Customizing 이필요없이제공된 war 의디플로이를통한간단한설치메커니즘제공 Eclipse Integraton 이클립스의형상연계 Plug-in 과의연계를통해커밋시이슈와연계할수있고, 이슈를조회할수있다. E-Mail Integration 사용자등록, 이슈등록및상태수정시에할당된담당자에게해당내용을 E-Mail 로전송할수있다. Cross Referencing of Items 등록된 Item 간의상호참조를할수있으며, 이를통해연관된이슈와의통합이가능하다. Custom Fields / Status 스페이스의효율적인관리를위해스페이스의 Field 와 Item 의 Status 를정의할수있다. Detailed History View 등록된 Item 의등록, 담당자, 상태, 과거변경내역을조회할수있다. Statistics 등록된스페이스와사용자별통계를통해전체이슈와사용자의진행상황을파악할수있다. Search 다양한검색조건 ( 삭제된이슈거색포함 ) 을제공하여빠른시간에원하는 Item 을검색할수있다. Dashboard 해당사용자별로자신에게등록된스페이스, 등록한이슈, 할당된이슈등을파악할수있다. Administration Management 사용자관리, 스페이스관리, 설정관리, 통계, 이슈관리등강력한관리기능을제공한다. - 128 -
3. Process 8. 이슈관리 이슈관리는관리자기능인스페이스관리 ( 필드, 상태 ) 와사용자관리등을통해이슈관리환경을 구성하고, 일반사용자는설정된환경에서이슈를관리하는프로세스로구성 로그인 권한체크 사용자 Process 관리자 Process 이슈등록사용자할당이슈상태변경관련이슈등록 대시보드 이슈등록 대시보드 스페이스관리 스페이스등록 Field관리 Status관리 Role관리 이슈검색 사용자관리 사용자등록비밀번호변경 사용자정보수정 통계 스페이스별통계 사용자별통계 - 129 -
4. 주요기능 - 대시보드 8. 이슈관리 해당사용자별로자신에게등록된스페이스, 이슈상태별등록한이슈및할당된이슈들을체계적으로 파악할수있다. - 130 -
4. 주요기능 - 통계 8. 이슈관리 스페이스또는사용자별로카테고리화하고이를시각화하여, 이슈관리시스템을다양한시각에서분석하고제어할수있는통계자료를제공한다. - 131 -
4. 주요기능 - 사용자관리 8. 이슈관리 사용자를등록하고정보를수정하는기본적인사용자관리기능과, 사용자에게스페이스와롤을 등록하고삭제하는롤관리기능을제공한다. - 132 -
4. 주요기능 - 스페이스관리 8. 이슈관리 스페이스를등록하고정보를수정하는스페이스관리기능과, 스페이스에롤을부여한사용자를등록 하고삭제하는사용자관리기능을제공한다. - 133 -
4. 주요기능 - 이슈관리 8. 이슈관리 이슈등록, 메일 /SMS 발송, 수정, 삭제등의이슈관리기능과등록된이슈의처리결과에따른상태를 변경하고이를이력 (History) 으로관리하는기능을제공한다. - 134 -
5. 참고자료 8. 이슈관리 jtrac Home http://www.jtrac.info/ - 135 -