TDD (Test Driven Development) 란 무엇입니까? 예제

테스트 주도 개발

TDD (Test Driven Development)는 코드가 수행 할 작업을 지정하고 검증하기 위해 테스트 케이스를 개발하는 소프트웨어 개발 접근 방식입니다. 간단히 말해서, 각 기능에 대한 테스트 케이스가 먼저 생성되고 테스트되며 테스트가 실패하면 테스트를 통과하고 코드를 간단하고 버그가 없도록 만들기 위해 새 코드가 작성됩니다.

테스트 주도 개발은 애플리케이션의 모든 작은 기능에 대한 테스트를 설계하고 개발하는 것으로 시작됩니다. TDD는 개발자에게 자동화 된 테스트가 실패한 경우에만 새 코드를 작성하도록 지시합니다. 이것은 코드의 중복을 방지합니다. TDD의 전체 형태는 테스트 주도 개발입니다.

TDD의 간단한 개념은 쓰기 전에 실패한 테스트를 작성하고 수정하는 것입니다. 새로운 코드 (개발 전). 이렇게하면 테스트를 통과하기 위해 한 번에 적은 양의 코드를 작성할 때 코드 중복을 방지 할 수 있습니다. (테스트는 테스트를 수행하기 위해 테스트해야하는 요구 사항 조건 일뿐입니다.)

테스트 주도 개발은 자동화 된 개발 및 실행 프로세스입니다. 응용 프로그램의 실제 개발 전에 테스트하십시오. 따라서 TDD는 Test First Development라고도합니다.

이 자습서에서는 다음에 대해 자세히 알아 봅니다.

  • TDD 테스트 수행 방법
  • TDD Vs. 기존 테스트
  • 수락 TDD 및 개발자 TDD 란 무엇입니까?
  • AMDD (Agile Model Driven Development)를 통한 TDD 확장
  • TDD (Test Driven Development) 대. AMDD (Agile Model Driven Development)
  • TDD의 예
  • TDD의 이점

TDD 테스트 수행 방법

다음 단계는 TDD 테스트 수행 방법을 정의합니다.

  1. 테스트 추가
  2. 모든 테스트를 실행하고 새 테스트가 실패하는지 확인하십시오.
  3. 일부 작성
  4. 테스트를 실행하고 코드를 리팩터링합니다.
  5. 반복합니다.

TDD주기 정의

  1. 테스트 작성
  2. 실행합니다.
  3. 코드 변경 즉, 리팩터링입니다.
  4. 반복 프로세스

TDD에 대한 몇 가지 설명 :

  • TDD는 “테스트”가 아닙니다. “디자인”도 마찬가지입니다.
  • TDD는 “일부 테스트를 작성한 다음 테스트를 통과하는 시스템을 구축하는 것을 의미하지 않습니다.
  • TDD는”많은 테스트를 수행합니다. “

TDD Vs. 기존 테스트

TDD 접근 방식은 주로 사양 기술입니다. 소스 코드가 확인 과정에서 철저하게 테스트되도록합니다. 수평.

  • 기존 테스트에서 성공적인 테스트는 하나 이상의 결함을 찾습니다. TDD와 동일합니다. 테스트가 실패하면 문제를 해결해야한다는 사실을 알고 있기 때문에 진행된 것입니다.
  • TDD는 시스템이 실제로 정의 된 요구 사항을 충족하는지 확인합니다. 시스템에 대한 자신감을 쌓는 데 도움이됩니다.
  • TDD에서는 테스트가 제대로 작동하는지 확인하는 프로덕션 코드에 더 중점을 둡니다. 전통적인 테스트에서는 테스트 케이스 디자인에 더 중점을 둡니다. 테스트가 요구 사항을 충족하기 위해 애플리케이션의 적절한 / 부적절한 실행을 보여줄지 여부.
  • TDD에서는 100 % 커버리지 테스트를 달성합니다. 기존 테스트와 달리 모든 코드 행이 테스트됩니다.
  • 기존 테스트와 TDD의 조합은 시스템의 완벽 함보다는 시스템 테스트의 중요성으로 이어집니다.
  • In 애자일 모델링 (AM), “목적을 가지고 테스트”해야합니다. 어떤 것을 테스트하는 이유와 테스트가 필요한 수준을 알아야합니다.

수락 TDD 및 개발자 TDD 란 무엇입니까?

TDD에는 두 가지 수준이 있습니다.

p>

  1. 합격 TDD (ATDD) : ATDD로 단일 합격 테스트를 작성합니다. 이 테스트는 사양의 요구 사항을 충족하거나 시스템 동작을 충족합니다. 그 후 해당 승인 테스트를 수행하기에 충분한 생산 / 기능 코드를 작성하십시오. 수락 테스트는 시스템의 전반적인 동작에 중점을 둡니다. ATDD는 BDD (Behavioral Driven Development)라고도합니다.
  2. 개발자 TDD : 개발자 TDD를 사용하면 단일 개발자 테스트, 즉 단위 테스트를 작성한 다음 해당 테스트를 수행하기에 충분한 프로덕션 코드 만 작성합니다. 단위 테스트는 시스템의 모든 작은 기능에 중점을 둡니다. 개발자 TDD는 간단히 TDD라고합니다.

    ATDD 및 TDD의 주요 목표는 JIT (Just In Time) 기반으로 솔루션에 대한 세부적이고 실행 가능한 요구 사항을 지정하는 것입니다. JIT는 시스템에 필요한 요구 사항 만 고려하는 것을 의미합니다. 따라서 효율성을 높이십시오.

