정보처리기사/소프트웨어 개발
애플리케이션 테스트 관리 2
RangA
2023. 5. 23. 17:13
단위 테스트
01. 단위 테스트
1) 단위 테스트의 개념
- 원시 프로그램의 모듈(함수, 프로시저, 독립적인 루틴 등)이나 컴포넌트 대상으로 화이트박스 테스트를 실시하는 방법
- 모듈의 기능 수행 여부를 판정하고 내부에 존재하는 논리적인 오류를 검출함
- 개별 모듈을 시험하는 것으로 예정된 기능이 제대로 수행하는지를 점건하는 검사
2) 단위 테스트 수행 방법
- 화이트박스 테스트
- 단위 테스트의 가장 기본적인 방법
- 모듈 내부의 소스를 보면서 테스트하는 기법
- 소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트함
- 메소드 기반 테스트
- 단위 모듈의 외부로 공개된 메소드 기반 테스트
- 메소드에 매개 변수(파라미터)를 다르게 호출하면서 테스트함
- 화면 기반 테스트
- 사용자 화면에 직접 데이터를 입력하여 테스트를 수행함
- 화면 기반 테스트는 화면과 연계된 서비스 컴포넌트, 비즈니스 컴포넌트 및 공통 컴포넌트를 묶어서 단위 테스트에 참여
- 화면을 보면서 준비된 시나리오로 단위 테스트를 할 수 있음
- 드라이버와 스터브 활용
- 모듈 개발이 안 된 경우 드라이버(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) 기초 경로 테스트
- 흐름 도표 작성
- 프로그램 소스를 흐름 도표로 작성함
- 복잡도(McCabe Cyclomatic) 계산
- 복잡도는 프로그램이 수행되는 경로의 수
- 흐름 도표를 보고 복잡도를 찾는 방법
- 복잡도 = 화살표로 둘러싸인 영역의 수 + 1
- 오일러 공식을 이용하여 복잡도를 찾는 방법
- 복잡도(R) = E - V + 2 (E : 간선, V : 노드)
- 복잡도를 기준한 테스트 실행
- 복잡도가 3인 경우 테스트는 3가지
- 복잡도가 7인 경우에 5개의 경우만을 테스트하면 나머지 2개는 잠재적 오류로 남게 됨
- 복잡도의 판정
- 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) 단위 디버깅의 자동화 도구
- JUnit : Java 기반의 단위 모듈 테스트, 디버깅 도구
- CppUnit : C++ 기반의 단위 모듈 테스트, 디버깅 도구
- Unitest : Python 기반의 단위 모듈 테스트, 디버깅 도구