c++ 코드 품질 관리 비법

187
NHN NEXT 이선협 C++ 관리 비법 코드 품질

Upload: sunhyoup-lee

Post on 14-Nov-2014

14.620 views

Category:

Technology


4 download

DESCRIPTION

NHN NEXT 휴먼 디자인 프로젝트 for 게임 과목의 스터디 자료입니다.

TRANSCRIPT

Page 1: C++ 코드 품질 관리 비법

NHN NEXT 이선협

C++관리����������� ������������������  

����������� ������������������  비법코드����������� ������������������  품질

Page 2: C++ 코드 품질 관리 비법

지피지기면 백전백승이라는데…!!

도대체 코드 품질이 뭐야?

Page 3: C++ 코드 품질 관리 비법

‘코드 품질’에 대해 따로 정의된 문서는 없다

Page 4: C++ 코드 품질 관리 비법

그래서 찾아봤습니다

http://stackoverflow.com/questions/405243/how-do-we-define-code-quality코드 품질에 대한 어느 외국인의 생각

Page 5: C++ 코드 품질 관리 비법

어려운 영어보다는 쉬운 그림으로 봅시다

Page 6: C++ 코드 품질 관리 비법

Bad code.. 나쁜 코드가 있습니다

Page 7: C++ 코드 품질 관리 비법

Good code!

Bad code..

코드를 Perfect하게 만듭시다

Page 8: C++ 코드 품질 관리 비법

Good code!

Bad code..

How?

Page 9: C++ 코드 품질 관리 비법

Good code!

Legible TestableFlexible CompliantEconomic

Bad code..

5가지 원칙을 적용

Page 10: C++ 코드 품질 관리 비법

How?Good code!

Legible TestableFlexible CompliantEconomic

Bad code..

5가지 원칙을 적용

Page 11: C++ 코드 품질 관리 비법

Refactoring!Good code!

Legible TestableFlexible CompliantEconomic

Bad code..

5가지 원칙을 적용

Page 12: C++ 코드 품질 관리 비법

5가지 원칙에 따라 리팩토링을 하면 좋은 코드가 됩니다.

Good code!

Legible TestableFlexible CompliantEconomic

Bad code..

5가지 원칙을 적용

Refactoring!

Page 13: C++ 코드 품질 관리 비법

뭔소리야?

Page 14: C++ 코드 품질 관리 비법

Step By Step

천리길도 한걸음 부터

Page 15: C++ 코드 품질 관리 비법

- 모든 예제는 다음 환경에서 제작됬습니다 -!!

Visual Studio 2013!Windows 8

Page 16: C++ 코드 품질 관리 비법

!!

보기 좋은 떡이 먹기도 좋다고!!

보기 좋은 코드를 만듭시다

Legible

Page 17: C++ 코드 품질 관리 비법
Page 18: C++ 코드 품질 관리 비법

Many

Page 19: C++ 코드 품질 관리 비법

void func( int value ) { /* … */}

void func( int value ) { /* … */}

void func(int Value) { /* … */}

void func(int value){ /* … */}

void Func(int Value){ /* … */}

void func( int iValue ) { /* … */}

void Func( int iValue ) { /* … */}

void FUNC( int VALUE ) { /* … */}

Page 20: C++ 코드 품질 관리 비법

class CPeopleState { public: CPeopleState(); ~CPeopleState(); ! /* … */}

class PeopleState { public: PeopleState(); ~PeopleState(); ! /* … */}

class peopleState { public: peopleState(); ~peopleState(); ! /* … */}

class people_state { public: people_state(); ~people_state(); ! /* … */}

Page 21: C++ 코드 품질 관리 비법

이 세상에는 정말 많은 코딩 스타일이 있습니다그 수많은 코딩 스타일에 적응하기엔 좀…

Page 22: C++ 코드 품질 관리 비법

다들 표준 표준 하는 이유가 있습니다.

Page 23: C++ 코드 품질 관리 비법

Good code! Bad code..

