본문 바로가기

Robotics : 로봇공학/Certificate : 자격증

학습 1 - 로봇 소프트웨어 요구 사항 정의하기

NCS학습모듈 중 파일명 "로봇 작업 요구사항 분석 및 소프트웨어 아키텍처 설계" 이다.

로봇 작업 요구 사항 분석 및 소프트웨어 아키텍처 설계 학습모듈의 개요

 

학습모듈의 목표
로봇 기구 및 하드웨어의 특성을 이해하고 로봇의 동작 환경을 파악 및 분석한 이후에, 실제 로봇의 사용자 그룹별 로봇의 패턴 및 동작에 대한 요구 사항 분석할 수 있으며, 로봇 소프트웨어 아키텍처를 설계하기 위해서 요구 사항을 분석하고, 소프트웨어 아키텍처를 정의하고, 설계하고, 검증할 수 있다.

 

선수학습
로봇 공학, 소프트웨어 공학


학습모듈의 내용 체계

핵심 용어
컴포넌트 기반 개발, 소프트웨어 요구 사항 분석, 소프트웨어 요구 추출, 도메인 분석, 사용 사례 다이어그램, UML 모델링, 소프트웨어 아키텍처, 컴포넌트 다이어그램, 클래스 다이어그램, 상태 다이어그램

 

학습 1 로봇 소프트웨어 요구 사항 정의하기
학습 2 로봇 소프트웨어 사용 사례 작성하기
학습 3 로봇 소프트웨어 아키텍처 정의하기
학습 4 로봇 소프트웨어 아키텍처 설계하기


1-1. 로봇 소프트웨어 요구 사항 정의

Ÿ 로봇 하드웨어 구성도로부터 로봇의 제작 목표를 분석할 수 있다.
Ÿ 로봇 하드웨어의 주 기능과 제원을 분석할 수 있다.
Ÿ 각 하드웨어 자원의 스펙과 특징에 의한 소프트웨어의 요구 사항을 도출할 수 있다.
Ÿ 도출된 소프트웨어의 주요 고려 사항을 가지고, 소프트웨어 개발 항목(신규 또는 변경 필요)을 나열할 수 있다.
Ÿ 로봇의 동작 환경에 대해서 극한적인 환경, 일반적인 환경, 기타 환경으로 분류할 수 있다.
Ÿ 환경적인 요소가 로봇에 미치는 영향을 분석할 수 있다.
Ÿ 각 환경적인 요소가 소프트웨어의 동작에 미치는 영향에 대한 고려 사항을 도출할 수 있다.

필요 지식 /

① 컴포넌트 기반 개발(CBD, component based development) 방법론

1. 컴포넌트
로봇 소프트웨어의 경우 센서나 액추에이터 제어, 경로 계획, 장애물 감지 및 회피 등과 같이 매우 복잡한 기능들로 이루어져 있기 때문에 하나의 소프트웨어로 개발하는 것은 매우 어렵고 시간이 오래 걸리는 일이다. 이러한 이유로 소프트웨어를 각 기능별로 나누어서 개발하는 컴포넌트 기반 개발 방법론이 주로 이용된다. 컴포넌트란 재사용 가능한 독립적인 소프트웨어 구성의 단위를 의미한다. 컴포넌트에 대한 정의는 다양하지만 간단하게 정리한다면 독립적으로 개발 가능하며 배포 가능한 어플리케이션 블록으로 정의할 수 있다.

 

컴포넌트에 있어 가장 중요한 개념은 인터페이스이다. 인터페이스에 의한 컴포넌트 개발자와 컴포넌트 사용자 간의 상호 작용이 결정되며, 인터페이스를 통해서만 접근이 허용될뿐 컴포넌트 내부는 엄격하게 은닉될 수 있기 때문이다. 로봇 소프트웨어의 경우 컴포넌트 기반 개발 방법론에 따라 각 기능들을 컴포넌트로 개발한 로봇 소프트웨어 아키텍처 또는 로봇 소프트웨어 프레임워크가 존재한다. 이러한 로봇 소프트웨어 아키텍처를 이용하는 경우 좀 더 쉬운 방법으로 로봇 시스템을 개발할 수 있다. 로봇 소프트웨어 아키텍처에 대해서는 3장을 참조한다.

 

2. 인터페이스
인터페이스란 컴포넌트가 수행할 하나 이상의 오퍼레이션의 집합이다. 인터페이스는 안정적이여야 하며 변화되지 않아야 한다. 하나의 컴포넌트는 하나 이상의 인터페이스를 가질 수 있으며 인터페이스별로 서로 다른 컴포넌트의 관점을 표현할 수 있다. 인터페이스는 여러 가지 장점을 갖는다. 인터페이스만 유지된다면 컴포넌트의 구현은 얼마든지 새로운 비즈니스 개념에 따라 바뀌어 질 수 있기 때문이다. 또 인터페이스만 결정이 되면 각각의 컴포넌트 개발은 완벽하게 병행 작업으로 이루어질 수 있게 된다. 컴포넌트는 인터페이스를 통해서만 상호 작용하므로 컴포넌트의 내부 구현을 알 필요도 알 수도 없기 때문이다. 또 인터페이스만 공유된다면 구현 언어를 자유롭게 선택할 수 있다.

 

