Top

품질을 생각하는 임베디드 소프트웨어 설계

  • 원서명RIARU TAIMU OS KARA SHUPPATSU SHITE KUMIKOMI SOFUTO ENGINIA WO KIWAMERU (ISBN 9784434159374)
  • 지은이사카이 요시오
  • 옮긴이조진제
  • ISBN : 9788960774056
  • 30,000원
  • 2013년 02월 28일 펴냄 (절판)
  • 페이퍼백 | 364쪽 | 152*224mm
  • 시리즈 : 임베디드 시스템

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

품질에 대한 요구가 커지는 요즘, 임베디드 소프트웨어 엔지니어가 반드시 알아야 하는 기술은 무엇일까? 이 책은 그 질문에 대한 하나의 답이 될 것이다. ‘시간분할’과 ‘기능분할’이라는 두 가지 장애물을 넘고, 체계적 재사용과 품질을 위한 두 개의 벽을 넘으면, 생활을 풍부하게 하고, 안심하고 사용할 수 있는 제품을 위한 소프트웨어를 개발할 수 있을 것이다. 초중급 임베디드 개발자는 기술적인 지식을 습득할 수 있으며, 중고급 임베디드 개발자라면 개발 문화를 체득할 수 있는 책이다.


[ 저자 서문 ]

왜 프로페셔널 임베디드 소프트웨어 엔지니어가 되기를 바라는가?
왜 우리는 임베디드 소프트웨어 엔지니어라는 직업을 선택해서 프로페셔널이 되기를 원할까?

거기에는 두 가지 이유가 있다. 첫째는 매력적인 제품을 개발해 사용자가 편안하게, 안심하고 사용하게 만들어 다음에도 우리가 개발한 제품을 선택하게 하기 위해서이며, 둘째는 임베디드 소프트웨어 엔지니어에게 밀려드는 다양한 요구사항을 신속하게 해결함으로써 창조적으로 매력적인 제품을 개발할 수 있게 되기 때문이다.
또 임베디드 소프트웨어 엔지니어가 자기 자신의 기술 수준을 높이고 싶다는 바람이 있는 한편, 임베디드 제품을 제조하는 기업은 시장경쟁력을 높이 유지해 안정적인 이익을 얻고 싶어하고 임베디드 소프트웨어 엔지니어가 고부가가치의, 사용하기 쉬운, 품질이 좋은 소프트웨어를 결과물로 만들어 주기를 강하게 바란다.

임베디드 소프트웨어 엔지니어가 기술을 정복하기 위한 원동력

