목차
제1부 소프트웨어 생명주기 = 23
제1장 소프트웨어 공학의 영역 = 27
1.1 역사적인 특징 = 29
1.2 경제적인 특징 = 32
1.3 유지보수 측면 = 34
1.4 명세와 설계 특징 = 38
1.5 팀 프로그래밍 특징 = 41
1.6 객체-지향 파라다임 = 43
1.7 용어 = 48
복습 = 51
관련 자료 = 51
연습문제 = 53
참고 문헌 = 54
제2장 소프트웨어 프로세스 = 59
2.1 클라이언트, 개발자, 사용자 = 61
2.2 요구사항 단계 = 62
2.2.1 요구사항 단계 테스팅 = 64
2.3 명세 단계 = 64
2.3.1 명세 단계 테스팅 = 67
2.4 설계 단계 = 68
2.4.1 설계 단계 테스팅 = 69
2.5 구현단계 = 69
2.5.1 구현단계 테스팅 = 70
2.6 통합단계 = 70
2.6.1 통합단계 테스팅 = 70
2.7 유지보수 단계 = 72
2.7.1 유지보수단계 테스팅 = 73
2.8 폐기 = 73
2.9 소프트웨어 생성의 문제점 : 본질과 우연 = 74
2.9.1 복잡도 = 75
2.9.2 적합성 = 77
2.9.3 변경성 = 78
2.9.4 불가시성 = 79
2.9.5 과연 최선의 방법은 없는가? = 80
2.10 소프트웨어 프로세스 개선하기 = 81
2.11 CMM = 82
2.12 ISO 9000 = 85
2.13 SPICE = 86
2.14 소프트웨어 프로세스 개선의 이용과 이익 = 87
복습 = 89
관련 자료 = 89
연습문제 = 90
참고 문헌 = 92
제3장 소프트웨어 생명주기 모델 = 97
3.1 구축-수정 모델 = 98
3.2 폭포수 모델 = 99
3.2.1 폭포수 모델의 분석 = 101
3.3 라피드 프로토타이핑 모델 = 103
3.3.1 폭포수와 라피드 프로토타이핑 모델의 통합 = 105
3.4 점증적 모델 = 106
3.4.1 점증적 모델의 분석 = 108
3.5 동기적-안정적 모델 = 111
3.6 나선형 모델 = 111
3.6.1 나선형 모델의 분석 = 116
3.7 객체-지향 생명주기 모델 = 117
3.8 생명주기 모델의 비교 = 119
복습 = 120
관련 자료 = 120
연습문제 = 121
참고 문헌 = 122
제4장 팀과 팀이 사용하는 툴 = 125
4.1 팀조직 = 125
4.2 민주적 팀 접근법 = 127
4.2.1 민주적 팀 접근법의 분석 = 128
4.3 고전적 칩 프로그래머 팀 접근법 = 129
4.3.1 The New York Times 프로젝트 = 131
4.3.2 고전적 칩 프로그래머 팀 접근법의 비 실용성 = 132
4.4 그 외의 팀 = 133
4.5 동기적-안정적 팀 = 137
4.6 단계적 정제 = 139
4.6.1 단계적 정제의 예 = 139
4.7 비용-이익 분석 = 146
4.8 소프트웨어 매트릭 = 147
4.9 CASE = 149
4.10 CASE의 전문용어 = 150
4.11 CASE의 영역 = 152
4.12 소프트웨어 버전 = 157
4.12.1 개정 = 157
4.12.2 변형 = 158
4.13 형상관리 = 158
4.13.1 프로덕트 유지보수시 형상관리 = 161
4.13.2 기준선 = 162
4.13.3 프로덕트 개발시 형상관리 = 163
4.14 구축 툴 = 163
4.15 CASE 기술로 취득한 생산성 = 165
복습 = 166
관련 자료 = 167
연습문제 = 168
참고 문헌 = 170
제5장 테스팅 = 175
5.1 품질 문제 = 176
5.1.1 소프트웨어 품질 보증 = 177
5.1.2 관리의 독립성 = 178
5.2 비실행-기반 테스팅 = 178
5.2.1 워크스루 = 179
5.2.2 워크스루 관리 = 179
5.2.3 감사 = 181
5.2.4 감사와 워크스루 비교 = 183
5.2.5 검토의 강점과 약점 = 184
5.2.6 감사를 위한 매트릭 = 184
5.3 실행-기반 테스팅 = 185
5.4 무엇을 테스트해야 하는가? = 185
5.4.1 유용성 = 187
5.4.2 신뢰성 = 187
5.4.3 강건성 = 187
5.4.4 성능 = 188
5.4.5 정확성 = 188
5.5 테스팅과 정확성 증명 = 191
5.5.1 정확성 증명의 예 = 191
5.5.2 정확성 증명의 사례 연구 = 195
5.5.3 정확성 증명과 스프트웨어공학 = 197
5.6 실행-기반 테스팅을 누가 수행하는가? = 200
5.7 분산 소프트웨어 테스팅 = 202
5.8 실시간 소프트웨어 테스팅 = 204
5.9 테스팅은 언제 종료되는가? = 206
복습 = 207
관련 자료 = 207
연습문제 = 209
참고 문헌 = 211
제6장 객체의 소개 = 217
6.1 모듈이란 무엇인가? = 217
6.2 응집도 = 222
6.2.1 우연적 응집도 = 222
6.2.2 논리적 응집도 = 223
6.2.3 시간적 응집도 = 225
6.2.4 절차적 응집도 = 225
6.2.5 교환적 응집도 = 225
6.2.6 정보적 응집도 = 226
6.2.7 기능적 응집도 = 227
6.2.8 응집도 예제 = 228
6.3 결합도 = 229
6.3.1 내용 결합도 = 229
6.3.2 공통 결합도 = 230
6.3.3 제어 결합도 = 232
6.3.4 스템프 결합도 = 233
6.3.5 데이터 결합도 = 234
6.3.6 결합도 예제 = 234
6.3.7 결합도의 중요성 = 236
6.4 데이터 캡슐화 = 238
6.4.1 데이터 캡슐화와 프로덕트 개발 = 240
6.4.2 데이터 캡슐화와 프로덕트 유지보수 = 243
6.5 추상 데이터 타입 = 247
6.6 정보 은닉 = 250
6.7 객체 = 252
6.8 상속성, 다형성, 동적 바인딩 = 256
6.9 객체의 응집도와 결합도 = 259
복습 = 260
관련 자료 = 261
연습문제 = 262
참고 문헌 = 264
제7장 재사용성, 이식성, 상호운용성 = 269
7.1 재사용 개념 = 269
7.2 재사용의 방해 = 271
7.3 재사용 사례 연구 = 272
7.3.1 Raytheon Missile System Division = 272
7.3.2 Toshiba Software Factory = 274
7.3.3 NASA Software = 275
7.3.4 GTE Data Services = 277
7.3.5 HEWLETT-PACKARD = 277
7.3.6 EUROPEAN SPACE AGENCY = 278
7.4 객체와 생산성 = 280
7.5 설계와 구현 단계시에 재사용 = 281
7.5.1 모듈 재사용 = 282
7.5.2 어플리케이션 프레임워크 = 283
7.5.3 설계 패턴 = 284
7.5.4 소프트웨어 아키텍처 = 289
7.6 재사용과 유지보수 = 290
7.7 이식성 = 291
7.7.1 하드웨어 비호환성 = 292
7.7.2 운영체제 비호환성 = 293
7.7.3 수치 소프트웨어 비호환성 = 294
7.7.4 컴파일러 비호환성 = 295
7.8 왜 이식성인가? = 301
7.9 이식성을 달성하는 기법 = 302
7.9.1 이식 가능한 시스템 소프트웨어 = 302
7.9.2 이식 가능한 어플리케이션 소프트웨어 = 303
7.9.3 이식 가능한 데이터 = 305
7.10 상호 운영성 = 306
7.10.1 OLE, COM 그리고 ACTIVEX = 306
7.10.2 CORBA = 308
7.10.3 OLE/COM 과 CORBA 비교 = 308
7.11 상호운용성의 미래 추세 = 309
복습 = 309
관련 자료 = 310
연습문제 = 312
참고 문헌 = 314
제8장 계획수립과 추정 = 321
8.1 계획수립과 소프트웨어 프로세스 = 321
8.2 개발기간과 비용추정 = 323
8.2.1 프로덕트의 크기에 대한 매트릭 = 325
8.2.2 비용추정 기법 = 330
8.2.3 중간급 COCOMO = 333
8.2.4 COCOMO Ⅱ = 336
8.2.5 개발 주기와 비용추정 추적 = 338
8.3 소프트웨어 프로젝트 관리 계획의 컴포넌트 = 338
8.4 소프트웨어 프로젝트 관리 계획 프레임워크 = 340
8.5 IEEE 소프트웨어 프로젝트 관리계획 = 342
8.6 테스팅의 계획수립 = 345
8.7 객체-지향 프로젝트의 계획수립 = 346
8.8 요구사항 교육 = 347
8.9 문서화 표준 = 348
8.10 계획수립과 추정용 CASE 툴 = 349
8.11 소프트웨어 프로젝트 관리 계획 테스팅 = 352
복습 = 352
관련 자료 = 353
연습문제 = 354
참고 문헌 = 357
제2부 소프트웨어 생명주기의 단계 = 361
제9장 요구사항 단계 = 363
9.1 요구사항분석 단계 = 364
9.2 라피드 프로토타이핑 = 366
9.3 인적 인자 = 368
9.4 명세 기법으로의 라피드 프로토타이핑 = 370
9.5 라피드 프로토타입의 재사용 = 372
9.6 라피드 프로토타이핑의 다른 용도 = 374
9.7 라피드 프로토타이핑 모델의 관리적 의미 = 375
9.8 라피드 프로토타이핑의 적용사례 = 377
9.9 JAD = 378
9.10 요구사항분석 기법의 비교 = 379
9.11 요구사항 단계에서 테스팅 = 380
9.12 요구사항 단계용 CASE 툴 = 380
9.13 요구사항 단계의 매트릭 = 382
9.14 Osbert Oglesby 사례연구 : 요구사항 단계 = 382
9.15 Osbert Oglesby 사례연구 : 라피드 프로토타입 = 386
9.16 객체-지향 요구사항 = 388
복습 = 389
관련 자료 = 390
연습문제 = 391
참고 문헌 = 392
제10장 명세 단계 = 395
10.1 명세 문서 = 395
10.2 비정형명세 = 397
10.2.1 사례연구 : 텍스트 프로세싱 = 398
10.3 구조적 시스템 분석 = 400
10.3.1 SALLY'S SOFTWARE SHOP = 400
10.4 다른 반정형기법 = 409
10.5 엔티티-관계-모델링 = 410
10.6 유한상태기계 = 412
10.6.1 엘리베이터 문제 : 유한상태 기계 = 415
10.7 PETRI NET = 421
10.7.1 엘리베이터 문제 : 페트리 넷 = 425
10.8 Z = 428
10.8.1 엘리베이터 문제 : Z = 428
10.8.2 Z의 분석 = 431
10.9 다른 정형기법 = 433
10.10 명세기법의 비교 = 434
10.11 명세 단계시 테스팅 = 436
10.12 명세 단계용 CASE 툴 = 436
10.13 명세 단계용 매트릭 = 437
10.14 Osbert Oglesby 사례연구 : 구조적 시스템 분석 = 438
10.15 Osbert Oglesby 사례연구 : 소프트웨어 프로젝트 관리계획 = 439
복습 = 439
관련 자료 = 440
연습문제 = 441
참고 문헌 = 445
제11장 객체-지향 분석 단계 = 451
11.1 객체-지향 파라다임 대 구조적 파라다임 = 451
11.2 객체-지향 분석 = 454
11.3 엘리베이터 문제 : 객체-지향 분석 = 456
11.4 Use-case 모델링 = 456
11.5 클래스 모델링 = 458
11.5.1 명사 추출법 = 459
11.5.2 CRC 카드 = 462
11.6 동적 모델링 = 463
11.7 객체-지향 분석 단계시 테스팅 = 465
11.8 객체-지향 분석 단계용 CASE 툴 = 469
11.9 Osbert Oglesby 사례연구 : 객체-지향 분석 = 469
11.10 Osbert Oglesby 사례연구 : 소프트웨어 프로젝트 관리 계획 = 475
복습 = 475
관련 자료 = 476
연습문제 = 477
참고 문헌 = 478
제12장 설계 단계 = 481
12.1 설계와 추상화 = 482
12.2 액션-중심 설계 = 483
12.3 데이터 흐름 분석 = 483
12.3.1 데이터 흐름 분석 예제 = 484
12.3.2 확장안 = 490
12.4 트랜잭션 분석 = 490
12.5 데이터-중심 설계 = 492
12.6 객체-지향 설계 = 493
12.7 엘리베이터 문제 : 객체-지향 설계 = 494
12.8 상세 설계의 정형기법 = 500
12.9 실시간 설계 기법 = 502
12.10 설계 단계 시 테스팅 = 503
12.11 설계 단계용 CASE 툴 = 504
12.12 설계 단계의 매트릭 = 505
12.13 OSBERT OGLESBY 사례연구 : 객체-지향 설계 = 507
복습 = 511
관련 자료 = 512
연습문제 = 514
참고 문헌 = 515
제13장 구현 단계 = 517
13.1 프로그래밍 언어 선택 = 517
13.2 4세대 언어 = 521
13.3 올바른 프로그래밍 습관 = 524
13.4 코딩 표준 = 530
13.5 모듈 재사용 = 532
13.6 모듈 테스트 사례 선택 = 532
13.6.1 명세 테스팅과 코드 테스팅 = 533
13.6.2 명세에 대한 테스팅의 타당성 = 533
13.6.3 코드 테스팅의 타당성 = 534
13.7 블랙-박스 모듈-테스팅 기법 = 537
13.7.1 동등 테스팅과 경계값 분석 = 537
13.7.2 기능 테스팅 = 539
13.8 글래스-박스 모듈 테스팅 기법 = 540
13.8.1 구조적 테스팅 : 문, 분기, 경로 범위 = 540
13.8.2 복잡도 매트릭 = 542
13.9 코드 워크스루와 감사 = 544
13.10 모듈-테스팅 기법들의 비교 = 545
13.11 CLEANROOM = 546
13.12 객체를 테스팅할 때 잠재적 문제점 = 547
13.13 모듈 테스팅의 관리 측면 = 550
13.14 모듈의 디버깅보다 재작성할 시기 = 551
13.15 구현 단계용 CASE 툴 = 553
13.16 OSBERT OGLESBY 사례 연구 : 블랙-박스 테스트 사례 = 553
복습 = 555
관련 자료 = 555
연습문제 = 556
참고 문헌 = 559
제14장 구현과 통합 단계 = 565
14.1 구현과 통합 = 565
14.1.1 하향식 구현과 통합 = 566
14.1.2 상향식 구현과 통합 = 569
14.1.3 샌드위치 구현과 통합 = 569
14.1.4 객체-지향 프로덕트의 구현과 통합 = 571
14.1.5 구현과 통합 단계시 관리적 쟁점 = 571
14.2 구현과 통합 단계시 테스팅 = 572
14.3 GUI의 통합 테스팅 = 572
14.4 프로덕트 테스팅 = 573
14.5 인증 테스팅 = 575
14.6 구현과 통합 단계용 CASE 툴 = 576
14.7 완전한 소프트웨어 프로세스용 CASE 툴 = 576
14.8 통합 환경 = 577
14.8.1 프로세스 통합 = 577
14.8.2 툴 통합 = 578
14.8.3 통합의 다른 형식 = 581
14.9 비즈니스 어플리케이션 환경 = 581
14.10 툴 기반구조 = 582
14.11 환경이 갖는 잠재적 문제점 = 583
14.12 구현과 통합 단계용 매트릭 = 583
14.13 OSBERT Oglesby 사례 연구 : 구현과 통합 단계 = 585
복습 = 585
관련 자료 = 585
연습문제 = 586
참고 문헌 = 588
제15장 유지보수 단계 = 591
15.1 유지보수가 왜 필요한가 = 591
15.2 유지보수 프로그래머에 요구되는 것은 무엇인가 = 592
15.3 유지보수 사례연구 = 595
15.4 유지보수의 관리 = 596
15.4.1 결함보고 = 596
15.4.2 프로젝트의 변경 권한 = 598
15.4.3 유지보수성의 보장 = 599
15.4.4 반복되는 유지보수의 문제 = 599
15.5 객체-지향 소프트웨어의 유지보수 = 600
15.6 유지보수 기술 대 개발 기술 = 604
15.7 역 공학 = 604
15.8 유지보수단계 시에 테스팅 = 605
15.9 유지보수 단계용 케이스 툴 = 606
15.10 유지보수 단계용 매트릭 = 607
15.11 OSBERT OGLESBY 사례연구 : 유지보수 = 607
복습 = 608
관련 자료 = 609
연습문제 = 609
참고 문헌 = 611
부록 A AIR GOURMET = 613
부록 B 소프트웨어 공학 자원들 = 617
부록 C Osbert Oglesby 사례연구 : 라피드 프로토타입 = 621
부록 D Osbert Oglesby 사례연구 : 구조적 시스템 분석 = 623
부록 E Osbert Oglesby 사례연구 : 객체-지향 분석 = 627
부록 F Osbert Oglesby 사례연구 : 소프트웨어 프로젝트 관리계획 = 629
부록 G Osbert Oglesby 사례연구 : 설계 = 635
부록 H Osbert Oglesby 사례연구 : 블랙-박스 테스트 사례 = 655
부록 I Osbert Oglesby 사례연구 : 완전한 소스코드 = 659
찾아보기 = 661