[정처기 필기] 「2」 | 애플리케이션 테스트 관리 - (4.1) 애플리케이션 테스트, 테스트의 분류
[정처기 필기] 「2」 | 애플리케이션 테스트 관리 - (4.1) 애플리케이션 테스트, 테스트의 분류
「1」 소프트웨어 설계
> 「2」 소프트웨어 개발
- 데이터 입 / 출력 구현, 통합 구현, 제품 소프트웨어 패키징, > 애플리케이션 테스트 관리, 인터페이스 구현
「3」 데이터베이스 구축
「4」 프로그래밍 언어 활용
「5」 정보시스템 구축 관리
> 1 애플리케이션 테스트
> 2 애플리케이션 테스트의 분류
3 테스트 기법에 따른 애플리케이션 테스트
4 개발 단계에 따른 애플리케이션 테스트
5 통합 테스트
6 테스트 케이스 / 테스트 시나리오 / 테스트 오라클
7 테스트 자동화 도구
8 결함관리
9 복잡도
10 애플리케이션 성능 개선
1. 애플리케이션 테스트
애플리케이션 테스트의 개요
애플리케이션에 잠재되어 있는 결함을 찾아내는 행위, 절차
- 확인(Validation)은 사용자 입장에서 요구에 맞게 구현되었는지 개발 결과를 테스트하여 확인
- 검증(Verification)은 개발자 입장에서 명세서에 맞게 구현되었는지 개발 과정을 테스트하여 점검
- 확인과 검증을 통해 결함 유형을 명확하게 파악 가능
- 개발한 소프트웨어의 유형을 분류하고, 중점으로 테스트할 테스트 사항 정리
>소프트웨어의 분류<
상용 소프트웨어
- 공통적인 필요 기능을 제공, 산업의 특성에 따라 산업 범용 소프트웨어, 산업 특화 소프트웨어로 구분
> 산업 범용 소프트웨어
: 시스템 소프트웨어 - 운영체제, 데이터 관리, 스토리지, 소프트웨어, 소프트웨어 공학 도구, 가상화 소프트웨어, 시스템 보안 소프트웨어로 구분
: 미들 웨어 - 분산 시스템 소프트웨어, IT 자원 관리, 서비스 플랫폼, 네트워크 보안 소프트웨어로 구분
: 응용 소프트웨어 - 영상 처리, CG/VR, 콘텐츠 배포, 자연어 처리, 음성 처리, 기업용 소프트웨어로 구분
> 산업 특화 소프트웨어
: 특정 분야에서 요구하는 기능만 구현한 소프트웨어, 자동차, 항공, 조선, 건설 등 지원하는 소프트웨어
서비스 제공 소프트웨어
- 상업적 목적이 아닌, 특정 사용자가 필요로 하는 기능만 구현하여 제공
> 신규 개발 소프트웨어 : 새로운 서비스를 제공하기 위해 개발된 소프트웨어
> 기능 개선 소프트웨어 : 사용자 편의성, 화면 UI 등 기존 서비스 기능을 개선하기 위해 개발된 소프트웨어
> 추가 개발 소프트웨어 : 법 / 제도 개정 등 새로운 기능을 추가하기 위해 개발된 소프트웨어
> 시스템 통합 소프트웨어 : 시스템별로 서비스되던 것을 원스톱(One-Stop) 서비스로 제공하기 위해 업무 기능이나 데이터 등 통합하여 개발한 소프트웨어
애플리케이션 테스트의 필요성
- 프로그램 실행 전에 오류 발견하여 예방 가능
- 요구, 기대 수준 등 만족하는지 반복적으로 테스트하므로 신뢰도 향상
- 개발 초기부터 진행하면 단순한 오류 발견 가능, 새로운 오류의 유입도 예방
- 효과적으로 수행하면 최소한의 시간과 노력으로 많은 결함 찾을 수 있음
- 성공적인 테스트는 아직 발견되지 않는 오류를 찾는 것
애플리케이션 테스트의 기본 원리
- 소프트웨어의 잠재적 결함은 줄일 수 있지만 없다고 증명할 수 없음, 완벽한 소프트웨어 태스팅 불가
- 결함은 대부분 특정 모듈에 집중, 발견된 80%의 오류는 전체 모듈의 20%에서 발견되는 파레토 법칙 적용
- 동일한 테스트 케이스로 동일한 테스트를 반복하면, 더 이상 결함이 발견되지 않는 '살충제 패러독스'(Pesticide Paradox) 현상이 발생, 테스트 케이스를 지속적으로 보완 / 개선
- 소프트웨어 특징, 테스트 환경, 테스터 역량 등 정황에 따라 결과가 달라지므로, 정황에 따라 다르게 수행
- 결함을 모두 제거해도 요구를 만족시키지 못하면, 소프트웨어의 품질이 낮은 것, 이를 오류-부재의 궤변(Absence of Errors Fallacy)라고 함
- 테스트와 위험은 반비례, 많이 할수록 위험이 줄어들음
- 작은 부분에서 시작하여 확대하며 진행
- 개발자와 관계없는 별도의 팀에서 수행
2. 애플리케이션 테스트의 분류
프로그램 실행 여부에 따른 테스트
정적 테스트
: 프로그램을 실행하지 않고, 명세서 / 소스 코드를 대상으로 분석
: 개발 초기에 결함 발견, 개발 비용 낮춰줌
: 워크스루, 인스펙션, 코드 검사
동적 테스트
: 프로그램을 실행, 모든 단계에서 수행 가능
: 블랙박스 테스트, 화이트박스 테스트
테스트 기반(Test Bases)에 따른 테스트
명세 기반 테스트
: 요구에 대한 명세를 빠짐없이 테스트 케이스 작성 / 확인, 블랙박스 테스트
: 동등 분할, 경계 값 분석
구조 기반 테스트
: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스 작성 / 확인, 화이트박스 테스트
: 구문 기반, 결정 기반, 조건 기반
경험 기반 테스트
: 유사 소프트웨어나 기술 등 테스터의 경험을 기반으로 수행, 블랙박스 테스트
: 요구에 대한 명세가 불충분 / 테스트 시간에 제약
: 에러 추정, 체크 리스트, 탐색적 테스팅
시각에 따른 테스트
검증(Verification) 테스트
: 개발자의 시각에서 소프트웨어 개발 과정을 테스트, 명세대로 완성됐는지 테스트
확인(Validation) 테스트
: 사용자의 시각에서 소프트웨어 결과를 테스트, 요구대로 제품 완성됐는지, 정상적 동작하는지 테스트
목적에 따른 테스트
회복(Recovery) 테스트
: 여러 결함을 주어 실패하도록 한 뒤, 올바르게 복구하는지 확인
안전(Security) 테스트
: 설치된 시스템 보호 도구가 불법적인 침입으로 보호할 수 있는지 확인
강도(Stress) 테스트
: 과도한 정보량 / 빈도로 과부하 시에도 정상적으로 실행하는지 확인
성능(Performance) 테스트
: 실시간 성능 / 전체적인 효율성 진단, 응답 시간 / 처리량 등 테스트
구조(Structure) 테스트
: 내부의 논리적인 경로, 소스 코드 복잡도 등 평가
회귀(Regreesion) 테스트
: 변경 / 수정된 코드에 새로운 결함이 없음을 확인
병행(Parallel) 테스트
: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터 입력하여 결과를 비교
출처 | <시나공> 정보처리기사 필기 2024 기본서 (길벗알앤디)