자격증/정처기

2-3 어플리케이션 테스트 관리

길용쓰 2023. 5. 17. 04:05

1.어플리케이션 테스트

- 검증(Verification): 개발자 관점 = 명세서 = 과정 

- 확인(Validation): 사용자 관점 = 요구사항 = 결과

- 테스트와 위험은 반비례

- 소규모에서 대규모로

- 개발자와 관계없는 별도의 팀에서 수행

 

파레토 법칙: 오류의 80%는 20%의 모듈에서 발견 -> 결함 집중

살충제 패러독스: 테스트케이스 보완 필요

오류 부재의 궤변: 결함이 없어도 요구사항을 만족시키지 못하면 품질이 낮음

 

 

 

테스트 순서

- 단위(모듈) -> 통합(모듈 결합) -> 시스템(SW와 환경) -> 인수(요구사항 검증)

- 단위 테스트는 주로 구조(논리) 기반

- 인수 테스트 = 알파 + 베타

- 알파: 사용자가 개발자 앞에서 테스트 = 통제된 환경

- 베타: 사용자가 여러 사용자 앞에서 = 제어 X

*베타 = 필드 테스팅이라고도 함

 

 

 

통합 테스트 (Intergration test)

-비점진적(빅뱅) + 점진(하향,상향,혼합)

 

1)하향식 테스트

- DFS, BFS

- 스텁(stub): 하위 모듈을 대체하는 임시 모듈

- 초기부터 시스템 구조를 보여줄 수 있음

- 상위 모듈에선 테스트 케이스 사용이 어려움

 

2)상향식 테스트

- 클러스터 결합 -> 드라이버 작성 -> 클러스터 테스트 -> 더 상위로 결합

- 클러스터: 하나의 모듈에 종속된 모듈들의 그룹

- 드라이버: 상위 모듈을 대체하는 더미 모듈

*스텁 = 하위 모듈 '대체' // 드라이버 = 하위 모듈 '호출'

 

+혼합식 = 상향+ 하향 = 샌드위치

+회귀: 이전에 수행했던 테스팅 반복 = 변경사항으로 인한 오류 검사

 

 

 

 

 

테스트 방식

- 정적: 프로그램 실행 x = 명세서, 소스코드 중심

ex) 코드검사, 워크스루->인스펙션 

- 동적: 프로그램 실행 = 모든 개발 단계에서 테스트 가능

ex) 블박 화박

 

 

화이트박스 테스트

- 원시 코드(모듈)를 오픈, 논리적인 모든 경로를 테스트

- 모듈 내부의  작동을 직접 관찰

- 모듈의 모든 문장을 한번 이상 실행

 

1) 기초 경로 검사: 논리적 복잡성 측정 

* 기초 경로: 수행 가능한 모든 경로

2) 제어 구조 검사: 조건 / 루프 / 데이터 흐름(변수) 검사

 

 

블랙박스 테스트

- 소프트웨어의 기능을 테스트

- 구조를 고려 x = 명세나 요구 중심

- 인터페이스에서 실시

 

1)동치 분할 검사: 입력 자료에 중점  (Equivalence Partitioning)

2)경계값 분석: 오류 확률이 높은 입력 조건의 경계값 위주로 테스트  (Boundary Value)

+원인 효과 그래프(좋은 테스트케이스 선별), 오류 예측(경험적, 감각적), 비교 검사 (같은 인풋, 다른 버전)

 

화박: 논리 / 테스트 초기 / 명세+경험

블박: 기능 / 테스트 후기 / 구조

 

 

 

 

테스트 오라클

- 테스트 결과가 올바른지 판단하기위해 사전의 정의된 True 값을 대입

- 제한, 수학, 자동화

 

- 참: 모든 입력값에 대해 기대하는 결과 제공 = 모든 오류 검출 가능

- 샘플링: 일부 

- 추정(Heuristic): 일부 + 추정

- 일관성(Consistent): 변경 전 후

 

 

 

 

테스트 하네스(Harness)

1)테스트 케이스: 요구사항 준수 확인을 위한 테스트 항목 명세서  (INPUT+조건+예상 결과)

2)테스트 시나리오: 적용 순서에 따라 테스트 케이스를 묶은 집합  (INPUT+조건+테스트 순서))

3)테스트 슈트: 한 모듈의 테스트에 필요한 테스트 케이스 집합

4)테스트 스크립트: 자동화된 테스트 실행 절차의 명세서

5)목 오브젝트(Mock): 조건부로 입력해둔 사용자 행위에 맞는 대처를 수행하는 객체

+드라이버 스텁

 

 

 

복잡도

O(최악)  θ(평균)  Ω(최상)

O(1) = 고정 = 삽입, 삭제, 해싱

O(log2n) = 이진 트리/검색

O(n) = 1:1 = 순차 탐색(for문)

O(nlog2n) = 힙, 머지, 퀵(평균)

O(n^2) = 삽입 선택 버블 + 쉘 퀵(최악)

O(2^n) = 피보나치

 

순환 복잡도 V = 화살표 - 노드 + 2 = 화살표로 나눠진 영역 개수

 

 

 

어플리케이션 성능 개선

- 성능 측정 지표: 처리량, 응답시간, 경과시간, 자원 사용률

- 성능 테스트 도구: Jmeter, LoadUI, Opensta -> JOL 

배드 코드: 스파게티(꼬임), 에일리언(오래됨)

클린 코드: 가속성, 단순성, 의존성 배제, 중복성 최소화, 추상화

 

 

품질 분석 도구

정적: pmd, cppcheck, SonarQube, CheckStyle, CCM, Cobertura 

동적: Avalanche, Valgrind

 

pmd - 미사용 변수 체크

cppcheck = c++

SonarQube = 소스 분석 플랫폼

CheckStyle =  Java 표준 검사

Cobertura = Java 복잡도 + 테스트 커버리지

CCM = 다양한 언어

 

Valgrind = 메모리 & 쓰레드 결함 분석

Avalanche = Valgrind + STP

 

 

 

결함 상태 추적

1)결함 분포  (위치에 따른 결함 수)

2)결함 추세  (시간에 따른 결함 수)

3)결함 에이징 (결함의 지속 시간)

 

결함 추적 순서

등록-> 검토 -> 할당 -> 수정 -> (보류) -> 종료 -> 해제