임베디드 소프트웨어 엔지니어가 장애물과 벽을 넘어 목표에 도달하기까지는 높은 동기부여가 필요하다. 임베디드 소프트웨어 엔지니어는 시련을 넘어 기술을 높이기 위한 동기를 어디에서 찾을까?
첫째는 항상 쫓기듯이 겨우 일을 완료하는 악순환에서 탈피해 개발효율을 높여 여유를 갖고 창조적으로 일을 하기 위해서, 둘째는 매력적인 제품을 개발해 사용자가 쾌적하게 사용하고 다음에도 자신들의 제품을 선택하게 하는 자신감을 갖기 위해서, 이 두 개 이상이 시련을 넘기 위한 동기의 원천이다.
임베디드 소프트웨어는 단순하게 임베디드 기기의 안에서 움직이는 소프트웨어를 의미하지 않는다. 임베디드 기기는 다양한 형상의 외관을 갖고 다양한 사용자 인터페이스로 사람들의 생활에 들어와서 생활을 지지하는 배후자로서의 역할을 한다. 임베디드 소프트웨어는 그 심장부인 컨트롤러다. 따라서 임베디드 소프트웨어 엔지니어는 자신이 개발한 소프트웨어가 임베디드 제품 안에서 중요한 역할을 하고 있다는 즐거움과 만족감이 있다.
그러나 그 즐거움과 만족감 뒤에는 큰 책임이 있다. 임베디드 기기가 우리 주변에서 여러 도움을 주고 있다는 점은 잘못되면 임베디드 기기가 사람을 해칠 수 있는 흉기가 될 수도 있다는 사실을 의미한다. 특히 임베디드 소프트웨어는 내부 구조를 보기 어렵고 설계의 자유도가 높기 때문에 설계자의 의도에 반해 사회적인 문제를 일으키는 경우도 있다.
우리는 무엇인가를 만드는 즐거움을 느끼면서 스스로의 기술을 연마해 임베디드 기기를 사용하는 사용자를 만족시키면서 안전하고 신뢰성 높은 임베디드 소프트웨어를 세상에 내보낼 의무가 있다.
임베디드 소프트웨어 엔지니어는 목적을 달성하기 위해 기술을 연마함으로써 동료들과 창조의 즐거움을 나눌 수 있고, 편리할 뿐만 아니라 안심하고 사용할 수 있는 매력적인 임베디드 기기를 세상에 내놓을 수 있고 사회와 조직에 책임을 다할 수 있다.
임베디드 소프트웨어 엔지니어를 둘러싼 환경을 되돌아 보면 임베디드 소프트웨어 프로젝트에서는 엔지니어가 최대한의 노력으로 증가한 요구와 계획된 일정을 맞추는 것이 현실이다. 경우에 따라서는 프로젝트에 새로운 인원을 투입해 문제를 해결하려는 조직도 있지만 간단한 방법인 증원은 오히려 엔지니어의 부담을 증가시켜 악순환으로부터 좀처럼 벗어날 수 없다. 임베디드 소프트웨어 엔지니어는 기술을 갈고 닦아 완전히 정복해야만 악순환으로부터 탈피해 호순환의 세계로 갈 수 있다. 호순환의 세계로 들어갈 수 있으면 높은 품질의 임베디드 소프트웨어를 효율적으로 개발할 수 있고 지금 판매하는 제품보다도 더욱 고객 만족도를 높이는 상품을 개발할 수 있다. 효율화할 수 있는 여유로 독창성 있는 아이디어를 생각해 새로운 키 디바이스의 도입을 하드웨어 엔지니어와 검토하는 작업이 가능하게 된다.
임베디드 소프트웨어 엔지니어가 기술을 연마해 프로페셔널 엔지니어가 되려는 목적은 무언가를 만드는 즐거움을 함께 나누고, 생활을 풍부하게 하며, 안심하고 사용할 수 있는 상품을 출시하고, 또 상품의 경쟁력을 끌어올려 경쟁사를 이기는 데에 있다. 그곳에 도달하기까지의 길은 멀고 도중에 장애물과 벽이 가로막고 있다. 우리 임베디드 소프트웨어 엔지니어는 도달해야 하는 목표에서 눈을 떼지 말고 기술을 갈고 닦음으로써 장애물과 벽을 넘어 악순환으로부터 호순환의 경계를 무너뜨릴 수 있다.

임베디드 엔지니어의 고수가 되기 위한 로드맵

임베디드 소프트웨어 엔지니어가 프로페셔널이 되기 위한 로드맵을 보자. 임베디드 소프트웨어 엔지니어가 기술을 연마해 창조적인 제품 개발에 열중해서 사용자를 최대한으로 만족시키는 제품을 출시하기 위해서는 목표까지 두 개의 장애물과 두 개의 벽을 넘어야만 한다.

● 시간분할의 장애물
● 기능분할의 장애물
● 재사용의 벽
● 품질의 벽

