로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 
[체계적인 디버깅 지침서] 

프로그램은 왜 실패하는가

   
지은이 Andreas Zeller   |   출판사 사이텍미디어  |   발행일 2006년 12월 20일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 28,000원27,440원 2%
마일리지 0% 0원
발행일 2006-12-20 | 사이즈: 18.2*25.7
ISBN 8955508603 | 9788955508604
기타정보 국내서 | 585쪽
예상출고일
배송비 무료배송
   
프로그래밍
종합지수 5p 82 위
   
이 책의 원서
  Why Programs Fail: A Guide to Systematic Debugging
Morgan Kaufmann | Andreas Zeller
 

이 책의 특징

* 모든 프로그래밍 언어, 모든 수준의 프로그래밍 경험에 적합하다.
* 프로그램을 최선의 방식으로 교정하는 방법에 대해 설명하며, 독자 스스로 자동화된 디버깅 도구를 작성하는 방법도 알려준다.
* 독학을 위한 연습문제와 심화 연구를 위한 상세한 참고자료를 담고 있으며, 모든 예제들의 소스 코드와 추가적인 디버깅 자료가 포함된 웹사이트도 제공한다.

추천사

‘왜 프로그램이 실패할까?’ 이 책의 제목이기도 한 이 문구는 소프트웨어 개발자들의 수명을 단축시키는 가장 큰 요인 중의 하나일 것이다. 많은 소프트웨어 개발자가 하루에도 수없이 되뇌이는 말이자, 그에 대한 답을 스스로 찾아내야 하는 고난의 시작을 알리는 신호탄이기도 하다. 하지만 이 책의 제목은 많은 사람들의 관심을 끌기 위한 일명 ‘낚시(trolling)’용일뿐, 실제로 저자가 하고자 했던 핵심적인 말은 부제로 사용된 ‘시스템적인 디버깅을 위한 지침서(A Guide to Systematic Debugging)’라고 생각한다. 디버깅 관련 컨퍼런스를 진행하거나 컨설팅을 해보면 쉽게 해결할 수 있는 문제를 며칠 동안 고생하고도 해결하지 못하는 개발자들을 심심찮게 만날 수 있다. 조금만 더 ‘시스템적’으로 접근했다면 나의 도움 없이도 쉽게 해결할 수 있지 않았을까라는 생각을 많이 하게 된다. 그렇다면 과연 시스템적인 디버깅이란 과연 무엇을 말하는 것일까? 결론부터 말하자면, 이 책에서 그 답을 얻을 수 있다.

오늘날에는 소프트웨어를 아무런 계획이나 절차 없이 개발하는 경우는 드물다. 왜? 실패할 확률이 높기 때문이다. 우리의 선배 개발자, 그 선배의 선배 개발자들이 맨땅에 헤딩하기 식으로 프로젝트를 진행하면서 얼마나 많은 프로젝트를 실패했는가? 자신을 스스로 소프트웨어 개발자라고 부르는 사람이라면, 소프트웨어를 개발하기 위해서 적어도 ‘요구 사항 분석 - 설계 - 개발 - 테스트 - 유지 보수’ 단계가 필요하다는 것쯤은 다 알고 있을 것이다. 자, 그럼 디버깅을 잘하기 위해서는 어떻게 해야 할까? 오류가 난 부분에 중단점(BreakPoint)을 설정하고 하나씩 따라가 보는가? 반복문에서 오류가 발생하면 ‘작거나 같다(<=)’를 ‘작다(<)’ 또는 ‘크다(>)’로 바꿔보며 문제를 해결하고 있지는 않는가? 만약 그렇다면, 여러분은 디버깅 프로세스를 학습할 필요가 있다. 이 책은 내용 구성 자체가 디버깅 프로세스를 따르고 있다.

