목차
저자서문 ... 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
닫기