1부 3인의 이야기
1장 프롤로그
1.1 소프트웨어 개발 방법
1.1.1 첫 번째 방법
1.1.2 두 번째 방법
1.1.3 차이점
1.2 인수 테스트의 중요성
1.3 시스템과 팀 소개
1.3.1 시스템
1.3.2 인물 소개
1.4 정리
2장 린과 애자일
2.1 3인체제와 팀
2.2 후 구현 테스트
2.3 느린 피드백보다는 빠른 피드백
2.4 구현 전의 테스트
2.5 린과 애자일의 원리
2.6 정리
3장 테스트 전략
3.1 테스트의 종류
3.2 테스트가 수행되는 장소
3.3 테스트 측면
3.3.1 제어점과 관찰점
3.3.2 새로운 테스트는 새로운 요구사항이다
3.4 정리
4장 인수 테스트 소개
4.1 업무 규칙 예제
4.2 인수 테스트의 구현
4.2.1 테스트 스크립트
4.2.2 사용자 인터페이스 테스트
4.2.3 xUnit 테스트
4.2.4 자동화 인수 테스트
4.2.5 종합 테스트
4.3 테스트 절차
4.4 정리
5장 예제 프로젝트
5.1 기획
5.1.1 목표
5.1.2 프로젝트 인수 테스트
5.2 고수준의 요구사항
5.2.1 기능
5.2.2 기능 인수 기준
5.3 정리
6장 사용자 스토리 기술
6.1 스토리
6.1.1 기능을 스토리로 분할
6.1.2 역할
6.1.3 역할 속성
6.1.4 페르소나
6.1.5 역할의 스토리
6.1.6 스토리 인수 기준
6.1.7 인수 테스트가 크기를 결정한다
6.1.8 고객 용어
6.2 INVEST 기준
6.3 정리
7장 시나리오 협업
7.1 사용자 스토리로부터 유스케이스 생성
7.1.1 간단한 유스케이스
7.1.2 예외와 대안.
7.1.3 인수 테스트
7.1.4 문서화
7.2 스토리 지도
7.3 개념적인 흐름
7.4 의사소통
7.5정리
8장 테스트 분해
8.1 3인체제의 테스트 생성
8.2 테스트 컨텍스트
8.3 테스트 구조
8.3.1 계산 테이블
8.3.2 데이터 테이블
8.3.3 액션 테이블
8.4 예제 값으로 테스트
8.4.1 요구사항 수정
8.4.2 인수 테스트 수정
8.5 문장에 있는 값으로 테스트
8.6 테스트가 실행 시기와 장소
8.7 정리
9장 시나리오 테스트
9.1 예외 시나리오 테스트
9.2 업무 규칙 테스트
9.3스토리 충돌 문제
9.4 모든 것을 자동화하면 안 된다
9.5 다중 레벨 테스트
9.6 사용자 인터페이스 테스트
9.7 목표 검사
9.8 정리
10장 사용자 스토리 분할
10.1 인수 테스트가 스토리 분할을 돕는다
10.2 업무 규칙 테스트
10.3 업무 규칙과 스토리
10.4 정리
11장 시스템 경계
11.1 외부 인터페이스
상세사항
11.1.1 컴포넌트 테스트
11.1.2 테스트 더블과 모의 객체
11.2 진짜와 가짜
11.3 액티비티 스토리 지도
11.4 정리
12장 개발 리뷰
12.1 나머지 스토리
12.1.1 사용성 테스트
12.1.2 화면과 상태의 분리
12.1.3 품질 속성 테스트
12.1.4 작업흐름 테스트
12.2 개발 계획
12.3 기획에서 인수까지
12.4 정리
2부 상세사항
13장 분리를 통한 간략화
13.1 복잡한 업무 규칙
13.1.1 분리에 의한 간략화
13.1.2 단순화된 규칙
13.2대여 이력
13.3 정리
14장 모델과 뷰의 분리
14.1 사용자 인터페이스의 분리
14.2 분리는 테스팅을 쉽게 한다
14.3 정리
15장 이벤트, 반응, 상태
15.1 이벤트와 이벤트 테이블
15.2 상태와 상태 전이
15.3 내부 상태와 외부 반응
15.3.1 임시 상태나 영속 상태
15.3.2 젠 질문
15.4 정리
16장 개발자 인수 테스트
16.1 컴포넌트 인수 테스트
16.1.1 필드 디스플레이 테스트
16.1.2 테이블 디스플레이 테스트
16.2 정리
17장 인터페이스 분리
17.1 서비스 제공자에 대한 테스트
17.1.1 인터페이스
17.1.2 품질 속성 테스트
17.1.3 구현의 비교
17.2 서비스와 사용자 인터페이스 분리
17.2.1 관심의 분리
17.2.2 재사용 가능한 업무 규칙
17.3 정리
18장 엔티티와 릴레이션십
18.1 릴레이션십
18.1.1 엔티티와 릴레이션십
18.1.2 다중 릴레이션십
18.1.3 다른 표현법
18.2 정리
19장 대규모 시스템에서의 3인체제
19.1 대규모 시스템
19.2 고객 테스트가 꼭 필요하지 않는 경우
19.2.1 데이터 변환
19.2.2 데이터베이스 변환
19.3 테스트가 전혀 없을 경우
19.3.1 레거시 시스템
19.4 정리
3부 일반적인 이슈
20장 업무 가능성, 규칙, 가치
20.1 업무 역량
20.2 시나리오 처리
20.3 업무 규칙 표출
20.4 다른 업무 가치
20.5 정리
21장 테스트 표현
21.1 고객이 이해 가능한 테이블
21.2 테이블과 텍스트
21.3 다중 행동의 구체화
21.4 복잡한 데이터
21.5 수정된 테이블 형태
21.6 정리
22장 테스트 평가
22.1 테스트 양상
22.1.1 고객이 이해하기 쉬워야 한다
21.1.2 맞춤법을 검사해야 한다
21.1.3 결과가 항상 동일해야 한다
21.1.4 깨지지 않아야 한다
22.2 테스트 순서
22.2.1 작업흐름 테스트
22.3 테스트 조건
22.3.1 관심의 분리
22.3.2 테스트 실패
22.3.3 테스트 중복
22.4 구현 이슈 배제
22.5 기억해야 할 사항들
22.6 정리
23장 다른 부분에 테스트 활용
23.1 인수 테스트의 활용
23.1.1 완성도
23.1.2 예측 도우미
23.1.3 스토리 분할
23.1.4 개발자 스토리
23.2 버그 리포트로서의 테스트
23.2.1 원인 분석
23.2.2 제품 버그
23.2.3 회귀 테스트
23.3 정리
24장 테스트 컨텍스트와 도메인 언어
24.1 유비쿼터스 언어
24.2 두 개의 도메인
24.3 정리
25장 회고와 관점
25.1 복습
25.1.1 프로세스
25.1.2 테스트 레이어
25.1.3 테스트
25.1.4 의사소통
25.2 장벽
25.2.1 모나드
25.2.2 이용 불가능한 고객
25.2.3 변경
25.2.4 리스크
25.3 이익
25.4정리
4부 사례 연구
26장 사례 연구: 은퇴 연금
26.1 테스트 컨텍스트
26.2 주 경로 테스트
26.2.1 설정
26.2.2 이벤트
26.2.3 예상 결과
26.2.4 구현 이슈
26.2.5 관심의 분리
26.3 업무 가치 추적
26.4 하나의 예외
26.4.1 이벤트
26.4.2 예상 결과
26.5 기타 예외 사항
26.5.1 이벤트
26.5.2 예상 결과
26.6 동시에 발생하는 두 개의 예외 상황
26.6.1 이벤트
26.6.2 예상 결과
26.7 큰 그림
26.7.1 이벤트 테이블
26.8 상태 전이 테이블
26.9 정리
27장 사례 연구: 신호처리
27.1 너무 시끄럽다
27.2 소음도
27.3 개발자 테스트
27.4 정리
28장 사례 연구: 도서관 프린트 서버
28.1 테스트 컨텍스트
28.2 작업흐름 테스트
28.3 정리
29장 사례 연구: 가용성이 높은 플랫폼
29.1 서버 교환에 대한 테스트 컨텍스트
29.2 서버 교환에 대한 테스트
29.3 기술적인 규칙에 대한 테스트
29.4 정리
5부 기술적인 주제
30장 ATDD에 무엇을 어떻게 적용할 수 있는가?
30.1 테스트 플랫폼
30.2 테스트부터 시작하는 내부 설계
30.3 디바이스 테스팅
30.4 사용자 인터페이스에서 시작
30.5 블랙박스 테스팅
30.6 단위 테스트
30.7정리
31장 테스트 설정
31.1 공통 설정
31.2 몇 가지 개선 사항
31.3 테스트 순서
31.4 영속적인 저장소의 이슈
31.5 정리
32장 사례 연구: 이메일 주소
32.1 테스트 컨텍스트
32.2 테스트 분할
32.2.1 로컬 파트 확인
32.2.2 도메인 테스트
32.2.3 허용되지 않는 도메인의 테스트
32.2.4 연결을 확인하는 테스트
32.2.5 검토 테스트
32.3 정리
부록
부록A 다른 이슈들
A.1 테스트 컨텍스트
A.2 고객 예제
A.2.1 애매한 인수 테스트
A.2.2 인수 테스트 상세
A.3 요구사항과 인수 테스트
A.3.1 요구사항과 테스트 문서화
A.3.2 요구사항 분리
A.3.3 이슈의 분리
A.4 랜덤 이벤트를 이용해 시스템 테스트
A.5 숫자 3의 힘
A.6 정리
부록B 업무 가치 예측
B.1 업무 가치
B.2 개발자 스토리
B.3 정리
부록C 테스트 프레임워크 예제
C.1 예제
C.2 Fit 구현
C.2.1 설정
C.2.2 CD 대여
C.2.3 반납
C.2.4 CD 종류에 따른 대여 요금
C.3 Slim-테이블 스타일
C.3.1 헤더
C.3.2 설정
C.3.3 CD 대여
C.3.4 반납
C.3.5 CD 종류에 따른 대여 요금
C.4 Slim-Cucumber 스타일
C.4.1 설정
C.4.2 CD 대여
C.4.3 CD 반납
C.4.4 시나리오 라이브러리
C.4.5 CD 종류에 따른 대여 요금
C.5 Robot
C.5.1 설정
C.5.2 CD 대여
C.5.3 CD 반납
C.5.4 CD 종류에 따른 대여 요금
C.6 Cucumber
C.6.1 CD 대여
C.6.1 CD 반납
C.6.2 CD 종류에 따른 대여 요금
C.7 테스트 프레임워크
C.8 정리
부록D 테이블의 활용
D.1 테이블을 이용해 사용자 인터페이스 테스트
D.2 요구사항 테이블
D.2.1 그 외의 테이블
D.3 품질 속성 요구사항
D.4 데이터 테이블
D.5 정리
부록E ATDD와 화폐 테스트
E.1 테스트 컨텍스트
E.2 본래의 테스트
E.3 인수 테스트 접근 방법
E.4 정리
부록F 연습문제
F.1 계산기
F.1.1 테스트 생성
F.2 좀 더 많은 연습문제
F.2.1 샘의 CD 대여점
F.2.2 삼각형 연습문제
F.2.3 파일 복사 연습문제
참고문헌과 참고자료
참고자료
참고문헌
에필로그
육하원칙: 누가, 무엇을, 언제, 어디서, 왜, 어떻게
그 밖의 사항들
법적 공지
다른 이들의 경험
재작업이 60%에서 20%로 감소했다
처음으로 동작한 작업흐름
의사소통 오류의 감소
시간 절약
올바른 업무 규칙 얻어내기
테스트를 위한 시나리오
인수 테스트와 단위 테스트
게임 변경
더욱 밀접해진 교차 기능 팀 통합, 산뜻한 시각 스토리 완성 기준, 자동화로 감소된 테스트 시간
여러분의 이야기는 어떠한가?
정리
저자 소개
저자 : 케네스퍼그
케네스 퍼그(Ken Pugh) 25년 이상 소프트웨어 분야에 종사했다. 이전에는 퍼그킬린(Pugh-Killeen) 협회의 학장이었으며, 넷 오브젝티브스(Net Objectives)의 펠로우(fellow) 컨설턴트를 맡고 있다. 레이더 추적장치부터 금융 분석에 관련된 애플리케이션까지 다양한 분야의 소프트웨어를 개발했다. 요구사항 수집부터 테스팅까지 전 분야를 다루어봤고, 21세기에 들어서면서부터는 린과 애자일 프로세스를 도입해 그의 팀원들과 좀 더 효율적으로 소프트웨어를 만들어보려고 노력했다. 다양한 국제 컨퍼런스에서 연설을 한 경험이 있으며, 전 세계에 걸쳐 컨설팅과 강연을 하고 다양한 기술 분야의 주제를 다뤘다. 이 책은 그의 7번째 책이다. 2006년에 그가 집필한 『프리팩토링(Prefactoring)』은 졸트 상을 수상했다. 여가시간에는 스노우보드나 윈드서핑, 캠핑을 즐긴다. 1997년부터 2003년에는 애팔래치아 자연 산책로를 횡단했다.