[섹션 1: SW 테스팅의 기초] 1. 테스팅이란 무엇이고 왜 필요한가?

IMKUNYOUNG·2023년 11월 18일
0

ISTQB FL

목록 보기
1/5

1.1 테스팅이란 무엇인가?

  • 1.1.1 (K1): 테스팅의 일반적인 목적을 파악한다.
  • 1.1.2 (K2): 테스팅과 디버깅을 구별할 수 있다.

1.2 테스팅이 왜 필요한가?

  • 1.2.1 (K2): 테스팅이 왜 필요한지 예를 들 수 있다.
  • 1.2.2 (K2): 품질 보증과 테스팅의 관계를 설명하고, 높은 품질 확보에 테스팅이 어떻게 기여하는지 예를 들 수 있다.
  • 1.2.3 (K2): 오류(error), 결함(defect), 장애(failure)를 구별할 수 있다.
  • 1.2.4 (K2): 결함의 근본 원인과 그것의 영향을 구별할 수 있다.

테스팅의 필요성

  • 올바르게 동작하지 않는 소프트웨어는 금전, 시간, 비즈니스 평판 손실은 물론, 심하게는 부상이나 사망에 이르기까지 심각한 문제를 일으킬 수 있음.
    • 에어버스의 A400M 군 수송기 추락
    • 방사선 치료기 Therac-25로 인한 환자 사망
  • 테스팅이 왜 필요한가?
    • 운영 중 장애 발생 가능성을 줄이기 위해
    • 계약/법적 요구사항이나 특정 산업 표준을 만족시키기 위해
    • 컴포넌트나 시스템의 품질에 기여하기 위해
  • 소프트웨어 테스팅은 소프트웨어의 품질을 평가하고, 운영 중 소프트웨어 장애의 발생 가능성을 줄이는 하나의 방법

테스팅의 일반적인 목적

  • 테스팅의 일반적인 목적
    • 요구사항, 사용자 스토리, 설계, 소스 코드 등과 같은 작업 산출물 평가에 의한 결함 예방
    • 명시된 모든 요구사항이 충족되었는지 검증
    • 테스트 대상의 완성 여부 확인과 사용자와 기타 이해관계자의 기대치 대로 동작하는지 확인
    • 테스트 대상의 품질 수준에 대한 자신감 획득
    • 장애 및 결함 발견과 이에 따른 부적절한 소프트웨어 품질의 리스크 레벨의 감소
    • 이해관계자가 테스트 대상의 품질 수준을 결정하는 데 필요한 충분한 정보 제공
    • 계약/법률/규제 요구사항이나 표준의 준수 및 테스트 대상이 이러한 요구사항이나 표준을 준수하는지 확인
  • 테스트 목적을 충족하는 것은 소프트웨어 개발과 유지보수 전반의 성공 확률을 높일 수 있음

정황에 따라 달라지는 테스팅의 목적

  • 테스팅의 목적은 테스트 대상 컴포넌트나 시스템의 정황에 따라 달라질 수 있음
    • 개발 수명 주기 모델, 테스트 레벨 등
  • 테스트 레벨에 따라 달라지는 테스팅의 목적
    • 컴포넌트 테스팅
    • 결함을 최대한 조기에 가능한 많이 식별하고 수정
    • 코드 커버리지 향상
  • 인수 테스팅
    • 시스템이 기대한 대로 동작하는지 확인
    • 시스템이 요구사항을 충족하는지 확인
    • 이해관계자에게 시스템을 배포하는 것에 대한 리스크 정보 제공

오류, 결함, 장애 - 테스팅과 디버깅

  • 오류(Error) (실수, Mistake)
    • 비즈니스 분석가가 고객의 요구 A를 B로 오해 (의사소통 문제, 시간 촉박)
  • 결함(Defect)(Fault, Bug)
    • 요구사항 명세서에 B를 명시: 요구사항 결함
    • 코드를 잘못 구현: 코드 결함

테스팅 - 테스트를 수행하여 소프트웨어 결함으로 인한 장애 식별
---> 장애 보고
디버깅 - 장애의 원인을 찾고 분석해서 수정하는 개발 활동

  • 장애(Failure)
    • B를 실행하였지만 실행되지 않음 / 시스템 테스트
    • 고객에게 B를 릴리스 했지만 인수 거부 / 인수 테스트
  • 장애는 환경 조건으로 인해 발생할 수도 있음
  • 테스트 겨로가가 기대한 것과 다르다고 해서 무조건 장애가 있다고 볼 수는 없음
    • 테스트 실행 방식의 오류나 테스트 데이터, 테스트 환경, 기타 테스트웨어에 결함이 있는 경우, 또는 그 외 다양한 이유로 거짓양성 (False Positive)이 발생할 수 있음
