테스트 전략
단위·통합·UI 테스트의 역할과 경계를 구분합니다.
QUALITY · 18 ARTICLES
좋은 코드는 한 번 잘 짜는 코드보다 안심하고 바꿀 수 있는 코드에 가깝습니다. 테스트 전략과 테스트 더블, 코드 냄새, 레거시 개선을 실제 변경 흐름으로 연결합니다.
주제 지도
단위·통합·UI 테스트의 역할과 경계를 구분합니다.
FIRST, TDD, Mock과 Stub을 실전 기준으로 익힙니다.
변경을 어렵게 만드는 구조적 신호를 발견합니다.
동작을 보존하며 레거시 코드를 개선합니다.
처음 읽기
기초 개념에서 다음 단계로 자연스럽게 이어지는 글을 골랐습니다.
iOS 개발을 하다 보면 "테스트 코드 좀 짜야 하는데…" 하면서 자꾸 미루게 되죠. 막상 XCTest를 열어보면 뭐부터 손대야 할지 감이 안 오거든요.
읽어보기스파게티 코드가 가리키는 것은 길이나 지저분함이 아니라 제어 흐름입니다. 1968년 다익스트라의 goto 반대 편지에서 출발해 goto가 사라진 뒤에도 스파게티가 남은 이유와 순환 복잡도로 재는 법을 정리했습니다.
읽어보기전체 글
산탄총 수술은 변경 하나가 여러 파일로 흩어지는 냄새이고, 발산적 변경은 한 파일이 여러 이유로 바뀌는 거울상입니다. 처방이 정반대인 두 냄새를 커밋 기록으로 실측하고 구분하는 법을 정리했습니다.
읽어보기갓 오브젝트는 주변의 책임과 데이터를 계속 흡수하며 커지는 클래스로, 팀에서 가장 자주 바뀌고 가장 자주 충돌합니다. 커지는 것을 알아채는 신호와 해체 순서, 쪼개다 실패하는 두 가지 방식을 정리했습니다.
읽어보기함수는 전부 다섯 줄이고 책임도 하나씩인데 버튼을 누르면 무슨 일이 벌어지는지 아무도 답하지 못하는 코드가 라비올리 코드입니다. 쪼개기가 과해지는 이유와 점프 횟수로 드러나는 비용, 흐름을 되찾는 법을 정리했습니다.
읽어보기계층을 반듯하게 나눴는데도 필드 하나 추가에 파일 일곱 개를 고쳐야 하는 코드가 라자냐 코드입니다. 층이 늘어나는 이유와 비용이 발생하는 지점, 층이 필요한 경우와 걷어내는 법을 정리했습니다.
읽어보기테스트 플랜은 실행할 테스트와 실행 조건을 .xctestplan 파일로 관리합니다. 스킴 설정만으로 부족한 이유와 대상 선택, 구성 나누기, 커버리지·실행 순서·반복 설정, xcodebuild 연동까지 정리했습니다.
읽어보기코드 커버리지 100%가 버그 없는 코드를 뜻하지는 않습니다. 실무에서 통용되는 70~80%대 기준과, 숫자보다 먼저 확인해야 할 미검증 분기를 골라내는 판단법을 정리했습니다.
읽어보기레거시 코드는 리팩터링보다 현재 동작을 그대로 고정하는 특성화 테스트가 먼저입니다. 의존성 때문에 테스트가 붙지 않는 코드를 이음새로 끊어내는 순서까지 실전 절차로 정리했습니다.
읽어보기Swift 5.5 이상에서는 테스트 함수를 async로 선언하고 await로 결과를 기다린 뒤 검증하면 됩니다. 에러 검증, 오래된 콜백 API 테스트, expectation을 아직 써야 하는 경우까지 정리했습니다.
읽어보기iOS 개발하면서 테스트 코드 짜다 보면 XCTest에 슬슬 답답함을 느끼는 순간이 옵니다.
읽어보기