- 용어 - 

인수 테스팅 - 시스템이 사용자의 필요 및 요구사항, 비즈니스 프로세스 측면에서 인수 조건을 만족하는지 확인하고 사용자, 고객, 기타 권한을 지닌 사람이 시스템의 인수 여부를 결정하기 위해 수행하는 공식 테스팅 

테스트 인프라 - 테스트 환경, 테스트 도구, 사무환경 및 절차로 구성된 테스트를 수행하는 데 필요한 조직 산출물

2.1 소프트웨어 개발 수명주기 모델

 

2.1.1 소프트웨어 개발과 소프트웨어 테스팅

 모든 소프트웨어 개발 수명주기 모델에 적용하기 좋은 테스팅의 특성

  • 모든 개발 활동은 그에 사응하는 테스트 활동이 있다.
  • 각 테스트 레벨은 그 레벨에 맞는 구체적인 목적을 가진다.
  • 주어진 테스트 레벨에 맞는 테스트 분석과 설계는 상응하는 개발 활동이 이루어지고 있는 동안 시작해야 한다.
  • 테스터가 요구사항과 설계의 정의와 개선을 위한 대화에 참여하고, 작업 산출물(ex 요구사항, 설계 등)의 초안이 나오는 즉시 리뷰에 참여한다.

어떤 소프트웨어 개발 수명주기 모델을 선택하더라도 테스팅을 초기에 시작하면 시간과 비용을 절약할 수 있다는 테스트 원리에 따라, 테스트 활동은 수명주기 초반에 시작해야 한다.        

이 실라버스에서 대표적인 소프트웨어 개발 수명주기 모델

  • 순차적 개발 모델 - 개발 프로세스의 모든 단계는 이전 단계가 완료될 때 시작돼야 함. 폭포수 모델(순차적 - 요구사항 분석 , 설계, 코딩, 테스팅) ,V-모델 - 각 개발 단계에 테스트 레벨을 부여함. 각 테스트 레벨의 테스트 실행이 순차적으로 이루어져 있음.
  • 반복적 개발 모델 - 기능 집합을 종종 고정된 기간의 일련의 주기 안에서 같이 명시, 설계, 구축, 테스트할 때 발생. 반복 주기에는 전체 프로젝트 범위에 대한 변경이나 기존 반복주기 동안 개발한 기능에 대한 수정 포함.
  • 점진적 개발 모델 - 요구사항 정의, 시스템의 설계, 구축, 테스팅을 조각으로 나눠서 진행. 소프트웨어 기능은 점진적으로 늘어남.

반복적 개발 모델 대표적인 예

  • 래셔널 통합 프로세스
  • 스크럼
  • 칸반
  • 나선형

*2.2 테스트 레벨 *

 테스트 레벨이란 함께 분류되고 관리되는 테스트 활동의 집합을 지침.

 실라버스에서 다루고 있는 테스트 레벨이며 구체적인 목적/ 테스트 케이스를 도출하기 위해 참고하는 테스트 베이시스/ 테스트 대상/ 일반적인 결함과 장애/ 구체적인 접근법 -> 같은 특성을 기준으로 분류. 

  • 컴포넌트 테스팅(유닛)
  • 통합 테스팅
  • 시스템 테스팅
  • 인수 테스팅

2.2.1 컴포넌트 테스팅

컴포넌트 테스팅의 목적 - 개별적으로 테스트할 수 있는 컴포넌트에 초점 

  • 리스크 완화
  • 컴포넌트의 기능과 비기능 동작이 설계 및 명세와 일치하는지 여부 판단
  • 컴포넌트 품질 수준에 대한 자신감 획득
  • 컴포넌트에 존재하는 결함 발견
  • 다음 단계로의 결함 전이 방지

테스트 베이시스 -컴포넌트 테스팅의 테스트 베이시스로 사용할 수 있는 대표적인 작업 산출물 

  • 상세 설계
  • 코드
  • 데이터 모델
  • 컴포넌트 명세

테스트 대상 

  • 컴포넌트, 단위, 모듈
  • 코드 및 데이터 구조
  • 클래스
  • 데이터베이스 모듈

* 대표적인 결함과 장애

  • 잘못된 기능(설계 명세의 설명과 다름)
  • 데이터 흐름 문제
  • 잘못된 코드 및 논리

2.2.2 통합 테스팅

통합 테스팅의 목적 - 컴포넌트나 시스템 간의 상호작용에 초점을 맞춰서 진행한다.

  • 리스크 완화
  • 인터페이스의 기능과 비기능 동작이 설계 및 명세와 일치하는지 여부 판단
  • 인터페이스 품질 수준에 대한 자신감 획득
  • 결함 발견
  • 다음 단계로의 결함 전이 방지                                                                                                           

통합 테스팅 - 컴포넌트 통합 테스팅 , 시스템 통합 테스팅

  • 컴포넌트 통합 테스팅 - 통합된 컴포넌트 간의 상호운용성과 인터페이스에 초점
  • 시스템 통합 테스팅 - 시스템, 패키지, 마이로 서비스 간의 상호운용성과 인터페이스에 초점

