목차
제1부 소프트웨어 생명주기 = 23
제1장 소프트웨어 공학의 영역 = 27
1.1 역사적인 특징 = 29
1.2 경제적인 특징 = 32
1.3 유지보수 측면 = 34
1.4 명세와 설계 특징 = 38
1.5 팀 프로그래밍 특징 = 41
1.6 객체-지향 파라다임 = 42
1.7 용어 = 48
복습 = 50
관련 자료 = 51
연습문제 = 52
참고 문헌 = 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
관련 자료 = 90
연습문제 = 91
참고 문헌 = 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 단계적 정제 = 138
4.6.1 단계적 정제의 예 = 139
4.7 비용-이익 분석 = 146
4.8 소프트웨어 매트릭 = 147
4.9 CASE = 149
4.10 CASE의 전문용어 = 149
4.11 CASE의 영역 = 151
4.12 소프트웨어 버전 = 156
4.12.1 개정 = 156
4.12.2 변형 = 157
4.13 형상관리 = 158
4.13.1 프로덕트 유지보수시 형상관리 = 161
4.13.2 기준선 = 161
4.13.3 프로덕트 개발시 형상관리 = 162
4.14 구축 툴 = 163
4.15 CASE 기술로 취득한 생산성 = 164
복습 = 165
관련 자료 = 166
연습문제 = 167
참고 문헌 = 169
제5장 테스팅 = 173
5.1 품질 문제 = 174
5.1.1 소프트웨어 품질 보증 = 175
5.1.2 관리의 독립성 = 176
5.2 비실행-기반 테스팅 = 176
5.2.1 워크스루 = 177
5.2.2 워크스루 관리 = 177
5.2.3 감사 = 179
5.2.4 감사와 워크스루 비교 = 181
5.2.5 검토의 강점과 약점 = 182
5.2.6 감사를 위한 매트릭 = 182
5.3 실행-기반 테스팅 = 183
5.4 무엇을 테스트해야 하는가? = 183
5.4.1 유용성 = 185
5.4.2 신뢰성 = 185
5.4.3 강건성 = 185
5.4.4 성능 = 186
5.4.5 정확성 = 187
5.5 테스팅과 정확성 증명 = 189
5.5.1 정확성 증명의 예 = 189
5.5.2 정확성 증명의 사례 연구 = 193
5.5.3 정확성 증명과 소프트웨어 공학 = 194
5.6 실행-기반 테스팅을 누가 수행하는가? = 198
5.7 분산 소프트웨어 테스팅 = 200
5.8 실시간 소프트웨어 테스팅 = 201
5.9 테스팅은 언제 종료되는가? = 204
복습 = 204
관련 자료 = 205
연습문제 = 207
참고 문헌 = 209
제6장 객체의 소개 = 215
6.1 모듈이란 무엇인가? = 215
6.2 응집도 = 220
6.2.1 우연적 응집도 = 220
6.2.2 논리적 응집도 = 221
6.2.3 시간적 응집도 = 223
6.2.4 절차적 응집도 = 223
6.2.5 교환적 응집도 = 223
6.2.6 정보적 응집도 = 224
6.2.7 기능적 응집도 = 225
6.2.8 응집도 예제 = 226
6.3 결합도 = 227
6.3.1 내용 결합도 = 228
6.3.2 공통 결합도 = 228
6.3.3 제어 결합도 = 231
6.3.4 스템프 결합도 = 231
6.3.5 데이터 결합도 = 233
6.3.6 결합도 예제 = 233
6.3.7 결합도의 중요성 = 235
6.4 데이터 캡슐화 = 236
6.4.1 데이터 캡슐화 프로덕트 개발 = 239
6.4.2 데이터 캡슐화와 프로덕트 유지보수 = 241
6.5 추상 데이터 타입 = 246
6.6 정보 은닉 = 248
6.7 객체 = 251
6.8 상속성, 다형성, 동적 바인딩 = 255
6.9 객체의 응집도와 결합도 = 258
복습 = 259
관련 자료 = 259
연습문제 = 261
참고 문헌 = 262
제7장 재사용성, 이식성, 상호운용성 = 267
7.1 재사용 개념 = 267
7.2 재사용에 방해 = 269
7.3 재사용 사례 연구 = 270
7.3.1 Raytheon Missile System Division = 270
7.3.2 Toshiba Software Factory = 272
7.3.3 NASA Software = 273
7.3.4 GTE Data Services = 275
7.3.5 HEWLETT-PACKARD = 275
7.3.6 EUROPEAN SPACE AGENCY = 276
7.4 객체와 생산성 = 278
7.5 설계와 구현 단계시에 재사용 = 280
7.5.1 모듈 재사용 = 280
7.5.2 어플리케이션 프레임워크 = 281
7.5.3 설계 패턴 = 283
7.5.4 소프트웨어 아키텍처 = 288
7.6 재사용과 유지보수 = 288
7.7 이식성 = 290
7.7.1 하드웨어 비호환성 = 291
7.7.2 운영체제 비호환성 = 292
7.7.3 수치 소프트웨어 비호환성 = 292
7.7.4 컴파일러 비호환성 = 293
7.8 왜 이식성인가? = 300
7.9 이식성을 달성하는 기법 = 301
7.9.1 이식 가능한 시스템 소프트웨어 = 301
7.9.2 이식 가능한 어플리케이션 소프트웨어 = 302
7.9.3 이식 가능한 데이터 = 304
7.10 상호운용성 = 304
7.10.1 OLE, COM, 그리고 AXTIVEX = 305
7.10.2 CORBA = 306
7.10.3 OLE/COM과 CORBA 비교 = 307
7.11 상호운용성의 미래 추세 = 308
복습 = 308
관련 자료 = 309
연습문제 = 310
참고 문헌 = 313
제8장 계획수립과 추정 = 321
8.1 계획수립과 소프트웨어 프로세스 = 321
8.2 개발 기간과 비용추정 = 323
8.2.1 프로덕트의 크기에 대한 매트릭 = 325
8.2.2 비용추정 기법 = 330
8.2.3 중간급 COCOMO = 332
8.2.4 COCOMO Ⅱ = 336
8.2.5 개발주기와 비용추정 추적 = 338
8.3 소프트웨어 프로젝트 관리 계획의 컴포넌트 = 338
8.4 소프트웨어 프로젝트 관리 계획 프레임워크 = 341
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
참고 문헌 = 356
제2부 소프트웨어 생명주기의 단계 = 361
제9장 요구사항 단계 = 363
9.1 요구사항 분석 단계 = 364
9.2 라피드 프로토타이핑 = 366
9.3 인적 인자 = 368
9.4 명세 기법으로의 라피드 프로토타이핑 = 369
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 사례 연구 : 라피드 프로토타입 = 385
9.16 객체-지향 요구사항 = 388
복습 = 389
관련 자료 = 389
연습문제 = 390
참고 문헌 = 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 유한 상태 기계 = 413
10.6.1 엘리베이터 문제 : 유한 상태 기계 = 415
10.7 PETRI NET = 421
10.7.1 엘리베이터 문제 : 페트리 넷 = 425
10.8 Z = 428
10.8.1 엘리베이터 문제 : Z = 429
10.8.2 Z의 분석 = 432
10.9 다른 정형 기법 = 433
10.10 명세 기법의 비교 = 435
10.11 명세 단계시 테스팅 = 436
10.12 명세 단계용 CASE 툴 = 437
10.13 명세 단계용 매트릭 = 438
10.14 OSBERT OGLESBY 사례 연구 : 구조적 시스템 분석 = 438
10.15 OSBERT OGLESBY 사례 연구 : 소프트웨어 프로젝트 관리 계획 = 439
복습 = 440
관련 자료 = 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
관련 자료 = 475
연습문제 = 476
참고 문헌 = 478
제12장 설계 단계 = 481
12.1 설계와 추상화 = 482
12.2 액션-중심 설계 = 483
12.3 데이터 흐름 분석 = 483
12.3.1 데이터 흐름 분석 예제 = 485
12.3.2 확장안 = 489
12.4 트랜잭션 분석 = 490
12.5 데이터-중심 설계 = 492
12.6 객체-지향 설계 = 493
12.7 엘리베이터 문제 : 객체-지향 설계 = 494
12.8 상세 설계의 정형 기법 = 501
12.9 실시간 설계기법 = 501
12.10 설계 단계시 테스팅 = 503
12.11 설계 단계용 CASE 툴 = 504
12.12 설계 단계의 매트릭 = 505
12.13 OSBERT OGLESBY 사례 연구 : 객체-지향 설계 = 506
복습 = 512
관련 자료 = 512
연습문제 = 513
참고 문헌 = 514
제13장 구현 단계 = 517
13.1 프로그래밍 언어 선택 = 517
13.2 4세대 언어 = 521
13.3 올바른 프로그래밍 습관 = 524
13.4 코딩 표준 = 530
13.5 모듈 재사용 = 531
13.6 모듈 테스트 사례 선택 = 531
13.6.1 명세 테스팅과 코드 테스팅 = 532
13.6.2 명세에 대한 테스팅의 타당성 = 532
13.6.3 코드 테스팅의 타당성 = 533
13.7 블랙-박스 모듈-테스팅 기법 = 536
13.7.1 동등 테스팅과 경계값 분석 = 536
13.7.2 기능 테스팅 = 538
13.8 글래스-박스 모듈 테스팅 기법 = 539
13.8.1 구조적 테스팅 : 문, 분기, 경로 범위 = 539
13.8.2 복잡도 매트릭 = 540
13.9 코드 워크스루와 감사 = 543
13.10 모듈-테스팅 기법들의 비교 = 544
13.11 CLEANROOM = 544
13.12 객체를 테스팅할 때 잠재적 문제점 = 546
13.13 모듈 테스팅의 관리 측면 = 549
13.14 모듈의 디버깅보다 재작성할 시기 = 550
13.15 구현 단계용 CASE 툴 = 551
13.16 OSBERT OGLESBY 사례 연구 : 블랙-박스 테스트 사례 = 552
복습 = 552
관련 자료 = 554
연습문제 = 555
참고 문헌 = 557
제14장 구현과 통합 단계 = 563
14.1 구현과 통합 = 563
14.1.1 하향식 구현과 통합 = 564
14.1.2 상향식 구현과 통합 = 566
14.1.3 샌드위치 구현과 통합 = 567
14.1.4 객체-지향 프로덕트의 구현과 통합 = 569
14.1.5 구현과 통합 단계시 관리적 쟁점 = 569
14.2 구현과 통합 단계시 테스팅 = 570
14.3 GUI의 통합 테스팅 = 570
14.4 프로덕트 테스팅 = 571
14.5 인증 테스팅 = 573
14.6 구현과 통합 단계용 CASE 툴 = 574
14.7 완전한 소프트웨어 프로세스용 CASE 툴 = 574
14.8 통합 환경 = 575
14.8.1 프로세스 통합 = 575
14.8.2 툴 통합 = 576
14.8.3 통합의 다른 형식 = 579
14.9 비즈니스 어플리케이션 환경 = 579
14.10 툴 기반 구조 = 580
14.11 환경이 갖는 잠재적 문제점 = 580
14.12 구현과 통합 단계용 매트릭 = 581
14.13 OSBERT OGLESBY 사례 연구 : 구현과 통합 단계 = 582
복습 = 582
관련 자료 = 583
연습문제 = 584
참고 문헌 = 585
제15장 유지보수 단계 = 589
15.1 유지보수가 왜 필요한가 = 589
15.2 유지보수 프로그래머에 요구되는 것은 무엇인가 = 590
15.3 유지보수 사례 연구 = 593
15.4 유지보수 관리 = 594
15.4.1 결함 보고 = 594
15.4.2 프로젝트의 변경 권한 = 596
15.4.3 유지보수성의 보장 = 597
15.4.4 반복되는 유지보수의 문제 = 597
15.5 객체-지향 소프트웨어의 유지보수 = 598
15.6 유지보수 기술 대 개발 기술 = 602
15.7 역 공학 = 602
15.8 유지보수 단계시에 테스팅 = 603
15.9 유지보수 단계용 케이스 툴 = 604
15.10 유지보수 단계용 매트릭 = 605
15.11 OSBERT OGLESBY 사례 연구 : 유지보수 = 605
복습 = 606
관련 자료 = 607
연습문제 = 607
참고 문헌 = 609
부록 A AIR GOURMET = 611
부록 B 소프트웨어 공학 자원들 = 615
부록 C OSBERT OGLESBY 사례 연구 : 라피드 프로토타입 = 619
부록 D OSBERT OGLESBY 사례 연구 : 구조적 시스템 분석 = 621
부록 E OSBERT OGLESBY 사례 연구 : 객체-지향 분석 = 625
부록 F OSBERT OGLESBY 사례 연구 : 소프트웨어 프로젝트 관리 계획 = 627
부록 G OSBERT OGLESBY 사례 연구 : 설계 = 633
부록 H OSBERT OGLESBY 사례 연구 : 블랙-박스 테스트 사례 = 653
부록 I OSBERT OGLESBY 사례 연구 : 완전한 소스 코드 = 657
찾아보기 = 659