[2, 6장 출제 기준 항목(7문제)]

2, 6장 출제 기준 항목

[2.1 테스트 분류와 테스팅 방법 개요]

1. 테스트 분류

  • 테스트 레벨(컴포넌트, 통합, 시스템, 인수), 테스트 유형(기능, 품질), 테스트 설계 기법 

2. 테스팅 방법

  • 개발 생명 주기, 프로젝트 단계(개발 또는 유지보수) 

[2.2 테스트 분류]

1. 개요

테스트 분류

  • 테스트 레벨 : 컴포넌트 테스트, 통합 테스트, 시스템 테스트, 인수 테스트
  • 테스트 설계 기법 : 정적테스트, 동적 테스트
  • 테스트 유형 : 기능 테스트, 비기능 테스트(성능, 신뢰성,  보안..)

2. 테스트 레벨에 의한 분류

  • 컴포넌트(Component) / 단위(Unit) 테스트 : 시스템을 구성하는 단위 모듈을 테스트 대상으로 하여 개별 단위 모듈을 독립적으로 테스트 한다.
  • 통합(Intergration) 테스트 : 시스템을 구성하는 단위 모듈들이 정확하게 통합되었는지에 초점을 준다. 시스템 내부 구성 모듈과 이들 간의 관계를 정의한 구조 설계 명세서를 바탕으로 테스트가 진행된다.
  • 시스템(System) 테스트 : 전체 시스템을 테스트 대상으로 하여 테스트가 진행된다. 요구사항 명세서에 명시된 방식대로 시스템이 동작하는지 확인하는 데 초점을 둔다.
  • 인수(Acceptance) 테스트 : 시스템 테스트와 마찬가지로 전체 시스템을 하나의 단위로 보고 테스트가 진행된다.
    그러나 시스템 테스트와 달리인수 테스트는 고객/사용자의 관점에서 고객이 기대하는 방식으로 소프트웨어가 동작하는지 확인

*4개의 레벨 테스트는 일반적인 소프트웨어의 개발 단계, 즉 요구분석, 구조설계(아키텍처 설계), 상세 설계와 밀접한 연관이 있다.

V 모델

3. 테스트 유형에 의한 분류

*요구사항 명세서 : 기능 요구사항과 품질 요구 사항을 포함


테스트 유형
1) 기능 테스트(Functional Test) 

  • 기능 요구 사항 측면의 결함 검출 및 충족 여부 확인을 목적
  • 모든 테스트 수준(컴포넌트, 통합, 시스템, 인수 테스트)에서 진행

2) 비기능 테스트 (Non-Functional Test) 

  • 성능, 보안성, 신뢰성 등 품질 요구사항 측면의 결함 검출 및 충족 여부 확인을 목적
  • 일반적으로 시스템 테스트와 인수 테스트 수준에서 진행

*ISO 25010 소프트웨어 품질 모델 : 소프트웨어가 갖춰야 하는 다양한 품질 특성에 관한 표준을 정의 한것

주특성 부특성
기능 적합성 완전성, 정확성, 타당성
사용성 타당성 식별력, 학습성, 운영 용이성, 사용자 오류 보호, 사용자 인터페이스 미학, 접근성
성능 효율성 시간 행동(Time-Behaviour), 자원 활용성, 수용성(Capacity)
호환성 공존성, 상호운영성
신뢰성 성숙성, 가용성, 장애 허용성, 회복 가능성
보안성 기밀성, 무결성, 부인방지, 책임성, 진본성
유지보수성 모듈성, 재사용성, 분석성, 변경 용이성, 테스트 용이성
이식성 적응성, 설치 용이성, 대치 용이성

 

4. 테스트 설계 기법에 따른 분류

1) 적 테스트(Static Test) : 테스트 대상을 실행하지 않는 방식으로 테스트를 수행. 대표적인 방법은 리뷰, 정적 분석이 있다.

  • 리뷰(Review)
    ○ 소프트웨어의 다양한 산출물에 존재하는 결함을 검출하거나 프로젝트의 진행 상황을 점검, 전문가 그룹이 수행
    리뷰를 효과적으로 수행하기 위하여 정해진 절차를 따르는데 순서
       경영진 준비 → 리뷰 계획 → 리뷰 절차 개요 설명 → 작업물 개요 설명 → 개별 준비 → 그룹 검토 → 재작업 → 후속작업
    ○ 정적 테스트 - 리뷰 유형
