Software Definition — 소프트웨어 정의 및 이해

소프트웨어 없이 동작하는 시스템은 거의 없다. 금융, 의료, 항공, 자동차, 스마트폰까지 거의 모든 산업에 소프트웨어가 핵심적인 역할을 담당하고 있다. 그런데 소프트웨어란 정확히 무엇이며, 왜 체계적인 공학적 접근이 필요한 것인가.

소프트웨어의 정의

프로그램과 소프트웨어

  • 프로그램(Program): 컴퓨터에 어떤 일을 처리할 순서와 방법을 지시하는 명령어들의 집합이다. 프로그래밍한 원시 코드(source code)이다.
  • 소프트웨어(Software, SW): 프로그램(코드)을 비롯해 개발 과정에서 생성되는 모든 산출물과 각 단계에서 만들어지는 문서와 사용자 매뉴얼 등을 포함한다.

소프트웨어 = 프로그램 + 각종 문서들 및 사용자 매뉴얼

구분 프로그램 소프트웨어
목적 개인적인 문제 해결 일반적인 목적의 문제 해결
규모 단순한/단일한 작업/과제 복잡한 작업/과제
참여 인원 적은 인원 다수의 팀 멤버
언어 한 가지 언어 여러 언어/패키지
크기 작음
문서화 적음 상세한 문서화

소프트웨어의 활용 및 종류

소프트웨어는 기능에 따라 크게 시스템 소프트웨어(System Software)응용 소프트웨어(Application Software)로 구분한다.

  • 시스템 소프트웨어: 운영체제(OS, Operating System)와 같이 컴퓨터 하드웨어를 관리하고 동작시키는 일을 하는 소프트웨어이다. 예: Windows, macOS, Linux
  • 응용 소프트웨어: 하드웨어를 제어할 권한은 없고, 운영 체제 위에서 컴퓨터 사용자가 원하는 작업을 할 수 있도록 만든 소프트웨어이다. 특정 목적에 따른 업무를 처리하기 위한 경우가 많다. 예: 워드 프로세서, 엑셀, 파워포인트, 데이터베이스, 웹브라우저
  • 앱(App): 스마트폰이나 태블릿 PC에서 실행하는 응용(애플리케이션) 소프트웨어이다

소프트웨어 결함

화성 기후 관측 위성(MCO) 결함 사례

MCO(Mars Climate Orbiter) 위성은 화성의 대기 탐사를 목적으로 1998년에 개발되었다. 화성 궤도에 진입하는 과정에서 통신이 두절되었다.

MCO 위성 궤적

결함 분석 결과, 위성 속도 변화 계산 프로그램(SM_FORCE)에 사용된 ΔV 변수가 정상 값보다 4.45배 작게 계산된 것을 발견했다. 원인은 단위 불일치였다:

  • MCO 추력 데이터의 단위: 국제 표준 단위인 1(N·s) 사용 명세
  • SM_FORCE 프로그램: 미국식인 4.45(lb·s)를 사용

단위가 달라서 발생한 결함이다. 이처럼 사소한 불일치가 수억 달러짜리 프로젝트를 실패로 이끌 수 있다.

보잉 737 MAX8 추락 사례

승객 탑승 공간을 확장하기 위해 기존 보잉 737 기종 형상을 변경하고, 기체 변동으로 인한 엔진 위치를 변경하였으나 기존 소프트웨어 변경 없이 재사용하였다. MCAS(Maneuvering Characteristics Augmentation System)를 설치하여 자세 제어를 하도록 하였으나, 2018년 자카르타에서 출발한 아이언 에어 610편이 이륙 12분만에 자바 해변 추락으로 189명이 사망했다.

MCAS에 입력되는 노즈 센서 값의 오류로 노즈가 하강하였고, 조종사의 수동 조작 거부로 인한 자세 제어가 불가하였다. 위급 상황에서 조종사로의 제어 인양 기능이 부재한 것이 핵심 원인이었다.

해킹 vs 소프트웨어 결함 vs 결함 비용

  • 해킹(Hacking): 해커로부터의 외부 간섭을 가리키는 데 사용한다. 시스템 관리자의 동의나 허가 없이 해당 서비스의 내용이나 작동 방식을 변경하는 것을 지칭한다.
  • 소프트웨어 결함(Bug): 소프트웨어 내부에 존재하는 의도되지 않은 불규칙성이다. 개발 프로세스(요구 분석, 개발 등) 내부의 부적절함으로 인한 불규칙성, 프로그래밍 언어/플랫폼/서비스 자체의 버전 업데이트로 인한 불규칙성이 원인이다.
  • 소프트웨어 결함 비용: 소프트웨어 결함으로 인한 비용(해킹 포함), 레거시 프로그램을 유지하기 위한 비용, 중단된 프로젝트에 투입 되었던 비용을 포함한다.

소프트웨어 결함 비용

미국 내 소프트웨어 결함 비용은 GDP 대비 계속 증가하고 있다. 2002년에 600억 달러(GDP의 0.5%)에서 2020년에는 2.08조 달러(GDP의 9.95%)까지 증가했다. 참고로 2020년 한국 GDP는 1.56조 달러이다.

소프트웨어 결함 증가의 주요 원인

  • 소프트웨어 규모의 대형화 및 복잡도 증가에 따른 개발 비용 증대
  • 소프트웨어 유지보수의 어려움과 개발 정체 현상 발생
  • 소프트웨어 개발 프로젝트 기간 및 소요 예산에 대한 정확한 예측의 어려움
  • 신기술에 대한 교육 및 훈련의 부족
  • 사용자의 소프트웨어에 대한 기대치 증가
  • 소프트웨어에 대한 사용자 요구사항의 빈번한 변경 및 반영

소프트웨어 개발의 어려움

대규모 소프트웨어를 개발하는 것은 대형 빌딩 짓기와 유사하다.

  1. 개발 과정이 복잡하다 — 무엇이든지 복잡하면 문제가 많이 발생할 수 있는데 소프트웨어 개발도 예외가 아니다. 개발의 복잡함을 줄이기 위한 방법과 기술이 필요하다.
  2. 참여 인력이 많다 — 인력이 많으면 의사소통 경로가 많아져 의사 결정 과정도 복잡하고 협력하기도 쉽지 않다. 중간에 이직하는 사람, 새로 투입되는 사람 등 변화도 많이 발생한다. 개발에 참여하는 팀을 구성하고 관리하는 효율적인 방법이 필요하다.
  3. 개발 기간이 길다 — 개발 기간이 길어질수록 프로젝트 진행 상황을 파악하기 쉽지 않고 개발 비용 산정도 어렵다. 프로젝트를 효율적으로 관리하기 위한 체계가 필요하다.

이러한 어려움을 체계적으로 해결하기 위해 소프트웨어 공학(Software Engineering)이 필요하다.