SlideShare une entreprise Scribd logo
1  sur  17
소스 리딩 워크샵
이민석
NHN NEXT
minsuk@nhn.com
먹거리 협찬 : -
서은희 선생님
오늘의 목표와 일정
• 오늘 워크샵의 목표:
– 좋은 소스가 무엇인지를 알고,
멋진 소스를 만들 지속적 의지를 불사른다.
– 소스 리뷰의 중요성을 이해하고,
품질을 높이는 한가지 방법을 익힌다.
• Source Reading에 관한 Quick 복습 (20분)
• 예제 Source Reading 결과 설명 (15분)
• 조편성
• 실제 Source Reading (40분)
• 조별 발표 (25분)
• 기념 촬영
• 해산
우리의 개발 방법론 ?
• FDD (Faith-Driven Development) ?
– By Twitter ID: @codinghorror
C Java PHP
무엇이 문제인가 ?
• Source Code : 관리하기가 힘들다 !
• 아무도 있던 코드를 가지고 일하기를 원하지 않는다.
• 겨우 도는데, 자주 수정하다 보니 거의 걸레 수준이다.
• 이 코드를 작성한 엔지니어는 이제 다른 회사에 있다.
• 프로그래머마다 개성이 강하다.
소스를 보면 (1)
• 어떤 함수는 1500 line 이상인 것도 있다.
• 한 소스 화일에서도 뭔가 일관성이 발견되지 않는다.
• 다음과 같은 global 변수 이름이 자주 발견된다.
– db, rp, ap, mt, …
– xx, ii, jj, i, j, …
– the (search가 안 된다. 워낙 “the”가 많기 때문에)
– ll (숫자 ‘1’과 문자 ‘l’은 소스에서 구분이 잘 안됨)
• 설명이 없는 magic 상수가 많이 발견된다.
– for (i = 0; i < 17; i++) …
• 표준 함수가 있는데, 같은 일을 하는 함수가 만들어져 있다.
– 특히 string 관련 함수, sort, search, …
• … 정말 그렇다 !
소스를 보면 (2)
• 함수들이 간격 없이 선언되어 앞,뒤 구분이 어렵다.
• 함수 및 변수 이름에 일관성이 없다.
– 어떤 건 소문자, 어떤 건 대문자, 어떤 건 mix
– 부적절한 약어, 상징어 사용
• 편집에 일관성이 없다.
– Indentation, {, } 의 위치
• 변수, 함수, 코드를 설명하는 코멘트가 거의 없다.
• 가끔은 이런 코멘트도 발견된다.
– /* ooops !, what can I do ? */
• 모든 함수는 에러가 안 난다는 굳은 믿음이 있다.
• 설명 없이 comment-out된 코드가 있다.
• malloc-free, open-close, lock-unlock 짝이 안 맞는다.
• … 진짜 문제다 !
코딩의 자세 .
• 최적화는 뒤로 미루자.
– 일단 예쁜 코드로 돌게 하는 것이 중요
– 설계 단계에서 구조적인 최적화를 고민하고
– 시험 후, 성능을 평가한 뒤 단계별로 최적화
• Profiling 후 가장 키가 큰 ‘한 놈’만 패자
• 읽기 어려운 코드는 Reuse도 하지 말자.
– 읽기 어려우면 신뢰도 안가고
– 디버깅도 어렵다.
• 있는 디버거를 꼭 사용하자.
– printf()는 기본적으로 모니터링 수단
• 모든 다른 가능성이 없을 때, 디버깅 용도로 사용
– Trial and Error로는 문제의 본질에 접근할 수 없다.
코딩의 자세 ..
• Warning은 미래의 버그
– Compiler의 warning level을 최고로 !
– 모든 warning을 제거하자.
• 코딩의 생산성을 생각하자.
– 모드 디렉토리 구조, 파일, 변수 이름은 예측 가능하게
– Editor의 Search 기능 이용을 용이하게
• 함수, 변수, 키워드 이름 뒤에는 공백
– Build/Install/Run 과정의 생산성도 생각하자
• 5초를 줄일 수 있다면, 1시간 투자도 아깝지 않다.
• Hot-Key, 툴바, Batch, …
• 문법 상 되는 것도 오해의 소지가 있다면 쓰지 말자.
• 공짜로 제공되는 걸 쓰자.. Eclipse의 <Control-Shift-F>
코딩의 자세 …
• 컴파일러는 똘똘하다는 확신을 가지자.
– 컴파일러는 “천재”들이 만든다.
– 예쁘게 짜면, 나머지(최적화)는 컴파일러가 한다.
– 컴파일러는 진짜로 거의 버그가 없다.
• 컴파일러 매뉴얼을 읽자.
– 같은 코드에 대한 컴파일 결과가 다를 수 있다.
• 그런 코드는 만들지 말자.
– 컴파일러 옵션 확인
• command line option
• #pragma
– 표준 (+ 특정 컴파일러) 라이브러리 매뉴얼 (man page)
– 사용하는 Framework, Platform에 따른 API 매뉴얼
제대로 하려면…
(Quality Practice around Source Code)
http://shimsky.delighit.net/177
회사들은 ?
• Style Guide (coding convention)
– 어떤 회사는 대외비 ???
– https://code.google.com/p/google-styleguide/
• 각종 언어의 style guide, cpplint
– Linux: ./Documentation/CodingStyle
– http://en.wikipedia.org/wiki/Coding_conventions
– 표준 : MISRA C (자동차 업계), …
• Review tool
– Gerrit : git 과 함께 동작, review & comment
– http://en.wikipedia.org/wiki/List_of_tools_for_code_review
• Static Code Analysis Tools
– 모든 정적 분석 도구 – 역시 위키피디아..
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
– 주요 무료 정적 분석 도구를 정리해놓은 사이트
http://cafe.daum.net/communhwa/C0Sv/19?docid=1NApSC0Sv192011
0302105229
정리하면…
• 매뉴얼을 읽자.
– Compiler Manual (Compiler, Linker option)
– Reference Manual (API Manual)
– Coding Convention
• Source Reading !!!
– 소스와 문서를 종이에 출력하여 찬찬히 읽는다.
• Compiler
– Warning Message Level을 최고로 높인다.
– 모든 Warning Message를 없앤다.
• Tools 과 문서
– 설계를 도와주는 모델링 도구 그리고 설계 문서
– 소스를 잘 보여주는 도구
– Code Review를 지원하는 도구
– 소스의 세부적인 문제, 프로젝트 전체 소스를 정적 분석 (Static Analysis) 하는 도구
연습 소스
(함수 이름)
( perror() 사용 )
(변수 이름)
(!  ==NULL, 띄어쓰기, 줄 바꿈)
(인자 이름, 함수 이름 )
(함수이름)
(이걸 함수로 만들 이유가 있을까 ?)
(comment 필요성?)
( return NULL; 사용 – caller에게 에러를 알림)
(띄어쓰기 ‘if(‘  ‘if (‘ )
(1st, 2nd, 3rd, nth  line %d) (file 번호를 두 번?)
(MAX_BUF의 크기?)
(void ? 에러 나면 ?)
(띄어쓰기)
(줄 띄움)
띄어쓰기, 줄 바꿈, 줄 띄움은
<Ctrl-Shift-F>가 해결
소스 리딩 진행
• 3인(4인) 1조로 합니다.
• 한 명이 진행을 합니다.
– 한 줄씩 차례로..
– 라인 번호를 call 하고 문제를 말하라고 합니다.
• 모든 조원이 해당 줄과 연관된 문제를 말합니다.
– 사소한 것부터 혹시 가능하면 중대한 것 까지
• 프로그램 스타일 (convention)도 보고
• 가능하면 로직도 보고, 프로그램 전체에 대한 것도 보고
– 다른 라인과 연계한 결과까지 말을 합니다.
• Comment도 봅니다. (코멘트의 문법, 철자 틀린 것 까지)
– 모든 내용을 Inspection sheet에 기록합니다.
• 편하게 적습니다. (줄 번호, 문제, 심각성)
• 한 명이 결과 발표를 합니다.
– 라인 번호와 문제점(, 어떻게 고쳐야 할 지)를 이야기합니다.
문제의 위치
(사소한 것까지)
결함의 내용 심각성(H,M,L)
• 컴파일해서, 딱 한번 돌려보고 Reading
• 생산성 안오르는 월 오후, 금요일 늦게 피자 먹으면서 팀 리뷰
• 컴퓨터는 오직 리뷰 결과 기록용으로만 사용
(코드 리뷰하면서 수정하기 시작하면 망함)
• 반드시 전체 문제 개수를 적어서 기록
(얼마나 개선되고 있는지 Monitoring)
1 함수 이름 ‘opfl()’ 후짐  open_file() M
시작 !

Contenu connexe

Tendances

05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
noerror
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
MinGeun Park
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
devCAT Studio, NEXON
 
프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
Chris Ohk
 

Tendances (20)

20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
 
훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
 
(책 소개) 레거시 코드 활용 전략
(책 소개) 레거시 코드 활용 전략(책 소개) 레거시 코드 활용 전략
(책 소개) 레거시 코드 활용 전략
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
이상한모임 720 - 내 코드를 믿지 마라
이상한모임 720 - 내 코드를 믿지 마라이상한모임 720 - 내 코드를 믿지 마라
이상한모임 720 - 내 코드를 믿지 마라
 
Fedevtalk 15 jds
Fedevtalk 15 jdsFedevtalk 15 jds
Fedevtalk 15 jds
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
소프트웨어 설계 악취: 기술 부채 관리 방법
소프트웨어 설계 악취: 기술 부채 관리 방법소프트웨어 설계 악취: 기술 부채 관리 방법
소프트웨어 설계 악취: 기술 부채 관리 방법
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
 
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)
 
임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드
 
[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
 

En vedette

A auga e_o_corpo_humano
A auga e_o_corpo_humanoA auga e_o_corpo_humano
A auga e_o_corpo_humano
Luisa Dacosta
 
PSPD Newletter Spring 2011
PSPD Newletter Spring 2011PSPD Newletter Spring 2011
PSPD Newletter Spring 2011
Pratt CMFM
 
Portfolio Presentation 2
Portfolio Presentation 2Portfolio Presentation 2
Portfolio Presentation 2
rutheast
 
Portfolio Presentation 2
Portfolio Presentation 2Portfolio Presentation 2
Portfolio Presentation 2
rutheast
 
Future of sharing beyond
Future of sharing   beyondFuture of sharing   beyond
Future of sharing beyond
Nick Rappolt
 
Pumping Corn Into Wisconsin: Consideration for Ethanol Legislation
Pumping Corn Into Wisconsin: Consideration for Ethanol LegislationPumping Corn Into Wisconsin: Consideration for Ethanol Legislation
Pumping Corn Into Wisconsin: Consideration for Ethanol Legislation
Justin Dohms
 

En vedette (20)

[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열
[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열
[Gpg1권 박민근] 1.10 간단하고 빠른 비트 배열
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
 
현대고등학교 PHP 강의 - 1차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 1차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 1차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 1차시 (설리번 프로젝트)
 
PHP를 이용한 간단한 방명록 만들기
PHP를 이용한 간단한 방명록 만들기PHP를 이용한 간단한 방명록 만들기
PHP를 이용한 간단한 방명록 만들기
 
trello 사용법 및 좋은 팀대표란?
trello 사용법 및 좋은 팀대표란?trello 사용법 및 좋은 팀대표란?
trello 사용법 및 좋은 팀대표란?
 
MySQL과 PHP
MySQL과 PHPMySQL과 PHP
MySQL과 PHP
 
Nodejs를 이용한 개발
Nodejs를 이용한 개발Nodejs를 이용한 개발
Nodejs를 이용한 개발
 
php 시작하기
php 시작하기php 시작하기
php 시작하기
 
PHP 사용하기
PHP 사용하기PHP 사용하기
PHP 사용하기
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
A auga e_o_corpo_humano
A auga e_o_corpo_humanoA auga e_o_corpo_humano
A auga e_o_corpo_humano
 
Space Foundation Overview
Space Foundation OverviewSpace Foundation Overview
Space Foundation Overview
 
これからの司法書士に求められるIT力強化セミナー
これからの司法書士に求められるIT力強化セミナーこれからの司法書士に求められるIT力強化セミナー
これからの司法書士に求められるIT力強化セミナー
 
PSPD Newletter Spring 2011
PSPD Newletter Spring 2011PSPD Newletter Spring 2011
PSPD Newletter Spring 2011
 
Portfolio Presentation 2
Portfolio Presentation 2Portfolio Presentation 2
Portfolio Presentation 2
 
Binary search
Binary searchBinary search
Binary search
 
IT企業専門パソコン肩こり出張マッサージ「ほぐ神」4月末までの渋谷キャンペーン
IT企業専門パソコン肩こり出張マッサージ「ほぐ神」4月末までの渋谷キャンペーンIT企業専門パソコン肩こり出張マッサージ「ほぐ神」4月末までの渋谷キャンペーン
IT企業専門パソコン肩こり出張マッサージ「ほぐ神」4月末までの渋谷キャンペーン
 
Portfolio Presentation 2
Portfolio Presentation 2Portfolio Presentation 2
Portfolio Presentation 2
 
Future of sharing beyond
Future of sharing   beyondFuture of sharing   beyond
Future of sharing beyond
 
Pumping Corn Into Wisconsin: Consideration for Ethanol Legislation
Pumping Corn Into Wisconsin: Consideration for Ethanol LegislationPumping Corn Into Wisconsin: Consideration for Ethanol Legislation
Pumping Corn Into Wisconsin: Consideration for Ethanol Legislation
 

Similaire à 소스리딩워크샵 - NHN NEXT

오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
Channy Yun
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
NAVER D2
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
ChangKyu Song
 
프로토타이핑
프로토타이핑프로토타이핑
프로토타이핑
정인 주
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 

Similaire à 소스리딩워크샵 - NHN NEXT (20)

C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
프로토타이핑
프로토타이핑프로토타이핑
프로토타이핑
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
졸업후 취업까지.ssul
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
전자정부표준프레임워크=오픈소스+Alpha
전자정부표준프레임워크=오픈소스+Alpha전자정부표준프레임워크=오픈소스+Alpha
전자정부표준프레임워크=오픈소스+Alpha
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps
 

Plus de Minsuk Lee

Plus de Minsuk Lee (20)

CES 처음 가는 분을 위한 가이드
CES 처음 가는 분을 위한 가이드CES 처음 가는 분을 위한 가이드
CES 처음 가는 분을 위한 가이드
 
NIA-PaaS-TA Pub 키노트
NIA-PaaS-TA Pub 키노트NIA-PaaS-TA Pub 키노트
NIA-PaaS-TA Pub 키노트
 
모두콘, 어떻게 배울 것인가 발제.
모두콘,  어떻게 배울 것인가 발제.모두콘,  어떻게 배울 것인가 발제.
모두콘, 어떻게 배울 것인가 발제.
 
GDG-DevFest, 만들면서 자랑하면서 성장하는 개발자
GDG-DevFest, 만들면서 자랑하면서 성장하는 개발자GDG-DevFest, 만들면서 자랑하면서 성장하는 개발자
GDG-DevFest, 만들면서 자랑하면서 성장하는 개발자
 
개발자, 회사.. 왜 오픈소스를 해야할까?
개발자, 회사.. 왜 오픈소스를 해야할까?개발자, 회사.. 왜 오픈소스를 해야할까?
개발자, 회사.. 왜 오픈소스를 해야할까?
 
진정한 소프트웨어 융합교육에 대하여
진정한 소프트웨어 융합교육에 대하여 진정한 소프트웨어 융합교육에 대하여
진정한 소프트웨어 융합교육에 대하여
 
FOSS CON Korea 2018
FOSS CON Korea 2018FOSS CON Korea 2018
FOSS CON Korea 2018
 
소프트웨어 공부하는법
소프트웨어 공부하는법소프트웨어 공부하는법
소프트웨어 공부하는법
 
자기소개서, 이력서 쓰는 법
자기소개서, 이력서 쓰는 법자기소개서, 이력서 쓰는 법
자기소개서, 이력서 쓰는 법
 
왜 우리는 개발자에 집중하지 않는가?
왜 우리는 개발자에 집중하지 않는가?왜 우리는 개발자에 집중하지 않는가?
왜 우리는 개발자에 집중하지 않는가?
 
Somul 2017-이민석
Somul 2017-이민석Somul 2017-이민석
Somul 2017-이민석
 
국민대-컴퓨터프로그래밍-2017-1-오프라인강좌
국민대-컴퓨터프로그래밍-2017-1-오프라인강좌국민대-컴퓨터프로그래밍-2017-1-오프라인강좌
국민대-컴퓨터프로그래밍-2017-1-오프라인강좌
 
왜 소프트웨어를 배워야할까?
왜 소프트웨어를 배워야할까?왜 소프트웨어를 배워야할까?
왜 소프트웨어를 배워야할까?
 
소프트웨어, 정말 되는 건가?
소프트웨어, 정말 되는 건가?소프트웨어, 정말 되는 건가?
소프트웨어, 정말 되는 건가?
 
소프트웨어, 소프트웨어 개발자
소프트웨어, 소프트웨어 개발자소프트웨어, 소프트웨어 개발자
소프트웨어, 소프트웨어 개발자
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초
 
Software Company, Open Soure Software Company
Software Company, Open Soure Software CompanySoftware Company, Open Soure Software Company
Software Company, Open Soure Software Company
 
Open Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewOpen Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code review
 
Data and Sorting Algoritm
Data and Sorting AlgoritmData and Sorting Algoritm
Data and Sorting Algoritm
 
국민대학교 컴퓨터프로그래밍
국민대학교 컴퓨터프로그래밍국민대학교 컴퓨터프로그래밍
국민대학교 컴퓨터프로그래밍
 

Dernier

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Dernier (7)

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 

소스리딩워크샵 - NHN NEXT

  • 1. 소스 리딩 워크샵 이민석 NHN NEXT minsuk@nhn.com 먹거리 협찬 : - 서은희 선생님
  • 2. 오늘의 목표와 일정 • 오늘 워크샵의 목표: – 좋은 소스가 무엇인지를 알고, 멋진 소스를 만들 지속적 의지를 불사른다. – 소스 리뷰의 중요성을 이해하고, 품질을 높이는 한가지 방법을 익힌다. • Source Reading에 관한 Quick 복습 (20분) • 예제 Source Reading 결과 설명 (15분) • 조편성 • 실제 Source Reading (40분) • 조별 발표 (25분) • 기념 촬영 • 해산
  • 3. 우리의 개발 방법론 ? • FDD (Faith-Driven Development) ? – By Twitter ID: @codinghorror C Java PHP
  • 4. 무엇이 문제인가 ? • Source Code : 관리하기가 힘들다 ! • 아무도 있던 코드를 가지고 일하기를 원하지 않는다. • 겨우 도는데, 자주 수정하다 보니 거의 걸레 수준이다. • 이 코드를 작성한 엔지니어는 이제 다른 회사에 있다. • 프로그래머마다 개성이 강하다.
  • 5. 소스를 보면 (1) • 어떤 함수는 1500 line 이상인 것도 있다. • 한 소스 화일에서도 뭔가 일관성이 발견되지 않는다. • 다음과 같은 global 변수 이름이 자주 발견된다. – db, rp, ap, mt, … – xx, ii, jj, i, j, … – the (search가 안 된다. 워낙 “the”가 많기 때문에) – ll (숫자 ‘1’과 문자 ‘l’은 소스에서 구분이 잘 안됨) • 설명이 없는 magic 상수가 많이 발견된다. – for (i = 0; i < 17; i++) … • 표준 함수가 있는데, 같은 일을 하는 함수가 만들어져 있다. – 특히 string 관련 함수, sort, search, … • … 정말 그렇다 !
  • 6. 소스를 보면 (2) • 함수들이 간격 없이 선언되어 앞,뒤 구분이 어렵다. • 함수 및 변수 이름에 일관성이 없다. – 어떤 건 소문자, 어떤 건 대문자, 어떤 건 mix – 부적절한 약어, 상징어 사용 • 편집에 일관성이 없다. – Indentation, {, } 의 위치 • 변수, 함수, 코드를 설명하는 코멘트가 거의 없다. • 가끔은 이런 코멘트도 발견된다. – /* ooops !, what can I do ? */ • 모든 함수는 에러가 안 난다는 굳은 믿음이 있다. • 설명 없이 comment-out된 코드가 있다. • malloc-free, open-close, lock-unlock 짝이 안 맞는다. • … 진짜 문제다 !
  • 7. 코딩의 자세 . • 최적화는 뒤로 미루자. – 일단 예쁜 코드로 돌게 하는 것이 중요 – 설계 단계에서 구조적인 최적화를 고민하고 – 시험 후, 성능을 평가한 뒤 단계별로 최적화 • Profiling 후 가장 키가 큰 ‘한 놈’만 패자 • 읽기 어려운 코드는 Reuse도 하지 말자. – 읽기 어려우면 신뢰도 안가고 – 디버깅도 어렵다. • 있는 디버거를 꼭 사용하자. – printf()는 기본적으로 모니터링 수단 • 모든 다른 가능성이 없을 때, 디버깅 용도로 사용 – Trial and Error로는 문제의 본질에 접근할 수 없다.
  • 8. 코딩의 자세 .. • Warning은 미래의 버그 – Compiler의 warning level을 최고로 ! – 모든 warning을 제거하자. • 코딩의 생산성을 생각하자. – 모드 디렉토리 구조, 파일, 변수 이름은 예측 가능하게 – Editor의 Search 기능 이용을 용이하게 • 함수, 변수, 키워드 이름 뒤에는 공백 – Build/Install/Run 과정의 생산성도 생각하자 • 5초를 줄일 수 있다면, 1시간 투자도 아깝지 않다. • Hot-Key, 툴바, Batch, … • 문법 상 되는 것도 오해의 소지가 있다면 쓰지 말자. • 공짜로 제공되는 걸 쓰자.. Eclipse의 <Control-Shift-F>
  • 9. 코딩의 자세 … • 컴파일러는 똘똘하다는 확신을 가지자. – 컴파일러는 “천재”들이 만든다. – 예쁘게 짜면, 나머지(최적화)는 컴파일러가 한다. – 컴파일러는 진짜로 거의 버그가 없다. • 컴파일러 매뉴얼을 읽자. – 같은 코드에 대한 컴파일 결과가 다를 수 있다. • 그런 코드는 만들지 말자. – 컴파일러 옵션 확인 • command line option • #pragma – 표준 (+ 특정 컴파일러) 라이브러리 매뉴얼 (man page) – 사용하는 Framework, Platform에 따른 API 매뉴얼
  • 10. 제대로 하려면… (Quality Practice around Source Code) http://shimsky.delighit.net/177
  • 11. 회사들은 ? • Style Guide (coding convention) – 어떤 회사는 대외비 ??? – https://code.google.com/p/google-styleguide/ • 각종 언어의 style guide, cpplint – Linux: ./Documentation/CodingStyle – http://en.wikipedia.org/wiki/Coding_conventions – 표준 : MISRA C (자동차 업계), … • Review tool – Gerrit : git 과 함께 동작, review & comment – http://en.wikipedia.org/wiki/List_of_tools_for_code_review • Static Code Analysis Tools – 모든 정적 분석 도구 – 역시 위키피디아.. http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis – 주요 무료 정적 분석 도구를 정리해놓은 사이트 http://cafe.daum.net/communhwa/C0Sv/19?docid=1NApSC0Sv192011 0302105229
  • 12. 정리하면… • 매뉴얼을 읽자. – Compiler Manual (Compiler, Linker option) – Reference Manual (API Manual) – Coding Convention • Source Reading !!! – 소스와 문서를 종이에 출력하여 찬찬히 읽는다. • Compiler – Warning Message Level을 최고로 높인다. – 모든 Warning Message를 없앤다. • Tools 과 문서 – 설계를 도와주는 모델링 도구 그리고 설계 문서 – 소스를 잘 보여주는 도구 – Code Review를 지원하는 도구 – 소스의 세부적인 문제, 프로젝트 전체 소스를 정적 분석 (Static Analysis) 하는 도구
  • 14. (함수 이름) ( perror() 사용 ) (변수 이름) (!  ==NULL, 띄어쓰기, 줄 바꿈) (인자 이름, 함수 이름 ) (함수이름) (이걸 함수로 만들 이유가 있을까 ?) (comment 필요성?) ( return NULL; 사용 – caller에게 에러를 알림) (띄어쓰기 ‘if(‘  ‘if (‘ ) (1st, 2nd, 3rd, nth  line %d) (file 번호를 두 번?) (MAX_BUF의 크기?) (void ? 에러 나면 ?) (띄어쓰기) (줄 띄움) 띄어쓰기, 줄 바꿈, 줄 띄움은 <Ctrl-Shift-F>가 해결
  • 15. 소스 리딩 진행 • 3인(4인) 1조로 합니다. • 한 명이 진행을 합니다. – 한 줄씩 차례로.. – 라인 번호를 call 하고 문제를 말하라고 합니다. • 모든 조원이 해당 줄과 연관된 문제를 말합니다. – 사소한 것부터 혹시 가능하면 중대한 것 까지 • 프로그램 스타일 (convention)도 보고 • 가능하면 로직도 보고, 프로그램 전체에 대한 것도 보고 – 다른 라인과 연계한 결과까지 말을 합니다. • Comment도 봅니다. (코멘트의 문법, 철자 틀린 것 까지) – 모든 내용을 Inspection sheet에 기록합니다. • 편하게 적습니다. (줄 번호, 문제, 심각성) • 한 명이 결과 발표를 합니다. – 라인 번호와 문제점(, 어떻게 고쳐야 할 지)를 이야기합니다.
  • 16. 문제의 위치 (사소한 것까지) 결함의 내용 심각성(H,M,L) • 컴파일해서, 딱 한번 돌려보고 Reading • 생산성 안오르는 월 오후, 금요일 늦게 피자 먹으면서 팀 리뷰 • 컴퓨터는 오직 리뷰 결과 기록용으로만 사용 (코드 리뷰하면서 수정하기 시작하면 망함) • 반드시 전체 문제 개수를 적어서 기록 (얼마나 개선되고 있는지 Monitoring) 1 함수 이름 ‘opfl()’ 후짐  open_file() M