목차 일부
저자서문 ... xiii
역자서문 ... xxi
제1부 소프트웨어 공학 개요 ... 1
제1장 소프트웨어 공학의 영역 ... 5
1.1 역사적인 측면 ... 7
1.2 경제적인 측면 ... 9
1.3 유지보수 측면 ... 9
1.3.1 유지보수의 고전적 그리고 현대적 견해 ... 12
1.3...
더보기
목차 전체
저자서문 ... 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
더보기 닫기