JUnit로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

JUnit로 검색한 결과
등록일:2008-04-23 15:28:10
작성자:
제목:이클립스(eclipse) 애플리케이션 테스트


진보되고, 확장성 있는 플랫폼 하의 애플리케이션 테스트, 프로파일과 모니터링



난이도 : 중급

Martin Streicher , Editor-in-Chief, Linux Magazine

2007 년 10 월 16 일

"이클립스 테스트와 성능 개선 도구 플랫폼" 튜토리얼 연재의 이번 회에서는 웹 애플리케이션의 반응 시간(response time) 측정을 위해 "이클립스 TPTP(Eclipse Test & Performance Tools Platform)"의 테스팅 기능을 어떻게 사용하는지 배웁니다. 그리고 나서 개선된 JUnit 테스트를 만들고 관리하는 법과 컴퓨터가 유도하는 수동 테스팅을 만드는 법을 배웁니다.

시작하기 전에

이 연재에 대해

애 플리케이션 코드 작성은 견고한 제품 수준의 품질을 보여주는 프로그램을 고객에게 인도하기 위한 긴 과정 중 첫 번째 단계에 지나지 않는다. 코드는 해당 오퍼레이션과 그 정확성을 점검하기 위해 테스트해야 한다. 성능을 저하시키고, 메모리와 같은 중요한 자원을 잘못 사용해 낭비하는 병목현상을 제거하려면 작성된 코드를 수시로 프로파일링해야 한다. 또한 애플리케이션 오류와 미수로 그쳤거나 실제 행해진 공격을 세밀하게 찾아내기 위해서뿐만 아니라 개선과 최적화를 위한 가능성과 사용 패턴을 확인하기 위해 모니터링해야 한다.

이클립스 TPTP는 소프트웨어 아키텍처이며, 이클립스 플랫폼을 확장한 실제 구현된 컴포넌트로 테스트, 성능 측정, 모니터링 도구들을 제공한다. "이클립스 테스트와 성능 측정 플랫폼" 연재는 TPTP의 기능을 탐구한다. Part 1에서는 자바™ 기술로 구현된 애플리케이션을 어떻게 프로파일링하는지 설명한다. Part 2에서는 임의의 로그 파일을 폭넓게 지원되는 CBE(Common Base Events) 포맷으로 변환하는 방법을 설명한다. Part 3인 이번 튜토리얼의 주제는 애플리케이션 테스트를 어떻게 관리하는지에 대한 설명이다.




위로


튜토리얼에 대해

"이클립스 테스트와 성능 측정 플랫폼" 연재의 세 번째 순서인 이번 튜토리얼에서는 웹 애플리케이션의 반응 시간을 측정하기 위해 TPTP 테스트 기능을 사용하는 방법을 시연하고, 향상된 JUnit 테스트를 생성, 관리하는 법을 보여주며, 시스템 지시(computer-directed, 역주: 시스템에 의해 절차를 제공 받음) 매뉴얼 테스트를 생성하는 방법을 설명한다.




위로


목적

이 번 튜토리얼에서는 웹 애플리케이션의 반응 시간을 측정하기 위해 이클립스 TPTP 테스트 기능을 어떻게 사용하는지 배운다. 그리고 나서 향상된 JUnit 테스트를 어떻게 생성, 관리하며 시스템 지시 매뉴얼 테스트를 어떻게 생성하는지 살펴본다.




위로


필요한 사전 지식

소프트웨어 개발 및 소프트웨어 개발 생명 주기에 대한 경험이 있으면 좋다. 또한 명령행에서 소프트웨어를 설치한 경험이 있으면 유리하며, 셸의 PATH, LD_LIBRARY_PATH 변수와 자바 CLASSPATH 변수와 같은, 셸과 시스템 환경 변수를 설정하고, 관리해본 경험이 있으면 좋다. 자바 프로그래밍 언어, 이클립스 IDE와 이클립스 UI에 대한 지식이 있으면 좋지만, 필수는 아니다.




위로


시스템 요구사항

솔 라리스, 리눅스®, 맥 OS, 윈도우® 등 JVM을 제공하고, 지원하는 어느 환경에서든지 이클립스를 실행할 수 있다. 아직 JVM을 시스템에 설치하지 않았다면, 자바 소프트웨어를 위해 적어도 250MB 이상(몇몇 경우, 좀 더 적게 필요할 수도 있다)의 디스크 공간이 있는지 확인하자. 이클립스 소프트웨어의 핵심 기능과 사용되는 모든 플러그인(plug-in)은 추가로 50MB를 더 사용한다.

디스크 공간 확인뿐만 아니라, JVM을 실행하기 위해 충분한 물리 메모리가 필요하다. 일반적으로 요구되는 성능을 만족하기 위해 64MB나 그 이상이 추천된다.

이번에는 필요한 모든 항목을 살펴보자.

주의: 이미 다른 웹 브라우저를 사용하고 있더라도, 컴퓨터 지시 매뉴얼 테스트 스위트를 사용하기 위해서는, 이클립스 TPTP 매뉴얼 테스팅 도구가 사용하는 UI 컴포넌트를 포함하고 있는 모질라 v1.7.8이나 그 이상을 설치해야만 한다.


--다음페이지--

시작하기


이클립스와 이클립스 TPTP 설치하기

모 질라(설치 정보는 모질라 웹 사이트에서 얻을 수 있으므로, 이번 튜토리얼에서는 반복해 다루지 않겠다)를 설치하고 필요한 컴포넌트를 다운로드한 후, 이클립스와 이클립스 TPTP를 설치할 수 있다. 리눅스와 유닉스® 시스템에 설치하는 것은 다음 명령어로 충분하며, 윈도우나 다른 플랫폼을 위한 설치 명령어는 Eclipse.org에서 도움을 받자.