3. 컴포넌트 기반 개발
컴포넌트 기반 개발 방법론은 [그림 1-1]과 같이 컴포넌트 개발과 컴포넌트 기반 소프트웨어 개발로 나눈다. 컴포넌트 개발은 전체 소프트웨어를 만드는 것이 아니라 개발하고자 하는 소프트웨어에 들어가는 서브프로그램을 개별로 만드는 것이다. [그림 1-1]의 상단 부분에 해당하는 것이 컴포넌트 개발에 필요한 일련의 업무들이다. 소프트웨어 컴포넌트는 각 비즈니스 컴포넌트가 운영될 수 있는 기반 아키텍처를 제공해야 하므로 해당 도메인에 대한 이해와 함께 기술 아키텍처에 대한 이해도 선행되어야 한다. 비즈니스 컴포넌트는 한 번만 사용될 목적으로 만드는 것이 아니라 다양한 소프트웨어 개발에 여러 번 재사용될 목적으로 만들어야 하기 때문에 해당 도메인에 대한 분석이 매우 중요하다.
컴포넌트 기반 소프트웨어 개발은 개발된 컴포넌트들을 조립하여 특정 소프트웨어를 개발 하는 것을 말한다. 소프트웨어 개발에 있어서 가능한 부품 단위로 만들어서 개발하거나 혹은 이미 잘 개발되어진 부품들을 구매하여서 이러한 부품들을 조립하여 소프트웨어를 개발하자는 것이다. [그림 1-1]의 하단 부분이 컴포넌트 기반 소프트웨어 개발에 해당한다.

[그림 1-1] 컴포넌트 기반 소프트웨어 개발 방법론의 절차

② 소프트웨어 요구 사항 분석

요구 사항 분석은 소프트웨어 개발의 실제적인 첫 단계로 사용자의 요구에 대하여 이해하는 단계라 할 수 있다. 소프트웨어 개발은 기본적으로 광범위한 문제의 해결이라 할 수 있다. 문제를 해결하기 위해서는 먼저 사용자의 요구(requirement)를 이해하는 단계가 있어야 한다. 요구 사항의 성격과 범위를 이해해야 하며 문제 해결에 있어서의 제약 사항을 알아야 한다.
요구 사항 분석은 두 가지 단계로 구성된다. 현재의 상태를 파악하고 요구 사항을 정의한 후 문제 해결과 구현될 시스템의 목표를 명확히 도출한다. 이를 분석 단계라고 한다. 다음 단계는 명세서 작성 과정이다. 명세서에는 기술적 요구와 구현에 있어서 제약 조건 및 개발자와 사용자가 합의한 성능에 관한 사항도 명시되어야 한다. 명세서는 시스템 설계에서 참조될 사항을 포함하여 구현될 시스템에 대하여 전반적으로 알아야 할 사항을 포함하는 문서이다.

 

소프트웨어 요구 사항의 분석은 [그림 1-2]와 같이 4단계로 나눌 수 있다.

첫째, 요구 사항 추출은 소프트웨어 개발 계획 단계에서 정의한 문제의 범위 안에 있는 사용자의 요구를 찾는 일이다. 시스템의 중요한 목적을 만족시키기 위하여 시스템이 제공해야 할 사항을 찾는 것이라 할 수 있다. 특히 시스템이 제공하여야 할 기능적인 요구와 기능 이외의 조건들, 예를 들어 성능, 품질, 안전, 보안, 인터페이스 요구를 찾는다.

둘째, 도메인 분석은 문제 영역 안에 있는 중요한 사항들을 인식하기 위하여 정보를 수집하고 배경을 분석하는 단계이다. 인식되어야 할 중요한 기능이란 사용자의 요구와 관련된 객체(object), 관계(relation), 기능(function), 프로세스(process), 제약(constraints) 등이다. 도메인 분석은 사용자와의 인터뷰, 설문 조사, 실사 등을 통하여 현황을 파악하고 새로운 시스템에 대한 요구를 모델링하기 위한 것이다.

셋째, 모델링은 도메인 분석을 통하여 찾아낸 중요한 개념, 특성, 관계에 대하여 개념화하는 작업이다. 주로 응용문제에 대한 정보를 수집하여 분석하고 이를 다이어그램을 이용하여 모델화하는 작업이라 할 수 있다.
넷째, 프로토타이핑과 시험은 분석된 기능적 요구의 타당성을 시험하기 위하여 프로토타입을 간단하게 만들어 본다. 이러한 결과를 걸쳐 소프트웨어 요구 분석서(software requirement specification)를 작성한다. 요구 분석서에는 시스템의 기능, 성능, 정보 표현, 제약, 검증 평가 기준에 대하여 기술하고 검토한다.

