Whiteship's Note

테스트의 소중함

모하니?/Coding : 2007.12.13 20:01


테스트를 (먼저) 만들면 결과물이 훨씬 간결합니다.

테스트가 있어야 믿음직합니다.

테스트가 있어야 빨리 버그를 잡을 수 있습니다.

HTTP 요청에 메시지를 실어서 보내고 응답을 받는 간단한 클래스 작성이 목적입니다. 다음과 같은 인터페이스가 필요합니다.

public interface HttpClient{
    String request(String url, String message);
}

기존 코드(스크롤 주의)
인코딩과 로깅까지 고려한 코드입니다. 하지만 위의 코드는 제대로 동작하지 않습니다. 저렇게 긴 코드를 대체 어디서부터 어떻게 손을 댈지 고민하느니 새로 짜는게 좋을 것 같다는 생각이 들어서 새로 짰습니다.

새로 짠 코드
로깅와 인코딩은 전혀 신경쓰지 않고 짠 코드입니다. 소스 코드의 절반이 try-catch 코드지만 제대로 동작합니다. 물론 저 코드를 짠 순간은 저녀석이 제대로 동작하는지 알 길이 없습니다. 불안하죠. 그래서 테스트 코드를 작성합니다.

    public void testRequest() throws Exception {
        String url = "http://localhost:8080/tapsTest/merchantProcess.do?message=";
        String msg = "123456789012345678901234567890";
        String response = SimpleHttpClient.request(url, msg);
        assertEquals("CnbReqQ             1234567890", response);
    }

테스트 코드 네 줄까지 합쳐도 기존 코드보다 짧습니다. 그리고 위 테스트 코드를 통해서 요청과 응답을 제대로 받았음을 확인했습니다.(서버에 다녀와야 하기때문에 단위테스트는 아닙니다.)

덤으로 기존의 애플리케이션이 바로 위의 코드때문에 제대로 동작하지 않는다는 것도 확인할 수 있습니다. 위의 테스트케이스에서 클래스만 살짝 바꿔주면 되니까요.
top

  1. Favicon of https://mckdh.tistory.com BlogIcon 산골 김저자 2007.12.15 13:45 신고 PERM. MOD/DEL REPLY

    최근 프로젝트 막바지에 있는데요. 테스트가 부족하여 빵구가 많이 났습니다.
    테스트 참 중요하긴 한데..
    근데 또하나 느낀게 일정은 촉박한데 해놓으라는 일이 많으면 느긋하게 테스트하면서
    좋은 코드를 만들기가 거의 불가능하다는 것입니다.
    에휴~ 척박한 프로젝트 환경이 좋은 코드 만들기를 어렵게 하네요~ ^ ^

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.12.15 20:19 PERM MOD/DEL

    네. 환경도 중요하죠.

    시간 압박을 하면 더 안 좋은 코드만 생산되고 그러면 프로젝트 일정만 더 늘어날 뿐인데, 왜 이 기본적인 걸 모르는지 이해가 안 됩니다.

    개발자들에게 생각하며 코딩할 수 있는 여유를 주는게 필요하다고 생각합니다.

Write a comment.




: 1 : ··· : 227 : 228 : 229 : 230 : 231 : 232 : 233 : 234 : 235 : ··· : 299 :