코딩 컨벤션 정하기

정했으면 각자 코딩

코 딩 완 료 !

다같이 코드 리뷰…

리팩토링

Page 24: C++ 코드 품질 관리 비법

Good code! Bad code..

코딩 컨벤션 정하기

정했으면 각자 코딩

코 딩 완 료 !

다같이 코드 리뷰…

리팩토링

좋은 방법 입니다. But…

Page 25: C++ 코드 품질 관리 비법

Good code! Bad code..

코딩 컨벤션 정하기

정했으면 각자 코딩

코 딩 완 료 !

다같이 코드 리뷰…

리팩토링

좋은 방법 입니다. But…

Page 26: C++ 코드 품질 관리 비법

Good code! Bad code..

코딩 컨벤션 정하기

정했으면 각자 코딩

코 딩 완 료 !

급한 상황에 무슨 코드 리뷰!!

리팩토링

좋은 방법 입니다. But…

Page 27: C++ 코드 품질 관리 비법

Good code! Bad code..

코딩 컨벤션 정하기

정했으면 각자 코딩

코 딩 완 료 !

급한 상황에 무슨 코드 리뷰!!좋은 방법 입니다. But…

Page 28: C++ 코드 품질 관리 비법

망함

Page 29: C++ 코드 품질 관리 비법

이럴땐 툴을 사용해 봅시다.

Page 30: C++ 코드 품질 관리 비법

CppCheckGoogle CppLint

잠재적 오류 검출코딩 스타일 체크

Page 31: C++ 코드 품질 관리 비법

CppCheckGoogle CppLint

잠재적 오류 검출코딩

Page 32: C++ 코드 품질 관리 비법

CppCheck• 공짜 • 위험한 코드를 지적해주는 도구 • 여러 IDE 지원!• Hudson, Jenkins와 같은 CI 도구에도 사용가능 • IDE와 별도로 진단 도구 지원 • http://cppcheck.sourceforge.net/

Page 33: C++ 코드 품질 관리 비법

http://cppcheck.sourceforge.net/

설치 파일

CI 도구 연동 가능

Visual Studio 연동 가능

Page 34: C++ 코드 품질 관리 비법

디렉토리 단위로 검사 가능

Page 35: C++ 코드 품질 관리 비법

Visual Studio 2013과 연동한 모습

Page 36: C++ 코드 품질 관리 비법

위험한 코드를 작성할 경우 아래과 같이 알려줍니다

Page 37: C++ 코드 품질 관리 비법

위험한 코드를 제거했을 경우 사라집니다

Page 38: C++ 코드 품질 관리 비법

다양한 경우를 체크해줍니다

Page 39: C++ 코드 품질 관리 비법

http://cppcheck.sourceforge.net/manual.pdf

자세한 것은

Page 40: C++ 코드 품질 관리 비법

CppCheckGoogle CppLint

잠재적코딩 스타일 체크

Page 41: C++ 코드 품질 관리 비법

Google CppLint• 공짜 • 구글의 C++ 코딩 컨벤션인지 검사하는 도구 • 파이썬으로 제작됨 • 구글 컨벤션을 사용할 것이 아니라면 사용 X • http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml • http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py

Page 42: C++ 코드 품질 관리 비법

python으로 제작됨

Page 43: C++ 코드 품질 관리 비법

간단한 코드가 있습니다

* 이 항목은 Mac OS 환경에서 작업했습니다

Page 44: C++ 코드 품질 관리 비법

스크립트 실행

* 이 항목은 Mac OS 환경에서 작업했습니다

Page 45: C++ 코드 품질 관리 비법

스크립트 실행

구글 C++ 컨벤션에 맞지 않는 항목을 전부 출력

* 이 항목은 Mac OS 환경에서 작업했습니다

Page 46: C++ 코드 품질 관리 비법

컨벤션에 맞춰 수정된 코드

* 이 항목은 Mac OS 환경에서 작업했습니다

Page 47: C++ 코드 품질 관리 비법

!!

