2017년 4월 11일 화요일

소프트웨어 개발자가 준비해야 하는 미래

지금까지도 소프트웨어 개발자가 되기 위한 준비를 위해 C++이나 Java와 같은 프로그래밍 언어를 배우고자 하는 사람들이 많다. 많은 SI 프로젝트가 요구하는 대용량 처리 시스템과 모바일 발달로 인한 다양한 앱들은 개발자들을 코딩하는 기술자로 내몰고 있는 것이 사실이기 때문이다. 하지만 제4차 산업혁명의 등장으로 다양한 산업 분야에서 소프트웨어 개발자를 찾고 있고 개발자에게 코딩 이외에 다양한 아이디어를 요구하고 있다. 두산중공업의 이빈 팀장, 현대파워텍의 이윤희 팀장, 로만소프트의 이철승 대표, 그리고 김규억 박사와 함께 이러한 현상을 주목하며 이야기를 나눠본다.

Q: 안녕하세요. 참석자들이 소프트웨어와 조금 거리가 있을 제조업이나 디자인 쪽입니다. 이렇게 모인 이유에 대해 얘기해보죠.

소프트웨어 개발이 아주 과거에는 특정한 사람들의 전유물이었습니다. 가만히 앉아서 코딩의 신이라는 소리를 들어야 최고가 됐구나 생각했지요. 그러다가 웹 환경이 나타나면서 개발자들에게는 Java 언어가 익숙한 언어가 됐고 너도나도 소프트웨어 개발에 많이 편입을 하게 되었습니다. 숫자로 보면 눈에 띄게 늘어난 것이 사실입니다.

<그림1> 소프트웨어 개발 환경 변화

출처: 오픈소스컨설팅

이러한 개발 환경은 시스템의 전체 큰 그림을 잘 그려놓고 세부적으로 잘 연결되어 움직이도록 하는 Big Picture형 개발자가 필요했습니다. 단순히 개발만 잘하는 사람이 아니라 어떻게 하면 시스템이 효율적이고 문제없이 돌아가게 하는지를 고민해서 개발하는 것이지요.
그러다 모바일이 나오면서 소프트웨어 크기가 전체적으로 작아지기 시작했습니다. 가급적이면 크게, 더 크게 만들던 시스템에서 손에서 동작하는 소프트웨어로 변화하기 시작한 것이죠. 작은 모바일 안에서 어떻게 하면 더 작고 효율적인 소프트웨어를 만들까 하고 고민하기 시작했습니다. 이러한 고민은 사용자를 더 만족스럽게 해주기 위해 더 보기 좋고 빠르게 동작하고 원하는 기능이 딱 들어있는 소프트웨어가 만들어지도록 했다는 것이죠. 이 때까지는 일반적으로 알려진 소프트웨어만 생각하기 때문에 기존의 소프트웨어 개발자가 더 고민할 것은 많지 않았습니다.

<그림2> 시대별 기술 변화
출처: 조대협 - 소프트웨어 개발 트렌드의 변화

그런데 지금은 단순히 운영 시스템 정도만 요구하던 산업에서 소프트웨어 개발자를 채용하고 있습니다. 이유가 뭘까요? 소프트웨어 개발 회사에 의뢰하던 수준을 넘어 자신들에게 딱 맞는 소프트웨어가 필요해졌다는 것입니다. 우리가 모인 이유도 새로운 소프트웨어의 세계를 얘기해 보기 위해서 입니다.

인간을 대체하는 ICT 기술에 대한 동향