시간분할의 장애물이란 임베디드 소프트웨어가 항상 책임을 지는 실시간 성능을 실현하기 위한 기술적 장애물이다. 임베디드 소프트웨어 엔지니어 선배들은 임베디드 기기에 요구되는 실시간 성능을 CPU와 주변 디바이스를 이용해 하나의 메인 루프와 복수의 인터럽트 처리로 구현했다. 그러나 소프트웨어의 규모가 커지고 실시간성을 포함한 복수의 동작을 하나의 CPU에서 실현해야만 하는 현재에는 시간적인 동기를 의식하면서 실시간 OS를 사용해 독립성이 높은 모듈분할을 해야 한다. ‘시간 분할의 장애물’을 넘는 것으로 임베디드 소프트웨어 엔지니어로서 실시간 성능을 의식한 모듈분할의 기술을 익힐 수 있다.
기능분할의 장애물이란 다양해지는 요구사양을 소프트웨어에서 실현하기 위해 넘어야 하는 기술적인 장애물이다. 기능분할은 비즈니스 분야의 소프트웨어 개발에서는 객체지향 설계기술 등을 이용해 해결하는 분야지만, 임베디드 소프트웨어에서는 첫 번째의 ‘시간분할의 장애물’을 넘어서 ‘기능분할의 장애물’을 넘을 필요가 있기 때문에 비즈니스 분야의 소프트웨어 개발에서 축적한 기술을 그대로 이용할 수는 없다. 시간적 분할과 기능적 분할은 개별적으로 이뤄지는 작업이 아니라 서로 참조해야만 한다. ‘시간분할의 장애물’과 ‘기능분할의 장애물’을 넘는 것으로 제약 조건을 해결하면서 요구되는 실시간성을 확보하고 다양해지는 요구사양을 효율적으로 실현할 수 있게 된다.
재사용의 벽은 그 규모가 날로 커지고 있지만, 이전보다 늘어난 개발기간 단축 요구를 달성하기 위한 비장의 수단으로서 반드시 넘어야 할 벽이다. 임베디드 제품은 동일시장에 오랜 기간 상품을 계속 투입하기 때문에 시장과 사용자가 원하는 근본적인 요구를 만족하는 핵심 소프트웨어 자산이 존재한다. 이 핵심 자산을 파생상품을 실현하기 위한 소프트웨어 부분과 분리해 관리하는 방법으로 효율적인 소프트웨어 개발이 가능해진다. 처음 핵심 자산을 분리할 때에는 분리하지 않은 경우의 개발보다 1.5배 정도의 기간과 고도의 기술이 필요하지만, 핵심 자산의 분리가 가능한 후에는 차분개발의 횟수가 증가할수록 개발기간은 단축되고 상품의 부가가치를 높이면서 개발효율은 비약적으로 향상된다. 체계적인 재사용의 실현에는 소프트웨어 기술뿐만 아니라 시장분석과 제품군의 특징을 분석하는 기술이 필요해져 조직횡단적인 대응이 불가결하다.
품질의 벽은 임베디드 소프트웨어에 요구되는 안전성과 신뢰성을 해결하기 위해 넘어야 할 목표다. 임베디드 제품은 사람의 생활과 밀착해 있고 임베디드 소프트웨어는 임베디드 제품을 제어하는 두뇌이기 때문에 결함이 있다면 사용자에게 불쾌감을 줄 뿐만 아니라 기업 전체의 신용도 잃어버리게 된다. 기업에 있어서는 제품회수 비용이 이익을 압도하는 경우도 생긴다. 임베디드 소프트웨어 엔지니어는 소프트웨어 품질향상을 위한 이론을 이해하고 프로젝트 팀과 조직으로서 해당 이론을 실천함으로써 제품의 안전성과 신뢰성을 확보할 수 있다. 임베디드 소프트웨어를 둘러싼 세계는 글로벌화되고 있으며, 제품 품질을 높게 유지하는 것이 중요하다.
이 책에서는 이런 장애물과 벽을 넘을 기술을 해설하고, 동시에 신입 임베디드 소프트웨어 엔지니어가 장애물과 벽을 넘어 성장해 가는 과정을 이야기한다.

저자/역자 소개

[ 저자 소개 ]

사카이 요시오 (酒井由夫)
1987년부터 크리티컬 디바이스(Critical Device)의 소프트웨어 개발에 24년간 종사하고 있다. 주로 16비트 원칩 마이컴을 이용한 신호처리, 실시간 임베디드 시스템 개발을 하며 상품의 사양 입안에서 소프트웨어 개발 프로세스 관리, 프로젝트 관리, 안전성-신뢰성 검증, 보수, 소프트웨어 엔지니어 교육 등 임베디드 시스템 개발에 관한 폭넓은 영역을 경험했다. 객체지향 설계와 프로덕트 라인 전략을 상품 개발에 적용하는 일도 시도 중이다. 상품개발을 항상 설계자의 관점에서 분석하고 ‘구체적인 것에서 추상적인 것으로’라는 접근법(approach)을 고집한다.
2003년부터 임베디드 소프트웨어 관리자-기술자 육성연구회(SESSAME)에 참가하고 있으며, 2006년부터 소프트웨어 품질 기술의 지도, 지원, 소프트웨어 기술자 육성에도 종사하고 있다.
저서로 『리콜을 일으키지 않는 소프트웨어를 만드는 법』(기술평론사, 2010년)이 있다.


[ 옮긴이의 말 ]

