견고한 소프트웨어 디자인 vs.


17

우리가 제작 한 게임을 완성 할 시간이 거의 없다면, 견고한 소프트웨어 아키텍처와 모든 과정을 성공적으로 완수하는 데 어떻게 균형을 맞출 수 있습니까?

나의 개인적인 도전 : 오늘날 효과적인 동시에 장기적인 사고는 어떻습니까? 또한, 당신이 그것을하고있는 동안 당신은 지난 5 년 동안 사용했던 것과 동일한 반복적 인 패턴에 의지하는 대신 새로운 것들을 배우고 싶을 수도 있습니다.

답변:


20

경험이 적을수록 초기 설계로 더 많은 시간을 낭비합니다. 좋은 디자인을 만드는 것은 디자인을하고 나서 그 방법을보고 평가함으로써 배울 것입니다. 일부 결정은 아직까지 도달했지만 의미가 모호합니다. 일부 게임 후에는 초기 디자인을 상당히 견고하게 만들 수 있으며이 단계에 더 많은 시간을 투자하면 돈을 지불하게됩니다.

나의 좌우명 : 처음부터 작업을 수행하되, 상식을 사용하여 다른 구성 요소보다 더 중요한 구성 요소를 감지하고 제한 시간 내에 구성 요소를 잘 설계하십시오. 예를 들어 AI가 게임에 중요한 경우 나중에 쉽게 확장 / 변경할 수 있는지 확인하십시오. 또는 모든 게임에서 사용할 구성 요소를 작성하려는 경우 재사용 성을 위해 디자인하십시오. 시간을 추적하고 디자인에 열중하지 마십시오. 디자인 마감일을 정한 후 릴리스 마감일을 얻기 위해 모든 것을 해킹하기 시작하십시오. 그러나 나중에 리팩토링 / 재 설계가 필요한 포인트를 확인하고 다음 게임을 시작하기 전에 어느 시점에서 계산하여 그 점을 개선하여 다시 물지 않도록하십시오!

좋은 조언 : 두 가지 옵션 중 하나를 선택해야하는 경우 세부 정보에 너무 오래 머 무르지 마십시오. 대부분의 경우 "좋은"또는 "나쁜"이 없습니다. 어떤 상황에서는 A가 더 좋을 것이고, 어떤 경우에는 B가 더 좋을 것이고, 전반적으로 둘 사이의 차이가 항상 시간 가치가있는 것은 아닙니다.

소프트웨어 나 게임을 디자인 할 때 많은 경험이 있으므로 연구에 시간을 투자하십시오 (예 : 디자인에 관한 책 읽기, 다른 경험에 대한 읽기, 동료 프로그래머와 디자인에 대한 이야기 ​​등). ).


7
+1, 좋은 조언. 악명 높은 분석 마비에 사로 잡히지 마십시오. 리팩토링은 과거의 결함을 바로 잡을 수있는 강력한 도구이므로 실수를 두려워하지 마십시오.
Michael Klement

1
분석 마비 . 나의 가장 큰 적! Analysis Paralysis 가 End-Boss 역할을 하는 게임을 만들어야합니다 . 게임 아키텍처를 먼저 디자인하는 것이 가장 좋습니다 . 농담 : 좋은 답변과 좋은 의견!
bummzack

12

사람들은 미래를 예측하는 데 끔찍합니다. 요구 사항이 매일 바뀔 수있는 게임의 경우 특히 그렇습니다.

YAGNI 라는 원리가 있는데 , "You Are n't Gonna Need It"(일명 "You Are n't Gonna Need It")이 있는데, 기본적으로 필요한 것을 알기 전까지는 구현해서는 안된다고 말합니다 .

사람들이 필요하다고 생각한 기능들이 결코 사용 되려고하지 않았기 때문에 실제로 사용하지 않는 구조적 강성으로 인해 많은 시스템들이 혼란에 빠지는 것을 보았습니다.

나의 개인적인 철학은 아마도 가장 효과가있는 일을하는 것 입니다. 즉, Get It Done과 Hacking Shit Together는 차이가 있습니다. 목적으로 코드를 작성한다고해서 모든 것을 공개하는 것, 모든 것을하는 BLOB 클래스를 갖는 것, 또는 "나쁜"코드를 의미하는 수십 개의 다른 것들과 같이 "코드 냄새"를 발생시키는 것을해서는 안됩니다.


8

이것은 오늘날 내 마음가짐에서 참으로 평가됩니다.

  • 이데올로기에 대한 실용주의
  • (1) 작동하도록 설정 한 다음 (2) 올바르게 설정하십시오-2 단계를 잊어 버린 경우 게임 오버
  • 그것을 풀어 라!
  • 너무 많은 선행 디자인은 시간 낭비입니다.
  • TDDClean Code 로 더욱 간단하고 안정적인 소프트웨어 설계

