Effective Software Project Collaboration using Eclipse okjsp 2011.08
Schedule 1,2 이클립스기본 3 VCS & 빌드도구 ANT 4 이클립스와협업프로세스 5,6 이클립스웹개발 7, 이클립스와테스트자동화
0. Set up jdk 1.7 eclipse 3.7 indigo tomcat 7.0.19 mysql 5.5 Github.com
JAVA_HOME
java -version
Ganymede
eclipse 3.4 JEE
1. 이클립스개요 Source Compile Project Build Tool positioning 개발생산성향상 IDE
Source Compile javac eclipse auto compile src build or classes
Project Build build script ready for use
Tool positioning 요구분석설계개발테스트릴리스 usecase modeling IDE Testing Tool build Tool
개발생산성향상 requirement 확인 control complexity refactoring automation
IDE coding compile/build run/debug
연습문제 컴파일과빌드의차이점은? IDE의기본기능세가지는?
2. Hello World 실행하기 Java Application Java Web Application Console View Argument, Parameter, Method Signature
Start
Perspective
Java Project
Java Application main() Java Project
Create Class
Create Class
Hello World
Run
Quick Access ^3
Console View Console View Preferences
Java Web Application servlet container Dynamic Web Project
Argument, Parameter, Method Signature Argument main(string[] args) Parameter key, value pairs transfer Query String Method Signature public static void main(string[] args)
연습문제 구구단출력프로그램을자바프로젝트로작성하기 웹프로젝트로구구단을작성하기
3. 코드네비게이션 Reading Code Readability Find Open Resource Definition References
legend ctrl : ^ alt : @ shift : ~
Find/Search 찾기 / 바꾸기 ^ + F 파일찾기 ^ + ~ + R, @ + n u 문자열포함된소스찾기 contextmenu + find ^ + H
Find/Search #2 코드패턴찾기 ^ + j, ^~ + j ; incremental find ^ + k, ^~ + k ; selection find 상속관계찾기 ^ + t 메소드찾기 ^ + o ; Outline
Find/Search #3 선언부찾기 ^ + leftclick f3 참조소스목록 ctrl + shift + g contextmenu > References > Project 같은변수찾기 형광펜
Navigate 라인번호로이동 ^ + L 중괄호 ({} brace) 처음과끝 ctrl + shift + p @ + ~ + 좌우화살표
Navigate #2 파일과파일사이이동 ^ + f6 뒤로 / 앞으로 @ + 좌우화살표
코드비교하기 compare with... replace with...
편집 copy & paste ^ + insert / ~ + insert ^ + c / ^ + v ^ + @ + 상하화살표 method copy/remove outline view에서 copy/remove
연습문제 오픈소스프로젝트 import 하기 편집기단축키중 ctrl+shift+r의역할은? 자바편집기에서 ctrl+shift+g 의역할은? 클래스, 메소드, 변수의선언위치로이동하는단축키는?
4. 프로젝트기반의 소스아키텍처 개발표준 소스디렉토리구조 서비스디렉토리구조 버젂관리해야할것 빌드스크립트의가변성
개발표준 용어집 코딩컨벤션 CRUD 코드샘플
소스디렉토리구조 src src/java src/test WebContent WebContent/WEB-INF/web.xml WebContent/WEB-INF/lib WebContent/WEB-INF/classes docs
서비스디렉토리구조 Context Root /WEB-INF/web.xml /WEB-INF/lib /WEB-INF/classes
버젂관리해야할것 src WebContent/.ignore project configuration
빌드스크립트의 가변성 properties 이용 relative path
연습문제 다이나믹웹프로젝트기본폴더구조는?
5. 프로퍼티에디터 플러그인설치하기 Properties의특성 프로젝트내에서 properties 파일의위치 propedit plugin
Update Site URL http://propedit.sourceforge.jp/eclipse/updates/
Software Updates
Check plugin & Install
Plugin Licenses
Install Complete
Software Updates Installed Software Update... Uninstall... Revert Configuration... Available Software Update site url
연습문제 플러그인설치의두가지방법을기술 AnyEdit plugin Subversive plugin pathtools
6. Mylyn 과작업리스트 Mylyn 개요 ToDo 리스트의관리 일정관리
New Task
Mylyn 개요 Task List Planning Context Category Activate Task Focus on Active Task
Task List
ToDo 리스트의관리 Context 와연결 우선숚위 Estimation
일정관리 Personal Planning Scheduled for Due Estimated hours
연습문제 Mylyn 과구글의이슈트래커와연결
Day-2
이클립스서브버전플러그인 Subversive Ganymede project Polarion license Team UI
eclipse.org/subversive
Subversive Update URL http://www.polarion.com/products/svn/subversive.php?src=eclipseproject
연습문제 오픈소스프로젝트호스팅서비스와서브버젂플러그인을연결해서 프로젝트소스를가져오기
Version Control System 기본 버전관리라이프사이클 import add commit checkout update repository sandbox
젂통적인개발방식 server client browser ftp, telnet 개발자 A ftp, telnet 개발자 B
VCS 를이용한개발 client browser server VCS 개발자 A build 개발자 B : sandbox; VCS 서버와 sync 되는소스작업공간
용어 저장소 Repository 버젂관리되는파일이저장되는서버의기준디렉토리 모듈 Module 저장소의하위단위, 한모듈은보통하나의프로젝트 체크아웃 checkout 모듈을작업자의 PC 로가져오는명령 샌드박스 sandbox 파일의수정이가능한 VCS 서버와동기화되는작업공간. 전송 Commit 작업완료된파일을 VCS 서버에반영
Source Repository Image from: http://designpatternschash.blogspot.com/2008/09/what-is-tortoise-svn.html
Update, Commit Image from: http://designpatternschash.blogspot.com/2008/09/what-is-tortoise-svn.html
연습문제 VCS 용어의의미를기술 import commit update conflict repository sandbox
소스의공유와배포에관하여 Sandbox Update Frequently Commit by function unit Team Communication Time Gap
Process
VCS Best Practices 작업시작젂에항상 project update 를시행 완료된파일은매일점심식사젂과퇴근젂에젂송 (Commit) 충돌이자주생기는파일은해당작업자들간의의사소통이잘안된다는표시 에러가난파일은해결될때까지젂송 (Commit) 자제
연습문제 VCS를이용한공유시소스의이력을볼수있는방법은? 웹애플리케이션배포시이상이생겼을경우원상복구를빨리할수 있는방법을기술하시오.
버젂비교하기 Compare with... Source Tree Time Machine
Show in History
https svn trust
History View
Compare With...
Get Content
연습문제 히스토리뷰에서과거소스의내용을가져와현재의소스에적용하는방법 일주일전프로젝트소스가져오기
ANT 빌드스크립트만들기 project target task
Ant.apache.org
Ant Outline
연습문제 이클립스IDE와빌드툴의차이 기존프로젝트에 ANT 빌드스크립트를적용하기
ANT 를이용한자동화 Build Script Crontab Conditional Build based on property javadoc JUnit
ftp task <target name="upload" depends="publish" description="ftp upload text files"> <ftp server="${ftp.server}" port="21" remotedir="${ftp.remotedir}" userid="${ftp.userid}" password="${ftp.password}" depends="yes binary="yes"> <fileset dir="${publish.home}"> <!-- jsp 파일업로드 --> <include name= **/*.jsp"/> <!-- class 파일과 resources 업로드 --> <include name="web-inf/classes/kr/**/*.class"/> <!-- 정적인파일업로드 --> <include name="**/*.htm*"/> </fileset> </ftp> </target>
Optional Task
연습문제 ftp를이용하려면필요한라이브러리 빌드날짜가포함된 jar 파일생성하기
Day-3
1. 지속적인통합 Continuous Integration 주기적인빌드를통해서프로젝트팀간의인터페이스격차를조기에발견 빅뱅통합에드는비싼비용을절감 PC급의빌드서버활용
Commit Time issue interfaces, xml small but important files break whole build fear of commit short periodical commit time interval
Best Practices Maintain a Single Source Repository. Automate the Build Make Your Build Self-Testing Everyone Commits Every Day Build the Mainline on an Integration Machine Keep the Build Fast Test in a Clone of the Production Environment Make it Easy for Anyone to Get the Latest Executable Everyone can see what's happening Automate Deployment
연습문제 지속적인통합의장점세가지기술 지속적인통합의프랙티스열가지기술
2. Hudson 개요 Building/testing software project continuously Monitoring execution of externally-run jobs
Hudson Plugins installation Using interface http://yourhost/hudson/manageplugins Download download *.hpi file into $HUDSON_HOME/plugins source: http://wiki.hudson-ci.org/display/hudson/plugins
Hudson Plugins #1 Source code management Build triggers Build tools Build wrappers Build notifiers Slave launchers and controllers
Hudson Plugins #2 Build reports Artifact uploaders External site/tool integrations UI plugins Page decorators Misc
Hudson Plugins
Hudson Plugins
Findbugs plugin
Hudson Security java -jar hudson.war --argumentsrealm.passwd.kenu=okpass --argumentsrealm.roles.kenu=admin
Hudson Security
Hudson Security
Hudson Security
Hudson Security Quick and Simple Security <http://hudson.gotdns.com/wiki/display/hudson/quick+and+simple+security> Standard Security Setup <http://hudson.gotdns.com/wiki/display/hudson/standard+security+setup> Apache frontend for security <http://hudson.gotdns.com/wiki/display/hudson/apache+frontend+for+security> Authenticating scripted clients <http://hudson.gotdns.com/wiki/display/hudson/authenticating+scripted+clients> Help! I locked myself out! <http://hudson.gotdns.com/wiki/display/hudson/disable+security>
Eclipse plugin source: http://code.google.com/p/hudson-eclipse/
연습문제 Hudson의두가지목적은? Hudson 플러그인설치방법두가지 Hudson의기본인증기능을설치하기 구글메싞저와연결하기
3. Hudson 과 Subversion 연결
Check out URL
Job Configure
연습문제 오픈소스프로젝트와 Hudson 연결
4. 개발프로세스에서 이클립스포지셔닝
연습문제 이클립스프로젝트의 Ant 빌드스크립트를만들고 Hudson 을 통해개발서버에배포하기
5. Eclipse Communication Framework
ECF in Ganymede
Real-time Shared Editing http://www.vimeo.com/1195398?pg=embed&sec=1195398
연습문제 ECF 프레임워크를통해서짝프로그래밍하기
6. 프로젝트 Health Check
Health Check
연습문제 프로젝트모니터링을위해 Hudson에메일설정하기 JUnit Report 설정하기 Findbugs를통해프로젝트버그정적분석하기
Day-4
1. 웹프로젝트의특징 ServerSide Script ClientSide Script
Java Project Dynamic Web Project
설정파일비교
연습문제 서버사이드스크립트와클라이언트사이드스크립트의런타임차이점 Client/Server 애플리케이션과웹애플리케이션의차이점
2. 톰캣서버연결 Target Runtime
연습문제 톰캣서버포트를 8080 에서 9090 으로변경하기 프로젝트퍼블리쉬하지않게설정조정하기 자바프로젝트와다이나믹웹프로젝트의차이점
3. JSP/Servlet 만들기
Servlet 만들기
Servlet 클래스
URL Mapping
Servlet Template
doget() response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<h1>hello World</h1>"); out.close();
URL mapping
연습문제 DB 를이용해방명록만들기
4. 한글인코딩처리
Java Hangul new String(string.getBytes("8859_1"), "ms949"); new String(string.getBytes("ms949"), "8859_1");
홖경변수 System.getProperty("user.language"); JAVA_OPTS="-Duser.language=en" JAVA_OPTS="-Duser.language=ko"
JSP encoding <%@ page pageencoding="ms949" %> <%@ page contenttype="text/html;charset=ms949" %>
JSP encoding request.setcharacterencoding("ms949"); Filter <filter> <filter-name>set Character Encoding</filter-name> <filter-class>filters.setcharacterencodingfilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
한글문제처리방법 다른 DB클라이언트로한글확인 인코딩함수모두제거후점진적용 브라우저의소스보기에서한글확인 중간단계의한글깨짐해결우선숚위는최하위로
연습문제 자바에서의캐릭터인코딩처리기술 JSP의인코딩처리기술 한글문제처리방법 HTTP에서의인코딩처리기술
5. Spring 웹 프레임워크다루기 JPetStore 샘플을통해서스프링프레임워크숙지
warfile.bat 실행
hsqldb 서버기동
import war file
Import src
JPetStore 실행
연습문제 Spring Framework 에서다음을순서대로나열하시오 Controller DAO Service JSP applicationcontext.xml
6. 원격서버배포하기
배포시주의사항 개발서버는 Hudson 등을통해자동화가능 운영계는원상복구에대한이슈가크기때문에심볼릭링크등을 통해서빠르게원복할수있도록함
ftp ant task 등 <ftp server="${ftp.server}" port="21" remotedir="${ftp.remotedir}" userid="${ftp.userid}" password="${ftp.password}" depends="yes" binary="yes" > <fileset dir="${publish.home}"> <include name="images/**/*.gif"/> <include name="images/**/*.jpg"/> <include name="web-inf/lib/*.jar"/> <include name="web-inf/classes/*.class"/> </fileset> </ftp>
Remote System Explorer
RSE Ftp
연습문제 톰캣에서 war 파일로프로젝트배포하기 ant의 ftp 태스크를이용해서배포하기
Day-5
이클립스와테스트자동화 1. 이클립스에서지원하는테스트케이스 2. JUnit 이해하기 3. 테스트케이스와리팩토링 4. Findbugs 플러그인을통한품질향상 5. JUnit과 Findbugs의지속적인리포트 6. Selenium을이용한웹 UI 레코딩테스트
1. 이클립스에서 지원하는테스트케이스 테스트케이스는입력값과출력값을지정해서테스트되는함수가그 조건의충족여부를확인가능한 프로그램 assertequals( 예상출력, 함수 ( 입력 ));
테스트의자동화 테스트케이스는프로그램으로자동화해야한다. 품질은테스트의범위와실행횟수에영향을받는다. 수작업의테스트는기한내테스트실행횟수를감소시킨다. 테스트는빨리쉽게수행가능해야한다.
Test Harness Scaffold Outside of Application Fine grained TestCases It s useful for changing software Acrobatic with safety net
TestCase 제작
TestCase 제작
TestCase 제작
TestCase 제작 package net.okjsp; import junit.framework.testcase; public class HelloWorldTest extends } TestCase {
테스트메소드
assert... asserttrue( 실행결과 ); assertfalse( 실행결과 ); assertequals( 목적값, 실행결과 ); assertequals(float 목적값, 실행결과, 오차범위 );
일단테스트고
JUnit Result
컴파일되게만들기
컴파일되게만들기
다시테스트고
테스트통과하게하기
기능추가하기
컴파일되게만들기
다시테스트고
테스트통과하게하기
리팩토링하기 - 중복제거 재홗용
테스트히스토리
테스트조건강화하기
다시테스트고
테스트통과하게하기
테스트에관하여
Test and Debug
참고 http://junit.org http://www.eclipse.org http://xper.org http://okjsp.tistory.com/tag/test
연습문제 테스트케이스란?
2. JUnit 이해하기 java version of xunit family. CPPUnit, JSUnit, ASUnit, httpunit Kent Beck, Erich Gamma assert TestCase, TestSuite Matter of S/W quality.
sf.net/projects/junit
TestCase Ver3.8.x Extends TestCase asserttrue assertequals Ver4.x Annotation
TestSuite AllTests Group of TestCases Regression Test Automation
연습문제 JUnit 테스트케이스로디버깅하기 TestCase와 TestSuite 구분하기
3. 테스트케이스와 리팩토링
리팩토링하기
리팩토링하기 -inline
테스트스위트
테스트스위트
젂체테스트하기
정리 - 테스트리듬 Rhythm TestCase Change Small Code All Test Refactoring All Test 돌다리도두드려가라. 모래코드위에코드를추가하지말라.
테스트코드분리하기 - 소스폴더
테스트코드분리하기 - 소스폴더
테스트코드분리 -Move
테스트코드분리 -Move
다시테스트고
JUnit Beyond
연습문제 리팩토링이란? 리팩토링과테스트케이스의관계?
4. Findbugs 플러그인을 통한품질향상
from http://findbugs.sourceforge.net
What for Find Java Program Bugs Search by bug patterns Search for compiled byte code Refer source code for Human Readable Provide fix guide for each bug
Tool Command line Desktop Application Java Web Start; jnlp Plugin IDE: Eclipse, NetBeans Build Tool: Ant, Maven CI Tool : Hudson
Command line Download, Unzip, set Path options findbugs -textui -javahome /path/to/jdk1.5.0 -xml -output findbugs.xml /path/to/classes
Desktop
Eclipse plugin Update URL http://findbugs.cs.umd.edu/eclips e/
Eclipse plugin-editor
Eclipse plugin-view
Eclipse plugin-perspective
Related http://findbugs.sourceforge.net https://hudson.dev.java.net http://okjsp.tistory.com/tag/findbugs
연습문제 Findbugs 이클립스플러그인사용하기 Hudson 플러그인으로리포팅하기
5. JUnit 과 Findbugs 의 지속적인리포트
JUnit Ant Task junit-ant.jar, junit.jar copy to $ANT_HOME/lib/ <target name="test" depends="compile"> <junit> <classpath refid="test.classpath"/> <test name="test.unittest"></test> </junit> </target>
junitreport <mkdir dir="report/html"/> <junit printsummary="on" haltonfailure="on"> <classpath refid="test.classpath"/> <formatter type="xml"/> <batchtest todir="report"> <fileset dir="dst"> <include name="**/*test*"/> </fileset> </batchtest> </junit> <junitreport todir="report"> <fileset dir="report"> <include name="test-*.xml"/> </fileset> <report format="frames" todir="report/html"/> </junitreport>
junitreport
Findbugs Ant Task $FINDBUGS_HOME/lib/findbugs-ant.jar copy to $ANT_HOME/lib/ <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.findbugstask" /> <target name="findbugs" depends="compile"> <findbugs home="${findbugs.home}" output="xml" outputfile="findbugs.xml" jvmargs="-xms512m -Xmx1024M " timeout="1800000"> <sourcepath path="webcontent/web-inf/src" /> <class location="webcontent/web-inf/classes" /> </findbugs> </target>
HUDSON Report https://hudson.dev.java.net/
How to use in our team Each one s IDE; before commit; Using App s Health Care CI graph Code Review
연습문제 JUnit 과 Findbugs 의 Ant 연결파일과 Ant Task 실행을위해파일을복사할 위치는어디인가?
6. Selenium 을이용한 웹 UI 레코딩테스트 Overview Install UI Recording
Install Firefox http://getfirefox.com 도구 > 부가기능 Search "Selenium"
install
Selenium IDE
Recording
VerifyText
Replay
tune
TestCase
TestSuite
Selenium Core Selenium Core is a DHTML test execution framework.
연습문제 방명록웹 UI 테스트케이스작성하기
정리 05.09 이클립스기본 05.16 서브버젂과빌드도구 ANT 05.23 이클립스와협업프로세스 05.30 이클립스웹개발 06.13 이클립스와테스트자동화
이클립스기본 이클립스개요 Hello World 실행하기 코드네비게이션 프로젝트기반의소스아키텍처 프로퍼티에디터플러그인설치하기 Mylyn 과작업리스트
서브버젂과빌드도구 ANT 1. 이클립스서브버젂플러그인 Subversive 2. Version Control System 기본 3. 소스의공유와배포에관하여 4. 버젂비교하기 5. ANT 빌드스크립트만들기 6. ANT 를이용한자동화
이클립스와협업프로세스 1. 지속적인통합 Continuous Integration 2. Hudson 개요 3. Hudson 과 Subversion 연결 4. 개발프로세스에서이클립스포지셔닝 5. Eclipse Communication Framework 6. 프로젝트 Health Check
이클립스웹개발 1. 웹프로젝트의특징 2. 톰캣서버연결 3. JSP/Servlet 만들기 4. 경우에따른인코딩처리 5. Spring 웹프레임워크다루기 6. 원격서버배포하기
이클립스와테스트자동화 1. 이클립스에서지원하는테스트케이스 2. JUnit 이해하기 3. 테스트케이스와리팩토링 4. Findbugs 플러그인을통한품질향상 5. JUnit 과 Findbugs 의지속적인리포트 6. Selenium 을이용한웹 UI 레코딩테스트
수고하셨습니다. 이클립스로 행복한개발하세요.