UNIV
2022-04-13 01:46
소프트웨어공학 - 5강. 소프트웨어 테스트
- 소프트웨어 테스트: 소프트웨어 품질 보증을 위한 활동
- V&V 활동의 하나
- 요구사항의 만족을 보이거나 결함을 찾기 위한 활동
- 오류를 찾기 위한 것, 오류가 없음을 증명하는 것이 아님
- 결함 테스트
- 소규모 코드에서 결함을 찾고자 하는 것
- 검증 테스트
- 주요 시스템의 기능을 검증하기 위한 것
- 인수테스트와 같은 고수준 테스트
테스트 작업의 원칙
- 입력 값 외에 결과 값을 포함해야 함
- 프로그래밍 조직 자체적 테스트 하지 말 것
- 자신이 작성한 프로그램을 스스로 테스트 하지 말 것
- 테스트케이스를 버리지 말고 재사용할 것
테스트 프로세스
- 테스트 케이스의 설계
- 테스트 데이터의 준비
- 테스트 데이터를 가지고 실행
- 결과와 테스트 케이스 비교
- 고려 사항
- 전체 시스템 테스트 > 모듈 하나 보다 중요
단위 테스트
- 시스템을 구성하는 기본 단위를 테스트
- 결함 발견을 위해 개별적 모듈을 독립적으로 확인하는 작업
- 드라이버와 스텁을 사용
- 드라이버: 테스트되는 모듈 호출, 결과를 출력해주는 프로그램
- 스텁: 테스트되는 모듈에 의해 호출되는 모듈
통합 테스트
- 개별 모듈들을 통합하여 상호작용으로 인한 문제가 있는지 테스트
- 모듈 간의 인터페이스를 검사할 목적으로 개발됨
- 프로그램을 구축해 가는 기술 / 최종적으로 시스템이 구축됨
- 주로 블랙박스 테스트 기법을 사용
시스템 통합 방식
- 빅뱅 통합
- 모듈들을 모두 개발한 후 한꺼번에 통합
- 점증적 통합
- 모듈을 하나씩 추가하여 통합한후 테스트함
- 하향식 통합
- 점증적 통합방식
- 최상위 모듈부터 시작하여 아래 모듈들을 차례로 통합시킴
- 하위모듈에 대해 스텁이 필요
- 깊이 우선 방식과 너비 우선 방식
- 장단점
- 초기에 소프트웨어 구조가 갖추어지고 개발자에게 심리적으로 안정감을 줌
- 병행작업이 어렵고 입출력 모듈이 하위에 위치, 테스트작업이 어려움
- 하향식 통합 (깊이 우선) 과 상향식 통합 (오른쪽)
- 상향식 통합
- 최하위 -> 상위 통합과 테스트
- 클러스터: 하위 모듈 통합
- 드라이버: 통합되는 모듈 제어
테스트 방식
- 샌드위치 테스트
- 상향식과 하향식을 조합한 방식
- 회귀 테스트
- 프로그램 수정시 수정으로 인한 오류의 발생 여부를 밝히기 위한 테스트 방법
- 시스템 테스트
- 완전한 시스템이 구축되었는지 검증하기 위한 테스트
- 블랙박스 테스트 작업 수행
- 성능이나 신뢰도를 테스트 할 수 있음
- 릴리즈 테스트라고도 하며, 테스트 작업에 고객이 포함되면 인수 테스트가 됨
- 화이트박스 테스트
- 논리구조에 바탕을 둔 테스트
- 구조 테스트
- 프로그램 구현 사항을 알아야 함
- 제어흐름 그래프에서 경로를 분석하여 테스트 케이스 개발
- 소규모의 프로그램에 적용
- 자동화된 테스트 도구를 사용할 수 있음
- 코드 커버리지
- 화이트박스 테스트에서 효과적인 테스트 케이스의 집합을 구하는 기준
- 모든 가능한 실행 경로를 테스트할 수 없으므로, 적정 수의 테스트 경로를 실행해야 함
- 문장 검증 기준 (SC)
- 분기 검증 기준 (DC)
- 조건 검증 기준 (CC)
- 조건 분기 검증 기준 (CDC)
- 수정된 조건 분기 검증 기준 (MCDC)
- 복수 조건 검증 기준 (MCC)
- 경로 검증 기준
- 프로그램에 존재하는 모든 실행 가능한 경로를 한번 이상 테스트
- 반복 문장이 있다면 실행 가능한 경로의 수는 무한대 이므로 사실상 불가능
- 기본 경로 테스트
- 시작 노드에서 종료 노드까지의 선형 독립적인 경로 (기본경로)를 모두 테스트
- 매케이브의 사이클로매틱 수는 기본 경로의 개수와 일치함
- 블랙박스 테스트
- 명세서에 기초하여 기능을 검사하기 위한 테스트 데이터를 개발
- 기능적요구사항 검사 가능, 오류를 일으킬 가능성이 높은 입력 조건을 파악해야 함
- 완전 테스트
- 랜덤 테스트
- 동치 분할
- 경계값 분석
- 동치 분할 방법의 변형, 동치클래스 정의 후 경계값과 경계값 직전/직후 값을 가지고 테스트
- 원인 결과 그래프
비기능성 테스트와 성능 테스트
- 비 기능성 테스트
- 기능적 요구사항 이외의 것을 테스트
- 성능 테스트
- 평균 응답 시간, 시간당 처리율, 피크시간의 성능 검사
- 부하테스트
- 비 정상적인 높은 부하를 주고, 관찰하여 잘못된 점을 발견 (스트레스 테스트)