소프트웨어공학_0520_소프트웨어 테스트

지원·2025년 5월 27일
0

소프트웨어공학

목록 보기
10/11
post-thumbnail

소프트웨어 테스트

소프트웨어 개발의 인간 중심의 활동이며 지적 활동
오류가 발생하기 쉬운 활동

결합을 낮추는 방법
방지

  • 인스펙션, 정적 분석

식별과 제거

  • 테스트, 디버깅

시험할 소프트웨어에 테스트 케이스를 주어 실행시킨 후 시스템 동작이 예상대로 실행되는지 확인하는 것

접근법

  • 블랙박스 테스트
    구현을 고려하지않고 테스트
  • 화이트박스 테스트
    구현 방식ㅇ르 분석하여 테스트

검증과 확인

검증(verification)

  • 제품을 올바르게 구축하고 있는지
  • 이전 단계 결과물과 현재 단계 결과물이 동일한지 확인하는 활동

확인(validation)

  • 올바른 제품을 만들고 있는지
  • 산출물이 사용자의 요구사항을 충족하는지 확인하는 활동

활동 유형

  • 정적 활동
    소프트웨어를 실행하지않고 정적인 상태로 수행: 리뷰, 코드 리딩, 프로그램 증명
  • 동적 활동
    코드를 실행하면서 그 과정을 상펴보는 것: 소프트웨어 테스트

소프트웨어 테스트 용어 정의

Reliability(신뢰도)

관찰되었던 시스템 동작과 명세에 기술된 동작이 일치하는 정도

Mistake/Human Error

잘못된 결과를 가져오는 인간의 행위를 의미하며 주어진 정보를 잘못 이해할 때 발생

Fault(결함)

에러를 발생하게 하는 프로그램 부분
오류를 일으키는 기계적 또는 알고리즘적 원인

commission
잘못된 정보를 반영하는 경우

omission
올바른 정보를 빠뜨리는 경우

알고리즘 결함
제어 흐름과 관련된 결함이나 대상이 되는 프로그램의 외부와 통신과 관련된 인터페이스 결함 및 잘못된 자료 구조의 사용으로 인한 결함

Error(에러)

프로그램의 올바르지 않은 내부 상태
의도한 동작에서 거리가 멀어지는 상태
계산되거나 측정된 값과 기대 값 사이의 차이

Failure(오작동)

프로그램이 명세와는 다르게 동작하는 것이 외부에서 관찰되는 상황

오작동은 결함에 의해 발생하지만 결함이 있다고 해서 반드시 오작동이 발생하지는 않음

프로그램의 실행 결과와 기대 결과와의 관찰가능한 차이

테스트 관련 용어

- 테스트 케이스
고장을 일으키고 결함을 발견할 목적으로 컴포넌트를 검사하기 위한 입력과 예상 결과의 집합

- 테스트 스터브(test stub)
테스트될 컴포넌트와 호출하는 컴포넌트가 부분적으로 구현된 것
상위 모듈을 테스트하기 위해 하위 모듈 역할을 대체하는 코드
함수 A가 함수B를 호출하는데 B가 아직 구현되지 않았을 때 B를 대신하는 간단한 테스트용 Stub B를 만들어서 A를 테스트

  • 호출 받는 쪽(하위 모듈)개발 되지 않았을 때 만들어서 대신 수행하는 것

- 테스트 드라이버
테스트될 컴포넌트를 호출하는 컴포넌트의 부분적 구현
하위 모듈을 테스트하기 위해 상위 모듈 역할을 대체하는 코드

  • 호출 하는 쪽(상위 모듈)이 만들어지지 않았을 때 대신 테스트 수행을 위해 만드는 것이 드라이버

- 오류 수정

  • 컴포넌트에 대한 변경

오류

오류가 있음을 보여주려는 작업

결함 확인을 위한 테스트 데이터 조건

도달성 조건
프로그램의 결함이 있는 부분을 실행하여야 함

감염 조건
결함 부분을 실행하여 에러를 발생시켜야 함

에러 전달 조건
발생된 에러가 관찰 가능한 지점까지 전달되어야 함

테스트 원리

테스트는 오류를 발견하려고 프로그램을 실행시키는 것
구현과 관계없는 독립된 팀에 의하여 수행되어야 함

소프트웨어 테스트 한계

완전한 테스트 Exhaustive Test
완전하게 테스트한다는 의미는 모든 입력 조건 조합에 대하여 테스트

테스트 오라클

프로그램의 실제 실행결과가 올바른 결과인지 판단하는 매커니즘
테스트 오라클은 보통 사람이 담당

테스트의 실행결과가 원하는 결과인지 판단하는 것은
수작업으로 수행한다는 의미
=> 테스트 오라클은 자동으로 생성 불가능

