728x90

개발자는 코드를 쓰거나 소프트웨어나 시스템 또는 문서를 작성할 때 결함을 만드는 오류를 범할 수 있다. 코드에 존재하는 결함은 장애의 원인이 된다. 결함은 장애의 원인이 되지만, 모든 결함이 장애를 일으키는 것은 아니다. 테스팅은 결함이 존재함을 밝히는 활동이다.

애플리케이션 테스트는 개발된 소프트웨어가 고객의 요구사항을 만족시키는지 확인(validation) 하고 소프트웨어가 기능을 정확히 수행하는지 검증(verification) 한다. 이를 V&V 모델이라고 한다. 시각에 따른 테스트에 속한다.

검증 테스트는 개발자가 제품이 명세서대로 잘 완성됐는지 제품의 생산 과정을 테스트하는 것이다.

확인 테스트는 사용자가 요구한 대로 잘 됐는지 사용자 입장에서 동작하고 확인하는 테스트이다.

완벽한 테스팅은 불가능
소프트웨어의 잠재적인 결함을 줄일 수 있지만 소프트웨어에 결함이 아예 없다고 증명할 수는 없다.
파레토 법칙(결함 집중)
테스트 개체의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다.
살충제 패러독스
동일한 테스트 케이스로 테스트를 반복하게 되면 결함이 더 이상 발견되지 않는다.
테스팅은 정황에 의존
소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라지므로 각각에 알맞게 수행해야 한다.
오류-부재의 궤변
결함을 모두 제거해도 결국 요구사항을 만족시키지 못하면 품질이 높다고 말할 수 없다.
테스트와 위험은 반비례
테스트를 많이 할수록 앞으로 발생할 결함을 줄일 수 있다.
테스트의 점진적 확대
테스트는 작은 단위부터 큰 단위로 점점 확대하며 진행해야 한다.
테스트의 별도 팀 수행
테스트는 개발자와 상관없는 팀으로 수행해야 한다.

정적 테스트는 프로그램을 실행하지 않고 명세서, 소스 코드를 대상으로 분석하는 테스트이다. 프로그램 실행 여부에 따른 테스트에 속한다. ex) 워크 스루, 인스펙션,코드검사

워크스루
소프트웨어 개발자가 모집한 전문가들이 개발자의 작업 내역을 검토하는 것
인스펙션
소프트웨어 개발 단계에서 산출된 결과물의 품질을 평가하고 이를 개선하기 위해 방법을 제시

동적 테스트는 프로그램을 실행시켜 진행하는 테스트이다. 프로그램 실행 여부에 따른 테스트에 속한다. ex) 블랙박스 테스트, 화이트박스 테스트

블랙박스 테스트 : 각 기능이 완전히 작동되는가? 하는 기능 테스트이다. ex) 동치 분할, 경곗값 분석 등

원인 - 효과 그래프 검사
여러 입 출력 간에 높은 영향을 미치는 케이스를 분석 후 채택하여 효용성이 높은 테스트 케이스를 선정하여 검사한다.
동치 분할 검사(동등 분할 기법)
프로그램에 중간 값들을 대입하여 해당 입력 값들이 예상대로 나오는지 테스트하는 기법이다. 0 ~ 10 중의 숫자 중 입력 : 5
경곗값 분석
중간 값이 아닌 경곗값을 테스트 케이스로 선정하여 검사한다. 0 ~ 10 중의 숫자 중 입력 : 10
오류 예측 검사
확인자의 경험으로 예측하여 테스트한다.
비교 검사
여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 같은 결과가 출력되는지 테스트한다.

화이트박스 테스트 : 원시 코드를 오픈시키고 원시 코드의 논리적인 모든 경로를 테스트한다. ex) 기초 경로 검사, 제어 구조 검사

기초 경로 검사
테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 하는 기법
제어 구조 검사
조건 검사 : 프로그램 모듈 내에 있는 논리적 조건을 테스트
루프 검사 : 프로그램의 반복 구조에 초점을 맞춰서 테스트
데이터 흐름 검사 : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰서 테스트
문장 검증 기준
소스 코드의 모든 구문이 한 번 이상 수행되나 하는 기준
분기 검증 기준(결정 검증 기준)
모든 조건문에 대한 결과가 True 혹은 False가 한 번 이상 수행되나 하는 기준
조건 검증 기준
모든 조건문에 포함된 개별 조건식의 결과가 True 혹은 False가 한 번 이상 수행되나 하는 기준
분기/조건 기준
분기 검증 기준과 조건 검증 기준을 합쳐 모든 조건식, 조건문이 True False가 한 번 이상 수행되나 하는 기준

테스트 기반에 따른 애플리케이션 테스트

