로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

임베디드 시스템을 위한 소프트웨어 공학 총론

 [에이콘 임베디드 시스템 시리즈]
   
지은이 로버트 오샤나, 마크 크랠링   |   출판사 에이콘  |   발행일 2015년 07월 31일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 60,000원54,000원 10%
마일리지 5% 3,000원
발행일 2015-07-31
ISBN 8960777412 | 9788960777415
기타정보 번역서 | 1248쪽 | 일반
예상출고일 1~2일 이내 (근무일기준)
배송비 무료배송
   
소프트웨어
종합지수 0p
   
 

[임베디드 시스템을 위한 소프트웨어 공학 총론]은 임베디드 소프트웨어 분야의 전문가가 되길 원하는 모든 사람에게 개념부터 사례 연구까지, 더 나아가 미래 추세까지 제공하는 임베디드 시스템을 위한 소프트웨어 공학 분야의 전문 백과사전이라 할 수 있다. 이 책은 임베디드 시스템 개발을 위한 계층 체계와 임베디드 시스템의 하드웨어/소프트웨어 공동 설계 모델을 정립하고, 각 계층과 공동 설계 모델을 최신 사례 연구와 결합시켜 책의 완성도와 전문성을 높였다.



임베디드 시스템을 위한 소프트웨어 공학 개발의 전 과정을 다루는 이 책은 특히 소프트웨어 성능 공학, 성능/메모리/전력 최적화, 다중 코어 시스템, 애자일 개발 방법론 등을 함께 다루고 있어, 관련 분야에 종사하는 개발자뿐만 아니라 이 분야에 관심을 가진 모든 사람에게도 큰 도움을 주는 귀중한 안내서가 될 것이다.




[ 요약 ★]



이 책은 임베디드 소프트웨어 분야의 전문가가 되길 원하는 모든 사람에게 개념부터 사례 연구까지, 더 나아가 미래 추세까지 제공하는
임베디드 시스템을 위한 소프트웨어 공학 분야의 전문 백과사전이라 할 수 있다. 이 책은 임베디드 시스템 개발을 위한 계층 체계와 임베디드
시스템의 하드웨어/소프트웨어 공동 설계 모델을 정립하고, 각 계층과 공동 설계 모델을 최신 사례 연구와 결합시켜 책의 완성도와 전문성을
높였다. 임베디드 시스템을 위한 소프트웨어 공학 개발의 전 과정을 다루는 이 책은 특히 소프트웨어 성능 공학, 성능/메모리/전력 최적화,
다중 코어 시스템, 애자일 개발 방법론 등을 함께 다루고 있어, 관련 분야에 종사하는 개발자뿐만 아니라 이 분야에 관심을 가진 모든
사람에게도 큰 도움을 주는 귀중한 안내서가 될 것이다.



[ 추천의 글 ]



이 책의 추천사를 작성한다는 것은 기념비적인 일이다. 이 책은 임베디드 시스템에 관해 현재까지 가장 포괄적인 내용을 담고 있는 책일
것이다. 그리고 이러한 작업은 정말 필요한 일이다.

펌웨어(firmware) 시장이 점점 커지고 있다. 일부 사람들은 현대 제품을 만드는 데 드는 개발 비용의 80%까지가 페그(peg)
펌웨어일 것으로 추정한다. 불과 몇 년 전까지만 해도 수십만 라인의 코드를 가진 시스템을 아주 크다고 생각했던 것에 비해, 오늘날은 수
메가 라인의 코드를 시스템에서 발견하는 일이 다반사가 됐다. 스마트폰은 현재 수천만 라인을 사용하며, 굉장히 복잡해졌다. 소비자는 자동차
가치의 70%가 전자 기술로부터 온 것으로 이해하고 있으며, 자동차의 엔진이나 핸들보다는 코드를 더 구입하고 있다.

40년 전, 첫 번째 마이크로프로세서가 소개된 이래로 펌웨어를 구축하는 표준 방식은 영웅적인 일이 됐다. 몇 명의 스마트한 사람과 너무
많은 초과 근무 방식, 훈련 담당 상급자의 고함소리 등이 제품을 만들어 내보내긴 했다. 그러나 이러한 접근법은 더 이상 사업 규모를
확장시키지 못했고, 오늘날의 대규모 시스템에는 맞지 않는 방식이었다. 따라서 잘 훈련된 접근법이 필요하다. 이 책은 이러한 분야의 정보
전달에 아주 훌륭한 책이다.

예를 들어 통합과 테스팅을 제시하는 15장은 이러한 목표에 적합하게 아주 올바른 방식을 제공한다. 요구 사항으로 시작해서 제시된 요구
사항에 일치하는 테스트로 마무리된다. 이 책의 저자 마크 크랠링은 테스트가 완전한지를 보장하기 위해 사람들이 어떻게 제어 흐름 그래프를
이용하는지 보여준다. 오늘날 대부분의 개발자는 자신이 만든 테스트 스위트가 프로그램 로직 흐름의 10%를 커버하는지, 또는 90%나
100%를 커버하는지 알 수 없다. 공학자는 제품이 올바른지 증명하기 위해 자신이 서술한 내용을 분석할 필요가 있다. 이상하게
들리겠지만, 테스트 케이스를 구축하고, 요구 사항을 관리하며, 완전한 테스트 커버리지를 보장하는 다양한 벤더의 충분한 툴들이 있다.

4장은 임베디드 시스템을 위한 설계 패턴을 다룬다. 패턴은 잘 훈련된 방식에서 재사용되며, 보통 IT 프로젝트에서 재사용된다. 임베디드
세계에서는 재사용이 가능한지 오직 그 위치를 발견하는 일이 될 것이다. 소프트웨어 재사용을 다루는 9장은 소프트웨어 컴포넌트를 재활용하는
더 전통적인 양상에 대한 통찰력을 제공한다.

이것이 과도한 최상위 설계(BUFD)를 의미한다고 사람들이 생각하지 않도록 저자는 애자일 프로그래밍과 임베디드 시스템에 제시된 특별한
과제를 다룬다. 그러나 공학의 추악한 현실에 대해서도 다룬다. 하드웨어와 소프트웨어의 공동 설계를 다루는 2장에서는 완전하지 않으면서
전통적인 전략을 이용해서는 테스트될 수 없다는 명확한 문제가 있음에도 불구하고 하드웨어와 소프트웨어 둘 모두를 어떻게 병렬로 가져오는지
독자들에게 보여준다.

무엇이 임베디드를 그렇게 특별하게 만들었는가? 자원의 희소성이 가장 큰 이유다. 제한된 메모리와 CPU 주기로 인해 개발자는 테스트에
상당한 신경을 기울인다. 배터리로 동작하는 많은 시스템이 있을 것으로 예상되므로, 오늘날 전력 소비는 시스템 개발에 큰 영향을 끼친다.
이 책의 여러 장에서 이러한 이슈를 다루며, 심지어 배터리에서 모든 마이크로 와트를 짜내는 소프트웨어 기법도 보여준다.

펌웨어에서의 독특한 또 다른 양상이 바로 하드웨어와의 강결합이다. 이 부분 역시 이 책의 여러 장에서 깊이 있게 다룬다.

그 외의 주제로는 자동차 코드에 대한 특별한 필요성을 제시한다. 물론 리눅스와 안드로이드도 포함된다. 안전 필수 시스템의 구축도
포함된다. 여기서 안전 필수 시스템은 사람들이 기대하는 것보다 더 많이 존재하고 있으며, 안전 필수가 임무 중심으로 변경되고 있고,
자신의 제품이 어떻게 안전 관련 커뮤니티의 관심사를 포용하는지 알면 놀랄 것이다.

이 책은 임베디드 소프트웨어가 가진 어떠한 양상이든 모두 다룬다.

이러한 분야에서 변함없이 지속되는 것은 바로 변경이라는 분야다. 2012년 11월 <인디아 타임스> 지에 실린 기사는 소프트웨어 개발자가
나이 40에 이르면 퇴물이 된다고 주장했다. 개발자의 나이 40세는 새로운 경력을 시작하기에 너무 늦은 나이라는 의미다. 이 책을 읽고
프로젝트를 더 효과적인 방식으로 수행하는 방식을 배우기 바란다. 이 책은 나이가 40이 넘은 공학자가 자신의 위치에 머무르면서 불행으로
빠지는 것을 피할 수 있도록 도움을 줄 것이다.

- 잭 갠슬(Jack Ganssle) / 『임베디드 시스템 대사전』(에이콘출판) 저자





[ 이 책에서 다루는 내용 ]



■ 임베디드 시스템을 위한 훌륭한 아키텍처 원칙

■ 임베디드 프로젝트를 성공적으로 만드는 데 도움을 주는 설계 관례

■ 디지털 신호 처리, 안전 필수 원칙, 개발 프로세스를 비롯해 임베디드 시스템의 일부분을 이루는 세부 원칙

■ 임베디드 시스템을 위한 사용자 인터페이스 개발 방법

■ 임베디드 시스템 테스팅과 배포 전략, 품질 개발 프로세스 보장 전략

■ 성능, 메모리, 전력에 대한 임베디드 소프트웨어 최적화 실무 기술

■ 임베디드 시스템을 위한 다중 코어 소프트웨어 개발 고급 가이드라인

■ 네트워킹, 스토리지, 자동차 세그먼트를 위한 임베디드 소프트웨어 개발 방법

■ 임베디드 개발 프로세스 관리 방법

■ 핵심 문제/이슈 로드맵과 본문 솔루션에 대한 참고 문헌

■ 적용 방안이라는 맥락에서의 핵심 방법들에 대한 리뷰

■ 시대를 뛰어 넘는 구현 세부 사항들을 보여주는 사례