리뷰 유형 설명
관리 리뷰 프로젝트 진행 상황에 대한 검토를 바탕으로 일정, 인력, 범위 등에 대한 통제 및 의사 결정을 지원
기술 리뷰 정의된 계획 및 명세를 준수하고 있는지에 대한 검토를 수행
인스펙션(Inspection : 점검) 문제(anomaly)를 식별하고 문제에 대한 올바른 해결(Resolution)을 검증
워크쓰루(Walk-Through : 차근차근히 설명해주다) 문제를 식별하고 더 나아가서 대안 조사, 개선 활동, 학습 기회 제공을 수행
감사(Audit : 감사, 심사) 객관적인 표준과 규제에 대한 준수를 독립적으로 평가
  • 정적 분석(Static Analysis)
    산출물(주로 소스 코드)의 구조적 속성을 이용하여 자동화 된 방식으로 도구에 의해 수행
    된다.
리뷰 유형 설명
코딩 표준  MISRA-C, MISRA-C++ 등의 코딩 표준에 대한 준수 여부 검사
복잡도 측정  사이클로매틱 복잡도 등, 프로그램의 복잡도 측정
자료 흐름 분석 프로그램 자료 흐름에 이상(Anomaly) 존재 여부 분석


2) 동적 테스트(Dynamic Test) : 동적 테스트는 테스트 대상을 실행하여 결함을 검출하는 방법, 적절한 입력값, 즉 테스트 케이스를 결정

명세 기반 테스트와 구조 기반 테스트 개념

  • 명세 기반 테스트
    ○ 명세 기반 테스트는 소스 코드를 참고하지 않고 테스트 케이스를 결정
    ○ 동등 분할, 분류 트리 기법, 경계값 분석, 신택스(Syntax)테스트, 조합 테스트, 상태전이 테스트, 인과 그래핑, 결정표 테스트, 시나리오 테스트
  • 구조 기반 테스트
    ○ 구조 기반 테스트는 구현된 소스 코드를 참고해서 테스트 케이스를 결정
    ○ 소프트웨어의 내부 구조(코드, 설계 등)를 기반으로 테스트 케이스를 설계하고 수행
    ○ 문장 테스트, 결정 테스트, 조건 테스트, 결정/조건 테스트, 다중 조건 테스트, 변형 조건/결정 테스트(MCDC), 기본 경로 테스트
  • 경험 기반 테스트
    ○ 기존의 테스트 경험, 테스트 대상이 되는 시스템 및 해당 도메인에 대한 경험 등을 바탕으로 수행하는 방법
    오류 추정(Error Guessing)
        - 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하는 방법
      탐색적 테스트(Exploratory Test)  
        - 테스트, 학습, 설계를 동시에 수행하는 소프트웨어 테스트 방법론
        - 미리 정의된 테스트 계획이나 테스트 케이스 없이, 테스터가 동시에 학습하고, 테스트를 설계하고, 테스트를 실행하면서
         소프트웨어를 탐색적으로 검증하는 방식
        - 문서화 없이 해당 테스트를 바로 수행, 테스터의 지식에 의존애자일 방법

# 오류 추정 기법 예

상황 설명
필수 입력 필수 입력 항목인 경우 값이 입력되지 않는 상황을 테스트 한다.
입력 항목의 길이 입력 항목의 길이에 제약이 있는 경우, 더 작거나 더 긴 항목이 입력되는 상황을 테스트 한다.
입력 항목의 형식 입력 항목에 대한 형식을 위반하는 상황을을 테스트 한다.
입력값의 명시적 제약사항 입력 항목의 값에 대하여 명시적으로 정해진 범위를 위반하는 상황을 테스트한다.
입력값의 묵시적 제약사항 입력 항목의 값에 대하여 명시되지 않았지만 상식적으로 가정되는 범위를 위반하는 상황을 테스트 한다.

[2.4. 테스팅 방법]