명세 기반 테스트
사용자의 요구사항에 대한 명세를 다 갖췄나 확인하는 테스트 ex) 동등 분할, 경곗값 분석, 결정 테이블 테스팅, 상태 전이 테스팅, 유즈케이스 테스팅
구조 기반 테스트
프로그램에 대한 논리 흐름에 따라 작성하고 확인하는 테스트 ex) 구문 기반, 결정 기반, 조건 기반
경험 기반 테스트
테스트 관련 인력의 지식이나 경험으로 테스트 케이스를 도출 ex) 에러 추정, 체크 리스트, 탐색적 테스팅

목적에 따른 테스트

회복 테스트
시스템에 여러 가지 결함을 주어 실패하도록 한 뒤 올바르게 회복되는지 확인
안전 테스트
시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지 확인
강도 테스트
시스템에 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 소프트웨어가 정상적으로 실행되는지 확인
성능 테스트
소프트웨어의 실시간 성능이나 전체적인 효율성을 진단 (테스트 응답시간, 처리량 등)
구조 테스트
소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등을 평가
회귀 테스트
소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
병행 테스트
변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교

V-모델(순차적 개발 모델) : 요구사항 정의 및 분석, 시스템 설계, 구현, 테스팅이라는 일련의 단계를 통해 소프트웨어(시스템)을 개발하는 폭포수 개발 모델(Waterfall model)에 근간을 두는 모델

단위 테스트(컴포넌트 테스트) : 테스트가 가능한 최소 단위로 나누어진 소프트웨어(모듈, 프로그램, 객체, 클래스 등) 내에서 결함을 찾고 그 기능을 검증하는 것

통합 테스트 : 컴포넌트간의 인터페이스, OS, 파일 시스템, 하드웨어, 시스템간 인터페이스와 같은 시스템의 각기 다른 부분과 상호 연동하는 동작을 테스트하는 것

비점진적 통합 방식
단계적으로 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트하는 방법 ex) 빅뱅 통합 테스트
점진적 통합 방식
모듈 단위로 단계적으로 통합하면서 테스트하는 방법 ex) 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트
하향식 통합 테스트
가장 상부의 모듈부터 통합해가면서 필요시 시험용 모듈인 스텁을 사용한다.
상향식 통합 테스트
가장 하부의 모듈부터 통합해가면서 하위 모듈을 클러스터로 결합한다. 하위 모듈을 호출하고 파라미터를 전달하는 테스트 드라이버를 작성하며 상위로 이동하며 결합시에 드라이버는 실제 모듈로 대체된다.
혼합식 통합 테스트
하위에서는 상향식 통합, 상위에서는 하향식 통합을 사용한다.
회귀 테스팅
통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인한다.

시스템 테스트 : 개발 프로젝트 차원에서 정의된 전체 시스템 또는 제품의 동작에 대해 테스트하는 것

인수 테스트 : 시스템을 사용하는 고객이나 사용자가 전담하여 수행하는 테스트이다. 다른 이해관계자도 참여가능

사용자 인수 테스팅
비즈니스 사용자가 시스템 사용의 적절성을 확인
운영상의 테스팅
시스템 관리자에 의한 테스팅이다. ex) 백업/복원 테스팅, 재난 복구, 사용자 관리, 유지보수, 보안 취약성에 대한 정기적 점검
계약 인수 테스팅
맞춤식 개발 소프트웨어가 계약상의 인수 통과 조건을 준수하는지 확인
규정 인수 테스팅
정부 지침, 법률 또는 안전 규정 등 준수해야 하는 규정에 맞게 개발되었는지 확인
알파 테스팅
개발 조직 내에서 고객에 의해 수행되는 테스팅
베타 테스팅
실제 환경에서 사용자 혹은 잠재 고객에 의해 수행되는 테스팅

테스트 오라클 : 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법

참 오라클
모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클
샘플링 오라클
특정한 몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클
추정 오라클
특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하고 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클
일관성 검사 오라클
애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클

테스트 자동화 : 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할수 있도록 한 것 ex) 정적 분석 도구, 테스트 실행 도구, 성능 테스트 도구, 테스트 통제 도구

정적 분석 도구
프로그램을 실행하지 않고 분석하는 도구
테스트 실행 도구
스크립트 언어를 사용하여 테스트를 실행하는 도구
성능 테스트 도구
가상의 사용자를 만들어 테스트를 수행하는 도구
테스트 통제 도구
테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
테스트 하네스 도구
테스트가 실행될 환경을 시뮬레이션 하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구

테스트 하네스의 구성 요소

테스트 드라이버
테스트 대상의 하위 모듈을 호출하고, 파라미터를 전달하고, 모듈 테스트 수행 후의 결과를 도출하는 도구
테스트 스텁
제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
테스트 슈트
테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합
테스트 케이스
사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력값, 실행 조건 기내 결과 등으로 만들어진 테스트 항목의 명세서
테스트 스크립트
자동화된 테스트 실행 절차에 대한 명세서
목 오브젝트
사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체

