Your SlideShare is downloading. ×
프로그램은 왜 실패하는가?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

프로그램은 왜 실패하는가?

710
views

Published on

아꿈사 스터디 - 프로그램은 왜 실패하는가? …

아꿈사 스터디 - 프로그램은 왜 실패하는가?
2009.08

Published in: Technology, Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
710
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 프로그램은 왜 실패하는가
    12장 Cause and Effect원인과 결과
    아키텍트를 꿈꾸는 사람들 (http://andstudy.com)
    현수명(soomong80@gmail.com)
  • 2. Cause 원인
    Effect 결과
    사건 A 가 사건 B 보다 먼저 일어나며
    사건 A 가 일어나지 않으면
    사건 B 도 일어나지 않을때
    사건 A 를 원인 (cause) ,
    사건 B 를 결과 (effect) 라고 부른다.
  • 3. 원인 그리고 대안의 세계
    원인의 검증
    인과관계의 예
    실제 원인 찾기
    원인 좁히기
    차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 4. 실패하는 세계
    통과하는 세계
  • 5. 역사속에서 원인을찾으려면
    어떻게해야할까?
    과거로 돌아가서
    원인을 제거하고
    역사를 반복한다
  • 6. 원인을 제거하고 실제세계와
    최대한 근접한 세계를 만들자!
    Alternate world 대안세계
    Real world
    실패하는 세계
    비실패
    원인들
    실패
    원인들
    공통 문맥
    Alternate world
    통과하는 세계
    즉 실제세계와 대안세계의 차이가
    문제의 원인이 된다.
  • 7.
    • 원인 그리고 대안의 세계
    원인의 검증
    인과관계의 예
    실제 원인 찾기
    원인 좁히기
    차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 8. “주어진 무언가가 해당 실패의 원인인지를 어떻게 알 수 있을까?”
    Cause!!
    이것다음에, 따라서 이것 때문에
    posthoc ergo propter hoc
    지금 맥락에서 한 비정상 다음에
    실패가 일어났다면 그 비정상이
    실패의 원인일 것이다.
  • 9.
    • 원인 그리고 대안의 세계
    • 10. 원인의 검증
    인과관계의 예
    실제 원인 찾기
    원인 좁히기
    차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 11. a = compare_value();
    printf(“a = %d ”, a);
    a = 0
    어떤것도, 심지어
    명백해 보이는것도
    믿어서는 안된다.
    가설 : a 가 0 이라는 점이 a = 0 이 출력된 원인이다.
    가설 : compare_value함수 수행결과가 0 일 것이다.
  • 12. 가설 : a 가 0 이라는 점이 a = 0 이 출력된 원인이다.
    가설 : compare_value함수 수행결과가 0 일 것이다.
    원인을 제거한 Alternate world 를만들자
    a = compare_value();
    a = 1;
    printf(“a = %d ”, a);
    a = 0
  • 13. 가설 : a 값에 관계없이 항상 a = 0 이 출력된다.
    double a;

    a = compare_value();
    printf(“a = %d ”, a);
    가설 : %d 가원인!
    a = compare_value();
    printf(“a = %f ”, a);
    a = 1.5
  • 14. Alternate world를 만들어서 실험.
    통과하는 세계
    디버깅에서의 실험은
    인과관계를 증명하는 유일한 방법이다.
    그럼 재현이 안되는 경우는?
  • 15.
    • 원인 그리고 대안의 세계
    • 16. 원인의 검증
    • 17. 인과관계의 예
    실제 원인 찾기
    원인 좁히기
    차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 18. 실패가 나타나지 않도록
    프로그램을 변경하는 방법은 많다.
    그리고 각 변경은
    각각 하나의 실패원인을 가지고있으니
    실패의 원인도 수없이 많다고 할수있다.
    • printf문 전체가 실패의 원인이다.
    • 19. 코드 전체가 실패의 원인이다.
    • 20. 전기,수학,컴퓨터의 존재자체가 원인이다.
    이건 좀-_-
  • 21. 그럼 실패의 실제 원인을
    어떻게 찾아내는가?
    오컴의 면도날
    Ockham’s Razor
    어떠한 결과를 설명하는 이론이
    여러 개 있다면 그중
    가장 단순한 것을 고르라
    두 원인 중 하나를 골라야 할때
    그 대안세계가 실제세계에
    더 가까운 것을 선택하라
  • 22.
    • 원인 그리고 대안의 세계
    • 23. 원인의 검증
    • 24. 인과관계의 예
    • 25. 실제 원인 찾기
    원인 좁히기
    차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 26. 실패결과가 발생하지 않는 대안세계를 찾아낸다.
    실제세계와의 초기 차이를 좁혀 나간다.
    Alternate world를 찾기
    통과하는 세계
    어려운 것은
    대안세계의 실패에 관련된 다른행동이 나오게 만드는
    또 다른 차이를 식별하는 것이다.
    그 차이를 점차 좁힘으로써 결국은 실제 원인을 찾게 된다.
  • 27.
    • 원인 그리고 대안의 세계
    • 28. 원인의 검증
    • 29. 인과관계의 예
    • 30. 실제 원인 찾기
    • 31. 원인 좁히기
    차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 32. 프리젠테이션 원격조정 프로그램
    최근 upgrade 후 비정상종료 (이전 계정사용)
    실험끝에 Alternate world 를 찾았음! (새로운 계정사용)
    이전계정과 새로운 계정의 차이를 좁히기
    Alternate world
    새로운 사용자 계정으로
    모든것을 새로 설정
    Real world
    프로그램 upgrade
    (이전 계정설정)
  • 33.
    • 원인 그리고 대안의 세계
    • 34. 원인의 검증
    • 35. 인과관계의 예
    • 36. 실제 원인 찾기
    • 37. 원인 좁히기
    • 38. 차이 좁히기의 예
    공통 문맥
    디버깅에서의 원인들
  • 39. 두 세계에서 차이가 나지 않는 측면
    Alternate world
    통과하는 세계
    Real world
    실패하는 세계
    Common Context
    공통문맥
    공통문맥은 실패원인이 아니다!
  • 40.
    • 원인 그리고 대안의 세계
    • 41. 원인의 검증
    • 42. 인과관계의 예
    • 43. 실제 원인 찾기
    • 44. 원인 좁히기
    • 45. 차이 좁히기의 예
    • 46. 공통 문맥
    디버깅에서의 원인들
  • 47. 입력
    실패가 발생한 실행의 실제 입력과
    실패가 발생하지 않는 가장 가까운 입력
    사이의 최소 차이이다.
    상태
    실패가 발생한 실행의 실제 프로그램 상태와
    실패가 발생하지 않는 가장 가까운 상태
    사이의 최소 차이이다.
    코드
    실패가 발생한 실제 프로그램코드와
    실패가 발생하지 않는 가장 가까운 코드
    사이의 최소 차이이다.
  • 48.
    • 원인 그리고 대안의 세계
    • 49. 원인의 검증
    • 50. 인과관계의 예
    • 51. 실제 원인 찾기
    • 52. 원인 좁히기
    • 53. 차이 좁히기의 예
    • 54. 공통 문맥
    • 55. 디버깅에서의 원인들
    • 56. 디버깅 사례
  • Real world
    실패하는 세계
    해당화면 진입시
    폰비정상 종료
    2일안에 해결못하면
    큰일나는 상황
    아무리 찾아봐도
    코드에는 전혀 문제없음
  • 57. Alternate world
    통과하는 세계
    임의로 Thumbnail
    안나오도록 수정하니
    문제발생 안함
    이 대안세계는
    너무 민망함
  • 58. class Thumbnail
    {
    static map<key,thumb> m;
    ...
    }
    static map 에 무언가를 insert 하는순간 문제발생
    시간이 얼마 없다.
    일단 민망하지않은 대안세계부터 만들자
  • 59. class Thumbnail
    {
    //static map<key,thumb> m;
    thumbMap.getInstance().m;
    ...
    }
    class ThumbMap
    {
    private:
    ThumbMap();
    public:
    map<key,thumb> m;
    }
    static 대신에
    singleton class 로 변경
    문제발생안함
  • 60. 일단 급한 일정을 넘기고
    진짜 원인이 무엇인지 다시 분석
    BaseChip 에서 STL 을 static 하게
    사용할경우 문제가 있었음

×