어떤 상황이 오더라도 수정 가능한!!

유연성 있는 코드를 만듭시다

Flexible

Page 48: C++ 코드 품질 관리 비법

양 한 마리를 그려줘!고갱님

음 금방 만들겠군

Page 49: C++ 코드 품질 관리 비법

고객님 원하시는 양 나왔습니다~

void sheep() {!! printf(“양”); }

Page 50: C++ 코드 품질 관리 비법

생각해보니 돼지도 필요해!

고갱님뭐 그 정도 쯤이야

Page 51: C++ 코드 품질 관리 비법

고객님 원하시는 돼지 나왔습니다~

void pig() {!! printf(“돼지”); }

void sheep() {!! printf(“양”); }

Page 52: C++ 코드 품질 관리 비법

생각해보니 소, 닭, 말, …, 개도 필요해!

고갱님;;;;;;;;;;

Page 53: C++ 코드 품질 관리 비법

. . .

도대체 언제 만들어???접고 튈까..

Page 54: C++ 코드 품질 관리 비법

이대로는 안된다!대책을 세우자

Page 55: C++ 코드 품질 관리 비법

원하는 걸 전부 하드코딩 할 수는 없다요구사항은 계속 바뀌고 늘어나기 때문

Page 56: C++ 코드 품질 관리 비법

Solution

Page 57: C++ 코드 품질 관리 비법

유연한(Flexible)!코드를 제작하자

Page 58: C++ 코드 품질 관리 비법

고객님 원하시는 건 이 상자에 있습니다. 알아서 상상해서 가져가세요~

void box(char* animal) {!! printf(“%s”, animal); }

Page 59: C++ 코드 품질 관리 비법

내가 원하던게 이거야!

고갱님

Page 60: C++ 코드 품질 관리 비법

결국 유연성있는 코드는 시간단축의 지름길!

Page 61: C++ 코드 품질 관리 비법

But.. 유연성 있는 코드는 초기에 제작할 때 오래걸림

(여러 상황 분석 및 필요한 코드 패턴 조사 등… 시간이 필요한 요소가 존재하기 때문)

Page 62: C++ 코드 품질 관리 비법

But.. 유연성 있는 코드는 초기에 제작할 때 오래걸림

Then자주 바뀔 가능성이 있는 코드만 유연하게 제작

(여러 상황 분석 및 필요한 코드 패턴 조사 등… 시간이 필요한 요소가 존재하기 때문)

Page 63: C++ 코드 품질 관리 비법

But.. 유연성 있는 코드는 초기에 제작할 때 오래걸림

Then자주 바뀔 가능성이 있는 코드만 유연하게 제작

(여러 상황 분석 및 필요한 코드 패턴 조사 등… 시간이 필요한 요소가 존재하기 때문)

결국 자주 바뀐다는 것은 그만큼 시간을 소비하는 것이기 때문에!자주 바뀔 가능성 있는 부분은 유연하게 제작하는게 시간을 더 절약 할 수있다.

Page 64: C++ 코드 품질 관리 비법

미리 간단한 설계를 하는 것이 좋습니다

Page 65: C++ 코드 품질 관리 비법

손으로 그려도 좋고

Page 66: C++ 코드 품질 관리 비법

UML 도구를 사용해도 좋습니다

Page 67: C++ 코드 품질 관리 비법

설계하기

Page 68: C++ 코드 품질 관리 비법

설계하기

코 딩

Page 69: C++ 코드 품질 관리 비법

설계하기

코 딩

??????

Page 70: C++ 코드 품질 관리 비법

제대로 가고있나..?

Page 71: C++ 코드 품질 관리 비법

이럴땐 툴을 사용해 봅시다.

Page 72: C++ 코드 품질 관리 비법

Visual Studio UML Viewer• 작성된 코드를 UML로 볼 수 있음 • 클래스가 많으면 로딩이 좀 걸린다

Page 73: C++ 코드 품질 관리 비법
Page 74: C++ 코드 품질 관리 비법
Page 75: C++ 코드 품질 관리 비법
Page 76: C++ 코드 품질 관리 비법

