고급 소프트웨어 엔지니어로 거듭나기 위해 꼭 필요하면서도 간과하기 쉬운 디버깅 기술. 개발 플랫폼에 무관하게 전문 소프트웨어 개발자가 디버깅에 대해 알아야 할 이론과 지식, 실전 경험을 망라해둔 디버깅의 정석이 담겨 있다. 디버깅 기술은 평소 버그 있는 코드를 생성하고 이를 수정하면서 얻는 경험에서 배울 수 있다. 책에는 저자가 그렇게 얻은 생생한 경험이 적혀있다. 이 책에서 얻은 실전 경험을 바탕으로 버그를 줄이고, 버그가 있더라도 훨씬 쉽게 찾을 수 있도록 코드를 작성하는 방법을 익힐 수 있다.
소프트웨어만의 독특한 기능을 통해 실제로 어떤 일이 벌어지는지 보여줄 수 있는 경험주의적인 접근 방법, 안정적이고 편하게 버그를 재현할 수 있는 방법의 중요성, 공통적인 실수를 피할 수 있는 방법 등을 배울 수 있다. 흔히 사용되는 도구를 활용해 고객이 버그를 발견하기 전에 먼저 자동으로 찾을 수 있는지도 익힌다. 또한, 결정적인 내부 정보에 알아서 접근하고, 버그를 생성하는 깨진 가정이 어디인지 알려주는 '스스로 디버깅하는' 소프트웨어를 만들 수 있다.
Contents
1부 문제의 핵심
1장 구조적인 접근
1.1 디버깅은 '버그를 없애는 것' 그 이상이다
1.2 경험주의 접근법
1.3 핵심 디버깅 과정
1.4 중요한 일부터 먼저
1.5 실천하기
2장 재현
2.1 고민하기 전에 재현부터 해보자
2.2 소프트웨어 제어
2.3 환경 제어
2.4 입력 제어
2.5 재현 방법 다듬기
2.6 정말로 재현할 수 없다면?
2.7 실천하기
3장 진단
3.1 잠깐, 지금부턴 과학을 할 겁니다
3.2 계략
3.3 디버거
3.4 실수
3.5 심리전
3.6 진단 확인
3.7 실천하기
4장 수정
4.1 전투 준비
4.2 테스트
4.3 증상이 아닌 원인을 고친다
4.4 리팩토링
4.5 체크인
4.6 코드 리뷰 받기
4.7 실천하기
5장 반영
5.1 이게 어떻게 돌아가고 있었지?
5.2 뭐가 잘못된 거지?
5.3 다시는 이 문제가 생기지 않을꺼야
5.4 선순환 구조 만들기
5.5 실천하기
2부 큰그림
6장 문제 발견
6.1 버그 추적
6.2 고객과 작업하기
6.3 지원 팀과 일하기
6.4 실천하기
7장 실질적인 무관용
7.1 버그 우선순위
7.2 디버깅할 때의 마음가짐
7.3 품질 결함 수렁에서 빠져나오기
7.4 실천하기
3부 디버깅 비급
8장 특수한 경우
8.1 기존 릴리스 패치
8.2 하위 호환성
8.3 병렬
8.4 하이젠버그
8.5 성능 버그
8.6 임베디드 소프트웨어
8.7 서드파티 소프트웨어 버그
8.8 실천하기
9장 이상적인 디버깅 환경
9.1 자동 테스팅
9.2 소스 관리 시스템
9.3 자동 빌드
9.4 실천하기
10장 소프트웨어가 스스로를 디버깅하게 만들기
10.1 가정과 단언문
10.2 디버깅 빌드
10.3 자원 누수와 예외 처리
10.4 실천하기
11장 안티 패턴
11.1 우선순위 인플레이션
11.2 프리마돈나
11.3 유지 보수 팀
11.4 화재 진압
11.5 새로 작성하기
11.6 코드 주인의식 실종
11.7 흑마술
11.8 실천하기
부록 A 자원
A.1 소스 관리 시스템과 이슈 추적 시스템
A.2 빌드와 지속적인 통합 도구
A.3 유용한 라이브러리
A.4 다른 도구