노트

7 애플리케이션 테스트 본문

정보처리기사 정리

7 애플리케이션 테스트

blackmilktea 2024. 4. 19. 23:00

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

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

애플리케이션 테스트 원리

  • 테스팅은 결함이 존재함을 밝히는 것: 결함을 줄일 순 있지만, 결합이 없다고 증명할 수 없음
  • 완벽한 테스팅은 불가능: 무한 경로, 무한 입력 값으로 인한 어려움
  • 개발 초기에 테스팅 시작: 테스팅 기간 단축, 재작업 감소로 개발기간 단축 및 결함 예방
  • [결함의 집중] 파레토 법칙(Pareto Principle): 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙
  • 살충제 패러독스(Pesticide Paradox): 동일한 테스트를 반복하면 새로운 버그를 찾지 못함
  • 정황 의존성: 소프트웨어 성격에 맞게 테스트 실시
  • 오류-부재의 궤변: 요구사항을 충족시키지 못한다면, 결합이 없다고 해도 품질이 높다고 볼 수 없음
  • 요르돈의 법칙(Snowball Effect, 눈덩이 법칙): 개발 초기에 테스팅하지 않으면 비용 증가

프로그램 실행 여부에 따른 분류

  • 정적 테스트: 테스트 대상을 실행하지 않고 구조를 분석하여 논리성을 검증하는 테스트, 리뷰, 워크스루, 인스펙션, 코드 검사
  • 동적 테스트: 소프트웨어를 실행하는 방식으로 테스트를 수행해 결함을 검출, 화이트박스, 블랙박스, 경험기반 테스트 

화이트박스 테스트(White-Box Test)

모듈의 소스코드를 오픈시킨 상태에서 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법(구조 검사)

화이트박스 테스트 유형

  • 구문(문장): 커버리지: 프로그램 내의 모든 명령문을 적어도 한 번 수행
  • 결정(선택, 분기): 커버리지: 결정 포인트 내의 전체 조건식이 적어도 한 번은 참, 거짓의 결과가 되도록 수행
  • 조건 커버리지: 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참, 거짓의 결과가 되도록 수행
  • 조건/결정 커버리지: 전체 조건식 & 개별 조건식이 참 한 번, 거짓 한 번 결과가 되도록 수행
  • 변경 조건/결정 커버리지: 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식에 독립적으로 영향을 주도록 하는 커버지리
  • 다중 조건 커버리지: 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장
  • 기본 경로 테스트: 수행 가능한 모든 경로를 테스트
  • 제어 흐름 테스트: 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트
  • 데이터 흐름 테스트제어 흐름 그래프에 사용현황 추가한 테스트

블랙박스 테스트(Black-Box Test)

소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트

사용자의 요구사항 명세를 보면서 구현된 기능을 테스트함.(기능 검사)

블랙박스 테스트의 종류

  • 동치(동등) 분할 검사(Equivalence Partitioning Testing): 입력 데이터의 영역을 유사한 도메인 별로 유효값/무효값을 그룹핑하여 대표값 테스트 케이스를 도출하여 테스트
구간 등급 동치 분한 테스트 데이터
90 <= X <= 100 A 95
70 <= X <= 89 B 80
50 <= X <= 69 C 60
0 <= X <= 49 D 30
  • 경곗값 분석 테스트(Boundary Value Analysis): 입력 조건의 경곗값을 테스트 케이스로 선정

Two-value: Boundary value & Invali value 선택

Three-value: + full boundary value: 경곗값을 기준으로 양쪽 모두 선택

ex) 경곗값이 0이면 -1, 0, 1 선택

  • 원인-효과 그래프 (Cause-Effect Graphing)  검사: 입력 데이터 간 관계와 출력에 영향을 미치는 상황을 체계적으로 분석 후 효용성이 높은 테스트 케이스 선정
  • 오류 예측 (Error Guessing) 검사: 과거의 경험이나 확인자의 감각으로 테스트
  • 비교(comparison) 검사: 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 확인
  • 결정 테이블 테스트: 요구사항의 논리와 발생조건을 테이블 형태로 나열, 조건과 행위 모두 조합해 테스트