*쉽게* 클래스 다이어그램을 볼 수 있습니다.

Page 77: C++ 코드 품질 관리 비법

설계하기

코 딩

Good code! Bad code..

확인하기

리팩토링

Page 78: C++ 코드 품질 관리 비법

설계하기

코 딩

Good code! Bad code..

확인하기

리팩토링

프로젝트 진행하면서 생각날때마다 겸사겸사 확인해봅시다

Page 79: C++ 코드 품질 관리 비법

!!

검증하는데 시간 많이 투자 하지 말고!!

테스트가 쉬운 코드를 만듭시다

Testable

Page 80: C++ 코드 품질 관리 비법

TDD(Test-Driven Development)

Page 81: C++ 코드 품질 관리 비법

TDD의 장점

Page 82: C++ 코드 품질 관리 비법

TDD의 장점

하도 유명해서 검색만 해도 많이 나옴(해보세요)

Page 83: C++ 코드 품질 관리 비법

단,TDD가 부정적인 효과를 불러오는 프로젝트는!

!

과감하게 생략하기!

EX) 게임 컨텐츠에서 매직 넘버 찾기?

Page 84: C++ 코드 품질 관리 비법

코 딩

Good code! Bad code..

테스트

리팩토링

Page 85: C++ 코드 품질 관리 비법

코 딩

Good code! Bad code..

테스트

리팩토링

이 과정이 오래걸리면 안됨!

Page 86: C++ 코드 품질 관리 비법

어떻게 테스트를 하지? 어떻게 테스트를 단축하지?

Page 87: C++ 코드 품질 관리 비법

이럴땐 툴을 사용해 봅시다.

Page 88: C++ 코드 품질 관리 비법

Visual Studio CppUnit• 테스트 자동화 가능 • 테스트 프로젝트로 분리 가능 • Visual Studio Professional 이상 필요

Page 89: C++ 코드 품질 관리 비법

Visual Studio에서 CppUnit을 사용 하는 방법은 다음 링크 참조

http://www.slideshare.net/sunhyouplee/c-tdd

Page 90: C++ 코드 품질 관리 비법

!!

쓸데없는 지출은 패가망신하기 좋은 지름길 입니다!!

메모리, CPU 사용량을 절약하며 코딩합시다

Economic

Page 91: C++ 코드 품질 관리 비법

Case 1

Page 92: C++ 코드 품질 관리 비법

Memory Leak메모리를 사용한 후 반환하지 않는 것

Page 93: C++ 코드 품질 관리 비법

프로세스 시작

메모리 누수 발생

성능 저하 / 버그

Page 94: C++ 코드 품질 관리 비법

프로세스 시작

메모리 누수 발생

성능 저하 / 버그

특히나 C++은 메모리 사용에 민감!

Page 95: C++ 코드 품질 관리 비법

http://msdn.microsoft.com/ko-kr/library/x98tx3cf.aspx

MSDN 짱짱맨

메모리 누수 확인 및 중단점 설정

C++의����������� ������������������  메모리����������� ������������������  관리����������� ������������������  방법����������� ������������������  1

Page 96: C++ 코드 품질 관리 비법

혹은 스마트 포인터를 사용해도 됩니다

std::shared_ptr

C++의����������� ������������������  메모리����������� ������������������  관리����������� ������������������  방법����������� ������������������  2

Page 97: C++ 코드 품질 관리 비법

레퍼런스 카운트 방식을 직접 코딩해도 상관 X

C++의����������� ������������������  메모리����������� ������������������  관리����������� ������������������  방법����������� ������������������  3

특수한 경우를 제외하면그냥 스마트 포인터 쓰는게 편하다

cocos2d-x와 objective-c가 그렇게 관리합니다

Page 98: C++ 코드 품질 관리 비법

C++의����������� ������������������  메모리����������� ������������������  관리����������� ������������������  방법����������� ������������������  4

