게임 엔진에서 단위 테스트를 어떻게 수행합니까?


23

부끄러운 일로, 나는 적절한 단위 테스트를 작성하지 않았으며, 테스트가 성공한 후에 처분 할 작은 조직화되지 않은 테스트 프로그램 만 작성했습니다. 게임 프로젝트에서 단위 테스트를 수행하는 방법에 대한 명확한 아이디어가 없습니다. (내 언어는 C ++입니다.)

엔진의 각 하위 시스템에 대해 별도의 프로젝트와 관련 테스트를 수행 한 다음 실제 엔진을 빌드하는 더 큰 프로젝트 / 솔루션이 있어야합니까? 예를 들어 event엔진에 모듈 이 있다고 가정합니다 . 어떻게 처리해야합니까?


흥미로운 질문은 엔진을 개발할 때 기능을 테스트하기가 쉽지만 게임 테스트에서 큰 프로젝트는 어떻습니까?
Yevhen

2
부끄러운 일 이 아닙니다 : 단위 테스트는 자동적 으로 좋은 것이 아닙니다.
o0 '.

1
단위 테스트를 사용해 본 적이 없다면 그것은 부끄러운 일입니다.
Kristopher Johnson

답변:


18

먼저 단위 테스트 프레임 워크가 필요합니다. 과거에는 UnitTest ++Google Test 사용했습니다 . 전자는 매우 가벼우 며 후자는 더 기능적이지만 다소 성가시다. 그런 종류의 것이 필요한 경우 Google Mock 과 잘 통합 됩니다. 물론 다른 많은 옵션 있습니다 : UnitTest ++의 최종 저자가 작성한 이 목록Wikipedia 를 참조하십시오 .

단위 테스트는 다양한 시나리오에서 특정 격리 된 독립적 인 코드 비트 ( "단위")를 강조하기 위해 집중 테스트를 작성하는 것입니다. 경우에 따라 모든 것을 단위 테스트 할 수는 있지만 일반적으로 100 % 적용 범위를 달성하는 것은 실용적이지 않으며, 특히 게임에서 매우 어려울 수 있습니다. 렌더러 출력을 단위 테스트하는 것이 의미가 있거나 유용하거나 "참"단위 테스트.

자동화 된 테스트가 자동화되지 않은 테스트보다 낫다는 것을 기억하는 것이 중요합니다. 따라서 테스트가 "진정한 단위 테스트"가 아니라는 사실을 지나치게 강조해서는 안되며 단순히 테스트 만한다는 것을 자랑스럽게 생각하십시오. 단위 테스트 프레임 워크는 일반적으로 패키징 테스트 및 실패보고 균일 성을위한 기능을 포함하기 때문에 느슨한 "비 단위"테스트를 빌드하는 데 유용합니다.

사용 가능한 프레임 워크 중 하나를 사용하여 이전 테스트를 부활시키고 테스트 프로젝트로 빌드하는 것이 좋습니다. 모든 것을 실행하는 수시로 (또는 릴리스 또는 통합 빌드의 일부로 자동 실행) 당신의 테스트. 예를 들어 테스트에서 감지 할 수있는 미묘한 버그를 발견 한 경우 나중에 추가 할 수있는 회귀를 포착하기 위해 하나를 추가 할 수 있습니다.

아마도 게임에서 단위 테스트가 가능한 하위 수준 유틸리티 코드라는 것을 알게 될 것입니다. 괜찮습니다. 파손되면 많은 상위 계층을 방해 할 수있는 기초 코드입니다.

코드베이스에 모든 작은 기능과 논리 게이트에 대한 테스트가 없다는 프로그래머의 연옥에 가지 않을 것이므로 테스트 작성에 필요한 것보다 더 많은 시간을 소비하지 마십시오. 처음부터 모듈을 작성하는 데 걸리는 것보다 모듈에 대한 테스트를 작성하는 데 더 열심히 생각하거나 훨씬 더 많은 시간을 소비해야하는 경우 시간이 낭비 될 수 있습니다. 단위 테스트 (일반적으로 테스트)는 모든 작업을 수행해야하는 번거 로움이 아니라 적절하게 사용하는 방법을 배우는 도구입니다.


3
If you have to [...] spend significantly more time writing the tests [...] than it took you to author the module... 그러면 모듈이 너무 복잡합니다. 지금 그것을 단순화하십시오, 당신은 미래에 자신에게 감사 할 것입니다!
Jess Telford

3
@Jess 불균형 적으로 테스트하기 어려운 모듈을 반드시 단순화 할 필요는 없습니다. 단위 테스트가 단순히 시간을 잘 사용하지 않는 많은 영역이 있습니다. 여기에는 출력이 상당히 다양하고 여전히 수용 가능한 그래픽이 포함됩니다. 향후 변경 될 가능성이없는 코드; 또는 단위 테스트를 용이하게하는 데 필요한 추상적이고 분리 된 디자인의 종류가 훨씬 더 거칠고, 오류가 발생하기 쉽고, 성능이 떨어지거나, 직관적이지 않은 코드.
Casey Rodarmor

@rodarmor-동의했습니다. 적절하고 부적절한 것의 슬라이딩 스케일이 있습니다. 이 모든 종류의 답변과 마찬가지로 하나의 크기가 모든 것에 맞지는 않습니다 :)
Jess Telford

UnitTest ++의 경우 github.com/unittest-cpp/unittest-cpp 로 이동 하십시오 . 다른 모든 것이 오래되었습니다.
Markus


4

"단위"는 테스트 할 수있는 가장 작은 코드이며 일반적으로 단일 함수 또는 클래스입니다. 단위 테스트는 의도 한대로 작동하도록 코드 단위를 연습하는 또 다른 코드입니다. 모든 경우를 다루기 위해 단일 코드 단위에 여러 테스트가있을 수 있습니다.

일반적으로 프로젝트의 기본 빌드에는 테스트가 포함되지 않습니다. 오히려 모든 테스트 코드를 포함하고 모든 테스트를 실행하고 결과를보고하는 프로그램을 생성하는 테스트를위한 별도의 빌드 구성이 있습니다. 테스트 프레임 워크는이를위한 모든 스캐 폴딩을 제공하며 반드시 필요한 것은 아니지만 권장됩니다. 테스팅을 처음 접한다면 처음에 자체 테스트 장비를 작성하는 것이 더 나을 수도 있습니다.

테스트를 통해 가능한 많은 코드를 커버하고, 자신이 모르는 코드의 우선 순위를 정하거나, 취약하고 향후 변경으로 인해 깨질 수있는 코드를 우선 순위로 지정하십시오. 모든 코드 변경 후 이상적으로 테스트를 자주 실행해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.