게임 개발에서 테스트 주도 개발이 가능한가?


23

스크럼 인증을 받았기 때문에 시스템을 개발하는 동안 민첩한 방법론을 사용하는 경향이 있으며 스크럼 프레임 워크의 일부 캔버스를 사용하여 일상적인 작업을 관리합니다.

게다가, TDD가 게임 개발에 옵션이 될 수 있는지 궁금합니다.

이 GD 질문을 믿는다면 TDD는 게임 개발에별로 유용하지 않습니다.
MVC 및 TDD가 왜 게임 아키텍처에서 더 많이 사용되지 않습니까?

나는 예산이 큰 대규모 프로젝트가 완벽하게 작동 해야하는 산업 프로그래밍에서 나왔습니다. 코드가 내부 및 외부에서 철저하게 테스트되지 않으면 치명적인 시나리오가 발생할 수 있기 때문입니다.

또한 스크럼 규칙을 준수하면 스크럼의 모든 단일 작업에 시간이 표시되는 동안 마감일을 맞추는 것이 좋습니다! 따라서 위의 질문에서 시스템 구축을 중단하고 게임 작성을 시작한다고 말하면 동의합니다. 스크럼이 말한 것은 바로 완벽한 시스템을 구축하지 말고 먼저 스프린트가 작동하도록하는 것입니다. 그런 다음 필요한 경우 두 번째 스프린트에서 작업하는 동안 코드를 리팩터링하십시오!

게임 개발을 담당하는 모든 부서가 Scrum을 사용하지는 않지만 Scrum은 쓸모가 없다는 것을 이해합니다. 그러나 모든 부서가 Scrum을 사용하는 순간을 생각해 보자 ... "완벽한"시스템 / 게임을 작성하고 싶지는 않지만 TDD가 버그없는 코드를 작성하는 것이 좋을 것이라고 생각한다.

그래서 내 질문은 다음과 같습니다.

게임 개발에서 TDD가 가능합니까?


이 질문에 대한 토론은 귀하가 연결 한 질문 외에 추가 할 내용

저는 애자일 소프트웨어 개발에서 프로젝트 관리의 스크럼 프레임 워크를 제시하고 스프린트 동안 개발자에게 스크럼이 원하는 것을 말함으로써 TDD를 옵션으로 사용할 수있게합니다. TDD 또는 MVC 측면뿐만 아니라 스크럼 관점에서 주제에 대한 다른 사람들의 관점을 얻고 싶습니다. TDD 자체를 독립형 접근 방식으로 생각하는 것 외에 메달 의이 측면에서 논쟁 할 때 TDD가 어떻게 실행되지 않는지 이해하고 싶습니다.
Will Marcouiller 님이

@WDD TDD == 하향식 설계 또는 테스트 중심 설계? 나는 하향식을 생각하고 장기적으로 관리성에 대한 답변을하려고했지만 다른 답변이 내가 아닌 방식으로 TDD를 해석하는 것을 보았습니다.
James

@ 제임스 : 테스트 중심 개발.
혼돈

@ 제임스 : 혼란을 드려 죄송합니다! 내가 염두에 둔 것은 스크럼을 사용한 애자일 소프트웨어 개발 (Agile Software Development)이기 때문에 나는 약어의 다른 의미에 대해 몰랐다.
Will Marcouiller가

답변:


11

많은 게임 프로그래머가 아직 아이디어를 얻지 못했거나 복잡한 시스템을 테스트하는 방법을 잘 알고 있지만 실제로 실행 가능합니다. 테스트하기 쉬운 게임 플레이 관련 시스템을 제외하고는 거의 사용하지 않는다는 것을 본인은 인정합니다.

많은 모의 객체를 사용할 것으로 예상됩니다. 많은 시스템이 서로 연결되어 있기 때문에 개별 구성 요소를 테스트하기는 어렵습니다.

또한 많은 것들을 철저히 테스트 할 수는 없습니다. 파티클 시스템을 어떻게 시험 구동합니까? 애니메이션 시스템이 올바르게 작동하는지 어떻게 테스트합니까? 많은 것들이 본질적으로 시각적이며 적절한 테스트를 수행하는 방법에 대해 분명하지 않습니다.

그러나 전통적인 의미에서 반드시 단위 테스트는 아니지만 특정 기능에 대한 "테스트"로 존재하는 많은 것들이 있습니다. AI 탐색을위한 테스트 레벨과 같은 것은 일반적이지만 자동화하기 가장 쉬운 것은 아닙니다.

