본문 바로가기

프로그래밍/CS

[Software Engineering] TDD(Test Driven Development)

[Software Engineering] TDD(Test Driven Development)

  • 테스트 주도 개발을 의미
  • 프로그램 개발에 있어 디자인 > 코드개발 > 테스트 라는 기존의 과정과 다르게, 테스트 케이스를 먼저 작성한 후 실제 코드를 개발하는 리팩토링 절차를 거침

 

기존의 방식
TDD 방식


TDD의 장점

  • 반복적인 검토를 통해 고품질의 소프트웨어를 만들 수 있다.
  • 작업과 동시에 테스트를 진행하며 실시간으로 오류 파악이 가능하다
  • 짧은 개발주기로 고객의 요구사항에 빠르게 대응할 수 있다
  • 자동화 도구를 사용해 TDD 테스트 케이스를 단위 테스트로 활용할 수 있다.
    • 단위 테스트: 소프트웨어 개발에서 개별적인 코드 단위를 테스트하는 작업
    • 자동화 도구를 활용해 TDD테스트케이스를 쉽게 실행하고 결과를 확인할 수 있으며, 코드 변경시 자동으로 테스트를 실행하여 코드의 무결성을 유지할 수 있다.
    • 자바의 경우 JUnit, C/C++은 CppUnit, 파이썬은 pytest 등의 자동화 도구가 있다.

TDD의 단점

  • 기존 과정 + 테스트케이스 설계이므로 비용 증가
  • 테스트의 방향성, 테스트 프레임워크 선택 등 추가 고려사항 증가

 

TDD는 귀찮고 초기비용이 추가적으로 들지만 소프트웨어 유지보수의 관점에서 필수적이다.


pytest를 이용한 TDD 코드 사례

# 사각형 넓이 계산
def calculate_area(length, width):
    if length <= 0 or width <= 0:
        raise ValueError("길이와 너비는 양수여야 합니다.")
    return length * width

def test_calculate_area():
    # 유효한 값에 대한 테스트
    assert calculate_area(5, 4) == 20
    assert calculate_area(2.5, 3) == 7.5

def test_negative_value():
    # 음수 값에 대한 테스트
    with pytest.raises(ValueError):
        calculate_area(-2, 4)
    with pytest.raises(ValueError):
        calculate_area(3, -5)

def test_zero_value():
    # 0 값에 대한 테스트
    with pytest.raises(ValueError):
        calculate_area(0, 5)
    with pytest.raises(ValueError):
        calculate_area(3, 0)

내용 출처

https://github.com/gyoogle/tech-interview-for-developer

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

 

'프로그래밍 > CS' 카테고리의 다른 글

에자일(Agile) 방식  (0) 2023.07.31
운영체제와 리눅스 명령어 정리  (2) 2023.06.23