Chapter 1 임베디드 소프트웨어 개요 1.1 유비쿼터스 컴퓨팅 ... 3 1.1.1 정의 및 특징 ... 3 1.1.2 유비쿼터스 컴퓨팅의 발전 과정 및 동향 ... 4 1.2 임베디드 시스템 ... 6 1.2.1 임베디드 시스템의 정의 및 특징 ... 6 1.2.2 임베디드 시스템의 분류 ... 8 1.3 임베디드 소프트웨어 ... 8 1.4 임베디드 소프트웨어 연구 동향 ... 10 1.4.1 미국의 개발 동향 ... 10 1.4.2 유럽의 기술 개발 동향 ... 11 1.4.3 국내의 연구 동향 ... 12 1.5 소프트웨어 위기 ... 12 Chapter 2 임베디드 소프트웨어 공학 2.1 소프트웨어 공학의 역사 ... 19 2.2. 소프트웨어 공학의 정의 ... 23 2.2.1 개요 및 정의 ... 23 2.2.2 공학적으로 잘 작성된 소프트웨어 ... 25 2.3 소프트웨어 공학 품질 ... 27 2.3.1 소프트웨어 공학 품질 정의 ... 27 2.3.2 소프트웨어 품질 요소 ... 28 2.3.3 응용 영역별 품질 요구사항 ... 29 2.4 소프트웨어 개발 생명주기 모델 ... 30 2.4.1 폭포수(Waterfall) 모델 ... 32 2.4.2 프로토타이핑 모델 ... 36 2.4.3 점증적 모델(나선형 모델) ... 38 2.4.4 정형 방법 모델 ... 42 2.4.5 컴포넌트 재사용 모델 ... 43 2.5 소프트웨어 공학에서의 인간요소 ... 45 2.5.1 개요 ... 45 2.5.2 그룹 업무 ... 46 2.5.3 인간공학(Ergonomics) ... 50 Chapter 3 소프트웨어 프로세스 3.1 개발 프로셰스 이해 ... 57 3.1.1 방법론이란? ... 57 3.2 Unified Process 적용 ... 58 3.2.1 단계(Phase) 뷰 ... 58 3.2.2 작업영역(Disciplines) 뷰 ... 61 3.3 최신 개발 프로세스 ... 63 3.3.1 XP(eXtreme Programming) ... 63 3.3.2 MDA(Model Driven Architecture) ... 67 3.3.3 PLD(Product Line based Development) ... 72 3.4 임베디드 소프트웨어 개발 프로세스 ... 76 3.4.1 임베디드 시스템 개발 프로세스 ... 76 3.4.2 임베디드 시스템 위험요소 최소화 ... 78 3.4.3 임베디드 소프트웨어 요구분석 ... 79 3.4.4 임베디드 소프트웨어 설계 ... 81 Chapter 4 임베디드 소프트웨어 관리 4.1 소프트웨어 관리 ... 87 4.1.1 소개 ... 87 4.1.2 관리 활동 ... 88 4.1.3 소프트웨어의 관리 구조 ... 90 4.1.4 프로그래머 생산성 ... 95 4.2 소프트웨어 일정 계획 ... 100 4.2.1 소개 ... 100 4.2.2 프로젝트 이정표(Project Milestones) ... 102 4.2.3 CPM 네트워크 ... 103 4.2.4 Gantt 차트 ... 105 4.3 소프트웨어 예산 계획 ... 107 4.3.1 소개 ... 107 4.3.2 COCOMO 모델 ... 108 4.4 계획서 작성 ... 142 Chapter 5 임베디드 소프트웨어 요구사항 분석 5.1 요구사항 분석 개요 ... 147 5.1.1 요구사항 분석 정의 ... 147 5.1.2 요구사항 유형 ... 149 5.1.3 요구사항 정의의 중요성 ... 150 5.2 요구사항 관리 기법 ... 153 5.2.1 인터뷰(Interview) ... 153 5.2.2 질의(Question) ... 153 5.2.3 브레인스토밍(Brainstorming) ... 154 5.2.4 워크샵(Workshop) ... 154 5.2.5 프로토타이핑(Prototyping) ... 155 5.2.6 스토리보드(Sotryboard) ... 155 5.2.7 의사소통 ... 156 5.3 요구사항 프로세스 ... 156 5.3.1 일반적인 S/W 개발에서 요구사항 관련 프로세스 ... 156 5.3.2 CBD 방법론에서 요구사항 관련 프로세스 ... 160 5.3.3 임베디드 S/W 개발에서 요구사항 관련 프로세스 ... 165 5.4 요구사항 명세 방법 ... 173 5.4.1 요구사항 명세의 문제점 ... 174 5.4.2 요구사항 명세 원칙 ... 175 5.4.3 요구사항 명세 방법 ... 179 5.4.4 요구사항 명세 절차 ... 180 5.4.5 관련 산출물 ... 181 5.5 요구사항 모델링 ... 183 5.5.1 UML(Unified Modeling Language) ... 183 5.5.2 요구사항 모델링 ... 185 5.5.3 Usecase 모델링 ... 186 5.5.4 유스케이스 실현 ... 193 5.5.5 유스케이스 기술서 ... 195 5.6 요구사항 검증(Requirements Validation) ... 197 Chapter 6 임베디드 소프트웨어 아키텍처 6.1 정의 및 개요 ... 203 6.2 역할 및 영향 요소 ... 204 6.3 아키텍처 구조와 뷰 ... 207 6.4 소프트웨어 아키텍처 설계 결정 ... 211 Chapter 7 객체지향 패러다임 7.1 개요 ... 219 7.1.1 객체(object) ... 219 7.1.2 클래스(class) ... 219 7.1.3 실체(instance) ... 220 7.1.4 메시지(message) ... 220 7.1.5 메소드(method) ... 220 7.2 객체지향 도식 표현 방법 ... 221 7.2.1 객체, 클래스 ... 221 7.2.2 속성 ... 221 7.2.3 오퍼레이션과 메소드 ... 222 7.2.4 링크와 결합(link and association) ... 222 7.3 객체지향 분석 및 설계 방법 ... 223 7.3.1 객체지향 분석의 6단계 ... 224 7.3.2 객체지향 설계 예 ... 234 7.4 객체 모델링 ... 246 7.4.1 개요 ... 246 7.4.2 객체 모델 ... 248 7.4.3 동적 모델 ... 252 7.4.4 객체 모델링 분석의 필요성 ... 253 Chapter 8 실시간 설계를 위한 UML(RT-UML) 8.1 개요 ... 259 8.1.1 UML의 이해 ... 259 8.1.2 UML 구조 ... 261 8.2 UML(Unified Modeling Language) 2.0 ... 267 8.2.1 구조 다이어그램 ... 268 8.2.2 행위 다이어그램 ... 277 8.2.3 상호작용 다이어그램 ... 281 8.3 RT-UML(Real Time-UML) 개념 ... 283 8.3.1 RT-UML 개요 ... 283 8.3.2 RT 시스템을 위한 UML ... 284 8.3.3 UML 방식으로 임베디드 시스템 개발 ... 287 8.4 시스템 분석(RT-UML) ... 289 8.5 시스템 설계(RT-UML) ... 295 Chapter 9 임베디드 소프트웨어 개발 환경 9.1 임베디드 소프트웨어 개발 환경 ... 301 9.1.1 개발 환경의 필요성 및 분류 ... 301 9.1.2 개발 환경 ... 301 9.2 임베디드 소프트웨어 개발 환경 구축 ... 302 9.2.1 임베디드 소프트웨어 개발 환경 설치 ... 302 9.2.2 부트 로더 ... 303 9.2.3 커널 ... 303 9.2.4 파일 시스템 ... 305 9.2.5 응용 프로그램 작성 ... 306 9.2.6 웹 서버 포팅 ... 310 Chapter 10 소프트웨어 테스팅 10.1 테스팅의 정의 ... 313 10.1.1 단위 테스팅 ... 314 10.1.2 통합 테스팅 ... 316 10.1.3 확인 테스팅 ... 318 10.1.4 시스템 테스팅 ... 318 10.1.5 프로그램 디버깅(debugging) ... 319 10.2 블랙박스 테스트 ... 320 10.3 화이트박스 테스트 ... 327 10.4 테스팅 도구 ... 335 10.4.1 테스팅 도구의 구성 ... 335 10.4.2 정적 분석기(Static Analyzer) ... 336 10.4.3 동적 분석기(Dynamic Analyzer) ... 338 10.4.4 기호 실행(Symbolic Execution) ... 343 10.5 컴포넌트 테스팅 ... 344 10.5.1 개요 ... 344 10.5.2 컴포넌트 테스트 준비 ... 346 10.5.3 컴포넌트 테스트 수행 ... 351 10.5.4 컴포넌트 테스트 검토 ... 353 Chapter 11 소프트웨어 품질 관리 11.1 소프트웨어 품질 목표 ... 357 11.2 소프트웨어 품질 보증을 위한 접근 방법 ... 358 11.3 국제표준화기구(ISO)의 품질 목표 ... 361 11.4 품질 기준에 맞는 품질 척도 ... 363 11.4.1 Halstead의 소프트웨어 사이언스 ... 363 11.4.2 McCabe의 복잡도 척도 ... 365 11.4.3 Knot 카운트 ... 366 11.4.4 Chen의 프로그램 복잡도 측정 ... 366 11.4.5 Chapine의 Q측정 ... 367 11.4.6 정보흐름(information flow)을 이용한 복잡도 측정 ... 367 11.4.7 소프트웨어 신뢰성과 이용가능성 측정 ... 368 11.5 프로세스 품질 ... 368 11.5.1 CMM(Capability Maturity Model) ... 369 11.5.2 CMMI(Capability Maturity Model Integration) ... 373 11.6 객체지향적 환경하의 품질 평가 방법 ... 374 11.7 워크스루와 인스펙션 ... 375 찾아보기 ... 379