정보처리기사/소프트웨어 개발

애플리케이션 테스트 관리 2

RangA 2023. 5. 23. 17:13

단위 테스트

01. 단위 테스트

1) 단위 테스트의 개념

  • 원시 프로그램의 모듈(함수, 프로시저, 독립적인 루틴 등)이나 컴포넌트 대상으로 화이트박스 테스트를 실시하는 방법
  • 모듈의 기능 수행 여부를 판정하고 내부에 존재하는 논리적인 오류를 검출함
  • 개별 모듈을 시험하는 것으로 예정된 기능이 제대로 수행하는지를 점건하는 검사

2) 단위 테스트 수행 방법

  1. 화이트박스 테스트
    • 단위 테스트의 가장 기본적인 방법
    • 모듈 내부의 소스를 보면서 테스트하는 기법
    • 소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트함
  2. 메소드 기반 테스트
    • 단위 모듈의 외부로 공개된 메소드 기반 테스트
    • 메소드에 매개 변수(파라미터)를 다르게 호출하면서 테스트함
  3. 화면 기반 테스트
    • 사용자 화면에 직접 데이터를 입력하여 테스트를 수행함
    • 화면 기반 테스트는 화면과 연계된 서비스 컴포넌트, 비즈니스 컴포넌트 및 공통 컴포넌트를 묶어서 단위 테스트에 참여
    • 화면을 보면서 준비된 시나리오로 단위 테스트를 할 수 있음
  4. 드라이버와 스터브 활용
    • 모듈 개발이 안 된 경우 드라이버(Driver)와 스터브(Stub)를 이용함
    • 드라이버(Driver)
      • 전체 프로그램의 일부인 클러스터는 독립적으로 실행할 수 없기 때문에 독립적인 실행을 위해서 임시적으로 사용하는 테스트 가동기
      • 테스트 대상 하위 모듈을 호출하고, 파라미터를 전달하고, 모듈 테스트 수행 후의 결과를 도출하는 등 상향식 테스트에 필요함
    • 스터브(Stub)
      • 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈
      • 모듈명만 있고 모듈 안에 프로그램은 존재하지 않는 모듈
      • 전체적인 실행을 위해서는 아직 개발되지 않은 모듈은 가짜 모듈인 스터브를 임시적으로 사용해야 함
      • 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로 하향식 테스트에 필요함
    • 사용자 화면이 없는 경우 드라이버를 이용하여 단위 테스트를 함
    • 서비스 컴포넌트, 비즈니스 컴포넌트 및 공통 컴포넌트 등 하위 모듈이 개발이 안 되었을 경우에는 스터브를 이용하여 단위 테스트를 함



02. 테스트 실행 기법

1) 화이트박스 테스트(White Box Testing, 투명 상자)

1. 화이트박스 테스트의 개념

  • 단위 테스트의 가장 기본적인 방법
  • 소스 코드의 모든 문장을 한 번 이상 수행함으로써 진행됨
  • 소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트함
  • 프로그램의 내부를 보면서 테스트를 수행함
  • 투명 상자는 안에 내용을 볼 수 있듯이 프로그램 소스를 직접 보면서 오류를 찾아내는 방법
  • 모듈의 내부 구현을 자세히 테스트함

2. 화이트박스 테스트의 종류

  • 기초 경로 테스트(Base Path Testing, Structure Testing)
  • 루프 테스트(Loop Testing)
  • 데이터 흐름 테스트(Data Flow Testing)
  • 조건 커버리지(Confition Coverage)

3. 화이트박스 테스트를 통해 찾을 수 있는 오류 및 예

  • 세부적 오류
  • 논리 구조상의 오류
    • 프로그램 소스에서 참, 거짓을 판단하는 부분이 잘못된 경우
  • 반복문 오류
  • 수행 경로 오류
  • 알고리즘 오류에 따른 원치 않는 결과
  • 탈출구가 없는 반복문의 사용
  • 틀린 계산 수식에 의한 잘못된 결과

2) 블랙박스 테스트(Black Box Testing, 불투명 상자)

1. 블랙박스 테스트의 개념

  • 프로그램의 외부 사용자 요구사항 명세를 보면서 테스트함
  • 불투명 상자는 박스 안에 내용을 볼 수 없듯이 프로그램의 동작만으로 오류를 찾아내는 방법
  • 주로 구현된 기능을 테스트함
  • 모듈의 내부 구현보다는 입력과 출력에 의해 기능을 테스트함

2. 블랙박스 테스트의 종류

  • 동등(균등) 분할(Equivalence Partitioning, 동치 분할)
    • 검사 사례를 정상적인 데이터와 잘못된 데이터를 50%씩 정해서 입력해보는 방식
  • 경계값 분석(Boundary Value Analysis)
  • 오류 예측(Error Forecast)
    • 경험적으로 있을 법한 오류 데이터를 입력하여 검사하는 방법으로 숫자만 입력해야 되는 곳에 문자, 특수문자, 공백 등을 다양하게 입력해보는 검사
    • 데이터 확인(Data Validation) 방법이라고도 함
  • 원인 결과 그래프(Cause and Effect Graphing)
    • 여러 개의 입력 자료와 출력 결과가 있는 경우에 사용되는 방법
    • 임의의 자료가 입력된다고 했을 때 중간 루틴을 거치며 예측한 결과가 출력되지 않으면 오류로 판정하는 방법
  • 비교 테스트(Compare Testing)
    • 동일한 프로그램을 다른 컴퓨터에서 각자 실행해보는 방법으로 각자의 결과가 같아야 하는데 다르다면 문제가 있다고 판단하는 검사