■ 핵심 아이디어 구현 방법, 결정된 선택 근거, 설계 가이드라인과 트레이드오프를 보여주는 짧고 간결한 사례 연구



[ 이 책의 구성 ]



1장, '임베디드와 실시간 시스템을 위한 소프트웨어 공학' 임베디드 시스템은 대규모 시스템의 특정 기능을 수행하기 위해 설계된 컴퓨터
시스템으로, 종종 하나 이상의 실시간 컴퓨팅 제약 사항을 갖는다. 이는 하드웨어와 기계적 부분을 포함하는 큰 장치의 부분으로서 내장된다.
이 시스템은 최종 사용자의 다양한 요구에 부응하면서 유연한 범용 컴퓨터와는 극명하게 비교된다. 범용 시스템에 성공적으로 적용됐던
소프트웨어 시스템의 개발 방법과 기법, 툴은 더 이상 임베디드 시스템에는 쉽게 적용되지 못한다. 모바일 임베디드 장치에서 동작하는
소프트웨어 시스템은 근접 최적 성능, 강건성, 분산, 역동성, 이동성 같은 더 전통적인 시스템에서 는 요구되지 않는 특징을 가져야 한다.
1장은 임베디드, 자원 제약, 모바일, 고도로 분산된 세계에 존재하는 소프트웨어 시스템의 핵심 특징을 조사한다. 그리고 이 분야의 맥락
속에서 소프트웨어 공학 방법의 핵심 부분에 대한 적용 가능성을 평가하고 기법(예를 들어 소프트웨어 설계, 컴포넌트 기반 개발, 소프트웨어
아키텍처, 시스템 통합, 테스트)도 다룬다. 1장은 임베디드와 실시간 소프트웨어를 개관적으로 설명한다.

2장, '임베디드 시스템 하드웨어/소프트웨어 공동 개발' 최신 임베디드 시스템에 대한 개발을 기획할 때 하드웨어와 소프트웨어를 독립적으로
고려하지 않는다. 지난 20여 년간 전용 하드웨어 구현에서 범용 임베디드 프로세스를 실행하는 소프트웨어로 시스템의 기능성이 이동된 반면,
칩과 시스템의 복잡성은 엄청날 정도의 성장률을 보였다. 2010년까지 소프트웨어를 개발하려는 노력이 하드웨어를 개발하려는 노력보다 더
커졌으며, 복잡성은 소프트웨어에 비례해 계속 증가하는 추세였다. 독립적인 하드웨어와 소프트웨어 설계 같은 전통적인 설계 기법은 칩 위에
복잡한 시스템을 만들기 위해 통합되는 이기종의 모델과 애플리케이션 때문에 도전이 되고 있다. 설계자는 하드웨어와 소프트웨어의 공동 설계에
사용되는 적절한 기법을 이용해 시스템의 특정 행위와 주어진 성능 목표, 기술이 드러날 수 있도록 시스템의 하드웨어와 소프트웨어 컴포넌트를
함께 작업하는 방법을 고려해야 한다.

3장, '임베디드 시스템을 위한 소프트웨어 모델링' 임베디드 시스템을 위해 모델을 생성하는 것은 아주 간단하거나 믿을 수 없을 정도로
복잡한 동적인 제어 시스템에 대한 시간과 비용 측면에서의 효과적인 접근법을 제공하며, 이 모든 것은 밀접하게 통합된 소프트웨어 집합에서
유지되는 단일 모델을 기반으로 한다. 최신 모델링 소프트웨어 툴을 이용하면 오프라인 시뮬레이션에서 초기 밸리데이션(validation)을
설계하고 수행할 수 있다. 이러한 모델은 차후 수행되는 모든 개발 단계의 기초를 형성한다. 임베디드 설계를 위해 모델을 생성하는 것은
전통적인 설계 접근법보다 더 다양한 이점을 제공한다. 하드웨어 프로토타이핑과 결합된 접근법을 이용하면
베리피케이션(verification)과 밸리데이션이 최종 테스팅 단계에서만 수행되는 것이 아니라 개발 전 기간에 걸쳐 수행되기 때문에
실수할 리스크가 줄어들고 개발 수명주기도 짧아진다. 시스템 모델을 베이시스(basis)로서 이용하면 훨씬 더 빠르고 신뢰성 있는 설계
평가와 예측을 만들어낼 수 있다. 반복적인 접근법은 성능과 신뢰성 관점에서 설계를 향상시키는 결과를 가져온다. 그리고 설계 팀과 설계
단계, 다양한 프로젝트 사이에서 모델을 재사용할 수 있기 때문에 자원에 들어가는 비용이 줄어들며, 물리적 프로토타입에 대한 종속성도
줄어든다. 자동 코드 생성 기법을 이용하면 개발 오류와 부담도 줄일 수 있다. 이러한 이점은 더 정확하고 강인한 제어 설계와 더 짧아진
시장 적시성, 설계 비용에 대한 감소로 이어진다.

4장, '임베디드 시스템을 위한 소프트웨어 설치 아키텍처와 패턴' 임베디드 컴퓨팅 시스템의 소프트웨어 아키텍처는 시스템이 어떻게 동작할
것인지 추론하거나 이해하는 것을 도와주는 시스템의 구조로 묘사할 수 있다. 소프트웨어 아키텍처는 시스템 개발 프로젝트뿐만 아니라 시스템을
위한 청사진으로 동작한다. 아키텍처는 성능, 변경 가능성, 보안성 같은 임베디드 시스템의 주요 품질에 대한 기본적인 프레임워크이며,
아키텍처 비전을 통합하지 않고는 시스템의 어떠한 품질도 획득할 수 없다. 아키텍처는 설계 접근법이 적절한 시스템의 개발로 이어진다는 것을
보장하는 초기 분석에서 만들어지는 산물이다. 4장은 임베디드 소프트웨어 아키텍처의 여러 양상에 대한 세부 사항을 다룬다.

5장, '실시간 빌딩 블록: 이벤트와 트리거' 4장까지는 임베디드 시스템을 개발하기 위한 높은 수준의 추상화와 시스템 설계 아키텍처,
구현 단계에서의 설계 패턴 적용 같은 접근법을 설명했다. 5장에서는 실시간 시스템의 두 가지 기본 개념과 설계 패턴을 소개한다. 여기서
두 가지 기본 개념은 비동기 이벤트(Event) 플래그를 설정하는 능력과 적절한 시기에 어떤 상황을 트리거(Trigger)하는 능력이다.
이들 두 가지 개념은 실시간 운영체제(RTOS)를 이용하지 않는 시스템뿐만 아니라 RTOS를 이용하는 시스템에도 모두 사용된다. 5장은
유스케이스로 시작해서 이벤트와 트리거를 구현하는 서로 다른 방식을 개발한다. 그리고 이들 각각에 대한 세부 구현 내용도 제시하며, 이들에
대한 장단점도 다룬다. 이벤트와 트리거 구현을 위한 소스는 이 장의 끝 부분에서 제공한다.

6장, '임베디드 소프트웨어에 대한 하드웨어 인터페이스' 임베디드 소프트웨어에 제공되는 하드웨어 인터페이스에 대해 다룬다. 그리고
하드웨어 인터페이스를 제공하는 레지스터와 인터럽트에 대해서도 다룬다. 그 외 프로젝트에서 하드웨어 팀과 임베디드 소프트웨어 팀 간 협력을
위한 인간적인 측면에 대해서도 논의한다. 협력은 설계 단계, 공동 개발 단계, 통합 단계, 디버깅 단계 동안 필요하며, 6장에서는 이들
각 단계에서 요구되는 협력의 개념에 대해 알아본다. 그리고 제품의 품질을 향상시키는 다양한 하드웨어 설계 양상과 하드웨어 버전을
지원하는데 도움을 주는 소프트웨어 설계 양상에 대해서도 다룬다.

7장, '임베디드 소프트웨어 프로그래밍과 구현 가이드라인' 임베디드 소프트웨어 개발에 일반적으로 사용되는 몇 가지 가이드라인을 제공한다.
프로그래밍 원칙에서 시작해 가독성, 테스트용이성, 유지 보수성을 포함한다. 7장은 하드웨어 고려 사항, 파일 구조, 개발 가이드라인을
비롯해 임베디드 소프트웨어 프로젝트를 어떻게 시작하는지 대한 논의를 계속 이어간다. 그런 다음 문법 코딩 표준의 중요성을 비롯해
소프트웨어 개발 프로젝트에서 매우 중요한 프로그래밍 가이드라인으로 초점을 바꿔 논의한다. 7장은 변수와 정의에 대한 설명과 이들이 어떻게
임베디드 소프트웨어 프로젝트에 사용되는지 대한 논의로 마무리한다.

8장, '임베디드 운영체제' 실시간 운영체제(RTOS)는 임베디드 시스템 어디에나 존재한다. 8장은 실시간 커널이 무엇인지, 운영체제가
제품 개발자에게 제공하는 서비스가 무엇인지 설명하고, 커널 내부 일부에 대해 설명한다. 커널은 RTOS의 컴포넌트다. 8장에서는 작업
관리, 인터럽트 핸들링, 스케줄링, 문맥 스위칭, 시간 관리, 자원 관리, 메시지 패싱, 우선순위 변환 등 많은 부분을 살펴본다.

9장, '임베디드 시스템에서 설계에 의한 소프트웨어 재사용' 임베디드 시스템에서 재사용을 제한하는 과제와 이의 극복 전략을 알아본다.
이러한 탐구에는 재사용의 제한 사항이 무엇인지, 하드웨어 추상화 계층이나 RTOS 포팅(porting) 계층과 같은 제한 사항을 극복하는
전통적인 접근법이 무엇인지를 포함한다. 그러나 여기서 그치지 않는다. 계층화된 소프트웨어가 가진 단점은 고도로 최적화되고 재사용이 가능한
소프트웨어 컴포넌트를 사용할 수 있게 만들어준다. 9장은 하드웨어와 RTOS에 상관없이 전문가 시스템에 의해 생성된 재구성과 재사용이
가능한 컴포넌트를 만드는 메커니즘인 컴포넌트 팩토리(factory)에 대한 개념을 소개한다.

