tdd
[강의 후기] Practical Testing: 실용적인 테스트 가이드 후기
TDD 스터디를 마치고 실제 회사에서는 어떤 방식으로 테스트를 진행하는지 궁금증을 가지던 중에 인프런에 테스트에 대한 신규 강의와 수강평이 좋아 수강을 하게 되었다. 해당 글은 내가 테스트 강의를 들으면서 공감이 되는 부분을 중점으로 기술한다. 테스트는 왜 필요할까? 강사의 테스트 생각 : 귀찮다. 나의 생각 : 고려해야 할 것이 많다. QA에 대한 테스트 커버할 수 없는 영역이 발생한다. 경험과 감에 의존한다. 늦은 피드백이 발생한다. 유지보수의 어려움 소프트웨어 신뢰도가 낮아진다. 테스트를 하는 이유 빠른 피드백 자동화 소프트웨어 신뢰도 상승 테스트 코드를 작성하지 않을 경우 변화가 생기는 매순간마다 발생할 수 있는 모든 Case를 고려해야 한다. 변화가 생기는 매순간마다 모든 팀원이 동일한 고민을 ..
[TDD] 테스트 범위와 종류
테스트 범위 하나의 기능이 올바르게 동작하려면 컨트롤러, 서비스, 모델과 같은 자바 코드와 프레임워크, 설정에 문제가 없어야 할 뿐 아니라 브라우저에서 실행되는 자바스크립트 코드, HTML과 CSS 등이 정상 동작해야 한다. 또한, DB의 테이블도 올바르게 생성해야한다. 기능 테스트와 E2E테스트 기능 테스트(Functional Testing)는 사용자 입장에서 시스템이 제공하는 기능이 올바르게 동작하는지 확인한다. 이 테스트를 수행하려면 시스템을 구동하고 사용하는데 필요한 모든 구성요소가 필요하다. 기능 테스트는 사용자가 직접 사용하느 웹 브라우저나 모바일 앱부터 시작해서 데이터베이스나 외부 서비스에 이르기까지 모든 구성 요소를 하나로 엮어서 진행한다. 기능 테스트는 끝에서 끝가지 올바른지 검사하기 때..
[TDD] 테스트 가능한 설계
테스트 어려운 코드 모든 코드를 테스트할 수 있는 것은 아니다. 개발을 진행하다 보면 테스트하기 어려운 코드를 만나게 된다. 이를 살펴보고 이를 어떻게 테스트 가능한 코드로 변경하는 지 파악한다. 하드 코딩된 경로 Path path = Paths.get("D:\\\\data\\\\pay\\\\cp0001.csv) 하드 코딩된 경로뿐만 아니라 하드코딩된 IP 주소, 포트 번호도 테스트를 어렵게 만든다. 의존 객체를 직접 생성 private PayInfoDao payInfoDao = new PayInfoDao(); 테스트를 어렵게 만드는 또 다른요인은 의존 대상을 직접 생성하고 있다는 점이다. 해당 코드를 테스트 하려면 PatInfoDao가 올바르게 동작하는데 필요한 모든 환경을 구성해야한다. DB를 준비해..
[TDD] 기능 명세 ∙ 설계
기능 명세 개발자는 코드를 작성하고 빌드하여 이를 사용자가 사용할 수 있게 배포한다. 설계는 기능 명세로부터 시작한다. 스토리보드를 포함한 다양한 형태의 요구사항 문서를 이용해서 기능 명세를 구체화한다. 기능 명세를 구체화하는 동안 입력과 결과를 도출하고 이렇게 도출한 기능 명세를 코드에 반영한다. 기능 명세의 입력과 결과를 코드에 반영하는 과정에서 기능의 이름, 파라미터, 리턴 타입 등이 결정된다. 설계 과정을 지원하는 TDD TDD에서 가장 중요한 것을 테스트 코드를 먼저 작성한다는 점이다. 리턴 타입과 파라미터 타입에 대해서 고민은 곧 설계 과정이다. 타입의 이름을 정의하고 타입이 제공할 기능을 결정하는 것은 기본 적인 설계 행위이다. TDD 자체가 설계는 아니지만, TDD를 하다 보면 테스트 코드..
[TDD] 테스트 코드 작성 순서
테스트 코드 작성 순서 쉬운 경우에서 어려운 경우로 진행 예외적인 경우에서 정상인 경우로 진행 초반에 복잡한 테스트부터 시작하면 안되는 이유 초반부터 다양한 조합을 검사하는 복잡한 상황을 테스트로 추가하면 해당 테스트를 통과시키기 위해 한 번에 구현해야 할 코드가 많아진다. 구현하기 쉬운 테스트부터 시작하기 가장 구현하기 쉬운 경우부터 시작하면 빠르게 테스트를 통과시킬 수 있다. 보통 수 분에서 십여분 이내에 구현을 완료해서 테스트를 통과시킬 수 있을 만큼 쉬운 것을 선택한다. 예외상황을 먼저 테스트해야 하는 이유 예외상황을 전혀 고려하지 않은 코드에 예외 상황을 반영하려면 코드의 구조를 뒤집거나 코드 중간에 예외 상황을 처리하기 위해 조건문을 중복해서 추가하는 일이 벌어진다. 완급조절 정해진 값을 리턴..