정보처리기사/part02.소프트웨어 개발

4. 애플리케이션 테스트 관리

kyunge_ev 2024. 6. 19. 22:35

✅ 애플리케이션 테스트 케이스 설계

1. 테스트 케이스(=시험 사례)

(1) 테스트 케이스의 정의

  • 소프트웨어가 목표하는 보장성을 만족할 수 있도록 최적의 테스트 케이스로 가능한 많은 결함을 발견할 수 있어야한다.

(2) 테스트 케이스 작성 절차

단계 내용
1단계 : 참조 문서 수집 시험 계획서에 명시된 테스트 케이스 작성 지침과 수준을 고려하여 테스트 설계에 필요한 분석/설계 문서를 수집
2단계 : 테스트 케이스 작성 테스트 설계 기법을 이용하여 테스트 케이스를 작성
3단계 : 내부 검토 아키텍처, 관리자, 기획자, 개발자, 테스터 등이 작성된 테스트 케이스의 적정성을 검토
4단계 : 요구사항 대비 커버리지 분석 테스트 케이스가 어느 정도 요구사항을 반영하는가에 대한 분석으로 테스트 가능한 요구사항이 모두 테스트 케이스에 반영되었는지 확인
5단계 : 승인 작성된 테스트 케이스를 고객, 기획자, 관리자 등의 승인을 획득한다.

(3) 테스트 케이스 구성 항목

  • 식별자 번호
  • 사전(테스트) 조건
  • 테스트 데이터
  • 수행 절차
  • 예상 결과
💡 테스트 데이터

- 테스트 케이스 자동 생성 도구를 이용하여 테스트 데이터를 찾아내는 방법
- 입력 도메인 분석
- 랜덤(Random) 테스트
- 자료 흐름도

2. 테스트 레벨

(1) 모듈 테스트(단위 테스트, Unit Test)

  • 코딩이 끝난 후 설계의 최소 단위인 모듈에 초점을 두고 검사하는 단계
  • 화이트박스 테스트 기법이 적용된다.
  • 테스트 내용
    • 모듈 인터페이스 테스트
    • 자료구조 테스트
    • 실행 경로 테스트
    • 오류 처리 테스트
    • 경계 처리 테스트

(2) 통합 테스트(Integration Test)

  • 단위 테스트가 끝난 모듈들을 하나로 결합하여 시스템으로 완성하는 과정에서의 테스트
  • 통합 테스트는 시스템을 구성하는 여러 모듈을 어떤 순서로 결합하여 테스트할 것이냐에 따라 동시식(Big-Bang), 하향식(Top-down), 상향식(Bottom-up), 연쇄식(Threads)등이 있다.

(3) 시스템 테스트(System Test)

  • 모든 모듈들은 하나의 시스템으로 작동하게 된다.
  • 사용자의 모든 요구를 하나의 시스템으로서 완벽하게 수항하기 위해서는 다음과 같은 다양한 테스트들이 필요하다.
    • 외부 기능 테스트(Funtion Test)
    • 내부 기능 테스트(Facility Test)
    • 부피 테스트(Volume Test)
    • 스트레스 테스트(Stress Test) = 민감성 테스트(Sensitivity Test)
    • 성능 테스트(Perfomance Test)
    • 호환성 테스트(Compatibility Test)
    • 신뢰성 테스트(Reliability Test)
    • 복구 테스트(Recovery Test)
    • 보수 용이성 테스트(Serviceability Test)

(4) 인수 테스트(Acceptance Testing, 검증 테스트)

  • 사용자측 관점에서 소프트웨어가 요구를 충족시키는가를 평가한다.
  • 알파 테스트
    • 개발자의 장소에서 사용자가 개발자 앞에서 행하는 기법
  • 베타 테스트
    • 발견된 오류와 사용상의 문제점을 기록하여 추후에 반영될 수 있도록 개발 조직에게 보고해주는 형식을 취한다.

3. 테스트 시나리오

  • 테스트 시나리오는 테스트할 수 있는 모든 기능을 말하는 것으로, 테스트 조건 또는 테스트 가능성이라고 한다.
  • 여러 개의 테스트 케이스의 집합을 수행하기 위한 동작 순서를 기술한 문서를 말하는 것으로, 테스트 절차 명세라고 할 수 있다.
💡 테스트 관련 법칙

- Pareto의 법칙 : 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 일어난다.
- Boehm의 법칙 : 초기 개발 단계에서 결함을 발견하면 나중 단계에서 발견하는 것보다 시간과 비용을 절약할 수 있다.
- Pesticide Paradox(살충제 패러독스) : 동일한 테스트 케이스를 사용하여 반복적으로 테스트를 수행하면 새로운 버그를 찾지 못한다는 테스트 원칙

✅ 애플리케이션 통합 테스트

1. 결함 관리 도구

(1) 결함 관리

  • 테스트 수행 후 발생한 결함들이 다시 발생되는 것을 방지하기 위하여 결함을 추적하고, 관리하는 활동을 결함 관리라고 한다.

(2) 관리 시스템

  1. 결함 관리 시스템(Defect Management System)
  2. 버그 추적 시스템(Bug Tracking System)
  3. 이슈 관리 시스템(Issue Tracking System)

(3) 결함 관리 상용 도구

  1. HP QC(Quality Center)
  2. IBM Clear Quest
  3. JIRA

2. 테스트 자동화 도구

  • 테스트 자동화 도구는 테스트에 포함되는 여러 과정들을 자동적으로 지원하여 생산성 및 일관성을 향상시킬 수 있다.

