Upload
kay-kim
View
2.015
Download
4
Embed Size (px)
DESCRIPTION
Noel Llopis가 Montreal International Game Summit 2006에서 발표한 내용을 번역. Agile 중에서 XP에 대해서 주로 다룸. 자세한 것은 http://betterways.tistory.com/51 참조. Source: http://www.gamesfromwithin.com/articles/0611/000112.html
Citation preview
실전 애자일 게임 개발(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
질문 ?