TDD(Test-Driven-Development)란? 

테스트 주도 개발이라는 의미로 

기존 개발 프로세스 : 설계 -> 코드 -> 테스트 로 되어있는데 

TDD 프로세스: 설계 -> 테스트 -> 개발 처럼

테스트코드를 먼저 작성하여 개발하는 방식을 말합니다.

 

TDD 왜쓰나?

좋은 객체지향프로그래밍은 결합도가 낮고 응집도가 높아야한다. 라고 하지만 현실적으로 이거에맞게 설계하기에 어렵다.

시간이 흐를수록 설계 퀄리티가 낮아지고 유지보수가 어렵고 비용이높아진다 .

 

이러한 문제를 피하기위해 설계품질을 검증하는 과정을 먼저 거쳐합니다.

TDD방식을 사용하면 테스트케이스 작성시간이 늘어나지만 높은 품질의 코드가 높아질수있습니다.

 

TDD 방법

먼저 실패할 테스트를 작성한다. -> 테스트를 빠르게 통과할 코드를 구현 -> 테스트케이스를 기반으로 안전하게 리팩토링한다. 

이 프로세스를 반복하는것이 TDD 이다. 

 

TDD의 가장큰 장점으로는 목표를 달성했다는 점에서 리팩토링을 맘편히 할수있기때매 유지보수하기 좋다는 점입니다.

Test Pyramid란?

TDD를 해보기전 WWDC 에서 소개하는 Test Pyramid에 개념을 알고있어야합니다.

UnitTest(단위테스트), 통합테스트, UI 테스트 이렇게 3개의 구조로 되어있습니다.

 

UnitTest는 코드의 한단위를 테스트로 일반적으로 클래스안의 메서드와 함수를 테스트방식

ex) 비밀번호 유효한지, 이메일유효한지 등

(기능단위로 테스트하는거라 UI 화면이 필요없다) 

TDD는 단위테스트를 좀더 구조적으로 하기위해  given, when, then 구조로 나누어서 진행한다.

given 은 테스트할 객체

when은 테스트할 조건

then은 테스트 결과

구조로 단위테스트를 진행하는 방식이다.

 

 

통합테스트는 UnitTest를 모아서 통합테스트하는것으로 클래스와 함수를 합쳐서 테스트하는방식 

User interface 는 UITest로 앱의 코드를 직접실행하지않고 앱의 UI를 실제 사용자처럼 사용하는식으로 특정테스크를 완수할수있는지 테스트하는 방식 ex) 화면이 눌리면 이벤트가 잘발생하는지 

( 단점: 화면을 만들어 테스트해야해서 유지보수하는데 시간이오래걸리고 디버깅하려면 시간이 오래걸린다. ) 

 

WWDC에서는 Unit Tests 는 코드가 필요하고 토끼처럼 빠르다고 표현하고 UI 테스트는 사용자관점이필요해 화면이필요하고 거북이처럼 느리다고 한다. 그리고 성능테스트 까지도 다뤄줍니다. 



이처럼 각 테스트를위해 애플에서는 XCTest 프레임워크를 제공해준다.

XCTest란?

xcode 프로젝트에 대한 단위테스트,통합테스트,UI테스트등 만들고 실행하는 프레임워크로

특정조건이 충족이되면 테스트 성공 충족되지않으면 테스트 실패하는 방식이다.

 

XCTest는 다음과같이 XCtestCase 클래스 XCTest를 상속받아 테스트에 필요한 메서드나 파라미터를 사용할수있다. 

테스트 실행 플로우로는 setUp -> Test  -> tearDown 을 반복해서 하게된다 . 

setup()메서드는 testcase 실행되기전에 실행되는 메서드

tearDown()메서드는 테스트 케이스가 실행된후 호출되는 메서드이다.

 

 
 

'𝐢𝐎𝗦' 카테고리의 다른 글

대표적인 Property wrapper  (0) 2023.02.18
SwiftUI 의 데이터의 흐름  (0) 2023.02.18
CI/CD 란?  (0) 2023.02.04
fastlane으로 배포 자동화  (0) 2023.02.03
LLDB 내용정리  (0) 2022.10.31