테스트는 시스템의 일부이며, 아키텍처에도 관여한다. 시스템 컴포넌트인 테스트 아키텍처 관점에서 모든 테스트는 모두 동일하다. 테스트는 태생적으로 의존성 규칙을 따르고 세부적이고 구체적인 것이다. 따라서 테스트의 의존성은 항상 테스트 대상이 되는 코드를 향한다. 또한 테스트는 독립적으로 배포 가능하다. 테스트를 고려한 설계 테스트를 고려해 설계를 해야 하는 이유는 테스트가 시스템의 설계와 잘 통합되지 않으면 테스트가 깨지기 쉬워지고 그로 인해 시스템을 변경하기가 어려워지기 때문이다. 문제는 결합인데 테스트가 시스템 컴포넌트에 의존하므로 시스템 컴포넌트의 변화가 많은 테스트를 깨지게 만든다. 깨지기 쉬운 테스트는 시스템을 유연하지 못하게 만들고, 간단한 변경이 많은 테스트를 깨지게 만든다면 개발자는 변경을 ..
테스트
Chapter04 테스트 구축하기 리팩터링을 제대로 하려면 불가피하게 저지르는 실수를 잡아주는 견고한 테스트 스위트가 필요하다. 리팩터링을 하지 않더라도 좋은 테스트를 작성하는 일은 개발 효율을 높여준다. 자가 테스트 코드의 가치 모든 테스트를 완전히 자동화하고 그 결과까지 스스로 검사하게 만들자. 자가 테스트를 만들면 테스트가 컴파일만큼 쉬워진다. 컴파일할 때마다 테스트를 함께 실행하면 디버깅 시간을 크게 줄여줘서 생산성이 상승한다. 자가 테스트 코드 자체뿐 아니라 테스트를 자주 수행하는 습관도 버그를 찾는 강력한 도구가 된다. 테스트 스위트는 강력한 버그 검출 도구로, 버그를 찾는데 걸리는 시간을 대폭 줄여준다. 테스트를 작성하기 가장 좋은 시점은 프로그래밍을 시작하기 전이다. 기능을 추가해야 할 때..
22장 개발자 테스트 목차 22.1 소프트웨어 품질에서 개발자 테스트의 역할 22.2 개발자 테스트에 대한 바람직한 접근 방법 22.3 여러 가지 교모한 테스트 방법 22.4 전형적인 오류 22.5 테스트 지원 도구 22.6 테스트를 향상시키는 방법 22.7 테스트 기록을 보존하는 방법 몇 가지 테스트의 종류에 대해 알아보고 이번 장을 시작하자. 단위 테스트: 한 명의 개발자나 팀이 작성한 루틴 또는 클래스를 실행하는 테스트 컴포넌트 테스트: 여러 명의 개발자나 팀이 만든 클래스, 피키지, 컴포넌트 등을 실행하는 테스트 통합 테스트: 두 개 이상의 루틴 또는 클래스, 패키지, 컴포넌트 등이 만들어졌을 때, 이를 결합해서 실행하는 테스트 회귀 테스트: 이전에 실행했던 테스트를 다시 실행하는 것(현재 프로그..