본문 바로가기
정보처리기사 실기

[정보처리기사 실기] 7. 애플리케이션 테스트 관리

by DevJaewoo 2021. 11. 25.
반응형

애플리케이션 테스트 관리

▶ 애플리케이션 테스트

더보기

 

애플리케이션이 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차

 

▶ 애플리케이션 테스트 기본 원리

더보기

 

  • 완벽한 테스트는 불가능
  • 테스팅은 정황에 의존적
  • 개발 초기에 테스팅 시작
  • 테스트와 위험은 반비례
  • 테스트의 점진적 확대
  • 테스트는 별도의 팀에서 수행
  • 파레토 법칙 (결함 집중): 전체 결함의 80%는 모듈의 20%에서 발견됨
  • 살충제 패러독스: 동일한 테스트 케이스로 테스트를 반복하면 더이상 결함이 발견되지 않음
  • 오류-부재의 궤변: 결함이 없더라도 요구사항을 만족하지 못했다면 소프트웨어의 품질이 높다고 할 수 없음

 

애플리케이션 테스트의 분류

▶ 프로그램 실행 여부에 따른 테스트 방식 2가지

더보기

 

  • 정적 테스트: 프로그램을 실행하지 않고 구조를 분석하여 소스 코드를 검증하는 테스트 기법
  • 동적 테스트: 프로그램을 실행하여 오류를 찾는 테스트 기법

 

▶ 정적 테스트 종류 3가지

더보기

 

  • 동료검토: 2~3명이 진행하며 요구사항 명세서 작성자가 명세서 내용을 직접 설명하고, 이해관계자들이 설명을 들으며 코드에 대한 결함을 발견
  • 워크스루: 회의 전 검토 자료를 배포하여 사전 검토한 후 짧은 시간동안 회의 진행
  • 인스펙션: 원시 코드 등을 저작자 외의 전문가 또는 팀이 검사하여 오류를 찾아내는 기법

 

▶ 동적 테스트 종류 2가지

더보기

 

  • 블랙박스 테스트: 응용프로그램의 내부 구조나 작동 원리를 모르는 상태에서 입력과 출력을 통해 검사
  • 화이트박스 테스트: 응용프로그램의 내부 구조와 동작을 검사

 

▶ 블랙박스 테스트 유형 9가지

더보기

 

  • 동등 분할 테스트: 입력 데이터의 영역을 유사한 도메인 별로 유/무효값을 그룹핑하여 대표 값 테스트
  • 경곗값 분석 테스트: 오류 발생 확률이 높은 경계 값을 입력으로 주어 테스트
  • 결정 테이블 테스트: 요구사항의 논리와 발생조건을 테이블 형태로 나열해 조건과 행위를 조합하여 테스트
  • 상태 전이 테스트: 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 모두 수행하는 테스트
  • 유스케이스 테스트: 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트
  • 분류 트리 테스트: 소프트웨어의 일부 또는 전체를 트리구조로 표현하여 테스트케이스를 설계해 테스트
  • 페어와이즈 테스트: 테스트 데이터들을 최소한 한 번씩 조합하여 테스트
  • 원인-결과 그래프 테스트: 그래프를 활용해 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석하는 테스트
  • 비교 테스트: 여러 버전의 프로그램에 같은 입력값을 넣어 비교하는 테스트

 

▶ 화이트박스 테스트 유형 9가지

더보기

 

  • 구문 커버리지: 모든 명령문을 적어도 한번 수행
  • 결정 커버리지: 전체 조건식이 적어도 한번은 참과 거짓이 되도록 수행
  • 조건/결정 커버리지: 개별 조건식이 적어도 한번은 참과 거짓이 되도록 수행
  • 변경 조건/결정 커버리지: 전체, 개별 조건식이 적어도 한번은 참과 거짓이 되도록 수행
  • 다중 조건 커버리지: 개별 조건식의 모든 가능한 조합을 테스트
  • 기본 경로 커버리지: 수행 가능한 모든 경로를 테스트
  • 제어 흐름 테스트: 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직 테스트
  • 데이터 흐름 테스트: 제어 흐름 그래프에 데이터 사용 현황을 추가하여 테스트

 

