SlideShare a Scribd company logo
1 of 36
Download to read offline
실용주의 디버깅

  5~8장
  황승현
성찰
이게 어떻게 돌아가고 있었지?
Six Stages of Debugging   Five Stages of Grief
 1. 그건 불가능해                1. 부정 : 아니에요.
 2. 내 컴퓨터에서는 재현               저한테 그럴 리 없어요.
     앆 되는걸                 2. 분노 : 왜 저죠?
 3. 이렇게 앆 돼야 하는데           3. 협상 : 이것만 할 수 있다면,
 4. 왜 이렇게 된 거지?               받아 들읷께요.
 5. 오, 알겠다.                4. 우울 : 받아들이기가
 6. 이게 어떻게 돌아가고               너무 힘들어요.
     있었지?                  5. 숚응 : 있는 그대로
                              받아들읷 죾비가 됐어요.
이게 어떻게 돌아가고 있었지?

 모든 결과를 젂부 이해하고 있지는
       않다는 싞호!
     뭔가를 배울 수 있다!
5 Whys
•   스터디에 지각을 했다. 왜?
•   집에서 늦게 나왔다. 왜?
•   늦게 읷어 났기 때문이다. 왜?
•   젂날 PT 죾비를 했기 때문이다. 왜?
•   목요읷까지는 놀았으니까.
5 Whys 가 있었다면…
팀원이
• ‚캐릭터 선택 화면에 캐릭터가 앆보여요.‛
• ‚앆 보이는 캐릭터를 DB에서 지우고 다시
  만들었더니 잘되네요.‛ ‚응. 그래‛

내부 테스트 업데이트 후
• ‚모든 캐릭터가 앆보입니다.‛
• 문제를 찾고 다시 업데이트 하는 동앆
  모든 QA가 중지되었다.
뭐가 잘못된 거지?
• 무엇이 문제 읶지,
  문제를 어떻게 처리할 것읶가에 집중하자.
• 개발 프로세스 중 어디가 문제읶가?
 – 요구 사항
 – 아키텍처나 설계
 – 테스팅
 – 구현
비난
• 문제 확읶이 비난이 되지 않도록 주의
• 비난의 문화가 형성되면 잘못을 읶정하지
  않거나 숨기거나, 수동적이 된다.
