실전 애자일 게임 개발 (agile game agile game development from the trenches)

39
실실 실실실 실실 실실 (Agile Game Development From The Trenches) 실실 : Noel Llopis([email protected]) Senior Architect, High Moon Studios 실실 : 김김김 ([email protected]) betterways.wo.to

Upload: kay-kim

Post on 24-Jan-2015

2.013 views

Category:

Documents


4 download

DESCRIPTION

Noel Llopis가 Montreal International Game Summit 2006에서 발표한 내용을 번역. Agile 중에서 XP에 대해서 주로 다룸. 자세한 것은 http://betterways.tistory.com/51 참조. Source: http://www.gamesfromwithin.com/articles/0611/000112.html

TRANSCRIPT

Page 1: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

실전 애자일 게임 개발(Agile Game

Development From The Trenches)

강연 : Noel Llopis([email protected])

Senior Architect, High Moon Studios

번역 : 김기웅 ([email protected]) betterways.wo.to

Page 2: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
Page 3: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

왜 Agile 인가 ?

Page 4: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

Agile Development 란 ?

• [[ 상황에 따라상황에 따라 ] ] 적시에 결정한다적시에 결정한다 ..• 변화에 적응변화에 적응 ((Adapt to change)Adapt to change)

한다한다 ..• 꼭 필요하지 않은 것을 최대한 덜 꼭 필요하지 않은 것을 최대한 덜

개발한다개발한다 . (. (Maximize work not Maximize work not done.)done.)

Page 5: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

Agile Development 란 ?

출발

도착

출발

도착

출발

원래 목표

도착

Page 6: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
Page 7: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

Agile 의 실천 사항들(Practices)

익스트림 프로그래밍

고객에 의한 고객에 의한 테스트테스트

테스트 주도 테스트 주도 개발개발

공동 소유권공동 소유권 코딩코딩표준표준

짝 짝 프로그래밍프로그래밍

리팩토링리팩토링

안정적인 안정적인 속도속도

단순한 단순한 설계설계

계속적인 계속적인 통합통합

작고 빈번한 작고 빈번한 출시출시

계획 계획 게임게임

포괄적인 팀포괄적인 팀

메타포메타포

Page 8: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

Agile 의 실천 사항들(Practices)

상호 검토 (Peer Review)

짝프로그래밍

유니트 테스트

자동화된 일일 구축

정적 분석과 프로파일링 도구들

형상 관리 (Source Control)

코딩 표준

코딩 재사용

일일 회의

공동 설계

리팩토링

계속적인 통합

TDD

Page 9: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

자동화된 구축

• 이제는이제는 보편화된 사항보편화된 사항 ..• 한 방에 완전 구축한 방에 완전 구축 . . 복잡한 절차 없음복잡한 절차 없음 ..• 다른 기법들을 위한 필수 사항다른 기법들을 위한 필수 사항 ..

Page 10: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

자동화된 구축

• 경고경고 ::–빌드는 치명적인 오류가 없고빌드는 치명적인 오류가 없고 ,, 신뢰할 수 신뢰할 수

있는 것이어야 한다있는 것이어야 한다 ..–빠르면 빠를수록 좋다빠르면 빠를수록 좋다 ..–코드와 그래픽 소스코드와 그래픽 소스 (assets)(assets) 에 모두 에 모두

사용한다사용한다 . . 게임 전반에 적용할 것게임 전반에 적용할 것 ..• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–그저 실행하라그저 실행하라 . . 하지 말아야 할 하지 말아야 할

이유 따윈 없다이유 따윈 없다 ..

Page 11: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

자동화된 테스트

• 유니트 테스트유니트 테스트 : : 각 함수와 클래스 단위로 각 함수와 클래스 단위로 시행한다시행한다 ..

• 기능 테스트기능 테스트 : : 프로그램 전체나 그 일부에 프로그램 전체나 그 일부에 시행한다시행한다 ..

• 완전 자동화완전 자동화 .. 빌드 서버에서 최소 하루에 빌드 서버에서 최소 하루에 한 번씩은 시행한다한 번씩은 시행한다 . (High Moon. (High Moon

StudiosStudios 는 매 는 매 22 시간마다 시행시간마다 시행 .).)• 동시에 목표로 하는 플랫폼들에서도동시에 목표로 하는 플랫폼들에서도 테스트한다테스트한다 ..

Page 12: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
Page 13: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

자동화된 테스트

Page 14: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

• 경고경고 ::–충분히 신뢰할 수 있는 것이어야 한다충분히 신뢰할 수 있는 것이어야 한다 ..–반드시 자주 시행해야 하며반드시 자주 시행해야 하며 , , 모든모든

