소프트웨어 테스트 정의
소프트웨어 오류의 원인
Beizer의 소프트웨어 테스트 진화 과정
Level 1 Debugging-oriented
Level 2 Demonstration-oriented
Level 3 Destruction-oriented
Level 4 Evaluation-oriented
Level 5 Prevention-oriented
테스트 용이성
=> 프로그램이 얼마나 손쉽게 테스트 가능한지를 나타내는 특성
(=이단 관제 안분운)
이해용이성
단순성
관찰가능성
제어용이성
안정성
분할용이성
운영용이성
테스트의 목적
결함 검출 , 품질 평가 , 프로세스 개선
결함의 검출과 제품 품질 개선
품질 평가와 의사 결정 지원
개발 프로세스 개선 지원
소프트웨어 개발 과정 중 어떤 단계에서 결함이 발생하는지 분석하고,
그러한 결함이 왜 검출되지 않았는지 파악함으로써 개발 프로세스 개선
오류(Error)

누락(Omission)
부정확한(Incorrect) 구현
비관련(Extraneous) 결함
소프트웨어를 개발하는 각 단계에서 오류를 범할 수 있으므로
각 단계의 산출물에는 결함이 존재할 가능성ㅇ
결함을 제거하지 않고 개발을 지속하게 되면 진행된 상황에 따른 비용이 높아짐.
비용을 최소화하기 위해서는 각 개발 단계에 존재하는 결함을
최대한 빨리 검출하고 제거
수정 비용은 각 단계별로 계속 증가
요구분석 < 설계 < 코딩 < 단위 테스팅 < 인수 테스팅 < 유지 보수

테스팅
실제 동작과 요구사항과의 차이를 확인하는 작업
알려지지 않은 결함을 발견하는 것
장애(Failure)가 있을 때 내부에 결함이 존재한다고 판단
테스팅의 결과는 결함을 검출한 테스트 케이스와 테스트 환경
어떤 환경에서 어떤 입력값을 사용하였을 때 예상되는 결과와 실제 출력 결과 등을 기록하지만
이 결함이 소프트웨어의 어떤 모듈에서 발생하였고 이를 해결하기 위하여
소스코드를 어떻게 수정해야 하는지 관여 X
디버깅
테스팅을 통하여 결함의 존재를 확인한 후에 수행되며
결함의 위치를 파악하고 제거하는 것을 목적
이미 알고 있는 오류를 수정하는 작업
시스템 내부 관련자가 수행
에러 타입을 식별 -> 에러를 수정
재테스팅
ISO의 품질 특성 분류를 바탕으로 진행하며
요구사항 명세는 대표적으로
기능 요구사항과 품질 요구사항을 포함
| 주특성 | 설명 |
|---|---|
| 기능 적합성 | 요구되는 기능을 만족시키는 능력 |
| 신뢰성 | 규정된 조건에서 규정된 기간동안 오작동 없이 의도된 기능을 수행하는 능력 |
| 사용성 | 사용자가 이해하고 배우기 쉬운 정도 |
| 호환성 | 다른 시스템과의 상호 연동 능력 |
| 성능 효율성 | 적절한 자원의 사용 및 적정한 반응시간 정도 |
| 보안성 | 정보 및 데이터를 보호하는 능력 |
| 유지보수성 | 유지보수의 용이성 |
| 이식성 | 다양한 플랫폼에서 운영 될수 있는 능럭 |
V&V(Verification and Validation) 와 품질 보증
V&V
검증(Verification)과 확인(Validation)의 약어로서
소프트웨어 품질 보증을 위한 핵심 개념
정형 방법 : 모델 체킹과 정확성 증명
테스팅 : 동적 테스팅과 정적 테스팅
V&V 분석 : 시뮬레이션과 평가
검증(Verification)
확인(Validation)
품질 보증

테스트 대상(Test item)
결함을 검출하려는 대상
테스트 레벨
=> 레벨 테스트
(소프트웨어 테스트 단계 순서 : 단위 - 통합 - 시스템 - 인수 테스트)
컴포넌트/단위 테스트 : 부분을 대상으로 한 테스트
통합 테스트 : 시스템을 구성하는 각 부분의 연결에 초점을 둔 테스트
시스템 테스트 : 전체 소프트웨어를 대상으로 한 테스트
피처
(Feature)
테스트하고자 하는 관점
테스트 계획을 수립할 때 식별되어 테스트 범위로 기술
테스트 설계 활동에서 피처가 구체화되며
이를 기준으로 테스트 케이스 및 테스트 절차 개발
실행하지 않고 테스트를 수행하는 방식
대표적인 방법으로 리뷰와 정적 분석
리뷰(Review)
각 개발 단계별로 해당 단계의 산출물이 품질 목표에 부합하는지 점검하거나
산출물에 존재하는 결함을 검출하려는 목적으로,
산출물로 검사하는 방법
요구사항 단계가 종료된 시점에
고객으로부터 받은 요구사항이 누락되지 않고
요구사항 단계에서 정확하게 반영되었는지 검토하는 활동
정적 분석(Static analysis)
소스 코드를 대상으로 결함으로 판단할 수 있는 특정한 패턴이 소스 코드에 있는지 분석
장점 : 자동화 도구를 활용함으로써 테스트를 자동으로 수행가능
단점 : 결함이 아닌 문제를 결함으로 보고하는 오검지(False positive)
정적 테스트의 장점
실행 환경 필요 X
(=경제적)
소스 코드가 작성되기 이전에 산출물에 대한 테스트 가능
소프트웨어를 실행하는 방식으로 테스트
입력에 대한 기대 결과를 명시
실행하여 기대 결과와 다른 결과가 발생하는 경우 결함이 있다고 판단
명세 기반 방법
프로그램의 내부 논리 구조를 참조하지 않고
사용자의 요구 명세나 설계 정보 등을 이용하여 테스트 케이스를 개발
시스템의 명세 정보를 얻을 수 있는 한
적용 대상에 제한이 없으며
테스트 전 과정에 걸쳐 사용.
구조 기반 방법
(= 구조적 테스트, 화이트박스 테스트, 글래스 테스트 )
제어 흐름이나 자료 흐름 정보를 이용하여 테스트 케이스를 설계
내부 구조 정보를 기반으로 테스트 케이스를 설계
경험 기반 테스트
테스트 케이스 설계를 바탕으로 테스트를 수행하지 않고
도메인에 대한 테스터의 경험,직관, 테스트 결과를 활용하여 테스트
동적 테스트의 장점과 단점
장점 : 소스 코드가 제공되지않은 경우에도 수행가능
단점 : 소프트웨어 실행 환경 필요
특정 경로를 실험해 보거나 특정 요구 사항을 준수하는지를 확인하기 위한 목적으로 사용
하나의 테스트 프로시저로 여러 개의 테스트 케이스를 실행가능
요구사항에서 명시하지 않은 입력도 테스트 케이스 가능
필수조건은 예상되는 결과를 미리 정의해두는 것
(= 테스트 프로시저)
컴포넌트ㆍ단위 테스트의 경우
컴포넌트 자체가 독립적으로 실행될 수는 없어서
사용자ㆍ환경으로부터의 입력을 대상 컴포넌트에 전달하기 위한 다른 모듈이 필요
테스트 도구도 테스트 환경으로 간주
실제 환경과 최대한 유사한 환경에서 테스트를 수행 필요