Recommended
PDF
코드 생성을 사용해 개발 속도 높이기 NDC2011
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PDF
송창규, unity build로 빌드타임 반토막내기, NDC2010
PDF
PDF
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
PPTX
PPTX
Next-generation MMORPG service architecture
PDF
임태현, MMO 서버 개발 포스트 모템, NDC2012
PDF
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
PDF
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
PDF
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
PDF
PDF
PPTX
Windows system - memory개념잡기
PDF
PDF
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
PDF
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
PDF
NDC2011 - 절차적 지형과 트렌드의 추적자들
PDF
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
PPTX
PPTX
PPTX
PDF
MMOG Server-Side 충돌 및 이동처리 설계와 구현
PDF
Windows Registered I/O (RIO) vs IOCP
PDF
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
PDF
PPTX
Deep learning as_WaveExtractor
More Related Content
PDF
코드 생성을 사용해 개발 속도 높이기 NDC2011
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PDF
송창규, unity build로 빌드타임 반토막내기, NDC2010
PDF
PDF
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
PPTX
PPTX
Next-generation MMORPG service architecture
PDF
임태현, MMO 서버 개발 포스트 모템, NDC2012
What's hot
PDF
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
PDF
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
PDF
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
PDF
PDF
PPTX
Windows system - memory개념잡기
PDF
PDF
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
PDF
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
PDF
NDC2011 - 절차적 지형과 트렌드의 추적자들
PDF
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
PPTX
PPTX
PPTX
PDF
MMOG Server-Side 충돌 및 이동처리 설계와 구현
PDF
Windows Registered I/O (RIO) vs IOCP
PDF
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
Viewers also liked
PDF
PPTX
Deep learning as_WaveExtractor
PPTX
PDF
Custom fabric shader for unreal engine 4
PDF
PDF
Profiling - 실시간 대화식 프로파일러
PDF
PDF
Luigi presentation NYC Data Science
PDF
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
PDF
PDF
PDF
PDF
Online game server on Akka.NET (NDC2016)
PDF
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
PDF
Re:Zero부터 시작하지 않는 오픈소스 개발
PDF
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
PDF
Behavior Tree in Unreal engine 4
PDF
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]
PDF
Approximate nearest neighbor methods and vector models – NYC ML meetup
PDF
Similar to 자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
PDF
KGC2010 - 낡은 코드에 단위테스트 넣기
PPTX
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
PDF
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
PDF
PPTX
NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은
PPTX
PPTX
Processing 기초 이해하기_20160713
PPTX
PPTX
PDF
PDF
PDF
PDF
PDF
PPTX
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램
PDF
PPTX
PDF
PPTX
PDF
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012 1. 자동화된 소스 분석, 처리, 검증을 통한
소스의 불필요한 #if - #endif 제거하기
김이선
veblush@[nexon|gmail]
2. 버블파이터
BNB 카트라이더 프로토타입 에버플래닛 던전엔파이터 GTR
프로그래머 리드 프로그래머 리드 프로그래머 리드 프로그래머 테크니컬 디렉터 프로그래머
게임 프로그래밍 11년차
3. 4. 5. 6. 7. 8. Flags.h
1단계 // 김철수: 퀘스트 시스템 구현
플래그 정의 //#define _QUEST_SYSTEM
9. *
#ifdef _QUEST_SYSTEM
ui.questWnd.setButton(…);
2단계 ui.questWnd.setEvent(…);
기능 구현 #else
ui.questWnd.setDisable();
#endif
10. Flags.h
3단계 // 김철수: 퀘스트 시스템 구현
기능 플래그 켬 #define _QUEST_SYSTEM
11. 작업 중인 코드가
다른 작업자, 라이브 코드에
영향을 주지 않음
(장기간 작업, 빠른 롤백, 이벤트)
12. 13. 14. 15. 코드가 점차 읽기 어렵고 수정하기 어려워짐
(#ifdef - #endif 블록이 코드에 가득 차기 시작함)
16. 코드가 점차 읽기 어렵고 수정하기 어려워짐
(#ifdef - #endif 블록이 코드에 가득 차기 시작함)
17. 18. 20. 21. 22. #ifdef _EVENT_2006
ui.notice.setText(“월드컵 이벤트!”);
문제 1
ui.notice.setVisible(1);
죽은 코드
ui.notice.setEventHandler(…);
#endif
23. #ifdef _NEW_UI_COMPONENT
ui.notice.setText(“…”);
ui.notice.setVisible(1);
문제 2
#else
중복 코드
set(UI_NOTICE, TEXT, “…”);
set(UI_NOTICE, VISIBLE, 1);
#endif
24. 25. 26. 27. 28. #ifdef _EVENT_2006
ui.notice.setText(“월드컵 이벤트!”);
플래그 꺼서 제거 ui.notice.setVisible(1);
ui.notice.setEventHandler(…);
#endif
29. 30. #define _NEW_QUEST
#ifdef _NEW_QUEST
# define _NEW_QUEST_FIX
#endif
플래그 병합 #ifdef _NEW_QUEST
제거 ui.event.setText(…);
# ifdef _NEW_QUEST_FIX
ui.event.setPos(…);
# endif
#endif
31. 32. 33. 제거할 소스에서
테스트
플래그 선택 플래그 제거
34. 수천개를 수작업으로?
Image: http://www.flickr.com/photos/15271532@N00/1172675049
35. 36. 자동화
Image: http://www.enggtechsolutions.com/?page_id=5
37. 제거할 소스에서
테스트
플래그 선택 플래그 제거
선택 제거 검증
자동화 자동화 자동화
38. 39. 40. 41. #define F | #undef F
#ifdef F | #ifndef F | #if defined(F)
42. 43. 44. 45. 모든 커밋의
Rev#, 날짜, 작성자, 로그
변경한 파일에 포함된 플래그 목록
46. 사용: 날짜: 주석:
한국, 중국 2008-06-21 김철수, 퀘스트!
_QUEST_SYSTEM
플래그 정보
SVN: 파일:
#29110, ironwater Interface/QuestWindow.h
Interface/QuestWindow.cpp
“[추가] 퀘스트 시스템 System/Quest.h
1차 작업” System/Quest.cpp
47. 48. 49. 50. 51. DB: 큰 그림 분석
시간별 증감 추이
국가별 사용 현황
작업자별 플래그 추가
파일별 플래그 추이
플래그 영향력
52. DB: 오류 분석
정의만 되고 사용되지 않음 (버려짐?)
정의는 없고 사용만 있음 (오타?)
정의가 여러 곳에 있음 (응?)
정의가 여러 곳에 있으면서 값이 다름 (으악!)
53. 54. 모든 작성자 및
국가에서 상급자에게 피드백을
켜고 끈 삭제 리뷰 받아 진행
플래그 수집 요청
55. 56. 57. 58. 플래그 켜서
제거 ui.quest.appendMsg(“…”);
questDlg.show();
59. #ifdef _EVENT_2008 // 2008 설 이벤트
ui.event.setText(…);
ui.event.show();
플래그 꺼서
#else
제거
ui.event.setVisible(0);
#endif
60. 플래그 꺼서
제거
ui.event.setVisible(0);
61. #define _NEW_QUEST
#ifdef _NEW_QUEST
# define _NEW_QUEST_FIX
#endif
플래그 병합 #ifdef _NEW_QUEST
제거 ui.event.setText(…);
# ifdef _NEW_QUEST_FIX
ui.event.setPos(…);
# endif
#endif
62. 63. 64. 65. 다만 부분 평가는 해주지 않음
#if defined(A) && defined(B)
A=켬|끔 B=그냥둠
↓
#if 1|0 && defined(B)
66. 병합 제거는 따로 구현
#ifdef A #ifdef A
# ifdef A_fix
… …
# endif
#endif #endif
67. 작업 흐름
부분 평가
원시소스 unifdef 결과소스
병합 제거
제거 플래그 리스트
68. 69. 원시소스 처리 결과소스
원시EXE = 결과EXE
70. 71. 72. # name
#1 .drectve
#2 .debug$S
#3 .text
비교할 때
OBJ #4 .debug$S debug 섹션은
#5 .rdata 제외!
#6 .text
#7 .debug$S
#8 .debug$T
73. 원시소스 처리 결과소스
원시OBJ = 결과OBJ
74. 75. 76. 플래그 켬/끔
오류
다른 함수
원인 파악 툴 버그
찾기
소스 문제
77. 78. __LINE__
ASSERT 매크로 등에 있음!
검증 단계의 unifdef 는 행을 유지하도록.
__TIME__
작업 전에만 지웠다가 다시 살림.
79. 80. 제거 플래그 작업자의
처리 / 검증 / 커밋
후보 선택 리뷰
자동화 자동화
81. 82. 84. 85. 86. 작성한 툴
분석 Track 소스 & SVN 에서 정보 수집
Uniform Unifdef + 추가 소스 처리
처리
CompareBin OBJ 파일 동일 검사
검증 BatchRun 플래그 제거 및 검증을 일괄 실행
87. 작성한 툴
분석 Track 소스 & SVN 에서 정보 수집
Uniform 총 Unifdef + 추가 소스 처리
LOC:
처리
CompareBin
1500 동일 검사
OBJ 파일
검증 BatchRun 플래그 제거 및 검증을 일괄 실행
90. 91. 92. 93. 94. 분석은 처리 뿐 아니라 대상을 바라보는
다른 관점을 제시하는 데에도 도움을 줌!
95. 96. 97. 98.