목차 일부
제1장 소프트웨어와 소프트웨어 공학
1. 시스템(System)이란? ... 3
2. 컴퓨터 기반 시스템(Computer-Based System) ... 4
(1) 정의(Definition) ... 4
(2) 구성요소 ... 4
3. 소프트웨어(Software) ... 7
(1) 소프트웨어란? ... 7
...
더보기
목차 전체
제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
더보기 닫기