[Software Engineering] TDD(Test Driven Development)
- 테스트 주도 개발을 의미
- 프로그램 개발에 있어 디자인 > 코드개발 > 테스트 라는 기존의 과정과 다르게, 테스트 케이스를 먼저 작성한 후 실제 코드를 개발하는 리팩토링 절차를 거침
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
'프로그래밍 > CS' 카테고리의 다른 글
에자일(Agile) 방식 (0) | 2023.07.31 |
---|---|
운영체제와 리눅스 명령어 정리 (2) | 2023.06.23 |