3. 블랙박스 테스트를 통해 찾을 수 있는 오류 및 예

  • 인터페이스 오류
  • 자료 구조상의 오류
  • 성능 오류
  • 시작과 종결상의 오류
  • 부정확하거나 빠진 오류
  • 비정상적인 자료를 입력해도 오류 처리를 수행하지 않는 경우
  • 정상적인 자료를 입력해도 요구된 기능이 제대로 수행되지 않는 경우
  • 경계값을 입력할 경우 요구된 출력 결과가 나오지 않는 경우

3) 기초 경로 테스트

  1. 흐름 도표 작성
    • 프로그램 소스를 흐름 도표로 작성함
  2. 복잡도(McCabe Cyclomatic) 계산
    • 복잡도는 프로그램이 수행되는 경로의 수
    • 흐름 도표를 보고 복잡도를 찾는 방법
      • 복잡도 = 화살표로 둘러싸인 영역의 수 + 1
    • 오일러 공식을 이용하여 복잡도를 찾는 방법
      • 복잡도(R) = E - V + 2 (E : 간선, V : 노드)
  3. 복잡도를 기준한 테스트 실행
    • 복잡도가 3인 경우 테스트는 3가지
    • 복잡도가 7인 경우에 5개의 경우만을 테스트하면 나머지 2개는 잠재적 오류로 남게 됨
  4. 복잡도의 판정
    • 5 이하 : 단순함
    • 6 ~ 10 이하 : 구조적이고 안정적임
      • 모든 프로그램을 6 ~ 10 이하로 만들기 위해서는 모듈화가 필수적임
    • 20 이상 : 매우 복잡함
    • 50 이상 : 비구조적, 불안정하므로 다시 작성해야 함

4) 경계값 테스트

1. 경계값 테스트의 개념

  • 범위의 한계 부분을 집중적으로 검사하는 경우를 정하여 검사하는 방법
  • 만약 점수의 범위가 0점부터 100점 사이라면 한계가 되는 0점에 인접한 자료나 100점에 인접한 자료를 집중적으로 검사 경우를 정하여 검사하는 방법

2. 경계값 테스트

  • 아래 표와 같은 평가 점수를 입력 받아 성적으로 출력하는 프로그램을 테스트하는 경우
  • 평가 점수의 범위 조건에서 경계값에 해당되는 80, 100, 60, 79, 0, 59점의 주변 값을 입력해보면서 테스트함
  평가 점수     성적  
  80 ~ 100     A  
  60 ~ 79     B  
  0 ~ 59     C  
  • 80 : 경계값 79, 80, 81 등입 입력
  • 100 : 경계값 99, 100, 101 등을 입력
  • 60 : 경계값 59, 60, 61 등을 입력
  • 79 : 경계값 78, 79, 80 등을 입력
  • 0 : 경계값 -1, 0, 1 등을 입력
  • 59: 경계값 58, 59, 60 등을 입력
  • 해당 경계값 주변의 값들을 입력하여 정상적으로 성적이 출력되는지 확인하고 오류가 발생하면 소스 코드를 수정함



03. 명세 기반 설계 테스트

1) 동등(균등) 분할(Equivalence Partitioning) 테스트

  • 검사 사례를 정상적인 데이터와 잘못된 데이터를 50%씩 정해서 입력해보는 방식
  • 정상 데이터를 입력했을 경우에 정상적인 결과가 나오는지 확인함
  • 오류 데이터를 입력했을 경우에 적당한 오류 메시지가 출력되는지 확인하고, 조치가 적절하게 이루어지는지도 확인함

2) 경계값 분석(Boundary Value Analysis) 테스트

  • 범위의 경계(한계) 부분을 집중적으로 검사하는 경우를 정하여 검사하는 방법

3) 결정 테이블(Decision table) 테스트

  • 결정 테이블은 어떤 결정을 위해 생각할 수 있는 복잡한 모든 조건과 각 조건에 대하여 취해야 할 행동을 모두 열거한 테이블
  • 결정 테이블의 행동을 모두 대입하여 검사하는 방법

4) 정형 명세 기반(Formal Specification base) 테스트

  • 테스트를 주기적으로 수행함으로써 오류를 발견 및 제거하는 방법으로 이해 관계자들 사이의 충분한 의사소통을 통해 오해의 소지를 없애는 방법

5) 유스케이스(Usecase) 테스트

  • 프로그램의 흐름에 따라 테스트 시나리오를 기반으로 테스트하는 방법



04. 단위 디버깅

1) 단위 디버깅의 개념

  • 단위 테스트를 수행하여 논리적인 오류가 발견되었을 때 수행하는 과정
  • 오류가 발생한 소스 코드의 흐름을 따라가면서 변숫값의 변화나 조건식의 수행 과정을 파악함
  • IDE 도구를 이용하여 단위 모듈에 대한 디버깅을 실시함

2) 단위 디버깅의 자동화 도구

  1. JUnit : Java 기반의 단위 모듈 테스트, 디버깅 도구
  2. CppUnit : C++ 기반의 단위 모듈 테스트, 디버깅 도구
  3. Unitest : Python 기반의 단위 모듈 테스트, 디버깅 도구