본문 바로가기
컴퓨터과학/소프트웨어공학

[소프트웨어공학] 검증과 확인 - 테스팅(화이트박스/블랙박스/기본경로)

by 윤호 2021. 6. 2.

Github로 보기


검증과 확인 프로세스

검증과 확인

  • 검증
    • 올바른 제품을 생성하고 있는가 -> 요구사항 명세서 기반 판단
  • 확인
    • 제품이 올바르게 생성되고 있는가
    • 고객이 의도한 요구사항에 따라 구현되었는지(명시되지 않은 것도 포함)
  • 검증과 확인 작업은 실제로 구분하기 어려운 경우가 존재

방법과 종류

  • 정적인 방벙
    • 소프트웨어 개발 중에 생성되는 모든 산출물들에 대해 적용 가능
      • 검토 - 코드리뷰 등
      • (인스펙션)
      • (워크스루)
  • 동적인 방법
    • 소프트웨어 실행하여 결함을 찾아냄
    • 대표적인 방법: 테스팅

Peer review란

동료 검토 절차

  • 공지와 배포
  • 준비
    • 검토자는 에러 체크리스트로 산출물을 검토
  • 검토
    • 작성자, 진행자, 검토자들이 모여 산출물 검토
  • 검토 보고서 작성
  • 후속 조치

소프트웨어 테스팅

결함을 지칭하는 다양한 용어

  • error : 결함의 원인
  • defect, fault, bug : 실패 또는 문제의 원인
  • failure, problem : 결함이 있는 부분이 실행될 때 발생하는 현상

테스트 케이스

목적

  • 테스터가 테스팅을 체계적으로 할 수 있도록
  • 개발자가 테스트 케이스 결과를 통해 디버깅을 함

그림1.png

테스팅 종류

  • 블랙박스 테스팅
    • 요구사항 명세서나 설계서로부터 테스트 케이스 추출
  • 화이트박스 테스팅
    • 내부구조(코드)를 기반으로 테스트 케이스 추출

블랙박스 테스팅

신택스 테스팅

  • 입력을 적합과 부적합으로 분류한 뒤, 예상되는 결과를 검증하는 기법

동등 분할

  • 입력이 범위가 정해져 있을 경우, 각 범위의 대표값(중간, 경계, 벗어나는 값 등)을 이용하여 테스팅

의사결정 테이블

  • 입/출력이 true, false로 결정될 수 있는 경우 모든 경우의 수를 확인해 볼 수 있는 방법

화이트박스 테스팅

특징

  • 테스트의 목적과 조건에 맞게 적절한 방법 선택
  • 각 테스팅 방버베 따라 복잡도, 소요되는 시간(비용)이 다름

문장 커버리지

  • 프로그램을 구성하는 문장들이 최소한 한번은 실행될 수 있는 입력 값을 테스트 케이스로 선정함
  • image-20210527100952235.png

분기 커버리지

  • 프로그램에 있는 분기를 최소한 한번은 실행하게 하는 테스팅 방법
  • and or에서 모든 조건을 테스트 해볼 수 없음

조건 커버리지

  • and(&&), or(||) 등의 조건을 가진 분기문에서 각 조건식이 참 한 번, 거짓 한 번을 갖도록 테스트 케이스를 만듬

범위: 문장<분기<조건

기본경로 테스팅

  • 프로그램의 제어구조를 플로우 그래프로 표현
  • 순환복잡도를 통해 독립적인 경로의 수를 찾아 테스트 케이스를 추출

테스트케이스 추출 단계

  1. 프로우 그래프를 그린다

  2. image-20210602110710589.png

  3. 순환복잡도 계산

  4. image-20210602110758581.png

  5. 독립적인 경로 정의

  6. 정의된 각 경로의 테스트케이스 작성

테스팅 단계

소프트웨어 개발 단계와 테스팅

image-20210602111623158.png

단위 테스팅(Unit Testing)

  • 각 모듈이 완성되었을 경우 개별적인 모듈 테스팅
  • 해당 모듈의 개발자가 테스팅
  • Stub: 테스팅 대상 모듈에서 호출하는 모듈
  • Test Driver: 테스팅 대상 모듈을 호출하는 환경

통합 테스팅(Integrating Testing)

  • 모듈을 통합한 단계에서 수행되는 테스팅
  • 종류
    • 빅뱅 기법
      • 모듈을 한꺼번에 통합하여 테스팅
      • but, 오류가 발생했을 때 어디에서 났는지 찾기 어려움
    • Top-Down 기법
      • 가장 상위 모듈부터 하위 모듈로 점진적으로 통합
      • 하위 모듈에 대한 스텁이 필요
    • Bottom-Up 기법
      • 하위 모듈 부터 점진적으로 통합
      • 상위 모듈에 대한 테스트 드라이버가 필요

시스템 테스팅(System Testing)

  • 고객에게 시스템을 전달하기 전, 시스템을 개발한 조직이 테스팅
  • 테스팅 대상
    • 요구사항 명세서를 기반으로 사용자의 기능 요구사항
    • 보안, 성능, 신뢰성 등의 비기능 요구사항

인수 테스팅(Acceptance Testing)

  • 시스템이 사용자에게 인수되기 전, 사용자에 의해 실시되는 테스팅

reference

  • 상명대학교 한종대 교수님

댓글