애플리케이션 테스트
애플리케이션 테스트의 개념
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차이다.
- 개발된 소프트웨어가 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증한다
애플리케이션 테스트의 필요성
- 애플리케이션 테스트를 통해 프로그램 실행 전에 오류를 발견하여 예방할 수 있다.
- 애플리케이션 테스트는 프로그램이 사용자의 요구사항이나 기대 수준등을 만족시키는지 반복적으로 테스트하므로 제품의 신뢰도를 향상시킨다.
애플리케이션 테스트의 기본 원리
- 완벽한 테스트 불가능
- 애플리케이션 테스트는 소프트웨어의 잠재적인 결함을 줄일 수 있지만 소프트웨어에 결함이 없다고 증명할 수는 없다. 즉 완벽한 소프트웨어 테스트는 불가능하다
- 결함 집중(Defect Clustering)
- 애플리케이션의 결함은 대부분 개발자의 특성이나 애플리케이션의 기능적 특징 때문에 특정 모듈에 집중 되어 있다. 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다고 하여 파레토 법칙을 적용하기도 한다
- 살충제 패러독스(Pesticide Paradox) !기출
- 애플리케이션 테스트에서는 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 '살충제 패러독스(pesticide Paradox)'현상이 발생한다. 살충제 패러독스를 방지하기 위해서 테스트 케이스를 지속적으로 보완 및 개선해야한다.
- 테스팅은 정황(Context) 의존
- 애플리케이션 테스트는 소프트웨어 특징, 테스트환경, 테스터 역량 등 정황(Context)에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 테스트를 다르게 수행해야 한다.
- 오류-부재의 궤변(Absence of Errors Fallacy)
- 소프트웨어의 결함을 모두 제거해도 사용자의 요구사항을 만족시키지 못하면 해당 소프트웨어는 품질이 높다고 말할 수 없다. 이것을 오류-부재의 궤변이라고 한다.
- 테스트와 위험은 반비례
- 테스트를 많이 하면 할수록 미래에 발생할 위험을 줄일 수 있다.
- 테스트의 점진적 확대
- 테스트는 작은 부분에서 시작하여 점점 확대하며 진행해야한다.
- 테스트의 별도 팀 수행
- 테스트는 개발자와 관계없는 별도의 팀에서 수행해야한다.
프로그램 실행 여부에 따른 테스트
- 애플리케이션을 테스트 할 때 프로그램의 실행 여부에 따라 정적 테스트와 동적 테스트로 나뉜다.
- 정적 테스트
- 프로그램을 실행하지 않고 명세서나 소스코드를 대상으로 분석하는 테스트
- 소프트웨어 개발 초기에 결함을 발견할 수 있어 소프트웨어의 개발 비용을 낮추는데 도움이 된다.
- 종류 : 워크스루, 인스펙션, 코드 검사 등
- 동적 테스트
- 프로그램을 실행하여 오류를 찾는 테스트로, 소프트웨어 개발의 모든 단계에서 테스트를 수행할 수 있다.
- 종류 : 블랙박스 테스트, 화이트박스 테스트
- 정적 테스트
테스트 기반(Test Bases)에 따른 테스트
- 애플리케이션을 테스트 할 때 무엇을 기반으로 수행하느냐에 따라 명세 기반, 구조 기반, 경험 기반 테스트로 나뉜다.
- 명세 기반 테스트
- 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트이다
- 종류 : 동등 분할, 경계 값 분석 등
- 구조 기반 테스트
- 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트이다.
- 종류 : 구문 기반, 결정 기반, 조건 기반 등
- 경험 기반 테스트
- 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행하는 테스트이다.
- 경험 기반 테스트는 사용자의 요구 사항에 대한 명세가 불충분하거나 테스트 시간에 제약이 있는 경우 수행하면 효과적이다.
- 종류 : 에러 추정, 체크 리스트, 탐색적 테스팅
- 명세 기반 테스트
시각에 따른 테스트
- 검증(Verification) 테스트
- 개발자의 시각에서 제품의 생산 과정을 테스트하는 것으로, 제품이 명세서대로 완성됐는지를 테스트한다
- 확인(Validation) 테스트
- 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것으로, 사용자가 요구한대로 제품이 완성됐는지, 제품이 정상적으로 동작하는지를 테스트한다.
목적에 따른 테스트
- 회복(Recovery) , 안전(Security) ,강도(Stress), 성능(Performance) , 구조(Structure), 회귀(Regression), 병행(Parallel)
화이트박스 테스트
- 화이트박스 테스트는 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
- 모듈 안의 작동을 직접 관찰한다
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행
화이트박스 테스트의 종류
- 기초 경로 검사
- 대표적인 화이트박스 테스트 기법
- 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법으로, 테스트 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용된다.
- 제어 구조 검사
- 조건 검사(Condition Testing)
- 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법
- 루프 검사(Loop Testing)
- 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 데이터 흐름 검사(Data Flow Testing)
- 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 조건 검사(Condition Testing)
화이트박스 테스트의 검증 기준
- 문장 검증 기준, 분기 검증 기준, 조건 검증 기준, 분기/조건 기준
블랙박스 테스트(Black Box Test)
- 블랙박스 테스트는 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 한다.
- 사용자의 요구사항 명세를 보면서 테스트하는 것으로, 주로 구현된 기능을 테스트한다
- 소프트웨어 인터페이스에서 실시되는 테스트이다
블랙박스 테스트 종류
- 동치 분할 검사
- 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법으로 동등 분할 기법이라고도한다.
- 경계값 분석
- 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법이다.
- 원인-효과 그래프 검사
- 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
- 오류 예측 검사
- 과거의 경험이나 확인자의 감각으로 테스트하는 기법
- 비교 검사
- 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
단위테스트(Unit Test)
- 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것이다
- 구조 기반 테스트
- 프로그램 내부 구조 및 복잡도를 검증하는 화이트박스 테스트 시행
- 테스트 목적 : 제어 흐름, 조건 결정
- 프로그램 내부 구조 및 복잡도를 검증하는 화이트박스 테스트 시행
- 명세 기반 테스트
- 목적 및 실행 코드 기반의 블랙박스 테스트 시행
- 테스트 목적 : 동등 분할, 경계 값 분석
- 목적 및 실행 코드 기반의 블랙박스 테스트 시행
- 구조 기반 테스트
통합테스트(Integration Test)
- 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서 테스트를 의미한다
시스템 테스트(System Test)
- 시스템 테스트는 개발된 소프트웨어가 해당 컴퓨터에서 완벽하게 수행되는가를 점검하는 테스트이다.
- 기능적 요구사항
- 요구사항 명세서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스 테스트 시행
- 비기능적 요구사항
- 성능 테스트, 회복 테스트, 보안 테스트, 내부 시스템의 메뉴 구조, 웹 페이지의 네비게이션 등 구조적 요소에 대한 화이트박스테스트 시행
- 기능적 요구사항
인수 테스트(Acceptanc Test)
- 인수 테스트는 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법
- 사용자 인수 테스트
- 사용자가 시스템 사용의 적절성 여부를 확인한다
- 운영상 인수 테스트
- 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법으로, 백업/복원시스템, 재난 복구, 사용자 관리, 정기 점검 등을 확인한다.
- 알파 테스트
- 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트기법
- 베타 테스트
- 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법
- 사용자 인수 테스트
통합 테스트(Integration Test)
- 통합 테스트는 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법이다.
하향식 통합 테스트(Top Down Integration Test)
- 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용한다
- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있다.
- 상위 모듈에서는 테스트 케이스를 사용하기 어렵다
- 하향식 통합 방법의 절차
- 주요 제어 모듈은 작성된 프로그램으로 사용하고, 주요 제어 모듈의 종속 모듈들은 스텁(Stub)으로 대체한다
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체된다.
상향식 통합 테스트(Bottom Up Integration Test)
- 상향식 통합 테스트는 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
- 가장 하위 단계의 모듈부터 통합 및 테스트가 수행되므로 스텁(Stub)은 필요하지 않지만, 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터(Cluster)가 필요하다
- 상향식 통합 방법은 다음과 같은 절차로 수행된다
- 하위 모듈들을 클러스터로 결합한다
- 상위 모듈에서 데이터의 입출력을 확인하기 위해 더미 모듈인 드라이버를 작성한다
애플리케이션 테스트 프로세스
- 테스트 계획 → 테스트 분석 및 디자인 → 테스트 케이스 및 시나리오 작성 → 테스트 수행 → 테스트 결과 평가 및 리포팅 → 결함 추적 및 관리
테스트 케이스(Test Case)
- 테스트 케이스는 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서로, 명세 기반 테스트의 설계 산출물에 해당된다.
- 테스트 케이스를 미리 설계하면 테스트 오류를 방지할 수 있고 테스트 수행에 필요한 인력, 시간 등의 낭비를 줄일 수 있다.
테스트 시나리오(Test Senario)
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스들을 묶은 집합으로, 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서이다
테스트 오라클(Test Oracle)
- 테스트 오라클은 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법 및 활동을 말한다
- 테스트 오라클은 결과를 판단하기 위해 테스트 케이스에 대한 예상 결과를 계산하거나 확인한다.
- 테스트 오라클의 특징
- 제한된 검증
- 테스트 오라클을 모든 테스트 케이스에 적용할 수 없다.
- 수학적 기법
- 테스트 오라클의 값을 수학적 기법을 이용하여 구할 수 있다.
- 자동화 가능
- 테스트 대상 프로그램의 실행, 결과 비교, 커버리지 측정등을 자동화 할 수 있다
- 제한된 검증
- 오라클의 종류
- 참(True) 오라클, 샘플링(Sampling)오라클, 추정(Heuristic)오라클, 이로간성 검사(Consistent) 오라클 등이 있다.
테스트 자동화의 개념
- 테스트 자동화는 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트 수행할 수 있도록 한 것이다.
- 테스트 자동화 도구를 사용함으로써 휴먼 에러를 줄이고 테스트의 정확성을 유지하면서 테스트의 품질을 향상시킬 수 있다.
테스트 자동화 도구의 장점 / 단점
- 장점
- 테스트 데이터의 재입력, 재구성 같은 반복적인 작업을 자동화함으로써 인력 및 시간을 줄일 수 있다.
- 테스트 결과에 대한 객관적인 평가 기준을 제공한다
- 단점
- 테스트 자동화 도구의 사용 방법에 대한 교육 및 학습이 필요하다.
테스트 자동화 수행 시 고려사항
- 테스트 절차를 고려하여 재사용 및 측정이 불가능한 테스트 프로그램은 제외한다.
- 모든 테스트 과정을 자동화 할 수 있는 도구는 없으므로 용도에 맞는 적절한 도구를 선택해서 사용한다.
테스트 자동화 도구의 유형
- 정적 분석 도구 (Static Analysis Tools)
- 프로그램을 실행하지 않고 분석하는 도구로, 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함 등을 발견하기 위해 사용된다
- 테스트를 수행하는 사람이 작성된 소스 코드를 이해하고 있어야만 분석이 가능하다
- 테스트 실행 도구(Test Execution Tools)
- 스크립트 언어를 사용하여 테스트를 실행하는 방법으로, 테스트 데이터와 테스트 수행 방법 등이 포함된 스크립트를 작성한 후 실행한다
- 성능 테스트 도구(Performance Test Tools)
- 애플리케이션의 처리량, 응답 시간, 경과 시간, 자원 사용률 등을 인위적으로 적용한 가상의 사용자를 만들어 테스트를 수행함으로써 성능의 목표 달성 여부를 확인한다.
- 처리량, 응답 시간, 경과 시간, 자원 사용률 !기출
- 테스트 통제 도구(Test Control Tools)
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구로, 종류에는 형상 관리 도구, 결함 추적/관리 도구 등이 있다.
- 테스트 하네스 도구(Test Harness Tools)
- 테스트 하네스는 애플리케이션의 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로 테스트를 지원하기 위해 생성된 코드와 데이터를 의미한다
- 테스트 하네스 도구는 테스트가 실행될 환경을 시뮬레이션 하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 한다.
결함(Fault)의 정의
- 결함은 오류 발생, 작동 실패 등과 같이 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것을 의미한다.
결함 관리 프로세스
- 결함 관리 계획
- 결함 기록
- 결함 검토
- 결함 수정
- 결함 재확인
- 결함 상태 추적 및 모니터링 활동
- 최종 결함 분석 및 보고서 작성
결함 상태 추적
- 테스트에서 발견된 결함은 지속적으로 상태 변화를 추적하고 관리해야한다.
결함 추적 순서
- 결함 등록(Open)
- 결함 검토(Reviewed)
- 결함 할당(Assigned)
- 결함 수정(Resolved)
- 결함 조치 보류(Deferred)
- 결함 종류(Closed)
- 결함 해제(Clarified)
'기타 > 정처기' 카테고리의 다른 글
정보처리기사 실기 시나공 9장 소프트웨어 개발 보안 구축 (0) | 2020.12.31 |
---|---|
정보처리기사 실기 시나공 8장 SQL 응용 (0) | 2020.12.31 |
정보처리기사 실기 시나공 6장 화면 설계 (0) | 2020.12.31 |
정보처리기사 실기 시나공 5장 서버 프로그램 구현 (0) | 2020.12.31 |
정보처리기사 실기 시나공 4장 통합구현 (0) | 2020.12.31 |