반응형
애플리케이션 테스트 기본 원리
- 완벽한 테스트 불가능 : 소프트웨어의 잠재적인 결함을 줄일 수 있찌만 소프트웨어에 결함이 없다고 증명할 수는 없음.
- 파레토 법칙 : 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙
- 살충제 패러독스 : 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상
- 테스팅은 정황 의존 : 소프트웨어의 특징, 테스트 환경, 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로 정황에 따라 테스트를 다르게 수행해야 함
- 오류 - 부재의 궤변 : 소프트웨어의 결함을 모두 제거해도 사용자의 요구사항을 만족시키지 못하면 해당 소프트웨어는 품질이 높다고 말할 수 없는 것
- 테스트와 위험은 반비례
- 테스트의 점진적 확대
- 테스트의 별도 팀 수행
애플리케이션 테스트의 분류
프로그램 실행 여부에 따른 테스트
- 정적 테스트
- 동적 테스트
테스트 기반에 따른 테스트
- 명세 기반 테스트
- 구조 기반 테스트
- 경험 기반 테스트
시각에 따른 테스트
- 검증 테스트 : 개발자의 시각에서~
- 확인 테스트 : 사용자의 시각에서~
목적에 따른 테스트
- 회복 테스트 : 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인하는 테스트
- 안전 테스트 : 시스템에 설치된 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인하는 테스트
- 강도 테스트 : 시스템에 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인하는 테스트
- 성능 테스트 : 소프트웨어의 실시간 성능이나 전체적인 효율성을 진단하는 테스트
- 구조 테스트 : 소프트웨어 내부의 논리적 경로, 소스 코드의 복잡도 등을 평가하는 테스트
- 회귀 테스트 : 소프트웨어의 변경 또는 수정된 코드에서 새로운 결함이 없음을 확인하는 테스트
- 병행 테스트 : 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
화이트박스 테스트
- 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
화이트박스 테스트 종류
기초 경로 검사 | ▪ 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법 ▪ 대표적인 화이트박스 테스트 기법임 |
제어 구조 검사 | ▪ 조건 검사 ▪ 루프 검사 ▪ 데이터 흐름 검사 |
문장 검증 기준 | ▪ 소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스를 설계함 |
분기 검증 기준 | ▪ 소스 코드의 모든 조건문에 대해 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 ▪ 결정 검증 기준이라고도 함 |
조건 검증 기준 | ▪ 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 |
분기/조건 기준 | ▪ 분기 검증 기준과 조건 검증 기준을 모두 만족하는 설계 |
블랙박스 테스트
- 각 기능이 완전히 작동되는 것을 입증하는 테스트 (=기능 테스트)
블랙박스 테스트 종류
- 동치 분할 검사
- 경계값 분석
- 원인 - 효과 그래프 검사
- 오류 예측 검사
- 비교 검사
개발 단계에 따른 애플리케이션 테스트
단위 테스트
- 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것
통합 테스트
- 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
시스템 테스트
- 개발된 소프트웨어가 완벽하게 수행되는가를 점검하는 테스트
인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 두고 테스트
- 사용자가 직접 테스트한다!
인수 테스트 종류
▪ 사용자 인수 테스트
▪ 운영상의 인수 테스트
▪ 계약 인수 테스트
▪ 규정 인수 테스트
▪ 알파 테스트 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트
▪ 베타 테스트 : 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트
통합 테스트
하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법, 넓이 우선 통합법
- 주요 제어 모듈은 작성된 프로그램을 사용하고, 주요 제어 모듈의 종속 모듈들은 스텁(Stub)으로 대체
상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 하위 모듈들을 클러스터(Cluster)로 결합
- 상위 모듈에서 데이터의 입,출력을 확인하기 위해 더미 모듈인 드라이버(Driver)를 작성
애플리케이션 테스트 프로세스
- 테스트 계획
- 테스트 분석 및 디자인
- 테스트 케이스 및 시나리오 작성
- 테스트 수행
- 테스트 결과 평가 및 리포팅
- 결함 추적 및 관리
결함 관리 프로세스
- 에러 발견
- 에러 등록
- 에러 분석
- 결함 확정
- 결함 할당
- 결함 조치
- 결함 조치 검토 및 승인
테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 테스트 항목에 대한 명세서
테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참값을 대입하여 비교하는 기법 및 활동
- 특징 : 제한된 검증, 수학적 기법, 자동화 가능
테스트 오라클 종류
- 참 오라클 : 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클
- 샘플링 오라클 : 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 추정 오라클 : 특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공, 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클
- 일관성 검사 오라클 : 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클
복잡도
시간 복잡도
- 알고리즘을 수행하기 위해 프로세스가 수행하는 연산 횟수를 수치화한 것
접근 표기법 종류
빅오 표기법 | ▪ 알고리즘의 실행 시간이 최악일 때를 표기하는 방법 |
세타 표기법 | ▪ 알고리즘의 실행 시간이 평균일 때를 표기하는 방법 |
오메가 표기법 | ▪ 알고리즘의 실행 시간이 최상일 때를 표기하는 방법 |
빅오 표기법으로 표현한 최악의 알고리즘 시간 복잡도
O(1) | 입력값에 관계 없이 일정하게 문제 해결에 하나의 단계만을 거침 ex) 스택의 삽입, 삭제 |
O(log n) | 문제 해결에 필요한 단계가 입력값 또는 조건에 의해 감소함 ex) 이진 트리, 이진 검색 |
O(n) | 문제 해결에 필요한 단계가 입력값과 1:1의 관계를 가짐 ex) for 문 |
O(nlog n) | 문제 해결에 필요한 단계가 n(log n)번만큼 수행됨 ex) 힙 정렬, 2-Way 합병 정렬 |
O(n^) | 문제 해결에 필요한 단계가 입력값의 제곱만큼 수행됨 ex) 삽입 정렬, 버블 정렬, 쉘 정렬, 선택 정렬, 퀵 정렬 |
O(2^) | 문제 해결에 필요한 단계가 2의 입력값 제곱만큼 수행됨 ex) 피보나치 수열 |
순환 복잡도
- V(G) = E - N + 2 -> E는 화살표 수, N은 노드의 수
소스 코드 최적화
- 나쁜 코드를 배제하고, 클린 코드로 작성하는 것
- 클린 코드 : 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순, 명료한 코드
클린 코드 작성 원칙
가독성 | ▪ 누구든지 코드를 쉽게 읽을 수 있도록 작성함 |
단순성 | ▪ 코드를 간던하게 작성함 ▪ 한 번에 한 가지를 처리하도록 코드를 작성하고 클래스, 메소드, 함수 등을 최소 단위로 분리함 |
의존성 배제 | ▪ 코드가 다른 모듈에 미치는 영향을 최소화함 ▪ 코드 변경 시 다른 부분에 영향이 없도록 작성함 |
중복성 최소화 | ▪ 코드의 중복을 최소화함 |
추상화 | ▪ 상위 클래스, 메소드, 함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스, 메소드, 함수에서 구현함 |
소스 코드 품질 분석 도구의 종류
- pmd
- cppcheck
- SonarQube
- checkstyle
- ccm
- cobertura
- Avalanche
- Valgrind
반응형
'💻 my code archive > 📝Etc.' 카테고리의 다른 글
정보처리기사 실기 요점정리(8) - 응용 SW 기초 기술 활용(1) (0) | 2022.08.24 |
---|---|
정보처리기사 실기 요점정리(7) - 소프트웨어 개발 보안 구축 (0) | 2022.08.23 |
정보처리기사 실기 요점정리(5) - 화면 설계 (0) | 2022.08.21 |
정보처리기사 실기 요점정리(4) - 인터페이스 구현 (0) | 2022.08.21 |
정보처리기사 실기 요점정리(3) - 서버 프로그램 구현 (0) | 2022.08.18 |