애자일 모델 기반 개발을 통한 TDD 확장 (AMDD)

TDD는 세부 사양 및 검증에 매우 능숙합니다. 전반적인 디자인, 시스템 사용 또는 UI와 같은 더 큰 문제를 통해 생각하지 못합니다.AMDD는 TDD가 지원하지 않는 Agile 확장 문제를 해결합니다.

따라서 AMDD는 더 큰 문제에 사용되었습니다.

AMDD의 수명주기.

MDD (Model-driven Development)에서는 광범위한 모델이 소스 코드가 작성됩니다. 차례로 민첩한 접근 방식이 있습니까?

위 그림에서 각 상자는 개발 활동을 나타냅니다.

구상은 프로젝트의 첫 주에 수행 될 테스트를 예측 / 상상하는 TDD 프로세스 중 하나입니다. 구상의 주요 목표는 시스템의 범위와 시스템의 아키텍처를 식별하는 것입니다. 성공적인 구상을 위해 높은 수준의 요구 사항 및 아키텍처 모델링이 수행됩니다.

소프트웨어 / 시스템의 세부 사양이 아닌 프로젝트의 전체 전략을 정의하는 소프트웨어 / 시스템의 요구 사항을 탐색하는 프로세스입니다.

  1. 반복 0 : 구상

두 가지 주요 하위 활성화가 있습니다.

  1. 초기 요구 사항 구상.

    시스템의 높은 수준의 요구 사항과 범위를 파악하는 데 며칠이 걸릴 수 있습니다. 주요 초점은 사용 모델, 초기 도메인 모델 및 사용자 인터페이스 모델 (UI)을 탐색하는 것입니다.

  2. 초기 아키텍처 구상.

    또한 시스템의 아키텍처를 식별하는 데 며칠이 걸립니다. 프로젝트에 대한 기술적 방향을 설정할 수 있습니다. 주요 초점은 기술 다이어그램, 사용자 인터페이스 (UI) 흐름, 도메인 모델 및 변경 사례를 탐색하는 것입니다.

  1. 반복 모델링 :

    여기서 팀은 각 반복에 대해 수행 될 작업을 계획해야합니다.

  • 각 반복마다 민첩한 프로세스가 사용됩니다. 즉, 각 반복 동안 새 작업 항목이 우선 순위와 함께 추가됩니다.
  • 첫 번째 높은 우선 순위가 지정됩니다. 작업이 고려됩니다. 추가 된 작업 항목은 언제든지 항목 스택에서 우선 순위가 변경되거나 제거 될 수 있습니다.
  • 팀은 각 요구 사항을 구현하는 방법에 대해 논의합니다. 이러한 목적으로 모델링이 사용됩니다.
  • 해당 반복을 위해 구현할 각 요구 사항에 대해 모델링 분석 및 설계가 수행됩니다.
  1. 모델 스톰 링 :

    이는 Just in time Modeling이라고도합니다.

  • 여기 모델 세션은 종이나 화이트 보드에 문제를 논의하는 2/3 명의 팀원으로 구성됩니다.
  • 한 팀원이 다른 팀원에게 질문합니다. 그들과 함께 모델링합니다. 이 모델링 세션은 약 5 ~ 10 분이 소요됩니다. 팀원들이 모여서 화이트 보드 / 종이를 공유하는 곳.
  • 문제의 주요 원인을 찾을 수 없을 때까지 문제를 탐색합니다. 한 팀원이 원하는 문제를 확인하는 경우 적시에 해결하기 위해 다른 팀원의 빠른 도움을받습니다.
  • 다른 그룹 구성원이 문제를 탐색 한 다음 모두가 이전과 같이 계속합니다.이를 스탠드 업 모델링 또는 고객 QA 세션이라고도합니다. .
  1. TDD (Test Driven Development)
  • 애플리케이션 코드 및 세부 사양에 대한 확인 테스트를 촉진합니다.