테스트 베이시스

  • 소프트웨어 및 시스템 설계
  • 시퀀스 다이어그램
  • 인터페이스 및 통신 프로토콜 명세
  • 유스 케이스
  • 컴포넌트나 시스템 레벨의 아키텍처
  • 워크플로우
  • 외부 인터페이스 정의서

테스트 대상

  • 서브시스템
  • 데이터베이스
  • 인프라
  • 인터페이스
  • APls
  • 마이크로 서비스

일반적인 결함과 장애

- 컴포넌트 통합 테스팅

  • 잘못된 데이터, 누락된 데이터, 잘못된 데이터 인코딩
  • 잘못된 인터페이스 콜 순서나 타이밍
  • 인터페이스 불일치 
  • 컴포넌트 간의 통신 장애
  • 컴포넌트 간의 통신 실패 처리 누락 및 오류
  • 컴포넌트 간 주고받는 데이터의 의미, 단위, 경계에 대한 잘못된 가정

- 시스템 통합 테스팅

  • 시스템 간의 일관적이지 않은 메시지 구조
  • 잘못된 데이터, 누락된 데이터, 잘못된 데이터 인코딩
  • 인터페이스 불일치
  • 시스템 간의 통신 장애
  • 시스템 간의 통신  실패 처리 누락 및 오류
  • 시스템 간 주고받은 데이터의 의미, 단위, 경계에 대한 잘못된 가정
  • 필수 보안 규정 준수 실패

2.2.3 시스템 테스팅

시스템 테스팅 목적 - 전체 시스템 또는 제품 동작이나 능력에 관심을 가지며, 시스템이 수행할 엔드-투-엔드 작업과 그런 작업을 수행할 때 나타나는 비기능 동작을 고려하는 경우가 많음.

  • 리스크 완화
  • 시스템의 기능/비기능 동작이 설계 및 명시된 대로 이루어지는 검증
  • 완성된 시스템이 기대한 대로 동작하는지 확인
  • 전체 시스템 품질에 대한 자신감 획득
  • 결함 발견
  • 결함이 상위 테스트 레벨이나 생산 단계로의 전이 방지

테스트 베이시스

  • 시스템 및 소프트웨어 요구사항 명세)(기능/비기능)
  • 리스크 분석 보고서
  • 유스케이스
  • 에픽과 사용자 스토리
  • 시스템 동작 모델
  • 상태 다이어그램
  • 시스템 및 사용자 메뉴얼

테스트 대상

  • 애플리케이션
  • 하드웨어/소프트웨어 시스템
  • 운영 시스템
  • 테스트 대상 시스템
  • 시스템 설정과 설정 데이터

결함과 장애

  • 잘못된 연산
  • 시스템의 잘못되거나 예상치 못한 기능/비기능 동작
  • 시스템 내 잘못된 제어 및 데이터 흐름
  • 엔드-투-엔드 기능 작업 수행 실패
  • 시스템 환경에서 시스템의 정상 동작 실패
  • 시스템 및 사용자 메뉴얼대로의 시스템 동작 실패

2.2.4 인수 테스팅

인수 테스팅의 목적 - 시스템 테스팅과 마찬가지로 인수 테스팅도 전체 시스템 또는 제품의 동작이나 능력에 초점을 두고 진하는 경우 

  • 전체 시스템의 품질에 대한 자신감 획득
  • 완성된 시스템이 기대한 대로 동작하는지 확인
  • 시스템의 기능/비기능 동작이 명세대로 동작하는지 검증

인수 테스팅 - 사용자 인수 테스팅/ 운영 인수 테스팅/ 계약 및 규제 인수 테스팅/ 알파 및 베타 테스팅

 

사용자 인수 테스팅 - 일반적으로 실제 또는 시뮬레이션된 운영 환경에서 예정된 사용자가 사용하기에 얼마나 적합한지 확인하는데 관심을 둔다.

 

운영 인수 테스팅 - 운영자 또는 시스템 관리 직원에 의해 수행되는 시스템 인수 테스팅(시뮬레이션된) 생산 환경에서 이루어지는 경우가 많다. 가장 중요한 목적은 운영자 또는 시스템 관리자가 비록 예외적이고 어려운 조건에서라도 운영 환경에서 사용자를 위해 시스템을 정상적으로 유지할 수 있다는 자신감을 얻는 것이다. 테스트는 운영 측면에 집중돼 있으며, 다음을 포함할 수 있다.

  • 백업 및 복원 테스팅
  • 설치, 삭제, 업그레이드
  • 긴급 복구
  • 사용자 관리
  • 유지보수 작업
  • 데이터 로딩 및 이관 작업
  • 보안 취약점 확인
  • 성능 테스팅

계약 및 규제 인수 테스팅 - 주문 개발 소프트웨어의 생산을 위한 계약서에 명시된 인수 조건을 가지고 수행. 인수 조건은 모든 계약 당사자가 계약에 동의할 때 정의. 계약 인수 테스팅은 사용자나 독립적인 테스터가 수행하는 경우가 많음.

