| 000 | 00923camccc200301 k 4500 | |
| 001 | 000045331090 | |
| 005 | 20100805091404 | |
| 007 | ta | |
| 008 | 070206s2006 ggka b 001c kor | |
| 020 | ▼a 8955508603 | |
| 024 | 3 1 | ▼a 9788955508604 ▼d 93560 |
| 035 | ▼a (KERIS)BIB000010791263 | |
| 040 | ▼a 241047 ▼d 211009 | |
| 041 | 1 | ▼a kor ▼h eng |
| 082 | 0 4 | ▼a 005.1/4 ▼2 22 |
| 090 | ▼a 005.14 ▼b 2006a | |
| 100 | 1 | ▼a Zeller, Andreas ▼0 AUTH(211009)123240 |
| 245 | 1 0 | ▼a 프로그램은 왜 실패하는가? : ▼b 체계적인 디버깅 입문 가이드 / ▼d Andreas Zeller ; ▼e 류광 역. |
| 246 | 1 9 | ▼a Why programs fail : a guide to systematic debugging. |
| 260 | ▼a 파주 : ▼b 사이텍미디어 , ▼c 2006. | |
| 300 | ▼a 585 p. : ▼b 삽도 ; ▼c 24 cm. | |
| 504 | ▼a 참고문헌(p. 555-569), 색인수록 | |
| 586 | ▼a Jolt Award 기술서적 분야 생산성 부문, 2006 | |
| 650 | 0 | ▼a Debugging in computer science. |
| 700 | 1 | ▼a 류광 , ▼e 역 |
| 900 | 1 1 | ▼a 유광 |
| 945 | ▼a KINS |
소장정보
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 중앙도서관/교육보존B/교육보존20 | 청구기호 005.14 2006a | 등록번호 111401618 (1회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. 2 | 소장처 중앙도서관/제2자료실(3층)/ | 청구기호 005.14 2006a | 등록번호 111401619 (1회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. 3 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.14 2006a | 등록번호 121140625 (7회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. 4 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.14 2006a | 등록번호 121140626 (10회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 중앙도서관/교육보존B/교육보존20 | 청구기호 005.14 2006a | 등록번호 111401618 (1회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. 2 | 소장처 중앙도서관/제2자료실(3층)/ | 청구기호 005.14 2006a | 등록번호 111401619 (1회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.14 2006a | 등록번호 121140625 (7회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. 2 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.14 2006a | 등록번호 121140626 (10회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
컨텐츠정보
책소개
이 책의 핵심 컨셉은 '체계적이고 과학적인 디버깅'이라고 할 수 있다. 단순히 '이렇게 하면 좋다', '이러면 잘 된다'가 아니라 수학적, 논리적 분석 틀과 이론적인 기반까지 제공하고 있어 모든 프로그래밍 언어, 모든 수준의 프로그래밍 경험에 적합하다.
프로그램을 최선의 방식으로 교정하는 방법에 대해 설명하며, 독자 스스로 자동화된 디버깅 도구를 작성하는 방법도 알려준다. 또 독학을 위한 연습문제와 심화 연구를 위한 상세한 참고자료를 담고 있고, 모든 예제들의 소스 코드와 추가적인 디버깅 자료가 포함된 웹사이트도 제공한다.
정보제공 :
저자소개
Andreas Zeller(지은이)
독일 Sarrland University의 교수로, 주된 연구 분야는 프로그래머 생산성이다.
류광(옮긴이)
도널드 커누스 교수의 《컴퓨터 프로그래밍의 예술》 시리즈를 비롯해 다양한 IT 전문서를 번역한 전문 번역가이다. 생성형 AI 관련 번역서로는 《마스터링 트랜스포머》 《실전! RAG 기반 생성형 AI 개발》 《LLM 인 프로덕션》 《AI 에이전트 인 액션》 등이 있다. 개인 웹사이트 류광의 번역 이야기(https://occamsrazr.net)와 IT 및 게임 개발 정보 공유 사이트 GpgStudy.com(https://gpgstudy.com)을 운영한다.
목차
목차 추천사 = xix 추천사 = xxii 머릿말 = xxv 역자의 글 = xxxvi 1장 실패는 어떻게 일어나는가 = 1 1.1 프로그램이 이상해요! = 2 1.2 결함에서 실패로 = 4 1.3 시간과 공간속에서의 디버깅 = 7 1.4 실패에서 교정으로 = 13 1.5 자동화된 디버깅 기법들 = 20 1.6 버그, 잘못, 결함? = 25 1.7 개념 = 28 1.8 도구 = 31 1.9 더 읽을거리 = 31 1.10 연습문제 = 34 2장 문제점 추적 = 37 2.1 문제점 = 37 2.2 문제점 보고 = 39 2.3 문제점 관리 = 44 2.4 문제점 분류 = 46 2.4.1 심각도 = 47 2.4.2 우선순위 = 48 2.4.3 식별자 = 48 2.4.4 주석 = 48 2.4.5 통지 = 49 2.5 문제점 처리 = 49 2.6 문제점 추적의 관리 = 53 2.7 요구사항으로서의 문제점 = 55 2.8 중복의 관리 = 56 2.9 문제점과 교정의 연계 = 59 2.10 문제점과 테스트의 연계 = 62 2.11 개념 = 65 2.12 도구 = 67 BugZilla = 67 phpBugTracker = 67 IssueTracker = 68 Trac = 68 SourceForge = 68 GForge = 69 2.13 더 읽을 거리 = 69 2.14 연습문제 = 70 3장 프로그램을 실패하게 만들기 = 73 3.1 디버깅을 위한 테스트 = 73 3.2 프로그램 제어 = 70 3.3 표현층에서의 테스트 = 80 3.3.1 저수준 상호작용 = 80 3.3.2 시스템 수준 상호작용 = 83 3.3.3 고수준 상호작용 = 83 3.3.4 테스트 결과 평가 = 85 3.4 기능층에서의 테스트 = 86 3.5 단위층에서의 테스트 = 89 3.6 단위의 격리 = 95 3.7 디버깅을 위한 설계 = 100 3.8 알려지지 않은 문제점 방지 = 104 3.9 개념 = 107 3.10 도구 = 109 JUnit = 109 Android = 109 AppleScript = 109 VBScript = 110 기타 스크립팅 언어들 = 110 FAUmachine = 110 VMWare = 110 Virtual PC = 110 3.11 더 읽을거리 = 111 3.12 연습문제 = 112 4장 문제점 재현 = 115 4.1 디버깅의 첫 번째 과제 = 115 4.2 문제점 환경의 재현 = 117 4.3 문제점 수행의 재현 = 121 4.3.1 자료의 재현 = 124 4.3.2 사용자 상호작용의 재현 = 124 4.3.3 통신의 재현 = 127 4.3.4 시간의 재현 = 128 4.3.5 무작위성의 재현 = 129 4.3.6 운영 환경의 재현 = 130 4.3.7 일정의 재현 = 133 4.3.8 물리적 영향 = 136 4.3.9 디버깅 도구의 영향 = 137 4.4 시스템 상호작용의 재현 = 141 4.5 단위에서의 재현 = 142 4.5.1 제어층 설정 = 142 4.5.2 제어 예제 = 144 4.5.3 모크 객체 = 147 4.5.4 더 많은 상호작용의 제어 = 150 4.6 개념 = 151 4.7 도구 = 153 WinRunner = 153 Android = 153 Revirt = 153 체크포인트 도구들 = 153 4.8 더 읽을거리 = 154 4.9 연습문제 = 154 5장 문제점 단순화 = 157 5.1 문제점 단순화 = 157 5.2 Gecko BugAThon = 160 5.3 수동 단순화 = 163 5.4 자동 단순화 = 165 5.5 단순화 알고리즘 = 169 5.6 사용자 상호작용 단순화 = 177 5.7 무작위 입력의 단순화 = 178 5.8 더 빠른 단순화 = 180 5.8.1 캐싱 = 180 5.8.2 일찍 중단 = 181 5.8.3 구문적 단순화 = 182 5.8.4 상황이 아니라 차이를 격리 = 184 5.9 개념 = 185 5.10 도구 = 187 델타 디버깅 = 187 단순화 라이브러리 = 187 5.11 더 읽을거리 = 187 5.12 연습문제 = 188 6장 과학적 디버깅 = 193 6.1 디버깅 도사가 되려면 = 193 6.2 과학적 방법 = 194 6.3 과학적 방법의 적용 = 198 6.3.1 sample 디버깅 - 준비 = 198 6.3.2 sample 디버깅 - 가설 1 = 199 6.3.3 sample 디버깅 - 가설 2 = 199 6.3.4 sample 디버깅 - 가설 3 = 200 6.3.5 sample 디버깅 - 가설 4 = 200 6.4 명시적 디버깅 = 202 6.5 일지 관리 = 204 6.6 간이 디버깅 = 206 6.7 알고리즘적 디버깅 = 206 6.8 가설 이끌어내기 = 211 6.9 프로그램 추론 = 214 6.10 개념 = 217 6.11 더 읽을 거리 = 219 6.12 연습문제 = 220 7장 오류 연역 = 223 7.1 값 근원의 격리 = 223 7.2 제어 흐름 이해하기 = 225 7.3 의존성 추적 = 229 7.3.1 문장이 주는 영향 = 230 7.3.2 문장이 받는 영향 = 232 7.3.3 문장 의존성 = 233 7.3.4 의존성 따라가기 = 235 7.3.5 의존성 활용 = 236 7.4 프로그램 슬라이싱 = 237 7.4.1 전방 슬라이스 = 237 7.4.2 후방 슬라이스 = 238 7.4.3 슬라이스 연산들 = 239 7.4.4 슬라이스 활용 = 241 7.4.5 실행 가능한 슬라이스 = 242 7.5 코드 악취의 연역 = 243 7.6 정적 분석의 한계 = 250 7.7 개념 = 256 7.8 도구 = 257 CodeSurfer = 257 FindBugs = 257 7.9 더 읽을거리 = 258 7.10 연습문제 = 259 8장 사실 관찰 = 263 8.1 상태의 관찰 = 263 8.2 실행 로깅 = 265 8.2.1 로깅 함수 = 267 8.2.2 로깅 프레임웍 = 272 8.2.3 애스펙트를 이용한 로깅 = 275 8.2.4 이진 수준의 로깅 = 280 8.3 디버거 활용 = 283 8.3.1 예제 디버깅 세션 = 284 8.3.2 수행의 제어 = 289 8.3.3 사후 디버깅 = 289 8.3.4 자료 로깅 = 291 8.3.5 함수 호출 = 292 8.3.6 교정 및 재개 = 293 8.3.7 디버거 내장 = 293 8.3.8 디버거 주의사항 = 294 8.4 사건 질의 = 295 8.4.1 감시점 = 296 8.4.2 균일한 사건 질의 = 298 8.5 상태의 시각화 = 300 8.6 개념 = 303 8.7 도구 = 304 Log4j = 304 AspectJ = 305 PIN = 305 BCEL = 305 GDB = 305 DDD = 305 Java Spider = 306 eDOBS = 306 8.8 더 읽을거리 = 306 8.9 연습문제 = 307 9장 근원 추적 = 315 9.1 후방 추론 = 315 9.2 수행 내력 탐색 = 316 9.3 동적 슬라이싱 = 319 9.4 근원 활용 = 324 9.5 감염 추적 = 328 9.6 개념 = 330 9.7 도구 = 330 ODB = 330 9.8 더 읽을거리 = 331 9.9 연습문제 = 332 10장 기대의 단언 = 335 10.1 관찰 자동화 = 335 10.2 기본적인 단언들 = 337 10.3 불변식의 단언 = 340 10.4 정확성의 단언 = 345 10.5 명세로서의 단언 = 348 10.6 단언에서 검증으로 = 350 10.7 기준 실행 = 354 10.8 시스템 단언 = 358 10.8.1 MALLOC_CHECK_를 이용한 힙 유효성 확인 = 359 10.8.2 ElectricFence를 이용한 버퍼 넘침 방지 = 360 10.8.3 Valgrind를 이용한 메모리 오류 검출 = 360 10.8.4 언어 확장 = 363 10.9 제품용 코드의 점검 = 366 10.10 개념 = 369 10.11 도구 = 370 JML = 370 ESC/Java = 371 Guard = 371 Valgrind = 371 Purify = 371 Insure++ = 371 Cyclone = 372 CCured = 372 10.12 더 읽을거리 = 372 10.13 연습문제 = 375 11장 비정상 검출 = 381 11.1 정상 행동 파악 = 381 11.2 포괄도 비교 = 384 11.3 통계적 디버깅 = 390 11.4 현장에서 자료 수집 = 392 11.5 동적 불변식 = 395 11.6 즉석 불변식 = 400 11.7 비정상에서 결함으로 = 403 11.8 개념 = 404 11.9 도구 = 405 Daikon = 405 DIDUCE = 406 11.10 더 읽을거리 = 406 11.11 연습문제 = 408 12장 원인과 결과 = 411 12.1 원인 그리고 대안의 세계 = 411 12.2 원인의 검증 = 414 12.3 인과관계의 예 = 415 12.4 실제 원인 찾기 = 418 12.5 원인 좁히기 = 420 12.6 차이 좁히기의 예 = 421 12.7 공통 문맥 = 422 12.8 디버깅에서의 원인들 = 423 12.9 개념 = 425 12.10 더 읽을거리 = 426 12.11 연습문제 = 427 13장 실패 원인의 격리 = 431 13.1 원인의 자동적인 격리 = 431 13.2 격리 대 단순화 = 433 13.3 격리 알고리즘 = 436 13.4 격리 알고리즘 구현 = 440 13.5 실패 유발 입력의 격리 = 443 13.6 실패 유발 일정의 격리 = 443 13.7 실패 유발 변경의 격리 = 448 13.8 문제와 한계 = 455 13.9 개념 = 459 13.10 도구 = 460 Eclipse용 델타 디버깅 플러그인 = 460 ccache = 460 13.11 더 읽을거리 = 460 13.12 연습문제 = 461 14장 인과 사슬의 격리 = 465 14.1 쓸모없는 원인들 = 465 14.2 프로그램 상태 갈무리 = 469 14.3 프로그램 상태들의 비교 = 474 14.4 유관 프로그램 상태의 격리 = 477 14.5 인과 사슬의 격리 = 482 14.6 실패 유발 코드의 격리 = 488 14.7 주의사항 및 위험 = 494 14.8 개념 = 497 14.9 도구 = 499 AskIgor = 499 Igor = 499 14.10 더 읽을거리 = 499 14.11 연습문제 = 501 15장 결함 고치기 = 503 15.1 결함 찾기 = 503 15.2 가장 유망한 오류에 집중 = 505 15.3 결함의 유효성 확인 = 508 15.3.1 오류가 실패를 유발하는가? = 509 15.3.2 원인이 실제로 오류인가? = 510 15.3.3 코딩하기 전에 생각부터 = 512 15.4 결함의 정정 = 513 15.4.1 실패가 더 이상 발생하지 않는가? = 514 15.4.2 정정이 새로운 문제점을 도입하지는 않았는가? = 515 15.4.3 같은 실수를 다른 곳에서 한 적이 있는가? = 516 15.4.4 마무리 작업 = 517 15.5 우회책 = 518 15.6 실수에서 배운다 = 520 15.7 개념 = 524 15.8 더 읽을거리 = 525 15.9 연습문제 = 526 부록A 공식적인 정의들 = 529 A.1 델타 디버깅 = 529 A.1.1 구성 = 529 A.1.2 통과 실행과 실패 실행 = 530 A.1.3 테스트 = 530 A.1.4 최소성 = 531 A.1.5 단순화 = 531 A.1.6 차이 = 532 A.1.7 격리 = 533 A.2 메모리 그래프 = 534 A.2.1 공식 구조 = 534 A.2.2 자료구조 펼치기 = 536 A.2.3 정점들과 간선들의 부합 = 538 A.2.4 공통 부분그래프 구하기 = 539 A.2.5 그래프 차이 구하기 = 540 A.2.6 부분 상태 변경들의 적용 = 543 A.2.7 C 상태 갈무리 = 543 A.3 인과 사슬 = 546 용어집 = 549 참고문헌 = 555 색인 = 571