10장, '임베디드 시스템을 위한 소프트웨어 성능 공학' 임베디드 시스템은 보통 하나 이상의 실시간 요구 사항을 갖는다. 최근 임베디드
소프트웨어 시스템의 복잡성으로 인해 이들 시스템의 성능 목표를 성취하기 위해서는 체계적인 접근법이 요구된다. 애드혹(ad hoc)
프로세스는 마감 시간을 놓치게 할 수 있고, 시스템의 성능을 빈약하게 만들 수 있으며, 프로젝트를 취소하게 만들 수도 있다. 다중 실시간
성능 요구 사항을 정의하고 관리하며 전달하기 위해서는 성숙도(maturity)가 필요하다. 소프트웨어 성능 공학(SPE)은 성능 공학
프로세스의 성숙도를 향상시킬 수 있는 시스템 공학의 범주에 속해 있는 교과목이다. SPE는 성능 목표를 만족하는 소프트웨어 시스템의
구축에 필요한 체계적이고 정량적인 접근법이다. SPE는 아키텍처, 설계, 구현에 초점을 둔 소프트웨어 지향 접근법으로, 임베디드
소프트웨어 개발 수명주기의 모든 단계에 적용되는 활동이나 기법, 산출물에 초점을 둔다. 특히 소프트웨어가 시스템의 성능 관련 요구 사항을
만족시키기 위해 설계되고 구현된다는 것을 보장하기 위해 민감성과 확장성에 초점을 둔다.

11장, '임베디드 소프트웨어의 성능 최적화' 코드 최적화는 개발 프로세스에서 시스템의 능력에 직접 영향을 미치는 핵심 단계다. 코드가
더 빠르게 실행된다는 것은 채널이 더 넓다는 것과 수행되는 것이 더 많다는 것, 더 경쟁적인 이점을 가진다는 것을 의미한다. 코드가 더
적은 메모리에서 실행된다는 것은 휴대폰에 더 적합한 애플리케이션 특징을 가질 수 있음을 의미한다. 그리고 코드가 실행 시 더 적은 전력을
소비한다는 것은 배터리의 수명을 증가시키거나 전력 기지국에서 소비되는 비용을 줄여줄 수 있음을 의미한다. 11장은 프로그래머에게 코드를
효과적으로 작성할 수 있게 도움을 줄 목적으로 작성됐다. 먼저 툴 체인의 이용법에 대한 소개부터 시작해, 최적화 이전에 임베디드
아키텍처를 아는 것이 중요하다는 점을 설명하고, 그런 다음 넓은 범위의 최적화 기법에 대해 설명한다. 11장에서 제시하는 기법은 C 언어
최적화 기법과 범용 루프 변환 같은 프로그램이 가능한 모든 아키텍처에 유효한 기법이다. 실세계에 대한 사례는 이 장 전체에 걸쳐
제시한다.

12장, '임베디드 소프트웨어의 메모리 최적화' 목표 아키텍처에서 클록 주기의 실행 결과로 인해 컴파일 코드에 대한 최적화 메트릭이 항상
측정되는 것은 아니다. 무선 네트워크 연결 또는 백홀(backhaul) 기반 구조에서 다운로드로 실행 가능한 휴대폰이나 무선 장치를
고려한다. 이러한 경우 보통 이점을 갖거나 무선 장치로 다운로드해야만 하는 컴파일 코드의 크기를 컴파일러가 줄여준다. 다운로드될 필요가
있는 코드의 크기를 줄임으로써, 다운로드되는 각 무선 지점에 요구되는 대역폭의 관점에서 비용이 줄어드는 결과를 얻는다. 컴파일 코드의
메모리 시스템 성능과 같은 최적화 메트릭은 개발자에게는 흔하게 중요한 또 다른 메트릭이다. 이들 메트릭은 목표 프로세서상의 컴파일
코드뿐만 아니라 기본이 되는 메모리 시스템, 캐시, DRAM, 버스 등과 같은 동적 실시간 동작과 긴밀히 연관돼 있다. 애플리케이션 내
데이터 또는 더 특별하게 실시간에서 동적으로 평가되는 데이터와 이에 대응되는 데이터 구조의 순서를 효율적으로 조정함으로써 메모리 시스템
레벨에서 중요한 성능 개선을 얻을 수 있다. 이에 추가해 SIMD 명령 집합이 제시되고 다양한 메모리 시스템의 정렬 조건이 만족되면
데이터의 공간적 위치로 인해 벡터화 컴파일러도 시스템의 성능을 개선할 수 있다.

13장, '임베디드 소프트웨어의 전력 최적화' 임베디드 프로젝트의 제품 수명주기에서 가장 중요한 고려 사항 중 하나가 장치에 대한 전력
소모를 이해하고 최적화하는 것이다. 재충전 동안 최소 사용 시간과 유휴 시간을 보장할 수 있는 정도의 배터리 전력을 요구하는 휴대용
단말기에서는 전력 소모가 아주 잘 드러난다. 그 외의 주요 임베디드 애플리케이션, 즉 의료장비, 테스트, 측정, 미디어, 무선 기지국
등도 전력에 매우 민감하다. 증가되고 있는 강력한 프로세서의 열 손실과 전원 공급장치에 들어가는 비용, 에너지 소비로 인한 비용을
관리해야 할 필요가 있기 때문이며, 특히 전력 소모는 간과될 수 없는 사실이다. 전력 요구 사항을 정하고 유지하는 책임은 보통 하드웨어
설계자의 몫으로 돌아가지만, 소프트웨어 프로그래머도 전력 최적화에 큰 기여를 제공할 수 있는 능력이 있다. 보통 소프트웨어 공학자가
이러한 장치들의 전력 소모에 큰 영향을 미친다는 사실은 간과되거나 저평가되고 있다. 13장의 목적은 전력 소모를 최적화하기 위해
소프트웨어가 어떻게 사용될 수 있는지에 대해 알아보는 것이다. 이를 위해 먼저 기본적인 전력 소모의 구성부터 시작해서 전력 소모에 대한
적절한 측정 방법, 알고리즘 레벨과 하드웨어 레벨, 데이터 흐름에서 소프트웨어로 전력 소모를 최소화하는 기법을 알아본다. 또한 특정
방법이 전력을 줄이는 데 어떻게 왜 효과적인지 이의 다양한 기법에 대한 데모와 설명을 포함하며, 이에 따라 독자는 자신의 애플리케이션에
이 방법을 즉시 선택해 적용할 수 있다.

14장, '임베디드 시스템을 위한 인간 요소와 사용자 인터페이스 설계' 임베디드 시스템을 설계할 때, 특히 사용자 인터페이스를 설계할
때는 특별한 주의가 요구된다. 간단한 장치에 대해서는 단순 텍스트, 명령 버튼, LED가 적절하다. 더 복잡한 시스템에 대해서는 완전한
그래픽 사용자 인터페이스GUI와 터치 패널이 요구된다. 사용자 인터페이스 설계는 a) 서로 다른 소프트웨어 컴포넌트 간 인터페이스 설계,
b) 소프트웨어와 인간이 아닌 정보 생산자와 소비자 간 인터페이스 설계, c) 인간과 컴퓨터 간 인터페이스 설계 같은 핵심 영역에 초점을
맞춰야 한다. 14장은 효과적인 사용자 인터페이스 설계에 요구되는 프로세스, 가이드라인, 인간 요소, 기술에 초점을 맞춘다.

15장, '임베디드 시스템 품질, 통합, 테스팅 기법' 임베디드 소프트웨어 개발에서 실용적 결정이 이뤄져야 하는 가용한 테스트 시간과
예산 요구에 대한 효과성을 최적화할 필요가 있을 때 최신 기법과 모범 사례는 (항공기의 비행제어기, 자동차의 브레이크 시스템 또는 의료
장치와 같은) 고신뢰성 장치뿐만 아니라 신뢰성이 떨어지는 애플리케이션에도 적용된다. 이러한 다중 소프트웨어테스트 기법을 보완하기 위해,
기법을 자동화한 유사한 테스트 툴이 많다. 이들 툴은 안전 필수 애플리케이션의 개발에서는 아주 흔하게 사용되지만, 모든 툴을 구입하거나
심지어 이들 툴의 일부라도 구입할 만한 예산을 가진 사람은 별로 없을 것이다. 물론 이들 툴의 제공자는 툴 각각이나 그렇지 않으면 툴
모두에 대한 구입을 지지할 것이다. 그렇다면 제한된 예산을 어떻게 적절하게 할당할 것인가? 그리고 예산이 없다면 최종 제품이 적절한
품질을 가질 것이라는 확신을 사람들에게 믿게 만드는 그러한 툴도 없이 어떻게 유사한 원칙을 적용할 것인가? 이러한 이슈를 다루기 위해
15장에서는 제시된 기법 뒤에 숨어있는 개념뿐만 아니라 실제 어떻게 구현했는지를 설명하는 소프트웨어 코드에 대한 몇 가지 사례연구도 함께
제시한다.

