Testing - 테스팅이란 무엇인가?

Testing 기초

Posted by Yan on November 6, 2021

테스팅이란 무엇인가?

  • 테스팅은 단지 소프트웨어를 실행하고 결과를 확인하는 테스트 수행에 국한되지 않는다.
  • 소프트웨어 테스팅이란, 다양한 활동을 포함하는 프로세스이며, 테스트 실행은 그 많은 활동 중 하나일 뿐이다.
  • 테스트 프로세스는 테스트 계획, 분석, 설계, 테스트 구현, 테스트 진행 상황 킻 결과 보고, 테스트 대상 품질 평가 등 만흔 활동을 포함한다.

테스팅의 일반적인 목적

  • 요구사항, 사용자 스토리, 설계, 소스 코드 등과 같은 작업 산출물 평가에 의한 결함 예방
  • 명시된 모든 요구사항이 충족됐는지 검증
  • 테스트 대상의 완성 여부 확인과 사용자와 기타 이해관계자의 기대치대로 동작하는지 확인
  • 테스트 대상의 품질 수준에 대한 자신감 획득
  • 장애 및 결함 발견과 이에 따른 부적절한 소프트웨어 품질의 리스크 레벨 감소
  • 이해관계자가 테스트 대상의 품질 수준을 결정하는 데 필요한 충분한 정보 제공ㅇ
  • 계약/법률/규제 요구사항이나 표준의 준수 및 테스트 대상이 이러한 요구사항이나 표준을 준수하는지 확인
  • 컴포넌트 테스팅
    • 내재되어 있는 결함을 최대한 조기에 가능한 많이 식별하고 수정하기
    • 코드 커버리지를 높이기
  • 인수 테스팅
    • 하나의 시스템이 기대한대로 동작하는지, 요구사항을 충족하는지 확인
    • 특정 시점에 시스템을 배포하는 것에 대한 리스크 정보를 이해관계자에게 제공하는 것

테스팅과 디버깅의 차이

  • 테스트 : 소프트웨어 결함으로 인한 장애를 찾아낼 수 있다.
    • 테스터는 초기 테스트와 마지막 확인 테스트를 담당
  • 디버깅: 그런 장애의 원인을 찾고 분석해서 수정하는 개발 활동
    • 개발자는 디버깅 관련 컴포넌트 및 컴포넌트 통합 테스팅(지속적 통합)수행
  • 이후 확인 테스팅에서 결함을 제대로 수정했는지 확인
  • 애자일 및 기타 소프트웨어 생명주기 모델에서는 테스터가 디버깅과 컴포넌트 테스팅에 관여하기도 한다.

테스팅이 왜 필요한가?

성공을 위한 테스팅의 기여

  • 적절한 테스트 기법을, 적절한 테스트 전문성으로, 적절한 테스트 레벨과 개발 생명주기 단계에 적용하면 소프트웨어와 시스템이 문제(결함으로 인한 장애, 이해관계자의 요구사항 불충족 등)를 안고 배포되는 경우를 줄일 수 있다.

예시

  • 테스터를 요구사항 리뷰 혹은 사용자 스토리 개선에 참여시키면 해당 작업 산출물에서 결함을 발견할 수 있다.
  • 시스템을 설계하는 동안 테스터가 시스템 설계자와 적극적으로 협업 -> 설계와 테스트 방향에 대한 이해도 상승 -> 기능 설계에 결함이 유입되는 리스크가 줄어들고, 필요한 테스틀 조금 더 일찍 알 수 있다.
  • 코드 개발 시 테스터와 시스템 설계자가 적극적으로 협업 -> 코드와 테스트 방향에 대한 이해도 상승 -> 코드와 테스트에서의 결함 발생 리스크 감소
  • 테스터가 릴리즈 전에 소프트웨어 확인 및 검증 -> 놓칠 수 있는 장애 발견, 결함을 제거하는데 도움을 줄 수 있다. 이해관계자의 필요와 요구사항 충족도 증가.

