V&V

테스팅: 의도된 입력 뿐만나이라 의도되지 않는 입력

_

케이스 만들기 - 모든 케이스를 테스트 하기에는 많기 때문에 골라서 몇개만 test suite: 테스트 케이스의 집합

_

_

테스팅이란 제품이 정상적으로 동작한다는 것을 보여주는게 아니라, 에러를 발견하는 과정이다. 좋은 테스팅이란 많은 오류를 발견하는 것이다.

-

누군가가 오라클을 줄 수 있으면 입출력을 만들때 요구사항 스펙을 참고하지 않아도 됨.

-

테스팅의 경제성 문제: 모든 경우의 수를 테스팅하는 것은 불가능하다.

-

테스팅 원리 요약

-

정적 시험 Static Testing

동적 시험과 정적시험의 차이점

-

정적 테스트에서 사용되는 산출물

-

개발 단계 별 수행되는 정적 테스트

버그는 일찍 발견할 수록 싸다(나중에는 범위도 커지고) 비용이 선형적으로 커짐 코드리뷰를 자주 하면 코드의 품질 높아짐 > 버그 낮아짐

-

가독성과 코드 컨벤션은 정적 테스팅으로만 확인할 수 잇다.

정적 테스팅은 항항 체크리스트와 프로세스로 진행된다.

동적 테스팅은 테스트 케이스를 사용. 정적 테스트도 테스트 케이스를 쓰기도함(머리로 돌림)

-

-

모든 품질속성을 충족시킬수 없다(trade off). 따라서 중요한 것을 골라서 해야함.

-

인스펙션 팀(4사람으로 구성)

-

오류 종류

Test Case Design

효과적인 테스트 케이스 만드는법

모든 오류를 잡을 수 없고, 모든 테스트 케이스를 검사할 수 없다 - 효율성 필요

두 가지 테스트 케이스 만드는 주요 방법 - 블랙박스, 화이트박스

언제 시험을 끝낼것인가?

test adequacy: 테스트 충분성(테스트를 끝내도 되는 기준)

coverage 맹신의 위험성: 보증을 하진 않음. 단지 테스팅을 정량화하는데 사용. 테스트를 안한 부분은 모름. 커버리지를 맹신하면 커버리지를 올리려고 비슷한 테스트 케이스를 만들려는 경향이 놓음.

MCDC pair 만들기

조건에 영향을 주는 여러개의 변수중 하나의 변수가

boundary test

04-1 test case design 사례

널, 빈, 길이1, 길이1이상

null null null

abc ab bc 길이가 겹침 abcd ab cd 길이가 0 ab b a 길이가 -1

  1. open과 close가 사이에 문자가 0개
  2. open과 close가 같음

5 test case design 3

6 MBT(Model Based Testing)

상태 전이 테스팅

7 테스트 자동화

테스트 자동화란 소프트웨어를 사용하여 자동으로 실제 결과와 예상 결과를 비교하는 것

Manual vs Automated

Manual Testing Automated Testing
사람 실수 발생 가능 안정적
느림 빠름
탐색 테스팅, 사용성 테스팅에 적합 회귀 테스특와 퍼포먼스 테스트에 적합
초기 비용 낮음 초기 비용 높음
ROI 낮음 ROI 높음
사용자 친화적  

테스트 자동화 과정

  1. 자동화 툴 선정
  2. 자동화 SUT 선정
  3. 테스트 suite와 script 작성
  4. 테스트 실행
  5. 유지보수

JUnit

자바 테스트 자동화 프레임워크

method

annotation

Data-Driven Tests

미리 정의된 입출력 Set을 사용하여 동일한 테스트를 반복

@ParameterizedTest
@CsvSource()
void calTest(){}

8 단위 테스트

단위 시험 특징

Test Double

실제로 동작하는 것처럼 보이게 만들어 놓은 dummy 객체

Mock 프레임워크

Test Driver

테스트할 unit을 호출함

Test Harness

테스트 실행을 도와주는 테스트 드라이버, 스텁 및 기타 도구

단위 테스트 중지 조건

9 통합 테스팅

통합 오류

통합 테스트 케이스 선정 기준

통합 테스트 종류

빅뱅의 단점

incremental testing이 더 우수하다 할 수 있음

TDT vs BUT

|TDT|BUT| |:–:|:–:| |테스트 스텁|테스트 드라이버| |여러 버전의 스텁 필요|드라이버 하나만 있으면 됨| |상위 모듈이 중요할 때|하위 모듈이 중요할 때| |초기에 시연 가능|테스트 출력 관찰 쉬움|

Call Graph-Based Integration

decomposition-based integration의 문제를 해결

Pairwise Integration

Neighborhood Integration

Path-base Integration

10 Higher Order Testing

과정

  1. alpha test(functional test, system test): 최종 사용자처럼 테스트
  2. acceptance test
  3. beta test(installation test): 고객의 대표자가 테스트
    • Open beta: 모든 사람이 테스트 가능
    • Closed beta: 제한된 사람만이 테스트 가능
  4. release
  5. gamma test(post-deployment test): 제품의 배포가 준비되었는지, 피드백 받음

Functional Testing (System level)

System Testing

형상 테스트(Configuration Test)

소프트웨어가 설치되거나 연결될 하드웨어의 조합 테스트

호환성 테스트(Compatibility Test)

소프트웨어가 다른 소프트웨어와 더불어 작동해도 문제가 없는지

순응 테스트(Comformence Test)

각종 프로토콜, 표준, 지침을 지키는지

Localization Test

번역 이상 없는지

종류

Acceptance Testing

Installation Testing

회귀 시험

시험 종료 조건