li>

  • 승인 테스트 (상세한 요구 사항)와 개발자 테스트 (단위 테스트)는 모두 TDD에 대한 입력입니다.
  • TDD는 코드를 더 간단하고 명확하게 만들어 개발자가 더 적은 문서를 유지할 수 있도록합니다.
  • li>
    1. 리뷰.
    • 선택 사항이며 코드 검사 및 모델 리뷰가 포함됩니다.
    • 각 반복 또는 전체 프로젝트에 대해 수행됩니다.
    • 프로젝트에 대한 피드백을 제공 할 수있는 좋은 옵션입니다.

    TDD (Test Driven Development) 대. AMDD (Agile Model Driven Development)

    TDD의 예

    여기이 예에서는 클래스 암호를 정의합니다. 이 수업에서는 다음과 같은 조건을 만족하도록 노력하겠습니다.

    비밀번호 수락 조건 :

    • 비밀번호는 5-10 자 사이 여야합니다.

    먼저 코드를 작성합니다. 위의 모든 요구 사항을 충족합니다.

    시나리오 1 : 테스트를 실행하기 위해 PasswordValidator ();

    우리는 TestPassword ();

    출력은 아래와 같이 PASSED입니다.

    출력 :

    시나리오 2 : 다음을 수행 할 수 있습니다. TestPasswordLength () 메서드를 참조하십시오. PasswordValidator 클래스의 인스턴스를 만들 필요가 없습니다. 인스턴스는 해당 클래스의 멤버 (변수 / 메소드)를 참조하기 위해 클래스의 객체를 생성하는 것을 의미합니다.

    코드에서 PasswordValidator pv = new PasswordValidator () 클래스를 제거합니다. PasswordValidator에서 직접 isValid () 메서드를 호출 할 수 있습니다. IsValid ( “Abc123”).(아래 이미지 참조)

    따라서 다음과 같이 리팩터링 (코드 변경)합니다.

    시나리오 3 : 리팩토링 후 출력에 실패 상태가 표시됩니다 (아래 이미지 참조). 이는 인스턴스를 제거했기 때문입니다. 따라서 비 정적 메서드 isValid ()에 대한 참조가 없습니다.

    그래서 public static boolean isValid (String password)로 Boolean 앞에 “static”단어를 추가하여이 메서드를 변경해야합니다. 위의 오류를 제거하여 테스트를 통과하도록 클래스 PasswordValidator ()를 리팩토링합니다.

    출력 :

    PassValidator 클래스를 변경 한 후 () 테스트를 실행하면 아래와 같이 출력이 통과됩니다.

    TDD의 장점

    • 초기 버그 공고.

      개발자는 코드를 테스트하지만 데이터베이스 세계에서는 종종 수동 테스트 또는 일회성 스크립트로 구성됩니다. TDD를 사용하면 시간이 지남에 따라 자신과 다른 개발자가 마음대로 재실행 할 수있는 자동화 된 테스트 모음을 구축 할 수 있습니다.

    • 더 나은 설계, 깔끔하고 확장 가능한 코드.
      • 코드가 사용되는 방식과 다른 모듈과 상호 작용하는 방식을 이해하는 데 도움이됩니다.
      • 더 나은 설계 결정과 더 많은 유지 보수 가능한 코드로 이어집니다.
      • TDD 여러 책임이있는 모 놀리 식 프로 시저가 아닌 단일 책임을 갖는 더 작은 코드를 작성할 수 있습니다. 따라서 코드를 더 쉽게 이해할 수 있습니다.
      • TDD는 또한 사용자 요구 사항에 따라 테스트를 통과하기 위해 프로덕션 코드 만 작성하도록합니다.
    • Refactor
      • 코드를 리팩터링하면 코드가 깨질 가능성이 있습니다. 따라서 일련의 자동화 된 테스트를 통해 릴리스 전에 이러한 중단을 수정할 수 있습니다. 자동화 된 테스트를 사용할 때 중단이 발견되면 적절한 경고가 제공됩니다.
      • TDD를 사용하면 최소한의 위험으로 업데이트 할 수있는 버그가 적은 더 빠르고 확장 가능한 코드가 생성됩니다.
    • 팀워크에 유용합니다.

      팀 구성원이없는 경우 다른 팀 구성원이 코드를 쉽게 선택하고 작업 할 수 있습니다. 또한 지식 공유를 지원하여 팀을 전반적으로 더 효과적으로 만듭니다.

    • 개발자에게 좋습니다.

      개발자가 TDD 테스트 케이스를 작성하는 데 더 많은 시간을 투자해야하지만 디버깅 및 새로운 기능 개발에 소요되는 시간은 훨씬 적습니다. 더 깔끔하고 덜 복잡한 코드를 작성할 것입니다.

    요약 :

    • TDD는 테스트 주도 개발을 의미합니다. 이전에 설계된 테스트를 통과하기 위해 코드를 수정하는 프로세스입니다.
    • 테스트 케이스 디자인보다 프로덕션 코드에 더 중점을 둡니다.
    • 테스트 주도 개발은 프로세스입니다. 이전에 설계된 테스트를 통과하기 위해 코드를 수정하는 것입니다.
    • 소프트웨어 엔지니어링에서는 “Test First Development”라고도합니다.
    • TDD에는 코드 리팩터링 (예 : 코드 동작에 영향을주지 않고 기존 코드에 일정량의 코드 변경 / 추가)이 포함됩니다.
    • TDD를 사용하면 코드가 더 명확하고 간단 해집니다. 이해합니다.

    이 기사는 Kanchan Kulkarni가 기고했습니다.

  • 답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다