목차
제1장 소프트웨어와 소프트웨어 공학
1. 시스템(System)이란? = 3
2. 컴퓨터 기반 시스템(Computer-Based System) = 4
(1) 정의(Definition) = 4
(2) 구성요소 = 4
3. 소프트웨어(Software) = 7
(1) 소프트웨어란? = 7
(2) 소프트웨어의 특성 = 7
(3) 소프트웨어의 중요성 = 11
(4) 소프트웨어 어플리케이션(Application) = 11
(5) 소프트웨어의 발전 = 14
(6) 소프트웨어 위기(Software Crisis) = 17
(7) 소프트웨어에 대한 관념들(Myths) = 20
4. 소프트웨어 공학(Software Engineering) = 23
(1) 소프트웨어 공학이란? = 23
(2) 소프트웨어 공학의 요소 = 24
(3) 소프트웨어 공학의 7가지 기본 원칙 = 27
(4) 좋은 소프트웨어란? = 34
중요 용어 및 연습문제 = 36
제2장 소프트웨어 수명주기
1. 소프트웨어 수명주기(Software Life-Cycle)란? = 39
(1) 개념 = 39
(2) 일반적인 관점(Generic view) = 40
2. 소프트웨어 수명주기 모형(Model) ; Process Model = 42
(1) 선형 순차적 모형(Linear Sequential Model) = 42
(2) 프로토타이핑 모형(Prototyping Model) = 46
(3) 4세대 기술 모형(Fourth-Generation Techniques Model) = 48
(4) 점증적 모형(Incremental Model) = 51
(5) 나선형 모형(The Spiral Model) = 52
(6) 결합형 모형(Combining Model) = 56
중요 용어 및 연습문제 = 57
제3장 소프트웨어 프로젝트 관리
1. 프로젝트 계획(Planning) = 61
(1) 개념 = 61
(2) 소프트웨어 계획단계의 구분 = 64
2. 소프트웨어 프로젝트 예측(Software Project Estimation) = 70
(1) 비용의 예측(Cost Estimation) = 70
(2) 일정(Schedule)의 예측(Estimation) = 75
(3) 경험적 예측모형(Empirical Estimation Model) = 81
(4) 자동 예측 도구 = 87
3. 소프트웨어 계획서 = 88
중요 용어 및 연습문제 = 90
제4장 소프트웨어 요구사항 분석
1. 개요 = 93
2. 요구사항 분석의 목적 = 94
3. 요구사항 분석 과정 = 95
(1) 문제의 인식 = 96
(2) 문제의 평가와 종합 = 96
(3) 모델링 = 97
(4) 명세서 작성 = 97
(5) 명세서 검토 = 98
4. 분석가(Analyst)의 역할과 능력 = 98
(1) 분석가의 범주 = 98
(2) 분석가의 역할(Role) = 99
(3) 분석가의 필요 능력 = 99
5. 분석의 원칙(Analysis Principles) = 101
(1) 정보영역(Information Domain) = 103
(2) 모델링(Modeling) = 105
(3) 분할(Partitioning) = 106
(4) 본질(Essential)과 시행(Implementation) 관점 = 108
(5) 소프트웨어 프로토타이핑(Software Prototyping) = 109
6. 요구사항 분석 방법(RAM ; Requirement Analysis Methods) = 113
(1) 개요 = 113
(2) 일반적인 특성 = 113
(3) 방법(Methodologies) = 114
7. 요구사항 분석 도구(Requirement Analysis Tools) = 129
(1) 수동식 도구 = 129
(2) 자동화 도구 = 131
8. 요구사항 명세서(Requirements Specification) = 135
(1) 요구사항 명세서(Requirement Specification) = 135
(2) 요구사항 명세서 작성의 원칙 = 137
(3) 명세서의 표현(Representation) 방법 = 137
(4) 명세서 검토(Review) = 137
중요 용어 및 연습문제 = 139
제5장 소프트웨어 설계
1. 개요 = 143
(1) 개발 단계 = 144
(2) 소프트웨어 설계와 소프트웨어 공학 = 145
(3) 소프트웨어 품질과 설계원칙 = 147
2. 설계 개념 = 151
(1) 추상화(抽象化, Abstraction) = 152
(2) 명세화(Refinement) = 153
(3) 모듈성(Modularity) = 154
(4) 소프트웨어의 구조와 절차 = 156
(5) 정보은폐(Information Hiding) = 159
(6) 모듈의 기능적 독립(Functional Independence) = 160
3. 효과적인 모듈화를 위한 설계 지침(Design Heuristics for Effective Modularity) = 165
4. 설계과정 = 170
(1) 소프트웨어 설계의 발전과정 = 171
(2) 단계적 명세화(Stepwise Refinement) - 하향식 설계기법 = 172
(3) 구조적 프로그래밍(Structured Programming) = 172
(4) 자료중심(Data Oriented)의 설계 기법 = 172
(5) 개략설계(Preliminary Design) = 173
(6) 상세설계(Detailed Design) = 173
(7) 설계명세서(Design Specification) = 174
(8) 설계검토(Design Review) = 178
(9) 설계검토 방법 = 182
중요 용어 및 연습문제 = 186
제6장 설계 방법
1. 자료흐름 중심 설계(Data-Flow Oriented Design) = 189
(1) 설계와 자료흐름(Design and Data-Flow) = 189
(2) 적용분야 = 189
2. 설계과정의 고려사항 = 190
(1) 자료흐름(Data Flow)의 유형 = 190
(2) 처리절차의 추상화 = 192
(3) 변환분석(Transform Analysis) = 193
(4) 트란잭션 분석(Transaction Analysis) = 203
3. 자료구조 중심 설계(Data Structure Oriented Design) = 209
(1) 설계와 자료구조 = 209
(2) Jackson 방법론 = 211
(3) Warnier-Orr 설계 방법 = 222
4. 상세설계(Detailed Design) = 233
(1) 개요 = 233
(2) 설계도구 = 234
(3) 설계도구의 구조적 구성 = 235
(4) 도형식 설계도구 = 236
(5) 도표식 도구 = 240
(6) 언어식 도구 = 247
(7) 설계도구의 비교 = 250
중요 용어 및 연습문제 = 253
제7장 구현
1. 의의 = 257
2. 변환 절차 = 257
3. 프로그래밍(Programming)언어의 특성 = 258
(1) 심리학적 관점 = 259
(2) 공학적인 관점 = 260
4. 프로그래밍 언어의 분류 = 263
(1) 기계종속형 언어 = 263
(2) 고급언어 = 264
(3) 사용자언어 = 266
5. 코딩형태(Coding Style) = 266
(1) 코드의 문서화 = 267
(2) 자료 선언 = 269
(3) 문장 구성 = 270
(4) 입력과 출력 = 271
6. 효율성 = 273
(1) Code의 효율성 = 273
(2) 기억장소의 효율성 = 274
(3) 입출력의 효율성 = 274
중요 용어 및 연습문제 = 276
제8장 소프트웨어 시험
1. 의의 = 279
2. 소프트웨어 시험 기초 = 280
(1) 시험 목적 = 280
(2) 테스트 원리 = 281
(3) 시험(Test) 절차 = 283
3. White-Box Test와 Black-Box Test = 285
(1) 화이트-박스 시험(White-Box Test) = 286
(2) 블랙-박스 시험(Black-Box Testing) = 287
4. 소프트웨어 시험 전략(Software Testing Strategies) = 288
(1) 소프트웨어 테스트의 전략적 접근법 = 289
(2) 소프트웨어 테스트 조직 = 290
(3) 소프트웨어 테스트 전략 = 291
(4) 확인과 검증(Verification and Validation) = 292
5. 소프트웨어 테스트 단계 = 294
(1) 단위 테스트(Unit Test) = 294
(2) 통합 테스트(Integration Test) = 296
(3) 검증 테스트(Validation Test) = 301
(4) 시스템 테스트(System Test) = 303
6. 테스트 사례(Test Case)의 설계 = 306
(1) 논리 적용 범위(Logic Coverage) = 306
(2) 동등 분할 = 307
(3) 경계값 분석(Boundary Value Analysis) = 308
(4) 그래프 기법 = 308
7. 디버깅(Debugging) = 313
(1) 디버깅 접근 방법 = 313
8. 소프트웨어 신뢰성(Software Reliability) = 315
(1) 소프트웨어 신뢰도의 정의 = 315
(2) 신뢰도 모델(Model) = 316
(3) 정확도의 증명 = 317
9. 자동 시험 도구 = 318
중요 용어 및 연습문제 = 321
제9장 소프트웨어 유지보수
1. 소프트웨어 유지보수의 의의 = 325
(1) 유지보수 정의 = 325
(2) 유지보수(Maintenance) 이유 = 326
(3) 유지보수 작업의 분류 = 327
2. 유지보수의 특성 = 328
(1) 구조적인 유지보수와 비구조적인 유지보수 = 329
(2) 유지보수 비용 = 330
(3) 문제점 = 332
3. 유지보수성(Maintainability) = 332
(1) 유지보수성과 관계되는 통제적 요소(Controlling Factors) = 333
(2) 유지보수 담당자의 개발 참여 = 334
4. 유지보수 업무 = 335
(1) 유지보수 업무 조직 = 335
(2) 보고체제 = 336
(3) 제도적 업무 흐름 = 337
(4) 문서 유지관리 = 338
5. 유지보수 작업의 파급 효과 = 339
(1) 코딩의 파급효과 = 340
(2) 자료의 파급효과 = 340
(3) 문서의 파급효과 = 341
6. 유지보수의 기타 관심 사항 = 341
(1) "Alien Code"의 유지보수 = 342
(2) 예방 유지보수(Preventive Maintenance) 작업 = 343
(3) 예비 부품(Spare Parts) 전략 = 343
중요 용어 및 연습문제 = 345
제10장 객체지향 소프트웨어 공학
1. 서언 = 349
2. 객체지향 개념 = 351
(1) 기본 개념 = 351
(2) 객체지향적 시각 = 354
(3) 클래스(Class) = 355
(4) 객체(Object) = 357
(5) 캡슐화(Encapsulation) = 359
(6) 정보은폐(Information Hiding) = 359
(7) 메시지(Message) = 361
(8) 속성(Attribute)과 속성 상속(Attribute Inheritance) = 362
(9) 복수 속성상속(Multiple Inheritance) = 364
(10) 추상클래스(Abstract Class) = 365
(11) 다형성(Polymorphism) = 366
3. 객체지향 기술의 장·단점 = 367
(1) 객체제향 기술의 장점 = 368
(2) 단점 = 369
4. 객체지향 분석 및 설계 = 369
(1) 의의 = 369
(2) 구조적 방법 = 371
(3) 객체지향적 방법 = 371
(4) 객체지향 분석 및 설계 단계 = 372
5. 객체지향 프로그래밍 언어 = 377
(1) 프로그래밍 언어의 세대 = 377
(2) 제1세대와 제2세대 초반의 언어 = 378
(3) 제2세대 후반과 제3세대 초반의 언어 = 378
(4) 제3세대 후반의 언어 = 379
(5) 객체지향 언어의 특징 = 380
(6) 객체지향 언어의 선택 = 382
중요 용어 및 연습문제 = 384
제11장 소프트웨어 공학의 앞선 주제
1. 정형적 방법(Formal Methods) = 387
(1) 기본 개념 = 387
(2) 덜 정형화된 접근법들의 결함 = 389
(3) 정형적 방법 개념 = 391
(4) 정형적 방법의 열 개 규율 = 397
(5) 정형적 방법의 향후 방향 = 399
2. 클린룸 소프트웨어 공학(Cleanroom Software Engineering) = 400
(1) 개념 = 401
(2) 클린룸 전략 = 402
(3) 기능 명세 = 404
3. 소프트웨어 재사용(Software Reuse) = 408
(1) 재사용에 대한 장애물 = 408
(2) 재사용에 대한 접근법을 설정하기 위한 제안 = 410
(3) 재사용 프로세스 = 411
(4) 도메인 공학 = 413
(5) 재사용 가능한 컴포넌트 구축 = 416
(6) 소프트웨어 재사용의 경제적 고려 = 421
4. 재공학(Reengineering) = 422
(1) 비즈니스 프로세스 재공학 = 422
(2) 소프트웨어 재공학 = 427
(3) 역공학 = 432
(4) 재구성 = 433
(5) 포워드 엔지니어링 = 435
5. CASE = 437
(1) CASE란 무엇인가? = 437
(2) CASE의 빌딩블록 = 438
(3) CASE 도구의 분류 = 439
(4) 통합 CASE 환경 = 444
(5) 통합 아키텍쳐 = 445
(6) CASE 저장소 = 446
중요 용어 및 연습문제 = 451
찾아보기 = 453