2009-12-20 6 views
3

나는 내 코드에서 일부 기능을 리팩터링하려고한다. 나는 아무 것도 깨뜨리지 않았 음을 보장 할 수있는 단위 테스트를 많이했지만, 그들이 나에게주는 보상에 대해서는 확신 할 수 없다. 코드를 분석하고 기능이 동일하게 유지되는지 확인할 수있는 도구가 있습니까?리팩토링 할 때 아무 것도 깨뜨리지 않았 음을 어떻게 확인할 수 있습니까?

나는 다소 고립 된 코드를 리팩토링 할 계획이므로 전체 프로그램을 점검 할 필요가 없다.

문맥에서, 내가하고있는 코드는 C/C++에 있으며 리눅스에서 GCC와 VIM으로 작업한다.

답변

10

gcov 단위 테스트에 대한 적용 범위 정보를 제공합니다.

수행하려는 리팩토링에 대해 더 많이 알지 못해도 정확한 방식으로 질문에 대답하기가 어렵습니다.

조언은 코드베이스의 많은 부분과 많은 부분을 리펙토링하는 대신 작은 반복으로 진행하고 모든 것이 깨지는 것을 깨닫는 것입니다.

참조 : The GNU Coverage Tool - A Brief Tutorial

+0

+1 작은 테스트 가능한 청크로 리펙터링합니다. 무언가가 고장난 곳을 확인하고 문제를 해결하는 방법을 파악하는 것이 훨씬 쉽습니다. –

7

변경되지 않은 그 기능을 보장 할 "쉬운"방법이 없습니다. 모든 가능성을 망라한 완벽한 단위 테스트를 받아야합니다. 절대적으로 모든 것을 테스트하는 것은 불가능하지만 가장 중요한 사용자 사례에 철저한 테스트가 있는지 확인할 수 있습니다.

당신은 또한 당신이 좋은 테스트 커버리지를 보장하기 위해 커버리지 도구를 사용할 수 있습니다 :

http://covtool.sourceforge.net/

5

당신이 단위 테스트를하지만 그들은 당신이 될거야 영역을 포함하는 것이 행복하지 않은 경우 리팩토링, code coverage 분석 도구를 사용하여 찾을 수 있습니다. 틈을 발견했다면 갭을 채우기 위해 테스트를 만들고 다시 확인한 다음 리팩토링을 진행하면 (업데이트 된) 단위 테스트가 철저하게 테스트됨을 알 수 있습니다. 이는 장기적으로 프로젝트에도 좋습니다 .

1

특정 플랫폼을 선택하지 않았지만 Bullseye과 같은 코드 적용 도구를 살펴 보았습니다. 그것은 전반적인 기능에 대한 분석을 제공하지는 않지만 (그리고 차이가있을 경우) 테스트가 목표 라이브러리를 적절하게 수행하는 데 도움이됩니다. 그것의 상용 애플 리케이션,하지만 다른 언어에 대한 비슷한 OSS 버전이 있다는 것을 알고, 당신이 필요하면 무료 라이센스가있을 수 있습니다.

2

트릭은 단위 테스트를 사용하는 것입니다. 기본적으로 컴파일러는 단위 테스트에서 기능 관점에서 언어를 확인하는 동안 언어의 정확성을 확인합니다. 리팩토링 할 때 (특히 다중 개발자 프로젝트에서 작업 할 때) 좋은 단위 테스트를 사용하면 안전하다고 느낄 수 있습니다.

관련 문제