목차
저자서문 = xiii
역자서문 = xxi
제1부 소프트웨어 공학 개요 = 1
제1장 소프트웨어 공학의 영역 = 5
1.1 역사적인 측면 = 7
1.2 경제적인 측면 = 9
1.3 유지보수 측면 = 9
1.3.1 유지보수의 고전적 그리고 현대적 견해 = 12
1.3.2 인도 후 유지보수의 중요성 = 13
1.4 요구사항, 분석, 설계 측면 = 16
1.5 팀 개발 측면 = 17
1.6 계획수립 페이즈가 없는 이유 = 18
1.7 테스팅 페이즈가 없는 이유 = 19
1.8 문서화 페이즈가 없는 이유 = 20
1.9 객체-지향 파라다임 = 21
1.10 객체-지향 파라다임의 전망 = 25
1.11 용어 = 26
1.12 윤리 이슈 = 29
복습 = 30
관련자료 = 30
연습문제 = 31
참고문헌 = 32
제2장 소프트웨어 생명주기 모델 = 37
2.1 이론적 측면의 소프트웨어 개발 = 37
2.2 Winberg Mini Case Study = 38
2.3 Winburg 미니 사례연구의 교훈 = 42
2.4 Teal Tractors Case Study = 42
2.5 반복과 점진 = 43
2.6 Winburg Mini Case Study Revisited = 47
2.7 반복과 점진의 위험과 또다른 측면 = 48
2.8 반복과 점진관리하기 = 50
2.9 다른 생명주기 모델 = 51
2.9.1 코드-픽스 생명주기 모델 = 51
2.9.2 폭포수 생명주기 모델 = 52
2.9.3 라피드 프로토타입핑 생명주기 모델 = 54
2.9.4 Extreme Programming과 Agile Processes = 55
2.9.5 동기적-안정적 생명주기 모델 = 57
2.9.6 나선형 생명주기 모델 = 57
2.10 생명주기 모델들의 비교 = 62
복습 = 63
관련자료 = 63
연습문제 = 64
참고문헌 = 65
제3장 소프트웨어 프로세스 = 69
3.1 Unified Process = 71
3.2 객체-지향 파라다임에서 반복과 점진 = 72
3.3 요구사항 웍플로우 = 73
3.4 분석 웍플로우 = 75
3.5 설계 웍플로우 = 77
3.6 구현 웍플로우 = 78
3.7 테스트 웍플로우 = 79
3.7.1 요구사항 산출물 = 79
3.7.2 분석 산출물 = 79
3.7.3 설계 산출물 = 80
3.7.4 구현 산출물 = 80
3.8 인도 후 유지보수 = 82
3.9 폐기 = 83
3.10 Unified Process의 페이즈 = 83
3.10.1 개념정립 페이즈 = 84
3.10.2 전개 페이즈 = 87
3.10.3 구축 페이즈 = 87
3.10.4 전환 페이즈 = 88
3.11 1차원 대 2차원 생명주기 모델 = 89
3.12 소프트웨어 프로세스 개선하기 = 90
3.13 CMM = 90
3.14 다른 소프트웨어 프로세스 개선안 = 94
3.15 소프트웨어 프로세스 개선의 비용과 이익 = 95
복습 = 96
관련자료 = 97
연습문제 = 98
참고문헌 = 98
제4장 팀 = 103
4.1 팀 조직 = 103
4.2 민주적 팀 접근법 = 105
4.2.1 민주적 팀 접근법의 분석 = 106
4.3 고전적 칩 프로그래머 팀 접근법 = 106
4.3.1 New York Times 프로젝트 = 108
4.3.2 고전적 칩 프로그래머 팀 접근법의 비실용성 = 109
4.4 칩 프로그래머와 민주적 팀 = 110
4.5 동기적-안정적 팀 = 112
4.6 Extreme Programming 팀 = 113
4.7 P-CMM = 113
4.8 적합한 팀 조직 선택하기 = 115
복습 = 115
관련자료 = 115
연습문제 = 116
참고문헌 = 116
제5장 툴의 선택 = 119
5.1 단계적 정제 = 119
5.1.1 Stepwise Refinement Mini Case Study = 120
5.2 비용-이익 분석 = 125
5.3 소프트웨어 척도 = 127
5.4 CASE = 128
5.5 CASE의 전문용어 = 129
5.6 CASE의 영역 = 131
5.7 소프트웨어 버전 = 135
5.7.1 개정 = 135
5.7.2 변형 = 135
5.8 형상관리 = 136
5.8.1 인도 후 유지보수 동안에 형상관리 = 138
5.8.2 기준선 = 139
5.8.3 개발 동안에 형상관리 = 139
5.9 빌드 툴 = 140
5.10 CASE 기술로 취득한 생산성 = 141
복습 = 142
관련자료 = 142
연습문제 = 143
참고문헌 = 144
제6장 테스팅 = 147
6.1 품질 이슈 = 148
6.1.1 소프트웨어 품질 보증 = 149
6.1.2 관리의 독립성 = 150
6.2 비실행 기반 테스팅 = 150
6.2.1 워크스루 = 151
6.2.2 워크스루 관리 = 151
6.2.3 인스펙션 = 152
6.2.4 인스펙션과 워크스루의 비교 = 154
6.2.5 검토의 강점과 약점 = 155
6.2.6 인스펙션용 척도 = 155
6.3 실행-기반 테스팅 = 156
6.4 테스트 대상은 무엇인가? = 156
6.4.1 유용성 = 157
6.4.2 신뢰성 = 157
6.4.3 강건성 = 158
6.4 과 성능 = 158
6.4.5 정확성 = 159
6.5 테스팅 대 정확성 증명 = 161
6.5.1 정확성 증명의 예 = 162
6.5.2 Correctness Proof Mini Case Study = 164
6.5.3 정확성 증명과 소프트웨어 공학 = 165
6.6 누가실행-기반 테스팅을수행하는가? = 168
6.7 테스팅 종료 시기 = 170
복습 = 170
관련자료 = 170
연습문제 = 171
참고문헌 = 173
제7장 모듈에서 객체까지 = 177
7.1 모듈이란 무엇인가? = 178
7.2 응집력 = 181
7.2.1 우연적 응집력 = 182
7.2.2 논리적 응집력 = 182
7.2.3 시간 응집력 = 183
7.2.4 절차적 응집력 = 184
7.2.5 교환적 응집력 = 184
7.2.6 기능적 응집력 = 185
7.2.7 정보적 응집력 = 186
7.2.8 응집력 예제 = 186
7.3 결합도 = 187
7.3.1 내용 결합도 = 187
7.3.2 공통 결합도 = 188
7.3.3 제어 결합도 = 190
7.3.4 스템프 결합도 = 190
7.3.5 데이터 결합도 = 191
7.3.6 결합도 예제 = 192
7.3.7 결합도의 중요성 = 193
7.4 데이터 캡슬화 = 194
7.4.1 데이터 갭슬화와 프로덕트 개발 = 196
7.4.2 데이터 갭슬화와 유지보수 = 197
7.5 추상 데이터 타입 = 203
7.6 정보 은닉 = 204
7.7 객체 = 206
7.8 상속성, 다형성, 동적 바인딩 = 210
7.9 객체-지향 파라다임 = 212
복습 = 215
관련자료 = 216
연습문제 = 217
참고문헌 = 218
제8장 재사용성과 이식성 = 221
8.1 재사용 개념 = 222
8.2 재사용에 제약 = 224
8.3 재사용 사례연구 = 225
8.3.1 Raytheon Missile System Division = 225
8.3.2 European Space Agency = 227
8.4 객체와 재사용 = 228
8.5 설계와 구현 동안에 재사용 = 228
8.5.1 설계 재사용 = 229
8.5.2 어플리케이션 프레임워크 = 230
8.5.3 설계 패턴 = 231
8.5.4 소프트웨어 아키텍처 = 235
8.5.5 컴포넌트_기반 소프트웨어 공학 = 236
8.6 재사용과 인도 후 유지보수 = 236
8.7 이식성 = 237
8.7.1 하드웨어 비호환성 = 238
8.7.2 운영체제 비호환성 = 239
8.7.3 수치 소프트웨어 비호환성 = 239
8.7.4 컴파일러 비호환성 = 240
8.8 왜 이식성인가? = 243
8.9 이식성을 달성하는 기법 = 244
8.9.1 이식 가능한 시스템 소프트웨어 = 244
8.9.2 이식 가능한 어플리케이션 소프트웨어 = 245
8.9.3 이식 가능한 데이터 = 246
복습 = 247
관련자료 = 247
연습문제 = 248
참고문헌 = 250
제9장 계획수립과 추정 = 255
9.1 계획수립과 소프트웨어 프로세스 = 256
9.2 기간과 비용 추정하기 = 257
9.2.1 프로덕트의 사이즈에 대한 척도 = 258
9.2.2 비용추정 기법 = 262
9.2.3 중간급 COCOMO = 264
9.2.4 COCOMO II = 267
9.2.5 기간과 비용추정 추적 = 268
9.3 소프트웨어 프로젝트 관리의 컴포넌트 = 269
9.4 소프트웨어 프로젝트 관리 계획 프레임워크 = 270
9.5 IEEE SPMP = 272
9.6 테스팅 계획수립 = 275
9.7 객체_지향 프로젝트 계획수립 = 276
9.8 요구사항 교육 = 277
9.9 문서화 표준 = 277
9.10 계획수립과 추정용 CASE 툴 = 278
9.11 SPMP 테스팅 = 278
복습 = 279
관련자료 = 279
연습문제 = 280
참고문헌 = 281
제2부 소프트웨어 생명주기의단계 = 285
제10장 요구사항 = 287
10.1 클라이언트 니즈가 무엇인지 결정하기 = 288
10.2 요구사항 웍플로우의 개요 = 289
10.3 도메인 이해하기 = 289
10.4 비즈니스 모델 = 290
10.4.1 인터뷰 = 290
10.4.2 다른 기법 = 291
10.4.3 유스 케이스 = 292
10.5 초기 요구사항 = 294
10.6 도메인의 초기 이해: Osbert Oglesby Case Study = 294
10.7 초기 비즈니스 모델: Osbert Oglesby Case Study = 296
10.8 초기 요구사항: Osbert Oglesby Case Study = 299
10.9 요구사항 웍플로우 계속하기: Osbert Oglesby Case Study = 300
10.10 테스트 웍플로우: Osbert Oglesby Case Study = 307
10.11 고전적 요구사항 페이즈 = 308
10.12 라피드 프로토타이핑 = 309
10.13 인적 인자 = 310
10.14 라피드 프로토타입핑의 재사용 = 311
10.15 요구사항 웍플로우용 CASE 툴 = 313
10.16 요구사항 웍플로우용 척도 = 313
10.17 요구사항 웍플로우의 난제 = 314
복습 = 315
관련자료 = 316
연습문제 = 316
참고문헌 = 317
제11장 고전적 분석 = 319
11.1 명세 문서 = 320
11.2 비정형 명세 = 321
11.2.1 Correctness Proof Mini Case Study Redux = 322
11.3 구조적 시스템 분석 = 323
11.3.1 Sally's Software Shop Mini Case Study = 323
11.4 구조적 시스템 분석: Osbert Oglesby Case Study = 331
11.5 다른 반정형 기법 = 333
11.6 엔티티-관계 모델링(ERM) = 334
11.7 유한 상태 기계 = 336
11.7.1 유한 상태 기계: Elevator Problem Case Study = 338
11.8 Petri Net = 343
11.8.1 Petri NCt: Elevator Problem Case Study = 346
11.9 Z = 348
11.9.1 Z: The Elevator Problem Case Study = 348
11.9.2 Z의 분석 = 351
11.10 다른 정형기법 = 352
11.11 고전적 분석기법들의 비교 = 353
11.12 고전적 분석 동안 테스팅 = 354
11.13 고전적 분석용 CASE 툴 = 355
11.14 고전적 분석용 척도 = 355
11.15 소프트웨어 프로젝트 관리 계획: Osbert Oglesby Case Study = 356
11.16 고전적 분석의 난제 = 356
복습 = 357
관련자료 = 357
연습문제 = 358
참고문헌 = 360
제12장 객체-지향 분석 = 365
12.1 분석 웍플로우 = 366
12.2 엔티티 클래스들 추출법 = 367
12.3 객체_지향 분석: Elvator Problem Case Study = 368
12.4 기능적 모델링: Elvator Problem Case Study = 368
12.5 엔티티 클래스 모델링: Elevator Problem Case Study = 370
12.5.1 명사 추출법 = 371
12.5.2 CRC카드 = 373
12.6 동적 모델링: Elevator Problem Case Study = 374
12.7 테스트 웍플로우: Object-Oriented Analysis = 377
12.8 경계와 콘트를 클래스들 추출하기 = 380
12.9 초기 기능적 모델: Osbert Oglesby Case Study = 381
12.10 초기 클래스 다이어그램: Osbert Oglesby Case Study = 384
12.11 초기 동적 모델: Osbert Oglesby Case Study = 390
12.12 경계 클래스들 추출하기: Osbert Oglesby Case Study = 392
12.13 콘트를 클래스들 추출하기: Osbert Oglesby Case Study = 393
12.14 유스 케이스들 정제하기: Osbert Oglesby Case Study = 393
12.15 유스-케이스 실현: Osbert Oglesby Case Study = 396
12.15.1 Buy a Masterpiece 유스 케이스 = 396
12.15.2 Buy a Masrework 유스 케이스 = 402
12.15.3 Buy Other Painting 유스 케이스 = 403
12.15.4 나머지 다섯 개 유스 케이스 = 405
12.16 클래스 다이어그램 점진시키기: Osbert Oglesby Case Study = 407
12.17 테스트 웍플로우: Osbert Oglesby Case Study = 408
12.18 Uuified Process의 명세 문서 = 408
12.19 액터와 유스 제이스 = 409
12.20 객체-지향 분석 웍플로우용 CASE 툴 = 411
12.21 객체-지향 분석 웍플로우의 난제 = 411
복습 = 412
관련자료 = 412
연습문제 = 413
참고문헌 = 414
제13장 설계 단계 = 417
13.1 설계와 추상화 = 418
13.2 오퍼레이션-중심 설계 = 419
13.3 데이터 흐름 분석 = 419
13.3.1 Word Counting = 420
13.3.2 데이터 흐름 분석 확장안 = 425
13.4 트랜잭션 분석 = 425
13.5 데이터-중심 설계 = 427
13.6 객체-지향 설계 = 428
13.7 객체-지향 설계: Elvator Problem Case Study = 429
13.8 객체-지향 설계: Osbert Oglesby Case Study = 432
13.9 설계 웍플로우 = 436
13.10 테스트 웍플로우 = 438
13.11 테스트 웍플로우: Osbert Oglesby Case Study = 439
13.12 상세설계용 정형기법 = 439
13.13 실시간 설계 기법 = 439
13.14 설계용 CASE 툴 = 441
13.15 설계용 척도 = 442
13.16 설계 웍플로우의 난제 = 443
복습 = 443
관련자료 = 444
연습문제 = 444
참고문헌 = 445
제14장 구현 = 449
14.1 프로그래밍 언어의 선택 = 449
14.2 4세대 언어 = 452
14.3 올바른 프로그래밍 관습 = 454
14.3.1 일관되고 의미 있는 변수 이름들의 사용 = 455
14.3.2 자기 문서화 코드의 이슈 = 456
14.3.3 파라미터들의 사용 = 457
14.3.4 가독성 증가를 위한 코드 배치 = 458
14.3.5 중첩된 if 문 = 458
14.4 코딩 표준 = 460
14.5 코드 재사용 = 460
14.6 통합 = 461
14.6.1 하향식 통합 = 462
14.6.2 상향식 통합 = 463
14.6.3 샌드위치 구현과 통합 = 464
14.6.4 객체-지향 프로덕트들의 통합 = 465
14.6.5 통합의 관리 = 466
14.7 구현 웍플로우 = 466
14.8 구현 웍플로우: Osbert Oglesby Case Study = 467
14.9 테스트 웍플로우: 구현 = 467
14.10 테스트 사례 선택 = 467
14.10.1 명세들의 테스팅과 코드의 테스팅 = 468
14.10.2 명세들에 대한 테스팅의 타당성 = 468
14.10.3 코드에 대한 테스팅의 타당성 = 469
14.11 블랙-박스 단위 테스팅 기법 = 471
14.11.1 동등 테스팅과 경계값 분석 = 472
14.11.2 기능 테스팅 = 473
14.12 블랙-박스 테스트 사례: Osbert Oglesby Case Skldy = 414
14.13 글래스-박스 단위 태스팅 기법 = 476
14.13.1 구조적 테스팅 : 문, 분기, 경로범위 = 476
14.13.2 복잡도 척도 = 479
14.14 코드 워크스루와 인스펙션 = 480
14.15 단위 테스팅 기법들의 비교 = 480
14.16 Cleanroom = 481
14.17 객체들 테스트시 잠재적인 문제점 = 482
14.18 단위 테스팅의 관리적 측면 = 484
14.19 코드 산출물을 디버깅하기 보다는 재구축할 시기 = 485
14.20 통합 테스팅 = 486
14.21 프로덕트 테스팅 = 487
14.22 승인 테스팅 = 488
14.23 텍스트 웍플로우: Osbert Oglesby Case Study = 489
14.24 구현용 CASE 툴 = 489
14.24.1 전체 소프트웨어 프로세스용 CASE 툴 = 489
14.24.2 통합 개발 환경 = 490
14.24.3 비즈니스 어플리케이션용 환경 = 491
14.24.4 대중적인 툴 기반구조 = 491
14.24.5 환경들이 갖는 잠재적 문제점 = 492
14.25 구현 웍플로우용 척도 = 492
14.26 구현 웍플로우의 난제 = 492
복습 = 493
관련자료 = 494
연습문제 = 495
참고문헌 = 497
제15장 인도 후 유지보수 = 501
15.1 인도 후 유지보수의 필요성 = 502
15.2 인도 후 유지보수 프로그래머들의 요구는 무엇인가? = 502
15.3 Postdelivery Maintenance Mini Case Study = 504
15.4 인도 후 유지보수의 관리 = 506
15.4.1 결점 보고 = 506
15.4.2 프로젝트에 대한 변경 권한 = 507
15.4.3 유지보수성의 보장 = 508
15.4.4 반복되는 유지보수의 문제 = 508
15.5 객체-지향 소프트웨어의 유지보수 = 509
15.6 인도 후 유지보수 스킬 대 개발 스킬 = 511
15.7 역공학 = 512
15.8 인도 후 유지보수 동안 테스팅 = 513
15.9 인도 후 유지보수용 CASE 툴 = 514
15.10 인도 후 유지보수용 척도 = 514
15.11 인도 후 유지보수: Osbert Oglesby Case Study = 515
15.12 인도 후 유지보수의 난제 = 515
복습 = 515
관련자료 = 515
연습문제 = 516
참고문헌 = 517
제16장 UML의 세부사항 = 521
16.1 UML은 방법론이 아니다 = 522
16.2 클래스 다이어그램 = 522
16.2.1 집합 = 524
16.2.2 다중성 = 524
16.2.3 복합 = 526
16.2.4 일반화 = 527
16.2.5 연관 = 527
16.3 노트 = 528
16.4 유스□케이스 다이어그램 = 528
16.5 스테레오타입 = 528
16.6 상호작용 다이어그램 = 530
16.7 상태차트 = 532
16.8 활동 다이어그램 = 535
16.9 패키지 = 536
16.10 컴포넌트 다이어그램 = 537
16.11 배치 다이어그램 = 537
16.12 UML 다이어그램 복습 = 538
16.13 UML과 반복 = 538
복습 = 539
관련자료 = 539
연습문제 = 539
참고문헌 = 540
부록 A = 541
부록 B = 544
부록 C = 546
부록 D = 547
부록 E = 551
부록 F = 552
부록 G = 557
부록 H = 565
부록 I = 566
부록 J = 567
찾아보기 = 568