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
26. 실패결과가 발생하지 않는 대안세계를 찾아낸다. 실제세계와의 초기 차이를 좁혀 나간다. Alternate world를 찾기 통과하는 세계 어려운 것은 대안세계의 실패에 관련된 다른행동이 나오게 만드는 또 다른 차이를 식별하는 것이다. 그 차이를 점차 좁힘으로써 결국은 실제 원인을 찾게 된다.
32. 프리젠테이션 원격조정 프로그램 최근 upgrade 후 비정상종료 (이전 계정사용) 실험끝에 Alternate world 를 찾았음! (새로운 계정사용) 이전계정과 새로운 계정의 차이를 좁히기 Alternate world 새로운 사용자 계정으로 모든것을 새로 설정 Real world 프로그램 upgrade (이전 계정설정)
47. 입력 실패가 발생한 실행의 실제 입력과 실패가 발생하지 않는 가장 가까운 입력 사이의 최소 차이이다. 상태 실패가 발생한 실행의 실제 프로그램 상태와 실패가 발생하지 않는 가장 가까운 상태 사이의 최소 차이이다. 코드 실패가 발생한 실제 프로그램코드와 실패가 발생하지 않는 가장 가까운 코드 사이의 최소 차이이다.
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 하게 사용할경우 문제가 있었음