애플리케이션 테스트
애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 절차
- 확인(Validation) : 개발된 소프트웨어가 고객의 요구사항을 만족하는가
- 검증(Verification) : 개발된 소프트웨어가 기능을 정확히 수행하는가
- 기본 원리
- 완벽한 테스트 불가능
: 애플리케이션 테스트는 소프트웨어의 잠재적 결함은 줄일 수 있지만 결함이 없다고 증명할 수는 없다.
- 결합 집중(Defect Clustering)
: 애플리케이션 결함은 대부분 개발자의 특성이나 애플리케이션 기능적 특징 때문에 모듈에 집중되어 있다.
- 파레토 법칙(Pareto Principle)
: 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다.
- 살충제 패러독스(Pesticide Paradox)
: 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 "살충제 패러독스" 현상이 발생. 지속적으로 테스트케이스 보안 개선
- 테스팅은 정황(Context) 의존
: 소프트웨어 특징, 테스트 환경, 테스터 역량 등 정황에 따라 테스트를 다르게 수행해야한다.
- 오류-부재의 궤변
: 소프트웨어 결함을 모두 제거해도, 결국 사용자의 요구사항을 만족시키지 못하면 해당 소프트웨어는 품질이 높지 않다.
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
정적테스트 | 프로그램 실행 X, 명세서나 소스 코드를 대상으로 분석 |
동적테스트 | 프로그램 실행 O, 오류를 찾음, 개발의 모든 단계에서 테스트 |
- 테스트 기반(Test Basees)에 따른 테스트
명세 기반 테스트 | 사용자 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들었는지 확인 |
구조 기반 테스트 | 소프트웨어 내부 논리 흐름에 따라 테스트 케이스를 작성하고 확인 |
경험 기반 테스트 | 유사 소프트웨어나 기술 등에 대한 테스터의 경험 기반으로 수행해서 확인 |
- 시각에 따른 테스트
검증(Verification) 테스트 | 개발자의 시각. 제품의 생산과정 테스트 |
확인(Validation) 테스트 | 사용자의 시각. 생산된 제품이 결과 테스트 |
- 목적에 따른 테스트
회복 테스트 | 여러가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인 |
안전 테스트 | 설치된 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지 확인 |
강도 테스트 | 시스템에 과도한 정보량이나 빈도 등을 부과해서 과부하 시, 정상적으로 실행되는지 확인 |
성능 테스트 | 실시간 성능이나, 전체적인 효율성을 진단 응답시간, 처리량 등을 확인 |
구조 테스트 | 소프트웨어 내부 논리적인 경로, 소스코드의 복잡도 평가 |
회귀 테스트 | 소프트웨어 변경 또는 수정된 코드에 새로운 결함 없음을 확인 |
병행 테스트 | 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력해서 결과를 비교 확인 |
화이트박스 테스트(White Box Test)
모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계
- 원시코드의 모둔 문장을 한 번 이상 실행함으로써 수행된다.
- 모듈 안에 작동을 직접 관찰할 수 있다.
- 화이트박스 테스트의 종류
기초 경로 검사 | - 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법 - 측정 결과는 실행 경로의 기초를 정의하는데 사용 |
제어 구조 검사 | - 조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법 - 루프 검사(Loop Testing) : 프로그램의 반복(Loop)구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법 - 데이터 흐름 검사(Data Flow Testing) : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법 |
- 화이트박스 테스트 검증 기준
- 테스트 케이스들이 테스트에 얼마나 적정한지를 판단하는 기준
: 문장 검증 기준, 분기 검증 기준, 조건 검증 기준, 분기/조건 기준 등이 있다.
블랙박스 테스트(Black Box Test)
소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트 = 기능 테스트
- 사용자의 요구사항 명세를 보면서 테스트한다. 주로 구현된 기능을 테스트한다.
- 소프트웨어 인터페이스에서 실시되는 테스트이다.
- 블랙박스 테스트의 종류
동치 분할 검사 | 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사 |
경계값 분석 | 동치 분할 기법을 보완. 입력 조건의 경계값을 선정 검사 |
원인-효과 그래프 검사 | 입력 데이터 간 관계와 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정 검사 |
오류 예측 검사 | 과거의 경험이나 확인자의 감각으로 테스트 |
비교 검사 | 동일한 테스트 자료를 제공해서 여러 버전의 프로그램에 적용하고 동일한 결과가 출력되는지 테스트 |
개발 단계에 따른 애플리케이션 테스트
단위 테스트(Unit Test) | - 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트 초점을 맟춰 테스트 * 구조 기반 테스트 : 프로그램 내부 구조 및 복잡도를 검증 = 화이트박스 테스트 * 명세 기반 테스트 : 목적 및 실행 코드 기반 = 블랙박스 테스트 |
통합 테스트(Integration Test) | 단위 테스트가 완료된 모듈들을 결합. 하나의 시스템으로 완성시키는 과정에서 테스트 |
시스템 테스트(System Test) | 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 점검 테스트 |
인수 테스트(Acceptance Test) | - 개발한 소프트웨어가 사용자의 요구사항을 충족하는지 중점을 두고 테스트 * 알파테스트 : 개발자 장소에서. 사용자가 개발자 앞에서 행하는 테스트. 테스트는 통제된 환경에서 행하고, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록 * 베타 테스트 : 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법. 개발자에 의해 제어되지 않은 상태에서 테스트. 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고 |
통합 테스트
단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
비점진적 통합 방식 | - 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 - 규모가 작은 소프트웨어 유리. 단시간 테스트 가능 - 오류 발견 및 장애 위치 파악 및 수정이 어려움 * 빅뱅 통합 테스트 : 모듈 간의 상호 인터페이스를 고려 하지 않고 단위 테스트가 끝난 모듈을 한꺼번에 결합시켜 테스트 |
점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 - 오류 수정 용이. 인터페이스 연관 오류 완전히 테스트 가능 * 하향식 통합 테스트(Top Down Integration Test) : 프로그램 상위 모듈 -> 하위 모듈 방향으로 통합 테스트 * 상향식 통합 테스트(Bottom Up Integration Test) : 프로그램 하위 모듈 -> 상위 모듈 방향으로 통합 테스트 * 혼합식 통합 테스트 : 하위 수준에서 -> 상향식 통합 상위 수준에서 -> 하향식 통합 사용 |
회귀 테스트(Regression) | 이미 테스트된 프로그램의 테스팅 반복. 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인하는 테스트 |
애플리케이션 테스트 프로세스
개발된 소프트웨어가 사용자의 요구대로 만들어 졌는지, 결함은 없는지 등을 테스트하는 절차
테스트 계획 -> 테스트 분석 및 디자인 -> 테스트 케이스 및 시나리오 작성
-> 테스트 수행 -> 테스트 결과 평가 및 리포팅 -> 결함 추적 및 관리
테스트 케이스(Test Case)
구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건
기대 결과 등으로 구성된 테스트 항목에 대한 명세서. 명세 기반 테스트의 설계 산출물에 해당
- 테스트 케이스 작성 순서
테스트 계획 검토 및 자료 확보 -> 위험 평가 및 우선순위 결정 -> 테스트 요구사항 정의
-> 테스트 구조 설계 및 테스트 방법 결정 -> 테스트 케이스 정의 -> 테스트 케이스 타당성 확인 및 유지 보수
테스트 시나리오(Test Scenario)
여러 개의 테스트 케이스들을 묶은 집합. 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서
- 테스트 순서에 대한 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있다.
- 시스템별, 모듈별, 항목별 등과 같이 여러 개의 시나리오로 분리하여 작성해야 한다.
- 각각의 테스트 항목은 식별자 번호, 순서 번호, 테스트 데이터, 테스트 케이스, 예상 결과, 확인 등을 포함해서 작성해야 한다.
- 유스케이스(Use Case) 간 업무 흐름이 정상적인지를 테스트할 수 있도록 작성해야 한다.
테스트 오라클(Test Oracle)
테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법 및 활동
참(True) 오라클 | 모든 테스트 케이스 입력 값에 대해 기대하는 결과를 제공하는 오라클. 발생된 모든 오류를 검출할 수 있다. |
샘플링(Sampling) 오라클 | 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클 |
추정(Heuristic) 오라클 | 샘플링 오라클 개선한 오라클. 특정 테스트 케이스 입력값은 기대하는 결과를 제공. 나머지 입력 값들에 대해서는 추정으로 처리하느 오라클 |
일관성 검사 오라클 | 테스트 케이스 수행 전과 후의 결과 값이 동일한지를 확인 하는 오라클 |
테스트 자동화 도구 유형
사람이 반복적으로 수행하던 테스트 절차를 테스트 자동화 도구를 사용함으로써 휴먼 에러(Human Error)를
줄이고 테스트의 정확성을 유지하면서 테스트의 품질을 향상시킬 수 있다.
* 휴먼 에러(Human Error) : 인간의 실수 등을 통해 의도와 다르게 소프트웨어가 예정된 설계를 벗어난 오류발생
정적 분석 도구(Static Analysis Tools) | 프로그램을 실행하지 않고 분석하는 도구 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함 등을 발견하기 위해 사용 |
테스트 실행 도구(Test Execution Tools) | 스크립트 언어르 사용하여 테스트를 실행하는 방법 테스트 데이터와 테스트 수행 방법이 포함된 스크립트를 작성한 후 실행한다. |
성능 테스트 도구(Performance Test Tools) | 애플리케이션의 처리량, 응답 시간, 경과 시간, 자원 사용률 등을 인위적으로 적용한 가상의 사용자를 만들어 테스트 |
테스트 통제 도구(Test Control Tools) | 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구. 형상 관리 도구, 결함 추적/관리 도구 등이 있다. |
테스트 하네스 도구(Test haness Tools) | 테스트가 실행될 환경을 시뮬레이션 하여 컴포넌트 및 모듈이 정상적으로 테스트 되도록 하는 도구 |
결함 관리(Fault)
오류 발생, 작동 실패 등과 같이 SW가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스 처리 순서
결함 관리 계획 -> 결함 기록 -> 결함 검토 -> 결함 수정 -> 결함 재확인
-> 결함 상태 추적 및 모니터링 활동 -> 최종 결함 분석 및 보고서 작성
애플리케이션 성능
사용자가 요구한 기능을 최소한의 자원을 사용하여 최대한 많은 기능을 신속하게 처리하는 정도
- 애플리케이션 성능 측정 지표
처리량 (Throughout) |
일정 시간 내에 애플리케이션이 처리하는 일의 양 |
응답 시간 (Response Time) |
요청을 전달한 시간부터 응답이 도착할 때 까지 걸린시간 |
경과 시간 (Turn Around Time) |
작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간 |
자원 사용률 (Resourec Usage) |
의뢰한 작업을 처리하는 동안 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률 |
소스 코드 최적화
나쁜 코드(Bad Code)를 배제하고, 클린 코드(Clean Code)로 작성하는 것
- 클린 코드(Clean Code) : 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순, 명료한 코드
- 나쁜 코드(Bad Code) : 코드의 로직이 서로 얽혀 있는 스파게티 코드 등 프로그램의 로직이 복잡하고 이해하기 어려운 코드
* Loosely Coupling( 느슨한 결합 )
: 인터페이스 클래스를 이용. 추상화된 자료 구조와 메소드를 구현함으로써, 클래스 간의 의존성을 최소화 한다.
728x90
반응형
'정보처리기사 > 실기고사 이론정리' 카테고리의 다른 글
[Chapter 9] 소프트웨어 개발 보안 구축 (0) | 2020.10.14 |
---|---|
[Chpater 8] ★ SQL 응용 ★ (0) | 2020.10.08 |
[Chapter 6] 화면 설계 (0) | 2020.10.06 |
[chapter 5] ★ 서버 프로그래 구현 ★ (0) | 2020.10.05 |
[Chapter 4] 통합구현 (0) | 2020.10.04 |