거짓 양성 (False Positive)거짓 음성 (False Negative)
정의모델이 실제로는 음성인데 양성으로 잘못 분류한 경우모델이 실제로는 양성인데 음성으로 잘못 분류한 경우
예시암 진단에서 실제로는 환자가 암에 걸리지 않았는데도 모델이 양성으로 판단하는 경우 거짓 양성에 해당암 진단에서 실제로는 암에 걸린 환자를 모델이 음성으로 판단하는 경우
문제점거짓 양성이 많으면 정확도가 감소하고, 특히 실제로 드물게 발생하는 이벤트의 경우 문제가 커짐 (화재경보 오작동)긍정 음성이 발생하면 실제로 중요한 이벤트를 감지하지 못하게 되어 결과적으로 잘못된 의사결정으로 이어질 수 있다. (암 발견 시기 놓침)

결함, 근본원인, 결과

  • 결함의 근본 원인
    • 결함을 만들어낸 최초의 행동이나 조건
  • 결함 분석을 통해 결함의 근본 원인을 식별할 수 있으며, 식별된 결함의 근본 원인을 기반으로 이루어지는 프로세스 개선은 차후 유사한 결함의 발생 가능성을 낮출 수 있음

테스팅에 대한 오해

  • 테스팅은 소프트웨어를 실행하고 결과를 확인하는 활동
  • 소프트웨어 테스팅이란 다양한 활동을 포함하는 프로세스
    • 테스트 계획, 분석, 설계, 테스트 구현, 테스트 진행 상황 및 결과 보고, 테스트 대상 품질 평가 등
  • 테스팅은 명세의 verification에만 국한된 활동
    • validation도 테스팅에 포함됨
  • Verification: 시스템이 주어진 명세 (요구사항, 사용자 스토리, 그 외 기타 명세)를 충족하는지 확인하는 것
  • Validation: 시스템이 운영 환경에서 사용자 또는 기타 이해관계자의 요구를 만족시키는지를 확인하는 것

성공을 위한 테스팅의 기여

  • 결함을 발견하고 발견된 결함을 수정하는 것은 컴포넌트나 시스템의 품질에 기여하는 것
  • 요구사항 리뷰 혹인 사용자 스토리 개선에서 결함을 식별하고 제거
    • 잘못된 혹은 테스트할 수 없는 기능이 개발되는 리스크를 완화시킬 수 있음
  • 시스템을 설계하는 동안 테스터가 시스템의 설계자와 적극적으로 협업할 경우, 설계와 그것을 어떻게 테스트해야 하는지에 대해 서로 좀 더 깊이 있게 이해할 수 있음
    • 이해도가 올라가면 기능 설계에 결함이 유입되는 리스크가 줄어들게 되고, 필요한 테스트를 좀 더 일찍 식별할 수 있음
  • 코드를 개발하는 동안 테스터가 개발자와 적극적으로 협업할 경우, 코드와 그것을 어떻게 테스트해야 하는지에 대해 서로 좀 더 깊이 있게 이해하게 됨
    • 높아진 이해도는 코드와 테스트에서의 결함 발생 리스크를 완화시킬 수 있음.
  • 테스터가 릴리스 전에 소프트웨어를 확인하고 검증 (Verification and Validation) 하면 장애 발견과 결함 발견을 지원할 수 있음
    • 소프트웨어가 이해관계자의 필요와 요구사항을 충족시킬 가능성이 높아짐

품질 보증과 테스팅

  • 품질 관리
    • 품질 측면에서 조직이 나아가야 하는 방향을 제시하고 제어하는 모든 활동
    • 품질 보증품질 제어를 포함한 여러 가지 활동을 포함함
  • 품질 보증
    • 적절한 품질 수준을 달성했는지 확신을 얻기 위해 적절한 프로세스를 준수하도록 하는 것에 집중 (테스팅이 올바르게 적용되고 있는가?)
    • 프로세스를 바탕으로 생성되는 작업 산출물의 품질은 높은 경우가 많으며, 높은 작업 산출물 품질은 결함 예방에 도움이 됨
    • 근본 원인 분석과 회고 회의의 결과로 프로세스를 개선하는 것은 효과적인 품질 보증에 매우 중요한 사항
  • 품질 제어
    • 품질 요구사항을 준수하는 데 중점을 둔 운영상의 기술과 활동
    • 테스트 활동은 여러 가지 품질 제어 활동 중 하나로 전반적인 소프트웨어 개발 및 유지보수 프로세스에 포함됨 ⭐

