지난 글t에서 hudson에 JUnit 테스트를 수행하는 방법에 대해 소개하였다. 물론, 코드의 품질은 어떤 테스트 코드를 어떻게 작성하느냐에 코드의 신뢰도가 달라진다. 그렇다면, 좋은 테스트는 테스트 케이스의 수에 단순히 비례할까? 두 말할 필요 없이 얼마나 양질의 테스트가 어떻게 수행되었는지가 중요할 것이다. 본 포스트에서 말하고자 하는 metric은 테스트의 커버리지(coverage)이다. 즉, 테스트의 커버리지가 높은 프로젝트 코드들은 검증을 거친 부분이 많으므로, 상대적으로 양질이라고 볼 수 있다. Emma는 프로젝트 코드와, 프로젝트 코드를 테스트하는 테스트 코드를 조합하여 비교함으로써, 주어진 테스트 코드가 원본 소스 코드에 대해 어느 정도의 커버리지를 갖는지를 조사해 준다. Emma는 어디..
for sale, on sale, having a sale 차이점 비교 1. The store is for sale. 2. The store is on sale. 3. The store is having a sale. 이 문장들의 차이는 무엇일까? 그리고 원래 의도는? 1. 이 가게는 (팔려고) 내놨다. (가게 자체를 파는 것임) 2. "이 가게는 세일 중이다." 라고 쓰면 가게에서 파는 물건이 sale 이 아니다. 가게 자체를 싸게 판다는 뜻 3. 이 가게에서 세일을 하고 있다. 세일 행사 중 = 가게의 items 가 on sale 이다. 보통은, "그 가게는 세일 하고 있어" 라는 문장을 생각하면서, 1이나 2로 작성했다면 얼른 고치자.
소스의 품질을 높이기 위해, Junit을 사용하여 테스트를 자동화 하자. 본 포스트에서는 hudson에 junit 테스트를 태스크로 선언하여 빌드시 테스트를 실시하고, 그 결과를 hudson으로 리포트 하도록 설정하고자 한다. hudson에 등록한 프로젝트로부터 configure를 설정하면, 하단에 와 같이 Junit 테스트 결과를 리포트하겠다는 항목이 있다. 이 기능을 사용하기 위해, 기존에 선언한 build.xml (ant script)에 Junit 테스트 컴파일/ 수행을 하도록 추가할 것이다. 물론, 본인이 작성한 코드를 기반으로 Junit 코드들이 작성되어 있어야 한다. JUnit 테스트를 수행하고 리포트를 생성하기 위해, 기존에 작성한 build.xml을 다음과 같이 task를 추가한다. tes..
지금까지는 수동으로 Build Now를 클릭하여, build를 하는 것이었다면, 이제 Continuous Integration을 위해, 소스 변경본을 감지하여 자동으로 프로젝트를 build 하도록 설정을 해야한다. 우선, SVN 설정 부분에서 다음과 같이 체크박스를 설정한다. 그리고, 주기적으로 소스에 변화가 있는지 검사하도록 다음과 같이 Trigger 옵션을 설정한다. SCM을 polling 한다는 뜻은, 소스에 변화가 있는지 보고 변화가 있을 경우 build를 수행한다는 뜻이라고 보면 된다. 위의 그림에서 보는 바와 같이, 매 5분마다 검사하기 : */5 * * * * 매일 오전 9시에 검사하기 : 00 09 * * * 두 개의 옵션을 부여하였다. 이와 같이 설정하기 전에는, 와 같았으나, polli..
프로젝트를 생성했지만, IDE를 사용해서 빌드를 진행하는 과정은 개인의 PC에서만 수행되는 작업일 뿐이다. Hudson 등의 CI를 사용하는 것은 별도의 빌드 서버를 설정하고자 함이고, 별도의 빌드 서버는 개인의 개발 환경과는 상관없이 빌드를 수행할 수 있도록 설정되어야 한다. 따라서, maven이나 ant 등을 사용하여 별도로 빌드가 이루어지도록 설정할 필요가 있으며, 본 과정에서는 ant를 사용하여, 간단하게 빌드를 할 수 있도록 한다. 당연히, ant가 미리 설치 되어 있어야 하며, (http://ant.apache.org) ant의 설치 디렉토리는 ANT_HOME으로 설정되어 있어야 한다. 지난 번에 등록한 프로젝트명을 클릭하면, 좌측 상단에 위와 같은 Hudson의 메뉴를 볼 수 있다. 별도의 ..
Hudson을 설치했으므로, 이제 프로젝트를 생성하자. 1. 작업 생성하기 "새작업"을 클릭하여, 새 프로젝트를 생성한다. 임의의 프로젝트 이름을 입력하고, "Build a free-style software project"를 선택한다. 다음과 같은 세부 설정 화면을 볼 수 있다. 필요한 정보를 모두 입력한다. 이번에 www.unfuddle.com에 생성한 무료 SVN을 연결하여 프로젝트를 생성하기로 한다. Source Code Management 메뉴로부터, Subversion을 선택하면, 다음 화면을 볼 수 있다. Repository URL 옆의 ? 버튼을 클릭하여, SVN 위치와 인증 정보를 모두 입력하자. 아래의 화면과 같이 나올텐데, "this link"를 클릭하면 인증 정보를 입력할 수 있는 ..
누군가를 차근 차근 가르쳐주다. He'll walk you through it. 그 사람이 그것을 차근차근 알려줄 것이다.
어제 퇴근 길에 라디오에서 들었다. "나는 버스/지하철/택시를 타고 가는 중이야." 영어로는, I'm on the bus. I'm on the subway. I'm in a taxi. 숙어란다. 그냥 외우라던데.
UML 다이어그램에서 특히 집합 관계를 표시할 때, 헷갈리는 용어이다. 'A가 B에 속해있다.' 혹은 'B는 A를 포함한다'의 개념을 표현하고자 할 때 사용하는 표기인데, 어떤 경우에 이 관계는 composition 또는 aggregation이라고 말할 수 있는 것일까? 이에 대해, googling을 하던 중, 적어도 나에게는 와닿는 포스팅이 있어 소개하고자 한다. 물론, 단지 이 글 뿐만 아니라 다른 곳으로부터도 참고하였다. 참고 : http://www.bestarticle.org/computer/association-aggregation-and-composition-what-are-they-and-how-do-they-differ/ Aggregation ◇--, 실선으로 표시 대상 객체에 대한 pos..
~하는 것에 대해 자세히 하나씩 알려주다. Q) Please tell me how to use it. A) 매뉴얼 읽어봐 Q) Please tell me how to go about using it. A) 우선, 어찌어찌하고, 그 다음은 어떻게 한 다음에, 이렇게 저렇게 해봐.
What I have seen was nothing close to being civilized. 내가 본 것은 성숙된 것과는 거리가 멀었다.
Eclipse에 내장된 기능으로도 특정 객체의 hashCode()와 equals()를 작성할 수 있다. 사용법은, 마우스 오른쪽 클릭하여 나오는 context 메뉴로부터 Source > Generate hashCode() and equals() ... 를 클릭하면 된다. 그러면, 다음과 같은 코드가 생성될 것이다. @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((link == null) ? 0 : link.hashCode()); result = prime * result + ((menuCode == null) ? 0 : menuCode.hashCode()); result = ..