사람들은 테스트가 성공적으로 끝나도록 사람들은 테스트가 성공적으로 끝나도록 도울 책임 있다도울 책임 있다 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–게임이 불안정하거나게임이 불안정하거나 , , 테스트가 테스트가

실패할 거라고 예상되는 경우실패할 거라고 예상되는 경우 ..–값싼 인력을 어마어마하게 갖고 값싼 인력을 어마어마하게 갖고 있을 있을

경우경우 . (. ( 아마도아마도 .).)

자동화된 테스트

Page 15: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

계속적인 통합

• 작고 매우 빈번한 체크작고 매우 빈번한 체크 -- 인인 .. (( 약 약 3~53~5 분 분 마다마다 .).)

• 코드가 체크코드가 체크 -- 인 되자마자인 되자마자 , , 구축이 구축이 시작된다시작된다 ..

• 구축이 실패할 경우구축이 실패할 경우 , , 즉시 사람들에게 즉시 사람들에게 알린다알린다 ..

• 유니트 테스트는 게임을 안정화시키는데 유니트 테스트는 게임을 안정화시키는데 매우 유용하다매우 유용하다 ..

• CruiseControl.NetCruiseControl.Net 강추강추 !!

Page 16: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
Page 17: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

계속적인 통합

• 우리만의 규칙우리만의 규칙 : : 어느 누구도 자신의 마지막 어느 누구도 자신의 마지막 체크체크 -- 인이 제대로 구축되는지 확인될 인이 제대로 구축되는지 확인될 때까지 퇴근할 수 없다때까지 퇴근할 수 없다 ..

• 구축을 빨리 하면 할수록 좋다구축을 빨리 하면 할수록 좋다 . . 따라서 따라서 논리적이고 물리적인 의존 관계에 주의를 논리적이고 물리적인 의존 관계에 주의를 기울일 것기울일 것 . (. ( 일반적인 체크일반적인 체크 -- 인에 대한 인에 대한 응답 시간은 보통 응답 시간은 보통 10~2010~20 초 정도초 정도 .).)

• 단단 , , Unreal EngineUnreal Engine 의 경우에는 훨씬의 경우에는 훨씬 오래 걸림오래 걸림 ..

Page 18: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

계속적인 통합

• 경고경고 ::–적절한 자동화된 구축과 테스트를 필요로 적절한 자동화된 구축과 테스트를 필요로

한다한다 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–주요 분기점주요 분기점 ((Main branch)Main branch) 이이 불안정할 불안정할

때때 . (. ( 통합하기 전에 고쳐라통합하기 전에 고쳐라 !)!)–서로 다른 여러 분기점들에서 동시 에 서로 다른 여러 분기점들에서 동시 에

작업을 해야 할 때작업을 해야 할 때 ..

Page 19: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

한 방에 몰아넣기 (Team Co-Location)

Page 20: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

• 경고경고 ::–소란스러워지지 않도록 주의한다소란스러워지지 않도록 주의한다 ..

공적인 영역과 사적인 영역을 분리하고공적인 영역과 사적인 영역을 분리하고 , , 조용한 분위기를 권장할 것조용한 분위기를 권장할 것 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–팀원들이 물리적으로 서로 멀리 떨어져 팀원들이 물리적으로 서로 멀리 떨어져

있을 경우있을 경우 ..

한 방에 몰아넣기 (Team Co-Location)

Page 21: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

코드 공동 소유

• ““ 코드 소유권의 실종코드 소유권의 실종 (no code (no code ownership)”ownership)” 이 아닌이 아닌 , , 진정한진정한 코드 공동 코드 공동 소유소유 ..

• 유니트 테스트와 공유하고 있는 배경 유니트 테스트와 공유하고 있는 배경 지식에 달려 있다지식에 달려 있다 ..

Page 22: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

코드 공동 소유• 경고경고 ::– ““ 코드 소유권의 실종코드 소유권의 실종 (no code (no code

ownership)”ownership)” 에 주의할 것에 주의할 것 !!–비록 사람들이 모든 비록 사람들이 모든 codebasecodebase 를 를

작성하지 않았더라도작성하지 않았더라도 , , codebasecodebase 를 를 자랑스럽게 여기도록 한다자랑스럽게 여기도록 한다 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–유니트 테스트를 하지 않는 경우유니트 테스트를 하지 않는 경우 ..–완전히 다른 분야의 전문가들로만 완전히 다른 분야의 전문가들로만

구성되어 있을 경우구성되어 있을 경우 ..

