일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- frequency-domain spectrum analysis
- pdlc
- stride
- 메카님
- Rr
- 게임개발
- MAC
- 언리얼엔진
- MLFQ
- STCF
- 유스케이스
- Race condition
- 배경 그림
- 게임 개발
- DP
- TSet
- sampling theory
- Security
- CTF
- Unity #Indie Game
- 유니티
- DSP
- dirty cow
- linear difference equation
- Double free
- ret2libc
- RBAC
- dtft
- AINCAA
- 운영체제
- Today
- Total
다양한 기록
TDD (Test Driven Development) 본문
테스트 주도 개발: 테스트 주도가 되는 개발 방식
테스트 코드를 먼저 개발한 후에 애플리케이션 코드를 개발하는 방식
TDD는 테스트 방식이 아닌 프로그램 개발 방식이며 TDD의 목적은 단순한 코드를 얻는 것
단순한 코드란 문제에 대한 가장 간단한 해결책을 제공하는 동시에 깨끗한 코드
TDD 규칙
- 실패하는 테스트를 통과하는 코드를 작성하는 것을 제외하고는 먼저 절대 제품 코드를 작성하지 않는다
- 테스트 코드를 작성할 때 실패할 만큼만 작성
- 테스트를 통과할 만큼만 제품 코드를 작성한다
실패하는 테스트 => 현재의 애플리케이션 코드가 충분히 구현되지 않았거나 오류가 있는 의미
애플리케이션 코드에 기능을 추가하기 전에 실패하는 테스트 코드를 작성
ex. 계산기
1
@Test
public void testAdd()
{
Calculator calc = new Calculator();
calc.add(20);
}
public void add(int i) {}
2
@Test
public void testAdd()
{
Calculator calc = new Calculator();
calc.add(20);
assertEquals(20, calc.getResult());
}
public void add(int i)
{
r = 20;
}
* 동작할 수 있는 가장 간단한 것을 해야 함 .. 우선 속인 후(fake it) 제대로 해라(make it) by Kent Beck
* 속이는 것이 제대로 한 것보다 힘이 들면 제대로 해라
3
@Test
public void testTwoConsecutiveAdd()
{
Calculator calc = new Calculator();
calc.add(20);
calc.add(30);
assertEquals(50, calc.getResult());
}
public void add(int i)
{
r = r + i;
}
Mockito
- 모의 객체 생성 프레임워크
- 자바 단위 테스트에서 가짜 객체를 지원 .. Mock을 만들어줌
활용 이유
- Mock : 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 행동을 관리하는 객체
- 편리한 테스트 가능, 시간 단축 가능
문제
- 만약 테스트 대상이 되는 클래스(CUT, Class Under Test)와 협력하는 클래스가 아직 구현되지 않았을 경우
- CUT의 실행 경로들이 협력 클래스로부터 온 입력에 따라 달라지는 경우
- CUT를 테스트할 때 협력 클래스의 특정 기능이 호출되었는지를 확인하는 경우
OCP (Open Closed Principle)
- 테스트 대상 클래스를 변경하지 않고(closed) 대상 클래스의 환경을 변경할 수 있는(open) 설계가 되어야 한다
TDD 특징
1. 클린 코드를 위한 확신
2. 높은 소스 코드 품질
3. 재설계 시간의 절감
4. 손쉬운 테스트 근거 산출 및 문서화
5. 디버깅 시간의 절감
장점
- 보다 튼튼한 객체지형적인 코드 생산
- 재설계/디버깅 시간의 단축
- 테스트 정의서 대체, 추가 구현 용이
- 결함의 수가 적음
- 입출력 흐름이 명확 -> 구조 변경 용이
- 재사용 테스트 쉽게 가능, 시간/노력 절역
단점
- 요구사항이 계속 바뀌는 경우 도입 어려움
- 단순 개발 프로젝트 -> 타이트한 일정소화 어려움
- 어려운 예외 케이스 적용
- 숙련되기까지 6개월 이상(팀 속도 저하)
- 복잡한 소스
- 비즈니스 로직 변경/개선 속도 저하
'소프트웨어공학' 카테고리의 다른 글
테스팅 - 블랙박스, 화이트박스 (0) | 2024.12.15 |
---|---|
테스팅 (Testing) (0) | 2024.12.14 |
DevOps & CI/CD (0) | 2024.12.14 |
구현과 재사용 (Implementation & Reuse) (0) | 2024.12.13 |
Software Design (0) | 2024.12.13 |