이미 소장하고 있다면 판매해 보세요.
|
프로그램은 왜 실패하는가?
추천사 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 인과 사슬 용어집 참고문헌 색 인 |