품질 보증과 테스팅

품질보증과 테스팅은 포괄적인 개념인 품질 관리 Quality Management에 속한다.

  • 품질관리: 품질 측면에서 조직이 나아가야 하는 방향을 제시하고 제어하는 모든 활동이 포함된다.

QA Quality Assurance

  • 품질 보증
  • 적절한 품질 수준을 달성했는지 확신을 얻기 위해 적절한 프로세스를 준수하도록 하는 것에 초점을 두고 있다.
  • QA 프로세스를 바탕으로 생성되는 작업 산출물의 품질은 더 월등한 경우가 많다.
  • 높은 작업 산출물 품질은 결함 예방에 도움이 된다.
  • 근본 원인 분석(결함 원인을 찾아 제거하기 위함), 회고 회의의 결과를 적절하게 적용해서 프로세스를 개선하는 것은 효과적인 품질 보증에 중요하다.
  • 전반적인 프로세스의 올바른 수행 여부에 관심을 가진다 -> 올바른 테스팅 적용에도 관심을 가진다.

Testing

  • 테스트 활동은 소프트웨거 개발 및 유지보수 프로세스의 일부다.

오류Errors, 결함Defects, 장애Failures

오류

  • 결함(버그)를 발생시키는 오류(실수)를 만들 수 있는데, 특정 작업에 결함을 만드는 오류(원인)은 다른 작업에도 결함을 만들 수 있다.
    • 예를 들어, 요구사항을 도출하면서 범해진 요구 -> 요구사항 결함 -> 프로그램 작성 시 오류를 일으킴 -> 코드 결함의 원인이 된다.

결함

  • 코드의 결함이 실행되면 장애를 일으킬 수 있다(반드시 장애를 일으키는 것은 아니다)
    • 결함 중 일부는 발생 가능성이 없거나 매우 낮아서 특수한 입력이나 사전조건이 충족되어야 장애를 유발

대표적인 오류 발생 원인

  • 시간적인 압박
  • 사람의 실수
  • 경험이 적거나 기술이 부족한 프로젝트 참여자
  • 요구사하과 설계 등에 대한 프로젝트 참여자 간의 의사소통 문제
  • 코드, 설계, 아키텍처의 복잡성, 해결해야하는 근본 문제, 사용하는 기술의 복잡도
  • 시스템 내/외부 인터페이스에 대한 이해 부족, 특히 내/외부 인터페이스 수가 많은 경우
  • 새롭고 익숙하지 않은 기술

장애

  • 장애는 코드 결함뿐만 아니라 환경ㅇ 조건으로 인해 발생할 수 있다.
    • 방사능, 전자기정, 환경오염 등은 펌웨어 결함의 원인이 되거나 하드웨어 상태를 변화시켜 소프트웨어 실행에 영향을 줄 수 있다.
  • 테스트 결과가 기대한 것과 다르다고 무조건 장애가 있다고 볼 수 없음
    • 다양한 이유로 거짓양성(false positive: 결함으로 보고됐지만 실제 결함이 아닌 경우) 발생 가능성
      • 테스트 실행 방식의 오류, 테스트 데이터, 테스트 환경, 기타 테스트웨어에 결함이 있는 경우 등의 이유에 의함
    • 비슷한 오류나 결함이 거짓음성(false negative: 테스트가 발견했어야 할 결함을 발견하지 못하는 경우)의 원인이 되는 반대의 경우도 있다.

결함Defects, 근본 원인Root Causes, 결과Effects

  • 결함의 근본 원인: 해당 결하믈 만들어낸 최초의 행동이나 조건
  • 결함 분석 -> 근본 원인 찾기 -> 차후 유사한 결함의 발생 가능성을 낮춤
    • 이를 기반으로 이루어지는 프로세스 개선은 이후 발생하는 결함 수를 상당 부분 줄여준다.
reference

ISTQB Certified Tester Foundation Level Syllabus 201