최근에 인공지능에 대한 관심이나 기술들이 많이 소개되고 있고 이를 활용한 비즈니스들이 앞다투어 발표되고 있다. 과거의 영화나 미디어에서 전달되던 것과 같이 인간이 해야할 일을 기계가 대신하는 시대가 곧 도래할 것처럼 보인다. 이번 회에서는 기계가 인간을 대체할 수 있게 해주는 ICT 기술이 어떤 것이 있는지 살펴보기로 한다.
인간 대 기술
마이크로소프트의 빌 게이츠나 미래 학자인 거드 레너드는 지금까지 나타난 기술의 발전보다 앞으로 30~50년 동안 발전할 기술이 더 많다라고 주장한다. 그동안 인간은 쉼없이 새로운 기술을 만들면서 다양한 혁신을 이루었지만 인공지능이나 유전자 기술 등과 같이 인간들에게 직접적으로 영향을 미치는 기술들은 인간의 삶에 큰 영향을 미칠 것으로 예상되고 있다. 이와 같이 앞으로 발전될 기술들은 이전의 기술들과는 사뭇 다르게 인간의 삶을 질적으로 바꾸어주는 역할을 할 것으로 보인다. 이러한 것을 트랜스휴머니즘(transhumanism)이라고 부르는데 사람이 기술로 세상을 바꾸는 것이 아니라 기술이 인간의 삶을 바꾼다는 것을 말한다.
인공지능 전문가인 제리 캐플런은 인공지능과 로봇의 발달을 제2차 산업혁명의 공장화나 자동화와 유사하다고 보고있다. 근로자들을 기계가 대체하는 것과 인공지능을 갖춘 로봇들이 일자리를 대체하는 것은 자연스러운 일이고 로봇의 일자리가 단순 노동에 그치지 않고 지적인 부분까지 확대된다고 한다. 로봇이 숙련된 근로자와 교육받은 사람들의 일까지 대신하는 것이고 기술 혁신은 단순히 근로자의 일자리를 대신하는 것에 그치지 않고 직종 자체를 소멸시킬 수도 있는 것이다.
더구나 인공지능의 발달로 사람, 사물, 공간을 초월하여 연결하고 인간의 지능을 초월하여 생각하는 산업의 구조와 시스템이 혁신되는 제4차 산업혁명의 등장은 인간의 자리를 점점 더 대체할 것으로 보인다. 즉 인공지능의 발달이 인간을 대체할 수 있는 기계의 발달을 이끌어 온다고 볼 수 있다.

<그림1> 산업혁명의 핵심 요소


인공지능의 발달
위키피디아에 의하면 인공지능(AI; Artificial Intelligence)은 기계로부터 만들어진 지능을 말한다. 컴퓨터 공학에서 이상적인 지능을 갖춘 존재, 혹은 시스템에 의해 만들어진 지능을 뜻한다. 이미 1980년대에 인공지능의 목표에 대해 정의가 되었는데 인간과 같은 사고를 하고 행동을 한다는 이론이 성립되었고 이러한 이론이 1990년를 넘어가며 시스템으로 정의하려는 노력이 이루어지고 있다. 이러한 목표는 인공지능이 인간과 유사한 생각을 하고 그에 따른 행동이 이루어지도록 하기 위한 노력으로 볼 수 있다(그림2).

<그림2> 인공지능의 정의 및 목표
출처: 조영임 - 인공지능시스템

인간을 대체하기 위해서는 인간처럼 행동하기 위한 기술을 만들어야 한다. 인공지능은 인간을 닮아가기 위한 대표적인 기술이라고 할 수 있다. 처음에는 규칙과 논리적인 프로그래밍을 통해 간단한 로직을 구현했고 통계와 확률을 이용해 판단을 할 수 있는 기본적인 자료를 제공하였다. 이후 딥러닝을 통해 기계 스스로 학습하는 알고리즘이 등장했고 인간과 같이 학습에 기반한 자율적인 판단을 하게 되었다(그림3).

<그림3> 인공지능의 발달 과정
출처: 한국전자통신연구원

인공지능을 구성하는 3대 요소는 학습, 추론, 인식이며 사용자 인터페이스(HCI; Human Computer Interface)가 포함되어 인공지능 시스템이 구성된다. 일반화되어 있고 절차적인 알고리즘으로 판단이 가능한 분야보다는 제한된 정보만으로도 어떤 사안이나 상황을 판단할 수 있는 분야가 인공지능의 적용에 적합하다고 볼 수 있다.
해외 인공지능 기술 현황
중국은 13차 5개년 계획(‘16년 ~ ‘20년)을 통해 인간과 로봇의 상호 작용을 위한 플랫폼 확보 계획을 발표했으며 ‘18년까지 7,000억을 투입해 로봇 산업 단지를 조성할 계획이다. 중국어는 키보드보다 음성 인식이 더 효율적이기 때문에 음성 인식 활용이 다른 국가들보다 높은 편인데 바이두, 알리바바, 텐센트 등이 인공지능에 적극적으로 투자하고 있다. 미국은 인공지능을 차세대 컴퓨팅 플랫폼으로 육성하려는 전략을 추진하고 있고 IBM, Alphabet, 마이크로소프트, 페이스북, 애플, 아마존 등 미국의 대표 글로벌 기업들은 인공지능을 기존 제품이나 서비스에 추가로 적용하고 있다. 로봇 강국인 일본은 인공지능을 로봇에 적용하는데 집중하고 있는데 생산 인력 부족과 생산성 향상을 위해 제조, 의료, 건설, 농업 등에 로봇을 적극 적용하는 로봇 新전략을 발표하였다. PatSnap에 의하면 인공지능 특허 출원이 미국 > 중국 > 일본 > 우리나라 순으로 많다고 조사되었다.