▶ 기반에 따른 테스트 방식 3가지

더보기

 

  • 명세 기반 테스트: 사용자의 요구사항에 대한 명세를 테스트케이스로 작성하고 확인
  • 구조 기반 테스트: 소프트웨어 내부 논리 흐름에 따라 테스트케이스를 작성하고 확인
  • 경험 기반 테스트: 테스터의 경험을 기반으로 수행하는 테스트

 

▶ 시각에 따른 테스트 방식 2가지

더보기

 

  • 검증(Verification): 개발자의 시각으로 제품의 생산 과정 테스트
  • 확인(Validation): 사용자의 시각으로 제품의 생산 결과 테스트

 

▶ 목적에 따른 테스트 방식 7가지

더보기

 

  • 회복 (Recovery) 테스트: 시스템에 결함을 주어 실패하도록 한 후 올바르게 복구되는지 확인
  • 안전 (Security) 테스트: 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지 확인
  • 강도 (Stress) 테스트: 시스템에 과부하를 주어 소프트웨어가 정상적으로 실행되는지 확인
  • 성능 (Performance) 테스트: 소프트웨어의 실시간 성능이나 전체적인 효율성 진단
  • 구조 (Structure) 테스트: 소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 평가
  • 회귀 (Regression) 테스트: 소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없는지 확인
  • 병행 (Parallel) 테스트: 기존 소프트웨어와 변경된 소프트웨어에 동일한 데이터를 입력하여 결과 비교

 

▶ 성능 테스트 상세 유형 4가지

더보기

 

  • 부하 테스트: 시스템에 부하를 계속 증가시키며 시스템의 임계점을 찾는 테스트
  • 스트레스 테스트: 시스템에 처리능력 이상의 부하를 가하여 비정상적인 상황에서의 처리 테스트
  • 스파이크 테스트: 짧은 시간에 사용자가 몰릴 때 시스템에 반응 테스트
  • 내구성 테스트: 오랜 시간 동안 시스템에 높은 부하를 가하는 테스트

 

▶ 개발 단계에 따른 테스트 방식 4가지

더보기

 

  • 단위 테스트: 모듈이나 컴포넌트에 초점을 맞춰 테스트
  • 통합 테스트: 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
  • 시스템 테스트: 소프트웨어가 컴퓨터 시스템에서 완벽하게 수행되는지 점검하는 테스트
  • 인수 테스트: 소프트웨어가 사용자의 요구사항을 충족하는지 점검하는 테스트

 

▶ 통합 테스트 종류 4가지

더보기

 

  • 상향식 통합 테스트: 가장 하위의 모듈부터 상단으로 통합하는 방식으로, 테스트 드라이버를 사용한다.
  • 하향식 통합 테스트: 가장 상위의 모듈부터 하단으로 통합하는 방식으로, 테스트 스텁을 사용한다.
  • 샌드위치(혼합식) 통합 테스트: 상/하향식의 장점을 혼합한 방식
  • 빅뱅 통합 테스트: 단위 테스트 수행 후 전체 시스템에 대해 한번에 통합 테스트 수행

 

▶ 인수 테스트 종류 2가지

더보기

 

  • 알파 테스트: 개발자 환경에서 선택된 사용자가 통제된 상태로 소프트웨어 테스트
  • 베타 테스트: 사용자 환경에서 일정 수의 사용자가 소프트웨어를 사용하고 피드백을 받는 방식

 

▶ 테스트 케이스

더보기

 

특정 요구사항을 준수하는지 확인하기 위한 입력값, 실행조건, 예상 결과의 집합

 

▶ 테스트 시나리오

더보기

 

테스트 케이스집합, 실행 순서와 절차를 작성한 문서

 

 

▶ 테스트 오라클 정의 및 종류 4가지

더보기

 

테스트 결과값이 참인지 거짓인지 판단하기 위해 사전에 정의한 참 값을 입력하여 비교하는 기법

 

  • 참 오라클: 모든 입력값에 대해 기대하는 결과 제공
  • 샘플링 오라클: 특정 입력 값들에 대해서만 결과 제공
  • 휴리스틱 오라클: 특정 입력값에 대한 결과를 제공하고 나머지는 추정, 샘플링 오라클 개선
  • 일관성 검사 오라클: 애플리케이션에 변경이 있을 시 수행 전 후의 결과가 동일한지 확인

 