게임에 대해 단위 테스트를 작성할 수있는 (그리고 아마도해야 할) 특정 측면이 있습니다. 모든 종류의 일반적인 "파일 판독"시스템을 테스트해야합니다. 하드웨어 (3d 표면 등) 초기화에 대한 테스트가있을 수 있습니다. 모의 서버가있을 수도 있고 클라이언트 / 서버 상호 작용 코드를 테스트 할 수도 있습니다. 그런 것들.


9
이것들은 자동화 된 테스트의 존재에 대한 훌륭한 제안이지만 테스트 중심 개발에는 전혀 적합하지 않습니다.

1
재미있는 의견, Tetrad! 소금 한 덩어리 주셔서 감사합니다. 비주얼 애니메이션을 테스트하는 방법을 물어보십시오. 3D 시스템에 대해서는 말하기가 어렵습니다. 아마도 몇 가지 작은 게임을 개발 한 후에도 단일 게임을 작성한 적이 없기 때문입니다! 게다가 2D에서는 종종 이미지를 화면에 렌더링하기 위해 매트릭스로 표현 된 객체와 매트릭스 파서를 보았습니다. 따라서 방향키를 누른 후 결과 매트릭스의 올바른 위치에서 올바른 정보를 찾을 수 있습니다. 나는 아직 게임의 시각적 구성 요소에 대해 충분히 알지 못하며 올해도 확실합니다! =)
Will Marcouiller 님이

나는 OOP 개념에 대한 지식이 필요한 이번 주 질문 (GD에 대한 첫 번째 질문)에 대답했다고 코딩하기 위해 돌아 왔습니다. 영업 이익은시 뱀을 이동하고 싶었다 Keys.Down, Keys.Left등 사용자가 뱀이 가고 싶은 곳 게임이 알고 있으며, 뱀이 게임에 알려줍니다 곳이 방법을 알고있는 유일한 뱀 비록, 가야 말 것을 게임에서 다른 방향으로 움직입니다. 이것을 IMHO에게 말하면, Snake수업은 시험 가능한 수업이됩니다! (계속 ...)
Will Marcouiller

테스트 가능할뿐만 아니라 이제 TDD에 적합한 후보입니다. 이 2D 게임에서 X와 Y 축의 Vector2.Zero속도로 뱀이 위치 에서 초기화되었다고 가정 해 봅시다 10.0f. 첫 번째 질문은 다음과 같습니다. 초기 위치와 테스트 방법에 있습니까? 그런 다음 해당 Position부동산이 공개적으로 노출 될 것이라고 생각합니다 . 둘째 : 어떻게 움직이게합니까? 이동 방법이 양호해야하므로 각 방향 방법 MoveDown등에 대한 테스트를 작성해야합니다 MoveLeft. 이제 메소드 선언을 작성하고 테스트가 불평하는지 확인하십시오. 그런 다음 뱀의 위치를 ​​다시 확인하십시오
Will Marcouiller

MoveDown메소드 호출 후 ! 당신은 Position재산이 철저히 테스트 되었음을 알고 있기 때문에 , 그것은 당신이 셀 수있는 멤버입니다! 여기서 계속을 추측 할 수 있습니다! ;-) 즉, 시각적 구성 요소를 테스트 할 수는 없지만 게임에서 원하는 뱀 종류에 따라 뱀이 뱀처럼 보일 것입니다. 뱀을 그리는 작가는 뱀을 그리는 것에 충분히 만족해야합니다. 물론 TDD를 통해 테스트 할 수는 없습니다! 그러나 다른 물체에 대한 위치 와이 뱀을 나타내는 클래스도 가능합니다. 실제로, TDD
Will Marcouiller

11

TDD가 게임 개발의 기초로 적합하지 않다고 생각합니다. 방법론의 일환으로 자동화 된 단위 테스트, 물론 게임 개발에 대한 너무 많은 주요 관심사는 주관적이며 테스트를 통해 개발 의 원동력 이 될 수 있습니다 . 게임 메카닉이 재미 있는지에 대한 스크립트 테스트를 어떻게 작성 하시겠습니까? 레벨이 시각적으로 매력적입니까? 레벨이 일반 플레이어를 완료하는 데 약 15 분이 걸립니까? TDD는 사양 준수 측면에서 프로젝트의 성숙도를 정량적으로 측정 할 수 있으며 상황은 게임 개발이 아닌 상황에 적합합니다.