오라클 생성을 위한 소스

  • 테스터의 주관적인 판단
  • 기존 유사 프로그램의 실행 결과 활용
  • 회귀 테스트에서 사용된 테스트 결과 활용
    수정에 대한 테스트인 경우

오라클 종류

True oracle
모든 입력들에 대해 원하는 결과들을 생성하여 발생된 오류를 놓치지 않고 검출할 수 있는 오라클

Sampling oracle
특정 몇몇 입력 값들에 대해서만 원하는 결과를 제공해주는 오라클

Heuristic oracle
특정 몇몇 입력 값들에 대해서는 샘플링 오라클처럼 올바른 결과를 제공하고 나머지 입력값들에 대해서는 휴리스틱으로 처리하는 오라클

Consistent oracle
수정되기 전의 프로그램의 실행결과와 수정된 후의 프로그램의 실행결과를 비교하는 역할을 담당하는 오라클

테스트 작업 과정

  • 테스트 방법 결정
  • 테스트 케이스 개발
  • 테스트의 예상되는 올바른 결과 작성
  • 테스트 케이스로 실행시킴

단위 테스트

모듈이 정확히 동작하는 지 테스트하는 것

  • 모듈 내부를 구성하는 프로그램에 존재할 수 있는 결함을 찾아내는 것

통합 테스트

단위 테스트를 통과한 모듈들이 통합되어 실행될 때 발생할 수 있는 문제를 검사하기 위한 활동

  • 모듈 간의 상호작용, 인터페이스의 일관성에 관심

- 비점증적 통합
모든 모듈을 한 번에 통합하여 테스트를 수행하는 방식
잠점
테스트 실행을 한번에 진행할 수 있음
단점
결함이 발견된 경우, 결함의 원인이 무엇인지, 어떤 모듈 간의 인터페이스에서 문제가 발생하였는지 식별하지 어려움

  • 점증적 통합
    단위 모듈을 한 번에 하나만 통합하여 테스트를 수행하는 방식
    장점
    인터페이스 간에 발생하는 오류의 검출이 매우 쉬움
    단점
    통합되지않은 모듈에 대한 스텁 개발에 대한 노력 필요, 오래 걸림

모듈통합 방법

  • 상향식 통합
    최하위의 단위 함수를 기준으로 상위 호출 모듈을 단계적으로 통합하면서 진행하는 방식

  • 스레드 기반 통합
    전체 모듈에서 제어의 중심에 있는 스레드를 기반으로 주변에 있는 모듈을 하나씩 통합하면서 테스트를 수행하는 방식

  • 샌드위치 통합
    하향식 통합과 상향식 통합이 동시에 진행되는 방식, 대형 프로그램 테스트에 적합

  • 핵심 모듈 기반 통합
    프로그램 전체에서 가장 중요한 모듈을 먼저 살펴보겠다는 의도가 담긴 방법

시스템 테스트

개발된 시스템을 시스템이 사용될 하드웨어 플랫폼에 설치한 뒤 수행하는 활동,
전체 시스템을 대상으로 테스트 케이스를 생성하여 테스트 진행

인수 테스트(수락 테스트)

개발 소프트웨어 시스템을 사용자에게 전달하기 전에 수행하는 활동,
구축된 시스템에 각 요구사항이 올바르게 구현되었는지 점검하는 데모 형식으로 테스트 진행

회귀(regression) 테스트

개발된 소프트웨어 혹은 운영 중인 소프트웨어에 대해 기능을 추가하거나 결함을 제거한 후 해당 소프트웨어 테스트하는 활동

전수 회귀(Reset All) 테스트
수정 변경으로 발생 가능성이 있는 모든 경우에 대해 테스트
테스트 비용이 더 들어갈 수 있으나, 테스트 커버리지가 높아짐

우선순위 기반 회귀 테스트
변경 추가된 부분을 포함하여 소프트웨어를 구성하는 핵심 기능 위주로 우선순위를 정하여 테스트 수행

중요도와 결함 위험 가능성을 기반으로 테스트를 수행하기 때문에 비용 효과적임
낮은 우선순위에 대한 변경 영향을 고려하지 못하는 상황이 발생 가능

테스트 케이스

결함을 발견할 목적으로 준비한 입력 데이터와 예상 결과의 집합

속성

  • 이름, 테스트 대상, 조건, 입력, 오라클, 로그

테스트 슈트

  • 테스트 케이스의 모임

테스트 절차

  • 테스트 케이스를 어떤 순서로 수행시킬 것인지 차례로 적은 것

테스트 스탭

  • 테스트 케이스를 실행하기 위한 최소 단위

오류 수정

결함을 고치기 위해 컴포넌트 변경

버그 트래킹

  • 고장, 오류, 결함, 오류 수정 작업의 기록
  • 형상관리 작업의 일부

리그레션 테스트

  • 수정 후 영향도 평가 및 사이드 이펙트 테스트

문서화

  • 변경 이유와 관계를 기록

0개의 댓글