결함 관리 도구

Mantis
결함 및 이슈 관리 도구로, 소프트웨어 설계 시 단위별 작업 내용을 기록할 수 있어 결함 추적도 가능한 도구
Trac
결함 추적은 물론 결함을 통합하여 관리할 수 있는 도구
Redmine
프로젝트 관리 및 결함 추적이 가능한 도구
Bugzilla
결함 신고, 확인, 처리 등 결함을 지속적으로 관리할 수 있는 도구
Jira
버그 및 문제 테스트에 소요되는 에너지, 시간, 비용을 절약할 수 있는 도구

결함 관리 측정 지표

결함 분포
모듈 또는 컴포넌트의 특정 속성에 해당하는 결함 수 측정
결함 추세
테스트 진행 시간에 따른 결함 수 의 추이 분석
결함 에이징
특정 결함 상태로 지속되는 시간 측정

성능 테스트 도구

JMeter
HTTP, FTP 등 다양한 프로토콜을 지원하는 부하 테스트 도구
Cross-Platform
LoadUI
서버 모니터링이 가능한 편리성이 강화된 도구 HTTP, JDBC 등 다양한 프로토콜을 지원한다.
Cross-Platform
OpenSTA
HTTP, HTTPS 프로토콜에 대한 부하 테스트 및 생산품 모니터링 도구
Windows
처리량
일정 시간 내에 애플리케이션이 처리하는 일의 양
응답 시간
애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
경과 시간
애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때 까지 걸린 시간
자원 사용률
애플리케이션이 의뢰한 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률

클린 코드 : 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순 명료한 코드

베드 코드 : 프로그램의 로직이 복잡하고 이해하기 어려운 코드

스파게티 코드
코드의 로직이 서로 복잡하게 얽혀 있는 코드
외계인 코드
아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 코드

정적 분석 도구

pmd
소스 코드에 대한 미사용 변수, 최적화되지 않은 코드 등 결함을 유발할 수 있는 코드를 검사
Linux, Windows
cppcheck
C/C++ 코드에 대한 메모리 누수, 오버플로우 등 분석
Windows
SonarQube
중복 코드, 복잡도, 코딩 설계 등을 분석하는 소스 분석 통합 플랫폼
Cross-Platform
checkstyle
자바 코드에 대해 소스 코드 표준을 따르고 있는지 검사
Cross-Platform
ccm
다양한 언어의 코드 복잡도를 분석함
Cross-Platform
cobertura
자바 언어의 소스 코드 복잡도 분석 및 테스트 커버리지를 측정함
Cross-Platform

동적 분석 도구

Avalanche
프로그램에 대한 결함 및 취약점 등을 분석함
Linux, Android
Valgrind
프로그램 내에 존재하는 메모리 및 쓰레드 결함등을 분석함
Cross-Platform

시간 복잡도 : 알고리즘을 수행하기 위해 프로세스가 수행하는 연산 횟수를 수치화한 것 시간 복잡도가 낮을수록 알고리즘의 실행시간은 짧다.

점근 표기법

빅오 표기법(Big-O)
알고리즘의 실행시간이 최악일 때를 표기하는 방법
세타 표기법(Big-θ)
알고리즘의 실행시간이 평균일 때를 표기하는 방법
오메가 표기법(Big-Ω)
알고리즘의 실행시간이 최상일 때를 표기하는 방법

빅오 표기법의 시간 복잡도

O(1)
입력값에 관계 없이 일정하게 문제 해결에 하나의 단계만을 거침
ex) 스택의 Push, Pop
O(log₂n)
문제 해결에 필요한 단계가 입력값 또는 조건에 의해 감소함
ex) 이진 트리, 이진 검색
O(n)
문제 해결에 필요한 단계가 입력값과 1:1 관계를 가짐
ex) for문
O(nlog₂n)
문제 해결에 필요한 단계가 n(log₂n)번만큼 수행됨
ex) 힙 정렬, 2-Way 합병 정렬
O(n²)
문제 해결에 필요한 단계가 입력값의 제곱만큼 수행됨
ex) 삽입 정렬, 쉘 정렬, 선택 정렬, 버블 정렬, 퀵 정렬
O(2ⁿ)
문제 해결에 필요한 단계가 2의 입력값 제곱만큼 수행됨
ex) 피보나치 수열

순환 복잡도 : 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도

순환 복잡도는 제어 흐름도의 영역 수와 일치하므로 영역 수를 계산한다.

V(G) = E - N + 2 // E는 화살표의 수, N은 노드의 수

728x90

'테스팅' 카테고리의 다른 글

ISTQB CTFL 실라바스2  (0) 2024.03.22
ISTQB CTFL 실라바스1  (0) 2024.03.22

+ Recent posts