3장 - 3.1 정적 테스팅의 기초

hsk·2024년 6월 16일

ISTQB - CTFL (정리) 

목록 보기
11/25

정적 테스팅

  • 소프트웨어를 실행하지 않고 수행하는 테스팅
  • 코드, 프로세스 명세, 시스템 아키텍처 명세 등 작업 산출물을 수동으로 또는 도구를 사용해 평가

테스팅 목표

  • 품질 개선
  • 결함 식별
  • 가독성, 완전성, 정확성, 테스트 용이성, 일관성 등의 특성 평가
  • 베리피케이션과 벨리데이션 모두에 적용 가능

협업 예제

  • 예제 매핑, 사용자 스토리 공동 작성, 백로그 개선 작업 시 테스터, 비즈니스 담당자, 개발자가 협업
  • 사용자 스토리가 정의된 기준을 충족하는지 확인
  • 리뷰 기법을 통해 사용자 스토리가 완전하고 이해하기 쉬우며, 테스트 가능한 인수 조건을 가지고 있는지 확인

정적 분석

  • 테스트 케이스가 필요 없고 도구를 사용해 수행
  • 동적 테스팅 전에 문제를 식별할 수 있어 상대적으로 적은 노력 소요
  • 주로 코드 결함 식별 유지보수성 및 보안 평가에 사용
  • 맞춤법 검사기, 가독성 도구 등도 정적 분석 도구의 예

통합

  • 정적 분석을 지속적 통합(CI) 프레임워크에 통합하는 경우가 많음

3.1.1. 정적 테스팅으로 검사 가능한 작업 산출물

정적 테스트를 통해 검토할 수 있는 작업 산출물

  • 요구사항 명세서
  • 소스 코드
  • 테스트 계획서
  • 테스트 케이스
  • 제품 백로그 항목
  • 테스트 차터
  • 프로젝트 문서
  • 계약서
  • 모델

리뷰 대상이 될 수 있는 조건

  • 읽고 이해할 수 있는 모든 작업 산출물

정적 분석의 필요 조건

  • 작업 산출물을 검토할 수 있는 구조 (예: 모델, 공식 문법이 정해진 코드나 텍스트)

정적 테스팅에 적합하지 않은 작업 산출물

  • 사람이 해석하기 어려운 작업 산출물
  • 도구로 분석해서는 안 되는 작업 산출물(예: 법적으로 문제가 되는 타사의 실행 코드)

3.1.2. 정적 테스팅의 가치

조기 결함 식별 : 소프트웨어 개발수명주기(SDLC)초기 단계에서 결함을 식별하여 조기 테스팅 원리를 지킴
특정 결함 식별 : 동적 테스팅으로 식별할 수 없는 결함도 식별 가능
품질 평가 : 작업 산출물의 품질을 평가하고 신뢰를 쌓을 방법 제공
요구사항 확인 : 문서화된 요구사항을 확인하여 이해관계자가 요구사항이 실제 필요한 것을 묘사하고 있는지 확인 가능
공통 이해 형성 : SDLC 초기에 수행하여 관련된 이해관계자 간 공통 이해 형성 및 의사소통 개선
비용 절감 : 리뷰 구축 비용이 클 수 있지만, 프로젝트 후반에 결함을 수정하는 시간과 노력이 줄어 전체 프로젝트 비용이 절감되는 경우가 많다.
효울적 결함 식별 : 정적 분석이 동적 테스팅보다 효율적으로 코드 결함을 식별할 수 있으며, 결과적으로 코드 결함 감소 및 전반적 개발 노력 감소

정적 테스팅의 추가 이점 : 다양한 이해관계자가 정적 테스팅에 참여하여 의사소통 개선 및 공통 이해 형성

3.1.3. 정적 테스팅과 동적 테스팅의 차이

공통점 : 작업 산출물의 결함 식별을 지원

차이점 :

  • 결함 식별 방법
    • 정적 테스팅 : 결함을 직접 식별
    • 동적 테스팅 : 장애를 일으킨 후 연관된 결함을 후속 분석을 통해 찾아냄
  • 결함 위치
    • 정적 테스팅 : 거의 실행되지 않거나 동적 테스팅으로 도달하기 어려운 코드 경로에 있는 결함을 더 쉽게 발견
  • 적용 범위
    • 정적 테스팅 : 비-실행 작업 산출물에도 적용 가능
    • 동적 테스팅 : 실행 가능한 작업 산출물에만 적용 가능
  • 품질 특성 측정
    • 정적 테스팅 : 코드 실행에 의존하지 않는 품질 특성 측정
    • 동적 테스팅 : 코드 실행에 의존적인 품질 특성(예: 성능 효율성) 측정

정적 테스팅으로 쉽게 적은 비용으로 식별할 수 있는 대표적인 결함

  • 요구사항 결함: 불일치, 모호성, 모순, 누락, 부정확성, 중복
  • 설계 결함 : 비효율적인 데이터베이스 구조, 모듈화 불량
  • 특정 유형의 코딩 결함 : 정의되지 않은 값을 가진 변수, 선언되지 않은 변수, 도달할 수 없거나 중복된 코드, 과도한 코드 복잡성
  • 표준 위반 : 코딩 표준 명명 규칙 미준수
  • 잘못된 인터페이스 명세 : 매개변수의 개수, 유형, 순서 불일치
  • 특정 유형의 보안 취약성 : 버퍼 오버플로우
  • 테스트 베이시스 커버리지의 차이 또는 부정확성 : 인수 조건 하나에 대한 테스트 누락