(2) 티스트 자동화 도구의 유형

  1. 정적 분석 도구 : 프로그램을 실행하지 않고 분석하는 도구 → 인스펙션(코드리뷰)
  2. 테스트 실행 도구
  3. 성능 테스트 도구
  4. 테스트 통제 도구
  5. 테스트 하네스 도구 : 애플리케이션의 컴포넌트를 테스트하는 환경의 일부분을 테스트 하네스라고 하며, 테스트를 지원하기 위해 만들어진 코드와 데이터를 사용하는 도구 → stub, driver 등

(3) 테스트 자동화 도구

  1. QTP
  2. Rational Robot
  3. Selenium : 오픈 소스 웹 자동화 툴이며, 모든 종류의 웹 브라우저들을 지원한다. → 인터페이스 구현 검증 도구

3. 통합 테스트

(1) 통합 테스트의 개요

  • 단위 검사가 끝난 모듈들을 하나로 결합하여 시스템으로 완성하는 과정에서의 테스트

(2) 동시식 통합(Big-Bang Approach, 비점진적 통합, 차분 통합 검사)

  • 단계적으로 통합하는 절차 없이 모든 모듈이 한꺼번에 결합되어 하나로 테스트한다.
  • 혼란스럽고, 결함의 원인 발견이 어려우며 통합기간이 훨씬 많이 소요되므로 바람직하지 않다. → 좋다고 표현되는건 오답!

(3) 하향식 통합

  1. 하향식 통합의 특징
    1. 주 프로그램으로부터 그 모듈이 호출하는 다음 레벨의 모듈을 테스트하고, 점차적으로 하위 모듈로 이동하는 방법 → 전체에서 세부로
    2. 검사 제어 소프트웨어 : 스텁(Stub) → 모듈 간의 통합 테스트를 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈
    3. 드라이버는 필요치 않고 통합이 시도되지 않은 곳에 스텁이 필요하다. 통합이 진해되면서 스텁은 실제 모듈로 교체된다.
    4. 통합 방식 : 깊이 우선 통합, 너비 우선 통합
  2. 하향식 통합의 순서
    1. 주 모듈을 드라이버로 사용하고, 주 모듈의 하위 모듈들을 스텁으로 대신한다.
    2. 깊이 우선 또는 너비 우선 등의 통합 방식에 따라 하위 스텁들을 실제 모듈과 대체한다.
    3. 각 모듈이 통합될 때마다 테스트를 실시한다.
    4. 테스트를 통과할 때마다 또 다른 스텁이 실제 모듈로 대체된다.
    5. 새로운 오류가 발생하지 않음을 보장하기 위해 회귀 테스트를 실시한다.
  3. 하향식 통합의 장단점
    1. 장점
      1. 하위 모듈 시험이 끝난 상위 모듈을 이용하므로 테스트 환경이 실제 가동 환경과 유사하다.
      2. 주요 기능을 조기에 시험할 수 있다.
      3. 처음부터 독립된 소프트웨어 구조이다.
    2. 단점
      1. 병행 작업이 어렵고, 스텁이 필요하다

(4) 상향식 통합

  1. 상향식 통합의 특징
    1. 시스템 하위 레벨의 모듈로부터 점진적으로 상위 모듈로 통합하면서 테스트하는 기법이다.
    2. 검사 제어 소프트웨어 : 드라이버(Driver) - 테스트 사례를 입력받고, 테스트를 위해 받은 자료를 모듈로 넘기고, 관련된 결과를 출력하는 메인 프로그램이다.
    3. 스텁은 필요치 않고 드라이버가 필요하다.
  2. 상향식 통합의 순서
    1. 하위 모듈은 소프트웨어의 부수적 기능을 수행하는 클러스터(Cluster)로 조합한다.
    2. 각 클러스터의 테스트를 위한 시험 사례 입출력을 조정하도록 드라이버를 개발한다.
    3. 각 클러스터를 테스트한다.
    4. 드라이버를 제거하고 클러스터는 위로 이동하며, 소프트웨어 구조를 상향식으로 만들어간다.
    5. 최종 드라이버 대신 주프로그램을 대체시키고, 전체적인 소프트웨어 구조를 완성한다.
  3. 상향식 통합의 장단점
    1. 장점
      1. 초기 단계부터 병행 작업이 가능하고, 불필요한 개발(스텁)을 피할 수 있다.
      2. 철저한 모듈 단위의 시험이 가능하다
    2. 단점
      1. 인터페이스의 시험이 가정에 의해 이루어지며, 마지막 단계까지 독립된 소프트웨어 형태를 갖지 못한다.

(5) 연쇄식(Threads) 통합

  1. 연쇄식 통합의 특징
  2. 연쇄식 통합의 기법
    1. 샌드위치형 통합
    2. 샌드위치 테스트(Sandwich Test)
    3. 회귀 테스트(Regression Testing)
      1. 변경된 소프트웨어 컴포넌트에 초점을 맞춘 테스트
        1. 새로운 결함 발생의 가능성에 대비하여 이미 실시했던 테스트 사례들의 전부 혹은 일부를 재실시하여 테스트하는 것
        2. 유지보수에 많이사용(유지보수용 시험)

✅ 애플리케이션 성능 개선

1. 소스 코드 품질 분석 도구

(2) 정적 분석 도구

  • 소스코드의 실행 없이 코드 자체만으로 코드를 분석하는 도구
  • 종류 : cppcheck, pmd, checkstyle 등

(3) 동적 분석 도구

  • 프로그램을 실행하여 코드를 분석하는 도구
  • 종류 : Valgrind, Avalanche, valMeter 등

2. 코드 최적화

(1) 코드 최적화의 개요

  • 코드 최적화는 동등한 의미를 가지면서 실행 시간이나 메모리를 줄이는 것