게임 환경에서 테스트 중심 개발을 수행 할 수 있습니까? 기본적인 논리를 제외하고는 대화 형 프로그램이 이런 종류의 것에 매우 적합하다는 것을 결코 발견하지 못했습니다. 또한, 당신은 명확성 페이지에 링크하고 있습니다;)
drxzcl

2
@Ranieri 그래픽 하드웨어와 사용자 입력을 연결하는 부품 사이에 선을 그리면 테스트가 간단합니다.
Jonathan Fischoff

@Ranier 감사합니다. 링크를 수정했습니다. 대화식 시뮬레이션 또는 클라이언트-서버 게임에 대한 테스트를 먼저 수행하는 것이 까다로울 수 있다는 데 동의합니다. 단위 테스트 외에도 일부 높은 수준의 기능 테스트와 특정 간격으로 실행되는 재생 세션을 원할 수 있습니다. 어쨌든 테스트에 대해 먼저 생각하면 많은 시나리오에서 보상을받을 수 있습니다. gamedev.stackexchange.com/questions/1905/…
jmp97

5

저는 소프트웨어 빠른 프로토 타이핑의 친구입니다. 특히 게임 개발 중. 빠른 학습, 테스트 및 사용에 좋습니다. 하드웨어 프로그래밍에 가깝거나 복잡한 알고리즘이 가장 좋은 방법입니다.

Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
 Testing();
 LotOfFixing();
 PlayingWith(); 
 bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();

내 Rapid Prototype 버전에는 적절한 프로토 타입 크러스트가 있어야합니다.

  • 지시문 및 설정 변수 또는 데이터를 구성하기위한 최대 친숙한 입력 인터페이스.
  • 안정적인 예외 및 오류 처리
  • 디버거 기능과 같은 온라인이지만 필요한 수준에 있습니다.
  • 가능한 모든 방법으로 결과를 표시하거나 캡처 할 수있는 최대의 친숙한 출력 인터페이스.

장점 :

  • 전체 개발 중에 RapidPrototype 크러스트를 향상시킬 수 있습니다.
  • 여러 가지 방법으로 코드를보고 설정할 수 있습니다.
  • 해결해야 할 이론과 문제에만 집중할 수 있습니다.
  • 프로젝트의 새로운 부분을 빠르게 개발하고 나머지 최종 단계로 시도해 볼 수 있습니다.
  • 콘텐츠 작성에 사용하기 위해 새로운 것을 더 빨리 제공하고 나중에 마무리 할 수 ​​있습니다 (특히 샌드 박스 사례에서).
  • 다른 사람에게 원칙이나 솔루션을 쉽게 설명하고 보여줄 수 있습니다. 온라인.
  • 재미 있고 투명한 프로토 타입은 최종 코드를위한 최고의 정보 소스입니다 (다른 사람이 할 수 있음).

당신이 잘한다면 당신은 결국 제품의 실제 디버그 / 학습 버전을 가질 수 있습니다.
우리는 프로젝트에서 그것을 사용하고 있으며 행복합니다.


1
루프에 바인딩 된 시간이나 다른 종류의 리소스를 권장하지만 그 후에 종료 (0)하고 다른 프로토 타입을 사용해보십시오.

@Joe Wreschnig-시간 계획은 AnalysingResults ()에 포함될 수 있지만 잠시 동안 RapidPrototype을 사용하여 나중에 끝내거나 계획에 넣을 수 있다고 생각합니다. 더 나은 다음 영원히 그것에 붙어있어 :). RapidPrototype에서 기능도 시뮬레이션 할 수 있습니다. 여러 가지면에서 유용한 예식입니다.
samboush

1

민첩한 소프트웨어 개발을 살펴보십시오 . 그것은 총알이 아니지만 두 가지를 모두 목표로합니다 (완성 하고 견고한 소프트웨어 디자인).


2
"완성하고 견고한 소프트웨어 디자이너가있다"고 주장하지 않는 개발 방법론은 없다고 생각합니다.

@Joe 저는 많은 "무거운"방법론이 견고한 소프트웨어보다 CYA를 선호하는 경향이 있다고 생각합니다. 실제로, 내 민첩하지 않은 경험의 대부분은 "올바른 것이 아니라 지금 당장이어야하는"경향이있는 반면, "민첩한"은 "지금 당장 필요하지만, 당신이하는 모든 일을하는 것을 목표로합니다" 당신이가는대로 물건을 만들 수 있습니다. "
dash-tom-bang

민첩한 개발은 코드가 견고한 지 여부에 거의 영향을 미치지 않는다고 주장합니다. 애자일의 본질은 모든 개발 시간을 중요한 것들에만 소비하는 것입니다. 코드 품질 (또는 기술 부채 부족)이 배달 성공을 측정하는 경우는 거의 없기 때문에 코드는 여전히 배달시 혼란 스러울 수 있습니다.
Magnus Wolffelt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.