상식적으로 생각해보자. 문제가 발생하면 그 문제가 무엇인지부터 알아내야 한다. 문제가 무엇인지도 모르면서 문제를 해결한다는 것은 어불성설(語不成說)이다. 그렇기에 2장의 제목처럼 ‘문제점 추적’ 과정을 거쳐야 한다. 문제를 해결하기 위해서는 문제를 계속해서 만들어 낼 수 있어야 한다. 문제가 무작위로 발생해서는 문제를 해결할 수 없다. 언제 발생할지도 모르는 문제를 어떻게 해결했다고 할 수 있겠는가? 따라서 4장의 ‘문제점 재현’ 과정이 필요한 것이다. 많은 개발자들은 문제점 재현 과정을 생략하기도 한다. 대부분의 문제는 ‘언제나’ 발생하니까. 하지만 우리가 밤을 지새우고 괴로움에 몸이 지치는 이유는 언제나 발생하는 문제점이 아니라 특정한 상황에서만 발생하는 문제점이기 때문에, 문제점의 무작위적인 특성을 없애야만 문제점을 쉽게 해결할 수 있다. 그 다음으로는 실제로 문제점을 해결하는 과정이 필요한데, 자세한 내용은 여러분이 직접 책을 읽어보면서 배웠으면 한다(영화 예고편에 가장 중요한 내용, 심지어는 결론까지 모든 내용을 다 소개하는 TV 프로가 가장 얄밉다).

나는 번역서가 나오기 전에 이미 이 책을 읽어보았고 주위의 많은 사람들에게 추천을 했다. 그만큼 이 책의 내용이 만족스러웠고, 이 책만큼 번역이 되어 국내 개발자들에게 디버깅에 관한 새로운 인식을 심어주었으면 좋겠다라고 생각한 책도 드물다. 그리고 이 책에 가장 적합한 역자로 ‘류광’님을 떠올렸다. (나의 바램이 이루어진 걸까?) 국내 개발자 서적의 대표 역자이신 ‘류광’님으로부터 번역에 관한 완성물을 전달받게 되었고 책을 읽고 난 후, 이 책이 ‘류광’님의 책으로 다시 태어났음을 알게 되었다. 이해하기 쉽게 쓰였음은 물론이거니와 독자들을 위한 ‘역주’에 많은 노력을 기울였음을 알 수 있다. 쉽지 않은 내용과 많은 분량에도 불구하고 작업을 마무리해주신 류광님께 박수를 보내고 싶고, 많은 국내 개발자분들이 이 책으로부터 시스템적인 디버깅에 관한 개념과 실무에 대해서 배울 수 있기를 기대한다.