규제 인수 테스팅은 정보, 법적, 안전 규제 등과 같이 준수해야 하는 모든 규제를 가지고 수행. 규제 인수 테스팅은 사용자나 독립적인 테스터가 수행하는 경우가 많음. 규제 기관이 결과에 대한 실사나 감사를 진행하기도 한다.

계약 및 규제 인수 테스팅의 가장 중요한 목적은 계약이나 규제 준수에 대한 자신감 획득.

 

알파 및 베타 테스팅 - 소프트웨어 제품을 시장에 출시하기 전에 기존 혹은 신규 사용자, 고객, 운영자 등으로부터 피드백을 받기 원하는 사용 소프트웨어 개발자가 사용하는 경우가 많다. 

알파 테스팅 - 개발 조직의 현장에서 개발팀이 아닌 신규 혹은 기존 고객이나 운영자, 독립적 테스트팀이 수행.

베타 테스팅 - 신규 혹은 기존 고객이나 운영자가 자신의 환경에서 수행.

목적 - 신규 혹은 기존 고객이나 운영자가 시스템을 일반적인 조건과 운영환경에서 사용해 자신의 목적을 최소한의 어려움, 비용, 리스크 등으로 완수할 수 있다는 자신감을 획득. 또 다른 목적은 시스템을 사용할 조건 및 환경과 관련된 결함의 발견일 수 있음.

 

테스트 베이시스

  • 비지니스 프로세스
  • 사용자 또는 비즈니스 요구사항
  • 규제, 법적 계약, 표준
  • 유스케이스 및 사용자 스토리
  • 시스템 요구사항
  • 시스템 또는 사용자 문서
  • 설치 절차
  • 리스크 분석 보고서

일반적인 테스트 대상

  • 테스트 대상 시스템
  • 시스템 설정과 설정 데이터
  • 완전히 통합된 시스템의 비지니스 프로세스
  • 복원 시스템이나 비즈니스 연속성 및 긴급 복구 테스팅을 위한 핫 사이트
  • 운영 및 유지보수 프로세스
  • 양식
  • 보고서
  • 기존 및 전환된 생산 데이터

일반적인 결함과 장애

  • 비즈니스나 사용자 요구사항을 충족하지 못하는 시스템 워크플로우
  • 잘못 구현된 비즈니스 규칙
  • 계약 혹은 규제 요구사항을 충족하지 못하는 시스템
  • 보안 취약성, 많은 부하가 걸렸을 떄 성능 효율성 저하, 지원 대상 플랫폼상에서의 잘못된 운영 등과 같은 비기능 장애

2.3 테스트 유형

테스트 유형 - 특정 테스트 목적을 위해 소프트웨어 시스템이나 시스템의 일부 특정 속성을 테스트하는 활동의 집합

  • 완전성, 정확성, 적합성 등과 같은 기능 품질 특성 평가
  • 신뢰성, 성능 효율성, 보안성, 호환성, 사용성 등과 같은 비기능 품질 특성 평가
  • 컴넌트나 시스템의 아키텍처 및 구조가 정확하고 완전하며 명시된 것과 일치하는지 평가
  • 수정의 효과 평가. 예를 들어, 결함이 수정됐는지 확인(확인테스팅)하고 소프트웨어나 환경의 변화로 인해 동작에 의도하지 않은 변화가 없는지(리그레션 테스팅) 평가 

2.3.1 기능 테스팅 - 시스템이 수행해야 하는 기능을 평가하기 위한 테스트를 포함. 기능이란 시스템이 해야 하는 그 "무엇"을 애기

기능 테스팅이 얼마나 철저하게 수행 됐는지 기능 커버리지를 통해 측정할  수 있다. 기능 커버리지란 어떤 기능이 테스트에 의해 어느정도 실행됐는지를 말하며, 커버되고 있는 요소 유형에 대한 백분율로 표기.

 

2,3,2 비기능 테스팅 - 시스템의 비기능 테스팅은 사용성, 성능 효율성 또는 보안성과 같은 시스템 특성을 평가. 비기능 테스팅이란 시스템이 "얼마나 잘" 동장 하는지에 대한 테스팅을 말함. 기능 테스팅 처럼 모든 테스트 레벨에서 수행 가능. 비기능 테스팅은 조기에 할수록 좋음.

 

2.3.3 화이트박스 테스팅 - 시스템의 내부 구조나 구현을 기반으로 테스트를 도출. 내부 구조로는 코드, 아키텍처, 워크플로우, 시스템 내 데이터 플로우 등이 있음.

화이트박스 테스팅이 얼마나 철저하게 이루어졌는지 구조 커버리지를 통해 측정.

구조 커버리지란 특정 구조 요소가 테스트에 의해 어느 정도 실행됐는지를 말하며, 커버되고 있는 요소 유형에 대한 백분율로 표기.

 

