5장 퍼지 테스팅을 통한 사무용 SW의 신뢰성 확보
기초 기능 완성도의 중요성 & 퍼징 테스트
내용정리
1. 사용자 기대치
대중적 SW 일수록 신기능 개발보단 기초기능에 대한 완성도 추구
- 업무 지원 프로그램은은 고급 기능 개발보단 기초 기능 강화를 추구해야한다.
- MS-Office 명령어 중 32%가 기본 명령어(복붙, 저장, 굵게, 취소) 차지.
- 웹 오피스는 기존보다 고급기능이 적지만, 기초 기능있으니 인기 ↑
⇒ 아름다운 신기능 개발 보단 복잡한 기능은 숨기고, 기초 기능 강화를 추구
2. 왜 퍼징 테스트인가?
퍼징 테스트의 3가지 효과 + 정의되지 않은 영역 테스트
- 퍼징? 입력 데이터를 임의로 변경하거나 손상시켜 프로그램 작동
- 퍼징 테스트의 효과
A. 상호 운용성 개선
B. 사용자 만족도 개선
C. 보안성 개선
++ 정의되지 않은 영역에 추가 테스트
A. 상호 운용성 개선
모든 버전별 or 유사한 SW들 작동 여부 테스트 대체
- 상호 운용성 필요 이유
- 기초 기능(Ctrl+C, Ctrl+V, Ctrl+S)는 버전별 혹은 타사 SW에서도 작동 가능토록 해야 함
- 상호 운용성 범위
- 해당 SW의 모든 버전(구버전 포함)
- 해당 SW과 유사한 타사의 SW
- 작동 중 예외상황으로 데이터 일부 오염시에도 정상 작동
∴ 모든 버전 & 모든 유사 프로그램과 테스트는 현실성 X → ∴ 퍼징 테스트로 대체
B. 사용자 만족도 개선
입력 조건 제한 해제 → 불필요한 사용자 버그 리포트 ↓
- 제한된 입력 조건의 문제점
- 익숙지 않은 사용자는 제한된 입력 조건을 버그로 인식하여 제보
1. 동일한 입력 문제로 여러 사용자들이 동일한 버그를 지속적 보고
2.일반사용자 버그 리포트 해결 시간 > 전문 테스터 버그 리포트 해결 시간
∵ 주요 정보 빠짐, 불완전한 재현 환경
=> 이에 따라, 사용자들이 보고 하기 전 테스터가 미리 탐색하여 해결
C. 보안성 개선
악의적 입력 조건 & 특수 입・출력에 따른 내부 코드 노출 공격 방지
- 입력 조건에 따른 보안 취약 공격 방지
- 알 수 없는 입력 파일 강제 실행 방지
=> 여러 취약성 예방
3. 퍼지 테스팅
A. 준비
대표 샘플(기존 버그 리포트) 준비
- 퍼징 테스팅 준비사항 → 대표 샘플 몇 개
- 유사 프로젝트에서 대표 샘플 탐색
- 기존 버그 리포트 활용
⇒ 해당 샘플 몇 개 이용해서 수 만개 테스트 가능
B. 일반적인 퍼징
단순 입력 파일 변경 & 손상 퍼징 테스트
- zzuf 이용한 퍼징 테스팅
- zzuf? 다용량 입력 퍼저로 입력 조건 속 비트 변경 활용
- 초기 테스트 시, 특정 구조는 유지하며 입력값 내 0.4% 임의 변경 테스트
- zzuf 설정에 따른 테스팅 수행
- 헤더 바이트 범위 보존 → 경로 상 문서 정상 감지 확인 가능
- 특정 문자 변경 방지, 입력 파일에 다른 문자 삽입 방지 테스트 가능
- 코드상의 새너티 검사 가능
- zzuf 테스팅 장점
- 해당 테스팅으로 설정에 따른 여러 결과들을 빠르게 도출 가능
- 소수의 샘플로도 많은 테스팅 가능
- 퍼징 테스팅의 모니터링을 통해 코드 안정도 파악 가능
C. 사용자 퍼징
해당 SW 포맷에 따른 퍼징 테스트
- 사용자 퍼징?
- SW와 File 포맷에 따른 지식을 바탕으로 zzuf 설정하여 퍼징 테스트 실행
- 사용자 퍼징 장점
- 수동으로 생성 불가능한 입력값 생성 가능
- 일반 사용자 사용에 따른 발생 사고를 예방 가능
- 코드 속 함수 통일성 테스트 가능
D. 랜덤 퍼징
일반적이지 않은 난수 퍼징 테스트
- 랜던퍼징?
- 일반 퍼징 & 사용자 퍼징과 대조적으로 비구조적 & 불규칙적 입력 파일 사용
- 랜덤 퍼징 장점
- 예상치 못한 파일 선택에 따른 사고 방지
- 미지원 하는 파일 선택에 따른 사고 방지
4. 추후 고려사항
추가 고려사항
- 코드 및 파일 관련 충분한 퍼징 테스팅 이후? UI & 스크립트 & 매크로도 퍼징 테스팅
- 한 가지 툴(zzuf) 이외에 여러 퍼징 툴 사용 고려
- 자주 사용하는 기능 중심으로 퍼징 테스팅 통한 완성도 높이는 것을 권장한다.
정리
기억에 남는 문장
- 가장 기본적 기능에 대한 신뢰성 확보하는 것이 중요하며, 대부분의 사용자는 몇 가지 기능만으로 작업한다.
- 사무용 SW가 직면하는 가장 어려운 문제는 버전별, 유사한 프로그램과의 상호운용성이다.
- 입력을 제한할수록, 사용자의 중복되는 버그 리포트가 폭발한다.
배운 것
- 업무용 SW일수록 신기능을 첨가하기보단 기초적인 기능에 대한 완성도를 높이는게 중요하다.
- 상호운용은 단순 프로그램 내 정상 작동이 아니라, 버전별 & 유사 SW에서도 작동 가능토록 해야한다.
- 퍼징 테스팅의 핵심은 정의되지 않던 영역을 테스트함에 있다.
참고도서
Adam Goucher, ⌜뷰티풀 테스팅⌟, 지앤선, 2011