본문 바로가기
Data Analysis/정보처리기사

[2과목 소프트웨어 개발] 04. 애플리케이션 테스트 관리

by suvii 2024. 4. 18.

[Sec 1. 애플리케이션 테스트케이스 설계]

소프트웨어 테스트

 기본 원칙

  - 완벽한 테스팅은 불가능하다.

  - 테스팅은 개발 초기에 시작해야 한다.

  - 테스팅 방법은 특정 상황에 의존적이다.

  - 파레토 법칙 : 전페 결과의 80%가 전체 원인의 20%에서 일어나는 현상 (결함 집중)

  - 살충제 패러독스 : 반복적인 테스트로는 새로운 결함을 찾기 어렵다.

  - 오류-부재의 궤변 : 오류가 없다고 해도 사용자의 요구사항을 충족하지 않으면 품질이 좋다고 할 수 없다.

 테스트 산출물 : 테스트 계획서, 테스트 케이스, 테스트 시나리오, 테스트 결과서

  - 테스트 케이스(테스트 항목의 입력, 실행 조건, 기대 결과를 포함한 테스트 항목의 명세서)

 

테스트 오라클 : 테스트의 결과가 참인지 거짓인지 판단하기 위해 사전에 정의된 참 값을 입력하여 비교하는 기법

 - 참 오라클 : 모든 입력 값에 정확한 결과, 크리티컬한 시스템에서 사용

 - 샘플링 오라클 : 제한된 입력 값들에 대해서만, 대부분에서 사용

 - 휴리스틱 오라클 : 특정 입력 값들에는 정확하게, 나머지는 근사적인 추정치를 제공

 - 일관성 검사 오라클 : 소프트웨어의 변경 전후로 테스트 결과의 일관성을 검증

 

테스트 레벨 : 단위 테스트 → 통합 테스트 → 시스템 테스트 → 인수 테스트

 단위 테스트

  - 정적 테스트 : 소프트웨어의 실행 없이 테스트 (코드검사, 워크스루, 인스펙션)

  - 동적 테스트 : 실제로 소프트웨어를 실행하며 테스트

통합 테스트 : 상호작용 중 발생할 수 있는 문제점 검출

  점증적 방식

   - 상향식 통합 테스트 : 하위 모듈을 클러스터로 결합하면서 위쪽 방향으로 진행, driver 개발

   - 하향식 통합 테스트 : 깊이우선/너비우선 방식으로 통합, stub 개발

  비점증적 방식

   - 빅뱅 테스트 : 모든 구성 요소들을 한꺼번에 통합하여 테스트, 소규모 시스템에 사용

   - 백본 테스트 : 상향식과 하향식의 장점 이용, 대규모 프로젝트에 사용

시스템 테스트

 - 기능 테스트

 - 비기능 테스트

인수 테스트

 - 알파 테스트 : 개발자와 사용자

 - 베타 테스트 : 사용자

 

테스트 기법

 - 화이트박스 테스트 : 개발자 관점

   기초 경로 검사(McCabe) : 면 + 1

 - 블랙박스 테스트 : 사용자 관점

   동등 분할 기법, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사, 상태전이 검사

 

테스트 분류

 시각에 따라 : Verification(개발자가 검증), Validation(사용자가 확인)

 목적에 따라 : 회복, 안전, 강도(과다 정보량 부과), 성능, 구조, 회귀(수정된 코드에 대해 새로운 결함 발견 여부 평가), 병행, A/B 테스트, 스모크 테스트(간단하게 테스트)

 종류 : 명세 기반 테스트, 구조 기반 테스트, 경험 기반 테스트

 

테스트 커버리지 : 테스트를 얼마나 수행했는지 측정하는 기준(기능 기반 커버리지, 라인 커버리지, 코드 커버리지)

 

 

[Sec 2. 애플리케이션 통합 테스트]

결함관리 측정 지표

 - 결함 분포 : 특정 속성에 해당하는 결함의 수

 - 결함 추세 : 시간의 흐름에 따른 결함의 수

 - 결함 에이징 : 결함 상태의 지속 시간 측정

 

테스트 자동화 도구 : 반복적인 테스트 작업 자동화

 - 정적 분석 도구 : 애플리케이션을 실행하지 않고 (↔ 동적 분석 도구(Avalanche, Valgrind))

 - 테스트 실행 도구 : 사전에 작성된 테스트 스크립트나 시나리오 실행

 - 성능 테스트 도구 : 시스템의 성능 테스트

 - 테스트 통제 도구 : 테스트의 전체 프로세스 관리

 - 테스트 장치 : 드라이버(상향식 테스트), 스텁(하향식 테스트), 슈트(테스트 케이스의 집합), 테스트 케이스(입력 값, 실행 조건, 기대 결과), 테스트 스크립트, 목 오브젝트

 

 

[Sec 3. 애플리케이션 성능 개선]

알고리즘

 조건 : 입력, 출력, 명확성, 유한성, 효과성

 설계 기법 : 분할과 정복, 동적 계획법, 탐욕법, 백트래킹

 성능 분석 : 시간 복잡도(빅오 표기법)

 O(1) > O(log n) > O(n) > O(n log n) > O(n²) > O(2ⁿ) > O(n!)

 O(1) : 스택, 해시 함수(: 최악의 경우 O(n))

 O(log n) : 이진 검색, 이진 트리 검색(: 최악의 경우 O(n))

 O(n) : 선형 검색, 배열 순차 탐색

 O(n log n) : 퀵 정렬(: 최악의 경우 O(n²)), 힙 정렬, 병합 정렬

 O(n²) : 선택 정렬, 삽입 정렬, 버블 정렬

 

정렬 알고리즘 (→ 정렬에서 가장 빠른 시간 복잡도는 O(n log n)이다.)

 - 선택 정렬 : 리스트 중 최솟값을 찾아 비교 대상과 교체

 - 삽입 정렬 : 처음부터 순차적으로 현재 값이 삽입될 자리를 찾아 삽입

 - 버블 정렬 : 인접한 값끼리 계속 비교하면서 정렬

 - 퀵 정렬 : 피벗을 사용하여 분할하면서 정렬, 일반적으로 O(n log n), 최악의 경우 O(n²)

 - 힙 정렬 : 추가 메모리를 사용하지 않음

 - 병합 정렬 : 배열을 반으로 분할하여 정렬한 후 병합, 추가 메모리 필요

 

클린코드 작성 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화