‘동작하는 소프트웨어뿐만 아니라, 정교하며 솜씨 있게 만들어진 작품을’
5년 정도된 애플리케이션을 생각해보자. 별도의 테스트 코드도 없고 그 애플리케이션이 어떻게 동작하는지 아무도 정확히 모른다고 하자. 소스 코드에는 비즈니스 용어는 하나도 없고 기술 용어, 개발 인프라 관련 용어들로 가득하다. 클래스와 메서드는 수백 라인, 최악의 경우 수천 라인의 코드로 되어 있다. 이러한 애플리케이션에 새로운 기능을 추가한다고 생각해보자. 그런데 테스트 코드를 작성하는 것 자체가 엄청난 일이다. 물론 같은 팀의 동료와 같이 할 수도 있지만, 혼자 한다고 가정하자. 이 애플리케이션을 만든 사람들은 모두 떠나 의지할 만한 사람은 이제 막 학교를 졸업하고 겨우 몇 주 전에 채용된 사람뿐이다.
이런 애플리케이션을 상대할 때 가장 큰 문제는 두려움이다. 당신이 소심해서가 아니다. 전혀 이해할 수 없는 애플리케이션을 수정했을 때의 영향을 파악하고, 잘못된 수정에 대해서는 책임을 져야 하기 때문이다. 어디가 어떻게 동작하는지 이해하지 못한 상태라서 이 코드의 일부를 수정할 때 어딘가 다른 쪽이 잘못되는 것은 아닐까 불안하다. 수정 자체가 두려운 일이다.