2.3.4 변경 관련 테스팅 - 결함을 수정하고자 했든 또는 기능을 추가하거나 개선하기 위해서 했든 시스템이 변경되면, 해당 변경이 결함을 제대로 수정했는지, 기능을 올바르게 구현했는지 또 예상하지 못한 부작용이 발생하지 않았는지 확인하기 위한 테스팅을 수행할 필요가 있음.

  • 확인 테스팅 : 결함이 수정된 후 이 결함으로 인해 불합격됐던 모든 테스트 케이스를 새로운 소프트웨어 버전에서 재실행할 수 있음. 확인 테스팅의 목적은 원래 제대로 결함을 제대로 수정했는지 확인하는 것이다.
  • 리그레션 테스팅 - 코드의 특정 부분에 대한 변경이 무언가를 수정하기 위해서거나 또는 다른 목적이든 관계없이 이런 변경은 의도치 않게 코드의 다른 부분에 영향을 줄 수 있다. 리그레션 테스팅은 이런 의도하지 않은 부작용을 발견하기 위한 테스트를 수행.

확인 테스팅과 리그레션 테스팅은 모든 테스트 레벨에서 수행 가능

 

2.4 유지보수 테스팅 - 소프트웨어와 시스템이 생산 환경으로 배포되고 나면 유지보수가 필요. 배포된 소프트웨어와 시스템에 대한 다양한 변경은 거의 필연적으로 발생.

2.4.1 유지보수가 필요한 상황 - 유지보수의 계기

  • 개선을 위한 변경 , 계획된 확장(릴리스기반), 수정 혹은 긴급 변경, 운영 환경 변경, 상용 소프트웨어 업그레이드, 결함 및 취약성을 위한 패치 등.
  • 이관을 위한 변경, 하나의 플랫폼에서 다른 플랫폼으로 이관할때 다른 ㅇ어플의 데이터를 위한 데이터 전환 테스트 등.

 

-참조 실라버스

 

'자격증 > ISTQB' 카테고리의 다른 글

정리 1  (0) 2020.06.22
[Part 6] 테스트 지원 도구  (0) 2020.06.14
[Part 5] 테스트 관리  (0) 2020.06.14
[part 3] 정적 테스팅  (0) 2020.06.11
[Part 1] 소프트웨어 테스팅의 기초  (0) 2020.06.07

- 용어 -

테스트 컨디션 - 특정 테스트 목적 달성과 관련된 테스트 베이시스의 한 측면 - 하나 또는 그 이상의 테스트 케이스로 검증될 수 있는 항목(item)이나 이벤트로서 정의된다. 유의어 : 테스트 요구사항 , 테스트 상황 (리모컨 예로 전원을 킨다 OR 전원을 끈다.)(실라버스 샘플-A-Q1)

테스트 베이시스 - 요구사항을 내포하고 있는 모든 문서. 테스트 케이시스는 테스트 베이시스를 토대로 만들어 진다. 테스트 분석 및 설계의 기초로 사용되는 지식 체계.

리그레션 테스팅 - 개선을 위한 소프트웨어 수정 후 변경 결과로 소프트웨어의 변경되지 않은 영역에서 결함이 발견되거나 유입되지 않았는지 확인하기 위해 이전 테스트 구성 요소 또는 시스템에 대해 진행하는 테스팅 

메트릭 - 측정을 위해 사용되는 측정 척도 및 방법 
명세(서) - 컴포넌트나 시스템의 요구사항, 설계, 동작, 기타 특성을 지정하는 문서. 이상적인 명세는 완전하고 정확하며, 검증 가능한 방식으로 작성되어 있고, 많은 경우 이러한 규정이 충족되었는지를 확인할 수있는 절차가 포함됨.

테스트 차터 - 세션 기반 탐색적 테스팅에서의 테스트 활동에 대한 문서. 테스트 목적과 테스트 방법에 대한 가능한 테스트 아이디어를 적은것(테스트 분석의 결과로 테스트 컨디션 생성되는 경우도 있음) (실라버스 샘플 A-Q8)

테스트 스위트 - 테스트 구현 산출물에는 테스트 스크립트뿐 아니라 테스트 실행 일정의 묶음인 테스트 스위트.

(실라버스 샘플 A-Q8)

테스트케이스 - 테스트 컨디션에 기반하여 개발된 전제 조건, 입력값, 조치, 기대결과 및 사후 조건의 조합.

(실라버스 샘플 A-Q8)

테스트 스크립트 - 테스트 실행을 위한 일련의 지침. (실라버스샘플 A-Q8)

테스트웨어 - 테스팅에 대한 계획, 설계, 살행, 평가, 보고 등에 활용하기위한 목적으로 테스트 프로세스 동안 생성되는 작업 산출물.

테스팅 - 소프트웨어 제품 및 관련 작업산출물이 특정 요구사항을 충족하는지 확인하고, 목적에 부합하는지 여부를 입증하고, 결함을 발견하기 위해 정적/동적의 모든 계획, 준비, 평가와 관련된 수명주기 활동으로 구성된 프로세스

- - - - - - -

1.1 소프트웨어 테스팅이란 - 소프트웨어 테스팅은 소프트웨어의 품질을 평가하고 운영 중 소프트웨어 장애의 발생 가능성을 줄이는 하나의 방법이다. (가능한 많은 장애를 찾아내어 결함을 식별하고 수정한다. 샘플-A-Q2)

