[정보처리기사]10단원
X 애플리케이션 테스트 관리
01 애플리케이션 테스트 케이스 설계
1. 애플리케이션 테스트 케이스 작성
(1) 소프트웨어 테스트의 이해
2. 소프트웨어 테스트 필요성
- 오류 발견 관점
- 오류 예방 관점: 동료 검토, 워크 스루, 인스펙션
- 품질 향상 관점: 신뢰도 향상
3. 소프트웨어 테스트 기본 원칙
1) 소프트웨어 테스트 원리
- 결함 존재 증명: 존재 밝히는 것
- 완벽 테스팅은 불가능: 완벽은 시간 낭비, 무한 불가능
- 초기 집중: 조기 테스트 좋음, 요르돈의 법칙
- 결함 집중: 오류 80%는 모듈 20%에서 발견, 파레토 법칙
- 살충제 패러독스: 반복적 테스트는 효율x
- 정황 의존성: 정황과 도메인에 따라 테스트
- 오류-부재의 궤변: 요구사항 없으면 품질↓
2) 소프트웨어 테스트 프로세스
- 테스트 계획: 목적과 범위 정의, 구조 파악, 일정, 비용 산정
- 테스트 분석 및 디자인: 목적과 원칙 검토, 요구사항 분석, 우선순위, 테스트 데이터 준비
- 테스트 케이스 및 시나리오 작성: 테스트 케이스, 스크립트, 시나리오
- 테스트 수행: 데이터 로딩, 결함 리포팅
- 테스트 결과 평가 및 리포팅: 결과 정리, 리뷰
3) 소프트웨어 테스트 산출물
- 테스트 계획서: 목적과 범위 정의
- 테스트 베이시스: 논리적인 케이스
- 테스트 케이스: 설계 산출물(입력값, 실행 조건, 기대 결과)
- 테스트 슈트: 케이스 집합(시나리오x)
- 테스트 시나리오: 테스트 케이스와 일 대 다
- 테스트 스크립트: 케이스 실행 순서
- 테스트 결과서: 결과 평가, 리포팅
(2) 소프트웨어 테스트 유형
1. 프로그램 실행 여부에 따른 분류
- 정적 테스트: 구조 분석(리뷰, 정적 분석)
- 동적 테스트: 실행 후 결함 검출(화이트박스 테스트, 블랙박스 테스트, 경험기반 테스트)
2. 테스트 기법에 따른 분류
1) 화이트박스 테스트
- 구문 커버리지: 명령문 모두 수행, 구문 실행 개수
- 결정 커버리지: 전체 조건식 참과 거짓 수행, 구문 포함
- 조건 커버리지: 개별 조건식 참과 거짓 수행, 구문 포함
- 조건/결정 커버리지: 전체+개별 조건식
- 변경 조건/결정 커버리지: 개별 조건식이 영향 안 받게
- 다중 조건 커버리지: 개별 조건식 조합 100% 보장
- 기본 경로 커버리지: 모든 경로 테스트, 맥케이브 순환복잡도
- 제어 흐름 테스트: 그래프 형태
- 데이터 흐름 테스트: 그래프+데이터
- 루프 테스트: 반복 구조
2) 블랙박스 테스트
- 동등분할 테스트: 그룹핑, 대푯값
- 경곗값 분석 테스트: 경곗값
- 결정 테이블 테스트: 요구사항 논리, 발생조건 테이블로
- 상태 전이 테스트: 이벤트로 상태 전이
- 유스케이스 테스트: 유스케이스로 모델링
- 분류 트리 테스트: 트리 구조
- 페어와이즈 테스트: 한 번씩 조합
- 원인-결과 그래프 테스트: 입력-출력 영향
- 비교 테스트: 같은 입력값 넣고 비교
- 오류 추정 테스트: 실수 추정
3. 테스트 시각에 따른 분류
- 검증: 개발 과정
- 확인: 결과
4. 테스트 목적에 따른 분류
- 회복 테스트: 고의로 실패, 정상적 복귀
- 안전 테스트: 보안적인 결함 점검
- 성능 테스트
- 부하 테스트: 부하 증가, 임계점, 병목 현상 제거
- 강도 테스트: 임계점 이상의 부하
- 스파이크 테스트: 사용자 몰릴 때
- 내구성 테스트: 오랜 시간 높은 부하
- 구조 테스트: 논리 경로, 코드 복잡도
- 회귀 테스트: 수정에 의한 새로운 오류 확인
- 병행 테스트: 변경-기존 같은 데이터 입력 후 결과 비교
5. 테스트 종류에 따른 분류
- 명세 기반 테스트(블랙박스)
- 구조 기반 테스트(화이트박스)
- 경험 기반 테스트(블랙박스)
(3) 정적 테스트
1. 리뷰: 수작업
- 동료 검토: 2~3명
- 인스펙션: 전문가 or 팀, 개발 초기 검사
- 워크 스루: 회의
2. 정적 분석: 도구
(4) 동적 테스트
1. 화이트박스
2) 테스트 커버리지 유형
- 기능 기반 커버리지: 전체 기능 모수, 화면 수 모수
- 라인 커버리지: 라인 수
- 코드 커버리지: 일반적인 테스트 커버리지
3) 테스트 커버리지 구성
- 구문: 명령문 다 수행
- 결정: 전체 조건식 수행
- 조건: 개별 조건식 수행
- 결정 포인트
2. 블랙박스
3. 경험 기반 테스트
- 탐색적 테스트: 경험
- 오류 추정: 실수 추정
(5) 테스트 케이스
3. 테스트 케이스 필요 항목
- 공통 작성 항목 요소
- 테스트 단계명, 작성자, 승인자, 작성 일자, 문서 버전
- 대상 시스템
- 변경 여부
- 테스트 범위
- 테스트 조직
- 개별 테스트 케이스 항목 요소
- 테스트 ID
- 테스트 목적
- 테스트할 기능
- 테스트 데이터
- 예상 결과
- 테스트 환경
- 테스트 조건
- 성공/실패 기준
- 기타 요소
(6) 테스트 오라클
1. 개념
결과가 참인지 거짓인지 판단하기 위해 참값 입력하여 비교
2. 종류
- 참 오라클: 모든 입력값
- 샘플링 오라클: 특정 입력값
- 휴리스틱 오라클: 특정 입력값 → 올바른 결과, 나머지 → 휴리스틱
- 일관성 검사 오라클: 변경 후 동일한지 확인
2. 애플리케이션 테스트 시나리오 작성
(1) 테스트 레벨
2. 테스트 레벨 종류
- 단위 테스트: 단위 모듈, 서브루틴(명세 기반, 구조 기반)
- 통합 테스트: 인터페이스, 상호 작용
- 시스템 테스트: 정상적으로 수행
- 인수 테스트: 계약 요구사항(알파, 베타)
02 애플리케이션 통합 테스트
1. 애플리케이션 테스트 수행
(1) 단위 테스트
1. 단위 테스트 수행 도구
- 테스트 드라이버: 수행 후 결과 도출, 상위 모듈
- 테스트 스텁: 조건 수행, 하위 모듈
(2) 통합 테스트
1. 점증적인 방식
- 하향식 통합: 깊이 우선, 너비 우선, 스텁
- 상향식 통합: 아래에서 위로, 드라이버, 클러스터
- 샌드위치 통합: 상향+하향, 드라이버/스텁
2. 비점증적인 방식
- 빅뱅 테스트
(3) 테스트 자동화 도구
3. 테스트 자동화 도구 유형
1) 정적 분석 도구: 코드 이해
2) 테스트 실행 도구
- 데이터 주도 접근 방식: 데이터를 저장
- 키워드 주도 접근 방식: 키워드와 데이터 저장
3) 성능 테스트 도구: 성능 목표 확인
4) 테스트 통제 도구: 형상 관리 도구
4. 테스트 하네스
- 테스트 드라이버: 상향식 테스트
- 테스트 스텁: 하향식 테스트
- 테스트 케이스: 입력값, 실행 조건, 기대 결과
- 테스트 슈트: 테스트 케이스 집합
- 테스트 시나리오: 상황
- 테스트 스크립트: 자동화 테스트 실행 절차
- 목 오브젝트: 입력하면 수행하는 객체
2. 애플리케이션 테스트 결과 분석
(1) 테스트 결과 분석
1. 소프트웨어 결함
- 오류: 결함의 원인, 실수
- 결점: 고장 일으킴
- 버그: 프로그램 오류
- 고장/문제: 결함이 실행될 때
(2) 결함 관리
2. 결함 관리 프로세스
- 결함 관리 계획: 계획 수립
- 결함 기록: DB에 기록
- 결함 검토: 검토 후 개발자에게 전달
- 결함 수정: 개발자가 수정
- 결함 재확인: 다시 테스트
- 결함 상태 추적 및 모니터링 활동: 게시판 서비스
- 최종 결함 분석 및 보고서 작성: 보고서 작성
3. 결함 생명주기
- 결함 등록: 결함 보고서에 기록
- 결함 검토: 처리 방안 검토
- 결함 할당: 개발자 결정
- 결함 수정: 개발자가 수정
- 결함 확인: 처리 정확한지 검증
- 결함 종료: 수정 완료 후 종료
- 결함 재등록: 다시 수정
- 결합 조치 보류: 해결 연기
3. 애플리케이션 개선 조치사항 작성
(1) 테스트 커버리지
1. 개념
- 테스트 품질 측정 기준
- 정확성, 신뢰성 향상
2. 유형
- 기능 기반 커버리지: 전체 기능 모수
- 라인 커버리지: 라인 수
- 코드 커버리지: 구조 코드(일반적)
(2) 결함의 식별 및 관리
1. 결함 심각도별 분류
- 치명적 결함: 완전히 방해(데이터 손실, 시스템 충돌)
- 주요 결함: 기능 수행 이상(기능 장애)
- 보통 결함: 특정 기준 부자연(사소한 기능 오작동)
- 경미한 결함: 불편함(UI 잘림)
- 단순 결함: 사소한 버그
03 애플리케이션 성능 개선
1. 애플리케이션 성능 분석
(1) 애플리케이션 성능 분석
1. 애플리케이션 성능 측정 지표
- 처리량: 처리할 수 있는 트랜잭션 수
- 응답 시간: 입력이 끝난 후
- 경과 시간: 입력한 시점부터
- 자원 사용률: 사용량
2. 애플리케이션 성능 개선
(1) 소스 코드 최적화의 이해
1. 배드 코드
- 외계인 코드: 아주 오래됨
- 스파게티 코드: 복잡하게 얽힘
- 알 수 없는 변수명: 이름 모르겠음
- 로직 중복: 로직 중복됨
2. 클린 코드: 깔끔하게 잘 정리된 코드
(3) 애플리케이션 성능 개선 방안
5. 리팩토링
1) 개념
- 유지보수 생산성 향상
- 기능 변경x
- 소스 코드 수정, 보완
- 가용성, 가독성 높임
2) 목적
- 유지보수성 향상: 코드 단순화, 가독성↑
- 유연한 시스템: 유연한 대응
- 생산성 향상: 소스 재사용
- 품질 향상: 오류발견 용이, 품질 향상
댓글남기기