1. Test에 대하여
❓테스트 코드는 왜 작성해야 하는가
앱을 개발하면서 테스트 코드가 반드시 필요한 것은 아니다
아이디어를 구현하기 위하여 빠르게 기능을 구현하고 출시를 목적으로 하는 버전을 보통 MVP라고 부른다. MVP(Minimum Viable Product)란 구현하고자 하는 제품의 핵심적인 가치에 대한 최소한의 기능만 구현한 제품을 뜻한다. 아이디어를 실형할 MVP를 만들고자 할 때 테스트 코드를 하나 하나 만든다면, 시간이 배로 들어갈 것이다. 이럴 때 테스트 코드가 반드시 필요한 것은 아니다.
그러나 MVP가 1년, 그리고 2년이 지났을 때는 이미 많은 기능이 추가되었으며 점점 더 고도화 되어간다. 이럴 경우, 예전과 같이 테스트 코드가 없이 개발하는 것은 점점 힘이 들게 된다.
분명 자신이 만든 코드임에도 불구하고 해당 코드에 대한 지식이 사라지기 때문이다. 기존의 기능을 고치고, 새로운 기능을 만들면서 잊혀졌기 때문이다. 또한, 코드만 보고서는 의도를 모르기 때문에, 해당 코드를 수정 할 때도, 다른 쪽에 영향을 미치는지에 대한 것을 수동으로 하기에는, 서비스가 커지면 커질 수록 힘이든다.
즉, 정리하자면 아래와 같은 이유로 테스트 코드는 필요하다.
1. 코드의 안정성
코드를 변경할 때마다 테스트를 실행하여 기존 기능이 손상되지 않았는지 확인하여 안정성 확보
2. 버그의 신속한 발견
코드 변경 및 기능 추가에 따른 연계된 코드에서 버그를 발견하고 수정
3. 리펙토링 지원
코드 리펙토링을 할 때 여전히 예상대로 동작하는지 확인하기 용이하여, 코드의 퀄리티를 높이는 역할
4. 자동화된 테스트 실행
테스트 코드가 있다면, 자동화된 테스트 suit 을 만들 수 있어, 수동으로 테스트를 반복해야 하는 시간 을 절약하고 일관된 결과를 얻을 수 있음
5. 문서화 연결
테스트 코드는 소프트웨어의 예상 동작을 설명하는 문서의 역할을 하여, 팀원간의 소통 향상
6. 코드의 신뢰성
버그가 있을 때 신속하게 수정하여, 사용자에게 높은 신뢰성을 제공
7. 지속적인 통합 및 배포
CI/CD(지속적인 통합/지속적인 배포)를 지원하여, 변경 사항이 자동으로 빌드되고 테스트 병합
2. 테스트 방법론
TDD(Test-Driven Development)
BDD(Behavior-Driven Development)
FDD(Feature-Driven Development)
ATDD(Acceptance Test-Driven Development)
3. 테스트 단위의 종류
단위 테스트(Unit Testing)
소프트웨어의 가장 작은 단위이며, 주로 함수 또는 메서드 단위의 코드가 예상대로 동작하는지 확인한다.
통합 테스트(Integration Test)
여러 함수, 모듈 또는 서비스를 함께 사용하는 테스트를 작성하여 전체 시스템이 예상대로 통합되는지 확인한다. 유닛 테스트에서는 확인하기 어려운 컴포넌트 간의 통합이 예상대로 동작하는지 검증하며, 되도록이며 유닛 테스트가 선행되는 것이 좋다.
시스템 테스트(System Test)
소프트웨어 시스템 전체의 동작을 테스트하며, 주로 사용자 시나리오에 기반하여 수행된다. 시스템이 사용자 요구사항을 충족하여 예상대로 작동하는지 확인하여, 실제 사용자 환경에서 소프트웨어가 예상대로 동작하는지 검증한다.
성능 테스트(Performance Test)
소프트웨어의 성능, 응답 시간, 처리량 등을 측정하여 병목 현상을 찾고 최적화하는 테스트이다. 특히 고부하 상황에서 시스템이 어떻게 동작하는지 확인한다.
예시: 다수의 동시 사용자가 특정 기능을 사용할 때의 응답 시간 및 부하 상황을 측정하여 성능을 평가
4. 테스트의 조건(CORRECT)
C: conformation(특정 포멧을 준수하는가. 전화번호, 이메일, 아이디, 파일 확장자)
O: ordering(순서가 중요한 경우)
R: range(범위)
R: reference(외부 의존성 유무, 특정한 조건의 유무)
E: existence(값이 존재하지 않을 때 어떻게 동작하는가)
C: cardinality(0-1-N 법칙에 따라서 검증, 하나도 없을 때, 하나만 있을 때, 여러개가 있을 때)
T: time(상대, 절대, 동시의 일들. 순서가 맞지 않는 경우, 소비한 시간, 지역 시간)
Last updated