출장 중에 잠깐 들른 서점에서 이 책을 보았습니다. 고객을 위한 ‘품질 요구를 만족하는 소프트웨어를 개발하는 것, 더군다나 시간적 제약이 있는 실시간 임베디드 소프트웨어의 설계는 어려움을 동반하는 것입니다. 이와 같은 실시간 임베디드 소프트웨어 설계를 개인적인 측면과 조직적인 측면에서 어떻게 접근하면 되는가에 대해 정리한 저자의 이야기를 읽으면서 다른 분들에게도 꼭 추천을 해야 할 책이라고 생각했습니다. 마침 기회가 되어 에이콘출판사에 제안을 했고 번역까지 맡게 되었습니다.
이 책은 ‘어떻게 하면 품질 요구를 만족하는 임베디드 소프트웨어를 개발할 수 있는가?’라는 주제에 대해 개발자 개인의 관점과 조직의 관점에서 각각의 접근 방법을 설명합니다.
실시간 OS를 사용하는 환경에서 실시간 요구를 만족하기 위한 시간분할의 방법, 기능 구현을 위한 기능 분할과 모델링이 개인의 관점에서 익혀야 할 기술이라면, 체계적 재사용을 위한 기법과 품질향상을 위한 활동은 조직적인 대응이 필요합니다. 저자는 이 책에서 POS시스템 개발을 예로 들어 실시간 태스크 분할과 객체지향 모델링에 기반한 설계와 프로덕트 라인 기반의 체계적 재사용을 위한 설계를 그림과 함께 쉽게 이해할 수 있게 설명해줍니다.
각 장은 다음과 같은 내용으로 구성되어 있습니다.
1장에서는 임베디드 소프트웨어를 개발할 때 어떤 환경에서 실시간 OS를 사용해야 하는가와 실시간 OS에 대한 리뷰를 하고 시간적 성능을 만족하기 위해서 어떻게 태스크를 설계해야 하는지를 살펴봅니다.
2장에서는 실시간 제약이 약한 기능 요구인 스루풋 요구에 대해 객체지향 설계의 적용을 설명하는데 UML(Unified Modeling Language)에 대한 기초적인 지식과 C++의 상속, 캡슐화, 다형성 등의 객체지향적 특성을 알고 있으면 이해에 어려움이 없을 것으로 생각합니다.

3장은 비교적 최신 설계 기법인 프로덕트 라인(Product Line) 방법을 바탕으로 전체 제품 계열의 설계와 재사용을 위해 핵심 자산을 어떻게 설계하고 관리해야 하는가를 설명합니다.
4장은 임베디드 소프트웨어 및 제품에 있어서 품질의 의미와 어떻게 측정하고 관리하면 고객 만족을 이끌어 내고 유지할 수 있는가에 대해 설명하고, 재미있는 예로 완전한 프로그램에 대해 이야기하는 부분도 있습니다.
결함이 전혀 없는 소프트웨어를 만들기는 어렵습니다. 그러나 여기서 이야기하는 것들을 익히고 실제 개발에 적용을 한다면 조금이라도 더 안정적이고 관리하기 쉬운 소프트웨어를 만들 수 있을 것으로 생각합니다.
이 책의 각 장은 각각 하나의 책으로 이야기할 수 있을 만큼 각각이 중요하고 처음 읽을 때에는 어렵다고 생각할 수도 있을 것입니다. 이 책에서 이야기하는 주제에 대해 더 깊은 지식을 원하는 독자는 참고서적을 참고하면 좋을 것입니다.
이 책의 원제목은 “임베디드 소프트웨어 엔지니어를 정복하자”입니다. 여러분 모두 임베디드 소프트웨어를 정복해 고객 만족을 줄 수 있는 고품질의 임베디드 소프트웨어를 개발함으로써 엔지니어로서의 만족과 여유를 느낄 수 있기를 바랍니다.


[ 옮긴이 소개 ]

조진제
한국 후지제록스정보시스템에서 개발팀장으로 복합기, 프린터용 RTOS 기반의 소프트웨어를 개발했으며, 임베디드 리눅스로 분야를 옮긴 후에는 셋톱 박스, 하이브리드 DVR, IP 카메라, 차량용 블랙박스 등의 영상 기반 임베디드 제품을 개발했다. 최근에는 임베디드 소프트웨어 개발에 대한 컨설팅과 강의를 하며 DSP 기반의 영상처리 소프트웨어를 개발하고 있다.

목차