3
게임 개발이 사양을 준수하지 않는다고 말하는 것은 무엇을 의미합니까? 제 요점은 어떤 종류의 게임을 쓰고 싶을 때 작성해야한다는 것입니다. 따라서 사양, 요구 사항은 기능 등으로 작성되어야한다. Scrum의 제품 백 로그 예제를 보자. 당신은 당신이 예상 게임을 작성하기 위해 게임에서 개발해야 할 사용자 이야기를 알고 있습니다! 그런 다음 다른 예를 들어, 전투 게임에서 충돌을 감지해야 할 수도 있습니다. 게임이 재미 있는지 여부는 이야기 나 프로그래밍보다 더 중요합니다. IMHO.
Will Marcouiller가

@Will Marcouiller : 나는 우리가 적은 프로젝트에 대해 중요한 어떤 사양이없는하거나 준수를 측정 할 수는 없지만 암시하는 의미하지 않는다 의미 개발의 다른 종류에 비해 지정. 스펙에 "게임은 재미 있어야한다"라고 쓸 수 있지만 이는 기술적 의미가있는 스펙이 아닙니다. 테스트 할 수있는 것을 테스트 할 수 있고 테스트해야하지만 TDD의 요점은 테스트가 프로세스의 일부가 아니라 프로세스 의 전체 기초 , 기본 사고 방식이며 높은 지름으로 잘 지내지 않는다는 것입니다 주관적인 분야.
혼돈

2
@ 윌 마르코 일러 (Will Marcouiller)는 게임의 재미가 이야기로 귀결된다는 것에 매우 동의합니다. 게임의 모든 재미는 게임 플레이로 귀결됩니다. 스토리는 보너스입니다.
AttackingHobo

1
@Will : 아니요, 그는 사용자가 게임에서 얻는 즐거움을 자동화 된 테스트를 통해 결정할 수 없으며 게임은 소비자의 손에 게임을 보내야만 테스트 할 수있는 많은 것들이 있다고 말합니다.
DeadMG