16장, '임베디드 시스템용 소프트웨어 개발 툴' 임베디드 시스템의 소프트웨어 개발 툴, 특히 디버깅과 조사 툴에 초점을 둔다. 16장은
현재의 실행 시점에서 개발자에게 프로그램의 내부에 무엇이 있는지, 또는 프로그램이 언제 충돌하는지 그 시점을 알려주는 소스코드 디버거
툴의 능력 제시부터 시작한다. 디버거의 특징은 가장 대중적이고 많이 사용되는 디버거 중 하나인 GDB, 즉 프리소프트웨어
재단(FSF)에서 제공하는 GNU 디버거의 사례를 이용해 설명한다. 임베디드 시스템의 모든 요구 사항을 다루기 위해 16장은 간단한
디버거 루틴부터 시작해 디버거의 완전한 특징을 포함하는 특별한 대상 요구 사항에 적합한 디버거 에이전트를 어떻게 설계하는지 제시한다.
또한 전형적인 사용 사례와 문맥 전환, 위치 독립적 실행 파일, 디버거 이벤트 핸들링과 다중 코어 같은 설계에 대한 핵심 내용을
제시한다. 그런 다음 JTAG을 이용하는 이점과 디버거를 대상에 직접 연결하는 데 사용되는 외부 장치를 제시한다. 이때 디버거는 대상과
자기 자신의 자원을 완전히 제어하는 기능을 갖는다. 이 장의 끝부분에서는 이클립스(Eclipse)와 GDB 같은 무료 공개 소프트웨어를
기반으로 하는 통합 개발 툴, 측정 코드, 분석 툴과 같이 디버깅 프로세스에 도움을 줄 수 있는 기타 툴도 소개한다.

17장, '임베디드 시스템용 다중 코어 소프트웨어 개발' 다중 코어 소프트웨어 개발은 자동차부터 네트워킹과 무선 기지국까지 임베디드
시스템의 많은 영역에서 그 중요성과 적용 가능성이 점점 더 커지는 분야다. 17장은 다중 코어 연합(MCA)에서 최근 발표한 다중 코어
프로그래밍 사례(MPP)의 핵심 부분을 요약해서 보여준다. 모범 사례 가이드라인을 표준화한 MPP는 다중 코어 프로세서를 비롯한 개발
프로젝트를 고려하거나 구현하려는 회사와 기존 다중 코어 기술의 사용을 선호하는 회사의 공학자와 공학 관리자를 위해 특별하게 작성된
문서다. 다중 코어 준비를 위해 오늘날의 C/C++ 코드가 어떻게 작성됐는지를 더 잘 이해하는 것이 중요한데, 이것은 MPP 워킹 그룹의
영향하에서 성취됐다. 이 가이드라인을 이용하면 a) 더 높은 성능을 가진 소프트웨어를 만들 수 있고, b) 다중 코어 소프트웨어 이슈로
인해 버그 비율을 줄일 수 있으며, c) 다중 플랫폼에서 목표가 될 수 있는 휴대용 다중 코어 코드를 개발할 수 있고, d) 다중 코어
프로그래밍의 학습 커브를 줄이면서 개발 시간은 증가시킬 수 있으며, e) 다중 코어 연합의 API 기반 구조의 현 구조와 로드맵을 함께
묶을 수 있다.

18장, '안전 필수 소프트웨어 개발' 안전 필수 소프트웨어 개발의 여러 양상에 대해 다룬다. 18장의 첫 번째 부분은 프로젝트 기획
부분으로, 이는 프로젝트의 첫 시작 부분이자 공수(effort)의 범위를 정하는 중요한 단계다. 이는 안전 필수 요구 사항에 대한 관리와
개발 도중 대처 방법에 대한 통찰력을 제공한다. 또한 프로젝트 관리의 핵심 전략도 제공한다. 두 번째 부분은 결점, 장애, 위험에 대한
분석을 설명한다. 그리고 리스크 분석에 대한 서술도 역시 포함한다. 다음으로 임베디드 시스템에 사용될 수 있는 몇 가지 안전 필수
아키텍처를 다룬다. 마지막 부분은 안전 필수 소프트웨어를 개발하기 위한 소프트웨어 구현 가이드라인을 다룬다.

19장, '지적 재산' 지적 재산권은 보통 사람들의 발명품이나 설계 자체를 보호하기 위해 축적한 특허권 또는 기타 법적 보호조치의 두
가지 사항을 의미한다. 그래서 사람들은 지적 재산권과 관련된 라이선싱에 대해 많은 얘기를 하고 있는데, 이는 특허로 등록된 아이디어를
다른 사람 이 사용할 수 있도록 누군가에게 라이선스를 팔거나 프로세서와 기타 설계 사항을 가진 ARM이나 컴파일러와 운영체제 제품을 가진
툴처럼 제품을 만들어 배포하며, 또는 사용하기 위해 라이선스를 파는 것을 의미한다. 19장에서는 사람들의 일에 연관된 법적 보호조치를
처리하는 첫 번째 의미에 더 집중하며, 다음과 같은 두 가지 주요 영역에 대한 기본적인 사항을 다룬다. 첫째, 사람들이 썼거나 또는
구입했던 소프트웨어가 실제로 자신의 것이라는 것을 보장하기 위해 필요한 것이 무엇인지, 공개 소프트웨어에 대한 역할을 비롯해 그러한
소프트웨어를 팔 때나 다른 사람에게 라이선싱할 때 필요한 것이 무엇인지에 관련된 이슈를 다룬다. 둘째, 사람들이 가진 소프트웨어와 그
외의 가치 있는 발명품에 대해 획득될 수 있는 다양한 보호조치에 대해 다룬다.

20장, '임베디드 소프트웨어 개발 관리' 어떠한 임베디드 소프트웨어 프로젝트나 프로그램에 대해서든 성공적으로 구성하고 관리할 수 있는
정보를 제공한다. 20장은 시스템의 품질, 소프트웨어를 스택으로 구성하는 OSI 모델, 다양한 소프트웨어 개발 모델, 팀 구성 방식,
의사소통에 대한 개요를 소개한다. 자원이나 품질, 고객의 만족을 포함하는 프로젝트나 프로그램의 범위와 스케줄, 비용에 대한 제약 사항을
관리하는 것은 프로젝트나 프로그램이 가진 작업과 활동 모두를 다루는 것과 마찬가지다. 20장은 소프트웨어를 배포할 때까지 소요되는 수명주
기의 전 단계에 걸쳐 소프트웨어 개발에 대한 정상적인 진행 방법을 알아본다. 그리고 소프트웨어 명세를 테스트하기 위해 요구 사항부터
각각의 공학적 대응 방법까지 확장시킨 자원 관리, 리스크 관리, 문제 해결과 작업 추적성을 성공적으로 기획하고 실행하기 위한 툴도 함께
제시한다.

21장, '임베디드 시스템을 위한 애자일 개발' 애자일 소프트웨어 개발은 반복 개발을 기반으로 하는 소프트웨어 개발 기법을 집합시켜 놓은
개발 방법이다. 요구 사항과 소프트웨어 시스템은 자기 구성과 교차 기능 팀 간의 협력을 통해 발전한다. 애자일 개발은 적응적 기획,
진화적 개발과 배포, 타임박스(timebox)를 갖는 반복 접근법을 지원한다. 애자일의 목적은 변화에 대해 신속하고 유연한 대응을 하는
것이다. 애자일은 개념적 프레임워크로서 개발 주기를 통해 상호작용을 촉진한다. 애자일을 임베디드 소프트웨어 프로젝트에 적용하기 위해
소프트웨어 특징을 발전시키는 더 어렵고 효과적인 테스팅과 같은 몇 가지 특별한 도전을 소개한다. 이는 하드웨어 구성이 기획과 설계
단계에서 더 솔직한 스타일을 요구한다는 점을 고려해 대응 하드웨어의 변경이 수용하기에는 비용이 너무 높다거나 시간이 지날수록 학습하는
능력이 떨어질지도 모른다는 사실로 인해 대응 하드웨어가 적시에 가용하지 못하거나 변경에 대해서도 덜 자유로울 수 있기 때문이다. 21장은
애자일 소프트웨어에 대한 개발 기법을 소개하고 이들 기법이 어떻게 임베디드 시스템에 적용되는지 보여준다.

22장, '자동차 애플리케이션용 임베디드 소프트웨어' 다른 애플리케이션과는 달리 엄격한 기획, 아키텍처 개발, 테스팅, 밸리데이션과
베리피케이션이라는 특징을 갖는 자동차 시스템을 소개한다. 다른 애플리케이션 영역과 대비해 자동차 애플리케이션용 임베디드 소프트웨어를
작성하는 물리적인 작업은 다른 임베디드 시스템과 비교해 그리 크게 다르지 않지만, 개발과 테스트 프로젝트에 반드시 수반돼야 하는 품질
표준이 핵심 차이라 할 수 있다. 자동차 소프트웨어를 작성하기 위해 공학자는 자동차 시스템이 오늘날 어떻게 왜 복잡한 환경으로 발전됐는지
이해할 필요가 있다. 공학자는 자동차 하위 시장 간의 차이점과 공통점을 인식해야만 한다. 또한 적용 가능한 품질 표준에 대해서도 잘
알아야 하고, 품질이 어떻게 테스트되고 측정되는지도 알아야 하며, 이에 덧붙여 그러한 엄격한 품질 제어가 왜 있어야 하는지에 대해서도 잘
알아야 한다. 22장에서는 이러한 모든 내용에 대해 가장 흔한 모범 사례를 이용해 설명한다. AEC, OBD-II, MISRA와 같은 더
전통적인 표준뿐만 아니라 최근에 등장한 AUTOSAR와 ISO26262 표준으로 지원되는 모델링, 자동 코드 작성, 첨단 추적과 디버그
같은 높은 품질과 결함 허용, 상호작용 코드를 소프트웨어 공학자가 잘 작성할 수 있게 도움을 주는 다양한 프로세스를 소개한다.