목차
  • 1장 시간분할의 장애물 넘기
    • 1-1 임베디드 소프트웨어에 요구되는 실시간 성능
    • 1-2 영수증 인쇄
      • ‘동양레지스터주식회사’ 소개
      • 어느 날 홍석준 부장과 김재철 대리의 대화
      • 신입사원인 박영태 씨와 김재철 대리, 홍석준 부장의 대화
      • 감열식 프린터의 제어 순서
    • 1-3 원칩 마이컴과 인터럽트
      • 인터럽트 발생부터 인터럽트 발생 전의 처리로 되돌아가기까지의 흐름
    • 1-4 실시간 OS의 기초
      • 실시간 OS란
      • 실시간 OS의 도입
      • 이벤트 구동형 시스템
      • 실시간 OS에서의 태스크 전환
      • 태스크 전환 시에 TCB로의 레지스터 회피 순서
      • 태스크 상태 전환
      • 태스크 스케줄링
    • 1-5 실시간 OS의 동기. 통신
      • 이벤트 플래그
      • 이벤트 플래그에 의한 대기와 대기의 해제
      • 세마포어
      • 메시지
      • 시간대기
    • 1-6 실시간 OS를 사용한 감열식 프린터 제어
    • 1-7 실시간 요구•하드웨어 의존에 기반한 소프트웨어 분할 지침
      • 여러 가지 문제
      • 해결된 문제
    • 1-8 시스템 구조의 패러다임 전환
  • 2장 기능분할의 장애물 넘기
    • 2-1 2장에서 배우는 기술과 해당 기술이 필요한 배경
    • 2-2 기능적 분할 접근 방법
      • 미숙한 모듈 분할
      • 기능중시의 모듈 분할
      • 객체란 무엇인가?
      • 클래스란 무엇인가?
      • 능동 객체와 수동 객체
      • 태스크와 능동 객체
      • 객체지향 설계적 접근 방법의 이점
      • 기능적 관점에서 시스템 바라보기(대규모 시스템에 있어서의 계층적 관점)
    • 2-3 스루풋 요구에 의한 기능적 분할의 지침
    • 2-4 기능적 분할과 시간적 분할의 통합(조율)
      • 분할한 모듈에 대한 실시간 요구의 차이
      • 임베디드 소프트웨어 개발과 모델링
      • 기능적 분할과 시간적 분할의 트레이드 오프
      • 임베디드 독자의 디자인 패턴
    • 2-5 임베디드 소프트웨어 구조의 최적화
      • 임베디드 소프트웨어 개발 성공을 위해 계속 관점을 변경해서 보기
      • 경쟁력이 높은 임베디드 기기의 개발
  • 3장 재사용의 벽 넘기
    • 3-1 체계적인 재사용의 성공
    • 3-2 임기응변적인 유용과 체계적인 재사용의 차이
    • 3-3 마케팅의 중요성
      • 임베디드 소프트웨어 엔지니어에게 요구되는 능력
      • 임베디드 소프트웨어 엔지니어와 마케팅
    • 3-4 도메인 분석
      • 도메인 구조도 그리기
      • 요구 기능 전개
      • 도메인 구조도의 재검토
      • 핵심 자산의 추출
    • 3-5 재사용 자산의 이용과 관리
      • 재사용 자산의 부속 문서에 필요한 요소
    • 3-6 핵심 자산의 신뢰성 검증
      • 핵심 자산의 시뮬레이션 테스트
      • 1ch 간이 오실로스코프의 예
      • 핵심 자산의 시뮬레이션 검증
  • 4장 품질의 벽 넘기
    • 4-1 임베디드 소프트웨어에 요구되는 잠재적 가치
    • 4-2 임베디드 소프트웨어 품질 향상의 사고
      • 잘못을 하기 쉬운 인간의 활동을 제어하기 위한 활동
      • 신뢰성 향상 프로세스와 각 단계에 있어서 구체적인 시책
      • 결함을 만들어 내지 않는 노력과 버그를 검출하는 능력
    • 4-3 기본적 활동을 통한 시스템 신뢰성 높이기
      • 코딩 규칙과 프로젝트 관리
      • 프로그램 테스트의 기본
      • ASCII 문자열 검사 함수의 완전성 검증
      • 입력 문자의 그룹화와 테스트 케이스 추출
      • 완전한 프로그램으로
    • 4-4 기존 소프트웨어의 품질 높이기
      • COTS에 폭탄이 포함됐다면?
    • 4-5 타당성 확인과 검증
      • 타당성 확인
      • 리스크 분석의 구체적 사례
    • 4-6 조직성숙도에 따른 품질 향상 활동
      • 타당성 확인 실시 그룹
    • 4-7 임베디드 제품의 잠재적 가치 향상
      • 상품의 잠재적인 가치로서의 소프트웨어 품질

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

[ p214 그림 3.10 ]
상단 일어 문장 삭제