www.hani.co.kr/h21

기사섹션 : 과학 등록 2003.12.10(수) 제488호

[과학] 소프트웨어를 믿으세요?

하드웨어의 진보 따르지 못하고 오작동 일쑤… 신뢰할 만한 프로그램을 개발하려는 움직임들

소프트웨어가 고장을 일으켜 컴퓨터가 다운되는 것은 별로 대수롭지도 않은 일상사가 되었다. 같은 공산품인 자동차에 비해서 소프트웨어의 고장에 우리는 매우 관대하다. 소프트웨어의 고장이 단순한 컴퓨터의 고장으로만 이어지지 않는 사회가 되어가고 있다. 앞으로 생활기구 중 컴퓨터와 연관이 없는 것은 매우 드물 것이다. 최근 인기몰이를 하고 있는 유비쿼터스(ubiquitous) 컴퓨팅은 자동차 에어백, 신호등, 의료기기, 항공관제, 전자화폐 등 거의 모든 물품에 계산기능을 넣는 것이다. 이들을 조작하는 모든 기기에 프로그래밍은 필수적인 핵심기술이 된다. 모든 생물체에 DNA로 구성된 유전자가 있듯이 앞으로 첨단기기는 그 하나하나가 프로그램이라는 유전자로 제어되는 새로운 형태의 생물체라고 볼 수 있을 것이다. 예를 들어 휴대전화, MP3 플레이어, 음향기기, 조리기구는 물론이거니와 도난방지용 전자칩에도 상당한 크기의 소프트웨어가 들어 있다.

소프트웨어 오류에서 비롯된 대형 사고들

컴퓨터 하드웨어 기술은 진보를 거듭해 해마다 2배씩 성능이 올라간다. 이에 비해 소프트웨어 기술은 답보를 거듭하고 있다. 어떤 사람은 소프트웨어 제조 기술은 오히려 퇴보하고 있다고 말하기도 한다. 소프트웨어 기술을 사회가 요구하는 정도에 비해서 이것을 안정적으로 개발할 인력과 시간이 크게 부족하기 때문이다. 또한 사람의 인식능력의 한계에서도 원인을 찾을 수 있다. 윈도XP만 해도 약 45만 라인의 프로그램으로 이루어져 있는데, 여기에는 아직 완전히 바로잡지 못한 수많은 오류가 숨어 있다. 30년 전에 판매된 자동차보다 지금의 자동차가 훨씬 더 안전하다. 하지만 소프트웨어는 30년 전의 소프트웨어에 비해 덩치만 커졌을 뿐이지 안전성면에서는 거의 개선되지 않았다.

그동안 소프트웨어의 오류로 인해 발생한 사고는 이루 헤아릴 수 없을 정도로 많다. 미 항공우주국(NASA)의 화성탐사선이 실종된 일, 런던에서 응급환자 이송 관리 시스템이 고장나서 거의 30명이 희생된 적도 있다. 그리고 군대 내에서의 자동 무기체제 관리 소프트웨어의 고장으로 생긴 희생자는 밖으로 보고조차 되지 않고 있다. 미국에서만도 이런 군용 프로그램의 오류로 해마다 수명씩 희생된다. 가장 악명 높은 소프트웨어 사고는 1985~87년에 캐나다 정부 공인 업체에서 만든 컴퓨터 방사선 치료기에 의한 사고라고 할 수 있다. 이 기기에 장치된 소프트웨어의 오류로 환자들이 과도하게 주사된 방사선에 노출돼 사망했다. 주된 원인은 프로그램이 정상인에게 주사되어서는 안 되는 방사선의 세기를 미리 차단하지 못해 밖에서 입력되는 양 그대로 방사선을 주사한 것에 있었다. 방사선 기사의 사소한 실수가 걸러지지 않고 그대로 통과된 것이다. 예를 들어 10을 입력해야 하는데 잘못하여 0을 한개 더 첨가해 100으로 입력한 경우, 최대 허용량이 40이라면 당연히 100은 수행되지 않아야 할 것이다. 최근 파나마에서도 이와 유사한 조작 프로그램의 오류로 8명이 사망했다.

소프트웨어 사고는 경제적으로 엄청난 소실을 끼치기도 했다. 버퍼 오버플로의 오류를 이용한 코드레드 바이러스는 ‘전자재앙’을 일으키고 있다. 버퍼 오버플로는 어떤 특정한 크기의 값을 받기로 정해진 프로그램에 매우 큰 크기의 자료를 보낼 때 일어나는 현상이다. 문제는 넘쳐난 데이터가 그냥 사라지지 않는다는 것이다. 다른 자료에 들어가 프로그램의 오작동을 일으키고 바이러스 프로그램이 침범하도록 유도하기도 한다. 조금만 주의를 기울여 넘쳐나는 데이터를 잘라서 버리도록 프로그래밍했다면 막을 수 있는 오류이다. 또 이메일을 이용해 전파되는 님다(Nimda) 바이러스도 MS의 이메일 프로그램인 아웃룩의 허술한 구조를 활용한 것이다. 만일 이런 사고로 인해 입은 엄청난 손실(대략 세계적으로 10억달러 정도의 정보기술(IT) 업계의 손실)의 책임을 묻는다면 허술하게 설계한 MS사도 책임을 면하기 어려울 것이다.

