Whiteship's Note


하악하악 테스트 커버리지



사용자 삽입 이미지

Bamboo가 만들어준 클로버 테스트 커버리지 리포트 입니다. 너무 단순해 보여서 탈이지만, 바쁘기 땜시 딱 저것만 봐도 충분합니다.

0%가 나온 날은 그날 빌드가 안 돌아가서 그렇습니다. 41%로 시작했다가 쭉쭉 떨어져서 17%를 바닥 치고 다시 50%까지 성장하고 있습니다. 투자 할만해 보이시나요? ㅋㅋ

테스트 커버리지를 올리기로 결심한 것은 박재성님의 CI 강좌 이후 뒷풀이 때 박재성님과 나눈 대화 때문이었습니다. "테스트 커버리지 70% 이상을 유지하시는데 힘드시지 않은가요?" 라는 질문을 드렸고 그 뒤에 박재성님께서 매우 좋은 답변을 해주셔서 저에게 자극이 됐던 것 같습니다.

현재 프로젝트를 진행하며 토비형님과 함께 OSAF도 만들어가고 있습니다. 실제 프로젝트를 진행하며 스프링 2.5, 하이버 3.2 기반의 OSAF 프레임워크를 만들고 있습니다. 그래서인지 정말로 필요한 코드들만 프레임워크에 들어가고 있으며 잘 만들면 ROO나 RoR의 스캐폴딩이 부럽지 않은 기능과 센스를 갖춘 프레임워크가 나올 것으로 기대하고 있으며 또 그렇게 만들려고 노력하고 있습니다. 그 정도 되려면 스프링 프레임워크 정도의 테스트 커버리지는 기본으로 갖춰줘야겠지요.

사용자 삽입 이미지

Anyway, 성장이 좀 더뎌지긴 했지만 꾸준히 올라갈 것으로 예상됩니다. 어떻게 아냐구요? 아직도 OSAF 코드 중에 테스트를 만들어야 할 대상들이 남아있기 때문이죠. 그리고 제가 만들기로 마음먹었기 때문에 커버리지는 분명히 좀 더 올라갈 것입니다.
top


Cobertura 사용기

Good Tools : 2008.01.18 17:03


사용자 삽입 이미지

아~~ 이 짜릿함!!!
저 화면을 보려고 거의 두 시간이나 낑낑댔습니다.

참조
사람을 위한 자동화: 연속 테스팅 (한글)
Cobertura에서 코드 커버러지 분석결과가 잘못 나올때..
Cobertura를 이용한 커버러지 테스트시 주의할 사항

TDD 연습한 코드를 Cobertura가 제공하는 Ant Task를 사용해서 리포트를 작성한 화면입니다. 딱 봐도 Rent 클래스에 대한 테스트가 부족했다는 것을 알 수 있습니다.

이상하다. 정말 열심히 TDD로 작성한 코드인데, Rent 클래스의 커버리지는 정말 이상하리 만큼 낮습니다. 그래서 살펴봤습니다.

사용자 삽입 이미지

이야... 테스트 안 된 부분은 뻘건색으로 표시 됩니다. 죽여줍니다. ㅎㅎ 무서워서라도 테스트 코드를 잘 작성해야겠군요.

toString() 메소드가 말썽이었군요. 그 위에있는 메소드도 RentalInfo에 있는 getRentalFee()는 테스트는 했는데 그것들을 쭉 돌아가며 호출하는 메소드는 그냥 작성한 것 같네요.

흠... 그리고 클래스 목록에 Test 클래스까지 포함되어 있는데, 저 녀석은 instrument 대상에서 제외시켜줘야겠습니다.

사용자 삽입 이미지

각 항목 별로 정렬도 됩니다. 가장 커버리지가 낮은 클래스는 나중에 버그가 숨어있기 가장 안전한 곳일테니, 테스트를 보충해주는게 좋을 것입니다.

각 항목 이름을 클릭하면 다음과 같은 항목에 대한 도움말을 보실 수 있습니다.

사용자 삽입 이미지

Branch Coverage는 뭔지 모르겠네요. 읽어봐도.. 별로;;

위키피디아에서는 다음과 같이 설명되어 있습니다.

Branch coverage (sometimes called Decision Coverage) measures which possible branches in flow control structures are followed. Clover does this by recording if the boolean expression in the control structure evaluated to both true and false during execution.

가능한 분기를 얼마나 테스트 했는지 나타내는 수치로군요. 제가 작성한 코드에서 예를 들어보겠습니다.

사용자 삽입 이미지

분기문이 하나이고 해당 분기문을 한 번만 테스트 했네요.(왼쪽에 있는 숫자가 몇 번 테스트 됐는지 표시 해주는 것 같습니다. 추측인데.. 거의 맞는거 같습니다.) if 문은 두 곳으로 분기할 수 있는데 그 중에서 한 번만 테스트 한 것입니다.

맞습니다. "삼각측량"을 사용하지 않았습니다.
역시 TDD는 쉽지 않습니다.
그러나 그만큼 재밌습니다.
top