예상문제

문제 1: 다음 중 정적 테스팅으로 검사할 수 없는 작업 산출물은 무엇인가?

A) 요구사항 명세서
B) 소스 코드
C) 테스트 계획서
D) 타사의 실행 코드

정답(드래그)
D
해설(드래그)
정적 테스팅은 사람이 해석하기 어려운 것과 도구로 분석해서는 안 되는 작업 산출물에는 적합하지 않다.

문제 2: 정적 테스팅의 주요 가치는 무엇인가?

A) 테스트 자동화의 수준을 높인다
B) 소프트웨어 개발수명주기(SDLC) 초기에 결함을 식별한다
C) 소프트웨어의 성능을 최적화한다
D) 사용자 요구사항을 변경한다

정답(드래그)
B
해설(드래그)
정적 테스팅의 주요 가치는 소프트웨어 개발수명주기(SDLC) 초기 단계에서 결함을 식별하여 조기 테스팅 원리를 지키는 데 있다.

문제 3: 정적 테스팅과 동적 테스팅의 차이점으로 옳지 않은 것은?

A) 정적 테스팅은 결함을 직접 식별한다
B) 동적 테스팅은 장애를 일으킨 후 결함을 찾아낸다
C) 정적 테스팅은 실행 가능한 작업 산출물에만 적용할 수 있다
D) 동적 테스팅은 코드 실행에 의존적인 품질 특성을 측정한다

정답(드래그)
C
해설(드래그)
정적 테스팅은 비-실행 작업 산출물에도 적용할 수 있습니다. 실행 가능한 작업 산출물에만 적용되는 것은 동적 테스팅이다.

문제 4: 다음 중 정적 테스팅으로 쉽게 식별할 수 있는 결함 유형은 무엇인가?

A) 성능 저하 문제
B) 버퍼 오버플로우
C) 사용자 인터페이스의 디자인 결함
D) 사용자 요구사항의 변경 요청

정답(드래그)
B
해설(드래그)
정적 테스팅은 특정 유형의 보안 취약성(예: 버퍼 오버플로우)을 식별하는 데 유용하다.

문제 5: 정적 테스팅이 동적 테스팅보다 효율적인 경우는 언제인가?

A) 실행되지 않거나 도달하기 어려운 코드 경로의 결함 식별
B) 소프트웨어의 성능 최적화
C) 사용자 인터페이스 테스트
D) 실제 사용자 환경에서의 테스트

정답(드래그)
A
해설(드래그)
정적 테스팅은 실행되지 않거나 동적 테스팅으로 도달하기 어려운 코드 경로에 있는 결함을 더 쉽게 발견할 수 있다.

문제 6: 정적 테스팅의 주요 이점이 아닌 것은?

A) SDLC 초기 단계에서 결함 식별 가능
B) 소프트웨어 품질 평가와 신뢰 형성
C) 코드 실행에 의존하지 않는 품질 특성 측정
D) 사용자 요구사항의 변경 요청을 처리

정답(드래그)
D
해설(드래그)
정적 테스팅은 사용자 요구사항의 변경 요청을 처리하는 것이 아니라, 기존 요구사항이 제대로 문서화되고 이해되었는지를 검토한다.

문제 7: 정적 테스팅을 통해 식별할 수 있는 요구사항 결함에 해당하지 않는 것은?

A) 불일치
B) 모호성
C) 성능 저하
D) 누락

정답(드래그)
C
해설(드래그)
성능 저하는 주로 동적 테스팅을 통해 식별된다. 정적 테스팅은 불일치, 모호성, 모순, 누락 등의 요구사항 결함을 식별하는 데 유용하다.

문제 8: 다음 중 정적 테스팅에 적합하지 않은 작업 산출물은 무엇인가?

A) 요구사항 명세서
B) 소스 코드
C) 법적으로 문제가 되는 타사의 실행 코드
D) 테스트 계획서

정답(드래그)
C
해설(드래그)
정적 테스팅은 법적으로 문제가 되는 타사의 실행 코드와 같이 사람이 해석하기 어렵고 도구로 분석해서는 안 되는 작업 산출물에는 적합하지 않다.

문제 9: 정적 테스팅이 소프트웨어 개발수명주기(SDLC) 초기에 수행될 때의 주요 이점은 무엇인가?

A) 테스트 자동화 수준 증가
B) 관련된 이해관계자 간 공통 이해 형성
C) 소프트웨어 성능 최적화
D) 사용자 인터페이스 개선

정답(드래그)
B
해설(드래그)
정적 테스팅이 SDLC 초기에 수행되면 관련된 이해관계자 간 공통 이해를 형성하고 의사소통을 개선하는 데 도움이 된다.

문제 10: 정적 분석 도구가 식별할 수 있는 결함 유형이 아닌 것은?

A) 정의되지 않은 값을 가진 변수
B) 선언되지 않은 변수
C) 과도한 코드 복잡성
D) 사용자 인터페이스 디자인 문제

정답(드래그)
D
해설(드래그)
정적 분석 도구는 주로 코드 결함(예: 정의되지 않은 값, 선언되지 않은 변수, 과도한 코드 복잡성)을 식별하는 데 사용되며, 사용자 인터페이스 디자인 문제는 정적 분석 도구로 식별하기 어렵다.

profile
Test Automation QA Engineer

0개의 댓글