TDD
in Software Test on Software Test, Istqb, Tdd
TDD (테스트 주도 개발)
TDD란 Test Driven Development의 약자로 ‘테스트 주도 개발’이라고 합니다.
반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다.
TDD는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나로 애자일 방법론 중 하나입니다.
- TDD 장점
- 작업과 동시에 테스트를 진행함으로써 실시간으로 오류 상황을 파악하여 시스템 결함을 방지할 수 있습니다.
- 짧은 개발 주기를 통해 고객의 요구사항을 빠르게 수용하거나 피드백을 줄 수 있고 현재 진행 상황을 쉽게 파악할 수 있습니다.
- 자동화 도구를 이용해 TDD의 테스트케이스를 단위테스트로 사용이 가능합니다.
- 테스트 자동화 도구 : Junit(Java), CppUnit(C/C++), NUnit(.NET) 등
- TDD 단점
- 기존의 개발프로세스에 테스트케이스 설계까지 추가되므로 코드 생산 비용이 높아집니다.
- 어떻게 테스트를 할 것이며, 프로젝트 성격에 따른 테스트 프레임워크 선택 등 여러 부분에 대한 고려가 필요해집니다.
📌 TDD 사용 이유
- 객체지향적인 코드 개발
- 테스트 코드를 먼저 작성한다면, 좀 더 명확한 기능과 구조를 설계할 수 있습니다.
- 각 기능들에 대해서 철저히 모듈화 시켜 코드를 작성할 수 있습니다.
- 종속성과 의존성이 낮은 모듈로 조합된 소프트웨어 개발을 가능하게 해서 자연스럽게 코드의 재사용성을 보장합니다.
- 설계 수정 시간의 단축
- 미리 테스트 시나리오를 작성해봄으로써 코드 개발 전 기능을 구현하기 위한 예외 상황들을 미리 확인하고, 조사하게 되는 효과로 설계의 구조적 문제를 바로 찾아낼 수 있습니다.
- 디버깅 시간의 단축
- 기본적으로 단위 테스트 기반의 테스트 코드를 작성하기 때문에 추후 문제가 발생하였을 때 각각의 모듈 별로 테스틀 진행해보면 문제의 지점을 쉽게 찾아낼 수 있습니다.
- 유지 보수의 용이성
입력과 출력의 흐름이 명확해지고 추후 구조의 변경 및 소스 수정 시 구조를 쉽게 파악하고 빠른 수정이 가능해집니다. - 테스트 문서의 대체 가능
- TDD를 구현하게 될 경우에 테스팅을 자동화 시킴과 동시에 보다 정확한 테스트 근거를 산출 할 수 있습니다.
📌 단위 테스트
단위 테스트는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 이야기합니다.
순수하게 테스트 코드만 작성하는 것을 이야기합니다.
📌 JUnit
JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크입니다.
테스팅 결과를 단순히 문서로 남기는 것이 아니라 Test class를 그대로 남김으로써 추후 개발자에게 테스트 방법 및 클래스의 History를 넘겨줄 수 있습니다.
JUnit Assert method (단정문)
- assertArrayEquals(a, b) : 배열 a와 b가 일치함을 확인
- assertEquals(a, b) : 객체 a와 b의 값이 같은지 확인
- assertSame(a, b) : 객체 a와 b가 같은 객체임을 확인
- assertTrue(a) : a가 참인지 확인
- assertFalse(a) : a가 거짓인지 확인
- assertNotNull(a) : a객체가 Null이 아님을 확인
JUnit Function Flow
- setUp() : 테스트 대상 클래스의 실행전에 가장 먼저 setUp()을 실행
- tearDown() : 가장 마지막에 수행되며 setUp()의 반대 개념
JUnit Annotation
- @Test : 해당 메서드는 Test대상 메서드임을 확인
- @BeforeClass : 해당 테스트가 시작 전에 딱 한번씩만 수행되도록 지정
- @AfterClass : 해당 테스트가 끝나고 딱 한 번씩만 수행되도록 지정
- @Before : 해당 테스트가 진행이 시작되기 전에 작업할 내용을 호출
- @After : 해당 테스트가 진행이 끝난 후에 작업할 내용을 호출
📌 테스트 자동화 도구
- Selenium
- Web 자동화 Library
- C#, Groovy, Java, Perl, PHP, Python, Ruby and Scala wldnjs
- 동작 순서 : Script작성 ➜ selenium library ➜ selenium driver(ie, chrome, firefox etc…)
- Appium
- 모바일 자동화 테스트 도구
- Android의 GUI객체 조작을 해주는 대표적인 Library인 UIAutomator2와 iOS의 GUI객체를 조작 해주는 대표적인 Library인 FacebookWDA를 동시에 조작할 수 있게하는 Appium Driver와 이를 수행해주는 Appium Library를 통한 Script작성을 하게 해줌
- 단점 : Appium Driver는 한번에 한개의 Thead만 처리해줘서, 다중 Thread로 수행하고 싶으면 Thread수만큼 Appium Driver를 구동시켜야함(비효율)
- UIAutomator2
- Android 특화 자동화 도구
- 장점 : 폰에 서버를 설치해서, 조작하는 PC에서는 다중 Thread로 여러대의 단말을 동시 조작할 수 있음
- 단점 : Android만 됨