아마 다음 파일들을 다운로드했을 것이다.

  • jre-1_5_0_07-linux-i586.bin
  • eclipse-SDK-3.2-linux-gtk.tar.gz
  • xsd-runtime-2.2.0.zip
  • tptp.platform.runtime-TPTP-4.2.0.zip
  • tptp.test.runtime-TPTP-4.2.0.zip
  • emf-sdo-runtime-2.2.0.zip
  • tptpdc.linux_ia32-TPTP-4.2.0.zip

그리고 위 파일들은 /tmp 디렉터리에 있을 것이고, 이클립스를 설치하고, 이클립스 TPTP를 실행하기 위한 환경을 준비하기 위해 아래 있는 단계를 완료하자.


Listing 1. 이클립스와 이클립스 TPTP 설치하기
                    
#
#
# Unpack the JRE in a new directory, ~/java-tptp
#
$ mkdir ~/java-tptp
$ cd ~/java-tptp
$ sh /tmp/jre-1_5_0_07-linux-i586.bin

#
#
# Unpack Eclipse, Eclipse TPTP, and all the prerequisites
#
$ tar xzvf /tmp/eclipse-SDK-3.2-linux-gtk.tar.gz
$ unzip /tmp/xsd-runtime-2.2.0.zip
$ unzip /tmp/tptp.platform.runtime-TPTP-4.2.0.zip
$ unzip /tmp/tptp.test.runtime-TPTP-4.2.0.zip
$ unzip /tmp/emf-sdo-runtime-2.2.0.zip

