실전 애자일 게임 개발 (agile game agile game development from the trenches)
DESCRIPTION
Noel Llopis가 Montreal International Game Summit 2006에서 발표한 내용을 번역. Agile 중에서 XP에 대해서 주로 다룸. 자세한 것은 http://betterways.tistory.com/51 참조. Source: http://www.gamesfromwithin.com/articles/0611/000112.htmlTRANSCRIPT
실전 애자일 게임 개발(Agile Game
Development From The Trenches)
강연 : Noel Llopis([email protected])
Senior Architect, High Moon Studios
번역 : 김기웅 ([email protected]) betterways.wo.to
왜 Agile 인가 ?
Agile Development 란 ?
• [[ 상황에 따라상황에 따라 ] ] 적시에 결정한다적시에 결정한다 ..• 변화에 적응변화에 적응 ((Adapt to change)Adapt to change)
한다한다 ..• 꼭 필요하지 않은 것을 최대한 덜 꼭 필요하지 않은 것을 최대한 덜
개발한다개발한다 . (. (Maximize work not Maximize work not done.)done.)
Agile Development 란 ?
출발
도착
출발
도착
출발
원래 목표
도착
Agile 의 실천 사항들(Practices)
익스트림 프로그래밍
고객에 의한 고객에 의한 테스트테스트
테스트 주도 테스트 주도 개발개발
공동 소유권공동 소유권 코딩코딩표준표준
짝 짝 프로그래밍프로그래밍
리팩토링리팩토링
안정적인 안정적인 속도속도
단순한 단순한 설계설계
계속적인 계속적인 통합통합
작고 빈번한 작고 빈번한 출시출시
계획 계획 게임게임
포괄적인 팀포괄적인 팀
메타포메타포
Agile 의 실천 사항들(Practices)
상호 검토 (Peer Review)
짝프로그래밍
유니트 테스트
자동화된 일일 구축
정적 분석과 프로파일링 도구들
형상 관리 (Source Control)
코딩 표준
코딩 재사용
일일 회의
공동 설계
리팩토링
계속적인 통합
TDD
자동화된 구축
• 이제는이제는 보편화된 사항보편화된 사항 ..• 한 방에 완전 구축한 방에 완전 구축 . . 복잡한 절차 없음복잡한 절차 없음 ..• 다른 기법들을 위한 필수 사항다른 기법들을 위한 필수 사항 ..
자동화된 구축
• 경고경고 ::–빌드는 치명적인 오류가 없고빌드는 치명적인 오류가 없고 ,, 신뢰할 수 신뢰할 수
있는 것이어야 한다있는 것이어야 한다 ..–빠르면 빠를수록 좋다빠르면 빠를수록 좋다 ..–코드와 그래픽 소스코드와 그래픽 소스 (assets)(assets) 에 모두 에 모두
사용한다사용한다 . . 게임 전반에 적용할 것게임 전반에 적용할 것 ..• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–그저 실행하라그저 실행하라 . . 하지 말아야 할 하지 말아야 할
이유 따윈 없다이유 따윈 없다 ..
자동화된 테스트
• 유니트 테스트유니트 테스트 : : 각 함수와 클래스 단위로 각 함수와 클래스 단위로 시행한다시행한다 ..
• 기능 테스트기능 테스트 : : 프로그램 전체나 그 일부에 프로그램 전체나 그 일부에 시행한다시행한다 ..
• 완전 자동화완전 자동화 .. 빌드 서버에서 최소 하루에 빌드 서버에서 최소 하루에 한 번씩은 시행한다한 번씩은 시행한다 . (High Moon. (High Moon
StudiosStudios 는 매 는 매 22 시간마다 시행시간마다 시행 .).)• 동시에 목표로 하는 플랫폼들에서도동시에 목표로 하는 플랫폼들에서도 테스트한다테스트한다 ..
자동화된 테스트
• 경고경고 ::–충분히 신뢰할 수 있는 것이어야 한다충분히 신뢰할 수 있는 것이어야 한다 ..–반드시 자주 시행해야 하며반드시 자주 시행해야 하며 , , 모든모든
사람들은 테스트가 성공적으로 끝나도록 사람들은 테스트가 성공적으로 끝나도록 도울 책임 있다도울 책임 있다 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–게임이 불안정하거나게임이 불안정하거나 , , 테스트가 테스트가
실패할 거라고 예상되는 경우실패할 거라고 예상되는 경우 ..–값싼 인력을 어마어마하게 갖고 값싼 인력을 어마어마하게 갖고 있을 있을
경우경우 . (. ( 아마도아마도 .).)
자동화된 테스트
계속적인 통합
• 작고 매우 빈번한 체크작고 매우 빈번한 체크 -- 인인 .. (( 약 약 3~53~5 분 분 마다마다 .).)
• 코드가 체크코드가 체크 -- 인 되자마자인 되자마자 , , 구축이 구축이 시작된다시작된다 ..
• 구축이 실패할 경우구축이 실패할 경우 , , 즉시 사람들에게 즉시 사람들에게 알린다알린다 ..
• 유니트 테스트는 게임을 안정화시키는데 유니트 테스트는 게임을 안정화시키는데 매우 유용하다매우 유용하다 ..
• CruiseControl.NetCruiseControl.Net 강추강추 !!
계속적인 통합
• 우리만의 규칙우리만의 규칙 : : 어느 누구도 자신의 마지막 어느 누구도 자신의 마지막 체크체크 -- 인이 제대로 구축되는지 확인될 인이 제대로 구축되는지 확인될 때까지 퇴근할 수 없다때까지 퇴근할 수 없다 ..
• 구축을 빨리 하면 할수록 좋다구축을 빨리 하면 할수록 좋다 . . 따라서 따라서 논리적이고 물리적인 의존 관계에 주의를 논리적이고 물리적인 의존 관계에 주의를 기울일 것기울일 것 . (. ( 일반적인 체크일반적인 체크 -- 인에 대한 인에 대한 응답 시간은 보통 응답 시간은 보통 10~2010~20 초 정도초 정도 .).)
• 단단 , , Unreal EngineUnreal Engine 의 경우에는 훨씬의 경우에는 훨씬 오래 걸림오래 걸림 ..
계속적인 통합
• 경고경고 ::–적절한 자동화된 구축과 테스트를 필요로 적절한 자동화된 구축과 테스트를 필요로
한다한다 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–주요 분기점주요 분기점 ((Main branch)Main branch) 이이 불안정할 불안정할
때때 . (. ( 통합하기 전에 고쳐라통합하기 전에 고쳐라 !)!)–서로 다른 여러 분기점들에서 동시 에 서로 다른 여러 분기점들에서 동시 에
작업을 해야 할 때작업을 해야 할 때 ..
한 방에 몰아넣기 (Team Co-Location)
• 경고경고 ::–소란스러워지지 않도록 주의한다소란스러워지지 않도록 주의한다 ..
공적인 영역과 사적인 영역을 분리하고공적인 영역과 사적인 영역을 분리하고 , , 조용한 분위기를 권장할 것조용한 분위기를 권장할 것 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–팀원들이 물리적으로 서로 멀리 떨어져 팀원들이 물리적으로 서로 멀리 떨어져
있을 경우있을 경우 ..
한 방에 몰아넣기 (Team Co-Location)
코드 공동 소유
• ““ 코드 소유권의 실종코드 소유권의 실종 (no code (no code ownership)”ownership)” 이 아닌이 아닌 , , 진정한진정한 코드 공동 코드 공동 소유소유 ..
• 유니트 테스트와 공유하고 있는 배경 유니트 테스트와 공유하고 있는 배경 지식에 달려 있다지식에 달려 있다 ..
코드 공동 소유• 경고경고 ::– ““ 코드 소유권의 실종코드 소유권의 실종 (no code (no code
ownership)”ownership)” 에 주의할 것에 주의할 것 !!–비록 사람들이 모든 비록 사람들이 모든 codebasecodebase 를 를
작성하지 않았더라도작성하지 않았더라도 , , codebasecodebase 를 를 자랑스럽게 여기도록 한다자랑스럽게 여기도록 한다 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–유니트 테스트를 하지 않는 경우유니트 테스트를 하지 않는 경우 ..–완전히 다른 분야의 전문가들로만 완전히 다른 분야의 전문가들로만
구성되어 있을 경우구성되어 있을 경우 ..
안정적인 속도
• 장기적인 생산성을 극대화하도록 한다장기적인 생산성을 극대화하도록 한다 ..• 근무 시간에는 집중적으로 열심히 일하되근무 시간에는 집중적으로 열심히 일하되 , ,
그 뒤에는그 뒤에는 집에서 편히 쉬도록 한다집에서 편히 쉬도록 한다 ..
안정적인 속도
안정적인 속도
시간
업무
강도
계획 구현 Alpha Beta 출시
주기
안정적인 속도• 경고경고 ::–출근 도장만 찍으면 된다는 생각출근 도장만 찍으면 된다는 생각 ((punch punch
card mentality)card mentality) 이 만연하지 않도록 한이 만연하지 않도록 한다다 ..
–팀이 함께 하기 위해서팀이 함께 하기 위해서 , , 더 강도 높은 집중 더 강도 높은 집중 근무 시간근무 시간 (tighter core hours)(tighter core hours) 이 이 필요하다필요하다 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–장기적인 측면에 신경 쓰지 않거나장기적인 측면에 신경 쓰지 않거나 , , 신입 신입
개발자들을 무제한 고용할 수 개발자들을 무제한 고용할 수 있을 경우 있을 경우
짝 프로그래밍
짝 프로그래밍
• 프로그래머 한 명이 하는 것보다 두 배의 프로그래머 한 명이 하는 것보다 두 배의 효과가 날까효과가 날까 ??
• 약간 낮지만약간 낮지만 (( 약 약 1.71.7 배배 ), ), 다른 어마어마한 다른 어마어마한 장점들이 있음장점들이 있음 ::–훨씬 좋은 품질의 코드훨씬 좋은 품질의 코드–지식지식 //철학의 확산철학의 확산–공동체 정신공동체 정신 ((Team spirit)Team spirit)
• 장기적인 측면에서는 커다란 이익장기적인 측면에서는 커다란 이익 ..
짝 프로그래밍
• 그 밖의 장점그 밖의 장점 : : 강도 높은 근무와 높은 강도 높은 근무와 높은 집중력집중력 . . 느슨해지거나느슨해지거나 , , 늘어질 여유가 늘어질 여유가 별로 없다별로 없다 . 8. 8 시간 동안 열심히 일하고 나면 시간 동안 열심히 일하고 나면 기진맥진해진다기진맥진해진다 !!
짝 프로그래밍
• 경고경고 ::–일부 사람들은 좋아하지 않음일부 사람들은 좋아하지 않음 ..–모든 것을 짝 프로그래밍으로 개발할 모든 것을 짝 프로그래밍으로 개발할
필요는 없음필요는 없음 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–숙련된 고참 프로그래머들로 숙련된 고참 프로그래머들로 이루어진 이루어진
작은 팀작은 팀 ..
테스트 주도 개발 (TDD)
체크 - 인체크 - 인
테스트작성
코드작성
리팩토링
TDD 의 장점 : 단순함 , 모듈화
TDD 의 장점 : 안전망
TDD 의 장점 : 문서화
TDD != TDD != 유니트 테스트유니트 테스트TDDTDD != != 테스팅 전략테스팅 전략
TDD == TDD == 개발 기법개발 기법
TDD 를 사용하고는 싶지만…
테스트 주도 개발
• 경고경고 ::–초반에 생산성의 하락이 있음초반에 생산성의 하락이 있음 ..–저질의 저질의 codebasecodebase 를 다루는 것은 를 다루는 것은
어려울 뿐만 아니라 사기를 떨어뜨림어려울 뿐만 아니라 사기를 떨어뜨림 ..–모든 사람이 함께 적용해야만 함모든 사람이 함께 적용해야만 함 ..
• 다음의 경우다음의 경우 , , 사용하지 말 것사용하지 말 것 ::–일회용일회용 (throwaway)(throwaway) 코드를 작성하고 코드를 작성하고
있고있고 , , 다시 사용하지 않을 경우다시 사용하지 않을 경우 ..–초반의 하락을 감당할 수 없을 경우초반의 하락을 감당할 수 없을 경우 ..
추가 정보
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
질문 ?