JAVA/Unit Test2009. 2. 16. 11:30

단위테스트란?

테스트 대상이 되는 코드 기능의 아주 작은 특정 영역을 실행해 보는, 개발자가 작성한 코드 조각이다.
대개 단위 테스트는 특정 상황에서 특정메서드를 시험해 본다.
어떤 코드 조각이 개발자가 생각하는 대로 동작하는지 증명하기 위해 수행하는 것이다.

기능테스트에 속한다. 개발자에 의한 개발자를 위한 테스트로 필수적이긴 하지만, 검증툴로서는 불충분하다.

테스트의 6가지 영역 - Right-BICEP


  • Right - 결과가 옳은가?
    예상한 결과가 옳은지 살펴보는 결과의 유효성 검사를 하는 것.
    이 코드가 옳게 동작한다면, 어떻게 그것을 알 수 있는가? 에 대해 요구사항이 완벽하지 않고
    대답이 명확하지 않다면 적어도 개발자 관점에서 몇가지는 생각해 낼 수 있다.
    물론 추측한 내용은 사용자 피드백에 의해 다듬어 조정해 가는 과정을 거쳐야 할 것이다.
    즉 어느시점에서든 생각한 대로 동작한다는 것을 증명할 수 있어야 한다.

  • B - 모든경계조건이 CORRECT 한가
    버그는 '경계조건' 근처 즉 코드가 평소의 루틴과 다르게 동작하는 조건에서 많이 발생한다.

    • Conformance - 형식일치
      이메일, 전화번호, 계좌번호, 파일이름등 형식화된 데이터부터 여러연결구조의 데이터등을
      테스트 하여 기대한 형식과 일치하는지 확인해야 한다.
    • Ordering - 순서
      고려해야할 또 하나의 영역은 큰데이터 모음에서 데이터의 순서나 데이터의 한부분의 위치이다.
      어떤 검색루틴이라 해도 반드시 대상이 시작부분이나 끝 부분에 있는 조건을 테스트 받아야 한다.
      많은 버그들을 이런 식으로 찾아낼 수 있다.
    • Range - 범위
      범위는 어떤 변수형이 필요하거나 원하는 값보다 범위를 허용하는 상황을 포괄적으로 함축하는 단어다.
      좋은 객체지향 설계에서는 나이나 방위처럼 한계가 있는 정수형 값(나이를 20,000살이라 입력하거나
      방위의 값을 365도로 입력하는 것 처럼)을 저장할때에는 그대로의 기본형을 사용하지는 않는다.
    • Reference - 참조
      메서드가 자기 영역을 벗어난 어떤 것들을 참조하는가? 외부 의존성이 있는가?
      클래스가 가져야 하는 상태는? 그 메서드가 제대로 동작하려면 그밖에 어떤 조건을 갖춰야 하는가?
      ex) 선언은 되었으나 정의되지 않은 전역변수
    • Existence - 존재성
      ex) null값을 갖는 List의 size() 메서드 호출(null,0,'')
      종료된 세션의 접근
    • Cardinality - 개체수
    • Time - 시간
      ex) 상대시간 (시간적순서)
      절대시간 (경과한 총 계산 시간)
      동시성 문제

  • I - 역관계확인
    논리적 역(Inverse)을 적용하여 검증해 볼 수 있다.

  • C - 다른 수단을 이용한 교차확인
    다른 수단을 이용해서 메서드의 결과를 교차 확인 할 수도 있다. 보통 어떤 값을 계산할 때에는 방법이 한 가지만 있는 건 아니다.
    어떤 한 알고리즘을 선택하는 이유는 그것이 더 좋은 성능을 내거나, 또는 그밖에 다른 좋은 특성이 있기 때문이다.
    제품에는 당연히 제일 좋은 것을 사용하겠지만, 테스트 시스템에서는 결과를 교차 확인하기 위해
    다른 알고리즘을 사용해 볼 수도 있다. 이 기법은 어떤 일을 수행하기 위한 알려진 방법이 있는데,
    제품 코드에 사용하기에는 지나치게 느리거나 유연성이 없는 경우에 특히 유용하다.

  • E - 에러 조건을 강제로 만들어 내기
    현실세계에서는 에러가 발생한다. 디스크가 꽉차고, 네트워크는 끊어지거나 프로그램은 갑자기 멈춘다.
    이런 에러를 일으켜 현실 세계의 문제들을 제대로 처리한다는 것을 테스트할 수 있어야 한다.

  • P - 성능특성
    성능은 그자체가 아니라 입력양이 많아지고, 문제가 복잡해지면서 성능이 변하는 경향을 말하는 것이다.
Posted by B정상