#
#
# Unpack, configure, and launch the Eclipse TPTP Agent Controller
#
$ mkdir tptpd
$ cd tptpd
$ unzip /tmp/tptpdc.linux_ia32-TPTP-4.2.0.zip
$ chmod +x ./{bin,lib}/*

#
#
# Set essential environment variables
#
$ export JAVA_HOME=~/java-tptp/jre1.5.0_07
$ export CLASSPATH=$JAVA_HOME
$ export PATH=$JAVA_HOME/bin:$JAVA_HOME/tptpd/bin:$PATH
$ export MOZILLA_FIVE_HOME=/usr/lib/mozilla
$ export LD_LIBRARY_PATH=$MOZILLA_FIVE_HOME:\
$JAVA_HOME/tptpd/lib:$LD_LIBRARY_PATH


#
#
# Start the Eclipse TPTP Agent Controller
#
$ cd ./bin
$ ./SetConfig.sh
$ ./RAStart.sh

#
#
# Finally, launch Eclipse
#
$ ~/java-tptp/eclipse/eclipse

주의: 1에서 주석 부분은 입력하지 말라. 이해를 돕기 위해 제시했을 뿐이다.

프롬프트 창에서 자바 라이선스 약정에는 "예"로 답하고, 이클립스 manifest 파일을 덮어쓸 것인지에 대해서는 매번 All을 클릭하자.




위로


이클립스 실행

이클립스를 실행하고, 이클립스 워크스페이스 창이 나타나면, 워크스페이스 이름으로 testing을 입력하자(이 이름에 대해서는 걱정하지 말자. 이클립스에서는 각 프로젝트마다 하나의 이름을 할당해 여러 개의 워크스페이스를 사용할 수 있고, 한 워크스페이스에서 또 다른 워크스페이스로 이동할 수 있다). 몇 초 후에 아래 그림과 같은 메인 이클립스 창을 볼 수 있다. 이클립스 워크벤치로 이동하는 아이콘을 클릭하자.


그림 1. 메인 이클립스 창
메인 이클립스 창

물 론 이미 이클립스를 설치한 적이 있다면, 이클립스 TPTP 설치를 위해 내장된 이클립스 업데이트 매니저(Eclipse Update Manager)를 사용할 수 있다. 이렇게 하기 위해서는 이클립스에서 다음 단계를 따라 하면 된다.

  1. Software Updates > Find and Install 클릭.
  2. Search for new features to install 옵션 선택 후, Next 클릭.
  3. New Remote Site클릭한 후, name과 URL에 각각 TPTP Update Sitehttp://eclipse.org/tptp/updates/site.xml을 차례로 입력.
  4. Finish를 클릭하고, 설치할 기능을 선택하고, Next 클릭.
  5. 라이선스를 수락한 다음 Next 클릭하고, 마지막으로 Finish 클릭.
  6. 확인 창에서 Install All 클릭.
  7. 설치가 완료되면, 이클립스 다시 시작

이제 이클립스 TPTP를 시작할 준비가 됐다.




위로


이클립스 TPTP 테스팅 도구

자바 기술을 사용해 개발된 애플리케이션과 라이브러리의 변화에 맞춰, 이클립스 TPTP 테스팅 도구에는 네 가지 종류의 테스팅 소프트웨어가 들어 있다.

URL 성능 도구
HTTP 나 URL 도구는 웹 애플리케이션 성능 테스트를 자동화한다. URL 도구를 사용해 반복적인 JUnit 테스트로서 브라우저 세션을 획득할 수 있다. URL 도구는 웹 소프트웨어의 반응 시간(response time)을 측정하기 위해 각 테스트에 자동으로 측정 방법(instrumentation)을 추가한다. 프로젝트 팀 내 공유를 위해 결과 값을 그래프로 볼 수도 있다.
JUnit 도구
이클립스 TPTP JUnit 도구를 사용하면 이클립스 내에서 JUnit 테스트를 만들고, 관리할 수 있다. 더 나아가, JUnit 테스트는 실패한 테스트를 빠르고, 정확하게 추측해낼 수 있도록 깊이 있는 리포트를 제공한다.
매뉴얼 테스팅 도구
매 뉴얼 테스팅 도구는 반드시 수동으로 수행해야만 하는 테스트를 문서로 만들기 위한 시스템을 제공한다. 번거롭지 않으면서, 더 믿음이 가는 매뉴얼 테스트를 만들기 위해 수행된 명령(어), 기대되는 결과값, 점검 목록을 받을 수 있다.
자동화된 GUI 레코더
이 클립스 TPTP AGR(Automated GUI Recorder)은 애플리케이션의 GUI와 상호작용을 캡처해 재생한다. 가공되지 않은 화면 좌표 정보를 사용해 GUI 조작을 저장하거나(이와 같은 레코딩은 화면 해상도에 매이기 때문에 권하지 않는다), 애플리케이션이 SWT로 작성됐을 경우, 개별 위젯의 유일한 속성 값을 사용해 GUI 조작을 저장할 수도 있다. verification hooks이라 불리는 커스텀 서브 루틴은 테스트가 재생되는 동안에 애플리케이션의 정확도를 단언해준다. 또한 테스트를 기록하는 데 사용되는 입력에 변화를 주기 위해 datapools라는 데이터 컬렉션을 구축할 수도 있다.

주의: AGR은 AGR만을 위한 독립적인 튜토리얼로 소개할 만큼 충분한 가치가 있다. AGR에 대해 더 배우고 싶다면, 이클립스 TPTP 테스트 도구 문서에서 "An Introduction to TPTP's Autometed GUI Recorder"를 참조하자.

이번 튜토리얼에서는 URL 도구, JUnit 도구, 매뉴얼 테스팅 도구를 점검해보자.


--다음페이지--

웹 애플리케이션 성능 측정하기


웹에 공개하기 전에, 대부분의 애플리케이션은 개인 컴퓨터의 "로컬(local)"에서 수행된다. 이러한 애플리케이션의 벤치마킹(benchmarking)이 나 성능 측정은 상당히 간단하다. 프로세서 속도나 메모리의 양을 일정하게 측정할 수 있다면, 코드 변경과 다양한 컴파일러의 영향을 쉽게 측정할 수 있다. 유닉스 기반 시스템에서는 명령행, 셸 스크립트와 반복적으로 수행되는 테스트와 그 결과를 기록하는 리치 프레임워크(rich framework)가 제공되는 유틸리티가 있으면 훨씬 좋다.

웹 애플리케이션인 경우 대부분 많은 컴포넌트가 웹, 좀 더 정확히 말하자면, HTTP 오퍼레이션의 수행에 관련되어 있기 때문에 위의 상황과는 매우 다르다. 구성요소에는 로컬 웹 브라우저, 네트워크, 웹 서버, 원격 호스트, 웹 애플리케이션, 그리고 데이터베이스 같은 "변경 요소(moving part)"가 포함된다. 웹 애플리케이션 성능 측정시에는 영향을 받을 수 있는 많은 요소, 예를 들어, LAN에서 테스트를 수행하면 쉽게 얻을 수 있는 것을 최소화할 필요가 있다. 그렇지만, 어떻게 테스트를 반복할 것인지가 여전히 논쟁거리이다.

이클립스 TPTP URL 도구는 웹 애플리케이션의 상호작용을 자동화하고 벤치마크하도록 고안되었다. URL 도구는 프록시를 통해 각각의 "클릭"을 기록할 수 있고, 요청과 응답 사이의 지연 시간을 측정할 수 있다.

URL 도구 사용하기

Listing 2는 웹 서버와 연동되어 돌아가는 반복 테스트가 가능한 간단한 PHP 애플리케이션을 보여준다. 이 애플리케이션에서는 1/4초, 1/2초, 1초 재우기(sleep)를 선택할 수 있다. 이 코드를 DocRoot에 위치시키자.


Listing 2. 간단한 PHP 애플리케이션
                    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Consume Cycles Example</title>
</head>

<body>
<?php
$time = 0;

switch($_GET['mode'])
{
case 'short':
$time=250;
break;

case 'medium':
$time=500;
break;

case 'long':
$time = 1000;
break;
}

$time *= 1000;

if ($time > 0) {
usleep($time);
print "<p>I snoozed for $time microseconds</p>";
}
?>

<h3>Choose how long you want the application to sleep:</h3>
<ul>
<li><a href="index.php?mode=short">A short time</a></li>
<li><a href="index.php?mode=medium">A little while</a></li>
<li><a href="index.php?mode=long">A long time</a></li>
</ul>
</body>
</html>

로컬 머신의 $DOCROOT/burn/index.php에 이 PHP 코드를 배치하고, 웹 브라우저 주소 창에 http://localhost/burn/index.php를 입력하자(그림 2). 링크를 클릭하고, Back을 클릭하면 다시 index 페이지로 돌아온다.


그림 2. 벤치마크를 위한 PHP 애플리케이션
벤치마크를 위한 PHP 애플리케이션



위로


URL 테스트 빌드하기

Listing 2처럼 PHP 애플리케이션 측정을 위한 테스트 작성부터 시작해보자. 이클립스를 실행하고, PHP라는 이름의 새 general project를 만들자.

브라우저 세션 기록하기

먼 저 이클립스의 Preferences에 브라우저와 프록시 포트를 설정하자. 이클립스는 프록시를 시작하고, 프록시를 통해 모든 트래픽을 돌리기 위해 브라우저를 자동으로 설정하고, 실행하는 데 이 설정 값을 사용한다. 프록시가 HTTP 기록에 매우 유용하다는 것을 앞으로 알게 될 것이다. Preferences를 설정해보자.

  1. Window > Preferences를 클릭하고, Test를 확장하자. 그 다음 HTTP Recording을 클릭한다.
  2. 그림 3처럼 가장 오른쪽에 있는 설정을 변경하자.


    그림 3. 브라우저와 프록시 설정
    브라우저와 프록시 설정

    그림 3에 있는 설정을 사용해 HTTP Recorder가 모질라를 띄우고, (SOCKS 4) 프록시에 접속하기 위해 1080 포트를 사용한다.
  3. OK를 클릭하자.
  4. New > Other를 클릭하고, Test를 확장하자. 그 다음 Recording을 확장하고, HTTP Recording을 선택하자. 이제 화면은 그림 4와 같을 것이다.


    그림 4. 새로운 HTTP Recoding 만들기
    새 HTTP Recoding 만들기

  5. Next를 클릭하자.
  6. Recoding 파일은 이름은 Simple로 하고, Finish를 클릭하자.
    바로 이클립스 화면에 Recorder Control 패널(그림 5)과 빈 모질라 창이 나타날 것이다(이미 모질라의 Preferences가 열려 있다면, 사용하기 위해 설정된 프록시를 발견할 수 있다).

    그림 5. HTTP Recording 제어를 위한 Recorder Control 패널
    HTTP Recording 제어를 위한 Recorder Control 패널

  7. 모질라 창으로 포커스를 변경한 다음, 예제 PHP 애플리케이션의 URL, 예를 들어 http://localhost/burn/index.php를 입력하자.
    애플리케이션이 브라우저에서 바로 실행되는 것을 볼 수 있다.
  8. A short time 링크를 클릭한 다음, Back을 다시 클릭하자.
  9. A little while을 클릭하고, Back을 클릭하자.
  10. A long time을 클릭하자.
  11. 다시 이클립스로 돌아와서 Stop recording을 클릭하자(그림 5의 제일 오른쪽에 있는 빨간 정사각형).

이클립스는 기록을 멈추고, Simple.testsuite라는 새로운 테스트 케이스를 생성한다. 또한 기록을 저장한다. 이제 이클립스 창은 그림 6과 같을 것이다.


그림 6. HTTP 성능 측정 테스트 스위트
HTTP 성능 측정 테스트 스위트

획득한 HTTP 테스트 다시 검토하기

HTTP Requests 탭(가장 위 패널의 아래쪽)을 클릭하고, 획득한 네 개의 HTTP 요청 중 하나를 선택하자. 이클립스 창을 확장하면 그림 7처럼 해당 요청에 대한 매우 자세한 정보를 볼 수 있다. 헤더 정보를 추가하거나 GET 매개변수를 변경하는 등 요청 정보를 변경하기 위해 HTTP Requests 뷰를 사용할 수도 있다. 이번 페이지의 요청은 테스트 스위트의 동작을 정의하는 다음 단계에서도 사용될 것이다(처음으로 획득한 HTTP request를 액션으로 생각해보면, 커스터마이징이 필요할 수도 있다. 테스트 스위트는 웹 애플리케이션을 구동하기 위해 액션을 사용한다).


그림 7. 일련의 HTTP 요청 수정하기
일련의 HTTP 요청 편집

이제 Behavior 탭을 클릭하고, 모든 화살표를 눌러 확장하자. 루프 제어(loop controls)는 recycle 아이콘으로 체크할 수 있다. 여기서 (바로 전에 수정한) HTTP 요청은 액션이다. 이제 추가적인 단계(step)를 추가(add), 삭제(remove), 재정렬(reorder), 삽입(insert)할 수 있다(Add는 새로운 자식, 즉 하위 수준의 단계를 만드는 것이고, Insert는 새로운 형제(sibling), 즉 동일한 수준의 단계를 만드는 작업이다). loop를 클릭한 다음, request를 클릭하자. 그림 8처럼 각각의 속성 패널을 볼 수 있다.


그림 8. loop와 request 수정하기
loop와 request 편집

이 두 개의 패널 수정은 화면 자체로 대부분 설명된다. 이 패널에서 루프의 반복(iteration)을 조정하고, 요청의 자세한 정보를 수정할 수 있다. 또한 기타 테스트 스위트에 있는 다른 테스트를 포함시킬 수도 있다. 이렇게 하기 위해서는 가장 왼쪽의 맨 위에 있는 Loop 1을 클릭하고, Number of iterations10으로 변경하자. 수행한 작업을 저장하기 위해 Ctrl+S를 사용하자.

테스트 스위트 컴파일

테스트 스위트를 실행하기 위해, 반드시 테스트 케이스를 자바 코드(실제로는 JUnit 테스트)로 변환해주는 작업인 컴파일을 해야 한다. 스위트를 실행하기 위해, 현재 워크스페이스에 자바 프로젝트를 생성하고, 이름은 Testing으로 한다. 테스트 스위트에서 자바 코드를 생성하려면 다음 과정을 거쳐야 한다.

  1. Windows > Open perspective를 클릭해 Test perspective로 변경하고, 메뉴를 이동해 Test를 선택한다.
    그림 9처럼 이클립스 창에서 Test Navigator를 제공해 Test를 변경할 수 있다.

    그림 9. Test Navigator
    Test Navigator

  2. Simple에서 마우스 오른쪽 버튼을 클릭하고, Generate를 클릭하자. 그러면 그림 10과 비슷한 창이 나타날 것이다.


    그림 10. HTTP recording에서 JUnit 테스트 생성하기
    HTTP recording에서 <font style='background-color: rgb(51, 51, 51);' color='#ffff00' size='4'>JUnit</font> 테스트 생성하기

  3. Browse 버튼을 클릭하고, Testing Java project를 선택하자.
  4. Finish를 클릭하자. Testing 프로젝트에 폴더 두 개가 보인다.
  5. 다음 작업을 계속하기 전에, perspective를 다시 Java perspective로 변경한다.

URL 테스트 실행하기

이제 웹 애플리케이션 성능 측정 테스트를 실행할 준비가 되었다. 이클립스 TPTP 도구는 URL 테스트를 자바 코드로 변환해 준다. 그러기 위해서는 반드시 다음 코드를 실행해야만 한다.

  1. Testing 프로젝트에서 화살표를 눌러 확장하고, Simple.java라는 이름의 자바 클래스가 들어 있는, test라는 폴더 옆에 있는 화살표를 클릭해 확장하자.
    만약 Simple.java를 확장했다면, 전통적인 JUnit 테스트와 매우 비슷한 코드를 볼 수 있을 것이다.
  2. Simple.java에서 마우스 오른쪽 버튼을 클릭하고, Run As > JUnit test를 클릭하자.
    결과는 그림 11과 같다. 테스트 결과 막대는 초록색이고, 총 40개 테스트가 성공적으로 수행되었다.

    그림 11. HTTP 성능 측정 테스트 스위트의 실행 결과
    결과

JUnit 으로 테스트를 실행하면 작업을 테스트한 것을 증명할 수는 있지만, 가치 있는 측정 기준을 얻으려면 이클립스 TPTP 테스트로서 테스트를 실행해야만 한다. 이렇게 하기 위해서는 다시 Test perspective로 변경하고, test 폴더에서 마우스 오른쪽 버튼을 클릭한 후, Run As > Run을 클릭하자. 다음 창에서 Test를 확장하고, Simple을 선택하자. 이 시점에서 가장 오른쪽의 패널은 그림 12와 같을 것이다. Run을 클릭한다. 테스트가 완료될 때까지 그림 13에서 볼 수 있는 진행률 표시 막대(progress meter)가 화면에 남아 있을 것이다.


그림 12. HTTP 성능 측정 테스트 스위트 실행
HTTP 성능 측정 테스트 스위트 실행


그림 13. 진행률 표시 막대
진행률 표시 막대

결과 분석

지금까지 웹 세션을 획득해, 테스트 스크립트를 만들고, 이 스크립트에서 테스트 케이스를 생성하고, 실행해 봤다. 다음 단계는 실행 결과를 분석하는 단계다.

Test perspective는 이제 Simple이라는 이름의 테스트 로그라는 새로운 자원(resource)을 받게 된다. 로그를 열기 위해 더블 클릭을 하자. 이클립스 워크벤치는 그림 14처럼 보일 것이다.


그림 14. 테스트 스위트 실행에 대한 로그
테스트 스위트 실행에 대한 로그

Events 탭을 클릭하고, loops를 확장하고, 그림 15처럼 보이는 페이지를 찾아 보자.


그림 15. 테스트 스위트 실행에 대한 이벤트
테스트 스위트 실행에 대한 이벤트

각 각의 항목에는 매우 유용한 정보가 들어 있지만, 각각이 반응 시간(1/1000초)을 보고하기 때문에 메시지 엘리먼트에 있는 내용이 가장 흥미로울 것이다. 각 요청이 얼마나 걸렸는지 보기 위해 몇 개의 invocation 엘리먼트를 열어보자. 테스트 대상이 된 단순한 예제에서는 매우 빠른 반응 시간(index 페이지를 열어보면 알 수 있다)을 보여줬고, 오랜 시간 동안 재우는 테스트를 선택했을 때는 매우 긴 반응 시간을 보여줬다.




위로


리포트 생성

이 클립스 TPTP HTTP 성능 측정 도구는 테스트를 더 풍부하게 해주는(trick up its sleeve) 더 좋은 방법을 가지고 있는데, 그 방법은 바로 리포트다. 새로운 테스트 스위트를 실행하려면 세 배에서 네 배의 시간이 필요하다. 각각의 실행은 자신만의 로그를 갖는다. 리포트를 요약하려면 다음 단계를 거쳐야 한다.

  1. Test Naviator에 있는 Simple에서 마우스 오른쪽 버튼을 클릭하고, Options를 클릭하자.
  2. Report를 선택하자.
  3. 다음 창에서 아래 그림처럼 HTTP Page Response Time을 클릭하자.


    그림 16. 선택된 리포트의 리스트
    선택된 리포트 목록


만 약 웹 애플리케이션의 반응을 측정하기 위해 엄청난 노력을 한다면, HTTP Recorder가 가장 알맞은 대안이 될 수 있다. HTTP Recorder 외에도 link validator(즉 링크가 제대로 작동하는지 여부를 결정함), 사이트 "heartbeat"(즉 모니터링 기능), 그 외에 사용하기에 적당한 것들을 찾을 수 있다.


--다음페이지--

JUnit 테스트 생성, 관리

이 전 절에서는 배치한 후 웹 애플리케이션을 테스트하는 도구를 살펴봤다. 만약 성능 문제를 발견한다면, 작성된 코드를 프로파일링하고, 병목 현상을 제거하기 위해 다른 이클립스 TPTP 도구를 사용할 수 있다. 그뿐만 아니라 애플리케이션의 오퍼레이션을 지속적으로 모니터링하길 원한다면, 이클립스 TPTP에서 제공하는 로그 분석 도구를 사용할 수 있다.

그렇지만 개발자들은 대부분, 특히 자바 개발자들은 일반적으로 실 서버(production server)에 코드를 넣기 전에 버그를 없애기를 좋아한다. 게다가 많은 자바 개발 프로젝트에서는 코드의 생명주기 전체에 걸친 버그 예방을 위한 개발 환경 구축에 힘을 쏟고 있다. 소스 제어(source control)는 소프트웨어 변경을 추적하고, 일일 빌드를 통해 성능 저하와 부정확성을 포함한 문제를 더 일찍 발견할 수 있다. 추가적으로 단위 테스트를 하면 각 "단위(unit)", 즉 개별 클래스보다 더 작은 단위의 정확한 실행을 검증할 수 있다. 정말로 "코드보다 테스트 먼저 작성하기"는 널리 받아 들여져 실행되고 있으며, 코드가 테스트를 통과하면, 단위 테스트는 완료된 것이다.

이 클립스 코어(설치된 이클립스 TPTP를 제외하고)는 각 클래스로부터 JUnit 테스트(의 골격)를 생성하는 도구를 제공한다. 이클립스 TPTP는 더 나아가 자세한 로그 정보와 흥미롭지 않은 결과(예를 들어 통과된 모든 테스트를 무시할 수 있다)를 제외할 수 있는 특별한 로그 뷰어를 제공한다. 또한 이클립스 TPTP를 사용해 특정 이벤트로 쉽게 이동할 수도 있다. 의문이 나는 코드로 바로 이동할 수 있는 기능을 제공한다. 이번 섹션을 진행해나가면서 여러분은 그 외의 추가적인 기능과 혜택을 알게 될 것이다.

이클립스 TPTP JUnit 도구 시작하기

예제를 통해 이클립스 TPTP JUnit 도구를 살펴보자. Listing 3에 있는 코드는 Account라는 간단한 자바 클래스로 은행 계좌를 모델로 한 것이다. 이 클래스는 잔고에 영향을 미치는 balanced, deposit(amount), withdrawal(amount)로 명명된 "getter" 메서드를 갖고 있다. 추가적으로 compoundAnnually(rate) 메서드를 호출할 때마다, Account의 원금에 1년 동안의 특정 이자율에 의해 벌어들인 이자가 더해진다.


Listing 3. 간단한 은행 계좌 관리를 위한 자바 클래스
                    
package demo;

import java.lang.Math;

public class Account {

private double balance = 0;

public Account() {
this.balance = 0;
}

public Account(double deposit) {
this.balance = 0;

if (deposit > 0) {
this.balance = deposit;
}
}

public double deposit (double deposit) {
if (deposit < 0) {
return this.withdrawal(deposit);
}

this.balance += deposit;

return(this.balance);
}

public double withdrawal (double withdrawal) {
if (withdrawal < 0) {
return(this.deposit(-withdrawal));
}

if (this.balance >= withdrawal) {
this.balance -= withdrawal;
}

return(this.balance);
}

public double balance() {
return this.balance;
}

public double compoundAnnually(double rate) {
int n = 356 * 24;

if (rate > 0) {
this.balance *= Math.pow((1 + (rate/n)), n);
}

return(this.balance);
}
}

  1. 이클립스를 사용해, File > New > Other를 클릭한 다음 Java project를 선택해서 Demo란 이름으로 새 자바 프로젝트를 생성하자.
  2. 자바 프로젝트 폴더 내에, Account란 이름으로 새 클래스를 생성하고, demo 패키지를 만들고, 이 패키지에 추가하자.
  3. Account 클래스의 멤버와 메서드 교체가 필요하기 때문에, Listing 3에 있는 소스 코드를 복사, 붙여 넣는다.
  4. Account 클래스에 대한 이클립스 TPTP JUnit 테스트를 만들자. 이클립스 TPTP JUnit 테스트는 일반 JUnit 테스트의 형식과는 조금 다른 특별한 테스트이며, File > New > Other(그림 17)를 선택함으로써 언제든지 Test 폴더에 추가할 수 있다.

    그림 17. 이클립스 TPTP JUnit 테스트
    이클립스 TPTP <font style='background-color: rgb(51, 51, 51);' color='#ffff00' size='4'>JUnit</font> 테스트

  5. Java perspective에서 Account.java 클래스에서 마우스 오른쪽 버튼을 클릭한 후, New > Other를 클릭하자.
  6. 화면에 나타나는 창에서 TPTP JUnit Test를 선택한다. 만약 그림 18과 같은 창이 나타나면, Yes를 클릭하고 필요한 JAR 파일 세 개를 현재 자바 CLASSPATH 변수에 추가하라.

    그림 18. 필수 클래스를 설정에 추가하기
    필수 클래스를 설정에 추가하기

  7. 새로운 테스트 이름은 AccountTest로 하고, 테스트 편집기에서 테스트 수정하기를 선택한다(그림 19). 작업을 종료하려면 Finish를 클릭하자.

    그림 19. 이클립스 TPTP JUnit 테스트 케이스 이름 짓기
    이클립스 TPTP <font style='background-color: rgb(51, 51, 51);' color='#ffff00' size='4'>JUnit</font> 테스트 케이스 이름 짓기

    이클립스 TPTP JUnit 테스트 케이스가 생성됐을 때, Java perspective는 그림 20과 같을 것이다.

    그림 20. 새로운 JUnit 테스트 스위트를 위한 프레임워크
    새로운 <font style='background-color: rgb(51, 51, 51);' color='#ffff00' size='4'>JUnit</font> 테스트 스위트를 위한 프레임워크

  8. Test Methods 탭을 클릭하자. 이 탭에서는 개별 테스트를 추가할 수 있다. 세 개의 테스트, test 1, test 2, test 3를 생성하기 위해 Add를 세 번 클릭한다. Test1은 testCreateEmpty로, test 2는 createBalance로, test 3은 testVerifyDeposit로 이름을 바꾸라.
  9. Ctrl+S로 작업을 저장하자. AccountTest.java 이클립스 TPTP JUnit 테스트 케이스를 클릭하고 화살표를 클릭해 확장하면, 테스트 이름을 딴 새 메서드 세 개가 클래스에 생성된 것을 볼 수 있다. 이클립스 TPTP JUnit 테스트 도구는 테스트 편집기에서 자바 클래스와 테스트 메서드의 동기화를 부지런히 시도한다. 예를 들어, 테스트 편집기에서 테스트 메서드의 이름을 변경하면, 자바 클래스의 이름 또한 자동으로 변경해준다(그러나 조심해야 할 점은, 오퍼레이션이 많은 동기화가 되지 않을 수도 있다는 점이다).
  10. AccountTest.java 클래스를 열고, 새로 생성한 메서드를 Listing 4에 코드로 다시 수정하자. 다 끝낸 다음에는, Ctrl+S를 눌러 작업을 저장하자.

Listing 4. 새로운 Account 클래스를 위한 테스트 케이스
                    
public void testCreateEmpty()
throws Exception
{
Account zeroAccount= new Account();
assertEquals("balance not zero", zeroAccount.balance(), (double) 0, 0.01);
}


public void testCreateBalance()
throws Exception
{
double startingBalance = 510.96;
Account newAccount= new Account(startingBalance);

assertEquals("starting balance incorrect", \
newAccount.balance(), startingBalance, 0.01);
}


public void testVerifyDeposit()
throws Exception
{
double startingBalance = 987.91;
double deposit = 1560.98;

Account newAccount = new Account(startingBalance);

assertEquals("deposit not credited",
newAccount.deposit(deposit), deposit+startingBalance, .01);
}

이제 자바 클래스와 몇 가지 경우에 대한 JUnit 테스트를 갖게 되었으니, 어떻게 테스트를 실행하는지에 대해 자세히 알아보자. AccountTest.testsuite을 클릭하고, Behavior 탭을 클릭하면, 테스트 스위트를 어떻게 실행하는지에 대한 자세한 정보가 나온다. URL 도구를 사용할 때 했던 것처럼, 다음 단계는 개별 테스트 케이스 실행을 위해 루프를 만들고, 메서드를 호출하는 단계다.

루프와 메서드 호출 실행 방법을 설정하기 위해 다음 단계를 거쳐야 한다.

  1. Behavior 탭에서 Add를 클릭하자.
  2. 그림 21과 같이 화면에 나타난 창에서, 가장 위 패널에 있는 자바 메서드 세 개를 선택한 다음, OK를 클릭하자.
    가장 왼쪽 패널에 테스트 메서드 세 개가 나와야 한다.


    그림 21. 현재 JUnit 테스트에서 실행하고자 하는 케이스 선택하기
    현재 <font style='background-color: rgb(51, 51, 51);' color='#ffff00' size='4'>JUnit</font> 테스트에서 실행하고자 하는 케이스 선택하기


  3. AccountTest.testsuite에서 마우스 오른쪽 버튼을 클릭한 다음, Run As > Test를 클릭한다.
    URL 도구처럼 실행 중인 테스트 스위트를 추적하기 위해 진행 상태 막대(progress bar)가 나타난다. 테스트가 완료되면, AccountTest_#.execution이란 이름으로 새로운 이클립스 리소스로 결과에 대한 로그가 남는다. #은 유일한 식별자다.
  4. AccountTest_#.execution을 더블클릭하고, Events 탭을 클릭하자. 그림 22와 같은 창을 볼 수 있다.


    그림 22. Account 테스트 클래스의 결과
    Account 테스트 클래스의 결과

    이벤트를 클릭해 확인해 보자. 테스트 결과(verdict), 소요 시간과 그 이상에 대한 요약을 보려면 Overview를 다시 클릭한다.

언제, 어떤 테스트 케이스가 실패했는가? testVerifyDeposit() 메서드에 assertEquals() 메서드를 추가해 에러를 확인하자. 그 다음 저장을 하고 AccountTest.testsuite을 다시 시작하자. 다시 실행된 스위트는 새 AccountTest_#.execution 파일을 생성한다. 그 파일을 더블 클릭하라.

Events로 이동해, 실패를 찾을 때까지 화살표를 확장하자. 실패한 메서드를 클릭하면 아래와 같은 스택 트레이스(stack trace)를 비롯해 무엇이 잘못되었는지 자세히 볼 수 있다.


그림 23. 테스트 스위트가 실패할 때 무슨 일이 발생했는가?
테스트 스위트가 실패할 때 무슨 일이 발생했는가?

위 에서 보는 것처럼 이클립스 TPTP JUnit 도구는 JUnit 테스트를 실행하고, 분석하며, 더 정교하게 만들어주는 유용한 환경을 제공한다. 이 외에도 이미 JUnit 테스트를 갖고 있다면, 테스트를 이클립스 TPTP에 임포트(import)해 사용할 수 있다. Import 창에서 File > Import를 클릭하고, 아래 그림에서 보는 것처럼 JUnit tests to TPTP를 클릭하자.


그림 24. 기존 JUnit 테스트를 이클립스 TPTP에 임포트하기
기존 <font style='background-color: rgb(51, 51, 51);' color='#ffff00' size='4'>JUnit</font> 테스트를 이클립스 TPTP에 들여오기

이클립스 TPTP의 도움을 받으면 테스트를 먼저 작성하는 것을 피할 이유가 전혀 없다.



--다음페이지--



매뉴얼 테스트 만들기

이클립스 TPTP HTTP 성능 측정 도구 및 통합된 JUnit 도구는 벤치마크와 회귀(regression) 테스트를 자동화하는 데 각각 도움을 준다. 그러나 모든 테스트가 자동화될 수 있는 건 아니다. 일부 테스트들은 사람의 간섭이 필요하며, 반복적으로 테스트를 획득하고, 다시 실행할 수 없을 만큼 매우 복잡할 수도 있다. 흔히 볼 수 있는 예를 들면, 이클립스 TPTP는 지시된 매뉴얼 테스트와 테스트 스위트를 만들 수 있는 도구를 제공한다.

HTTP 성능 측정 도구를 사용하면, 테스트 케이스를 생성할 수 있으며, 여러 테스트 스위트에서 다시 사용할 수 있다. 테스트의 특정 단계가 반복적으로 실행되어야 하는 경우 단계들을 정렬, 재정렬하거나, 이를 문서로 만들 수 있다. 더 좋은 점은, 매뉴얼 테스트 스위트를 "실행"할 수 있다는 것과 이클립스 TPTP가 그 결과를 모니터링하고, 기록하는 각 단계를 모두 통틀어 작동한다는 것이다.

매뉴얼 테스트 스위트 빌드

이전에 소개했던 PHP 애플리케이션의 검증을 위해, 팀의 또 다른 멤버를 불러오는 간단한 매뉴얼 테스트 스위트를 작성하는 것부터 시작해보자. 아래 과정을 따라 해 보자.

  1. PHP 폴더를 클릭하고, File > New > Other를 클릭하자.
  2. Manual TPTP Test를 클릭하자.
  3. 매뉴얼 테스트에 적합한 이름을 입력하고, Finish를 클릭하자.
    아래 그림과 같은 패널을 볼 수 있다. 선택적으로 Description 필드에 필요한 설명을 입력할 수 있다.

    그림 25. 매뉴얼 테스트 스위트 만들기
    매뉴얼 테스트 스위트 만들기

  4. Add를 클릭하고, 그림 26과 동일하게 필드에 값을 입력하자.
    Description 필드는 리치 텍스트 필드(rich-text field)로, 가독성을 더 높이기 위해 HTML을 사용할 수도 있다.

    그림 26. 수동으로 운영하는 테스트 케이스 만들기
    수동으로 운영하는 테스트 케이스 만들기


  5. 그림 27처럼 Add를 세 번 더 클릭하자.


    그림 27. 매뉴얼 테스트 케이스의 행동(behavior) 수정하기
    매뉴얼 테스트 케이스의 행동(behavior) 편집


  6. 첫 번째 테스트 케이스인 Home Page responds 를 클릭한 다음, 테스트 케이스 생성을 하기 위해 Behavior 탭을 클릭하자.
  7. 아래 그림과 같이 Add > Loop를 클릭해 현재 스위트에 새로운 단계를 만들자.


    그림 28. 테스트 단계의 메뉴
    테스트 단계의 메뉴


  8. 또 다른 단계를 추가하기 위해 Add > Invocation을 클릭하자.
  9. 아래 그림처럼 화면에 뜬 창에서 Home Page responds를 클릭하고, OK를 클릭하자.


    그림 29. 테스트 호출
    테스트 호출


  10. 루프에서 Home Page responds 부분을 만들기 위해, Home Page responds를 루프로 드래그해 옮기자.
  11. 루프의 마지막에 앞에서 "클릭"한 테스트 케이스를 추가하기 위해 Insert를 클릭하자.

위 모든 단계를 마쳤다면, Behavior 패널은 그림 30과 같을 것이다.


그림 30. 매뉴얼 테스트 스위트 아웃라인
매뉴얼 테스트 스위트 아웃라인

하나 이상의 루프에 테스트 스위트를 사용하길 원한다면, Loop 1(다른 이름으로 바꿀 수 있다)을 클릭해 돌아간 다음, Number of iterations 필드에 새로운 수를 입력하자. 이전 작업을 안전하게 저장하기 위해 Ctrl+S를 클릭하자.




위로


매뉴얼 테스트 스위트 실행

이제 테스트를 수행할 준비가 됐다.

  1. Test Perspective로 변경하자. 그림 31처럼 PHP 폴더의 Manual Web test에서 마우스 오른쪽 버튼을 클릭한 다음, Run As > Run을 클릭하자.

    그림 31. 매뉴얼 테스트 스위트 선택
    매뉴얼 테스트 스위트 선택

  2. 그림 32에 나온 결과 창처럼 TPTP Manual Test 폴더에서 Manual Web test를 선택한 다음, local_deployment를 클릭하고 나서, Run을 클릭하자.

    그림 32. 매뉴얼 테스트 스위트 실행
    매뉴얼 테스트 스위트 실행

    이제 친숙한 진행 상태 막대가 나타날 것이다. 당황하지 마라! 그 이면에는 이클립스 에이전트 컨트롤러가 메뉴얼 테스트를 가능하도록 하기 위해 독립적인 애플리케이션(모질라의 SWT UI 툴킷)을 실행하고 있다. 새로운 애플리케이션은 진행 상태 막대가 거의 50%가 됐을 때 나타난다. Manual Test View 애플리케이션은 그림 33과 같다. Manual Test View를 중지하길 원하지 않는다면, 진행 상태 막대 아래에 있는 Cancel 버튼을 클릭하지 말라.

    그림 33. 매뉴얼 테스트 스위트에서 각 테스트 실행
    매뉴얼 테스트 스위트에서 각 테스트 실행

    왼 쪽 패널에는 이번 스위트에 포함된 개별 테스트 케이스와 "score"를 볼 수 있다. 상단 우측에 있는 패널에는 무엇을 하고 있는지 설명하고 있다. 아래에 있는 두 개의 패널인 Verdict와 Reason 패널은 테스트 케이스가 실패했는지, 실패했다면 왜 실패했는지에 대한 기록을 해준다.

  3. 결과에 주석을 달아 놓고 싶다면, Text 필드에 필요한 정보를 입력하자. 성공한 기록을 파일에 첨부하거나 실패를 재현하기 위해 Attachments 기능을 사용할 수 있다.
  4. 하나의 테스트 케이스를 완료하면, 다음 케이스로 가기 위해 Next를 클릭하자. 모든 테스트가 완료됐다면, 마지막 화면은 그림 34와 같을 것이다.

    그림 34. 모든 매뉴얼 테스트 통과
    모든 매뉴얼 테스트 통과

  5. 이클립스로 돌아가기 위해서는 Stop(빨간색 정사각형)을 클릭하자. Test Navigator에 통과된 테스트마다 마크가 체크되어 있는 것을 볼 수 있다. Stop을 클릭한 후에는, 그림 35와 같은 메인 이클립스 화면에 결과에 대한 요약 정보를 볼 수 있다.

    그림 35. 성공한 테스트에 대한 요약 정보
    성공한 테스트에 대한 요약 정보

점검 목록을 만들 필요가 있을 때는, 이클립스 TPTP 매뉴얼 테스팅 도구를 고려해보라. 물론 소프트웨어 테스트를 위해 매우 좋지만, TPTP에서는 어떤 복잡한 작업이든 캡처할 수 있음을 발견할 것이다.


요약

소프트웨어 구축은 예술이자 과학이다. 창조성 없는 코드는 신속하게 실행될 수 없고, 어려운 문제는 복잡하게 얽혀서 남아 있게 되며, 컴퓨터는 축복받은 타자기 이상이 될 수 없다.

소 프트웨어가 기어, 발동기(actuator), 스프링, 도르래로 조립된 물리적인 기계는 아니지만, 그럼에도 불구하고 소프트웨어는 이음새 없이 맞물려 돌아가야 하는 많은 "변경 요소(moving part)"로 구성되어 있다. 그렇다고 어지러운 코드를 발견했다고 망치로 내려칠 수도 없다. 대신 코드 작성, 빌드, 테스트, 튜닝을 이클립스 TPTP를 통해 달성하고, 성능과 안정성을 보장하기 위해 지속적으로 주의 깊게 살펴보자. 영리한 코드 작성자는 이클립스를 항상 곁에 둔다.

기사의 원문보기