2017년 4월 10일 월요일

소프트웨어공학 포털 웹진 기사 왕중왕전




ISO26262 : 자동차 분야 국제 표준

ISO26262 는 IEC61508 을 바탕으로 자동차 분야의 적용을 위해 2011 년 11 월에 발표된 표준이다. 자동차 ECU 의 오작동으로 인한 사고 및 인명손실을 최소화 하는 것이 목적이다.

ISO26262 는 명세, 설계, 구현, 통합, 검증, 인증에 이르는 개발 전 단계에서 최신 개발 방법 및 테스트 방법을 적용하도록 하고 있으며 기능안전 규격을 준수하기 위한 각 단계에서의 요구사항을 정의한다.

세부적으로는 시스템 레벨, 하드웨어 레벨, 소프트웨어 레벨에서 각 요구사항들이 정의되어 있다. 이는 제품 개념 단계에서부터 폐기까지 전 수명주기에 걸쳐서 전자장치의 고장으로 인한 자동차의 안전성을 저해할 수 있는 위험을 체계적으로 분석하고 그 위험에 대처하는 수단이 효과적임을 보장해야 하는 것으로서 시스템공학, 하드웨어, 소프트웨어 공학, 신뢰성 공학 안전성 분석 및 프로세스 능력이 모두 요구된다.

그림. ISO26262의 구성 

Part1 Vocabulary 는 표준에서 사용되는 용어, 정의, 그리고 약어를 설명하고 있으며, 총 142 개의 용어 및 정의와 53 개의 약 어로 구성되어 있다.

Part2 Management of functional safety 는 기능안전 관리를 위한 요구사항을 정의한 파트로 기능안전에 관련된 개발활동을 계획, 조정, 그리고 추적하는 요건에 대해 기술하고 있다.

Part 3 Concept phase 는 아이템 정의를 기반으로 위험원 분석 및 리스크 평가를 통해 ASIL 수준을 판정하며, 안전 목표와 안전 메커니즘을 정의 하는 파트이다. ASIL 은 대상 시스템이 달성하고자 하는 기능 안전성의 수준을 나타내는 것으로 최저 등급인 ASIL A 부터 최고 등급인 ASIL D 총 4 개의 등급으로 구성되어 있다. ASIL 등급이 높다는 것은 해당 시스템이 사고가 날 경우 그 피해가 심각할 수 있다는 것을 의미한다.

Part4 Product development at the system level 은 제품 개발 단계 중 시스템 수준에서의 개발을 명시한다. 시스템 수준의 개발은 기본적으로 V 모델을 따른다.

Part5 Product development at the hardware level 은 하드웨어 수준의 제품 개발을 기술하며, 시스템 설계 명세를 기반으로 하여 시스템의 하드웨어 개발이 이루어진다. 이 또한 시스템 내부에서 다시 V 모델을 따르며 개발, 통합, 검증에 대한 요구사항을 포함한다.

Part6 Product development at the software level 은 소프트웨어 수준의 제품개발 또한 V 모델을 따르며 개발, 통합 검증에 대한 요구사항을 정의하고 있다.

Part7 Production and operation 은 제품의 생산, 운영, 서비스, 그리고 폐기를 위한 요구사항을 포함한다.

Part8 Supporting processes 는 안전 요구사항의 명세 및 경영, 형상관리, 변경 관리, 검증, 문서화, 소프트웨어 도구 사용에 대한 신뢰, 사용증명 논거/주장 등에 대한 요구 사항을 정의하고 있다.

