테스트는 시스템의 일부이며, 아키텍처에도 관여한다.
시스템 컴포넌트인 테스트
아키텍처 관점에서 모든 테스트는 모두 동일하다. 테스트는 태생적으로 의존성 규칙을 따르고 세부적이고 구체적인 것이다. 따라서 테스트의 의존성은 항상 테스트 대상이 되는 코드를 향한다. 또한 테스트는 독립적으로 배포 가능하다.
테스트를 고려한 설계
테스트를 고려해 설계를 해야 하는 이유는 테스트가 시스템의 설계와 잘 통합되지 않으면 테스트가 깨지기 쉬워지고 그로 인해 시스템을 변경하기가 어려워지기 때문이다.
문제는 결합인데 테스트가 시스템 컴포넌트에 의존하므로 시스템 컴포넌트의 변화가 많은 테스트를 깨지게 만든다. 깨지기 쉬운 테스트는 시스템을 유연하지 못하게 만들고, 간단한 변경이 많은 테스트를 깨지게 만든다면 개발자는 변경을 하려 하지 않게 된다.
테스트도 소프트웨어 설계의 규칙을 따라야 한다. 즉, 변동성이 있는 것에 의존하면 안된다. GUI는 변동성이 크므로 GUI를 사용하지 않고 비즈니스 로직을 테스트할 수 있게 만들어야 한다.
결론
테스트는 시스템 외부에 있지 않다. 오히려 시스템의 일부다. 따라서 테스트에서 기대하는 안정성과 회귀의 이점을 얻을 수 있으려면 테스트는 잘 설계돼야만 한다.