1.1.1 테스팅의 일반적인 목적

일반적인 프로젝트에서 테스팅은 다음과 같은 목적을 가질 수 있다.

  • 요구사항, 사용자 스토리, 설계, 소스 코드 등과 같은 작업 산출물 평가에 의한 결함 예방

  • 명시된 모든 요구사항이 충족됐는지 검증

  • 테스트 대상의 완성 여부 확인과 사용자와 기타 이해관계자의 기대치 대로 동작하는지의 확인

  • 테스트 대상의 품질 수준에 대한 자신감 획득

  • 장애 및 결함 발견과 이에 따른 부적절한 소프트웨어 품질의 리스크 레벨의 감소

  • 이해관계자가 테스트 대상의 품질 수준을 결정하는 데 필요한 충분한 정보 제공

  • 계약, 법적, 규범적 요구사항이나 표준 준수나 테스트 대상이 그런 요구사항이나 표준을 준수하는지 확인

* 테스팅의 목적은 테스트하고 있는 컴포넌트나 시스템의 정황(현재의 테스트 레벨과 사용하는 소프트웨어 개발 수명주기 모델 등에 따라 달라질 수 있다.)

  • 컴퍼넌트 테스팅의 목적 중 하나는 내재되어 있는 결함을 최대한 조기에 가능한 많이 식별하고 수정하는 것일 수 있다. 또 다른 목적은 코드 커버리지를 높이는 것일 수도 있다. ( 결함을 최대한 조기 발견 및 수정 , 코드 커버리지율 증가)
  • 인수 테스팅의 목적중 하나는 시스템이 기대한 대로 동작하는지, 또 요구사항을 충족하는지 확인하는 것일 수 있다.또 요구사항을 충족하는지 확인하는 것일 수 있다.또 다른 목적은 특정 시점에 시스템을 배포하는 것에 대한 리스크 정보를 이해관계자에게 제공하는 것일 수 있다.( 시스템이 기대한 대로 동작 확인, 요구사항 충족 확인, 시스템 배포 리스크 정보 전달)

1.1.2 테스팅과 디버깅

테스팅 - 소프트웨어 결함으로 인한 장애를 찾을 수 있다. -> 디버깅에서 수정을 한 후 제대로 수정했는지 확인.

디버깅 - 결함의 장애의 원인을 찾고 분석해서 수정하는 개발 활동.

( 동적 테스팅은 결함으로 발생하는 장애를 보여주고, 디버깅은 소프트웨어에서의 장애의 원인을 찾아 분석하고 제거한다. 실라버스 A-Q3)

1.2 테스팅이 왜 필요한가?

  • 컴포넌트 , 시스템 및 관련 문서에 대한 철저한 테스팅은 운영 중 장애 발생 가능성을 줄이는 데 도움.

  • 결함을 발견하고 또 발견된 결함을 수정하는 것은 컴포넌트나 시스템의 품질에 기여.

  • 계약/법적 요구사항이나 특정 산업 표준을 만족시키기 위해 필요 가능성.

1.2.1 성공을 위한 테스팅의 기여

  • 결함으로 장애가 발생하거나 이해관계자의 요구를 충족시키지 못하는 상황을 개선

1.2.2 품질 보증과 테스팅

품질관리 - 품질 측면에서 조직이 나아가야하는 방향을 제시하고 제어하는 모든 활동이 포함. ( 품질보증,품질제어 포괄)

       - 품질 보증 - 적절한 품질 수준을 달성했는지 확신을 얻기 위해 적절한 프로세스를 준수하도록 하는것에 초점.

       - 품질 제어 - 테스팅 - 품질을 높이는데 다양한 방법으로 기여(시스템의 품질 리스크 수준을 낮춰준다).요구사항이 충분히 상세하다는 것을 보증.
       (실라버스 샘플A-Q6)

1.2.3 오류, 결함, 장애

사람은 프로그램 코드 또는 기타 작업 산출물을 작성하면서 결함(결점,버그)을 발생시키는 오류(실수)를 범할 수 있고, 이로인해 프로그램은 장애를 일으킬수 있음. (실라버스 샘픔A-Q4)

 

- 대표적 오류 발생원인

  • 시간적인 압박

  • 사람의 실수

  • 경험이 적거나 기술이 부족한 프로젝트 참여자

  • 요구사항과 설계 등에 대한 프로젝트 참여자 간의 의사소통 문제

  • 코드, 설계, 아키텍처의 복잡성, 해결해야 하는 근본 문제, 사용하는 기술의 복잡도

  • 시스템 내/외부 인터페이스에 대한 이해부족, 특히 내/외부 인터페이스 수가 많은 경우

  • 새롭고 익숙하지 않은 기술

1.2.4 결함, 근본 원인, 결과

결함의 근본 원인이란 해당 결함을 생성하는 데 기여한 최초의 행동이나 조건을 지칭. 결함을 분석함으로써 근본 원인을 찾을 수 있으며 , 차후 유사한 결함의 발생 가능성을 낮출 수 있다.

 