Part9 Automotive Safety Integrity Level (ASIL) – oriented and safety-oriented analysis 는 ASIL 과 안전에 기반한 분석을 위한 요구사항을 기술하고 있다.

Part10 Guideline on IOS26262 는 주요 개념, 안전 케이스, ASIL 분해 등 ISO26262 의 이해에 도움이 되는 정보를 기술하고 있다.

IEC61508. 기능안전이 구현된 하드웨어에 대한 요구사항

IEC61508 에는 기능안전이 구현된 하드웨어에 대한 요구사항이 정의되어 있다. 안전 요구사항에 따라 하드웨어를 설계하고 구현하는 것과 이것들에 대한 계획, 검증, 구조적 제한, 결함방지능력, 시험, 수정시 영향분석을 정의하고 있다.

또한 하드웨어는 정량적인 신뢰성 예측(고장율)을 통해 안전무결성수준을 검증하게 되는데, 다음과 같이 신뢰성 예측기술과 안전무결성수준 검증 기술을 다루고 있다.


  • 안전 요구사항 정의, 설계, 검증(validation), 확증(verification), 구조상 제약사항, 결함방지능력(fault tolerance), 시험, 수정활동과 같은 수명주기활동 정의 
  • 설정된 안전무결성수준 목표치에 대비하여 정량적인 신뢰성 분석을 통한 평가(예측)의 필요성을 설명하고 신뢰성 예측 
  • 시스템적인 하드웨어 고장에 대비하기 위한 기술과 절차 
  • SIL 에 대한 구조상 제약사항(architectural constraint) 정의 


IEC61508 에는 소프트웨어를 설계하는데 요구되는 활동 및 설계기술의 요구사항도 정의되어 있다. 안전 시스템의 구성 중 소프트웨어 경우 실제 고장률을 측정한다는 불가능하므로 주로 시스템이 결합되는 하드웨어 및 시스템의 전체 고장률 또는 허용 가능한 범위의 고장률을 결정하여 목표하는 SIL(안전무결성)을 결정한 다음, IEC61508 에서 제시하는 단계별 요구사항을 따르도록 하고 있다. 즉 SW 에 대해서는 SIL 에 대한 달성정도를 증명하지 않고, 단계별 기술 요구사항에 따라 수행해야할 활동에 대한 증거를 확인함으로써 목표하는 SIL 을 달성되었다고 가정한다. 이는 소프트웨어의 경우 수명주기 접근 방법에 따라 필수적으로 수행해야 할 활동들에 의하여 결함이 각 수명주기마다 추가되는 가능성을 낮추거나 방지 가능하다는 것을 전제로 하고 있다.

  • 소프트웨어라는 특성상, 시스템적인 고장에 대해서 다루고 있으며 정량적인 신뢰성 예측은 포함되지 않는다. 
  • 소프트웨어 설계기술들에 대해 각 SIL 마다 적용가능성과 수행해야할 활동에 대해서 표로 제공하고 있다. 


IEC61508 은 목표안전 달성을 위하여 먼저, 어떤 안전기능을 추가할 것인가를 결정(안전기능 요구사항)하고 그 다음으로 정의한 안전기능의 달성 가능한 정도(안전기능의 성능 정도)를 안전무결성 수준(SIL: Safety Integrity Level)으로 결정하는 절차를 제시한다.

즉, 시스템 전체 안전기능 요구사항은 안전무결성 요구사항(SIL)과 함께 구성되어 각 하위 시스템의 요구사항으로 할당함으로써, 하위 시스템의 구조 또는 각 시스템의 기능들을 구현하는 기술 및 측정법을 결정하게 되는 것이다. 안전 기능요구사항과 안전무결성 요구사항을 시스템 설계측면에서 그 역할의 차이를 구별한다면, 안전 기능 요구사항은 시스템을 구성하는 서브시스템(Sub-system) 또는 컴퍼넌트의 생성에 영향을 미치고, 안전무결성 요구사항은 구조에 영향을 미치는 것이다. 안전무결성 요구사항에 의해 시스템의 구조가 결정이 되고, 시스템의 구조를 어떻게 정의하느냐에 따라서 SIL 즉, 고장확률 수준이 결정된다고 할 수 있다.

