애플리케이션 테스트케이스 설계
- 소프트웨어 테스트
- 개념
- 구현된 소프트웨어의 동작과 성능, 사용성, 안정성 등을 만족하기 위해 소프트웨어의 결함을 찾아내는 활동
- 소프트웨어 테스트 필요성
- 오류 발견 관점
- 오류 예방 관점
- 품질 향상 관점
- 스포트웨어 테스크의 기본 원칙
- 테스팅은 결함이 존재함을 밝히는 활동
- 완벽한 테스팅은 불가능하다
- 테스팅은 개발 초기에 시작해야 한다.
- 결함 집중(Defect Clustering)
- 애플리케이션 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재한다
- 파레토 법칙: 전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상
- 살충제 패러독스(Presticide Paradox)
- 동일한 테스트 케이스로 반복 실행하면 결함을 발견할 수 없으므로 주기적으로 테스트케이스를 리뷰하고 개선해야 한다.
- 테스팅은 정황(Context)에 의존한다.
- 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행해야 한다.
- 오류 부재의 궤변(Absence of Errors Fallacy)
- 사용자의 요구사항을 만족하지 못하는 오류를 발견하고 그 오류를 제거하였다 해도, 해당 애플리케이션의 품질이 높다고 말할 수 없다.
- 개념
- 테스트 오라클
- 개념
- 테스트의 결과가 참인지 거짓인지를 사전에 정의된 참 갑을 입력하여 비교하는 기법
- 테스트 오라클의 유형
- 참 오라클
- 항상 참이 되어야 하는 테스트
- 모든 테스트 케이스 입력값의 기대 결과를 확인
- 항공기, 임베디드, 발전소 소프트웨어 등 크리티컬한 업무
- 샘플링 오라클
- 특정한 몇 개의 입력 값에 대해서만 기대하는 결과를 제공해 주는 오라클
- 일반, 업무용, 게임, 오락 등의 일반적인 업무
- 휴리스틱 오라클
- 샘플링 오라클을 개선한 오라클
- 특정 입력 값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 휴리스틱(추정)으로 처리하는 오라클
- 일관성 검사 오라클
- 어플리케이션 변경이 있을 때, 수행 전과 후의 결과 값이 동일한지 확인하는 오라클
- 참 오라클
- 개념
- V 모델 (테스트 레벨)
- 단위 테스트
- 정적 테스트: 시스템 소스 코드 내부를 보며 테스트
- 동적 테스트: 시스템 소스 코드의 동작을 보며 테스트
- 통합 테스트
- 하향식 테스트
- 스텁
- 상향식 테스트
- 드라이버
- 빅뱅 테스트
- 백본 테스트
- 하향식 테스트
- 시스템 테스트
- 기능 테스트
- 인수 테스트
- 인수 테스트
- 알파 테스트
- 베타 테스트
- 단위 테스트
- 프로그램 실행 여부
- 정적 테스트
- 소프트웨어의 실행 없이 소스코드의 구조를 분석하여 논리적으로 검증하는 테스트
- 동적 테스트
- 소프트웨어를 실행하여 실제 발생하는 오류를 발견하여 문제를 해결하는 분석 기법
- 정적 테스트
- 테스트 기법
- 화이트박스 테스트
- 개념
- 소프트웨어의 내부 구조와 동작을 검사하는 테스트 방식
- 소스 코드 내부를 보는 테스트
- 기법
- 문장 검증: 프로그램의 모든 문장을 한 번 수행하여 검증
- 선택 검증: 선택하는 부분만 검증
- 경로 검증: 수행 가능한 모든 경로 검증
- 조건 검증: 조건이나 반복문 내 조건식을 검사
- 기초 경로 검사
- McCabe가 제안한 것으로 대표적인 화이트박스 테스트 기법
- 값 구하는 방법: 변으로 둘러싸여 있는 면의 개수 + 1
- 개념
- 블랙박스 테스트
- 개념
- 프로그램의 요구사항 명세를 보면서 테스트**, 주로 구현된 기능을 테스트**
- 동작 상태를 보며 테스트
- 기능
- 동등 분할 기법
- 입력 자료에 초점을 맞춰 테스트 케이스를 만들어 검사하는 방법
- ex) 90 ~ 100 =⇒ 95
- 경계값 분석 기법
- 입력 값의 중간값보다 경계값에서 오류가 발생할 확률이 높다는 점을 이용
- ex) 90 ~ 100
- 89,90,91, 99, 100, 101
- 원인 효과 기법
- 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
- 오류 예측 검사
- 과거의 경험이나 테스터의 감각으로 테스트하는 기법
- 비교 검사 기법
- 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
- 동등 분할 기법
- 개념
- 테스트에 대한 시각
- 검증(Verification)
- 소프트웨어의 개발 과정을 테스트
- 개발자
- 확인(Validation)
- 완성된 소프트웨어의 결과를 테스트
- 사용자
- 검증(Verification)
- 테스트 목적
- 회복 테스트
- 시스템에 고의로 실패를 유도하고 시스템이 정상적으로 복귀하는지 테스트
- 안전 테스트
- 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스 코드 내의 보안적인 결함을 미리 점검하는 테스트
- 강도 테스트
- 시스템에 과다 정보량을 부과하여 과부하 시에도 시스템이 정상적으로 작동되는지 검증하는 테스트
- 성능 테스트
- 시스템의 응답하는 시간, 처리량, 반응속도 등을 테스트
- 구조 테스트
- 시스템의 내부 논리 경로, 소스코드 복잡도를 평가하는 테스트
- 회귀 테스트
- 변경 또는 수정된 코드에 대해 새로운 결함 발견 여부를 평가하는 테스트
- 병행 테스트
- 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트
- A/B 테스트
- 기존 서비스 A와 새로 적용하고 싶은 B 서비스를 통계적인 방법으로 비교해 새로운 서비스가 기존 서비스에 비해 정말 효과가 있는지 알아보는 테스트
- 스모크 테스트
- 본격적인 테스트 수행에 앞서 테스트 환경의 테스트가 가능한지 여부를 판단하기 위해 간단하게 테스트
- 회복 테스트
- 테스트 종류
- 명세 기반 테스트
- 주어진 명세를 빠짐없이 테스트 케이스로 구현하고 있는지 확인하는 테스트
- 구조 기반 테스트
- 소프트웨어 내부 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트
- 경험 기반 테스트(QA)
- 경험이 많은 테스터의 직관과 기술 능력을 기반으로 수행하는 테스트
- 명세 기반 테스트
- 화이트박스 테스트
- 테스트 커버리지
- 개념
- 테스트를 얼마나 수행했는지 측정하는 기준
- 테스트 커버리지 유형
- 기능 기반 커버리지
- 애플리케이션의 전체 기능을 모수로 설정하고, 테스트가 수행된 기능의 수를 측정.
- 라인 커버리지
- 애플리케이션 전체 소스코드의 Line수를 모수로 설정하고, 테스트가 수행된 소스코드의 Line 수를 측정
- 코드 커버리지
- 소스코드의 구문, 조건, 결정 등의 코드 구조 자체가 얼마나 테스트되었는지를 측정하는 방법
- 유형
- 구문 커버리지
- 코드 구조 내의 모든 구문에 대해 한 번 이상 수행하는 테스트 커버리지
- 예를 들어 모든 구문이 있고 조건이 맞지 않아 내부 코드로 들어가지 못할 경우 해당 구문을 빼고 수행을 한 구문만 카운팅
- 조건 커버리지
- 결정 포인트 내의 모든 개별 조건식에 대해 수행하는 테스트 커버리지
- 개별 조건식에 각각 True, False이며 때 결정 포인트의 값이 어떠하든 상관 없다.
- 결정 포인트: if 안의 문이 참이 나올지 거짓이 나올지
- 개별 조건식: if 의 조건 각각에 대한 것
- 결정 커버리지
- 결정 포인트 내의 모든 분기문에 대해 수행하는 테스트 커버리지
- 개별 조건식은 상관 없이, 결정 포인트만 True, False가 나오면 된다.
- 조건/결정 커버리지
- 결정 포인트, 개별 조건식 각각 모두 True, False가 나와야 한다.
- 변경 조건/결정 커버리지
- 모든 결정 포인트 내의 개별 조건식은 적어도 한 번 T/F를 가져야 한다.
- 조건/결정 커버리지처럼 결정 포인트, 개별 조건식 각각 모두 True, False가 나와야 하는데 적어도 한번만 나오면 된다.
- 다중 조건 커버리지
- 결정 포인트 내 모든 조건식의 가능한 조합을 100% 보장해야 한다.
- 구문 커버리지
- 기능 기반 커버리지
- 개념
- 결함관리 도구
- 개념
- 각 단계별 테스트 수행 후 발생한 결함의 재발 방지를 위해, 유사 결함 발견 시 처리 시간 단축을 위해 결함을 추적하고 관리할 수 있게 해주는 도구
- 결함관리 프로세스
- 에러 발견
- 에러 등록
- 에러 분석
- 결함 확정
- 결함 할당
- 결함 조치
- 결함 조치 검토 및 승인
- 개념
- 테스트 자동화 도구
- 개념
- 테스트 작업을 스크립트 형태로 구현하여 테스트를 반복 수행
- 테스트 자동화 도구 유형
- 정적 분석 도구
- 애플리케이션을 실행하지 않고 분석하는 도구
- 코딩 표준, 코딩 스타일, 복잡도 및 남은 결함을 발견하기 위하여 사용
- 테스트 실행 도구
- 테스트를 위해 작성된 스크립트를 실행
- 성능 테스트 도구
- 많은 수의 가상의 사용자를 생성해서 부하를 테스트
- 테스트 통제 도구
- 테스트 관리 도구: 테스트 계획 및 관리
- 형상 관리 도구: 테스트 수행에 필요한 데이터와 도구를 관리
- 결함 추적/관리 도구: 테스트에서 발생한 결함에 대해 관리하거나 협업을 지원
- 테스트 장치(Test Harness)
- 개념
- 애플리케이션 컴포넌트 및 모듈을 테스트하는 환경의 일부분
- 테스트를 지원하기 위한 코드와 데이터
- 구성요소
- 테스트 드라이버: 상향식 테스트
- 테스트 스텁: 하향식 테스트
- 테스트 슈트: 테스트 케이스의 집합
- 테스트 케이스: 입력 값, 실행 조건, 기대 결과 등의 집합
- 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세
- 목 오브젝트
- 사용자의 행위를 조건부로 사전에 입력해 두면, 그 상황에 예정된 행위를 수행하는 객체
- 목만 있다고 생각하면 결과는 없지만 조건에 맞는 행위를 수행할 수 있다.
- 개념
- 정적 분석 도구
- 개념
- 통합 테스트
- 개념
- 단위테스트가 끝난 모듈을 통합하는 과정에서 발생할 수 있는 오류를 찾는 테스트 기법
- 통합 테스트 수행 방법의 분류
- 점증적 방식
- 상향식 테스트 통합 테스트
- 하향식 테스트 통합 테스트
- 비 점증적 방식
- 빅뱅 테스트 통합 테스트
- 점증적 방식
- 개념
애플리케이션 성능 개선
- 애플리케이션 성능 저하 원인
- 데이터베이스 관련 성능 저하
- 데이터베이스 락(DB Lock)
- 대량의 데이터 조회, 과도한 업데이트 시 발생하며, Lock 해제 시까지 대기하거나 타임아웃 된다.
- 불필요한 패치(DB Fetch)
- 결과 세트에서 커서를 옮기는 작업이 빈번할 때 발생
- 연결 누수(Connection Leack)
- DB Connection 사용 후 반환하지 않을 경우 발생
- Connection Pool 크기가 너무 작거나 크게 설정된 경우 발생
- 데이터베이스 락(DB Lock)
- 데이터베이스 관련 성능 저하
- 애플리케이션 성능 분석
- 애플리케이션 성능 분석 지표
- 처리량
- 응답 시간
- 반환 시간
- 자원 사용률
- 성능 분석 도구
- JMeter
- HTTP, FTP(File Transfer Protocol) 등 다양한 프로토콜을 지원하는 부하 테스트 도구
- LoadUI
- 웹 서비스의 로드 테스트
- 테스트 형태에 따른 분산 UI 제공
- UI를 통하여 동시 및 별도의 결과보고 제공 가능
- OpenSTA
- HTTP, HTTPS 프로토콜에 대한 부하 테스트 및 생산품 모니터링 도구
- JMeter
- 모니터링 도구
- Scouter
- 단일 뷰 통합/실시간 모니터링
- NMon
- 리눅스 서버 자원에 대한 모니터링 도구
- Zabbix
- 웹기반 서버, 서비스, 애플리케이션 모니터링 도구
- Jeniffer
- 애플리케이션에서 서버로 유입되는 트랜잭션 수량, 처리시간, 응답시간, 자원 활용률 등을 모니터링
- Scouter
- 애플리케이션 성능 분석 지표
- 정형 기술 검토회의(FTR, Formal Technical Review)
- 개념
- 소프트웨어 엔지니어가 수행하는 소프트웨어 품질보증 활동
- 목적
- 산출물 요구사항 일치여부
- 소프트웨어가 미리 정한 기준에 따라 표현되었는가를 확인
- 소프트웨어의 표현에 대한 기능, 논리적 오류
- 프로젝트를 보다 관리하기 쉽게 만든다.
- 개념
- 소스 코드 품질 분석
- 개념
- 소스 코드 품질 분석을 통해 리팩토링이 이루어진다.
- 종류
- 동료검토
- 워크스루
- 인스펙션
- 소스코드 품질 분석 도구 종류
- 정적 분석 도구
- PMD
- CppCheck
- SonarQube
- Checkstyle
- ccm
- cobertura
- 동적 분석 도구
- Avalanche
- Valgrind
- 정적 분석 도구
- 개념
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 데이터베이스 구축 (1) (0) | 2023.07.06 |
---|---|
[정보처리기사] 소프트웨어 구축 (7) (0) | 2023.07.06 |
[정보처리기사] 소프트웨어 구축 (5) (0) | 2023.07.05 |
[정보처리기사] 소프트웨어 구축 (4) (0) | 2023.07.05 |
[정보처리기사] 소프트웨어 구축 (3) (0) | 2023.07.04 |