서우석, wooseok.seo@gmail.com
디버깅의 모든 것, 디버그랩(http://www.debuglab.com) 운영자
한국과학기술원(KAIST) 소프트웨어 전문가 과정

추천사 xix
추천사 xxii
머릿말 xxv
역자의 글 xxxvi

1장 실패는 어떻게 일어나는가
1.1 프로그램이 이상해요!
1.2 결함에서 실패로
1.3 시간과 공간 속에서의 디버깅
1.4 실패에서 교정으로
1.5 자동화된 디버깅 기법들
1.6 버그, 잘못, 결함?
1.7 개 념
1.8 도 구
1.9 더 읽을거리
1.10 연습문제

2장 문제점 추적
2.1 문제점
2.2 문제점 보고
2.3 문제점 관리
2.4 문제점 분류
2.4.1 심각도
2.4.2 우선순위
2.4.3 식별자
2.4.4 주석
2.4.5 통지
2.5 문제점 처리
2.6 문제점 추적의 관리
2.7 요구사항으로서의 문제점
2.8 중복의 관리
2.9 문제점과 교정의 연계
2.10 문제점과 테스트의 연계
2.11 개 념
2.12 도 구
BugZilla
phpBugTracker
IssueTracker
Trac
SourceForge
GForge
2.13 더 읽을 거리
2.10 연습문제

3장 프로그램을 실패하게 만들기
3.1 디버깅을 위한 테스트
3.2 프로그램 제어
3.3 표현층에서의 테스트
3.3.1 저수준 상호작용
3.3.2 시스템 수준 상호작용
3.3.3 고수준 상호작용
3.3.4 테스트 결과 평가
3.4 기능층에서의 테스트
3.5 단위층에서의 테스트
3.6 단위의 격리
3.7 디버깅을 위한 설계
3.8 알려지지 않은 문제점 방지
3.9 개 념
3.10 도 구
JUnit
Android
AppleScript
VBScript
기타 스크립팅 언어들
FAUmachine
VMWare
Virtual PC
3.11 더 읽을거리
3.12 연습문제

4장 문제점 재현
4.1 디버깅의 첫 번째 과제
4.2 문제점 환경의 재현
4.3 문제점 수행의 재현
4.3.1 자료의 재현
4.3.2 사용자 상호작용의 재현
4.3.3 통신의 재현
4.3.4 시간의 재현
4.3.5 무작위성의 재현
4.3.6 운영 환경의 재현
4.3.7 일정의 재현
4.3.8 물리적 영향
4.3.9 디버깅 도구의 영향
4.4 시스템 상호작용의 재현
4.5 단위에서의 재현
4.5.1 제어층 설정
4.5.2 제어 예제
4.5.3 모크 객체
4.5.4 더 많은 상호작용의 제어
4.6 개 념
4.7 도 구
WinRunner
Android
Revirt
체크포인트 도구들
4.8 더 읽을거리
4.9 연습문제

5장 문제점 단순화
5.1 문제점 단순화
5.2 Gecko BugAThon
5.3 수동 단순화
5.4 자동 단순화
5.5 단순화 알고리즘
5.6 사용자 상호작용 단순화
5.7 무작위 입력의 단순화
5.8 더 빠른 단순화
5.8.1 캐싱
5.8.2 일찍 중단
5.8.3 구문적 단순화
5.8.4 상황이 아니라 차이를 격리
5.9 개 념
5.10 도 구
델타 디버깅
단순화 라이브러리
5.11 더 읽을거리
5.12 연습문제

6장 과학적 디버깅
6.1 디버깅 도사가 되려면
6.2 과학적 방법
6.3 과학적 방법의 적용
6.3.1 sample 디버깅-준비
6.3.2 sample 디버깅-가설 1
6.3.3 sample 디버깅-가설 2
6.3.4 sample 디버깅-가설 3
6.3.5 sample 디버깅-가설 4
6.4 명시적 디버깅
6.5 일지 관리
6.6 간이 디버깅
6.7 알고리즘적 디버깅
6.8 가설 이끌어내기
6.9 프로그램 추론
6.10 개 념
6.11 더 읽을 거리
6.12 연습문제

7장 오류 연역
7.1 값 근원의 격리
7.2 제어 흐름 이해하기
7.3 의존성 추적
7.3.1 문장이 주는 영향
7.3.2 문장이 받는 영향
7.3.3 문장 의존성
7.3.4 의존성 따라가기
7.3.5 의존성 활용
7.4 프로그램 슬라이싱
7.4.1 전방 슬라이스
7.4.2 후방 슬라이스
7.4.3 슬라이스 연산들
7.4.4 슬라이스 활용
7.4.5 실행 가능한 슬라이스
7.5 코드 악취의 연역
7.6 정적 분석의 한계
7.7 개 념
7.8 도 구
CodeSurfer
FindBugs
7.9 더 읽을거리
7.10 연습문제

8장 사실 관찰
8.1 상태의 관찰
8.2 실행 로깅
8.2.1 로깅 함수
8.2.2 로깅 프레임웍
8.2.3 애스펙트를 이용한 로깅
8.2.4 이진 수준의 로깅
8.3 디버거 활용
8.3.1 예제 디버깅 세션
8.3.2 수행의 제어
8.3.3 사후 디버깅
8.3.4 자료 로깅
8.3.5 함수 호출
8.3.6 교정 및 재개
8.3.7 디버거 내장
8.3.8 디버거 주의사항
8.4 사건 질의
8.4.1 감시점
8.4.2 균일한 사건 질의
8.5 상태의 시각화
8.6 개 념
8.7 도 구
Log4j
AspectJ
PIN
BCEL
GDB
DDD
Java Spider
eDOBS
8.8 더 읽을거리
8.9 연습문제

9장 근원 추적
9.1 후방 추론
9.2 수행 내력 탐색
9.3 동적 슬라이싱
9.4 근원 활용
9.5 감염 추적
9.6 개 념
9.7 도 구
ODB
9.8 더 읽을거리
9.9 연습문제

10장 기대의 단언
10.1 관찰 자동화
10.2 기본적인 단언들
10.3 불변식의 단언
10.4 정확성의 단언
10.5 명세로서의 단언
10.6 단언에서 검증으로
10.7 기준 실행
10.8 시스템 단언
10.8.1 MALLOC_CHECK_를 이용한 힙 유효성 확인
10.8.2 ElectricFence를 이용한 버퍼 넘침 방지
10.8.3 Valgrind를 이용한 메모리 오류 검출
10.8.4 언어 확장
10.9 제품용 코드의 점검
10.10 개 념
10.11 도 구
JML
ESC/Java
Guard
Valgrind
Purify
Insure++
Cyclone
CCured
10.12 더 읽을거리
10.13 연습문제

11장 비정상 검출
11.1 정상 행동 파악
11.2 포괄도 비교
11.3 통계적 디버깅
11.4 현장에서 자료 수집
11.5 동적 불변식
11.6 즉석 불변식
11.7 비정상에서 결함으로
11.8 개 념
11.9 도 구
Daikon
DIDUCE
11.10 더 읽을거리
11.11 연습문제

12장 원인과 결과
12.1 원인 그리고 대안의 세계
12.2 원인의 검증
12.3 인과관계의 예
12.4 실제 원인 찾기
12.5 원인 좁히기
12.6 차이 좁히기의 예
12.7 공통 문맥
12.8 디버깅에서의 원인들
12.9 개 념
12.10 더 읽을거리
12.11 연습문제

13장 실패 원인의 격리
13.1 원인의 자동적인 격리
13.2 격리 대 단순화
13.3 격리 알고리즘
13.4 격리 알고리즘 구현
13.5 실패 유발 입력의 격리
13.6 실패 유발 일정의 격리
13.7 실패 유발 변경의 격리
13.8 문제와 한계
13.9 개 념
13.10 도 구
Eclipse용 델타 디버깅 플러그인
ccache
13.11 더 읽을거리
13.12 연습문제

14장 인과 사슬의 격리
14.1 쓸모없는 원인들
14.2 프로그램 상태 갈무리
14.3 프로그램 상태들의 비교
14.4 유관 프로그램 상태의 격리
14.5 인과 사슬의 격리
14.6 실패 유발 코드의 격리
14.7 주의사항 및 위험
14.8 개 념
14.9 도 구
AskIgor
Igor
14.10 더 읽을거리
14.11 연습문제

15장 결함 고치기
15.1 결함 찾기
15.2 가장 유망한 오류에 집중
15.3 결함의 유효성 확인
15.3.1 오류가 실패를 유발하는가?
15.3.2 원인이 실제로 오류인가?
15.3.3 코딩하기 전에 생각부터
15.4 결함의 정정
15.4.1 실패가 더 이상 발생하지 않는가?
15.4.2 정정이 새로운 문제점을 도입하지는 않았는가?
15.4.3 같은 실수를 다른 곳에서 한 적이 있는가?
15.4.4 마무리 작업
15.5 우회책
15.6 실수에서 배운다
15.7 개 념
15.8 더 읽을거리
15.9 연습문제

부록A 공식적인 정의들
A.1 델타 디버깅
A.1.1 구성
A.1.2 통과 실행과 실패 실행
A.1.3 테스트
A.1.4 최소성
A.1.5 단순화
A.1.6 차이
A.1.7 격리
A.2 메모리 그래프
A.2.1 공식 구조
A.2.2 자료구조 펼치기
A.2.3 정점들과 간선들의 부합
A.2.4 공통 부분그래프 구하기
A.2.5 그래프 차이 구하기
A.2.6 부분 상태 변경들의 적용
A.2.7 C 상태 갈무리
A.3 인과 사슬

용어집
참고문헌
색 인
준비 중입니다.
체계적인 디버깅 지침서
김성훈님이 쓰신 서평보기 I 평점 I 조회수(1273) I 공감 (0) I 블로그
사실 프로그램 작성 만큼이나, 아니 더 중요할 수도 있는 과정이 디버깅입니다. 보통 버그는 논리적인 오류나 실수에서 자주 발생합니다. 그 코드가 영향을 끼치는 다른 코드에서 세웠던 가정이 깨졌다거나 하는 경우에 발생하기도 하죠. 이 책은 그런 부분의 이야기보다, 실서비스 되기전에 테스트를 어떻게 하면 버그를 잘 찾을 수 있을까, 또 이미 문제가 발생했다면 어떻게 찾을것인가에 대한 내용이 더 빈도있게 다뤄지고 있습니다. 이 책은 체계적인 디...
논리적인 디버깅을 위해....
최흥배님이 쓰신 서평보기 I 평점 I 조회수(949) I 공감 (0) I 블로그
이 책은 책 제목을 보면 잘 알수가 없겠지만 책 전체적으로 디버깅에 많은 이야기를 하고 있다.프로그래밍에서 디버깅은 아주 중요한 부분이지만 특성상 논리적인 정리가 힘든 분야여서 그런지 관련된 책은 거의 없는 편이라고 알고 있다.(현업에서 일을 해보면 디버깅 및 테스트에 작업 시간의 50% 이상이 소요 된다). 나를 포함한 대다수의 프로그래머들은 디버깅은 책을 통해서나 강의 듣어서 실력을 쌓은것이 아니고 일을 하다가 경험을 통해서 자연스럽게 디버깅 지식을 쌓게...
브렛 슬라킨...
김차희, 노...
유키 히로시...
 
전체평균(59)
회원평점   회원서평수 2
체계적인 디버깅 지침서
김성훈 님  2007-09-17
논리적인 디버깅을 위해....
최흥배 님  2007-03-22
류광 의 최근 저서
 
[패키지] Game Programming Gems 7 + Game Programming Gems 8
70,200원
(10%↓+5%)
 
[패키지] Game Programming Gems 6 + Game Programming Gems 7 + Game Programming Gems 8 + GAME ENGINE GEMS 1
140,400원
(10%↓+5%)
 
[패키지] Game Programming Gems 8 + GAME ENGINE GEMS 1
70,200원
(10%↓+5%)
 
프로 안드로이드 SL4A: 파이썬으로 안드로이드 앱 만들기
23,400원
(10%↓+5%)
 
Andreas Zeller 의 최근 저서
 
Hardware and Software: Verification and Testing: 5th International Haifa Verification Conference, Hcv 2009, Haifa, Israel, October 19-22, 2009, Revise
110,400원
(16%↓+1%)
 
사이텍미디어 출판사의 신간
철근 콘크리트 공학
안주옥 저
29,400원
(2%↓+0%)
 
전자회로실험
민영재, 김수원, 최광석, 황인철 저
19,600원
(2%↓+0%)
 
인공지능 개념 및 응용 4판
도용태, 김일곤, 김종완, 박창현, 강병호 저
24,500원
(2%↓+0%)
 
로봇공학의 이해
이석규, 도용태, 박창용, 이재원 저
27,440원
(2%↓+0%)
 
실용 열전달
정모, 강희찬, 김석현, 남궁규완, 강병하 저
31,360원
(2%↓+0%)
 
이메일주소수집거부