23장, '입출력과 스토리지 프로그래밍' 임베디드 시스템에서 입출력(I/O)과 저장 장치는 매우 중요한 컴포넌트다. 임베디드 시스템에서
I/O의 다양성은 I/O 관리를 매우 복잡한 프로세스로 만든다. 임베디드 운영체제 시스템의 가장 기본적인 기능 중 하나가 모든 I/O
장치를 제어하고 관리하는 것이며, I/O 장치를 동시에 접속하는 다중 프로세스를 조정하는 것이다. 여기서 CPU와 장치 간 I/O 구현을
제어하는 것이 장치 관리의 핵심 기능이다. 운영체제는 인터럽트에 대응하고 장치에 대한 예외 사항을 다루기 위해 명령을 장치에 보낸다.
또한 장치와 시스템의 다른 부분 사이의 인터페이스를 간단하고 쉽게 사용하는 방법을 제공한다. 따라서 I/O 장치 사이뿐만 아니라 CPU와
I/O 간의 병렬 프로세싱 능력을 향상시키기 위해서도 I/O 관리 모듈은 필요하다. 그리고 시스템 자원에 대한 최적의 이용 효율성을 얻기
위해 I/O 관리 모듈은 통합되고, 명확하며 독립적이고 확장 가능한 I/O 인터페이스를 제공해야 한다. 이 책에서 스토리지는 임베디드
시스템에서 많이 사용되는 NOR/NAND 플래시, eSDHC, U-Disk, HDD, SSD 같은 외부 저장장치를 참조한다. 최근
클라우드 컴퓨팅의 개발에 따라 스토리지 기술은 시스템에서 아주 중요한 역할을 담당한다. 23장은 CPU와 I/O 장치, 인터럽트 기술,
I/O 제어 프로세스, 대응되는 장치 드라이버의 구현 프로세스 간 데이터 변환 모드에 대해 알아본다. 스토리지 장치의 프로그래밍 모델도
다루는데, 여기에는 특징 지원과 성능 최적화가 포함된다.

24장, '네트워킹 애플리케이션용 임베디드 소프트웨어' 임베디드 네트워킹 애플리케이션은 급격히 변화되고 발전되는 분야다. 예를 들어
임베디드 다중 코어 기술은 고급 네트워킹 애플리케이션뿐만 아니라 중간 및 저급 네트워킹 애플리케이션에도 나타나고 있다. 네트워킹 성능을
성취하기 위해서는 소프트웨어가 다중 코어의 이점을 가져야만 가능하다. 다중 코어 프로그래밍은 단일 코어 프로그래밍처럼 간단하지 않다.
아키텍처를 만들고 설계하는 것부터 코드 작성까지 새로운 사고방식이 요구된다. 다중 코어 SoC에서 네트워킹 애플리케이션 개발은 확장
가능한 성능 확보에 초점을 둬야 할뿐만 아니라 개발의 용이성과 오랜 시간 동안 유지 보수가 가능한 개발에도 초점을 둬야 한다.
24장에서 목록화된 일부 프로그래밍 기법이 이러한 목적을 달성하는 데 도움이 된다.

25장, '임베디드 시스템용 리눅스' 리눅스(Linux)는 네트워킹과 무선, 기지국과 같이 많은 임베디드 시스템에서 선택받고 있는
지속적으로 성장하는 운영체제다. 25장은 임베디드 시스템에서 리눅스의 사용 가능성에 대해 알아본다. 리눅스 커널 설치 방법, 자신의
리눅스 베이스라인 생성 방법, 플랫폼에서 동작하는 애플리케이션 획득을 위한 초기 단계에 대해 다룬다. 이전에 임베디드 시스템에서 리눅스를
사용하지 않았다면 25장은 리눅스를 사용하는 모든 기초적인 과정을 다룬다.

부록 1, 'C 문법 코딩 표준: 소스코드 개발' 임베디드 프로젝트에서 고려될 수 있는 문법 표준을 설명한다. 이에는 변수와 선언문을
위한 스타일 가이드와 네이밍(naming) 규약을 포함한다. 또한 개발 중에 있는 특별한 애플리케이션에 적합하게 사용되거나 수정할 수도
있다. 코딩 표준을 이용하면 코드의 베이스라인에 균일성을 제공하는 데 도움을 준다. 이는 개발자 모두에게 가독성과 유지 보수성을 제공하는
데 도움을 준다. 또한 코드에서 버그를 줄이는 데 도움을 주는 초기화 순서와 규약과 같은 모범 사례를 제안한다.

부록 2, '임베디드 소프트웨어, 시스템, 템플릿을 위한 C++ 프로그래밍 언어' C++는 임베디드 시스템의 개발에 도움을 주는, 더
구체적으로는 주어진 제품이나 플랫폼에 대한 애플리케이션과 시스템 레벨 소프트웨어에 도움을 주는 몇 가지 특징을 제공한다. 부록 2에서는
임베디드 소프트웨어 개발을 위한 C++ 이용의 다양한 측면을 비용에 따른 세 가지 종류로 구분해서 설명한다. 상대적으로 저렴한 임베디드용
C++의 특징으로는 정적 상수, 선언과 문장 순서, 함수 오버로딩, 네임스페이스 이용, 컨스트럭터와 디스트럭터의 이용을 다루며, 다소
값비싼 임베디드용 C++의 특징으로 함수 인라이닝, 컨스트럭터/디스트럭터/자료형 전환, C++ 템플릿 이용, 다중 상속, 캡슐화를
소개한다. 마지막으로 일반적으로 값비싼 임베디드용 C++의 특징으로 런타임 유형 식별과 예외 처리를 설명한다.

사례연구 1, '소프트웨어 성능 공학' 소프트웨어 성능 공학SPE을 실제 산업용 프로젝트에 적용시킨 애플리케이션에 대해 알아본다.
SPE는 데이터를 수집하고, 시스템 성능 모델을 구축하며, 성능 모델을 평가하고, 불확실성 리스크를 관리하며, 대안을 평가하고, 모델과
그 결과를 검증하는 기법들을 모아 놓은 집합이다. SPE는 또한 이들 기법을 효과적으로 사용하기 위한 전략을 포함한다. 소프트웨어 개발
수명주기에서 시스템의 성능 평가를 상대적으로 초기에 사용할 수 있다면 프로젝트의 실패를 면할 수 있다. 시스템을 구현하기 이전에 대안
설계가 평가된다면 애플리케이션은 보통 더 나은 성능을 가질 것이다.

사례연구 2, '사용자 인터페이스: 경찰 지휘 통제 시스템' 저충실도의 프로토타입 개발에 사용되는 경찰 지휘 통제 시스템의 사용자
인터페이스 프로토타입에 대한 사례를 고찰한다. 이 사례 연구는 인간 요소와 사용자 인터페이스 설계라는 바탕 위에서 10장에서 소개한
프로세스와 기법을 포함한다. 사용자 인터페이스 설계는 서로 다른 소프트웨어 컴포넌트 간 인터페이스 설계, 소프트웨어와 인간이 아닌 정보
생산자와 소비자 간 인터페이스 설계, 인간과 컴퓨터간 인터페이스 설계와 같은 핵심 영역에 주안점을 둔다.

사례연구 3, '다중 코어로의 전이' 다중 코어 프로그래밍에 대한 모범 사례를 실세계 산업용 애플리케이션에 적용한다. 단일 코어
애플리케이션에서 다중 코어 애플리케이션으로 임베디 드 소프트웨어 애플리케이션을 이동시키기 위해서는 소프트웨어 프로그래밍 모델, 소프트웨어
스케줄링 시스템, 시스템 분할 접근법, 최적화 전략을 변경해야 한다. 그리고 이러한 이행을 효과적으로 수행하기 위해 소프트웨어 최적화
방안뿐만 아니라 애플리케이션 도메인에 대한 지식, 핵심이 포함된 SoC의 세부 사항, 오프로드 블록, 주변장치, 상호연결 세부 사항도
결정해야 한다. 이 사례연구에서는 네트워킹 소프트웨어 애플리케이션을 단일 코어 구현에서 고도로 최적화된 다중 코어 구현으로 이동시키기
위한 여러 단계를 알아본다.

사례연구 4, '임베디드 시스템 품질과 메트릭 프로그램을 위한 소프트웨어 공학' 펨토(femto) 임베디드 시스템에 대한 소프트웨어
개발과 시스템 통합 메트릭에 대해 고찰한다. 펨토 셀(Femtocell)은 저전력의 짧은 전송 범위를 가진 독립 기지국이다. 펨토 셀은
기본적으로 가정이나 소규모 사무실을 위한 소형 기지국이다. 펨토 셀의 핵심 속성은 IP 백홀(backhaul) 음성 트래픽이 인터넷으로
전송된다), 자가 최적화, 저전력 소비, 쉬운 배포를 포함한다. 이 사례연구에서 다루는 많은 기법을 보강하기 위해 실제 산업용 데이터를
사용한다.

1장 임베디드와 실시간 시스템을 위한 소프트웨어 공학
__소프트웨어 공학
__임베디드 시스템
____임베디드 시스템은 반응 시스템이다
__실시간 시스템
____실시간 시스템의 유형: 소프트와 하드
____하드 실시간 시스템의 사례
____실시간 이벤트의 특성
____효율적 실행과 실행 환경
__실시간 시스템 설계에서의 도전
____반응 시간
____장애로부터 복구
____임베디드 시스템 소프트웨어 구축 프로세스
__분산과 멀티프로세서 아키텍처
__임베디드 시스템을 위한 소프트웨어
____슈퍼 루프 아키텍처
__임베디드 시스템을 위한 하드웨어 추상화 계층(HAL)
__정리

