SlideShare a Scribd company logo
1 of 30
프로그램은 왜 실패하는가 12장 Cause and Effect원인과 결과 아키텍트를 꿈꾸는 사람들 (http://andstudy.com) 현수명(soomong80@gmail.com)
Cause 원인 Effect 결과 사건 A 가 사건 B 보다 먼저 일어나며 사건 A 가 일어나지 않으면 사건 B 도 일어나지 않을때 사건 A 를 원인 (cause) , 사건 B 를 결과 (effect) 라고 부른다.
원인 그리고 대안의 세계 원인의 검증 인과관계의 예 실제 원인 찾기 원인 좁히기 차이 좁히기의 예 공통 문맥 디버깅에서의 원인들
실패하는 세계 통과하는 세계
역사속에서 원인을찾으려면  어떻게해야할까? 과거로 돌아가서  원인을 제거하고  역사를 반복한다
원인을 제거하고 실제세계와 최대한 근접한 세계를 만들자! Alternate world 대안세계 Real world 실패하는 세계 비실패 원인들 실패  원인들 공통 문맥 Alternate world 통과하는 세계 즉 실제세계와 대안세계의 차이가 문제의 원인이 된다.
[object Object],원인의 검증 인과관계의 예 실제 원인 찾기 원인 좁히기 차이 좁히기의 예 공통 문맥 디버깅에서의 원인들
“주어진 무언가가 해당 실패의 원인인지를 어떻게 알 수 있을까?” Cause!! 이것다음에, 따라서 이것 때문에 posthoc ergo propter hoc 지금 맥락에서 한 비정상 다음에 실패가 일어났다면 그 비정상이  실패의 원인일 것이다.
[object Object]
원인의 검증인과관계의 예 실제 원인 찾기 원인 좁히기 차이 좁히기의 예 공통 문맥 디버깅에서의 원인들
a = compare_value(); printf(“a = %d”, a); a = 0 어떤것도, 심지어  명백해 보이는것도 믿어서는 안된다. 가설 : a 가 0 이라는 점이 a = 0 이 출력된 원인이다. 가설 : compare_value함수 수행결과가 0 일 것이다.
가설 : a 가 0 이라는 점이 a = 0 이 출력된 원인이다. 가설 : compare_value함수 수행결과가 0 일 것이다. 원인을 제거한 Alternate world 를만들자 a = compare_value(); a = 1; printf(“a = %d”, a); a = 0
가설 : a 값에 관계없이 항상 a = 0 이 출력된다. double a; … a = compare_value(); printf(“a = %d”, a); 가설 : %d 가원인! a = compare_value(); printf(“a = %f”, a); a = 1.5
Alternate world를 만들어서 실험. 통과하는 세계 디버깅에서의 실험은  인과관계를 증명하는 유일한 방법이다. 그럼 재현이 안되는 경우는?
[object Object]
원인의 검증
인과관계의 예실제 원인 찾기 원인 좁히기 차이 좁히기의 예 공통 문맥 디버깅에서의 원인들
실패가 나타나지 않도록  프로그램을 변경하는 방법은 많다. 그리고 각 변경은  각각 하나의 실패원인을 가지고있으니 실패의 원인도 수없이 많다고 할수있다. ,[object Object]
 코드 전체가 실패의 원인이다.
 전기,수학,컴퓨터의 존재자체가 원인이다.이건 좀-_-
그럼 실패의 실제 원인을  어떻게 찾아내는가? 오컴의 면도날 Ockham’s Razor 어떠한 결과를 설명하는 이론이 여러 개 있다면 그중 가장 단순한 것을 고르라 두 원인 중 하나를 골라야 할때 그 대안세계가 실제세계에  더 가까운 것을 선택하라
[object Object]
원인의 검증
인과관계의 예
실제 원인 찾기원인 좁히기 차이 좁히기의 예 공통 문맥 디버깅에서의 원인들
실패결과가 발생하지 않는 대안세계를 찾아낸다. 실제세계와의 초기 차이를 좁혀 나간다. Alternate world를 찾기 통과하는 세계 어려운 것은  대안세계의 실패에 관련된 다른행동이 나오게 만드는  또 다른 차이를 식별하는 것이다. 그 차이를 점차 좁힘으로써 결국은 실제 원인을 찾게 된다.
[object Object]
원인의 검증
인과관계의 예
실제 원인 찾기

More Related Content

Viewers also liked

[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술hyun soomyung
 
The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5hyun soomyung
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audiohyun soomyung
 
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조hyun soomyung
 
역사 비교 한국 Vs 베트남
역사 비교 한국 Vs  베트남역사 비교 한국 Vs  베트남
역사 비교 한국 Vs 베트남Hye jean
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Designhyun soomyung
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniqueshyun soomyung
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부hyun soomyung
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장hyun soomyung
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)hyun soomyung
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법hyun soomyung
 
Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systemshyun soomyung
 

Viewers also liked (15)

Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술
 
The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audio
 
MapReduce
MapReduceMapReduce
MapReduce
 
이산수학 Ch.5
이산수학 Ch.5이산수학 Ch.5
이산수학 Ch.5
 
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조
 
역사 비교 한국 Vs 베트남
역사 비교 한국 Vs  베트남역사 비교 한국 Vs  베트남
역사 비교 한국 Vs 베트남
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systems
 

More from hyun soomyung

아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개hyun soomyung
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10hyun soomyung
 
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALThe Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALhyun soomyung
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 

More from hyun soomyung (6)

아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개
 
MongoDB
MongoDBMongoDB
MongoDB
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10
 
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALThe Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXAL
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
Erlang
ErlangErlang
Erlang
 

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