TL; DR
훌륭하고 유용한 테스트를 작성하는 것은 어렵고 C ++에서는 비용이 많이 듭니다. 숙련 된 개발자가 무엇을 언제 테스트해야하는지에 대한 이론적 근거를 공유 할 수 있습니까?
긴 이야기
실제로 팀 전체에서 테스트 중심 개발을 수행했지만 실제로는 효과가 없었습니다. 우리는 많은 테스트를 가지고 있지만 실제 버그와 회귀가있는 경우를 다루지 않는 것 같습니다. 일반적으로 장치가 고립 된 행동이 아닌 상호 작용할 때 발생합니다.
이것은 종종 단위 수준에서 테스트하기가 어렵 기 때문에 TDD 수행을 중단하고 (실제로 개발 속도를 높이는 구성 요소 제외) 통합 테스트 범위를 늘리는 데 더 많은 시간을 투자했습니다. 소규모 단위 테스트에서는 실제 버그가 발생하지 않았으며 기본적으로 유지 관리 오버 헤드 만 있었지만 통합 테스트는 실제로 그만한 가치가있었습니다.
이제 새 프로젝트를 상속했으며 테스트 방법에 대해 궁금합니다. 네이티브 C ++ / OpenGL 응용 프로그램이므로 통합 테스트는 실제로 옵션이 아닙니다. 그러나 C ++의 단위 테스트는 Java보다 약간 어렵습니다 (명시 적으로 물건을 만들어야합니다 virtual
). 프로그램은 객체 지향적이지 않으므로 물건을 모방 / 스터브 할 수 없습니다.
테스트 작성을 위해 테스트를 작성하기 위해 모든 것을 분리하고 OO-ize하고 싶지 않습니다. 그래서 나는 당신에게 묻습니다 : 무엇을 테스트해야합니까? 예 :
- 자주 변경되는 함수 / 클래스?
- 수동으로 테스트하기 어려운 함수 / 클래스?
- 이미 테스트하기 쉬운 함수 / 클래스?
나는 존경받는 C ++ 코드베이스를 조사하여 테스트 방법에 대해 알아보기 시작했습니다. 현재 Chromium 소스 코드를 살펴보고 있지만 코드에서 테스트 이론적 근거를 추출하기가 어렵다는 것을 알게되었습니다. 누구나 C ++ 사용자들 (위원회 위원, 서적 저자, Google, Facebook, Microsoft 등)이 어떻게 접근하는지에 대한 좋은 예나 게시물이 있다면 도움이 될 것입니다.
최신 정보
이 사이트를 작성한 후이 사이트와 웹을 검색했습니다. 좋은 물건을 찾았습니다.
- 단위 테스트를하지 않는 것이 적절한시기는 언제입니까?
- /programming/109432/what-not-to-test-when-it-comes-to-unit-testing
- http://junit.sourceforge.net/doc/faq/faq.htm#best
안타깝게도이 모든 것이 오히려 Java / C # 중심입니다. Java / C #에서 많은 테스트를 작성하는 것은 큰 문제가 아니므로 일반적으로 이점이 비용보다 중요합니다.
그러나 위에서 쓴 것처럼 C ++에서는 더 어렵습니다. 특히 코드 기반이 그렇게 OO가 아닌 경우 좋은 단위 테스트 범위를 얻으려면 문제를 심각하게 엉망으로 만들어야합니다. 예를 들어, 상속받은 응용 프로그램 Graphics
은 OpenGL보다 얇은 계층 인 네임 스페이스를 가지고 있습니다. 모든 기능을 직접 사용하는 엔티티를 테스트하려면 인터페이스와 클래스로 바꾸고 모든 엔티티에 주입해야합니다. 한 가지 예일뿐입니다.
따라서이 질문에 답할 때는 시험을 쓰기 위해 다소 큰 투자를해야한다는 것을 명심하십시오.