*1.3 테스팅의 7 가지 원리 *

  1. 테스팅은 결함이 존재함을 밝히는 활동이지, 결함이 없을 밝히는 활동이 아니다.- 테스팅은 결함이 존재한다는 것을 보여줄 수 있지만, 없다는 것을 증명할 수 없다.
  2. 완벽한 테스팅은 불가능하다.- 모든 것(입력과 사전 조건의 모든 조합)을 테스팅 한다는 것은 매우 간단한 소프트웨어를 제외하고는 불가능하다. 완벽하게 테스트하고자 확신보다는 리스크 분석과 우선순위를 토대로한 테스트에 노력을 집중하 것이 좋다. 
  3. 조기 테스팅으로 시간과 비용을 절약할 수 있다.- 초기에 결함을 찾기 위해서는 정적 및 동적 테스트 활동 모두 소프트웨어 개발 수명주기 중 가능한 이른 시점에 시작해야 한다. 초기부터 시작하는 테스팅을 시프트 레프트라고도 부른다. 소프트웨어 수명주기 초기부터 테스팅을 함으로써 나중에 큰 비용이 동반되는 수정을 줄이거나 없앨 수 있다.
  4. 결함은 집중된다.- 출시 전 테스팅에서 발견하는 대부분의 결함은 소수의 모듈에 집중되어 발생하는 경향을 보이며, 운영상 장애의 대부분 역시 소수의 모듈에서 발생한다. 예상 결함 집중 영역과 테스트와 운영 중 실제로 관측한 결함 집중 영역은 리스크 분석의 주요 입력값으 로 사용된다.
  5. 살충제 패러독스에 유의하라- 만일 같은 테스트를 계속해서 반복 실행한다면, 결국 해당 테스트로는 결함을 더 이상 발견할 수 없게 된다. 새로운 결함을 발견하기 위해서는 기존 테스트와 테스트 데이터를 바꾸고 새로운 테스트를 작성할 필요가 있다.(살충제를 계속 사용하다 보면 결국 해충을 잡지 못하듯 테스트도 동일) 자동 리그레션 테스팅의 경우 리그레션 결함이 적다는것을 의미할수도 있다.
  6. 테스팅은 정황에 의존적이다.- 테스팅은 정황에 따라 다르게 진행된다. 예를 들어 애자일 프로젝트에서의 테스팅은 순차적 소프트웨어 개발 수명주기 프로젝트에서의 테스팅과는 다르게 진행된다.
  7. 오류 부재는 궤변이다.- 조직에 따라서는 테스터가 모든 가능한 테스트를 실행하고 존재하는 모든 결함을 발견하기를 기대하는 경우도 있지만, 원리1과2가 말해주듯 이것은 불가능하다. 단순히 많은 결함을 발견하고 고쳤다고 해서 시스템의 성공이 보장된다고 생각하는 것은 궤변(잘못된 믿음)이다.

*1.4 테스트 프로세스*

- 설정한 목적의 달성 가능성을 높여주는 공통적인 테스트 활동 세트(테스트 프로세스) ,주어진 상황에 맞는 구체적은 소프트웨어 프로세스는 다양한 변수에 따라 결정.

테스트 프로세스에 속하는 테스트활동과 이런 활동을 어떻게 구현할지, 또 이런 활동을 언제 수행할지에 대한 내용은 조직의 테스트 전략에서 다룰 수 있다.

 

1.4.1 정황에 따른 테스트 프로세스

다음은 조직의 테스트 프로세스에 영향을 줄 수 있는 정황 요소 중 일부이다.

  • 사용 중인 소프트웨어 개발 수명주기 모델과 프로젝트 방법론
  • 적용하고자 하는 테스트 레벨과 테스트 유형
  • 제품 및 프로젝트 리스크
  • 비즈니스 도메인
  • 다음과 같은 운영상의 제약사항:- 예산과 자원 / 일정 / 복잡도 / 계약 및 규제 요구사항
  • 운영 정책과 프랙티스
  • 준수해야 하는 내부 및 외부 표준

1.4.2 테스트 활동과 작업

테스트 프로세스를 구성하는 주요 7 활동 

  • 테스트 계획 - 테스트 계획서의 수립 또는 수정 활동 (계획서 - 테스트 활동 조정에 사용되며 ,달성할 목표와 방법 일정을 설명하는 문서)
  • 테스트 모니터링과 제어 - 테스트 활동의 상황을 확인하고, 계획된 또는 예상된 상태와의 편차를 식별하고 상태를 이해관계자에게 보고하는 테스트 관리 활동
  • 테스트 분석 - 테스트 베이시스를 분석하여 테스트 컨디션을 식별하는 활동
  • 테스트 설계 - 테스트 컨디션으로부터 테스트 케이스를 유도하고 도출하는 활동
  • 테스트 구현 - 테스트 분석과 설계를 기반으로 테스트 실행에 필요한 테스트웨어를 준비하는 활동
  • 테스트 실행 - 테스트 대상 컴포넌트나 시스템에 대한 테스트를 실행하고 실제 결과를 생성하는 프로세스
  • 테스트 완료 - 테스트 자산을 향후 이용 가능하게 하고, 테스트 환경을 만족스러운 상황으로 유지하고, 관련 이해당사자들에게 테스팅 결과를 전달하는 활동.