Page 23: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

안정적인 속도

• 장기적인 생산성을 극대화하도록 한다장기적인 생산성을 극대화하도록 한다 ..• 근무 시간에는 집중적으로 열심히 일하되근무 시간에는 집중적으로 열심히 일하되 , ,

그 뒤에는그 뒤에는 집에서 편히 쉬도록 한다집에서 편히 쉬도록 한다 ..

Page 24: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

안정적인 속도

Page 25: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

안정적인 속도

시간

업무

강도

계획 구현 Alpha Beta 출시

주기

Page 26: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

안정적인 속도• 경고경고 ::–출근 도장만 찍으면 된다는 생각출근 도장만 찍으면 된다는 생각 ((punch punch

card mentality)card mentality) 이 만연하지 않도록 한이 만연하지 않도록 한다다 ..

–팀이 함께 하기 위해서팀이 함께 하기 위해서 , , 더 강도 높은 집중 더 강도 높은 집중 근무 시간근무 시간 (tighter core hours)(tighter core hours) 이 이 필요하다필요하다 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–장기적인 측면에 신경 쓰지 않거나장기적인 측면에 신경 쓰지 않거나 , , 신입 신입

개발자들을 무제한 고용할 수 개발자들을 무제한 고용할 수 있을 경우 있을 경우

Page 27: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

짝 프로그래밍

Page 28: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
Page 29: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

짝 프로그래밍

• 프로그래머 한 명이 하는 것보다 두 배의 프로그래머 한 명이 하는 것보다 두 배의 효과가 날까효과가 날까 ??

• 약간 낮지만약간 낮지만 (( 약 약 1.71.7 배배 ), ), 다른 어마어마한 다른 어마어마한 장점들이 있음장점들이 있음 ::–훨씬 좋은 품질의 코드훨씬 좋은 품질의 코드–지식지식 //철학의 확산철학의 확산–공동체 정신공동체 정신 ((Team spirit)Team spirit)

• 장기적인 측면에서는 커다란 이익장기적인 측면에서는 커다란 이익 ..

Page 30: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

짝 프로그래밍

• 그 밖의 장점그 밖의 장점 : : 강도 높은 근무와 높은 강도 높은 근무와 높은 집중력집중력 . . 느슨해지거나느슨해지거나 , , 늘어질 여유가 늘어질 여유가 별로 없다별로 없다 . 8. 8 시간 동안 열심히 일하고 나면 시간 동안 열심히 일하고 나면 기진맥진해진다기진맥진해진다 !!

Page 31: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

짝 프로그래밍

• 경고경고 ::–일부 사람들은 좋아하지 않음일부 사람들은 좋아하지 않음 ..–모든 것을 짝 프로그래밍으로 개발할 모든 것을 짝 프로그래밍으로 개발할

필요는 없음필요는 없음 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–숙련된 고참 프로그래머들로 숙련된 고참 프로그래머들로 이루어진 이루어진

작은 팀작은 팀 ..

Page 32: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

테스트 주도 개발 (TDD)

체크 - 인체크 - 인

테스트작성

코드작성

리팩토링

Page 33: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

TDD 의 장점 : 단순함 , 모듈화

Page 34: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

TDD 의 장점 : 안전망

Page 35: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

TDD 의 장점 : 문서화

Page 36: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

TDD != TDD != 유니트 테스트유니트 테스트TDDTDD != != 테스팅 전략테스팅 전략

TDD == TDD == 개발 기법개발 기법

Page 37: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

TDD 를 사용하고는 싶지만…

Page 38: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

테스트 주도 개발

• 경고경고 ::–초반에 생산성의 하락이 있음초반에 생산성의 하락이 있음 ..–저질의 저질의 codebasecodebase 를 다루는 것은 를 다루는 것은

어려울 뿐만 아니라 사기를 떨어뜨림어려울 뿐만 아니라 사기를 떨어뜨림 ..–모든 사람이 함께 적용해야만 함모든 사람이 함께 적용해야만 함 ..

• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–일회용일회용 (throwaway)(throwaway) 코드를 작성하고 코드를 작성하고

있고있고 , , 다시 사용하지 않을 경우다시 사용하지 않을 경우 ..–초반의 하락을 감당할 수 없을 경우초반의 하락을 감당할 수 없을 경우 ..

Page 39: 실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)

추가 정보

Games from WithinGames from Within http://www.gamesfromwithin.com http://www.gamesfromwithin.com

Agile Game DevelopmentAgile Game Development http://www.agilegamedevelopment.com http://www.agilegamedevelopment.com

질문 ?