1
@DeadMG : 그것은 누구보다 원하는 것이 사실이지만, 내 요점 (필요한 AttackingHobo 's)은 ​​개발 프로세스 자체가 디자이너와 생산자, 개발자 및 테스터의 단위로 정량화 할 수없는 테스트를 통합해야한다는 사실과 관련이 있습니다. 게임의 경험, 느낌, 스타일 및 미적 효과의 품질과 관련이 있습니다. TDD가 개발의 중요한 부분 일 때 사람들에게 TDD를하고 있다고 말하는 것은 기본적으로 그들에게 거짓말하는 것입니다.
혼돈

6

제목이 TDD에 관한 것이기 때문에 당신이 요구하는 것을 정확하게 해결하는 것은 약간 어렵지만 스크럼을 질문의 핵심 부분으로 만드는 것 같습니다. 내가 이해하기 때문에 하나는 다른 것을 요구하지 않습니다.

이 GD 질문을 믿는다면 TDD는 게임 개발에별로 유용하지 않습니다.

맞아요. 나는 그것이 게임 산업에서 실제로 사용되는 것을 들어 본 적이 없다고 생각합니다. (하지만 그때는 개인이 게임 산업 외부에서 사용한다고 들었습니다.)

나는 예산이 큰 대규모 프로젝트가 완벽하게 작동 해야하는 산업 프로그래밍에서 나왔습니다. 코드가 내부 및 외부에서 철저하게 테스트되지 않으면 치명적인 시나리오가 발생할 수 있기 때문입니다.

게임이 완벽하게 작동 할 필요는 없습니다. 따라서 코드 정확성에 대한 강조가 훨씬 적습니다. TDD는 코드 정확성을 보장하지는 않지만 일부 사람들은 코드 정확성을 줄입니다. 아직이 증거를 보지 못했습니다.

또한 스크럼 규칙을 준수하면 스크럼의 모든 단일 작업에 시간이 표시되는 동안 마감일을 맞추는 것이 좋습니다!

마감일을 맞추거나 시간이 지남에 따라 조치를 취하지 않는 방법론을 본 적이 없습니다. 문제는 사용하는 방법론에 관계없이 소프트웨어 복잡성을 추정하는 것이 매우 어렵다는 것입니다. 불가능하지는 않지만 정확하게 추정하는 것은 프로세스와 관련이 없습니다. 내 임무가 새로운 GUI 패널을 추가하거나 애니메이션의 버그를 수정하거나 캐릭터에 새로운 통계를 추가하는 것이라면 Scrum을 사용하면 속도가 빨라지지 않으며 TDD가 사용됩니다. 나중에 유지 관리 작업을 줄이면 가능한 이점으로 작업 속도가 느려집니다. 그들은 확실히 작업 기간을 더 쉽게 추정하지 않을 것입니다.

"완벽한"시스템 / 게임을 작성하고 싶지는 않지만 TDD는 버그가없는 코드를 작성하는 것이 좋을 것이라고 생각합니다.

TDD가 다른 방법보다 더 나은 코드를 작성하는 것으로 입증되면 그렇습니다.

이것에 대한 증거가 있습니까? 업계에서이를 사용할 수 있다는 사실은 증거가 아닙니다. 업계는 늦게 전달되는 불량 코드를 생성하는 것으로 잘 알려져 있습니다. 실패했거나 늦게 진행된 주요 TDD 프로젝트의 예가없는 것은 새로운 접근 방식이고 실제로 그러한 프로젝트를 아직 완료 한 사람이 거의 없기 때문일 수 있습니다. (그리고 늦게 달렸던 것들도 여전히 달릴 수 있습니다.)

게임 개발에서 TDD가 가능합니까?

생존 가능한? 당연하지. 유익한? 아직 입증되지 않았습니다.


1
불행히도 TDD와 스크럼은 여전히 ​​오해되고 있습니다. 버그 수정 속도를 높이는 데 도움이되지 않는 기존 프로젝트의 경우에도 마찬가지입니다. 스크럼은 게임처럼 복잡한 시스템을 개발하기위한 프레임 워크입니다. 스크럼은 스프린트에서 다른 버그로 버그를 수정하여 누적되지 않도록 권장합니다. TDD는 사용자 측에 배치합니다. 사용자는 코드를 사용할 동료 프로그래머를 의미합니다. 코드를 다른 사람이 쉽게 사용할 수 있도록 어떻게 사용해야하는지 생각해야합니다. 따라서 경험마다 더 나은 디자인으로 이어집니다. 모두 말했듯이, 주제에 대한 흥미로운 견해를 얻었습니다.
Will Marcouiller

1
버그가 누적되지 않으면 기능이 미끄러 져서 마술처럼 더 많은 시간을 생산할 수 없습니다. 내 이해는 Scrum은 어쨌든 버그에 특정한 특정 방법이 없다는 것입니다. TDD가 다른 사람들이 귀하의 코드를 사용하는 방법에 대해 생각하도록 강요하는 것이 유일한 방법은 아닙니다. 따라서 반드시 더 나은 것은 아니며 반드시 가장 효과적인 시간 사용은 아닙니다.
Kylotan

1
참고로 Noel Llopis는 인디 게임에 TDD를 사용하고 그의 오래된 회사 High Moon Studios는이를 광범위하게 사용했습니다. 인용을받지 못했습니다. 죄송합니다.
tenpn February

읽을만한 좋은 점이 있습니다! 당신의 기여에 감사드립니다. 그럼에도 불구하고 TDD는 XP와 같은 또 다른 접근법이라고 덧붙이고 싶습니다 (익스트림 프로그래밍). 그리고 그렇습니다. 스크럼은 버그에 특정한 특정한 방법을 제공하지 않으며, 팀 (개발자)의 자체 구성에 투자합니다. 스크럼은 작업 방법을 알려주지 않고 수행해야 할 작업 만 알려줍니다. 수행해야 할 작업을 수행하는 것이 팀의 약속입니다. 스크럼은 자체 조직화 된 직능 팀에 대해서만 베팅합니다. 기능의 개발 및 테스트 방법 등을 결정하는 것은 팀입니다.
Will Marcouiller

(계속 ...) 이번 주 GD 수업에 관한 첫 질문에 답했습니다. OP는 방향 키를 누를 때 스프라이트를 움직이는 방법을 알고 싶어했습니다. OOP 개념에 익숙해지면 XNA를 사용하여 첫 번째 게임을 개발하기 위해 클래스를 사용해야한다는 것을 알았습니다. 즉, 내 Spacecraft클래스는 메서드와 속성을 사용하여 완전히 테스트 가능한 클래스가됩니다. 이것은 IMHO가 TDD를 사용하여 완전히 테스트 할 수있는 종류의 것입니다. 우주선이 필요하다고 가정하면 한 번에 하나의 테스트를 수행하는 데 필요한 테스트를 작성합니다.
Will Marcouiller

4

내 불쌍한 영어에 대한 미안하고 편견의 관점에 대한 미안 : 나는 게임 디자이너가 아니라 코더입니다.

나는이 논의에서 약간의 오해가 있다고 생각한다. 더 일반적인 형태 인 소위 BDD로 TDD에 대해 이야기하겠습니다. 행동 중심 개발은 프로젝트를 테스트하는 방법이 아닙니다 (테스트는 부작용과 유사합니다). BDD는 모든 제작 과정에서 리팩토링 및 소프트웨어 설계를 수행하는 방법입니다 (KISS, "품질 유지", "초기 테스트, 자주 테스트"등의 좌우명 참조). BDD는 Waterfall 프로세스와 같은 일부 고전적인 소프트웨어 프로세스 또는 소프트웨어를 만드는 다른 반복 방법론과 반대입니다.

또 다른 요점은 자동 테스트는 계산 기계에서 자동으로 테스트 할 수있는 기능에 대한 것입니다. 게임에는 재미를위한 테스트가 없으며 그래픽 사용자 인터페이스의 유용성에 대한 테스트도 없습니다. 재미 또는 유용성은 다른 직업을위한 자료이며 상호 작용 디자이너, 세계 및 레벨과 같은 소프트웨어 개발에는 적합하지 않습니다. d. 예술적 부분 (모델링, 텍스쳐링 등)이 컴퓨터를 창의성을위한 도구로 사용하는 아티스트를위한 것과 같은 방식으로, 분명히 그러한 작업은 코드를 작성하는 사람이 수행 할 수 있지만, 요점이 아닙니다. 물리학 테스트, 최적화 알고리즘 테스트, 단일 객체 동작 테스트 가능

마지막 생각은 imho, 게임 디자인뿐만 아니라 전체 작성 코드는 예술이라는 것입니다.


4

다음은 TDD와 gamedev가 꽤 잘 섞여 있다고 생각하는 사람의 사례 연구입니다.

http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf

분명히 이것은 Pygame의 작은 프로젝트이지만 그래픽 게임으로 테스트 할 수있는 부분과 그렇지 않은 부분에 대한 아이디어를 제공합니다. 이 시나리오에서 TDD로 얼마나 많은 일을 할 수 있는지에 놀랐습니다.


1
동일한 프로젝트를 수행 한 컨트롤 그룹 (매우 높은 수준의 언어로 기존 사소한 아케이드 게임 복제)과 비교하지 않으면 TDD의 효과 여부에 대해서는 아무 것도 말하지 않습니다. 단지 그가 TDD를 사용했다고 말합니다.

3

테스트 주도 개발은 게임 개발에 적합하지 않습니다. 물론 테스트하려는 일부 부품에 대한 테스트를 작성할 수 있지만 게임 개발 프로세스는 진행을 시작하기 전에 정확한 사양을 요구하는 테스트 중심 개발과 완전히 다릅니다.

게임이 시작될 때 정확한 사양을 갖는 경우는 거의 없습니다. 그리고 그렇게한다면 개발 과정에서 항상 변화하고 진화합니다.

게임 디자인은 예술입니다. 예술이 언제 좋은지 알기 위해 특정한 테스트를 할 수는 없습니다.


게임 자체, 기능 분석 등을 분석 할 때 재미있는 요소를 고려해야한다고 생각하지 않습니까? 함께 게임을 즐길 수있는 기능 세트를 설정할 수 있으며이 기능을 테스트 할 수 있습니다! 나는 당신이 제기하는 주제와 논쟁에 대해 심층적으로 논의하기 위해 다른 의견을 제시하려고 노력하고 있습니다. 당신의 기여에 감사드립니다! =)
Will Marcouiller

3
작은 것들을 조정하고 그들이 얼마나 재미 있는지 보는 데 많은 개발이 필요합니다. 돌에 100 % 설정되어 있지 않으면 테스트 할 수 없습니다. 그리고 시스템이 완료된 후 시스템을 테스트하는 것은 TDD가 아니라 테스트 중이지만 테스트에 의해 주도되는 개발은 아닙니다.
AttackingHobo

2
대부분의 실제 프로젝트가 시작될 때 정확한 사양을 가지고 있다고 생각한다면 많은 실제 프로젝트에서 작업하지 않았을 것입니다.
BlueRaja-대니 Pflughoeft
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.