2장 임베디드 시스템 하드웨어/소프트웨어 공동 개발
__오늘날의 임베디드 시스템: 사례
__HW/SW 프로토타이핑 사용자
__HW/SW 프로토타이핑 선택 사항
__프로토타이핑 결정 기준
__올바른 프로토타입 선택
__산업 설계 사슬
__설계 흐름의 변경 필요성
__가상 프로토타입의 다양한 유형
__가상 프로토타입의 간략한 역사
__독점 오퍼에 대한 제한 사항
__가상 프로토타입을 빠르게 만드는 것
__표준화: SystemC TLM-2.0 시대
____SystemC TLM-2.0 추상화 레벨
__아키텍처 가상 프로토타입
__소프트웨어 가상 프로토타입
__정리: 가상화 중요성의 증가

3장 임베디드 시스템을 위한 소프트웨어 모델링
__언제 그리고 왜 임베디드 시스템을 모델로 만들려고 하는가?
__모델링
__모델링 언어는 무엇인가?
__모델링 언어의 사례
__V 다이어그램의 약속
__왜 임베디드 시스템을 모델로 만들려고 하는가?
__언제 임베디드 시스템을 모델로 만들려고 하는가?
____임무와 안전 필수 애플리케이션
____고도로 복잡한 애플리케이션과 시스템
__운용의 복잡성
__결함 비용과 검출 시간
__규모가 큰 개발 팀은 모델링을 요구한다
__모델링은 종종 유일한 선택이다
__모델링은 훌륭하지만, 모든 모델이 틀리지는 않는가?
__자신의 프로토타입을 가져야 한다: 이제 어떻게 해야 하는가?
__정리
__다음 단계: 시도하라!
____DC 모터를 이용한 폐회로 제어
____다운로드 가능 킷을 이용한 프로토타이핑 더 배우기
____NI 상태 차트 모듈을 이용한 애플리케이션 설계
____브러시를 갖는 DC 모터의 H 브리지 회로의 설계와 시뮬레이션
____모델리카 모델을 이용한 다중 도메인의 물리적 모델링
__참고 문헌

4장 임베디드 시스템을 위한 소프트웨어 설치 아키텍처와 패턴
__아키텍처와 설계 개요
____아키텍처는 시스템 전역 최적화에 관한 것이다
__세 가지 설계 레벨
__설계 패턴이란?
____설계 패턴을 이용하기 위해 객체지향 기법을 이용해야만 하는가?
____아키텍처 사례
____패턴 사용
____트레이드오프 결정
__소프트웨어 아키텍처 범주와 뷰
____주 아키텍처 뷰
____2차 관점
__정리
__참고 문헌

5장 실시간 빌딩 블록: 이벤트와 트리거
__이벤트와 트리거
__실내 온도 구성단위
__이벤트 시스템
__이벤트 처리
__이벤트 메소드
__이벤트 데이터 구조
__재진입
____인터럽트 불능과 가능
____EnterCritical과 ExitCritical
____세마포어
____Enter/ExitCritical을 이용한 구현
__이벤트 처리
__통합
__트리거
__LED 깜박이기
__설계 아이디어
__틱 타이머
__트리거 인터페이스
__트리거 디스크립터
__데이터 할당
__SetTrigger
__IncTicks
__재진입 만들기
__초기화
__깜박이기!
__삐 소리 내기!
__실시간 양상
__정리와 소스코드

6장 임베디드 소프트웨어에 대한 하드웨어 인터페이스
소개
하드웨어 팀과의 협업
____능동적 협업
____앰버서더
____레지스터 설계 툴
____공동 개발 활동
____시스템 통합
__유용한 하드웨어 설계 양상
____하드웨어 이벤트 통지
____하드웨어에서의 작업 시작
____비트 필드 정렬
____고정 비트 위치
____블록 버전 번호
____디버그 후크
__다중 하드웨어 버전 지원
____컴파일 시간 스위치
____빌드 시간 스위치
____실행 시간 스위치
__자가 적응 스위치
__어려운 하드웨어 상호작용
____정확한 레지스터 접근
____동일 레지스터에서의 혼합 비트 유형
____에지와 레벨 인터럽트
__테스팅과 문제 해결
__일시적 후크
____영구적 후크
__정리
__성공 사례

7장 임베디드 소프트웨어 프로그래밍과 구현 가이드라인
__소개
____고품질 프로그래밍의 원칙
____임베디드 프로그래밍이 일반 프로그래밍과 다른 점
__임베디드 소프트웨어 프로젝트 시작
____하드웨어 플랫폼 입력
____프로젝트 파일/구성
____팀 프로그래밍 가이드라인
____구문 표준
____소스코드에서의 안전성 요구 사항
__변수 구조
____변수 선언
____데이터 유형
____정의

8장 임베디드 운영체제
__포어그라운드/백그라운드 시스템
__실시간 커널
____실시간 운영체제(RTOS)
____임계 구간
____태스크 관리
____태스크 우선순위 할당
____스택 크기 결정
____유휴 태스크
__우선순위 레벨
__준비 목록
____선점형 스케줄링
__스케줄링 시점
____라운드로빈 스케줄링
__문맥 스위칭
__인터럽트 관리
____CPU 인터럽트 처리
____비커널 인식 인터럽트 서비스 루틴(ISR)
____다중 인터럽트 우선순위를 가진 프로세서
____공통 장소에 대한 모든 인터럽트 벡터
____유일 장소에 대한 모든 인터럽트 벡터
__클록 틱(또는 시스템 틱)
__대기 목록
__시간 관리
__자원 관리
____자원 관리, 불능/가능 인터럽트
____자원 관리, 세마포어
____자원 관리, 우선순위 전환
____자원 관리, 상호 배제 세마포어(뮤텍스)
____자원 관리, 교착상태(또는 죽음의 포옹)
__동기화
____동기화, 세마포어
____동기화, 크레딧 트래킹
____쌍방 랑데부
__메시지 패싱
____메시지
____메시지 큐
____제어 흐름
____클라이언트와 서버
__메모리 관리
__정리

9장 임베디드 시스템에서 설계에 의한 소프트웨어 재사용
__소프트웨어 재사용이 문제가 되는 이유
__소프트웨어 재사용의 제한 사항
__소프트웨어 재사용의 종류
__계층에 의한 재사용 구현
__다음 레벨로 이동
__컴포넌트 팩토리 소개
__팩토리 하드웨어 구성
__팩토리 소프트웨어 구성
__팩토리가 재사용성을 지원하는 방법
__RTOS 불가지론
__임의 확장성
__정리
__참고 문헌

10장 임베디드 시스템을 위한 소프트웨어 성능 공학
__사례: eNodeB 애플리케이션에서 지연과 처리량
__성능 패턴과 안티패턴
__참고 문헌

11장 임베디드 소프트웨어의 성능 최적화
__코드 최적화 프로세스
__개발 툴 이용
____컴파일러 최적화
____기본 컴파일러 구성
____최적화 보장 활동
____추가 최적화 구성
____프로파일러 이용
__배경: 임베디드 아키텍처 이해
____자원
__기본 C 최적화 기법
____올바른 데이터 유형 선택
____함수 호출 관례
____포인터와 메모리 접근
____제한과 포인터 대역
____루프
____추가 팁과 비법
__일반 루프 변환
____루프 언롤링
____다중 샘플링
____부분 합
____소프트웨어 파이프라이닝
__최적화 기법 애플리케이션 사례: 교차 상관관계
____준비
____최초 구현
____1단계: 분수 연산을 위한 인트린식 사용과 루프 카운트 명시
____2단계: 데이터 정렬 명시와 다중 샘플링 알고리즘 수정
____3단계: 어셈블리 언어 최적화

12장 임베디드 소프트웨어의 메모리 최적화
__소개
__코드 크기 최적화
____컴파일러 플래그와 플래그 마이닝
____크기와 성능 트레이드오프를 위한 타깃 ISA
____코드 크기를 위한 ABI 튜닝
____캐비앳 엠프토르: 코드 크기에 직교적인 컴파일러 최적화!
__메모리 레이아웃 최적화
____메모리 최적화 개요
____최적화 노력에 집중
____벡터화와 동적 코드: 비율 계산
____C의 포인터 에일리어싱
__데이터 구조, 데이터 구조 배열, 합산
__메모리 성능을 위한 루프 최적화
____데이터 정렬 파급 효과
____큰 성과를 위한 데이터 유형 선정

13장 임베디드 소프트웨어의 전력 최적화
__소개
__전력 소비의 이해
____전력 소비 기초
____정적과 동적 전력 소비
____최대, 평균, 최악, 일반 전력
__전력 소비 측정
____전류계를 이용한 전력 측정
____홀 센서 유형 IC를 이용한 전력 측정
____VRM(전압 조정기 모듈 전력 공급 장치 IC)
____정적 전력 측정
____동적 전력 측정
____애플리케이션의 전력 소비 프로파일링
__전력 소비 최소화
____하드웨어 지원
____클록과 전압 제어
____저전력 사례
__데이터 흐름 최적화
____메모리 접근을 위한 전력 소비 줄이기
____DDR 개요
____전력용 DDR 데이터 흐름 최적화
____타이밍에 의한 전력 최적화
____인터리빙을 이용한 최적화
____메모리 소프트웨어 데이터 구성 최적화
____일반 DDR 구성 최적화
____DDR 버스트 접근 최적화
__전력을 위한 SRAM과 캐시 데이터 흐름의 최적화
____SRAM(모든 메모리)과 코드 크기
____SRAM 전력 소비와 병렬화
____데이터 전이와 전력 소비
____캐시 활용과 SoC 메모리 레이아웃
____지역성 설명
____집합 연관도 설명
____캐시를 위한 메모리 레이아웃
____후기입과 연속 기입 캐시
____캐시 일관성 기능
____컴파일러 캐시 최적화
__주변기기/통신 활용
____데이터 DMA와 CPU
____코프로세서
____시스템 버스 구성
____주변기기 속도 등급과 버스 폭
____핵심 통신에 대한 주변기기
__알고리즘
____컴파일러 최적화 레벨
____명령 패킹
____루프 언롤링 재고
____소프트웨어 파이프라이닝
____반복 제거
____정확성 줄이기
____저전력 코드 시퀀스와 데이터 패턴
__정리