테스트 목적에 따른 분류

  • 회복(Recovery) 테스트: 시스템에 고의로 실패를 유도 후 시스템의 정상적 복귀 여부를 테스트
  • 안전(Security) 테스트: 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스코드 내의 보안적인 결함을 미리 점검
  • 강도(Stress) 테스트: 시스템에 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 소프트웨어가 정상적으로 실행되는지 확인
  • 성능(Performance) 테스트: 처리량, 응답시간, 경과시간 등을 측정
  • 구조(Structure) 테스트: 시스템의 내부 논리 경로, 소스코드의 복잡도를 평가
  • 회귀(Regression) 테스트: 시스템의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
  • 병행(Parallel) 테스트: 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트

테스트 종류에 따른 분류

  • 명세 기반 테스트(블랙박스 테스트): 프로그램의 요구사항 명세서를 기반으로 테스트 케이스를 선정
  • 구조 기반 테스트(화이트박스 테스트): 소프트웨어 내부 논리 흐름에 따라 테스트 케이스 작성
  • 경험 기반 테스트(블랙박스 테스트): 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반

테스트 케이스

사용자의 요구사항을 정확하게 준수했는지 확인하기 위해 설계된 테스트 항목에 대한 명세서

테스트 오라클(Oracle)

테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법

오라클 종류

  • 참(True) 오라클: 모든 입력값에 대해 기대하는 결과를 제공
  • 샘플링(Sampling) 오라클: 특정한 몇 개의 입력값에 대해 기대하는 결과를 제공
  • 휴리스틱(Heuristic) 오라클: 특정 입력값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 추정으로 처리
  • 일관성(Consistent) 오라클: 애플리케이션 변경이 있을 때, 수행 전과 후의 결괏값이 동일한지 확인

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

V-Model

소프트웨어 개발 단계에 따라 테스트를 연결하여 표현환 것

 

요구사항    ----->    인수

    분석   ---->   시스템

     설계  --->  통합

       구현 -> 단위

인수(Acceptance) 테스트

개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점

  • 알파 테스트: 사용자와 개발자가 함께 행하는 테스트
  • 베타 테스트: 실제 사용자에게 소프트웨어를 사용하게 하고 피드백받는 테스트

통합(Intergraion) 테스트

단위 테스트가 완료된 모듈을 결합하여 하나의 시스템으로 완성시키는 과정에서 테스트

  • 빅뱅 테스트: 모든 모듈을 통합 후 동시에 테스트
  • 상향식 테스트: 하위 모듈부터 점진적으로 상위 모듈을 통합하면서 테스트, 테스트 드라이버 사용
  • 하향식 테스트: 상위 모듈부터 하위 모튤을 통합하면서 테스트, 테스트 스텁 필요
  • 샌드위치 테스트: 상위는 하향 + 하위는 상향 테스트, 테스트 스텁, 드라이버 필요

단위(Unit) 테스트

소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트

테스트 자동화 도구

  • 정적 분석 도구: 프로그램을 실행하지 않고 분석
  • 테스트 실행 도구: 스크립트 언어를 사용해 테스트를 실행
  • 성능 테스트 도구: 애플리케이션의 처리량, 응답시간, 경과시간 자원사용률 등을 테스트
  • 테스트 통제 도구: 테스트의 계획 및 관리, 테스트 수행, 결함 관리 등을 수행
  • 테스트 하네스 도구: 테스트가 실행될 환경을 시뮬레이션하여 모듈 및 컴포넌트가 정상정으로 테스트되도록 함