비싼 툴을 사용하자!

써본적이 없어서 사실 잘 몰라요..

Page 99: C++ 코드 품질 관리 비법

Case 2

Page 100: C++ 코드 품질 관리 비법

프로세스 시작

CPU 사용량 증가

성능 저하 / 유저 이탈

Page 101: C++ 코드 품질 관리 비법

중간에 걸리는 성능 저하의 원인이 뭘까?

Page 102: C++ 코드 품질 관리 비법

이럴땐 툴을 사용해 봅시다.

Page 103: C++ 코드 품질 관리 비법

Visual Studio Profiler• 성능 측정 도구 • 메모리 사용량은 측정 불가능!• Visual Studio Professional 이상 필요 • 대체로 프로파일러 도구는 비싸다!• 드림스파크 덕분에 사용가능 ㅜㅜ

Page 104: C++ 코드 품질 관리 비법

프로파일링 해볼 프로그램부끄러운 고등학교 습작…

Page 105: C++ 코드 품질 관리 비법

메인 메뉴 시놉시스

상점

스테이지 1

스테이지 2게임오버 후 메인

이렇게 진행 해보겠습니다

게임오버 스샷을 못찍음;;

Page 106: C++ 코드 품질 관리 비법

상단 메뉴 - 분석 - 성능 분석 시작(한국어 기준)

분석방법

Page 107: C++ 코드 품질 관리 비법

분석방법상단 메뉴 - 분석 - 성능 분석 시작

(한국어 기준)

다양한 분석 가능

Page 108: C++ 코드 품질 관리 비법

분석결과

Page 109: C++ 코드 품질 관리 비법

분석결과

메인 메뉴 / 시놉시스

Page 110: C++ 코드 품질 관리 비법

분석결과

메인 메뉴 / 시놉시스 스테이지 1

Page 111: C++ 코드 품질 관리 비법

분석결과

메인 메뉴 / 시놉시스 스테이지 1 상점

Page 112: C++ 코드 품질 관리 비법

분석결과

메인 메뉴 / 시놉시스 스테이지 1 상점스테이지 2

Page 113: C++ 코드 품질 관리 비법

분석결과

메인 메뉴 / 시놉시스 스테이지 1 상점스테이지 2

게임오버 / 메인메뉴

Page 114: C++ 코드 품질 관리 비법

분석결과

메인 메뉴 / 시놉시스 스테이지 1 상점스테이지 2

게임오버 / 메인메뉴

CPU 사용량이 많은 부분

Page 115: C++ 코드 품질 관리 비법

분석결과

Page 116: C++ 코드 품질 관리 비법

분석결과

해당 영역만 필터링 가능

Page 117: C++ 코드 품질 관리 비법

분석결과

해당 영역만 필터링 가능

Page 118: C++ 코드 품질 관리 비법

분석결과

해당 영역만 필터링 가능

매번 호출되는 함수를 제외하고파티클 관련된 부분이 상당히 많이 호출됨

Page 119: C++ 코드 품질 관리 비법

분석결과

해당 영역만 필터링 가능

매번 호출되는 함수를 제외하고파티클 관련된 부분이 상당히 많이 호출됨

실제로 상점에서 산 무기가 파티클을 상당히 많이 사용함그리고 렌더타겟 텍스쳐를 잘못사용하여 메모리도 많이 사용함!

Page 120: C++ 코드 품질 관리 비법

분석결과

해당 영역만 필터링 가능

매번 호출되는 함수를 제외하고파티클 관련된 부분이 상당히 많이 호출됨

실제로 상점에서 산 무기가 파티클을 상당히 많이 사용함

이 불꽃 부분입니다.!!

실제로 개선하는 것은 생략

그리고 렌더타겟 텍스쳐를 잘못사용하여 메모리도 많이 사용함!

Page 121: C++ 코드 품질 관리 비법

!!

아무리 보기 좋고 잘만든 코드여도!!

만들고자 했던 코드가 아니면 무용지물!

Compliant