용어

내용

주요 활동

테스트 계획

테스팅의 목적과 정황으로 인한 제약 사항을 고려해 테스트 목적을 달성하기 위해 필요한 접근법을 정의하는 활동

적합한 테스트 기법과 작업 명시, 정해진 출시 일정 전에 완료하기 위한 테스트 일정 수립(계획은 모니터링과 제어활동에서 나온 피드백을 기반으로 수정할 수 있다.

테스트 모니터링과 제어

테스트 모니터링 테스트 계획에 정의된 테스트 모니터링 메트릭을 활용해 실제 진행 상황을 계획한 진척 상황과 지속적으로 비교하는 활동.

테스트 제어 테스트 계획에 따른 목적 달성을 위해 필요한 행동을 취하는 활동.

종료조건평가

-명시된 커버리지 조건 대비 테스트 결과와 로그 확인

-테스트 결과와 로그를 기반으로 컴포넌트나 시스템의 품질 수준 평가

-추가 테스트 필요 여부 결정

테스트 분석

테스트 가능한 기능과 연관된 테스트 컨디션을 식별하기 위해 테스트 베이시스 분석. 즉 측정 가능한 커버리지 조건의 측면에서 무엇을 테스트 할지를 결정 .테스트 차터 생성

태스트 베이시스의 테스트 용이성 평가 (샘플A-Q7)
*(
테스트 분석 중 결함 식별)

- 고려중인 테스트 레벨에 적합한 테스트 베이시스 평가

-테스트 베이시스와 테스트 항목을 평가해서 다양한 형태의 결함 식별

-테스트할 기능과 기능 세트식별

-테스트 베이시스를 평가하고 기능 , 비기능, 조 특성, 기타 비즈니스 기술 요소, 리스크 수준등을 고려해서 각 기능에 대한 테스트 컨디션의 정의 및 우선순위 선정

-테스트 베이시스의 개별 요소와 연관된 테스트 컨디션 간의 양방향 추적성 포착

테스트 설계

테스트 컨디션을 기반으로 상위 수준 테스트 케이스, 상위 수준 테스트 케이스 세트, 기타 테스트웨어를 생성어떻게 테스트 할 것인가?“
필요한 인프라와 도구식별 (샘플A-Q7)

*( 테스트 분석 중 결함 식별)

-테스트 케이스와 테스트 케이스 세트 설계 및 우선순위 선정
-테스트 컨디션과 테스트 케이스에 필요한 테스트 데이터 식별
-테스트 환경 설계와 필요한 인프라 및 도구 식별
-테스트 베이시스, 테스트 컨디션, 테스트 케이스 간의 양방향 추적성 설정

테스트 구현

테스트 실행에 필요한 테스트웨어를 생성하고 완성하며, 테스트 케이스를 배치해서 테스트 프로시저를 만드는 것도 여기에 포함된다. “어떻게 테스트할 것인가?"의 답을 제공하는 반면 테스트를 실행하기 위해 필요한 모든 것이 갖춰져 있는가?"질문에 답하는 활동
테스트 스크립트로 테스트 스위트 생성 (샘플A-Q7)

-테스트 프로시저의 개발과 우선순위 선정, 가능하다면 자동 테스트 스크립트 생성

-테스트 프로시저와 (있다면) 자동 테스트 스크립트로부터 테스트 스위트 생성

-효과적인 테스트 실행이 가능하도록 테스트 스위트를 테스트 실행 일정 내에 배치

-테스트 환경 구축, 가능하다면 테스트 하네스, 서비스 가상 현실화, 시뮬레이터, 기타 인프라 항목까지, 또 필요한 모든 사항을 제대로 구현했는지 확인

-테스트 데이터를 준비하고, 테스트 환경에 제대로 입력했는지 확인

-테스트 베이시스, 테스트 컨디션, 테스트 케이스, 테스트 프로시저, 테스트 스위트 서로간의 양방향 추적성 검증과 업데잍,

테스트 실행

테스트 스위트를 테스트 실행 일정에 따라 실행.

-테스트 항목, 테스트 대상, 테스트 도구, 테스트웨어 등의 고유번호(ID)와 버전 기록
-테스트를 수동으로 혹은 테스트 실행 도구를 활용해서 실행
-기대 결과와 실제 결과 비교
-이상현상을 분석해 원인 파악
-관찰한 장애를 기반으로 결함 보고
-이상 형상 때문에 취한 활동의 결과로 인해 또는 계획된 테스팅의 일부로 테스트 활동 반복(ex. 수정된 테스트 실행, 확인테스팅,리그레션 테스팅등)
-테스트 베이시스, 테스트 컨디션, 테스트 케이스, 테스트 프로시저, 테스트 결과 간의 양방향 추적성 검증과 업데이트

테스트 완료

완료한 테스트 활동에서 데이터를 수집해서 경험, 테스트웨어, 기타 관련 정보를 축적하는 활동. 테스트완료 활동은 소프트웨어 시스템을 릴리스 했을 때, 테스트 프로젝트를 완료(또는 취소) 했을때, 애자일 반복주기가 끝났을 때, 특정 테스트 레벨을 완료했을 때, 또는 유지보수 릴리스를 완료했을 때와 같은 프로젝트 마일스톤 시점에서 일어남.
프로세스 개선을 위한 교훈 도출

-모든 결함 보고 처리를 완료했는지, 테스트 실행 후 해결되지 않은 모든 결함에 대해 수정 요청서 또는 프로젝트 백로그 항목을 생성했는지 확인

-이해관계자에게 전달할 테스트 요약 보고서 생성

-차후 재사용을 위해 테스트 환경, 테스트 인프라, 기타 테스트웨어의 마무리 및 보관

-테스트웨어를 유지보수팀, 다른 프로젝트팀, 그것을 활용할 수 있는 기타 이해관계자 등에게 인계

-완료한 테스트 활동을 통해 얻은 교훈을 분석해서 향후 반복주기, 릴리스, 또는 프로젝트를 위해 수정해야 하는 사항 판단

-테스트 프로세스 성숙도 개선을 위해 수집된 정보 활용

1.4.3 테스트 작업 산출물

  • 테스트 계획 작업 산출물 - 하나이상의 테스트 계획(테스트 베이시스에 대한 정보 포함)
  • 테스트 모니터링과 작업 산출물 - 테스트 요약 보고서와 같은 여러 형태의 테스트 보고서(작성일 기준 테스트 진행 상황 관련 필요한 정보를 제공해야함) 산출물은 작업완료, 리소스 할당과 사용, 공수등과 같이 프로젝트 관리에서 관심을 가지는 사항에 대해서도 다뤄야 함.
  • 테스트 분석 작업 산출물 - 분석을 통해 식별되고 우선순위가 선정된 테스트 컨디션은 테스트 분석 작업 산출물에 속함. 이상적으로는 각 테스트 컨디션과 그것이 커버하는 테스트 베이시스 요소와의 양방향 추적성이 성립 되어야함. 탐색적 테스팅에서는 테스트 분석 중 테스트 차터를 생성할 수 있음. 테스트 베이시스의 결함을 발견 보고 가능.(샘플 A-Q8)
  • 테스트 설계 작업 산출물 - 테스트 컨디션을 실행할 수 있는 테스트 케이스와 테스트 케이스 세트가 만들어짐. 입력 데이터와 기대 결과로 사용할 값이 고정되지 않은 상위 수준 테스트 케이스를 먼저 설계하는 것이 좋은 경우가 많다. 이런 상위 수준 테스트 케이스는 입력 데이터와 기대 결과값을 바꿔가면서 다양한 테스트 주기에서 재활용할 수 있음.동시에 테스트 케이스의 범위를 충분히 기록 이상적으로는 테스트 케이스와 그것이 커버하는 테스트 컨디션 간의 양방향 추적성이 성립 -테스트 설계는 다음과 같은 결과를 가져옴 - 필요한 테스트 데이터의 설계나 식별 , 테스트 환경 설계, 인프라 도구의 식별
  • 테스트 구현 작업 산출물 - 테스트 프로시저와 이 프로시저의 배열. 테스트 스위트, 테스트 실행일정 **이상적인 상황에서는 테스트 쿠현이 끝나면, 테스트 케이스와 테스트 컨디션을 통해 테스트 프로시저와 테스트 베이시스 개별 요소 간의 양방향 추적성을 확인함으로써 테스트 계획에서 정의한 커버리지 조건의 달성 여부를 확인할 수 있다. (샘플 A-Q8)
  • 테스트 실행 작업 산출물 - 개별 테스트 케이스나 테스트 프로시저의 상태에 대한 문서 (실행 준비 완료, 합격 ,불합격, 실행하지 못함, 의도적으로 실행하지 않음 등) ,결함 보고서. 테스팅에 사용한 테스트 항목, 테스트 대상, 테스트 도구, 테스트 웨어 등에 대한 문서 ** 이상적인 상황에서는, 테스트 실행이 끝나면 연관된 테스트 프로시저와의 양방향 추적성을 활용해서 테스트 베이시스 개별 요소의 상태에 대해 판단하고 보고할 수 있음.
  • 테스트 완료 작업 산출물 - 테스트 요약 보고서, 차후 프로젝트나 반복주기의 개선을 위한 액션 아치템, 수정요청서 혹은 제품 백로그 항목, 완성된 테스트웨어 등이 있음.


참고 - ISTQB 실라버스

'자격증 > ISTQB' 카테고리의 다른 글

정리 1  (0) 2020.06.22
[Part 6] 테스트 지원 도구  (0) 2020.06.14
[Part 5] 테스트 관리  (0) 2020.06.14
[part 3] 정적 테스팅  (0) 2020.06.11
[Part 2] 소프트웨어 수명주기와 테스팅  (0) 2020.06.08

+ Recent posts