14장 임베디드 시스템을 위한 인간 요소와 사용자 인터페이스 설계
__사용자 인터페이스 설계의 분석 단계
____첫 번째 설계 반복
____두 번째 프로토타입 개발(고성능 툴로 작성된 실물 모형)
____필수 유스케이스
____사용자 분석 시나리오
____계층적 태스크 분석
____사용자의 인지, 지각, 학습의 제한사항 극복을 위한 설계 접근법
____오류 메시지
__가상 윈도우
__엔티티 관계 다이어그램(ERD)을 이용한 데이터 모델
__CREDO 매트릭스를 이용한 가상 윈도우 분석
__발견적(휴리스틱) 평가
__형태(게슈탈트)
__MVC 아키텍처를 이용한 사용자 인터페이스 설계
____MVC 소프트웨어 아키텍처의 상황
____MVC 소프트웨어 아키텍처의 문제와 영향력
____MVC를 이용한 해결책
__안전 필수 사용자 인터페이스
____안전한 HMI 설계 프로세스
____안전한 인간-기계 인터페이스 설계 가이드라인
__참고 문헌
__관련 문헌

15장 임베디드 시스템 품질, 통합, 테스팅 기법
__소프트웨어 테스트란?
____소프트웨어를 테스트해야 하는 이유
____테스팅에 충분한 양
____테스팅 시점
____누가 결정하는가?
__이용 가능한 기법
____정적과 동적 분석
____요구 사항 추적성
____코딩 표준에 엄격한 정적 분석
____필수 노트와 필수 순환 복잡도 사례연구
____동적 분석의 이해
____고집적 시스템의 유물
____단위, 모듈, 통합 테스트 정의
____구조적 커버리지 분석 정의
____탠덤에서 단위 테스트와 시스템 테스트에 의해 코드 커버리지 성취
____회귀 테스트를 통한 기능성 유지
____단위 테스트와 테스트 주도 개발
____테스트 케이스 자동 생성
__표준 설정
____표준 용어
____공인 프로세스 표준의 진화
____적절한 표준 선택의 자유
__특이 상황 처리
____자동 생성 코드 작업
____레거시 코드와 작업
____목적 코드 베리피케이션(OCV)을 통한 요구 사항 추적
__테스트 솔루션 환경 구현
____실용적 고려 사항
____대안 고려
__정리

16장 임베디드 시스템용 소프트웨어 개발 툴
__디버깅 툴 소개
__GDB 디버깅
____GDB 디버거 구성
____GDB 시작
____애플리케이션 컴파일
____애플리케이션 디버깅
____데이터 검사
____중단점 이용
____스텝으로 만들기
____프로그램 변경
____코어 덤프 분석
__디버그 에이전트 설계
____사용 예
____디버그 에이전트 개요
____애플리케이션 시작
____문맥 스위치
____위치 독립 실행 가능자
____애플리케이션으로부터 나온 디버그 이벤트
____다중 코어
____디버그 에이전트 시작
__JTAG를 이용한 디버깅
____JTAG 이용의 이점
____JTAG를 이용한 보드 브링업
____디버그 에이전트와의 비교
____GDB와 JTAG
__이클립스와 GDB를 이용한 디버깅 툴
____GDB를 이용한 리눅스 애플리케이션 디버그
____KGDB를 이용한 리눅스 커널 디버그
__계측 코드
____실제 사례
__분석 툴
____Strace
____Mtrace
____Valgrind
__하드웨어 능력
____하드웨어 중단점
____하드웨어 감시점
__디버깅 비법과 요령

17장 임베디드 시스템용 다중 코어 소프트웨어 개발
__1부: 분석과 고수준 설계
__분석
____직렬 성능 향상
____애플리케이션의 이해
__고수준 설계
____병렬 분해
____데이터 종속성
____통신과 동기화
____부하 균형
____알고리즘 선택
____분해 접근법
__1부 정리
__2부: 구현과 저수준 설계
__스레드 기반 구현
____커널 스케줄링
____POSIX 스레드(Pthreads)
____PPthreads 이용
____스레드 안전성 처리
____동기화와 상호 배제 구현
__뮤텍스, 잠금장치, 중첩 잠금장치
____뮤텍스
____조건 변수
__입상도
____작은 범위
____큰 범위
____접근법
__태스크 병행성 구현
____생성과 연결
____병렬 파이프라인 계산
____분할 정복 스키마
____태스크 스케줄링 고려 사항
____스레드 풀링
____친화력 스케줄링
____이벤트 기반 병렬 프로그램
____루프 병행성 구현
____계산과 집약성 정렬
__메시지 전달 구현
____MCAPI
____MRAPI
____다중 코어 시스템의 MCAPI와 MRAPI
____플레잉 카드 인식과 분류 사례
__하이브리드 접근법 이용
__참고 문헌

18장 안전 필수 소프트웨어 개발
__소개
__어떤 안전 요구 사항인가?
____인증 킬러
__프로젝트 기획 전략
____전략 1: 초기에 프로젝트의 인증 범위 결정
____전략 2: 인증의 타당성 결정
____전략 3: (사용한다면) 독립적 평가자 선정
____전략 4: (사용한다면) 평가자의 역할 이해
____전략 5: 평가 의사소통이 핵심
____전략 6: 인증의 베이시스 정립
____전략 7: 제품의 ‘적합성과 목적’정립
____전략 8: 인증의 블록 다이어그램 정립
____전략 9: 의사소통의 통합 목표 정립
____전략 10: 인증 경계의 모든 인터페이스 식별
____전략 11: 핵심 안전 방어 전략 식별
____전략 12: 빌트인 테스트(BIT) 능력 정의
____전략 13: 결점 경보 커버리지 정의
____전략 14: 운용자/사용자의 의지와 기대 정의
____전략 15: 적절한 통합 레벨에서의 소프트웨어 개발 계획 정의
____전략 16: 규정 준수의 증거로서 사용될 인공물 정의
____전략 17: 노동 집약 분석 계획
____전략 18: 사용자 레벨 문서 생성
____전략 19: 잔여 활동 계획
____전략 20: 명확한 인증 계획 발간
__결점, 장애, 위험, 리스크 분석
____결점, 오류, 장애
____가용성과 신뢰성
____결점 처리
____위험 분석
____리스크 분석
__안전 필수 아키텍처
____행위자(Do-er)/검사자(check-er)
____두 개의 프로세서
____투표자
__소프트웨어 구현 전략
____전략 1: 명확하고 반복적인 동료 검토 프로세스가 있는가
____전략 2: 기존의 안전 코딩 표준에 대한 이용 고려
____전략 3: 입력 데이터의 모든 조합 처리
____전략 4: 특정 변수 값 검사
____전략 5: 안전 필수 코드 구역 표시
____전략 6: 타이밍 실행 검사
____전략 7: 진부한 데이터
____전략 8: 출력 비교
____전략 9: 최소 허용 상태로 데이터 초기화
____전략 10: 실행 순서
____전략 11: 휘발성 데이터 검사
____전략 12: 비휘발성 데이터 검사
____전략 13: 전체 시스템이 동작할 수 있는지 확인
____전략 14: ‘불필요’ 코드 제거
____전략 15: 비사용 메모리 작성
____전략 16: 정적 코드 분석
__참고 문헌

19장 지적 재산
__배경
__소프트웨어가 자신의 것인 경우
____소프트웨어 획득
____저작권 보호
____저작권 얻기
__특허
____특허는 무엇인가?
____특허는 왜 존재하는가?
____특허 결정
____특허 신청
____특허에는 무엇이 있는가?
____특허 허가
__문제
____오픈소스 소프트웨어
____소프트웨어 허가와 판매
____특허 확보
____침해 발견
____저작권 침해 회피
____특허 침해 회피

20장 임베디드 소프트웨어 개발 관리
__능력 성숙도 모델 통합
__OSI 모델
__소프트웨어 관리
____V 모델
____폭포수 모델
____애자일 모델
__구조
__프로그램 헌장
__이해관계자와 핵심 팀
__제품 수명주기 관리
__포트폴리오 관리
__프로젝트 관리 수명주기
__프로젝트 수명주기
__문제 해결
__의사소통
__약어, 기호, 두문자어
__저작권 감사의 글
__참고 문헌

21장 임베디드 시스템을 위한 애자일 개발
__소개
__임베디드 시스템의 특별한 점
____소프트웨어가 유일하고 요구 사항이 다양한 공학 분야에 걸쳐있는 시스템에 적합하다
____특정 하드웨어를 사용한다
____종종 하드웨어와 공동 개발된다
____프로그래밍 언어와 툴의 선정에 제약이 있다
____더 도전적인 테스팅 환경을 갖는다
____종종 고도로 예측 가능해야 한다
____종종 엄격한 시간 제약을 받는다
____종종 (메모리 같은) 심각한 자원의 제약이 있다
____종종 대단히 고신뢰적이고 안전 필수적이 돼야 한다
____종종 엄격한 외부 규정에 제약을 받는다
____단일 제품으로 출하, 납품된다
____종종 고정 가격 입찰의 대상이 된다
__임베디드 소프트웨어를 위한 애자일 프로젝트 기획
____프로젝트 비전
____초기 안전성/신뢰성 리스크 평가
____초기 프로젝트 리스크 평가
____추정
____스케줄링
__임베디드 소프트웨어를 위한 프로젝트 거버넌스
____스탠드 업!(회의)
____성과 메트릭
____반복 회고(파티 단계)
__임베디드용 애자일 개발 관행
____점증적 개발
____고충실도 모델링
____실행 가능한 요구 사항
____테스트 주도 개발(TDD)
____연속적 통합
____변경 관리
____동적 기획
____리스크 관리
__애자일 척도 인자
__애자일 방법이 표준 고수에 도움을 줄 수 있는가?
__정리
__참고 문헌
__참고 목록

