테스트 오라클
1) 정의
- 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참 값을 입력하여 비교하는 기법 및 활동
2) 유형
- 참(True) 오라클 : 모든 입력 값에 대하여 기대하는 결과를 생성함으로써 발행된 오류를 모두 검출할 수 이쓴 오라클
- 샘플링(Sampling) 오라클 : 특정한 몇 개의 입력 값에 대해서만 기대하는 결과를 제공해 주는 오라클
- 휴리스틱(Heuristic) 오라클 : 샘플링 오라클을 개선한 오라클로, 특정 입력 값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 휴리스틱(추정)으로 처리하는 오라클
- 일관성 검사(Consistent) 오라클 : 애플리케이션 변경이 있을 때, 수행 전과 후의 결과 값이 동일한지 확인하는 오라
테스트 레벨
1) 정의
- 테스트 레벨은 함께 편성되고 관리되는 테스트 활동으 그룹이다
- 프로젝트에서 책임과 연관되어 있다
- 각각의 테스트 레벨은 서로 독립적이다
<이미지>
테스트 레벨 종류
종류 | 설명 |
단위 테스트 Unit Test |
- 구현된 모듈(함수, 서브루틴, 컴포넌트 등)의 기능 수행 여부를 판정 - 내부에 존재하는 논리적 오류를 검출할 수 있는 방안을 파악 |
통합 테스트 Integration Test |
- 모듈 간의 인터페이스 연계를 검증하고, 모듈 간의 인터페이스 오류를 확인 - 모듈 간의 상호작용 및 연계 동작 여부를 판정하는 방안을 파악 - 상향식, 하향식 테스트 |
시스템 테스트 System Test |
- 단위, 통합 테스트 후 전체 시스템이 정상적으로 작동하는지 판정하는 기능 명세를 확인하는 방안을 파악 - 기능, 비기능 요구사항 테스트 |
인수 테스트 Acceptance Test |
- 사용자가 요구 분석 명세서에 명시된 사항을 모두 충족하는지 판정 - 시스템이 예상대로 동작하고 있는지를 판정하는 방안을 파악 - 알파, 베타 테스트 |
소프트웨어 테스트의 원리
1) 특징
- 테스팅은 결함이 존재함을 밝히는 활동이다
- 완벽한 테스팅은 불가능하다
- 테스팅은 개발 초기에 시작해야 한다
- 결합 집중 (Defect Clustering)
- 살충제 패러독스 (Presticide Paradox)
- 테스팅은 정황(Context)에 의존한다
- 오류-부재의 궤변 (Absence of Errors Fallacy)
소프트웨어 테스트의 유형
1) 프로그램 실행 여부
- 정적 테스트 : 프로그램 실행 없이 소스 코드의 구조를 분석하여 논리적으로 검증하는 테스트
(인스펙션, 코드 검사, 워크스루)
- 동적 테스트 : 프로그램의 실행을 요구하는 테스트
(화이트박스 테스트, 블랙박스 테스트)
2) 테스트 기법
* 화이트박스 테스트
- 프로그램 내부 로직 (수행 경로 구조, 루프 등)을 보면서 테스트를 수행
- 기초 경로 검사
- 제어 구조 검사 (조건 검사, 루프 검사, 데이터 흐름 검사)
* 블랙박스 테스트
- 프로그램의 외부 사용자 요구사항 명세르 보면서 테스트, 주로 구현된 기능 테스트
- 동치 분할 검사 : 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 같에 테스트케이스 작성
- 경계값 분석 : 입력조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용
- 원인-효과 그래프 검사
- 오류 예측 검사
- 비교 검사
3) 테스트에 대한 시각
* 검증 (Verification)
- 제품의 생산 과정을 테스트한다. (Are we building the product right?)
- 올바른 제품을 생산하고 있는지 검증하는 것을 의미
* 확인 (Validation)
- 생산된 제품의 결과를 테스트 (Are we building the right product?)
- 생산된 제품이 정상적으로 동작하는지 확인하는 것을 의미
종류 | 설명 |
형상검사 | 구성요소, 목록, 유지보수를 위한 모든 사항이 표현되었는지 검사 |
알파검사 | 개발자의 장소에서 사용자가 개발자 앞에서 행하는 검사 기법 통제된 환경에서 오류, 문제점 등을 사용자와 개발자가 함께 확인 |
베타검사 | 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 검사 기법 실제 업무를 가지고 사용자가 직접 테스트하며 제어되지 않은 상태에서 검사함 |
클린 코드 작성 원칙
종류 | 설명 |
가독성 | 이해하기 쉬운 용어를 사용 코드 작성 시 들여쓰기 기능 사용 |
단순성 | 한 번에 한 가지 처리만 수행 클래스/메소드/함수를 최소 단위로 분리 |
의존성 | 영향도를 최소화 코드의 변경이 다른 부분에 영향이 없게 작성 |
중복성 | 중복된 코드를 제거 중복된 코드를 사용 |
추상화 | 클래스/메소드/함수에 대해 동일한 수준의 추상화 상세 내용은 하위클래스/메소드/함수에서 구현 |
알고리즘 기법
종류 | 설명 |
분할정복 | 주어진 문제의 입력을 분할하여 문제를 해결하는 방식 |
그리디 | 가능한 해들 중에서 가장 좋은 해를 찾는 방식 (욕심쟁이, 탐욕) |
동적계획 | 작은 부분 문제들을 먼저 해결한 후에 그 해들을 이용하여 보다 큰 부분 문제들을 해결하고, 최종적으로 원래 주어진 문제를 해결하는 방법 |
백트래킹 | 해를 찾는 도중 해가 나올 가망이 없으면 되돌아가서 다시 해를 찾아가는 기법 |
소스코드 품질 분석 도구
구분 | 도구명 | 도구 설명 |
정적 분석 도구 |
pmd | 자바 및 타 언어 소스 코드에 대한 버그, 데드코드 분석 |
cppcheck | C/C++ 코드에 대한 메모리누수, 오버플로우 등 문제 분석 | |
SonarQube | 소스코드 품질 통합플랫폼, 플래그인 확장 가능 | |
checkstyle | 자바 코드에 대한 코딩 표준 준수 검사 도구 | |
코드 복잡도 |
ccm | 다양한 언어의 코드 복잡도 분석 도구 Linux, Max 환경 CLI 형태 지원 |
cobertura | jcoverage 기반의 테스트 커버리지 측정 도구 | |
동적 분석 도구 |
Avalanche | Valgrind 프레임워크 및 STP기반 소프트웨어 에러 및 취약점 동적 분석 도구 |
Valgrind | 자동화된 메모리 및 쓰레드 결함 발견 분석 도구 |
정리하기
1. 테스트 오라클
- 테스트 결과가 참인지 거짓인지를 판단하기 위한 기법
- 유형 : 참(True) 오라클, 샘플링(Sampling) 오라클, 휴리스틱(Heuristic) 오라클,
일관성 검사(Consistent) 오라클
2. 테스트 레벨
- 테스트 레벨은 함께 편성되고 관리되는 테스트 활동으 그룹이다
- 프로젝트에서 책임과 연관되어 있다
- 각각의 테스트 레벨은 서로 독립적이다
3. 테스트 레벨 종류
- 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트
4. 소프트웨어 테스트의 원리
- 테스팅은 결함이 존재함을 밝히는 활동이다
- 완벽한 테스팅은 불가능하다
- 테스팅은 개발 초기에 시작해야 한다
- 결합 집중 (Defect Clustering)
- 살충제 패러독스 (Presticide Paradox)
- 테스팅은 정황(Context)에 의존한다
- 오류-부재의 궤변 (Absence of Errors Fallacy)
5. 소프트웨어 테스트의 유형
- 프로그램 실행 여부 : 정적 테스트, 동적 테스트
- 테스트 기법 : 화이트박스 테스트, 블랙박스 테스트
- 테스트에 대한시각 : 검증(Verification), 확인(Validation)
- 종류 : 형상검사, 알파검사, 베타검사
6. 클린 코드 작성 원칙
- 가독성, 단순성, 의존성, 중복성, 추상화
7. 알고리즘 기법
- 분할정복, 그리디, 동적계획, 백트래킹
8. 소스코드 품질 분석 도구
- 정적 분석 도구 : pmd, cppcheck,SonarQube, checkstyle
- 코드 복잡도 : ccm, cobertura
- 동적 분석 도구 : Avalanche, Valgrind
'정보처리기사 > 2과 소프트웨어 개발' 카테고리의 다른 글
5. 인터페이스 구현 (0) | 2023.09.23 |
---|---|
3. 소프트웨어 패키징 (0) | 2023.09.21 |
2. 통합 구현 (0) | 2023.09.20 |
1. 데이터 입/출력 구현 (0) | 2023.09.19 |