Agaile,Waterfall,BDD,TDD,ATDD

Suri·2024년 5월 24일

Agalile 방법론

  • 소프트 웨어 개발 방식중 하나 작업 계획을 짧은 단위로 세우고
    제품을 만들고 고쳐 나가는 사이클을 반복함으로써 고객의 요구 변화에
    유연하고 신속하게 대응하는 개발 방법론

Agaile이 왜 중요해?

  • 새로운 방식의 탄생에넌 분명 기존 방식의 단점을 보완하고자
    함이 있을 것. 애자일의 탄생 배경에는 워터폴 방식이 있다

Waterfall방식

주문 -> 디자인 -> 기능구현 -> 테스팅 -> 베포

  • 순서대로 흘러가는 방식. 긴 계획을 짜고 그 안에서 순서대로 체계적으로 진행되는 전통적인 방식 하지만 이는 지나치게 계획과 절차에 의존해 시간과 비용의 낭비가 증가한다는 단점이 있었다

Agaile 방식

주문 ➪ 디자인 ➪ 기능구현 ➪ 테스팅 ➪ 배포" x ∞

  • 라고 보면 된다대신, 기능을 축소하고 그 주기를 짧게하여 빠르게 한 주기가 돌게 한 후 중간 테스트를 많이 가지는 방식이다.
    그 짧은 한 주기 = 스프린트(Sprint) 라고 한다.
    이는 짧고 반복적인 과정으로 빠르고 유연하며 수정도 쉽다는 장점이 있다.
    과거와는 비교조차 하기 어려울 정도로 시장과 고객 등 변화가 빨라지고
    한치 앞을 예상하기 어려운 환경 때문에, 최근에는 거의
    모든 IT업계에서는 애자일 방식을 선호하고 있다

그렇다면 TDD는 무엇인가?

TDD란

Test Driven Development(테스트 주도 개발)

  • 이름에서 유추할 수 있듯 테스트를 중요시하는 개발 방법론이며,
    작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.

  • 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 Test-First 개념에 기반을 둔 단순한 설계를 중요시한다. 프로그래밍 전에 테스트 코드를 먼저 작성하는
    특징이 있다. 중요한 것은 실패하는 테스트 코드를 작성할 때까지
    실제 코드를 작성하지 않는 것과, 실패하는 테스트를 통과할 정도의
    최소 실제 코드를 작성해야하는 것이다.
    이를 통해 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다.

TDD의 장점 & 단점

장점

  • 재설계 시간을 단축 : 높은 품질의 소프트웨어를 보장
  • 철저한 기능별 모듈화 : 종속성이 낮은 코드
  • 추가 요구사항 반영이 비교적 쉬움
  • 디버깅 시간의 단축: 에러 및 버그가 적음

단점

  • 낮은 생산성 (테스트코드를 추가적으로 개발해야 하므로)
  • 초기 비용 증가 (초기 세팅 비용이 들고 숙련되기까지 시간이 소요됨)
  • 기한 준수가 중요한 프로젝트에는 도입이 어려움

행동 중심 개발

(BDD, Behavior-driven devlopment)

행위 주도 개발은 테스트 주도 개발 (TDD)에서 파생된 개발 방법론이다.

  • 쉽게 생각하면 코드를 작성하기 전에 코드가 일할 행위에 대한 명세를 먼저 작성해야 한다 하면좋은 습관이라고 수긍하게 되지 않을까? 아직 존재하지 않은 코드에 대해 테스트를 작성하기 보다는, 행위에 대한 명세를 작성하는 것이라고 생각하면 직관적으로 쉽게 이해가 된다. 이것이 BDD의 핵심이다

  • BDD는 비 기술적 언어를 사용하여 더 많은 사람들이 쉽게 이해하도록 하며 고객과 개발자의 관점에서 시스템이 어떻게 작동해야 하는지에 초점을 맞춘다.

  • BDD에서 주로 사용하는 디자인 패턴은 다음과 같다.

  • Given-When-Then Pattern

  • Given : 시나리오 진행에 필요한 값을 설정한다.

    사용자가 로그인이 된 상태에서

  • When : 시나리오를 진행하는데 필요한 조건을 명시한다.

    포인트 조회를 한다면

  • Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시한다.

    사용자의 포인트가 보여진다.

정의

  • BDD는 팀원들이 시스템의 예상된 행동을 논의해서 예상되는 기능에 관한 공통된 이해 를 구축하는 방식이다. 테스트 중심 개발 TDD과 수락 테스트 중심 개발 ATDD에 기인한 방식을 합치고 다듬는 방법이다 .

장점

  • BDD는 가능한 가장 작은 단위가 아니라 특정 기능을 제공하는 데
    초점을 둔다. 비지니스에서 요구하는 가치를 제공한다는 측명에서 중요하다

ATDD(Acceptance Test Driven Development)

인수 테스트 주도 개발은 말 그대로 인수테스트가 주도하는 개발 방법론을 의미한다.

  • 인수테스트가 무엇인지 궁금하다면 이전 게시글을 참고하자.
    (단위테스트, 통합테스트, 인수테스트란)

  • BDDATDD는 유사하나 BDD는 개발자 관점에서 기능의 동작에
    중점을 두는 반면 ATDD는 사용자 시나리오 관점에서 정확한
    요구 사항을 캡처하는 데 중점을 둔다.

  • 구현 전에 사용자, 테스터 및 개발자가 인수 조건(Acceptance Criteria)을 정의한다. 이를 통해 모든 프로젝트 구성원이 수행해야 할 작업과 요구 사항을 정확히 이해할 수 있도록 도와준다.

  • 백엔드 시스템에서는 소프트웨어 인수테스트를 위해 주로 API 에 인수테스트 코드를 작성한다. 그 과정에서 주로 RestAssured를 사용한다.

profile
나의 공부 일지

0개의 댓글