소프트웨어에 의한 사고는 일반적인 법률로는 판정이 거의 불가능하다. 즉, 그 일에 주된 책임이 소프트웨어의 설계자에게 있는지, 아니면 직접 코딩을 한 프로그래머에 있는지, 또는 오류를 미리 방지해야 한다는 사실을 고지하지 못한 개발 의뢰자인 구매인에게 있는지 판정하는 게 지금의 법률체계로는 판단하기 어려운 것이다. 소프트웨어는 복잡하다. 그래서 소프트웨어는 기존의 형체를 가지는 전화기나 자동차와 같은 공산품과는 매우 다른 특성이 있다. 예컨대 보통 한 사람이 직접 이해하고 관리할 수 있는 프로그램 코드의 길이는 5천 라인을 크게 넘지 못한다. 그리고 전문 프로그래머라고 해도 100라인마다 대략 10개의 에러를 만들어낸다. 따라서 프로그램의 크기와 그 안에 숨어 있는 버그의 개수는 거의 비례한다고 해도 틀린 말은 아니다.

한 가지 재미있는 일은 2001년 10월25일 윈도XP가 처음 발표되는 날, 동시에 발표된 XP의 오류를 보정하는 18메가 크기의 패치 파일이 바로 공지되었다. 문제는 위의 예처럼 소프트웨어 회사에서 오류가 완전히 없다는 확신이 들 때만 제품으로 출시하진 않는다는 것이다. 그렇게 했다가는 아마 동종업체들간 경쟁에서 살아남지 못할 것이다. 따라서 소프트웨어 출시 전에 이미 알려진 오류를 ‘출시 뒤 패치 파일로 바로 고칠 수 있는 오류’ ‘거의 고칠 수 없다고 믿어지지만 사용자들이 간파하기 어려운 오류’ 등으로 분류해 적절한 선에서 타협하는 것이다. 혹자는 버전1로 나온 소프트웨어는 절대 구입하지 않는 것이 최선이라고 주장하는 사람도 있다. 이런 믿음을 현혹하기 위해 어떤 소프트웨어는 제1판은 없이 바로 제2판부터 시작하기도 한다. 예를 들어 한때 이름을 날린 PC용 데이터베이스인 dbase 프로그램은 dbaseII부터 시작했다.

소프트웨어 개발을 소프웨어에 맡긴다

신뢰성 있는 소프트웨어를 만들기 위한 과학자들의 노력도 대단하다. 한 가지 방식은 아예 처음부터 사용하는 프로그래밍 언어가 최대한 오류를 적게 만들도록 강제하는 것이다. 또 다른 접근으로는 컴포넌트(component) 기반의 프로그램을 구성하는 것이다. 컴포넌트 프로그램이란 자동차 부품처럼 이미 성능과 안전성이 보장된 프로그램을 기반으로 여기에 약간의 조작을 가해 원하는 안정된 프로그램을 만들어내려는 것이다. 가장 최근의 접근방법은 소프트웨어를 만드는 일 자체를 소프트웨어에게 시키자는 것이 있다. 미국 인텐셔널 소프트웨어가 제안하는 이 방법은 거대한 프로펠러를 기술자가 선반으로 깎아서 만들지 않듯이 거대한 프로그램도 오류투성이인 인간보다는 기계가 하도록 하는 것이 더 안전하다는 것이다. 이에 따르면 프로그래머는 자신의 의도를 매우 간단하고 간결한 형식으로 컴퓨터(프로그램을 짜는 프로그램)에 알려주기만 하면 된다. 흐름도나 개요 그림으로 전체 일을 설명하는 식으로 적으면 나머지는 자동 프로그래밍 시스템이 의도에 맞도록 프로그램을 만들어내는 식이다.

소프트웨어가 자체적으로 진화하도록 하는 연구도 이뤄지고 있다. IBM 오토매틱 프로그램(automatic-program) 책임자인 스티브 화이트는 스스로 오류를 고칠 수 있는 소프트웨어를 설계하려고 한다. 지금의 윈도XP는 이런 기능을 약간 가지고 있다. 즉, 프로그램을 설치할 때 이전의 내용을 저장해서 새로 설치된 내용이 문제가 있으면 이전의 자료를 자동으로 복구해 스스로를 살려놓는 보호장치가 있다. 아직 완성된 프로그램이 나온 것은 아니지만 문제가 되는 소프트웨어의 기능을 스스로 꺼두는 정도의 기능을 가진 소프트웨어는 선을 보이고 있다.

조환규 | 부산대 교수 · 컴퓨터과학



http://www.hani.co.kr/section-021021000/2003/12/021021000200312100488043.html



The Hankyoreh Plus copyright(c) webmaster@news.hani.co.kr