시스템에 의해 제공하는 비즈니스의 연속성과 안정성을 보장하기 위해 운영 환경에 소스 배포 시 서비스가 중단되지 않도록 코드를 배포 할 수 있는 기술
소프트웨어 배포 : 소프트웨어 개발 이후 결과물을 고객에게 제공하는 방법, 시스템을 중단하는 중단배포와 시스템의 중단없이 배포하는 무중단 배포로 부류
중단배포의 문제점
문제점
설명
다운타임 발생
- 24시간 항상 가동되어야하는 서비스의 경우 문제 발생 가능
무결성 저하
- 다중 서버 이용시 서버간 시차로 인한 데이터 중복 발생 가능
롤백시 중단
- 배포시 문제 발생할 경우, 롤백시에도 다운타임 발생
무중단 배포 기법의 종류
(1) Rolling Update(롤링 배포)
구분
설명
개념
- 일반적인 배포를 의미하며, 단순하게 인스턴스(또는 서버)에 대해 동일한 인스턴스를 띄우고, 준비가 되어 있는 상황에서 1개씩 Rolling을 통해 점진적으로 인스턴스를 변경하는 기법 - Ramped, Incremental 이라고도 불리며, 기존에 사용하고 있었던 기본적인 배포 전략 방식
장점
- 관리 및 롤백이 용이
단점
- 서버 처리 용량에 대한 서전 고려 필요
(2) Blue/Green Deployment(블루-그린 배포)
구분
설명
개념
- Old 버전을 블루, New 버전을 그린으로 호명하고, New 버전을 모두 배포 후 서비스 준비가 되었을 때 모든 트래픽을 New 버전으로 한번에 Switching 을 하는 기법 - Red-Black 이라고도 불리며, 서버가 2개가 다 active이기 때문에 Rollbak이 다소 쉽게 처리 가능
장점
운영 환경에 영향을 주지 않고, 실제 서비스 환경으로 신버전 테스트가 가능
단점
시스템 자원이 두배로 필요하여 비용이 증가
(3) Canary Release(카나리 배포)
구분
설명
개념
- 트래픽 제어를 통해 일부 사용자만 신규 서버로 접속하게 하여 모니터링과 디버깅을 수행 한 후 문제가 없는 경우 모든 서버로 교체하는 기법 - 수정한 코드가 워낙 많이 바뀌어서 불안할 경우 점진적으로 배포하는 형태를 통해 위험 감소 가능
설계근원의 기준에 따라 분류(명세/구조/경험기반) 할 수도 있음 - 블랙박스 기법은 명세기반 기법과 경험기반 기법을 포함, 화이트박스 기법은 구조 기반 기법을 포함함
2. 테스트 설계 기법의 주요 종류
분류
주요 종류
설명
명세기반
- 동등분할
- 입력값/출력값 영역, 등가집합 대표값 예) 각 레벨 범위의 대표값을 테스트
- 경계값 분석
- 동등분할의 경계값 포함 예) 각 레벨의 경계의 값을 테스트
- 결정테이블 테스팅
- 논리적으로 의존적 모든 조건들의 조합 생성 - 테스트 조건/기대결과 True, False로 논리조합
- 상태전이 테스팅
- 현재상황, 이전이력의 상태/변화를 상태 전이 다이어그램을 통해 도출
- 유즈케이스 테스팅
- 컴포넌트(단위)레벨, 시스템 레벨
- 페어와이즈 테스팅
- 결함의 2요소의 상호작용에 기인, 2개 요소의 모든 조합을 다루는 테스트
- 직교배열 테스팅
- 각 행과 열이 페어와이즈하게 함으로써 조합의 수를 줄임
- 구문 커버리지(SC)
- 테스트 스위트(테스트 케이스 묶음)에 실행된 구문이 몇 퍼센트인지를 측정
- 결정 커버리지(DC)
- 결정포인트 내의 전체 조건식이 최소한 참/거짓 한번의 값을 갖도록 측정
- 조건 커버리지(CC)
- 전체 조건식의 결과와 관계없이 각 개별 조건식이 참/거짓 한번 모두 갖도록 개별 조건식을 조합
- 조건/결정 커버리지 (C/DC)
- 전체조건식 참/거짓 한번씩하면서 개별조건식 참/거짓 모두 한번씩 갖도록 조
- 변경조건/결정 커버 리지(MC/DC)
- 각 개별 조건식이 다른 개별 조건식에 무관하게 전체 조건식의 결과에 무관하게 영향 - 각 ISO 26262의 최고 안전 무결성 등급인 ASIL D의 경우 MC/DC 100%의 구조적(코드) 커버리지를 만족해야 함
- 다중조건 커버리지 (MCC)
- 결정포인트 내의 모든 개별조건식의 모든 가능한 논리적 조합 100% 보장
경험기반
- 탐색적 테스팅 접근법 (Exploratory Testing approach)
-테스트의 설계, 수행, 계획, 테스트 기록 및 학습을 동시에 진행하는 휴리 스틱(heuristic, 발견적인) 테스팅 접근법 o테스트 목적 기반 수행 (Test-charter) o60~120분의 제한된 시간에 수행 (Time-boxing) o테스트 수행 후 요약보고 (Debriefing)
- 분류 트리 기법
-SW 일부 또는 전체를 트리 구조로 분석 및 표현, 테스트케이스를 도출
-체크리스트
-테스트 하고 평가해야 할 내용과 경험과 노하우를 분류 정리하고 목록화
-특성 테스팅
-ISO9126 등의 품질모델에 있는 품질특성을 근간으로 테스트케이스를 도 출하는 방법 - 비기능적 테스팅에서 주로 사용
- 소프트웨어 내부 구조를 고려하지 않고, 입력값에 대한 출력값을 확인하여 테스트하는 기법
- 특) 기능테스트, Data Driven, I/O Driven
2) 블랙박스 테스트 주요 기법
기법
활용예
상세 설명
동등 클래스 분할 기법 (Equivalence Class Partitioning)
- 등가 분할 된 대표 값을 이용 테스트케이스 도출
- 프로그램의 입력 도메인을 등가 영역들로 분할 후 각 영역별로 대표되는 값들을 선정하여 테스트 케이스를 설계하는 방법 예) 입력데이터 x값이 0 ~ 100 사이여야 한다면 TC를 (x < 0), (x = 50), (x > 100)으로 분할하여 적용
경계값 분석 (Boundary Value Analysis)
- 결함은 경계 값 근처에서 많이 발생 이용
- 입력 영역의 분할 클래스의 경계값으로 테스트 케이스를 설계하는 방법 - 등가 분할 기법의 확장, 등가분할 된 경계의 유효한 값, 경계의 가장 가까운 유효하지 않는 값 선택 테스트 진행 예) x값이 0∼100사이여야 한다면 TC를 (x=0), (x=100), (x=-0.01), (x=100.1) 로 정의
의사결정 테이블 테스팅 (Decision Table Testing)
- 조건과 결과를 참/거짓으로 표현
- 주요한 의사결정 요소들을 표(결정테이블)로 만들고, 요소들간의 결합에 의한 테스트 케이스 설계 - 각 의사결정 요소들의 조합을 통해 다양한 형태의 테스트 시나리오를 도출
유스케이스 테스팅 (Use Case Testing)
- usecase명세서 이용 테스트 케이스 설계
- 유즈케이스를 통해 도출되는 비즈니스 시나리오 (기본 흐름, 대체 흐름)를 기반으로 테스트를 명세화하여 테스트 - 컴포넌트/단위 레벨 유즈케이스 테스팅 - 시스템 레벨 유즈케이스 테스팅
분류 트리 기법(Classification Tree Method)
- SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하는 기법 - 트리구조를 시각화 하여 테스트 케이스를 설계하므로 불필요한 중복 및 누락을 회피
페어와이즈 테스팅 (Paireise Testing)
- 대부분 결함이 2 개의 요소(Pair)의 상호 작용에 기인한다는 것에 착안하여, 각 값들이 다른 파라미터의 값과 최소 한번씩은 조합을 이루도록 구성하는 테스트 기법 - 모든 조합을 포함하지 않으므로 결함을 찾지 못하는 경우 발생 가능
원인-결과 그래프 (Cause Effect Graph)
- 입력 데이터간 관계가 출력에 영향을 미치는 상황을 체계적으로 분석하여 테스트 케이스 설계 및 테스트 - 원인,결과에 근거한 테스트 케이스 생성하며 시스템 외부 동작만 고려
오류예측 기법 (Error Guessing)
예) 입력값 없이 Return 친다. 문법에 어긋난 입력을 시험한다 등
각 시험 기법들이 놓치기 쉬운 오류들을 감각과 경험으로 찾아 검증 - Ad-hoc Testing이라고도 하며 직관과 경험에 의한 특정 형태의 결함 예측 및 해당 결함을 드러내는 테스트 케이스 설계 기법.
2. 내부구조기반 테스트. 화이트박스 테스트 (White-Box Test)
1) 개념
- 소프트웨어의 내부 구조와 복잡도를 기반으로 테스트 케이스를 도출하여 테스트를 수행하는 방식
- 특) 구조 테스트, Logic Driven
2) 화이트박스 테스트 주요 기법
기법
설명
사례
제어구조 시험 (Control Structure Testing)
- McCabe에 의해 제안된 대표적 White Box Test 기법 - 프로그램의 처리 흐름을 제어하는 방법 및 수행 제어를 위해 사용되는 문장의 구조
- 순차형(순차 구조, Sequence형) - 선택형(분기구조, If Then Else형) - 반복형(반복구조, Do While형)
루프 시험 (Loop Testing)
- 프로그램 루프 구조에 국한해서 실시하는 기법 - 루프 시험의 대상 결함 : 초기화 결함, 인덱싱 및 증가의 결함, 루프의 경계선에서 나타나는 경계 오류 - 루프의 유형 : 단순루프, 중첩루프, 연결루프, 비구조적 루프