테스트코드가 무엇이고 tdd 실전코드
지난 시간 스터디내용을 착각해서 tdd만 조사했다.
이번 시간은 테스트코드는 무엇인지, tdd의 실제코드를 알아보자.
테스트 코드는 소프트웨어의 기능과 동작을 테스트하는데 사용하는 코드이다. 결함을 찾아내고 수정하는 과정이다.
테스트코드를 작성하면 개발자는 소프트웨어가 어떻게 작동하는지, 예상치 못한 부작용을 방지할 수 있다.
또한 개발자간의 협업을 원활하게 하고, 문서화 작업을 줄일 수 있다.
테스트코드에는 단위 테스트, 통합테스트, 시스템 테스트, 사용자 인수 테스트 등 다양한 종류가 있다.
공통점은 기대한 입력값과 출력값을 반환하는지 확인한다.
차이점이 있다면 테스트 대상의 범위가 다르다.
1. 단위테스트란?
개별적인 코드단위(보통 함수, 메서드)가 의도한 대로 작동하는지 확인하는 과정이다.
단위 테스트 작성을 위해서는 다양한 라이브러리와 프레임워크가 있다.
자바에는 Junit이 있는데 전 자바를 하니깐 자바만 얘기해보겠습니다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result);
}
}
@Test 어노테이션을 이용하여 testAdd메서드를 선언한다. testAdd메서드는 Caculator 클래스의 add 메서드가 제대로 작동하는지 검증하는 코드이다.
사실 이코드는 김영한강사님의 강의를 봤다면 한번씩 해봤을 코드라서 설명은 생략한다,,
2. 통합 테스트란?
서로 다른 모듈들 간의 상호작용을 테스트하는 과정이다.
EX) 신규로 개발한 API 서버 내의 DB 호출 함수가 데이터베이스의 데이터를 잘 호출하고 있는지 테스트하는 과정
통합테스트는 모듈 간 인터페이스 테스트, 시스템 레벨 테스트 등의 방법이 있다.
EX) 여러개의 모듈이 연결된 백엔드 API의 경우 서로 다른 모듈간의 상호작용을 테스트한다. 단 각 모듈 단위 단위 테스트를 모두 완료한 뒤, 둘 이상의 모듈을 거쳐서 동작하는 API테스트 시나리오를 기반으로 통합 테스트를 수행한다.
여기서 모듈은 WAS, DBMS, 파일 서버 등이 될 수 있다.
아무래도 단위 테스트에 비하면 통합 테스트는 작성하기 어려운 편이다. 모듈 간 상호작용을 테스트하기 때문에 다른 모듈의 설정 방법, 테스트를 다시 수행할 수 있는 환경 등 환경설정 정보 신경써야한다.
그래서 GUI환경에서 사용할 수 있는 도구가 Postman 등이 있다.
3) 시스템 테스트
전체 소프트웨어 시스템을 대상으로 한다.
모든 컴포넌트 및 모듈이 통합되어 동작하는지 확인한다.
시스템의 기능, 성능, 보안, 안전성 및 사용자 요구 사항을 확인하며 전체 시스템이 목표대로 작동하는지 검증한다.
4) 인수 테스트
소프트웨어를 최종 사용자 또는 고객의 요구 사항에 따라 테스트한다.
주로 고객이나 최종 사용자가 테스트한다.
시스템이 실제 환경에서 사용 가능하고 고객 요구 사항을 충족하는지 확인한다.
==> 고객이 제품을 수락할지 여부를 결정한다.
그래서 왜?? 테스트 코드를 사용해야돼??
1) 무엇을 만드는지
개발자들은 보통 요구사항을 분석하여 설계 후 구현해야한다. 그래서 가장 중요한 일이 요구사항 분석이다.
테스트 코드를 작성하면 요구사항의 기능적인 항목들을 차분히 정리할 수 있다.
2) 고치기 쉬운 환경으로
수정사항이 있을 때 테스트 코드가 없으면 남이 쓴 코드를 수정해야 할 경우가 있기 때문에 아주 어려운 상황에 빠진다.
하지만 테스트코드를 작성하면 코드 수정이나 구조 변경후에도 기능이 요구사항에 맞게 정상적으로 작동하는지 검증할 수 있다.
테스트 코드 장단점
장점
코드 품질 향상: 소프트웨어의 품질을 향상시켜 버그를 찾아내고 수정할 수 있다.
문서화: 테스트코드를 통해 예상 동작을 명확하게 확인할 수 있고, 개발자 간의 커뮤니케이션 향상에도 도움이 된다.
리팩토링 지원: 테스트 코드가 존재하면 코드 수정이나 구조 변경에 대한 두려움을 줄일 수 있다. 리팩토링 후에도 기능이 정상적으로 작동하는지 확인할 수 있기 때문이다.
단점
개발 시간 증가: 개발 시간이 증가하기때문에 초기 개발비용이 증가한다. 하지만 버그 수정 및 유지 보수 비용 절감으로 이어질 수 있다.
불완전한 테스트: 모든 시나리오를 고려하기 때문에 일부 버그가 테스트를 통과하게 되어 어려울 수 있다.
학습 곡선: 익히는데 시간이 필요하기 때문에 개발 속도가 저하될 수 있다.
하지만 테스트 코드는 단점보다 장점이 크게 작용한다. 유지보수에 드는 전체 비용을 생각한다면 결코 아깝지 않은 시간과 비용이다.
given/when/then 패턴
요즘 단위 테스트는 given/when/then 패턴으로 작성하는 추세이다.
1개의 단위 테스트를 다음과 같이 3가지 단계로 나눈다.
- given(준비): 어떤 데이터가 준비되었을 때
- when(실행): 어떤 함수를 실행하면
- then(검증): 어떤 결과가 나와야한다.
출처:
단위 테스트 , 통합 테스트, 시스템 테스트, 인수테스트 차이?
단위 테스트 (Unit Testing)대상: 단위 테스트는 개별 코드 유닛, 즉 함수, 메소드 또는 클래스와 같은 작은 코드 조각을 대상으로 합니다.목적: 주로 개별 코드 유닛의 기능과 동작을 검증하고 코드
velog.io
https://yozm.wishket.com/magazine/detail/1964/
테스트 코드는 왜 만들까? | 요즘IT
지금 돌이켜 생각하면 부끄러운 일이지만, 처음 테스트 코드를 마주했을 때 든 생각은 '왜 귀찮은 테스트 코드를 만들어야 하는 걸까?'였습니다. 물론 지금은 테스트 코드의 중요성을 깨달아 열
yozm.wishket.com
실제코드
https://velog.io/@miot2j/TDD-TDD%EB%9E%80-%EB%AC%B4%EC%97%88%EC%9D%B8%EA%B0%80
[TDD] TDD란 무었인가?(+TDD 예제코드)
이 포스트는 TDD의 정의와 TDD예제코드를 통해 TDD를 소개하기 위해 작성되었습니다.
velog.io
'백엔드 > 뎁스스터디' 카테고리의 다른 글
5- 동시성 처리 (2) (1) | 2024.05.28 |
---|---|
5- 동시성 처리 (1) (0) | 2024.05.20 |
4- 스프링 시큐리티 + jwt(2) (0) | 2024.05.13 |
3- 스프링 시큐리티 + jwt (1) (0) | 2024.05.07 |
1- TDD(1) (0) | 2024.04.02 |