티스토리 뷰
애플리케이션 테스트 원리
- 완벽한 테스팅은 불가능
- 파레토 법칙: 20% 코드에서 전체 결함의 80%가 발견된다.
- 살충제 패러독스: 동일한 테스트를 반복하면서 더 이상 결함이 발견되지 않는 현상
- 정황 의존성: 소프트웨어 성격에 맞게 테스트 실시
- 오류-부재의 궤변: '요구사항'을 충족시켜주지 못하면 결함이 없다해도 품질이 높다고 할 수 없음
프로그램 실행 여부에 따른 분류
- 정적 테스트: 테스트 대상을 실행하지 않고 구조를 분석하여 논리성을 검증하는 테스트
- 동적 테스트: 소프트웨어를 실행하는 방식으로 테스트를 수행하여 결함을 검출하는 테스트 (화이트박스.블랙박스.)
화이트박스 테스트
- 구문 커버리지: 프로그램 내 모든 명령문을 적어도 한 번 수행하는 커버리지
- 결정 커버리지: 결정 포인트 내 전체 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 커버리지
- 조건/결정 커버러지: 모두 참 한 번 거짓 한 번 결과가 수행되도록 하는 커버리지
- 변경 조건/결정 커버리지: 개별 조건식이 전체 조건식에 독립적으로 영향을 주도록 하는 커버리지
- 다중 조건 커버리지: 결정 조건 내 모든 개별 조건식의 모든 가능한 조합은 100% 보장하는 커버리지
- 기본 경로 커버리지: 수행 가능한 모든 경로를 테스트하는 기법
- 제어 흐름 테스트: 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법
- 데이터 흐름 테스트: 제어 흐름 그래프에 사용현황을 추가하는 테스트 기법
블랙박스 테스트: 사용자의 요구사항 명세를 보면서 수행하는 테스트
- 동등 분할 테스트: 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 테스트 케이스를 도출하여 테스트하는 기법
- 경곗값 분석 테스트: 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법
- 결정 테이블 테스트: 요구사항의 논리와 발생조건을 테이블로 나열하여 조건과 행위를 모두 조합하여 테스트
- 상태 전이 테스트: 전이 되는 경우의 수를 수행하는 테스트
- 분류 트리 테스트: 트리구조로 분석 및 표현하여 테스트 케이스 설계하여 테스트
- 페어와이즈 테스트: 테스트 데이터 값들 간에 최소한 한 번씩을 조합하는 방식
- 원인-결과 그래프 테스트: 그래프를 활용해 입력 데이터 간 관계 및 출력에 미치는 영향을 분석하여 효용성이 높은 케이스를 선정하여 테스트
- 비교 테스트: 여러 버전 프로그램에 같은 입력값을 넣어 동일한 데이터가 나오는지를 비교하는 테스트
테스트 시각에 따른 분류
- 검증: 소프트웨어 개발 과정을 테스트, 개발자 또는 시험자 시각
- 확인: 소프트웨어 결과를 테스트, 사용자 시각
테스트 목적에 따른 분류
- 회복 테스트: 시스템에 고의로 실패를 유도하고 시스템의 정상을 테스트 하는 기법
- 안전 테스트: 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스 코드 내 보안적 결함을 미리 점검하는 테스트 기법
- 성능 테스트: 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 측정하는 테스트 기법
- 구조 테스트: 시스템의 내부 논리 경로, 소스 코드의 복잡도를 평가하는 테스트 기법
- 회귀 테스트: 시스템 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트
- 병행 테스트: 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트
성능 테스트 유형
- 부하: 시스템에 부가를 계속 증가시켜 시스템의 임계점을 찾는 테스트
- 강도: 임계점 이상의 부하를 가하여 비정상적인 상황에서의 처리 테스트
- 스파이크: 짧은 시간에 사용자가 몰릴 때 시스템 반응 측정 테스트
- 내구성: 오랜 시간 동안 시스템에 높은 부하를 가하여 시스템 반응 테스트
테스트 종류에 따른 분류
- 명세 기반(블): 프로그램 요구사항 명세서를 기반으로 테스트 케이스를 선정하여 테스트 하는 기법
- 구조 기반(화): 내부 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트 기법
- 경험 기반(블): 테스터의 경험을 기반으로 수행하는 테스트 기법
테스트 케이스: 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 테스트 항목에 대한 명세서
테스트 오라클: 테스트 결과가 올바른지 판단하기 위한 사전 정의 참 값을 대입하여 비교하는 기법
- 참 오라클: 모든 입력값에 대하여 기대하는 결과를 제공하는 오라클
- 샘플링 오라클: 특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공해주는 오라클
- 휴리스틱 오라클: 특정 입력값에 대해 올바른 결과를 제공하고 나머지 값들에 대해서는 추정으로 처리하는 오라클
- 일관성 검사: 애플리케이션 변경이 있을 때 수행 전과 후의 결과값이 동일한지 확인하는 오라클
테스트 레벨 종류
- 단위 테스트
- 통합 테스트
- 시스템 테스트
- 인수 테스트
테스트 시나리오
- 테스트 수행을 위한 여러 테스트 케이스의 집합, 테스트 케이스의 동작 순서를 기술한 문서이고 테스를 위한 절차를 명세한 문서
단위 테스트: 개별적인 모듈을 테스트
통합 테스트
- 빅뱅 테스트: 모든 모듈을 동시에 통합한 후 테스트 수행
- 상향식 테스트: 최하위 모듈부터 점진적으로 상위 모듈과 함께 테스트
- 하향식 테스트: 최상위 모듈부터 하위 모듈들을 통합하면서 테스트
- 샌드위치 테스트: 상위는 하향식 + 하위는 상향식 테스트
테스트 자동화 도구
- 정적 분석 도구: 만들어진 애플리케이션을 실행하지 않고 분석하는 도구
- 테스트 실행 도구: 테스트를 위해 작성된 스크립트를 실행
- 성능 테스트 도구: 가상의 사용자를 생성하고 테스트를 수행하여 목표를 달성했는지 확인하는 도구
- 테스트 통제 도구: 테스트 계획 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 테스트 하네스 도구: 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스 구성요소: 드라이버, 스텁, 슈트, 케이스, 시나리오, 스크립트, 목 오브젝트
테스트 커버리지
- 기능기반 커버리지: 전체 기능을 모수로 설정하고 실제 테스트가 수행된 기능의 수를 측정하는 방법
- 라인 커버리지: 전체 소스 코드 라인수를 모수로 소스 코드의 라인수 측정
- 코드 커버리지: 소스 코드의 구문, 조건, 결정 등의 구조 코드 자체가 얼마나 테스트 되었는지를 측정하는 방법
애플리케이션 성능 측정 지표
- 처리량: 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수
- 응답시간: 사용자 입력이 끝난 후 응답 출력이 개시될 때가지의 시간
- 경과시간: 애플리케이션에 사용자 요구를 입력한 시점부터 트랜잭션을 처리한 후 그 출력이 완료될 때까지 걸리는 시간
- 자원사용률: 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사용량
데이터베이스 관련 성능 저하 원인
- DB Lock: 데이터베이스 락은 대량의 데이터 조회, 과도한 업데이트, 인덱스 생성 시에 발생하는 현상
- DB Fetch: 실제 필요한 데이터보다 많은 대량의 데이터 요청이 들어올 경우 응답 시간의 저하 현상 발생
- Connection Leak: DB 연결과 관련한 JDBC 객체를 사용 후 종료하지 않을 경우 발생
- 부적절한 커넥션 풀 크기: 너무 작거나 크게 설정한 경우 성능 저하 현상이 발생할 가능성 존재
- 확정(Commit) 관련: 트랜잭션이 확정되지 않고 커넥션 풀에 반환될 때 성능 저하 가능성 존재
베드 코드: 프로그램 로직이 복잡하고 다른 개발자들이 이해하기 어려운 코드
클린 코드: 가독성이 높고, 단순, 의존성을 줄이고 중복을 최소화하여 깔끔하게 정리 된 코드
리팩토링: 기능을 변경하지 않고, 복잡한 소스코드를 수정 및 보완하여 가용성 및 가독성을 높이는 기법
'정처기 실기' 카테고리의 다른 글
정처기 실기 약술형 정리 (0) | 2023.07.18 |
---|---|
정처기 실기 단답식 정리 (커서 잡으면 답 나옴) (0) | 2023.07.17 |
9. 소프트웨어 개발 보안 구축 (0) | 2023.07.12 |
8. 서버프로그램 구현 (0) | 2023.07.12 |
4. 통합 구현 | 5. 인터페이스 구현 (0) | 2023.07.12 |