[그림 1-2] 요구 사항 분석 과정

③ 소프트웨어 요구 추출

1. 소프트웨어 요구의 정의
소프트웨어 요구 사항(requirement)이란 시스템이 제공하여야 할 역량(capability)으로 정의 할 수 있다. 소프트웨어 프로젝트는 시스템이 요구를 만족하고, 비용이 초과되지 않으며 일정 시간 내에 인도된다면 성공하였다고 본다. 따라서 진정한 요구를 찾는 일은 소프트웨어 프로젝트 성공을 위한 필수 조건이다. 요구 사항이란 시스템이 외형적으로 나타내는 기능이나 성능 등의 동작을 말한다. 예를들어 모바일 로봇의 외형적 기능은 장애물 감지 기능이나 계단 등을 올라갈 수 있는 주행기능 등이 될 수 있다. 모바일 로봇의 성능에 관한 기능의 경우 빠른 경로 탐색, 빠른 장애물 회피 등이 될 수 있다. 요구 사항의 종류에는 기능적 요구 사항과 비기능적 요구 사항으로 나눌 수 있다.


(1) 기능적(functional) 요구 사항
기능 요구 사항은 시스템과 외부 요소들 간의 인터랙션이라 할 수 있다. 기능적 요구를 결정하려면 시스템이 어떤 상태일 때 외부의 명령을 받아들여 어떤 반응을 하는지 기술하여야 한다. 예를 들어 모바일 로봇에서 장애물을 만나면 장애물을 감지하는 방법, 장애물을 회피하여 특정 목적지로 가기 위한 방법, 로봇의 위치를 알기 위한 방법 등이다.

(2) 비기능적(non-functional) 요구 사항
시스템이 수행하는 기능 이외의 사항, 즉 시스템 구축에 대한 성능, 보안, 품질, 안전등에 대한 요구 사항들을 비기능적 요구라 한다. 예를 들어 1초 안에 경로를 탐색해야 한다거나, 로봇을 급정지시킬 수 있는 버튼이 있어야 한다거나, 원격으로 로봇의 경로를 보여줄 수 있어야 한다거나 등이다.

 

2. 요구 사항 추출
요구 추출(requirement elicitation)이란 사용자가 무엇을 원하는지 결정을 내리는 작업으로서 여러 가지 기법이 동원된다. 현재 판매되고 있는 로봇 시스템이 있다면 요구를 추출하는 작업은 비교적 수월하다. 그러나 아직 존재하지 않아 문제에 대한 해법을 생각해 보지도 않은 경우 사용자와 함께 아이디어와 해결책을 찾는 것이 어려울 수 있다. 요구를 추출하기 위하여 다음 세 가지 단계의 작업이 필요하다.


(1) 시스템에 대한 정보 출처 파악
요구 사항을 추출하기 위해서는 정보를 모으는 일부터 시작해야 한다. 다양한 형태의 정보원이 존재하며, 어떤 정보원으로부터 정보를 파악할 것인지를 결정해야 한다. 이러한 정보원에는 정부나 전문 기관의 법령이나 표준, 정부나 정부 산하 기관에서 발표되는 각종 정책이나 통계, 특허청에 등록된 특허, 전문 기관 등에서 출판되는 동향 분석 보고서나 시장 분석 보고서, 학술 기관 등에서 출판되는 논문과 세미나 자료, 전문가들의 의견이 들어 있는 인터넷 정보, 책과 같은 각종 출판물, 신문이나 방송의 각종 보도 자료 등이 있다.

비전공자나 도메인에 경험이 없는자가 시스템의 사양이나 정보를 구글링 한다는 것이 아직도 이해가 되지 않는다. 임베디드쪽 분야는 이 부분이 개선되어야 할 것이다.구글링 하여 얻은 정보가 얼마나 신뢰할 수 있을지 의문이 든다. 매년 개발로 인해 시스템의 매우 빠르게 변화하고 있기 때문이다. 시스템 담당자로부터 관련된 문서들과 인터뷰들이 필요하며 그에 관련된 도메인 교육이 수반되어야 한다! 

 

(2) 요구 사항에 대한 정보 수집
요구 사항에 대한 정보를 모으는 방법에는 여러 가지가 있다. 고객이나 사용자의 발표를 직접 듣거나 인터뷰를 하는 방법, 문헌이나 인터넷 등을 직접 조사하는 방법, 설문지를 이용해 관련자나 전문가들의 의견을 취합하는 방법, 엔지니어들 간의 브레인스토밍 회의를 통해 요구 사항을 이끌어 내는 방법, 사용 사례를 찾아서 작성해 보는 방법
등이 있다.

 

(3) 요구 사항과 제한 사항의 정의
시스템의 요구란 주로 시스템이 수행하여야 하는 기능적 요구 사항과 비기능적 요구사항, 성능적 요구 사항을 찾아내는 것이다. 이러한 요구들은 개발될 시스템의 기능이나 성능을 구체적으로 나타내게 된다.