1. 테스팅 개념 및 프로세스
1) 테스팅 개념
(1) 결함의 존재성을 밝히는 활동 (무결함 증명은 불가능)
(2) 완벽한 테스팅은 불가능 (모든 경우에 대해 테스트 불가능)
(3) 테스팅은 개발 초기에 시작
(4) 살충제 패러독스 (동일한 테스트가 반복되면 오류들도 내성생김)
(5) 테스팅은 정황에 의존적 (분야별 테스트 방식 천차만별)
(6) 오류-부재의 궤변 (개발된 시스템이 사용자의 니즈와 부합하지 않다면 테스트는 무쓸모)
2) 테스팅 프로세스
3) 테스트 설계
(1) 테스트 설계 개요
a. 테스트 케이스 도출
b. 어느 수준까지 테스팅 되었나 보장
(2) 테스트 케이스의 구성
(3) 테스트 케이스 설계 기법
2. 테스팅 유형 및 기법
1) 테스팅 유형
2) 테스팅 기법
(1) 화이트박스 테스팅
- 구조적, 코드기반 테스트
- 단위 테스팅에서 사용 (e.g. 제어흐름 테스팅, 조건/결정 커버리지 테스팅, 최소비교 테스팅 등)
- 정적분석: 소스 코드 내부 구조 분석해서 미리 정의된 오류 찾기
- 동적분석: 프로그램 실행을 통해서 실제 상황에서 발생 가능한 오류 찾기
(2) 블랙박스 테스팅
- 기능, 명세기반 테스트
- 시스템 테스팅에서 사용
- 기능적/비기능적 요구사항 모두 검증
- 요구사항 명세대로 소프트웨어가 잘 작동하느냐!
- 내부구조 참조 x -> 요구사항 명세 및 외부 인터페이스 기반으로 테스트
3. 리팩토링
1) 리팩토링 개념
(1) 리팩토링 개요
- 프로그램의 내부 구조 개선 (외부 동작 변경 x)
(2) 리팩토링 수행 절차
- 소규모 변경 리팩토링 후 -> 테스트 -> 정상 작동한다면 -> 다음 리팩토링 단계 -> 쭉쭉
2) 코드스멜 개념
(1) 개념
더러운 코드
리팩토링 대상
(2) 종류
(3) 대표 기법