테스트 자동화 도구

▶ 테스트 자동화 도구 종류 5가지

더보기

 

  • 정적 분석 도구: 애플리케이션을 실행하지 않고 분석
  • 테스트 실행 도구: 작성된 스크립트를 실행하여 테스트
  • 성능 테스트 도구: 가상의 사용자를 만들어 성능 측정 지표에 따른 목표 달성 여부 테스트
  • 테스트 통제 도구: 테스트 계획/관리/수행, 결함 추적/관리 등을 수행하는 도구
  • 테스트 하네스 도구: 테스트가 실행될 환경을 시뮬레이션 하여 컴포넌트 및 모듈이 정상적으로 테스트 되도록 하는 도구

 

▶ 애플리케이션 성능 측정 지표 4가지

더보기

 

  • 처리량 (Throughput): 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수
  • 응답시간 (Response Time): 사용자 입력이 끝난 시점부터 응답 출력이 시작될 때 까지의 시간
  • 경과시간 (Turn Around Time): 사용자가 입력을 시작한 시점부터 응답 출력이 완료될 때 까지의 시간
  • 자원 활용도 (Resource Usage): 애플리케이션이 트랜잭션을 처리하는 동안의 CPU, 메모리 사용량

 

▶ 테스트 하네스 구성요소 6가지

더보기

 

  • 테스트 드라이버: 컴포넌트를 제어하거나 호출하는 컴포넌트를 대체하는 테스트 도구
  • 테스트 스텁: 호출되는 컴포넌트를 대체하는 테스트 도구
  • 테스트 슈트: 테스트 케이스의 집합으로, 테스트 시나리오와는 달리 실행 순서가 없다.
  • 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서
  • 테스트 케이스: 특정 요구사항을 준수하는지 확인하기 위한 입력값, 실행조건, 예상 결과의 집합
  • 목 오브젝트: 사용자의 행위를 조건부로 사전 입력하고, 해당 상황에 예정된 행위를 수행하는 객체

 

▶ 결함 추이 분석 방법 3가지

더보기

 

  • 분포 분석: 애플리케이션 모듈 또는 컴포넌트의 결함의 수 측정
  • 추세 분석: 테스트 진행 시간의 흐름에 따른 결함의 수 측정
  • 에이징 분석: 등록된 결함의 상태 지속 시간 측정

 

애플리케이션 성능 개선

▶ 클린 코드

더보기

 

잘 작성되어 누구나 쉽게 이해, 수정, 추가가 가능한 코드

 

▶ 배드 코드 정의 및 종류 2가지

더보기

 

다른 개발자가 이해하기 어렵게 작성된 코드

 

  • 외계인 코드: 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수가 힘든 코드
  • 스파게티 코드: 코드의 로직이 복잡하게 얽혀 있는 코드

 

▶ 정적 분석 도구 정의 및 종류 6가지

더보기

 

작성한 코드를 실행하지 않고 코딩 표준, 코딩 스타일, 코드 복잡도 및 결함 등을 확인하는 분석 도구

 

  • pmd: 미사용 변수, 최적화되지 않은 코드 검사
  • cppcheck: C/C++ 메모리 누수, 오버플로우 검사
  • SonarQube: 중복 코드, 복잡도, 코딩 설계 등 분석
  • checkstyle: JAVA 코드 표준 검사
  • ccm: 다양한 언어의 복잡도 분석
  • cobertura: JAVA 코드 복잡도 분석 및 테스트 커버리지 측정

 

▶ 동적 분석 도구 정의 및 종류 2가지

더보기

 

작성한 코드를 실행하여 코드에 존재하는 메모리 누수, 스레드, 결함 등을 확인하는 분석 도구

 

  • Avalanche: 프로그램 결함 및 취약점 분석
  • Valgrind: 프로그램 메모리 및 스레드 결함 분석
반응형