Just do IT
article thumbnail

테스트 오라클

   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 

 

5. 인터페이스 구현

'정보처리기사 > 2과 소프트웨어 개발' 카테고리의 다른 글

5. 인터페이스 구현  (0) 2023.09.23
3. 소프트웨어 패키징  (0) 2023.09.21
2. 통합 구현  (0) 2023.09.20
1. 데이터 입/출력 구현  (0) 2023.09.19
profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!