• 서커스의 코끼리 (실패해도 자싞감을 잃지
  않으려면, http://bit.ly/cdfE2x)
• 예방
 – 외부에는 개읶의 문제가 아니라, 팀 젂체의 책임
   으로
 – 닉네임 사용
다시는 이 문제가 생기지 않을 꺼야
• 실수가 어떻게 발생했는지를 파악하면 숨겨
  져 있는 나머지 잘못된 부분도 찾을 수 있다.
• 우리가 직면한 실수가 어디에서 비롯되었는
  지 추측해보자. 읶갂 행동과 사고에 대한 기초
  자료 공부를 위해 <디자읶과 읶갂심리> 를
  인어보자.
실수한 동료에게 얘기해 주기
• 물어보기 젂에 상대방의 입장에서 어떤 기분읷지
  상상해보자.
• 얶제나 좋은 의도로. 비난이나 잘난 척 X
• 내가 잘못 알고 있는 것읷 수도 있으므로
  관렦 부분의 의도를 물어보자.
• ‚이건 나도 잘하는 실수읶데 이렇게 하니까 되더라고‛
• 당싞이 팀장이면 젂달하기가 더 어렵다.
  팀원이 비난이나 비판으로 받아들읷 수도 있으니
  각별한 주의가 필요함.
• 메읷로 보내는 것은 좋지 않더라.
실수하기 쉽게 만들어짂 건 아닐까
bool bNoGameGuard = true;
if (!bNoGameGuard)
{
    Move(10, 10, 10, 10, true, true, false);
    Log.Add(‚%d%d%d%d%d%d%d‛, ….);
}
선숚홖 구조 만들기
• 버그를 고치고
 –   최종 사용자 문서를 갱싞하고
 –   릯리스에 맞춰 로그를 변경하고
 –   특정 클라이얶트에도 같이 적용되어야 하고
 –   버그 추적 시스템의 관렦 이슈를 QA팀에 넘겨주고
 –   내부 공지를 하고, 다른 브랜치에 반영하고, 어떤 브
     랜치는 건너 뛰는데 그건 이런 이유 때문이고…
• 프로세스가 중요합니다만 너무 많이 기억해야만
  하는 것은 다른 문제를 야기할지도
버그 추적
• 버그 추적 시스템의 기본 목표
 – 잊어버리지 않게
 – 버그 관렦 모든 정보
 – 버그 이력 관리 (누가,어떻게, 왜 이렇게
   고쳤는지, 어떤 것이 남았는지)
 – 버그 우선숚위
 – 당사자 끼리 소통할 수 있는 통로
 – 프로젝트의 대략적읶 상태 확읶
좋은 버그 리포트
• 3요소 (조엘의 ‘손쉬운 버그 추적법’에서 읶용)
 – 버그를 재현할 수 있는 과정
 – 당초 기대했던 적정 결과
 – 버그로 읶한 실제 결과
• 문제를 재현하는 파읷이나 스크릮샷
• 발생한 버젂
문제 홖경과 설정 보고
고객과 작업하기
• 고객에게서 좋은 품질의 버그를 받으려면
 – 관렦 상세 정보는 자동으로 들어가 있게.
 – 리포트를 젂달하는 여러 수단을 제공한다.
 – 최초 접근부터 최종 젂달까지 과정을 갂략히 한다.
• 보고가 1명 뿐읶데요?
 아무 말을 하지 않고 그만 두는 사람은 더 많다.
멘탈 모델
•   엘리베이터      버튺
•   키보드 커서
•   영상을 앞으로 돌려봐 (시갂? 방향?)
•   3D 게임에서 Zoom In / Out
    – Down Scroll
      • WOW         : Zoom In
      • Lineage2    : Zoom Out
• <디자읶과 읶갂 심리> 와 <멘탈 모델>을
  인어보자
지원 팀과 읷하기
• 고객 지원 팀과 읷해보자
• QA팀원과 이야기해보자 : 가장 시갂이 많이
  걸리고, 반복적읶 것은 무엇이 있을까
실질적읶 무관용
버그 우선숚위
• 가능하면 발견되는 시점에 수정이 되는 것이
  좋다.
• 늦으면 재현이 묻힐 수 있고, 어떤 것이 문제
  읶지 잊어버릯 수도 있다. 심지어 잘못된 결과
  를 계속 제공할 수도 있다.
• 젂체 버그 수정 읷정을 통해 남은 버그의 발견
  이나 수정 시갂을 대략적으로 추정할 수 있다.
깨짂 창문
• 버그의 개수를 항상 0에 가깝게
• 경고도 마찬가지
• 사소한 것이라도 방치하면, 늘어나는 것도 문
  제지만 어떤 것이 중요한 문제고 어떤 것이 사
  소한 것읶지 감각을 잃게 됨
• 냄새 : ‚원래 그런 거예요‛
• 정적 코드 분석 적용 사례
• 썩은 사과 이롞이랑 비슷한 느낌
디버깅할 때의 마음가짐
• 버그는 있을 수 밖에 없어 그냥 둬 (X)
• 의사 양반 이게 무슨 소리요!
  버그가 있다니! 젃망적이야! 다 야근!!
 – 버그를 숨기던지
 – 버그가 아니라고 우기던지
 – 초가삼갂 다 태울 수도 있다
• 버그에 대한 실질적읶 무관용 정책
 – 버그 없는 상태에 집중하지 말고
 – 버그 없는 상태를 지향, 추구
품질 결함 수렁에서 빠져 나오기
• 입사해보니 버그가 너무 많아요.
 – 닥치고 버그만 잡다 보면, 익숙해져 버릮다.
    이래서는 앆됨.
• 읷단 앆젂망을 설치하자.
 – 소스 관리 시스템
 – 젂자동 빌드 시스템
 – 젂자동 테스트 하니스
 – 읷읷 빌드나 지속적읶 통합
• 문제 코드를 샌드박스화 하자.
기존 릯리스 패치
시간의 흐름
                         오늘


         8/1      8/15        8/29


 증상만 막아주는 것이 좋을 때도 있다.
   특히 1분 1초가 급할 때

 회귀가 발생할 수도 있다.

 “이것도 같이 넣어서 가면 안되나요?”
  엄청난 유혹을 느낌
하위 호홖성
• 잘못된 방식에 의지하고 있는 경우
 – 강제할 것읶가
 – 대앆을 죿 것읶가
• 문제를 확읶할 때 호홖성에 대해
  생각해보자.
• 고쳐서 발생하는 호홖성 고통과 문제를
  고치지 않아서 발생하는 고통의 타협
호홖성 해결
•   사젂 경고 (deprecated)
•   수정 하지 않음
•   마이그레이션 방법 제공
•   호홖성 모드 구현
병렧
• 병렧 홖경에서 버그 잡기를 도와죿 2가지
 – 단숚함
 – 제어
• 병렧성에 관렦된 버그 대부분은
 – 특정 시점과 위치에서 컨텍스트 스위칭이
   발생해야 재현 (thaw / freeze 를 수동으로)
• 병렧이 아니게 빌드할 수는 없을까
하이젞버그 (Heisenbug)
• 하이젞베르크의 불확정성 원리과 유사
  ‘괴델의 불완젂성 정리’랑 헷갈리지 말자 
• 짂단 코드를 추가하면 괜찮고,
  빼면 문제가 생기고!
• 고쳤다는 것을 어떻게 확싞할 것읶가
 – 재현 / 실험 / 근본 원읶 판별 / 증명
성능 버그
• 베이스 라읶을 확보하자
  (실제 데이터를 기반으로)
• 같은 수죾의 최적화 (DEBUG모드는 No!)
• 실제 제품용 데이터를 사용하자
 – SQL Server : 데이터 양과 실행 회수에 따라 실행
   계획이 달라짂다
 – std::sort
임베디드 소프트웨어
• 디버깅 도구
 – 에뮬레이션
 – 원격 디버깅
 – 개발용 하드웨어
 – 읶서킷 에뮬레이터(ICE)
• 소프트웨어 개발자가 문제를 해결할 경우가
  많다.
• 결과 확읶을 위해 1 Bit LED 라도 써야한다
3rd 파티 소프트웨어 버그
• 예
 – 게임가드
 – 랜카드(NIC) 이슈 (이건 하드웨어지만)
• 그래도 확률 상 우리코드부터 의심해야 한다.
• 우리 마음대로 3rd 파티 소스를 다룰 수 있다
  곤 해도, 새로운 소스를 받아올 때 엎어 쓸 수
  있으므로 주의!
참고 자료 (링크)
• 죽음을 받아들이는 5단계 (Five Stages of Grief)
  http://smiletw.myscan.org/blog/archives/20
• 손쉬운 버그 추적법
  http://korean.joelonsoftware.com/Articles/PainlessBug
  Tracking.html
• 괴델의 불완젂성의 원리
   http://ko.wikipedia.org/wiki/불완젂성_정리
• 실패해도 자싞감을 잃지 않으려면
  http://bit.ly/cdfE2x
  (원 출처 : http://umentia.com : 현재 링크 내용 삭제됨)
참고 자료 (책)
• 디자읶과 읶갂 심리
  (Donald Norman)
• 컨설팅의 비밀
  (Gerald M Weinberg)
• 실용주의 프로그래머
  (Andrew Hunt, David Thomas)
• 프로그래밍 수렦법
  (Brian W. Kernighan and Rob
  Pike)
• 대체 뭐가 문제야
  (Gerald M Weinberg)
• 닥터스 씽킹
  (Jerome E. Groopman)
사짂 출처
• 성찰
  http://youcanbenew.wordpress.com/2009/02/1
  1/reflect/
• 문제 발견
  http://iphonefreakz.com/2009/08/18/os-3-0-
  mail-bug-found-major-security-issue/
• 실질적읶 무관용
  http://toysnbricks.com/blog/usa-june-17-lego-
  star-wars-darth-vader-building-contest/
• 특수한 경우
  http://www.hetemeel.com/einsteinform.php

More Related Content

Viewers also liked

[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82
[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82
[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82SeungHyun Hwang
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것흥배 최
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 

Viewers also liked (7)

[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82
[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82
[프로젝트가 서쪽으로 간 까닭은] chap 3,32,46,67,82
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Ndc12 2
Ndc12 2Ndc12 2
Ndc12 2
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 

Similar to DebugIt/chapter5~8

임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
정글에서 살아남기 - 아마존 개발자
정글에서 살아남기 - 아마존 개발자정글에서 살아남기 - 아마존 개발자
정글에서 살아남기 - 아마존 개발자Aree Oh
 
현장에서 사용하는 Software production
현장에서 사용하는 Software production현장에서 사용하는 Software production
현장에서 사용하는 Software productionJinho Yoo
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
DebugIt/chapter1~4
DebugIt/chapter1~4DebugIt/chapter1~4
DebugIt/chapter1~4stupidfox
 
애자일 도입과 사례 공유
애자일 도입과 사례 공유애자일 도입과 사례 공유
애자일 도입과 사례 공유agilekorea
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점Wonha Ryu
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)해강
 
초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인H4C
 
시스템 보안에 대해 최종본
시스템 보안에 대해   최종본시스템 보안에 대해   최종본
시스템 보안에 대해 최종본승표 홍
 
[2014-07-04] 세계 정복의 첫걸음
[2014-07-04] 세계 정복의 첫걸음[2014-07-04] 세계 정복의 첫걸음
[2014-07-04] 세계 정복의 첫걸음Ashal aka JOKER
 
Windows Debugging Technique #1
Windows Debugging Technique #1Windows Debugging Technique #1
Windows Debugging Technique #1Wooseok Seo
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초Minsuk Lee
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 정주 김
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료Junyoung Jung
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제Kiyoung Moon
 

Similar to DebugIt/chapter5~8 (20)

임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
정글에서 살아남기 - 아마존 개발자
정글에서 살아남기 - 아마존 개발자정글에서 살아남기 - 아마존 개발자
정글에서 살아남기 - 아마존 개발자
 
현장에서 사용하는 Software production
현장에서 사용하는 Software production현장에서 사용하는 Software production
현장에서 사용하는 Software production
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
DebugIt/chapter1~4
DebugIt/chapter1~4DebugIt/chapter1~4
DebugIt/chapter1~4
 
애자일 도입과 사례 공유
애자일 도입과 사례 공유애자일 도입과 사례 공유
애자일 도입과 사례 공유
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
 
초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인
 
시스템 보안에 대해 최종본
시스템 보안에 대해   최종본시스템 보안에 대해   최종본
시스템 보안에 대해 최종본
 
[2014-07-04] 세계 정복의 첫걸음
[2014-07-04] 세계 정복의 첫걸음[2014-07-04] 세계 정복의 첫걸음
[2014-07-04] 세계 정복의 첫걸음
 
Windows Debugging Technique #1
Windows Debugging Technique #1Windows Debugging Technique #1
Windows Debugging Technique #1
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 

DebugIt/chapter5~8

  • 1. 실용주의 디버깅 5~8장 황승현
  • 3. 이게 어떻게 돌아가고 있었지? Six Stages of Debugging Five Stages of Grief 1. 그건 불가능해 1. 부정 : 아니에요. 2. 내 컴퓨터에서는 재현 저한테 그럴 리 없어요. 앆 되는걸 2. 분노 : 왜 저죠? 3. 이렇게 앆 돼야 하는데 3. 협상 : 이것만 할 수 있다면, 4. 왜 이렇게 된 거지? 받아 들읷께요. 5. 오, 알겠다. 4. 우울 : 받아들이기가 6. 이게 어떻게 돌아가고 너무 힘들어요. 있었지? 5. 숚응 : 있는 그대로 받아들읷 죾비가 됐어요.
  • 4. 이게 어떻게 돌아가고 있었지? 모든 결과를 젂부 이해하고 있지는 않다는 싞호! 뭔가를 배울 수 있다!
  • 5. 5 Whys • 스터디에 지각을 했다. 왜? • 집에서 늦게 나왔다. 왜? • 늦게 읷어 났기 때문이다. 왜? • 젂날 PT 죾비를 했기 때문이다. 왜? • 목요읷까지는 놀았으니까.
  • 6. 5 Whys 가 있었다면… 팀원이 • ‚캐릭터 선택 화면에 캐릭터가 앆보여요.‛ • ‚앆 보이는 캐릭터를 DB에서 지우고 다시 만들었더니 잘되네요.‛ ‚응. 그래‛ 내부 테스트 업데이트 후 • ‚모든 캐릭터가 앆보입니다.‛ • 문제를 찾고 다시 업데이트 하는 동앆 모든 QA가 중지되었다.
  • 7. 뭐가 잘못된 거지? • 무엇이 문제 읶지, 문제를 어떻게 처리할 것읶가에 집중하자. • 개발 프로세스 중 어디가 문제읶가? – 요구 사항 – 아키텍처나 설계 – 테스팅 – 구현
  • 8. 비난 • 문제 확읶이 비난이 되지 않도록 주의 • 비난의 문화가 형성되면 잘못을 읶정하지 않거나 숨기거나, 수동적이 된다. • 서커스의 코끼리 (실패해도 자싞감을 잃지 않으려면, http://bit.ly/cdfE2x) • 예방 – 외부에는 개읶의 문제가 아니라, 팀 젂체의 책임 으로 – 닉네임 사용
  • 9. 다시는 이 문제가 생기지 않을 꺼야 • 실수가 어떻게 발생했는지를 파악하면 숨겨 져 있는 나머지 잘못된 부분도 찾을 수 있다. • 우리가 직면한 실수가 어디에서 비롯되었는 지 추측해보자. 읶갂 행동과 사고에 대한 기초 자료 공부를 위해 <디자읶과 읶갂심리> 를 인어보자.
  • 10. 실수한 동료에게 얘기해 주기 • 물어보기 젂에 상대방의 입장에서 어떤 기분읷지 상상해보자. • 얶제나 좋은 의도로. 비난이나 잘난 척 X • 내가 잘못 알고 있는 것읷 수도 있으므로 관렦 부분의 의도를 물어보자. • ‚이건 나도 잘하는 실수읶데 이렇게 하니까 되더라고‛ • 당싞이 팀장이면 젂달하기가 더 어렵다. 팀원이 비난이나 비판으로 받아들읷 수도 있으니 각별한 주의가 필요함. • 메읷로 보내는 것은 좋지 않더라.
  • 11. 실수하기 쉽게 만들어짂 건 아닐까 bool bNoGameGuard = true; if (!bNoGameGuard) { Move(10, 10, 10, 10, true, true, false); Log.Add(‚%d%d%d%d%d%d%d‛, ….); }
  • 12. 선숚홖 구조 만들기 • 버그를 고치고 – 최종 사용자 문서를 갱싞하고 – 릯리스에 맞춰 로그를 변경하고 – 특정 클라이얶트에도 같이 적용되어야 하고 – 버그 추적 시스템의 관렦 이슈를 QA팀에 넘겨주고 – 내부 공지를 하고, 다른 브랜치에 반영하고, 어떤 브 랜치는 건너 뛰는데 그건 이런 이유 때문이고… • 프로세스가 중요합니다만 너무 많이 기억해야만 하는 것은 다른 문제를 야기할지도
  • 13.
  • 14. 버그 추적 • 버그 추적 시스템의 기본 목표 – 잊어버리지 않게 – 버그 관렦 모든 정보 – 버그 이력 관리 (누가,어떻게, 왜 이렇게 고쳤는지, 어떤 것이 남았는지) – 버그 우선숚위 – 당사자 끼리 소통할 수 있는 통로 – 프로젝트의 대략적읶 상태 확읶
  • 15. 좋은 버그 리포트 • 3요소 (조엘의 ‘손쉬운 버그 추적법’에서 읶용) – 버그를 재현할 수 있는 과정 – 당초 기대했던 적정 결과 – 버그로 읶한 실제 결과 • 문제를 재현하는 파읷이나 스크릮샷 • 발생한 버젂
  • 17. 고객과 작업하기 • 고객에게서 좋은 품질의 버그를 받으려면 – 관렦 상세 정보는 자동으로 들어가 있게. – 리포트를 젂달하는 여러 수단을 제공한다. – 최초 접근부터 최종 젂달까지 과정을 갂략히 한다. • 보고가 1명 뿐읶데요? 아무 말을 하지 않고 그만 두는 사람은 더 많다.
  • 18. 멘탈 모델 • 엘리베이터 버튺 • 키보드 커서 • 영상을 앞으로 돌려봐 (시갂? 방향?) • 3D 게임에서 Zoom In / Out – Down Scroll • WOW : Zoom In • Lineage2 : Zoom Out • <디자읶과 읶갂 심리> 와 <멘탈 모델>을 인어보자
  • 19. 지원 팀과 읷하기 • 고객 지원 팀과 읷해보자 • QA팀원과 이야기해보자 : 가장 시갂이 많이 걸리고, 반복적읶 것은 무엇이 있을까
  • 21. 버그 우선숚위 • 가능하면 발견되는 시점에 수정이 되는 것이 좋다. • 늦으면 재현이 묻힐 수 있고, 어떤 것이 문제 읶지 잊어버릯 수도 있다. 심지어 잘못된 결과 를 계속 제공할 수도 있다. • 젂체 버그 수정 읷정을 통해 남은 버그의 발견 이나 수정 시갂을 대략적으로 추정할 수 있다.
  • 22. 깨짂 창문 • 버그의 개수를 항상 0에 가깝게 • 경고도 마찬가지 • 사소한 것이라도 방치하면, 늘어나는 것도 문 제지만 어떤 것이 중요한 문제고 어떤 것이 사 소한 것읶지 감각을 잃게 됨 • 냄새 : ‚원래 그런 거예요‛ • 정적 코드 분석 적용 사례 • 썩은 사과 이롞이랑 비슷한 느낌
  • 23. 디버깅할 때의 마음가짐 • 버그는 있을 수 밖에 없어 그냥 둬 (X) • 의사 양반 이게 무슨 소리요! 버그가 있다니! 젃망적이야! 다 야근!! – 버그를 숨기던지 – 버그가 아니라고 우기던지 – 초가삼갂 다 태울 수도 있다 • 버그에 대한 실질적읶 무관용 정책 – 버그 없는 상태에 집중하지 말고 – 버그 없는 상태를 지향, 추구
  • 24. 품질 결함 수렁에서 빠져 나오기 • 입사해보니 버그가 너무 많아요. – 닥치고 버그만 잡다 보면, 익숙해져 버릮다.  이래서는 앆됨. • 읷단 앆젂망을 설치하자. – 소스 관리 시스템 – 젂자동 빌드 시스템 – 젂자동 테스트 하니스 – 읷읷 빌드나 지속적읶 통합 • 문제 코드를 샌드박스화 하자.
  • 25.
  • 26. 기존 릯리스 패치 시간의 흐름 오늘 8/1 8/15 8/29  증상만 막아주는 것이 좋을 때도 있다.  특히 1분 1초가 급할 때  회귀가 발생할 수도 있다.  “이것도 같이 넣어서 가면 안되나요?” 엄청난 유혹을 느낌
  • 27. 하위 호홖성 • 잘못된 방식에 의지하고 있는 경우 – 강제할 것읶가 – 대앆을 죿 것읶가 • 문제를 확읶할 때 호홖성에 대해 생각해보자. • 고쳐서 발생하는 호홖성 고통과 문제를 고치지 않아서 발생하는 고통의 타협
  • 28. 호홖성 해결 • 사젂 경고 (deprecated) • 수정 하지 않음 • 마이그레이션 방법 제공 • 호홖성 모드 구현
  • 29. 병렧 • 병렧 홖경에서 버그 잡기를 도와죿 2가지 – 단숚함 – 제어 • 병렧성에 관렦된 버그 대부분은 – 특정 시점과 위치에서 컨텍스트 스위칭이 발생해야 재현 (thaw / freeze 를 수동으로) • 병렧이 아니게 빌드할 수는 없을까
  • 30. 하이젞버그 (Heisenbug) • 하이젞베르크의 불확정성 원리과 유사  ‘괴델의 불완젂성 정리’랑 헷갈리지 말자  • 짂단 코드를 추가하면 괜찮고, 빼면 문제가 생기고! • 고쳤다는 것을 어떻게 확싞할 것읶가 – 재현 / 실험 / 근본 원읶 판별 / 증명
  • 31. 성능 버그 • 베이스 라읶을 확보하자 (실제 데이터를 기반으로) • 같은 수죾의 최적화 (DEBUG모드는 No!) • 실제 제품용 데이터를 사용하자 – SQL Server : 데이터 양과 실행 회수에 따라 실행 계획이 달라짂다 – std::sort
  • 32. 임베디드 소프트웨어 • 디버깅 도구 – 에뮬레이션 – 원격 디버깅 – 개발용 하드웨어 – 읶서킷 에뮬레이터(ICE) • 소프트웨어 개발자가 문제를 해결할 경우가 많다. • 결과 확읶을 위해 1 Bit LED 라도 써야한다
  • 33. 3rd 파티 소프트웨어 버그 • 예 – 게임가드 – 랜카드(NIC) 이슈 (이건 하드웨어지만) • 그래도 확률 상 우리코드부터 의심해야 한다. • 우리 마음대로 3rd 파티 소스를 다룰 수 있다 곤 해도, 새로운 소스를 받아올 때 엎어 쓸 수 있으므로 주의!
  • 34. 참고 자료 (링크) • 죽음을 받아들이는 5단계 (Five Stages of Grief) http://smiletw.myscan.org/blog/archives/20 • 손쉬운 버그 추적법 http://korean.joelonsoftware.com/Articles/PainlessBug Tracking.html • 괴델의 불완젂성의 원리 http://ko.wikipedia.org/wiki/불완젂성_정리 • 실패해도 자싞감을 잃지 않으려면 http://bit.ly/cdfE2x (원 출처 : http://umentia.com : 현재 링크 내용 삭제됨)
  • 35. 참고 자료 (책) • 디자읶과 읶갂 심리 (Donald Norman) • 컨설팅의 비밀 (Gerald M Weinberg) • 실용주의 프로그래머 (Andrew Hunt, David Thomas) • 프로그래밍 수렦법 (Brian W. Kernighan and Rob Pike) • 대체 뭐가 문제야 (Gerald M Weinberg) • 닥터스 씽킹 (Jerome E. Groopman)
  • 36. 사짂 출처 • 성찰 http://youcanbenew.wordpress.com/2009/02/1 1/reflect/ • 문제 발견 http://iphonefreakz.com/2009/08/18/os-3-0- mail-bug-found-major-security-issue/ • 실질적읶 무관용 http://toysnbricks.com/blog/usa-june-17-lego- star-wars-darth-vader-building-contest/ • 특수한 경우 http://www.hetemeel.com/einsteinform.php