22장 자동차 애플리케이션용 임베디드 소프트웨어
__배경 설명을 위한 역사
____자동차 전자 기술: 1911-2000
____전자 콘텐츠의 성장 동력
____임베디드 SW의 성장
____자동차 프로그래밍 언어
____영향에 대한 요약
__자동차 세그먼트와 차이점
____차체
____차대와 안전성
____운전자 보조
____구동과 변속
____인포테인먼트와 텔레매틱스
____자동차 하부 세그먼트 요약
__자동차 품질
____머피의 법칙을 위한 기획
____결점 허용 통신
____결점 허용 소프트웨어
____제로 결함 소프트웨어
____리스크 관리와 장애 모드
____장애 모드와 영향 분석
__개발과 테스트
____서브시스템의 상호 운용성
____소프트웨어 명세서
____소프트웨어 아키텍처
____모델링
____자동 코딩과 드라이버
____벤치 테스팅
____추적과 디버그
____최종 단계 테스팅
____보정
____유지 보수/제품 생애 지원
__자동차 진단
____MIL
____데이터 로거
____OBD II
__자동차 표준
____MISRA
____AUTOSAR
____AEC
__자동차 안전성
____ISO 26262
____ASIL
__자동차 보안
____사용 수단: 차 경보장치 등
____현재의 수단: 해킹
____미래의 수단: 위조
__자동차 시장의 가까운 미래
____성능
____다중 코어의 출현
____커넥티드 차량
____자동 차량
__정리

23장 입출력과 스토리지 프로그래밍
__I/O 디바이스와 I/O 컨트롤러
____I/O 디바이스 범주
____I/O 컨트롤러
____메모리 맵 I/O와 DMA
____플래시, SD/SDHC, 디스크 드라이브
____네트워크 부착 스토리지
__I/O 프로그래밍
____I/O 소프트웨어의 목적
____I/O 소프트웨어 계층
____사례연구: 리눅스 디바이스 드라이브
__스토리지 프로그래밍
____블록 디바이스용 I/O
____플래시 디바이스 프로그래밍
____SATA 디바이스 드라이버
__스토리지 시스템의 성능 개선
____사례연구 1: SDHC의 성능 최적화
____사례연구 2: NAS의 성능 최적화
__정리
__참고 문헌

24장 네트워킹 애플리케이션용 임베디드 소프트웨어
__소개
__네트워크 디바이스용 시스템 아키텍처
____데이터면, 제어면, 서비스면, 관리면
__네트워킹용 다중 코어 SoC
____코어
____패킷 엔진 하드웨어(PEH) 블록
__네트워크 프로그래밍 모델
____파이프라인 프로그래밍 모델
____동작 완료 프로그래밍
__패킷 프로세싱 소프트웨어의 구조
____데이터면 기반 구조(DP 인프라)
____포워딩 엔진 구조
____패킷 프로세싱 애플리케이션 요구 사항
__네트워크 애플리케이션 프로그래밍 기법
____네크워크 애플리케이션 프로그래머용 다중 코어 성능 기법
____흐름 문맥 탐구 동안 락 회피
____참조 계수 회피
____안전 참조 메커니즘
____흐름 병렬화
____최신 통계와 연관된 캐시 스레싱 감소
____통계 가속
__네트워크 애플리케이션 프로그래머를 위한 일반 성능 기법
____효과적 캐시 이용
____소프트웨어 지시 프리패칭
____likely/unlikely 컴파일러 빌트인 이용
____캐시의 핵심 코드 조각 락킹
____일반 코딩 가이드라인
__임베디드 네트워크 디바이스용 리눅스 운영체제
____사용자 공간 프로그래밍과 연관된 변환 색인 버퍼(TLB)의 실수
____하드웨어 주변장치와 하드웨어 가속기에 대한 접근
____결정론적 성능
__정리

25장 임베디드 시스템용 리눅스
__소개
____임베디드에 리눅스인 이유
____리눅스 배포
____리눅스 적합 임베디드 플랫폼
____라이선싱
__임베디드 리눅스 시작
____메모리 관리 유닛
____부트스트래퍼
____부트로더
____커널
____애플리케이션
__참조 보드상의 리눅스 동작
____참조 플랫폼
____BeagleBone으로 시작

부록 1 C 문법 코딩 표준: 소스코드 개발
부록 2 임베디드 소프트웨어, 시스템, 템플릿을 위한 C++ 프로그래밍 언어
사례연구 1 소프트웨어 성능 공학
사례연구 2 사용자 인터페이스: 경찰 지휘 통제 시스템
사례연구 3 다중 코어로의 전이
사례연구 4 임베디드 시스템 품질과 메트릭 프로그램을 위한 소프트웨어 공학

저자 : 로버트 오샤나 (편저)

편저자 로버트 오샤나(Robert Oshana)는 임베디드 소프트웨어 산업 분야에서 30년 이상의 경험을 쌓았으며, 주로 국방 산업과 반도체 산업의 임베디드와 실시간 시스템에 주안점을 두고 활동하고 있다. 임베디드 시스템, 소프트웨어 공학, 소프트웨어 품질과 프로세스에 폭넓은 경험이 있으며, 현재 글로벌 개발 팀을 이끌고 있다. BSEE, MSEE, MSCS, MBA 학위가 있고, IEEE의 시니어 멤버다. 국제적인 연사로 활동 중이며, 다양한 기술 분야에서 100개 이상의 프리젠테이션과 간행물을 발표했고, 여러 권의 임베디드 소프트웨어 기술 분야 책도 출간했다. 서던 메소디스트 대학교(Southern Methodist University)의 객원교수로서 석사 과정의 소프트웨어 공학과 임베디드 시스템 과목을 가르치고, 프리스케일(Freescale) 반도체의 기술 특훈 회원이자 네트워킹과 멀티미디어 분야의 글로벌 소프트웨어 R&D 이사로 재직 중이다.



저자 : 마크 크랠링 (편저)

편저자 마크 크랠링(Mark Kraeling)은 임베디드 소프트웨어 산업 분야에서 20년 이상의 경험을 쌓았으며, 주로 자동차와 수송 산업의 임베디드 실시간 시스템에 주안점을 두고 활동하고 있다. BSEE, MSEE, MBA 학위가 있다. 전 세계적인 임베디드 컨퍼런스에서 정기적인 연사로 활동하며, 임베디드 개발에 주안점을 둔 다양한 논문과 기사를 발표했다. 임베디드 시스템과 디자인 컨퍼런스에서 임베디드 시스템 관련 논문을 발표했을 뿐만 아니라 미국철도연합회(AAR)의 다양한 분과위원회에서 표준 개발에 힘쓰는 등 산업 개발 분야에 적극적으로 활동 중이다. 커민스(Cummins) 사에서 실시간 엔진 제어 개발로 경력을 처음 시작했다. 현재 GE 수송 분야의 제품 관리자이며, 실시간과 안전 필수 철도시스템을 개발 중이다.



역자 : 윤희병

역자 윤희병은 해군사관학교 경영과학과 연세대학교 전산공학을 전공하고 미국으로 건너가 미 해군대학원과 조지아공대에서 전산공학 석사와 박사학위를 각각 취득했다. 그 이후 2013년까지 국방대학교 전산학과 교수, 2014년에는 고려대학교 컴퓨터학과 초빙교수로 재직하면서 임베디드 소프트웨어 분야를 주로 강의했다. 저서로는 『임베디드 소프트웨어 개론』(2012)과 『NCW 서비스와 기술』(2011)이 있고, 옮긴 책으로는 『자율형 지능 차량 이론과 응용』(2013), 『자율형 무인차량 개발 및 과제』(2011), 『임베디드 소프트웨어 테스팅』(2007) 등이 있다. 현재 무인시스템과 임베디드 소프트웨어 분야의 전문가로서 왕성한 연구 활동을 하고 있으며, 현재 국방대학교 명예교수, 서강대학교 융합소프트웨어연구소 겸임교수, 미래국방포럼 사무총장, 임베디드 소프트웨어?시스템 산업협회 운영위원 등을 맡고 있다.


원서로 보세요
한기태님이 쓰신 서평보기 I 평점 I 조회수(703) I 공감 (0) I 블로그
번역기!
 
전체평균(18)
회원평점   회원서평수 1
원서로 보세요
한기태 님  2016-06-17
에이콘 출판사의 신간
『Functional C#: C#으로 배우는 함수형 프로그래밍』
위스누 앤거로 저
27,000원
(10%↓+5%)
 
『아카를 이용한 마이크로서비스 개발: 예제 애플리케이션 구축과 함께하는 아카 이해하기』
크리스티앙 백스터 저
31,500원
(10%↓+5%)
 
『실전 윈도우 디바이스 드라이버 2/e: 윈도우 개발자를 위한 실무 유형별 드라이버 개발 가이드』
이봉석 저
43,200원
(10%↓+5%)
 
『게임 디자인을 위한 기초 이론: 깊이 있는 게임 디자인을 위한 고민의 시작』
남기덕 저
36,000원
(10%↓+5%)
 
『파이썬으로 실무에 바로 적용하는 머신 러닝』
강봉주 저
27,000원
(10%↓+5%)
 
이메일주소수집거부