Page 122: C++ 코드 품질 관리 비법

아니 만들고자 했던 코드말고 다른 코드 만드는 개발자도 있나?!ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

Page 123: C++ 코드 품질 관리 비법

실제로 일어날 수 있는 가능한 얘기

Page 124: C++ 코드 품질 관리 비법

여기 두 개발자가 있습니다

Page 125: C++ 코드 품질 관리 비법

음 앞으로 만들어야하는 클래스에A기능을 사용한 B기능이 필요하겠군

Page 126: C++ 코드 품질 관리 비법

B기능을 가지고있는 클래스를 작성해주세요

Page 127: C++ 코드 품질 관리 비법

B기능을 어떻게 만들지? 음.. C기능을 사용해서 만들어야겠다.

B기능을 가지고있는 클래스를 작성해주세요

Page 128: C++ 코드 품질 관리 비법

B기능을 가진 클래스를 만들었습니다

며칠 뒤

Page 129: C++ 코드 품질 관리 비법

제가 원한건 이게 아닌데요??? 네???

Page 130: C++ 코드 품질 관리 비법

제가 원한건 이게 아닌데요??? 네???

?

Page 131: C++ 코드 품질 관리 비법

왜 이런걸까요?

Page 132: C++ 코드 품질 관리 비법

커뮤니케이션의 부재!

왜 이런걸까요?

Page 133: C++ 코드 품질 관리 비법

커뮤니케이션의 부재! 팀내 의견 불일치!

왜 이런걸까요?

Page 134: C++ 코드 품질 관리 비법

커뮤니케이션의 부재! 팀내 의견 불일치! 의사전달 부족!

왜 이런걸까요?

Page 135: C++ 코드 품질 관리 비법

커뮤니케이션의 부재! 팀내 의견 불일치! 의사전달 부족! 기획서 버전 불일치!

왜 이런걸까요?

Page 136: C++ 코드 품질 관리 비법

커뮤니케이션의 부재! 팀내 의견 불일치! 의사전달 부족! 기획서 버전 불일치! 기획 의도 불이해

왜 이런걸까요?

Page 137: C++ 코드 품질 관리 비법

잘못된 코드

커뮤니케이션의 부재! 팀내 의견 불일치! 의사전달 부족! 기획서 버전 불일치! 기획 의도 불이해

왜 이런걸까요?

Page 138: C++ 코드 품질 관리 비법

어떻게 해결해야 할까요?

Page 139: C++ 코드 품질 관리 비법

커뮤니케이션의 활성!

어떻게 해결해야 할까요?

Page 140: C++ 코드 품질 관리 비법

어떻게 해결해야 할까요?

커뮤니케이션의 활성! 팀내 의견 통일!

Page 141: C++ 코드 품질 관리 비법

어떻게 해결해야 할까요?

커뮤니케이션의 활성! 팀내 의견 통일! 의사전달 확실하게!

Page 142: C++ 코드 품질 관리 비법

어떻게 해결해야 할까요?

커뮤니케이션의 활성! 팀내 의견 통일! 의사전달 확실하게! 기획서 버전 관리 / 일치!

Page 143: C++ 코드 품질 관리 비법

커뮤니케이션의 활성! 팀내 의견 통일! 의사전달 확실하게! 기획서 버전 관리 / 일치! 기획 의도 이해

어떻게 해결해야 할까요?

Page 144: C++ 코드 품질 관리 비법

커뮤니케이션의 활성! 팀내 의견 통일! 의사전달 확실하게! 기획서 버전 관리 / 일치! 기획 의도 이해

어떻게 해결해야 할까요?

정상적인 코드

Page 145: C++ 코드 품질 관리 비법

커뮤니케이션의 활성! 팀내 의견 통일! 의사전달 확실하게! 기획서 버전 관리 / 일치! 기획 의도 이해

어떻게 해결해야 할까요?

정상적인 코드

결국 ‘팀 프로젝트’라는 것을 이해해야 합니다