1. 리그레션(Regression : 회귀) 테스트

  • 변경 후에 수행되는 테스트로, 소프트웨어에 가해진 변경의도하지 않게 결함을 만들지는 않았는지, 시스템이 기존의 요구사항을 충족하는지 검증하기 위하여 수행
  • 리그레션 테스트 전략, Retest-all 전략, 선택적 리그레션 테스트 전략, 테스트 최소화 전략, 테스트 우선 순위화 전략
  • 소프트웨어가 변경되면 각 레벨 테스트 순서대로(컴포넌트, 통합, 시스템, 인수) 각 레벨 마다 리그레션 테스트틀 수행한다.

2. 소프트웨어 생명 주기 모델과 테스트

1) 순차적 생명 주기 모델

  • 각 개발 단계를 순차적으로 완료한 후에 다음 단계로 넘어가는 모델, 한 단계가 끝나기 전에는 다음 단계를 시작할 수 없다.
  • 폭포수 모델
    구현이 완료된 후에 테스트가 시작
    ○ 장점은 모든 자료가 존재
    ○ 단점은 검출된 결함을 해결하는데 많은 비용과 시간이 소요 
    요구사항 분석 → 설계 구현 테스트 배포 유지보수
  • V모델
      개발 시작과 함께 테스트도 시작
      각 개발 단계에서 발생하는 결함을 검출할 수 있는 테스트 레벨이 존재
      개발 단계와 테스트 단계를 병렬적으로 연결, 각 개발 단계의 결과물이 해당되는 테스트 단계를 통해 검증하는 특징을 가짐
      마치 알파벳 "V"자 모양과 유사하게 생겨서 V모델이라 불림

2) 진화적 개발 모델(Evolutionary Development Model)

  • 한 번에 완벽하게 개발하는 것이 아닌, 여러 번의 반복적인(Iterative) 주기를 거쳐 점진적(Incremental)으로 완성나가는 방식
  • 각 반복 주기마다 이전 버전보다 더 완전한 소프트웨어가 만들어짐
  • 애자일 개발 방법론(Agile Development Methodology)
      진화적 개발 모델처럼 반복적이고 점진적인 개발 접근 방식.
      애자일 방법론은 일반적으로 테스트 주도 개발(Test-Driven Development, TDD)을 적용
    TDD와 더불어 애자일 개발에서 중요한 실천 규칙인 지속적인 통합(CI, Continuous Intergration)이 있다.

*테스트 주도 개발(Test-Driven Development, TDD) : 프로그램에 대한 테스트 케이스를 먼저 작성하고, 이 테스트 케이스를 통과하는 실제 프로그램의 코드를 나중에 작성하는 방식

3. 위험 기반 테스트(Risk-Based Test) 

  • 위험 기반 테스트는 소프트웨어 테스트 전략 및 활동잠재적인 위험의 가능성과 심각도에 따라 우선순위를 결정하고 집중하는 접근 방식. 즉, 결함이 발생했을 때 비즈니스에 더 큰 손실을 초래할 가능성이 높은 영역을 먼저 그리고 더 집중적으로 테스트하는 것
  • 피처에 대한 위험 분석을 바탕으로 테스트에 대한 계획과 설계 그리고 실행 등의 활동을 수행

4. 모델 기반 테스트(Model-Based Test) 

  • 모델 기반 테스트는 소프트웨어의 예상되는 동작이나 구조를 추상화한 모델을 기반으로 자동으로 테스트 케이스를 생성하고 실행하는 테스트 방법론.
  • 사람이 직접 테스트 케이스를 설계하는 대신, 모델을 활용하여 효율적이고 체계적인 테스트를 수행하는 것이 핵심
  • 테스트 계획에서 종료까지 대부분의 활동을 자동화 할 수 있음
  • 다양한 유형의 문제를 이른 시점에 식별하는 방법으로 개발 단계 산출물의 결함을 검출할 수 있음
  • 장애가 발생했을 때 많은 비용이 유발되는 자동차, 의료등 안전 필수(Safety Critical) 소프트웨어대상으로 수행됨
  • 의사 결정표, UML 상태 다이어그램, UML 액티비티 다이어그램을 비롯한 정형적 표현법 사용

+ Recent posts