안전공학(Safety Engineering) 측면에서 리스크(Risk) 제로상태는 불가능 하므로 허용가능한 수준의 위험까지 리스크를 줄이도록 하는 리스크 평가 및 관리가 오히려 더 중요. 이 점을 고려하여 International Electronic Commitment(이하 IEC)는 완전무결한 시스템은 불가능함을 수용하고 허용 가능한 범위의 리스크에 대해 정의하였다.

즉 IEC61508 의 기능안전 요구사항은 시스템의 위험한 사건의 원인이 될 수 있는 위험원에 대응 하도록 예측 가능한 모든 위험을 제거하고 남은 허용 가능한 위험수준을 안전무결성 요구사항으로 정의하여 시스템의 SIL 을 정의하도록 한 것이다.

또한, IEC61508 은 다른 안전 표준들과 달리 단순한 안전 요구사항만을 제시하는 것이 아니라 위험 감소를 위한 정량적인 측정법을 이용하여 구현된 안전 기능이 달성되었음을 평가 및 검증단계와 결합되어 있다. 평가 및 검증은 정성적인 평가뿐만 아니라 고장률, 즉 확률적 고장률을 이용한 안전무결성수준(Safety Integrity Level, SIL) 에 대한 정의를 통해 정량적인 접근을 제공한다.

2017년 4월 7일 금요일

IEC61508에서 안전 기능 도출 과정 6 단계

IEC61508 에서 안전 기능 도출 과정은 6 단계로 이루어져 있으며, 시스템 개념 정의에서부터 출발하여 위험 분석을 통한 안전 요구사항을 도출하고, 최종적으로 안전 기능 요구사항을 도출하게 된다.

IEC61508 에서는 안전수명주기를 정의하고 이에 따른 활동, 절차, 기술을 정의하고 있는데 이들은 위험 검증과 무결성 수준(integrity level)을 만족하도록 설계하는데 필요한 것으로 위해요인(Hazard)분석을 통해 위험감소 대상을 식별하고 ISO9001 과 같이 조직, 프로세스, 인적자격요소 등이 식별된 위험을 감소시키기 위해 어떤 활동을 해야 하는지 이를 다루고 있다.

즉, 이 표준에서는 안전 수명주기의 사용으로 시스템의 모든 단계에 관한 시스템적인 상태에 적용되는 안전을 보증하는 것을 뒷받침하며 시스템적인 에러에 관해 가능성을 감소하려는 목적을 가진다. 안전 수명주기 동안 적용되는 시스템 안전 활동은 위험원을 증명, 리스크를 분석, 위험원을 감소 또는 소거하기 위한 설계를 사용하는 것을 지침을 제공하고 있는 것이다. IEC61508 은 전체 개발 단계에서 수행해야할 각 단계별 안전 활동에 대한 지침을 제공하고, 정량적·정성적 리스크 평가(Risk Assessment)법을 제시하고 있다.


그림. 안전기능 요구사항 도출과정


IEC 61508

1998 년 IEC 에서는 전기, 전자, 프로그램 가능한 전자시스템의 기능안전(Functional safety of electrical/ electronic/ programmable electronic safety-related systems) 표준으로 IEC61508 을 발표하였으며, 최근 국내외에서는 안전시스템의 복잡화로 인하여 의도된 기능 수행에 대한 확신을 마련하기 위하여 안전시스템의 관리 방법론으로 IEC61508 또는 그와 관련한 표준에 대해 주목하고 있다. 모든 종류의 산업에 적용 가능한 기본적인 기능 안전 표준이 될 의도로 작성되었다.

IEC61508 은 안전생명주기, 하드웨어, 소프트웨어 등 세 가지에 대한 안전성 구현 방법 및 검증 방법을 제시하고 있는데, 안전관련 시스템은 IEC61508 에서 정의된 안전수명주기에 따라 위험분석 및 평가, 안전무결성수준(SIL: Safety Integrity Level)을 설정하고, 하드웨어와 소프트웨어를 목표된 수준(SIL 수준)에 충족하도록 구현하며, 설치, 운영, 유지보수, 변경, 폐기까지 관리해야 한다.

표. IEC 61508 의 구성