테스트 기본중의 기본

테스트 기본

  • 적어도 설계 단계에서 클래스 다이어그램시퀸스 다이어그램은 꼭 작성하자

    • 클래스 다이어그램: 객체지향 설계에서 클래스 간의 관계와 구조를 시각적으로 표현한 다이어그램. 클래스의 속성, 메서드, 상속 등을 나타냄

    • 시퀀스 다이어그램: 시스템 내 객체 간 상호작용 순서를 시간 흐름에 따라 표현한 다이어그램. 메시지 교환 과정과 실행 순서를 보여줌

    • 하나의 거대한 코드를 방지할 수 있고, 리팩토링 효과도 시각화 가능해짐

  • 테스트 라이프 사이클(단위 테스트 -> 통합 테스트 -> 시스템 테스트)의 각 단계에서 적절한 방법을 수행해야함

    • 적절한 테스트 방법: 경계값 테스트, 조합 테스트, 상태 전이 테스트

    • 경계값 테스트: 입력값의 경계나 한계점에서 발생할 수 있는 오류등을 체크 (최대/최소값, 경계 바로 안팎의 값)

    • 조합 테스트: 서로 다른 입력값의 조합에 따라 발생할 수 있는 오류등을 체크

    • 상태 전이 테스트: 시스템이 어떤 상태에서 다른 상태로 전이될 때 올바르게 작동되는지 체크 (상태와 전이 조건 기반으로 진행)

단위 테스트에서 경곗값 테스트 개념이 포함되어 있지 않은 경우 단지, 함수를 호출해서 커버리지 비율을 높이는 것일뿐 도움이 되지 않는다.

경곗값 테스트

경곗값 테스트만 확실히 수행해도 80% 이상의 버그를 잡을 수 있다.

  • 문자 그대로 '경계를 테스트하는 방법'

  • 일반적으로 요구사항 사양의 경계에서 버그가 발생한다.

    • 테스터도 집요하게 경계가 되는 값을 입력해 버그를 발견하려고 한다!

  • 프로그램에서 경계라 불리는 위치에서는 항상 버그가 숨어있다.

>>=의 잘못된 사용 (닫힘 관계 버그)

  • 개발자가 >=로 입력해야 하는 곳에 >라고 잘못 입력한 경우

if (a > 1) {
  // 출력 처리
} else {
  // 에러 처리
}

잘못 입력한 숫자, 요구사항 사양 오해 등

  • 개발자가 1이라 입력하는 대신 잘못해서 2로 입력한 경우

if (a >= 2) {
  // 출력 처리
} else {
  // 에러 처리
}

경계가 없음

  • 개발자가 조건문을 작성하는 것을 잊어버린 경우 (else)

if (a >= 2) {
  // 출력 처리
}
// else 까머금

여분의 경계

  • 불필요한 경계를 개발자가 작성한 경우

if (a > 2 %% a < 10) {
  // 출력 처리 
} else {
  // 에러 처리
}

상태 전이 테스트

'상태'를 모델화해서 테스트를 수행하는 방법

  • '상태 전이'란 크게 상태전이로 나누어 표현됨

  • 어떤 상태에서 다른 상태로 이동하기 위해서는 전이가 발생함

  • Ex: 애플리케이션이 기동하는 상태를 상태 A, 기동하지 않는 상태를 B라 정의, 상태 A에서 상태 B로 바뀌려면 애플리케이션이 종료 상태를 거쳐야함

  • 상태 전이 테스트에서는 함수(또는 클래스) 레벨에서 단위 테스트가 끝난 뒤, 해당 함수가 다른 함수에서 호출되는지 등을 확인

  • 상태 전이 테스트에서는 일반적으로 상태 전이 매트릭스를 사용함

상태 전이 매트릭스

이벤트/상태
시스템
입력 대기
대화 상자 열기

기동

입력 대기

N/A(두 번째 인스턴스가 기동하지 않는 것을 확인)

N/A(두 번째 인스턴스가 기동하지 않는 것을 확인)

메뉴 명령어

N/A

파일 대화 상자 열기

N/A

입력

N/A

입력 대기

N/A

대화 상자 닫기

N/A

N/A

입력 대기

애플리케이션 종료

N/A

시스템

N/A(종료하지 않는 것을 확인)

개발자라면 이와 같은 내용을 올바른 문장으로 만들고 테스터에게 전달하는 행동매우 중요하다.

  • 그렇지 않다면 스스로 테스트를 수행해야 한다.

  • 만약 이 중 한가지라도 부족하면 시장의 버그로 연결된다.

Last updated