Page 146: C++ 코드 품질 관리 비법

커뮤니케이션의 활성! 팀내 의견 통일! 의사전달 확실하게! 기획서 버전 관리 / 일치! 기획 의도 이해

어떻게 해결해야 할까요?

정상적인 코드

결국 ‘팀 프로젝트’라는 것을 이해해야 합니다

근데 어떻게 해결해???

Page 147: C++ 코드 품질 관리 비법

커뮤니케이션 오해

회 의 합 시 다 !

길어지는 회의…

피로 누적 & 집중력 저하

Page 148: C++ 코드 품질 관리 비법

하고 싶어도 힘들다…

커뮤니케이션 오해

회 의 합 시 다 !

길어지는 회의…

피로 누적 & 집중력 저하

Page 149: C++ 코드 품질 관리 비법

이제는 Web의 시대!

Web을 이용하여 커뮤니케이션을 원활하게 해봅시다

Page 150: C++ 코드 품질 관리 비법

이럴땐 툴을 사용해 봅시다.

Page 151: C++ 코드 품질 관리 비법

Github• git을 이용한 버전관리 시스템을 제공해주는 웹 서비스 • 소스를 오픈하면 무료로 사용 가능 • 공짜로 private을 이용하고 싶다면 bitbucket을 사용 • README.md를 통해 문서화도 가능

Page 152: C++ 코드 품질 관리 비법

관리자

클라이언트 프로그래머서버 프로그래머

이슈 및 마일스톤(일정) 관리

이슈 체크 및!마일스톤에따라 개발 진행

서버 코드 혹은 문서를 보며!클라이언트 프로그래밍 진행

EX)

Page 153: C++ 코드 품질 관리 비법

Google docs• 여러 사용자가 동시에 문서 편집이 가능 • 스프레드시트, 워드프로세스, 프레젠테이션 전부 제공 • 회의록을 동시에 보며 작성할 수 있다. • 코멘트 작성 가능

Page 154: C++ 코드 품질 관리 비법

기획 문서 작성소요 시간, 난이도!코멘트 작성

개발자 기획자

EX)

PM검토 후!

실행 여부 결정

Page 155: C++ 코드 품질 관리 비법

5가지 원칙을 지킨 결과…

Page 156: C++ 코드 품질 관리 비법

덕분에 코드 품질이 좋아졌습니다!

Good code!

Legible TestableFlexible CompliantEconomic

Bad code..

Page 157: C++ 코드 품질 관리 비법

But.. 아무리 좋은 코드, 개발자여도 해석에는 시간이 걸립니다

팀내 모든 개발자들과 공유하려면 시간이 오래 걸리겠죠?

Good code!

Legible TestableFlexible CompliantEconomic

Bad code..

Page 158: C++ 코드 품질 관리 비법

Solution ?

Page 159: C++ 코드 품질 관리 비법

Good code!

Page 160: C++ 코드 품질 관리 비법

Good code!

문서화

Page 161: C++ 코드 품질 관리 비법

잘 만들어진 코드에!!

‘문서’라는 조미료를 넣어봅시다

잘 만들어진 코드에!!

‘문서’라는 조미료를 넣어봅시다

Page 162: C++ 코드 품질 관리 비법

설계 및 규칙 정하기

각 자 코 딩 하 기

Good code! Bad code..

툴을 이용하여 확인

리팩토링문서화

Page 163: C++ 코드 품질 관리 비법

설계 및 규칙 정하기

각 자 코 딩 하 기

Good code! Bad code..

툴을 이용하여 확인

리팩토링문서화

별로 문제 없어 보인다

Page 164: C++ 코드 품질 관리 비법

설계 및 규칙 정하기

각 자 코 딩 하 기

Good code! Bad code..

툴을 이용하여 확인

리팩토링문서화

별로 문제 없어 보인다

Page 165: C++ 코드 품질 관리 비법

설계 및 규칙 정하기

각 자 코 딩 하 기

Good code! Bad code..

툴을 이용하여 확인