품질 보증 ----프로세스----> 품질 제어 (테스팅)
품질 보증 <----데이터 제공---- 품질 제어 (테스팅)



문제

  1. 다음 중 테스팅의 일반적인 목적에 해당하지 않는 것은?
    a. 시스템 출시 전 결함 수정
    b. 요구사항 충족 확인
    c. 결함 발견
    d. 시스템에 유입되는 결함 예방

  1. 다음 설명 중 테스팅과 디버깅에 대한 설명으로 올바른 것은?
    a. 테스팅 또는 확인 테스팅을 통해 장애를 식별한 후 디버깅을 실행한다.
    b. 테스팅과 디버깅은 테스터의 업무이다.
    c. 결함 수정이 잘못되었다는 것을 디버깅을 통해 확ㅇ니한 후, 확인 테스팅을 실행한다.
    d. 동적 테스트로 결함을 발견하면 디버깅으로 이를 제거한다.

  1. 다음 중 국내용 가스 보일러 제어 시스템을 출시 전에 테스트해야 하는 이유로 가장 적절하지 않은 것은?
    a. 보일러 설치 후 소프트웨어 문제 해결 비용이 많이 든다.
    b. 보일러 제어 관련 문제는 안전과 연관되어 있으며 규정 표준에 따른 테스트가 필요하다.
    c. 임베디드 시스템의 공급자는 계약서에 소프트웨어 공급 업체가 테스트를 수행하도록 명시했다.
    d. 결함 보고서는 프로젝트 관리자와 개발자가 출시 여부를 결정하기 위해 필요하다.

  1. 다음 중 테스팅과 품질에 관한 설명 중 올바른 것은?
    a. 테스팅은 개발 프로세스의 비효율성을 확인하여 품질 보증에 기여한다.
    b. 품질 관리와 품질 보증 모두 품질에 기여하는 활동으로 테스팅을 포함한다.
    c. 테스트 프로세스의 분석 및 개선은 품질 보증 활동 중 하나이다.
    d. 테스팅을 통해 코드에서 결함을 제거함으로써 장애를 줄이고 품질을 향상시킬 수 있다.

  1. 아래와 같은 예제에 대해:
    ㄱ. 개발자가 피곤하여 잘못된 라이브러리 함수 사용
    ㄴ. '>'를 사용해야 하는 결정 구문에 '<' 사용
    ㄷ. 출국 결과 조회 웹 페이지가 조회하는 모든 사용자에게 매우 느리게 업데이트 됨

    용어와 예제를 가장 적절하게 짝지은 것은?

    a. 결함 - ㄱ, 오류 -ㄴ, 장애 -ㄷ
    b. 결함 - ㄴ, 오류 -ㄱ, 장애 -ㄷ
    c. 결함 - ㄷ, 오류 -ㄴ, 장애 -ㄱ
    d. 결함 - ㄴ, 오류 -ㄷ, 장애 -ㄱ


  1. 다음 중 결함의 원인과 결과 사이의 관계를 가장 잘 설명한 것은?
    a. 결함 분석을 통해 결함을 야기한 실수를 찾을 수 있다.
    b. 장애 분석을 통해 디버깅이 필요한 오류 코드를 찾을 수 있다.
    c. 결함 분석을 통해 결함에 의한 장애를 찾을 수 있다.
    d. 오류 분석을 통해 개발자가 야기한 결함을 찾을 수 있다.

1번 문제 정답: a - 출시 전이 아니라 조기에

2번 문제 정답: a - 테스팅은 테스터가 장애를 식별하는 활동. 디버깅은 개발자가 원인 찾고 수정하는 개발 활동

3번 문제 정답: d - a,b,c는 시스템을 출시 전에 해야하는 건데 d는 적절하지 않은 표현

4번 문제 정답: c

5번 문제 정답: b - ㄱ. 피곤은 실수니까 오류

6번 문제 정답: a

0개의 댓글