sourcecode

발그린드로 유닛 테스트를 진행하는 것은 오버킬인가요?

copyscript 2023. 9. 6. 22:14
반응형

발그린드로 유닛 테스트를 진행하는 것은 오버킬인가요?

얼마 전에 체크라는 단위 테스트 프레임워크를 알아보기 시작했고 리눅스에서 c 코드로 테스트를 실행할 예정입니다.

이제 확인하고 잘 설계된 코드와 테스트 코드가 기본 기능이 올바른지 확인하는 데 도움이 됩니다. 즉, 의 변수를 보고 응답한 다음 함수가 올바른지 여부를 결정하는 것은 꽤 쉽습니다.

하지만 많은 malloc와 free가 있는 동적 메모리 구조를 테스트해보고 싶다고 하자, 데이터를 입력하고 다시 정확한 데이터를 가져올 수 있다는 것이 밝혀졌습니다.그러나 그것이 제가 그 과정에서 어떤 기억을 깨지 않았다는 것을 증명하지는 못합니다. 예를 들어 제가 기억의 절반을 없애는 것을 잊어버리고 포인터(클래식 기억법)를 잃어버렸다고 합시다.그 코드는 아마 대부분의 유닛 테스트를 통과할 것입니다.

이제 질문을 드리겠습니다. 전체 유닛 테스트 코드를 실행하는 것이 좋은 방법인지, 예를 들어보겠습니다.발그린드가 말록이나 자유로운 문제를 탐지하도록 내버려 두었습니까? (아니면 전기 울타리 같은 것으로 컴파일할 수도 있습니까?)

좋은 생각인 것 같아요 하지만 저는 제가 여기에 무엇을 넣었는지 잘 모르겠어요.

Thanks Johan


업데이트: 더글라스와 조나단에게 감사드립니다. 좋은 생각이고 계속 해야 할 일인 것 같습니다 :-)

업데이트: 발그린드는 재미있는 도구이지만, 이것을 하는 것을 발견한 첫 번째 밈 누출은 테스트 프레임워크에 있었고 내 코드가 아니었습니다(그래도 꽤 재미있습니다).따라서 사용 중인 유닛 테스트 프레임워크가 누출되지 않았는지 확인한 후 자신의 코드를 뒤집는 방법을 알려줍니다.제 경우에는 빈 테스트 케이스만 있으면 되고, 그 이후로는 유닛 테스트 프레임워크만 실행되고 있습니다.

물론 그렇습니다. 전체 프로그램을 사용하는 것보다 단위 테스트에 대해 valgrind를 실행하는 것이 훨씬 쉽습니다.

또한 메모리 오류는 장치 테스트에서 테스트하는 코드 영역에 국한되므로 수리가 용이합니다.

또한 전체 프로그램에 대해 더 복잡한 테스트가 아닌 단위 테스트를 실행하기 때문에 수정 여부를 확인하는 것이 더 쉽게 수정할 수 있습니다.

자동화된 방식으로 valgrind를 실행하는 경우--error-exitcode=<number> [default: 0]

Valgrind가 실행 중 오류를 보고한 경우 반환할 대체 종료 코드를 지정합니다.기본값(0)으로 설정하면 Valgrind의 반환 값은 항상 시뮬레이션 중인 프로세스의 반환 값이 됩니다.0이 아닌 값으로 설정하면 Valgrind에서 오류를 감지하면 대신 해당 값이 반환됩니다.이것은 반송 코드를 검사하는 것만으로 Valgrind가 오류를 보고한 테스트 사례를 쉽게 탐지할 수 있기 때문에 자동화된 테스트 제품군의 일부로 사용하는 데 유용합니다.

http://valgrind.org/docs/manual/manual-core.html#manual-core.erropts

Douglas Leeder가 말했듯이, 장치 테스트를 수행할 가치가 있습니다. 진단 소프트웨어를 사용하여 장치 테스트를 실행하여 실제로 작동하는지 확인할 수 있습니다.그것은 기억력을 남용하지 않는 것을 포함하므로 발그린드를 사용하는 것이 좋습니다.

당신은 당신의 코드가 작동하는지를 증명하기 위해 당신의 유닛 테스트를 정말로 원할 것입니다.

항상 valgrind 아래에서 실행할 필요는 없지만, 실행하는 것은 가능한 한 사소한 것이어야 하며, 주기적으로 실행해야 합니다(큰 변화가 있은 후에 말함).

언급URL : https://stackoverflow.com/questions/459233/is-it-overkill-to-run-the-unit-test-with-valgrind

반응형