리팩토링문서화 할 시간이!어디있어;;

문제 발생

Page 166: C++ 코드 품질 관리 비법

설계 및 규칙 정하기

각 자 코 딩 하 기

Good code! Bad code..

툴을 이용하여 확인

리팩토링문서화 할 시간이!어디있어;;

문제 발생

Page 167: C++ 코드 품질 관리 비법

신입 개발자

양이 너무 많아;;!뭐가 뭔지 모르겠다..

Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!

소 스 코 드 뭉 텅 이 들

Page 168: C++ 코드 품질 관리 비법

신입 개발자

에라 모르겠다!래핑* 시켜버리자!

래핑*: 원 소스를 자신의 소스로 덮어버리는 것

Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Bad code.. Bad code..

Wrapping!

Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!Good code! Good code!

소 스 코 드 뭉 텅 이 들

Page 169: C++ 코드 품질 관리 비법

망함

Page 170: C++ 코드 품질 관리 비법

역시 모든 것은 시간과 비용이 문제 ㅠㅠ

Page 171: C++ 코드 품질 관리 비법

문서화 시간을 어떻게 절약할까?

Page 172: C++ 코드 품질 관리 비법

이번에도 등장하는!- 이럴땐 툴을 사용해 봅시다. -

Page 173: C++ 코드 품질 관리 비법

Doxygen• 주석을 통해 문서화를 만들어줌 • 특정한 문법을 지닌 주석을 달아야함 • Visual Studio에 doxygen 방식의 주석을 하이라이팅 해주는 플러그인 있음 • http://www.stack.nl/~dimitri/doxygen/index.html

Page 174: C++ 코드 품질 관리 비법

http://www.stack.nl/~dimitri/doxygen/index.html

Page 175: C++ 코드 품질 관리 비법

GUI 툴을 이용해 만들 수 있다

Page 176: C++ 코드 품질 관리 비법

툴을 이용하여 출력한 결과예제는 일리히트 엔진을 사용

Page 177: C++ 코드 품질 관리 비법

Visual Studio에서 doxygen 주석 문법을 하이라이팅 해주는 플러그인 설치 가능

Page 178: C++ 코드 품질 관리 비법

다음과 같이 하이라이팅 해준다문법은 공식 홈페이지에 자세히 나와있다

Page 179: C++ 코드 품질 관리 비법

Graphviz• doxygen과 함께 사용할 수 있다 • 자동으로 다이어그램을 이미지로 그려준다 • doxygen 문서에 삽입된다 • http://www.graphviz.org/

Page 180: C++ 코드 품질 관리 비법

http://www.graphviz.org/

Page 181: C++ 코드 품질 관리 비법

다음 설정을 선택하여 사용가능하다그 외 다른 설정을 해줘야 할 수도 있음!

Page 182: C++ 코드 품질 관리 비법

다음 화면처럼 클래스 다이어그램을 볼 수 있다

Page 183: C++ 코드 품질 관리 비법

요약당신이 코드 품질을 높일 수 있도록 도와주는 툴이 많다!

툴의 도움을 적극적으로 이용하자!

Page 184: C++ 코드 품질 관리 비법

소스 품질을 좋게 유지하기 위해서는!많은 커뮤니케이션이 필요하고 의사전달이 제대로 이뤄져야 한다

요약2

Page 185: C++ 코드 품질 관리 비법

이 PPT에 소개된 툴 외에도 정말 좋은 툴이 많습니다!다른 툴도 알아보세요 :)

* 참고 *

써본 적은 없지만 유료 툴은 엄청 좋다네요

Page 186: C++ 코드 품질 관리 비법

Reference• http://stackoverflow.com/questions/405243/how-do-we-define-code-quality • http://msdn.microsoft.com/ • http://cppcheck.sourceforge.net/ • http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py • http://www.graphviz.org/ • http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html

Page 187: C++ 코드 품질 관리 비법

감사합니다

C++관리����������� ������������������  

����������� ������������������  비법코드����������� ������������������  품질