높은 빌딩을 건설할 때에도 공사를 시작하기 전에 실제 크기를 몇 백분의 일로 축소시킨 모형을 만들어서 여러 분야의 전문가들이 검토한다. 혹시 어떤 문제나 숨겨져 있는 위험요소가 있지는 않은가 여려 사람들이 의견을 교환하는데 이 모형은 매우 유용하게 쓰인다. 이러한 방법을 시뮬레이션이라고 부른다.

시뮬레이션은 실제의 상황을 축소한 모형으로 실험하는 것이라고 할 수 있다. 시뮬레이션으로 모형에 대한 실험을 함으로써 비용을 절약할 수 있으며, 시간도 줄일 수 있다. 또한 효율적으로 제품을 만들 수 있다. 그러므로 시뮬레이션은 실제로 생산될 제품에 대한 완성도를 높이는데 목적이 있다고 할 수 있다. 비행기의 시뮬레이션의 과정에서 보듯이 날아 다니는 물체에 대한 요구 사항을 해결하기 위하여 비행기를 모델화 했다. 이 비행기는 요구 사항을 반영한 모형이며 실제로 날아 다닐 수 있는지 확인하여 문제가 있다면 해결하는 과정을 반복하여 최종적으로 비행기를 생산할 수 있다.

소프트웨어 분야의 시뮬레이션은 문제의 해결을 위한 모델을 소프트웨어로 개발하기 전에 다른 문제가 있는지 확인하는 과정이다. 비행기의 부품이 잘못되어 추락하게 되면 재앙이 되듯이 소프트웨어에도 잘못 만들어진 프로그램이 포함돼 있으면 엉뚱한 결과를 초래하게 될 것이다. 이렇게 잘못 작성되어서 프로그램에서 오류를 일으키는 부분을 버그 혹은 결점이라고 부른다. 지금의 컴퓨터는 첨단 반도체 기술 덕분에 작은 상자 안에 들어갈 정도로 소형화 되어 있다. 그러나, 초창기 컴퓨터는 진공관과 릴레이 라는 전자장치를 전선으로 연결해 만들었다. 부피는 웬만한 집채 보다 크고 무게도 수 십 톤에 달했다. 이 컴퓨터에 프로그램을 입력하려면 수 십 명의 공학자가 일일이 장치에 전선을 연결해 주어야 했다. 만약에 오류라도 발견돼서 프로그램을 변경하려면 장치에 연결된 전선을 바꿔서 다시 연결해야 했다. 따라서, 이 컴퓨터 한 대를 제대로 쓰려면 수 십 명의 공학자가 필요했다. 그런데, 이런 오류가 계속 발생해서 수정해야 한다면, 어땠을까? 수 많은 사람의 고생은 물론이고 이에 따라 발생하는 비용과 시간 낭비도 엄청났을 것이다. 그래서 여러 사람의 수고와 비용을 절약하기 위해 프로그램을 입력하기 전에 미리 확인하는 작업이 필요했다.

이후 기술 발달에 따라 공학자가 직접 전자회로를 조작하는 방식은 지금과 같은 내장형 프로그램 방식으로 바뀌게 되었다. 이 방식에서는 컴퓨터가 수행할 수 있는 명령어를 미리 내부에 저장해놓고 필요할 때마다 불러 쓸 수 있도록 함으로써 컴퓨터의 능력을 획기적으로 향상시켰다. 알다시피 현재의 컴퓨터는 엄청난 속도로 발전을 거듭하면서 활용 범위도 넓어져서 거의 모든 분야에 활용되고 있다. 공장에서 제품을 만드는 로봇이나 우주선 발사와 비행기 조종, 그리고 의료기기에 이르기 까지 각종 장치를 제어하는데 필수적으로 컴퓨터가 사용된다. 이런 컴퓨터에서 동작하는 프로그램에 오류가 있다면 그 결과는 거의 재앙일 것이다. 따라서 소프트웨어를 만들 때에는 결과물을 검사해서 제대로 진행되고 있는지를 시뮬레이션 및 테스트를 통하여 확인하게 된다.

만들어진 모델을 시뮬레이션을 통하여 검증 및 확인하고 문제가 없다면 구체화 과정인 소프트웨어를 개발 즉 코딩을 진행하게 된다. 모델 구현 과정에서 여러 가지 미쳐 생각하지 못한 다양한 사례를 시뮬레이션 함으로써 우리가 만든 모형과 알고리즘의 논리가 정확한지 검증할 수 있다. 소프트웨어 개발 시에도 사람의 오류가 있을 수 있기 때문에 최종적으로 만들어진 소프트웨어는 테스트를 통하여 다시 검증하게 되는데 이것을 소프트웨어 테스트라고 한다.

그림에서 보면 소프트웨어 개발 과정에서 문제 발생시 해결하는 방법은 3가지가 있다. ①과 같이 시뮬레이션을 통하여 모델링의 문제를 파악한다면 해결안 모델링만 다시 하면 되므로 시간과 노력을 많이 줄일 수 있을 것이다. ②과 같이 모델의 논리는 맞지만 단순히 소프트웨어 코딩이 잘 못 되었다면 소프트웨어 개발만 다시 하면 된다. 그러나 ③번과 같이 미처 모델의 문제를 파악하지 못하여 소프트웨어 개발 후에 테스트로 문제가 있음을 발견했다면 새롭게 해결안 모델링을 해야 하기 때문에 해결안 모델링, 시뮬레이션, 소프트웨어 개발, 테스트의 4가지 단계를 다시 수행해야 하므로 많은 시간과 노력을 다시 들여야 할 것이다. 그러므로 ③의 사례가 발생하지 않도록 개발된 모델은 충분한 시뮬레이션을 통하여 검증되어야 한다.

채성수 chaesungsoo@iabacus.co.kr 소프트웨어 개발 전문기업 ㈜ 애버커스 사업총괄 부사장. 엘지전자와 엘지씨엔에스(LG CNS)에서 다년간 컴퓨터 관련 사업을 추진한 전문가이다. 국가 공인 최고 자격인 정보관리기술사로 성균관대 및 서강대에서 컴퓨터 관련 연구를 수행했으며 소프트웨어 공학, 컴퓨터적 사고에 대해서 관심을 갖고 다양한 활동을 하고 있다.

(*이 칼럼은 Nextdaily의 편집방향과 다를 수 있습니다.)

관련기사

저작권자 © 넥스트데일리 무단전재 및 재배포 금지