나의 성장과정  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
Junit 삼매경 - 2
Chapter 4
무엇을 테스트해야 하는가? (Check Point)

1. 결과가 옳은가?
2. 모든 경계 조건이 correct 한가?
3. 역관계를 확인할 수 있는가?
4. 다른 방법을 사용해도 결과를 교차 확인 할수 있는가?
5. 에러조건을 강제로 만들어 낼 수 있는가?
6. 성능 특성이 한도 내에 있는가?

2. 모든 경계 조건이 Correct  한가?
 - 형식 일치
 - 순서 : 적절히 순서대로 되어 이거나 그렇지 않은 값인가?
 - 범위 : 적당한 최솟값과 최댓값 사이에 있는 값인가?
 - 참조 : 코드가 자기가 직접 제어 하지 않는 외부 코드를 참조하는가?
 - 존재 : 값이 존재하는가?(null, 0 , 집합 안에 존재함)
 - 개체수 : 확실히 충분한 값이 존재하는가?
 - 시간 : 모든 것이 순서대로 일어나는가?  제시간에, 때맞추어?

 - 완전 엉터리거나 일관성이 없는 입력값    (!@#$%^&*()
 - 잘못된 형식화된 데이터. (fred@fooba.)
 - 아예 없거나 빠뜨린 값. 0,"",null,0.0
 - 합리적인 예상치에서 한참 떨어진 값. 1000살이 넘는 사람 나이
 - 중복된 값이 안되는 목록에서 중복된 값
 - 순서가 매겨져야 하는 목록인데 순서대로 되어 있지 않은 경우.
 - 잘못된 순서로 생기거나 기대한 순서와 다르게 일어나는 일. 옐르 들면 로그인하기 전에 문서를 출력하려고 시도
 하는 것.

3. 역관계 확인
 double x = mySquareRoot(4.0);
 assertEquals(4.0,x*x,0.0001);

 4. 다른 수단을 이용한 교차 확인
 double root1 = mySquareRoot(4.0);
 double root2 = Math.sqrt(4.0);
 assertEquals(root2,root1,0.0001);

 chapter5 correct 경계 조건
 * 인덱스 관련 개념
  - 시작 인덱스와 끝 인덱스가 같은 값이다.
  - 처음 인덱스가 마지막 인덱스보다 크다
  - 인덱스가 음수다.
  - 인덱스가 허용된 것보다 큰 값이다.
  - 원소 개수를 세는 변수값이 실제로 들어 있는 항목 개수와 맞지 않는다.

 * 존재성
  - null, 0, "", 그 밖의 텅빈 허무주의자의 장식들을 충분히 그리고 확실히 테스트 하라.
  여러분의 메서드가 무를 확실히 이겨낼 수 있게 하라.

  * 개체수
  12 피트 길이의 잔디밭에 울타리를 갈게 세우려 하는데, 기둥 사이의 울타리 벽 부분은 폭이 3피트
  길이라면 울타리 기둥이 몇개 필요한가? -> 울타리 기둥 에러

  0-1-n 규칙 :
  이는 존재성과 관련된 문제이기도 하지만, 여기에서는 개수를 정확히 필요한 만큼 갖고 있다든가,
  정확히 필요한 만큼 만들었다는 것을 확인 해야 한다.
  어떤 값 집합의 개체 수는 다음 세 경우만 신경쓰면 된다.

  * 시간
  상대시간 : 시간적 순서 (기대하는 순서에 어긋나는 메서드 호출을 시도해 봐야 할 것이다.
  일련의 순서에서 처음것을, 마지막 것을, 중간 것을 생략해 보라)
  절대시간: 경과한 총 계산 시간
  동시상concurrency 문제. 테스트의 일부로 스레드 여러개를 돌려보도록 하라.

chapter 6. 모의 객체 사용하기
1. 간단한 스텁 (설계를 테스트 하는 동안 코드에서 임시로 만들어 사용하는 부분을 말한다.)
public long getTime(){
    if(debug)
        return debug_cur_time;
    else
        return System.currentTimeMillis();
}
우리에게 필요한 것은 똑같은 일을 해내면서 더 깔끔하고, 더 객체지향적인 방법이다.

2. 모의 객체 Mock
 - 진짜 객체가 비결정적인 동작을 한다.(예상할 수 없는 결과를 만들어 낸다. 주식시장 시세처럼)
 - 진짜 객체를 준비 설정하기 어렵다.
 - 객체가 직접 유발시키기 어려운 동작을 한다(네트웍 에러)
 - 진짜 객체가 느리다
 - 진짜 객체가 사용자 인터페이스를 가지거나, 사용자 인터페이스 자체다.
 - 테스트가 진짜 객체에게 그것이 어떻게 사용되었는지 물어보아야 한다(callback 함수가 호출되었는지 확인)
 - 진짜 객체가 아직 존재하지 않는다.

 * Servlet Test : www.mockobjects.com

 chapter 7 좋은 테스트의 특징

 단위 테스트를 하는 이유는 무엇보다 먼저 여러분 자신의 삶을 편하게 만들기 위해서다!

 - 자동적
 - 철저함
 - 반복가능
 - 독립적
 - 전문적

  -자동적
  cruisecontrol.sourcdforge.net
  www.cs.unibo.it/projects/anthill
  www.mozilla.org/tinderbox.html

  -철저함
  nounit.sourceforge.net
  quilt.sourceforge.net
  패치하지 말고, 재작성하라. 종종 버그 뭉치를 안고 있는 코드 부분을 버리고
  무에서 출발해 그것을 재작성하ㅡㄴ 편이 비용도 훨씬 적게 들고 덜 고통스러운 방식일 수 있다.

  -반복가능
  모든 개발자는 그 안에서 놀 수 있는 자기만의 모래 상자를 필요로 한다.

  -전문적
  단위테스트코드가 제품 코드와 마찬가지로 전문적 표준을 유지하면서 작성되어야 한다.
  좋은 서례글 위한 모든 일반적인 규칙, 캡슐화 유지, Dry원칙 지키기

  - 테스트를 테스트 하기
  1. 버그를 식별한다.
  2. 실패하는 텟트를 작성한다. (버그가 있다는 것을 증명)
  3. 코드를 고쳐서 이제 테스트를 통과하게 만든다.
  4. 코든 테스트가 지금도 통과 한다는 것을 확인한다. ( 즉, 이 수정작업 때문에 망가뜨린것들이 없다는 뜻이다)

  chapter 8   프로젝트에서 테스트하기
  1. 테스트 코드를 어디에 둘것인가
    - 직렬, 병렬, 혼합

  2. 테스트 예절

  3. 테스트 빈도
  - 새 메서드를 작성할때마다
  - 버그를 고칠때마다
  - 성공적으로 컴파일할 때마다
  - 버그 관리 시스템에 체크인할 때마다
  - 끊임없이

  4. 테스트와 레거시 코드
  - 유지보수중인 코드인경우, 가장 망가진부분의 테스트 코드를 작성하라

5. 테스트와 검토
  - 테스트코드의 검토

 







BLOG main image
Simple is beatiful!
 Notice
 Category
분류 전체보기 (755)
전직 (0)
일상 (7)
진행중 (6)
3Fs (14)
미정 (3)
Serendipitous! (6)
지르자 : 맥북 (5)
(5)
FaceBook (3)
 TAGS
URL URLConnection Eclipse Safari 네트워크 커피 자바스크립트 Java color Debug HP JS DOM 접근지정자 tomcat JavaScript laserjet primitive CP1215 사파리
 Calendar
«   2025/08   »
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
 Recent Entries
 Recent Comments
 Archive
 Link Site
상상할 수 있는 힘이 ..
즐겁게살자
인생의 소중한 꿈
{fly to the ocean.com}
누노의 컴퓨토피아
한RSS
[지인]I can\'t stop. Love. Lo…
[원츄]OK 괜찮아 다 잘 될거야
[원츄]애자일 이야기
[원츄]IBM Developerworks
 Visitor Statistics
Total :
Today :
Yesterday :
rss