결함 분석 방법

  • 구체화: 결함의 원인을 찾기 위해 결함을 발생시킨 입력값, 테스트 절차, 환경을 명확히 파악
  • 고립화: 입력값, 테스트 절차, 환경 중 어떤 요소가 결함 발생에 영향을 미치는지 분석
  • 일반화: 결함 발생에 영향을 주는 요소를 최대한 일반화

테스트 커버리지

주어진 테스트 케이스에 의해 수행되는 소프트웨어 테스트 범위를 측정하는 테스트 품질 측정 기준

  • 기능 기반 커버리지: 전체 기능을 모수로 설정, 실제 테스트가 수행된 기능의 수를 측정
  • 라인 커버리지: 전체 소스 코드의 라인 수를 모수로 테스트 시나리오가 수행한 소스 코드의 라인수를 측정
  • 코드 커버리지: 소스 코드의 구문, 조건, 결정 등의 구조 코드 자체가 얼마나 테스트되었는지 측정

결함 심각도별 분류

  • 단순 결함(Simple): 미관상 안 좋음
  • 경미한 결함(Minor): 표준위반
  • 보통 결함(Normal): 사소한 기능 오작동
  • 주요 결함(Major): 기능 장애
  • 치명적 결함(Critical): 데이터 손실

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

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

  • 처리량(Throughput): 일정 시간 내 처리하는 일의 양
  • 응답 시간(Response Time): 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
  • 경과 시간(Trun Around Time): 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
  • 자원 사용률(Resource Usage): 의뢰한 작업을 처리하는 동안 CPU 사용량, 메모리 사용량, 네트워크 사용량 등

DB 관련 성능 저하 원인

  • DB Lock: 대량의 데이터 조회, 과도한 업데이트, 인덱스 생성 시 발생하는 현상
  • 불필요한 DB Fetch: 실제 필요한 데이터보다 많은 대량의 데이터 요청이 들어올 경우 응답 시간 저하 현상 발생
  • 연결 누수(Connection Leak): DB 연결과 관련된 JDBC 객체를 사용 후 종료하지 않을 경우 발생
  • 부적절한 커넥션 풀 크기(Connection Pool Size): 너무 작거나 크게 설정한 경우 성능 저하 현상 발생 가능성 존재
  • 확정(Commint) 관련: 트랜잭션이 확정되지 않고 커넥션 풀에 반환될 때 성능 저하 가능성 존재

커넥션 풀: 웹 컨테이너(WAS)가 실행되면서 DB와 미리 연결해놓은 객체들을 pool에 저장해 두었다가 클라이언트 요청이 오면 연결을 빌려주고 처리가 끝나면 다시 연결을 반납받아 pool에 저장하는 방식

배드 코드(Bad Code)

프로그램 로직이 복잡하고 다른 개발자들이 이해하기 어려운 코드

  • 외계인 코드: 아주 오래되거나 참고문서 또는 개발자가 없이 유지보수 작업이 어려운 코드
  • 스파게티 코드: 소스 코드가 복잡하게 얽힌 모습, 정상 작동하지만 코드의 작동을 파악하기 어려움
  • 알 수 없는 변수명: 변수나 메서드의 이름 정의를 알 수 없는 코드
  • 로직 중복: 동일한 처리 로직이 중복되게 작성된 코드

클린 코드(Clean Code)

가독성이 높고, 단순하며, 위존성을 줄이고, 중복을 최소화하여 잘 정리된 코드

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

리팩토링(Refactoring)

기능을 변경하지 않고 복잡한 소스코드를 수정, 보완하여 가용성 및 가독성을 높이는 기법

'정보처리기사 정리' 카테고리의 다른 글

11 응용 SW 기초 기술 활용  (0) 2024.04.21
9 SW 개발 보안 구축  (0) 2024.04.20
6 화면 설계  (0) 2024.04.18
5 인터페이스 구현  (0) 2024.04.18
4 서버 프로그램 구현  (0) 2024.04.17