[소프트웨어 공학] 테스팅
테스팅
소프트웨어 재앙
- 어떻게 해야하는가
- 소프트웨어의 오작동 발생 Risk를 줄인다
- 위험 : (발생확률) x (발생 시 끼치는 손실)
- 소프트웨어 테스팅은 위험에서 발생 확률을 줄이는 작업
테스팅의 목표
결함 발견
품질과 잔존 위험(residual risk)에 대한 정보 제공
소프트웨어 테스팅
※ Test Item : 테스트의 대상 (프로그램)
※ Test Oracle (= 부분)
- 생성 기능 : 테스트에 대해 예상 결과 생성
- 평가 기능 : 생성한 결과와 비교하여 테스트 통과 여부 판단
테스트 케이스(ISO/IEC/IEEE 29119 기반
소프트웨어 용어
Error
- 부정확한 결과를 야기하는 개발자의 행위
- 사용자의 요구사항 잘못 파악, 언어 문법 잘못 이해하여 코딩하는 경우
Fault
프로그램 기능을 제대로 수행하지 못하게 하는 흠
Commission : 잘못된 정보를 반영하는 경우
요구 명세와 관련되지 않은 기능이 추가
Omission : 올바른 정보를 빠뜨리는 경우
명세에는 있지만 구현되지 않음
알고리즘 결함
프로그램 코드에서 문제를 일으키는 정적인 부분
Failure
- 실행결과와 기대 결과의 차이
- 명세와 다르게 동작하는 것이 외부에
※ Fault -> Error 발생은 아님
완전한 테스팅
- 모든 입력 조건 조합에 대한 테스트 (Brute Force)
테스트 한계
- 테스트는 오류가 없음을 보여주지 않는다
- 언제 테스트 종료할 것인가 -> 테스트 완료 기준 (다음 단계로)
동적 테스트 방법 분류
- 명세 기반 : 명세 정보 기반
- 구조 기반 : 코드 기반으로 테스트 케이스 만들어냄
- 경험 기반 : 테스터의 경험에 의함
명세기반 테스트 (의도한 대로 동작하는 지)
- 출력 인터페이스나 정보, 명세 정보를 이용한 테스트 케이스 설계
- 블랙박스 테스팅
- 요구사항 명세서, 상태 전이도, 유스케이스 다이어그램, 액티비티 다이어그램
※ Test basis : 테스트 케이스 만드는 데 사용하는 정보
구조기반 테스트 (의도한 기능 올바른 지)
- 프로그램 코드 로직 정보 이용하여 테스트 케이스 설계
- 화이트박스 테스팅
- 기대출력은 명세 기반으로 만들 수 밖에 없음
커버리지 분석
- 테스팅이 얼마나 충분하게 이루어졌는지를 분석
- 테스트 커버리지 아이템은 테스트 케이스에 의해 포함되거나 실행될 필요가 있는 명세나 프로그램에 있는 항복
커버리지 = 테스트 커버리지 아이템 수 / 전체 테스트 커버리지 아이템
→ 테스트 완료 기준으로 사용
누락된 요구사항 검출(missing requirements): 요구사항 명세서에 요구사항을 추가한 후에 실행이 되지 않은 부분을 실행할 수 있는 테스트 케이스를 추가
누락된 테스트 검출(missing tests): 실행되지 않은 부분을 실행할 수 있는 테스트 케이스 추가
의도되지 않은 기능 검출: 프로그램에서 제거
Dead code 검출: 프로그램에서 제거
활성화 되지 않은 코드 검출(Deactivated code): 현 시스템에서는 사용하지 않으나 특정 상황에서는 필요한 코드임을 보인다.
경험 기반 테스팅
테스터의 경험이나 지식 및 직관을 기반으로 테스트 케이스를 설계하는 방법
오류 추정(error guessing)은 대표적인 경험 기반 테스트 설계 기술이다. 오류 추정은 과거의 유사한 프로그램을 테스트 했던 경험이나 테스터의 직관을 바탕으로 일반적으로 발생할 수 있는 오작동의 원인이나 문제가 될 만한 영역 등을 추정하여 테스트 케이스를 설계하는 방법
오류 추정은 테스트 케이스를 설계하는 특별한 규칙이나 가이드라인이 없으며 독단적으로 사용되기 보다는 명세 기반 테스트 테스팅 등에 의해 검출되는 오류 유형들을 보완하기 위해s 사용