목차
제1부 : 전통적 방법론
제1장 소프트웨어와 소프트웨어 개발 개요
1.1 소프트웨어와 시스템 = 4
1.1.1 소프트웨어 = 4
1.1.2 시스템 = 5
1.2 소프트웨어 위기 = 7
1.3 소프트웨어 공학 = 9
1.3.1 소프트웨어의 품질 = 10
1.3.2 소프트웨어 생산성 = 16
1.3.3 소프트웨어 공학의 세 가지 측면 = 17
1.3.4 소프트웨어 엔지니어가 하는 일 = 19
1.4 소프트웨어 개발 모형 = 20
1.4.1 폭포수 모형 = 21
1.4.2 프로토타이핑 모형 = 26
1.4.3 점중적 모형 = 29
1.5 소프트웨어 개발에 영향을 미치는 요소 = 30
1.5.1 의사 소통 = 30
1.5.2 프로젝트의 성격 = 31
1.5.3 프로그래머의 역량 = 32
1.5.4 관리 = 33
1.6 소프트웨어 공학의 역사 = 33
1.7 실습 프로젝트 = 37
1.7.1 프로젝트 진행 방법 = 37
1.7.2 프로젝트 문제 = 38
연습문제 = 40
제2장 계획
2.1 문제의 정의 = 44
2.2 일정 계획 = 46
2.2.1 작업 분해 = 46
2.2.2 CPM 네트워크 = 47
2.2.3 프로젝트 일정표 = 50
2.3. 예산 계획 = 53
2.3.1 COCOMO 방법 = 54
2.3.2 기능 점수 방법 = 59
2.4 조직 계획 = 61
2.4.1 중앙 집중식 팀 구성 = 63
2.4.2 분산형 팀 구성 = 64
2.4.3 혼합형 팀 구성 = 65
2.5 위험 분석 = 66
2.6 계획서 작성 = 69
연습문제 = 71
제3장 요구 분석
3.1 요구 분석 = 77
3.1.1 분석 = 77
3.1.2 명세화 = 78
3.2 구조적 분석 = 80
3.3 자료 흐름도 = 82
3.3.1 구성 요소 = 82
3.3.2 추상화와 단계적 분해 = 85
3.3.3 자료 흐름의 균형 = 86
3.3.4 자료 흐름도 작성 방법 = 87
3.3.5 시스템의 진화 = 88
3.3.6 예: 수강 신청 관리 = 89
3.3.7 자료 흐름도 다듬기 = 93
3.4 자료 사전 = 98
3.5 소단위 명세서 = 100
3.5.1 구조적 영어 = 101
3.5.2 의사 결정표 = 104
3.5.3 의사 결정도 = 106
3.6 요구 분석 명세서 = 106
3.6.1 요구 분석 명세서 작성 = 108
3.6.2 요구 분석 명세서의 평가 = 109
연습문제 = 110
제4장 설계
4.1 설계 원리 = 115
4.1.1 추상화 = 116
4.1.2 정보 은닉 = 117
4.1.3 단계적 분해 = 118
4.1.4 모듈화 개념 = 119
4.2 소프트웨어 구조 = 123
4.3 변환 분석 = 127
4.3.1 최상위 모듈을 위한 변환 분석 = 128
4.3.2 하위 모듈을 위한 변환 분석 = 130
4.3.3 변환 분석에서 고려할 점 = 132
4.4 처리 분석 = 134
4.5 자료 설계 = 136
4.5.1 자료구조 설계 = 136
4.5.2 데이터베이스 설계 = 138
4.6 알고리즘 설계 = 140
4.6.1 알고리즘의 선택 = 140
4.6.2 알고리즘의 표현 = 143
4.6.3 내부 자료구조 설계 = 147
4.7 사용자 인터페이스 설계 = 148
4.7.1 사용자 분석 = 149
4.7.2 대화 설계 원리 = 150
4.7.3 상호작용 형태 = 152
4.7.4 화면 설계 = 160
4.8 자료구조 중심 설계 = 160
4.8.1 구조 다이어그램 = 161
4.8.2 JSP 설계 과정 = 164
4.9 설계서 작성 = 167
연습문제 = 172
제5장 구현
5.1 프로그래밍 언어의 선택 = 178
5.1.1 표현력과 적합성 = 179
5.1.2 단순성, 명확성, 직교성 = 180
5.1.3 언어의 문형 = 181
5.1.4 제어구조 = 183
5.1.5 자료형 = 186
5.1.6 상수 = 190
5.1.7 프로시저와 함수 = 190
5.1.8 프로시저 및 자료 추상화 = 192
5.1.9 재사용 = 193
5.2 4세대 프로그래밍 언어 = 195
5.3 비주얼 프로그래밍 언어 = 197
5.4 구조적 코딩 기법 = 210
5.5 코딩 스타일 = 203
5.5.1 스타일1 : 명확하게 작성하라 = 203
5.5.2 스타일2 : 수식에서 의미하는 바를 간결하고 직접적으로 표현하라 = 206
5.5.3 스타일3 : 임시변수의 사용을 피하라 = 208
5.5.4 스타일4 : 혼돈을 초래하지 않을 변수명을 선택하라 = 208
5.5.5 스타일5 : 일관성 있는 변수명을 사용하라 = 209
5.5.6 스타일6 : 문장 그룹이 명확히 구별되도록 { } 와 들여 쓰기를 사용한다 = 210
5.5.7 스타일7 : 두 가지 중 하나가 선택되는 제어구조는 if...else로 강조한다 = 210
5.5.8 스타일8 : if다음에 if가 따라오는 구조나 null else는 피할 것 = 211
5.5.9 스타일9 : 문장의 반복은 최소화한다 = 212
5.5.10 스타일10 : 모듈화하라, 서브루틴을 사용하라 = 213
5.5.11 그 밖의 원칙들 = 215
5.6 원시 코드의 문서화 = 215
연습문제 = 219
제6장 테스트
6.1 테스트 = 224
6.2 테스트의 원리 = 225
6.3 화이트 박스 테스트 = 229
6.3.1 논리 흐름도에 의한 표현 = 230
6.3.2 테스트 케이스 = 234
6.3.3 화이트 박스 테스트의 수행 = 235
6.4 블랙 박스 테스트 = 237
6.5 자료구조 중심 테스트 = 240
6.6 통합 테스트 = 241
6.6.1 동시식 통합 = 243
6.6.2 하향식 통합 = 243
6.6.3 상향식 통합 = 244
6.6.4 연쇄식 통합 = 244
6.6.5 통합 테스트 계획 = 246
6.6.6 기타 통합 테스트 = 247
6.7 인수 테스트 = 251
연습문제 = 252
제7장 유지 보수
7.1 유지 보수 작업 = 259
7.1.1 유지 보수 작업 = 260
7.1.2 유지 보수 접근 방법 = 262
7.1.3 유지 보수 비용 = 263
7.1.4 유지 보수에서의 문제점 = 264
7.2 소프트웨어 형상 관리 = 265
7.2.1 관리적인 측면 = 266
7.2.2 기술적인 측면 = 268
7.3 소프트웨어 척도 = 272
7.3.1 복잡도 측정 = 272
7.3.2 Halstead의 척도 = 273
7.4 유지 보수 방법 및 도구 = 276
7.4.1 유지 보수 방법 = 276
7.4.2 유지 보수 도구 = 279
연습문제 = 282
제8장 사례 연구1: 비디오 대여점
8.1 문제 정의 및 계획 = 284
8.1.1 문제 정의 = 284
8.1.2 계획 = 285
8.3 요구 분석 = 290
8.3 설계 = 294
8.3.1 구조 설계 = 294
8.3.2 프로그램 및 UI 설계 = 298
8.4 테스트 = 298
제2부: 객체지향 방법론
제9장 객체지향 패러다임
9.1 절차식 패러다임의 문제점 = 305
9.1.1 낮은 생산성 = 305
9.1.2 높은 유지 보수 비용 = 307
9.1.3 분석, 설계, 구현의 분리 = 308
9.1.4 소프트웨어 비용 = 309
9.2 문제의 본질 = 309
9.2.1 원시 코트에 스며든 요구 명세 = 310
9.2.2 최상위 모듈 없는 프로그램 = 312
9.2.3 하향식 설계의 문제점 = 314
9.3 모듈러 프로그래밍 = 314
9.3.1 모듈을 이용한 프로그램 = 314
9.3.2 제너릭 패키지의 이용 = 316
9.4 객체지향 프로그래밍 = 316
9.4.1 상속 = 317
9.4.2 동적 바인딩 = 320
9.4.3 객체지향 프로그램의 예 = 322
9.5 객체지향 분석 및 설계 = 329
연습문제 = 332
제10장 객체지향 프로그래밍의 원리
10.1 클래스 = 337
10.2 상속 계층의 정의 = 341
10.3 접근 제어 = 345
10.4 상속 = 348
10.4.1 단일 상속 = 348
10.4.2 다중 상속 = 349
10.5 객체 = 356
10.6 메모리에서의 객체 표현 = 361
10.7 다형성 = 364
10.8 추상 클래스 = 367
연습문제 = 370
제11장 객체와 클래스
11.1 객체 = 372
11.1.1 상태 = 374
11.1.2 행위 = 377
11.1.3 정체성 = 381
11.2 클래스 = 385
11.3 객체 및 클래스 사이의 관계 = 387
11.3.1 사용 관계 = 387
11.3.2 포함 관계 = 390
11.3.3 상속 관계 = 392
11.3.4 연관 관계 = 398
연습문제 = 400
제12장 C++ 프로그래밍에서의 클래스
12.1 클래스의 정의 = 403
12.1.1 개요 = 403
12.1.2 멤버 함수의 정의 = 404
12.1.3 보호 단위로서의 클래스 = 406
12.1.4 생성자 = 407
12.1.5 중복된 멤버 함수 = 411
12.1.6 인라인 함수 정의 = 414
12.1.7 상수 인스턴스 = 417
12.1.8 오퍼레이터 함수 = 419
12.1.9 생성자의 타입 변환 함수 역할 = 423
12.1.10 스트림 I/O = 425
12.1.11 프렌트 함수 = 428
12.1.12 클래스 Rrctangle = 430
12.1.13 부속 객체의 초기화 = 431
12.1.14 클래스 안에서 정의된 열거형의 사용 = 433
12.1.15 상수 데이터 멤버 = 433
12.1.16 Point와 Rectangle의 입출력 함수 = 435
12.2 클래스의 자원 관리 = 437
12.2.1 메모리 누수와 소멸자 = 439
12.2.2 고립된 포인터와 클래스 배정문 = 442
12.3 프로그램 실행 = 449
12.4 클러스터 = 459
12.4.1 클래스 LinkedList = 459
12.4.2 객체 사이의 상호작용 = 462
12.4.3 클래스 LinkedList의 구현 = 464
12.4.4 클래스 Link = 466
12.4.5 클래스 LinkedListIterator = 468
연습문제 = 470
제13장 상속과 가상 함수
13.1 상속 = 473
13.2 보호 접근 = 475
13.3 가상 함수 = 477
13.3.1 상속 함수의 대치 = 477
13.3.2 멤버 함수의 정적 및 동적 바인딩 = 479
13.4 비공개 상속 = 482
13.5 프렌드 함수 = 484
13.5.1 클레스 Item = 484
13.5.2 클래스 LinkedList = 490
연습문제 = 494
제14장 객체지향 분석과 설계
14.1 객체지향 개발과정 = 498
14.1.1 개발 모형 = 498
14.1.2 시스템 모형 = 501
14.2 객체지향 분석 = 509
14.2.1 문제 정의 = 510
14.2.2 객체 모형화 = 513
14.2.3 동적 모형화 = 525
14.2.4 기능 모형화 = 534
14.3 객체지향 설계 = 538
14.3.1 시스템 설계 = 538
14.3.2 객체 설계 = 543
14.4 UML = 547
14.4.1 사용 사례 다이어그램 = 549
14.4.2 클래스 다이어그램 = 551
14.4.3 상호작용 다이어그램 = 553
14.4.4 패키지 다이어그램 = 556
14.4.5 배치 다이어그램 = 557
연습문제 = 558
제15장 객체지향 테스트와 메트릭스
15.1 객체지향 테스트의 차이점 = 563
15.2 객체지향 테스트의 방법 = 565
15.2.1 단위 테스트 = 565
15.2.2 통합 테스트 = 565
15.3 명세 기반 테스트 = 569
15.4.1 클래스의 복잡도 = 576
15.4.2 클래스 사이의 상호작용 = 577
15.4.3 클래스 사이의 상속 관계 = 577
15.4.4 재사용성 = 578
연습문제 = 578
제16장 사례 연구2 : 급여 시스템
16.1 급여 시스템 문제 = 579
16.2 클래스 추출 = 580
16.3 사용 사례 분석 = 582
16.3.1 신입 사원 입력 = 583
16.3.2 퇴직 사원 삭제 = 584
16.3.3 타임카드 입력 = 585
16.3.4 판매 영수증 입력 = 585
16.3.5 조합 서비스 요금 입력 = 586
16.3.6 사원 정보 변경 = 587
16.3.7 급여일 = 588
16.4 클래스의 추가 발견 = 590
16.5 동적 분석 = 592
16.5.1 신입 사원 추가 = 592
16.5.2 퇴직 사원 삭제 = 594
16.5.3 타임카드, 판매 영수증, 서비스 요금 입력 = 594
16.5.4 사원 정보의 변경 = 595
16.5.5 급여 지급 = 601
16.5.6 메인 프로그램 = 602
16.6 C++ 언어를 이용한 구현 = 603
16.6.1 PayrollDomain 서브 시스템 = 603
16.6.2 PayrollFactory 서브 시스템 = 604
16.6.3 PayrollImplementation 서브 시스템 = 605
제3부 : 기타
제17장 정보공학 방법론
17.1 정보 전략 계획 수립 = 612
17.2 비즈니스 영역 분석 = 614
17.2.1 비즈니스 데이터 분석 = 615
17.2.2 비즈니스 기능 분석 = 622
17.3 시스템 설계 = 634
17.3.1 액션 다이어그램 작성 = 635
17.3.2 메뉴 구조도 및 메뉴 흐름도 작성 = 640
연습문제 = 642
제18장 소프트웨어 공학 동향
18.1 CASE = 645
18.1.1 CASE 개념 = 645
18.1.2 CASE 기술 = 646
18.1.3 소프트웨어 개발 환경 = 648
18.1.4 상위 CASE = 650
18.1.5 하위 CASE = 653
18.1.6 통합 CASE = 656
18.2 사용자 인터페이스 관리 시스템 = 657
18.2.1 X Window = 659
18.3 소프트웨어 재사용 = 661
18.3.1 불록 구성 방법 = 663
18.3.2 생성 방법 = 663
18.3.3 소프트웨어 부품화 기술 = 664
18.3.4 객체지향 개념에 의한 재사용 = 667
18.4 소프트웨어 리엔지니어링 = 668
18.4.1 배경 = 668
18.4.2 리엔지니어링과 관련된 정의 = 670
18.4.3 리엔지니어링의 목적 = 671
18.4.4 리엔지니어링 기술 = 672
18.5 실시간 소프트웨어 설계 = 679
18.5.1 실시간 시스템에서의 이슈 = 680
18.5.2 실시간 시스템 설계 기법 = 681
부록 : 프로젝트 문제 = 684
참고문헌 = 699
찾아보기 = 702