테스트의 개념 및 활용법 완전정복

CH01. 테스트의 개념과 중요성 이해하기

CH01_01. 강사 소개 및 수업 커리큘럼 설명


  1. 주제: 강사 소개 및 수업 커리큘럼 설명

  2. 목적: 전반적인 수업에 대한 방향성과 목적을 설명

  3. 내용

    AJ’s Father 강사 소개

    “소프트웨어 테스트 전략과 도구”에 대한 전반적인 기초적인 이론 학습 통해서 이후 파트에서 진행될 실전 프로젝트에서 어려움 없이 테스트 전략과 도구를 적용하기 위한 준비 운동

CH01_02. 테스트 정의 및 필요성 소개


  1. 주제: 테스트 정의 및 필요성 소개
  2. 목적: 테스트 코드란 무엇(What?)이고, 왜(Why) 필요하고, 어떤(Which) 테스트 코드가 좋은 테스트 코드일까?를 배워보고, 테스트 종류까지 알아보자!
  3. 내용
    1. What; 테스트 코드란 무엇인가?

      소프트웨어 기능과 동작을 테스트하는데 사용되는 코드를 말한다.

      개발자가 요구사항에 맞게 개발한 기능이 의도대로 정확히 동작하는지 검증하는 절차를 코드화 해놓은 것이 테스트 코드이다.

    2. Why; 테스트 코드를 왜! 작성해야 하나?

      1. Add Function 관점
        1. 신규 기능 개발 과정 중 예상하지 못했던 문제를 미리 발견할 수 있다.
        2. 작성한 코드가 의도한 대로 동작하는지 검증할 수 있다.
      2. Refactoring 관점
        1. 단순 구조적 변경(중복 제거, 캡슐화)을 적용 했을 때, 이전과 동일하게 기능이 정상 동작 여부를 확인할 수 있다.
        2. 코드 수정이 필요한 상황에서 유연하고 안정적인 대응을 할 수 있다.
    3. 테스트의 종류

      TEST의 종류는 테스트 대상 범위나 성격에 따라 크게 3가지로 구분 된다. UI, Service(Intergration), Unit Test 등으로 구분한다. 아래 피라미드 구조를 보면 밑으로 내려 올 수록 테스트의 속도와 비용은 줄어들고 테스트의 크기(또는 범위)는 점점 커지는 것을 볼 수 있다.

      1. 단위(Unit) 테스트

        가장 작은 단위로 기능을 나누어 기능을 테스트하는 기법을 말한다.

        하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트를 말한다. 여기서 모듈은 애플리케이션을 구성하는 객체의 기능(메서드)을 의미한다. 예를 들면, 페스트캠프 웹페이지의 로그인 기능 중 User의 ID와 Password를 입력 받아 회원 여부를 확인하는 메서드에 대한 독립적인 테스트가 1개의 단위 테스트가 될 수 있다.

        즉, 단위 테스트는 애플리케이션을 구성하는 하나의 기능(?)을 더 작은 단위로 쪼갠 하나의 메서드(독립적으로 어떠한 기능을 완성시킬 수 없는 단위)가 올바르게 동작하는지를 독립적으로 테스트 하는 것을 말한다.

      2. 통합(Intergration) 테스트

        통합 테스트는 모듈을 통합하여 독립적으로 하나의 기능을 수행할 수 있는 단위를 만드는 과정에서 서로 다른 모듈 혹은 객체 간 상호작용의 유효성을 검증하는 테스트를 말한다.

        예를 들면, 웹 페이지의 로그인 기능을 작은 단위로 나누면 1. User ID 및 Password 값에 대한 유효성 검사 2. User ID 및 Password 기반으로 회원 여부 확인 3. Password 확인 4. 토큰 발급 으로 나뉠 수 잇을 것 같다. 이렇게 나눠져 있는 모듈을 하나로 합쳐서 로그인 API를 만들고 테스트하는 단계를 통합 테스트라고 말한다.

      3. 인수(UI) 테스트

        대형 테스트로 분류되는 UI 테스트는 실제 사용자들이 사용하는 화면에 대한 테스트를 하여 서비스의 기능이 정상적으로 작동하는지 검증하는 테스트를 말한다.

        예를 들면, 새롭게 추가된 페스트 캠프의 홈페이지의 로그인 기능을 Staging 환경에만 배포하고 Real User가 아닌 Test User(QA or Developer or PM)로써 웹 브라우저를 통해서 로그인 기능을 테스트하는 것을 말한다. 위에서 이야기 했지만, 인수 테스트의 경우, 배포 단계를 꼭! 거쳐야 테스트가 가능하기 때문에 많은 리소스가 소요 된다.

      출처: https://martinfowler.com/bliki/TestPyramid.html

      출처: https://martinfowler.com/bliki/TestPyramid.html

CH01_03. 테스트 개발 방법론과 TDD 개발 장점 설명


  1. 주제: 테스트 개발 방법론과 TDD 개발 장점 설명