소프트웨어
소프트웨어(software)란 컴퓨터 프로그램 및 그와 관련된 문서들을 총칭하는 말이다. 간략히 S/W 또는 SW라고도 쓴다. 크게 시스템 소프트웨어와 응용 소프트웨어로 나뉜다. 컴퓨터 기계장치부를 말하는 하드웨어와 대응되는 개념으로, 펌웨어(firmware)는 하드웨어와 소프트웨어의 특성을 모두 가지고 있다.
목차
개요
저장장치에 저장된 특정한목적의 하나 또는 다수의 컴퓨터 프로그램으로, 프로그램 소프트웨어는 컴퓨터 하드웨어에 직접 명령어를 주거나 다른 소프트웨어에 입력을 제공함으로써 그것이 수행하도록 구현된 기능을 수행한다. 일상적으로 응용 소프트웨어의 의미로 자주 쓰인다.[1] 법률상 정의는 소프트웨어산업 진흥법 제 2조 제 1호에 따르면 “컴퓨터, 통신, 자동화 등의 장비와 그 주변장치에 대하여 명령, 제어, 입력, 처리, 저장, 출력, 상호작용이 가능하게 하는 지시, 명령(음성이나 영상정보 등을 포함)의 집합과 이를 작성하기 위하여 사용된 기술서나 그 밖의 관련자료”이다. 간혹 소프트웨어와 하드웨어가 반대되는 말이라고 생각하는 사람들이 있지만, 둘 다 컴퓨터 시스템을 구성하는 요소로 상호 보완적인 기능을 하는 것 뿐 반대되는 말은 아니다.[2]
특징
원래는 문자 그대로의 컴퓨터, 즉 메인프레임, 미니 컴퓨터, 마이크로 컴퓨터, 퍼스털 컴퓨터에서 동작하거나 처리되는 것(프로그램, 데이터 등)만을 소프트웨어라고 불렀지만, 전화를 필두로 손목시계, 자동차, 냉장고 등 많은 것들이 컴퓨터화하는 현대에는 소프트웨어의 의미가 계속해서 넓어지고 있다. 동영상이나 음원, 전자책 등은 물론 내비게이션에 탑재되는 지도 역시 소프트웨어로 간주된다. 가장 대표적인 소프트웨어는 인터넷으로 인류가 만든 것 중 가장 거대하고 널리 이용되는 소프트웨어이다.[2] 소프트웨어는 특정 목적을 가지고 개발되어 수행하는 일이 명백하게 지정되어 있다. 시대와 환경의 변화에 민감하여 시간이 지날수록 그 쓰임새가 급속도로 감소한다는 단점을 가지고 있다.[3]
역사
소프트웨어의 최초의 장소가 되는 윤곽(알고리즘)은 19세기 에이다 러브레이스가 계획된 해석기관을 위해 작성하였지만, 실제로 만들어진 것은 없었다. 오늘날 우리가 인식하는 컴퓨터의 발명 이전의 소프트웨어에 대한 최초의 이론은 앨런 튜링이 1935년에 쓴 수필 《Computable numbers with an application to the Entscheidungsproblem》에서 제안되었다. 그러나 우리가 알고 있는 소프트웨어 즉, 저장식 프로그램 디지털 컴퓨터의 메모리에 저장되는 프로그램들은 1946년 이후에 만들어졌다.[1] 1954년 폴 니케트(Paul Niquette)가 만들어 냈던 신조어로, 하드웨어는 본래 냄비나 망치 따위의 물건처럼 단단한 물건을 의미하는 단어였는데, 컴퓨터를 구성하는 기계 부분을 일컫는 단어로 의미가 확장되면서, 컴퓨터 내부에서 구동되는 프로그램을 가리켜 소프트웨어라는 단어가 생겼다.
국내
우리나라에서 소프트웨어에 대한 공식적인 관심은 1967년에 과학기술처가 전자계산 조직 개발조정위원회를 설치하면서 시작되었다. 1970년대 초 한글입출력단말기, 광학문자 판독기 처리 기술 등이 개발되어 시험 채점, 경영 정보 시스템 마련 등에 활용되기 시작했다. 1976년~1985년에는 외국 기업과의 기술 제휴를 바탕으로, 소프트웨어 개발이 본격적으로 이루어지기 시작했다. 당시의 기술 개발 사례로는 한글 처리용 단말기인 한글 터미널의 개발, 지리정보 시스템의 기본 기술인 원격탐사기술의 개발, 병원 종합관리 시스템의 구축 등을 들 수 있다. 이러한 기술들이 잇달아 개발되면서 소프트웨어는 컴퓨터 하드웨어와 별개의 것으로 인식되기 시작했다. 1980년대 중반 이후에는 행정전산망용 주전산기 개발사업이나 전전자교환기 개발사업과 같은 대형 국책사업을 매개로 소프트웨어 산업이 급속히 발전하기 시작했다. 1990년대 들어서는 시스템 공학 연구소를 중심으로 솔루션 개발이 본격적으로 시작되었다. 당시 주요 기술로는 차량 번호판 인식 시스템, 문화재 복원 소프트웨어 등이 있다. 1990년대 중반 이후에는 국가자리정보시스템(national geographical information system)을 개발하는 작업도 추진되었다. 2000년대 들어서는 인터넷을 이용한 서비스 개발이 활발하게 전개되고 있다.[4]
구분
소프트웨어는 프로그램과 데이터로 구분된다. 디지털 컴퓨터에 탑재되는 프로그램과 데이터는 모두 비트(0과 1)로 구성되어 있는데, 이를 하드웨어에 입력하고, 탑재시켜야만 구동(프로그램)이나 처리(데이터)가 가능하다.
- 프로그램은 컴퓨터를 구동시켜주는 운영체제 및 컴퓨터에서 구동되는 애플리케이션, 유틸리티, 악성 코드 등이 포함된다. 옛날에는 프로그램을 시스템 소프트웨어, 응용 소프트웨어, 유틸리티의 3가지로 구분했는데, 유틸리티라는 개념이 점차 사라지면서, 프로그램을 시스템 소프트웨어, 응용 소프트웨어, 악성코드(멀웨어)로 분류한다.
- 데이터는 소프트웨어에서 프로그램을 제외한 가리킨다. 프로그램을 실행하는데 필요한 데이터는 mp3 음원, 사진, 동영상 파일, 문서 등 매우 다양한 유형이 있다. 이런 데이터 중 사용자(소비자)에게 가치를 제공하는 데이터를 콘텐츠라고 따로 지칭하기도 한다. 대부분의 데이터는 알맞은 프로그램이 있어야만 열람과 처리가 가능하며, 데이터는 이런 응용 프로그램을 이용해 처리하기 위해 특정 형식(포맷)으로 짜여져 있다. 컴퓨터 시스템의 보조기억장치(하드 디스크 등)에서 가장 많은 용량을 차지하고 있는 것이 데이터다. 시스템을 사용하다 보면 데이터는 계속해서 축적되기 때문에, 오늘날 대부분의 PC 사용자들이 시스템 안에 백만개 단위의 데이터 파일들을 쌓아놓고 산다.[2]
시스템 소프트웨어
시스템 소프트웨어(system software)는 시스템 운영에 필요한 기본 환경을 제공하는 소프트웨어로 컴퓨터 시스템을 근본적으로 구동시키고 효율적으로 운용해 주는 기능을 가진 프로그램들의 모임을 뜻한다. 대표적인 시스템 소프트웨어는 마이크로소프트 윈도우, 맥 OS, 리눅스 등의 운영체제, 컴파일러, 데이터베이스, 네트워크 외에도 Java, .NET 등 런타임이나 언리얼 엔진, 이드텍 엔진 등 다양한 유형의 시스템 소프트웨어들이 있다. 응용 소프트웨어로 구분되는 웹 브라우저도 시스템 소프트웨어로 볼 수 있는데 이는 웹 사이트가 소프트웨어의 구동 플랫폼이기 때문이다. 실제로 웹 기술을 기반으로 만든 응용 프로그램이 많다. 시스템 소프트웨어는 다른 소프트웨어들이 구동 또는 처리될 수 있는 환경을 만들어주는 플랫폼의 역할을 하는 소프트웨어이기 때문에 때문에 플랫폼 소프트웨어라고도 부른다. 시스템 소프트웨어 아래에는 컴퓨터 하드웨어나 운영체제 등의 하위 단계가 있고, 위로는 으용 소프트웨어(프로그램)라는 상위 단계가 있다. 시스템 소프트웨어의 아래에 또 다른 시스템 소프트웨어가 있거나 시스템 소프트웨어 위에 또 다른 시스템 소프트웨어가 있는 경우도 있을 수 있다.
운영 체제
- MS-DOS
- 마이크로소프트 윈도는 전세계적으로 점유율 90%에 육박하는 사실상 독과점인 운영체제이다. 때문에 악성코드와 해킹 방법이 가장 집중적으로 개발되고 있어 보안이 취약한 플랫폼이다. 때문에 반드시 보안 솔루션을 이용해야 한다는 등 단점이 많지만, 압도적인 보급률 때문에 거대한 소프트웨어 라이브러리를 자랑하며, 윈도 버전만 있고 맥이나 리눅스로는 출시되지 않는 소프트웨어 등 대체재가 없는 경우도 종종 있다.
- 유닉스 계열
유닉스 계열 운영체제의 원조인 유닉스는 벨 연구소에서 개발되었다. 리눅스는 리누스 토발즈가 커널을 기반으로 개발한 운영체제로 자유 소프트웨어 진영 중심으로 수많은 배포판을 쏟아내며 여러 사람들의 사랑을 받고 있다. 사용자들이 접속하는 웹 사이트 서버의 대부분이 리눅스 기반이고, 요새 스마트폰에서 쓰이는 안드로이드 또한 리눅스를 기반으로 하고 있다. mac 운영체제는 마하(Mach) 커널을 기반으로 만들어진 애플의 운영체제로 애플의 데스크탑, 노트북 제품은 mac 운영체제를 사용한다. 공식 개조판으로 아이폰에서 쓰이는 iOS가 있고, IBM 계열의 컴퓨터에서 사용하기 위해 일부 사용자들이 변형해서 만든 해킨토시도 있다.
- 안드로이드는 주로 모바일 기기(스마트폰 등)를 운영하기 위해 만들어진 운영체제로 비교적 가벼우며 범용성이 높다. 21세기에 급격히 확산되며 세계에서 가장 많이 쓰이는 운영체제의 자리를 넘보고 있다.
드라이버
주변 기기의 입출력을 통제하는 소프트웨어로 마우스, 키보드, 모니터 등을 컴퓨터 본체와 연결시키는 소프트웨어이다. 하는 일이 펌웨어와 비슷하지만, 펌웨어와는 달리 드라이버는 컴퓨터의 CP에서 처리된다. 물론 펌웨어 자체에 기본적인 주변장치 드라이버가 들어있는 경우도 많아 펌웨어와 드라이버를 확실하게 구분하기는 어렵다. 예를 들어 거의 모든 컴퓨터의 바이오스(펌웨어)에는 기본적인 키보드와 마우스 드라이버가 내장되어 있어, 운영체제조차 탑재되지 않은 빈껍데기 컴퓨터에서도 바이오스 셋업을 할 수 있다. 다만 이런 내장 드라이버는 정말 기본적인 기능만을 갖고 있고, 주변기기의 성능을 모두 활용하려면 전용 드라이버를 설치해야하는데, 전용 드라이버는 CPU에서 처리된다.
유틸리티
컴퓨터 사용 효율을 올려주는 소프트웨어로, 우리가 컴퓨터를 보다 편리하고 안전하게 사용할 수 있도록 돕고, 컴퓨터를 사용하는데 있어 일어날 수 있는 문제들을 예방하거나 해결하는 역할을 하는 프로그램들이다. 대표적으로 디스크 정리, 파일 압축, 네트워크 구축, 방화벽 등이 있다. 유틸리티와 응용 소프트웨어를 구분하는 기준은 “이 프로그램을 구동할 목적으로 컴퓨터를 장만했다”라고 할 수 있느냐 하는 것인데, 그렇다면 응용 소프트웨어고, 그렇지 않으면 유틸리티다. 20세기까지만 해도 프로그램을 시스템 소프트웨어, 응용 소프트웨어, 유틸리티로 엄격하게 구분했지만, 오늘날 가장 널리 이용되는 시스템 소프트웨어 마이크로소프트 윈도가 각종 유틸리티를 포함하고 있어 유틸리티를 독립된 제품으로 접하기 어렵다. 또한 넓은 관점에서 보면 운영체제의 계정 권한 관리나 자동적인 메모리 관리 등도 있기 때문에 유틸리티를 독립된 범주로 보는 관점은 점차 줄어들고 있다.[2]
응용 소프트웨어
응용 소프트웨어(application software)란 시스템 소프트웨어라는 플랫폼 위에 구동되는 프로그램으로, 사용자가 원하는 각종 기능을 제공한다. 홈페이지 운영이나 업무관리 등 특정한 기능을 수행하기 위해 개별적으로 개발한 소프트웨어로, 시스템 소프트웨어를 사용하여 실제 사회에서 일어나는 문제들을 풀어주는데 그 종류가 사무 자동화, 수치연산, 게임 등 다양하다. 응용이 영어로 애플리케이션(application)이기 때문에 그냥 애플리케이션 혹은 앱이라고도 한다. 또는 응용 프로그램(application program)이라고도 하며, 줄여서 'AP'라고 쓰기도 한다. 응용 소프트웨어는 앞에서 말한 것처럼 워드 프로세서, 스프레드시트, 인터넷 브라우저, 동영상 플레이어, 비디오 게임 등 다양한 응용 소프트웨어를 특징짓는 공통점은 이들이 우리가 컴퓨터를 사용하는 목적이 되는 프로그램들로, 컴퓨터를 사는 목적이 될 수 있는 프로그램들이다.[2]
악성 코드
제작자가 악의를 가지고 만든 소프트웨어로 컴퓨터 바이러스, 웜, 트로얀, 랜섬웨어 등 일명 나쁜 소프트웨어이다 대부분 프로그램(응용 소프트웨어)이지만, 데이터로만 이루어진 악성 코드도 있다. 그 예로 특정 프로그램에서 정해진 동작을 실시하는 일종의 스크립트인 매크로만으로 구성된 악성 코드가 있다. 간혹 취약점(vulnerability)과 혼동하는 경우가 있는데 취약점은 말 그대로 소프트웨어가 갖고 있는 결함이 악의적으로 이용될 수 있는 결함을 말한다. 옛날에는 소프트웨어 개발자가 이런저런 목적으로 설치해 둔 뒷문이 해커에게 발견되어 취약점으로 이용되는 경우가 많았다면, 현재는 소프트웨어가 고도로 복잡해졌기 때문에 개발자가 전혀 의도하지 않은 소프트웨어적 결함이 취약점으로 발견되는 경우가 점점 늘어나고 있다.[2]
개발 단계
소프트웨어 생명주기라고도 하며, 소프트웨어를 체계적으로 개발하고, 관리하기 위해 개발 과정을 단계별로 나누어 구분한 것이다. 5단계 혹은 6단계로 구분하는데, 6단계의 경우 5단계의 앞에 계획하는 단계를 추가하는 것이다.
요구사항 분석
사용자의 요구사항을 분석하는 단계로, 고객의 요건 또는 개발하고자 하는 시스템의 목표를 정한다. 세부적으로 타당성을 분석하고 개발 계획을 수행한다. 이 때 요건 정의 목록을 시스템화 하는데 문제가 없는지, 구현 가능한지 판단해야 한다. 더 세부적으로 보면 개발할 소프트웨어의 기능과 제약조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의하고, 개발할 소프트웨어의 성격을 정확히 이해하고, 개발 방법과 필요한 개발 자원 및 예산을 예측하는 것이다. 요구사항을 규명하는 것은 많은 시간과 노력을 필요로 하지만, 확실하게 규명할수록 개발과정에서 발생하는 비효율적인 시간과 노력을 절약할 수 있다. 개발될 시스템의 설계 및 품질과 밀접한 관계를 가지고 있어, 고품질의 소프트웨어를 만들기 위해서는 시스템 개발에 앞서 요구사항 분석이 필수적이다.
요구사항 분석 과정은 요구사항 규명, 타당성 조사, 비용과 일정에 대한 제약 설정, 문서화 이 4단계로 이루어진다. 요구사항의 규명은 고객의 요구와 필요가 나오게 된 원인, 배경, 환경 등에 대한 분석을 포함하고 있어야 한다. 타당성 조사는 자원의 투자와 그 이익을 조사하고, 위험에 대한 분석을 수행하는 작업으로 경제적 타당성, 기술적 타당성, 법적 타당성 등을 중심으로 주어진 시간과 예산안에서 시스템을 개발하고, 가능한 빠른 시간 내에 타당성을 평가하는 것이 요구된다. 이는 시스템 개발 비용을 줄이고 생산성과 서비스를 향상시키기 위해 행하여진다. 비용과 일정에 대한 제약 설정은 요구 기능에 대한 소요 비용과 개발 기간의 예측, 제약 조건 및 위험에 대한 평가 등을 설정하는 작업으로, 개발 비용, 개발 일정, 시스템 성능 등에 대해 정확하게 예측을 해야 한다. 마지막으로 문서화는 사용자의 요구사항과 시스템의 기능을 문서화하는 작업으로 요구 명세서가 작성되어야 한다. 고객과 개발 회사 사이의 약속 문서이며, 추후에 발생하는 문제와 변화에 대한 책임을 명확히 규명할 수 있어야 하고, 시스템 개발에 관련된 당사자들의 동의와 서명이 있어야 한다.
설계
설계 단계에서는 요구사항 분석 과정에서 수집된 요구사항 및 분석한 내용을 시스템으로 구현 가능하도록 구체적인 설계를 한다. 시스템 개념과 상세 설계 등 세세한 사항을 포함하도록 하며, 설계 문서를 작성해야 한다. 설계를 어떻게 하느냐에 따라 품질에 직접적인 영향을 미치며, 부적절한 설계는 추후에 시스템 변화를 야기하여 많은 유지 보수비용이 들 수 있다. 시스템을 각각의 구성 요소들로 분할한 뒤, 구성 요소들 사이에 주고받는 정보의 소통을 최소화 시키고 각 구성 요소의 독립성이 유지되도록 시스템을 분할 설계해야 한다. 또한 비용, 소요시간, 용량, 그리고 신뢰성 등에 대한 연구가 요구되며, 현실과 예산에 맞는 최적의 설계 방법을 선택해야 한다. 설계 명세서에는 엔지니어의 관점에서 소프트웨어를 어떻게 구현할 것인지를 기술해야 한다.
구현
말 그대로 앞의 과정들을 통해 설계한 설계 명세서를 바탕으로 시스템을 구현하는 것으로, 소프트웨어 구현을 위한 코딩 작업을 하는 것이다. 결과물로 실행 코드, 즉 컴퓨터 프로그램이 있어야 한다. 코딩을 할 때는 높은 가독성을 가져야 하고, 코드가 간결하고 명확해야 한다는 원칙이 있다. 소프트웨어 시스템 구현에서 발생하는 어려움은 대부분 분석과 설계의 잘못에 의한 것으로 설계가 바르게 작성이 되면, 구현은 상대적으로 단순한 기계적인 과정이다. 이 때 주의할 점은 운영체제나 표준 라이브러리 등이 앞에서 작성한 요구 명세서와 설계 명세서를 바탕으로 정해져야 한다는 것이다.
테스트
이 단계에서는 구현된 시스템이 정상 작동하는지, 요건과 부합하는지를 테스트한다. 구현된 소프트웨어의 오류를 발견하고 수정하는 것을 목표로 한다.[5] 시스템을 테스트 하는 것은 개발 전 과정에 대하여 체계적으로 점검할 수 있는, 품질 보증 활동의 중요한 일부분이며, 지금까지 한 모든 과정에 대한 최종 점검을 포함하고 있다. 테스트단계의 주요 작업에는 단위 모듈을 테스트하는 단위 테스트, 모듈간 통합 테스트를 하는 통합 테스트, 요구 사항과 일치하는지를 테스트하는 적합성 테스트, 시스템 복구, 보안, 성능 등을 테스트 하는 시스템 테스팅 등이 있다. 고품질의 소프트웨어를 개발하기 위해서는 각 과정마다 품질 보증을 위한 절차가 필요하며, 공식적인 검토회 등을 통하여 오류를 발견하고 수정하는 작업이 필요하다. 체계적인 테스트를 위해서는 테스트 계획서가 필요하다. 계획서에는 시험 진행 단계, 시험에 사용되는 데이터 및 시험의 제약 등이 기술되어야 한다. 테스트 결과서 또한 작성되어야한다. 테스트를 통하여 오류를 찾고 올바르게 수정하여 프로그램을 작동시킬 수는 있지만, 그렇다고 해서 프로그램이 완전하고 정확하다고 증명할 수는 없다.
유지보수
구현된 시스템을 실제로 배포하고, 운영하는 과정에서 발생하는 것으로 시스템 변경에 의한 요구분석, 설계, 구현, 시험이 모두 재 수행 되어야 하며, 관련 문서의 수정도 필요하므로 체계적인 관리가 필요하다. 여러 가지 보고서나 자료가 있어야 한다. 추가 수정 요구 사항 검토 및 반영, 장애 및 오류 발생 시 대처와 복구, 시스템 및 서비스 운영, 유지보수 보고, 역공학 또는 재공학 필요성 검토 등 여러 가지 주요 작업들이 있다. 경우에 따라 지속적인 모니터링 및 시스템 운영들을 요구한다.[6]
소프트웨어 프로세스
소프트웨어를 개발하거나 유지, 보수할 목적으로 수행되는 활동 일체 또는 절차를 의미한다. 소프트웨어 프로세스를 만드는 이유는 누가 어떤 활동을 언제 할지를 정하고, 소프트웨어를 만들기 위해 필요한 행동들을 명확히 하는 것이다. 소프트웨어 프로세스의 특성으로는 이해성, 가시성, 지원성, 수용성, 신뢰성, 견고성, 유지보수성, 신속성 등이 있다. 가시성은 공정이 끝났을 때 눈에 보이는 것이 있는가, 지원성은 도구들이 지원되고 있는가, 수용성은 수용이 가능한가, 신뢰성은 사전에 오류를 잡아낼 수 있는가, 견고성은 바이러스에 면역이 되어있는가, 유지보수성은 조직의 변경 요구를 얼마나 빨리 맞출 수 있는가, 신속성은 제품이 얼마나 빨리 오는가를 의미한다.[7] 프로세스 모델이 있다면 전체 프로세스의 이해에 도움을 주고, 구조화된 방법을 개발에 적용시킬 수 있을 뿐만 아니라 지원사용에 대한 사전 계획, 통제가 가능하게 하고, 시스템 개발 과정을 추적하고 관리할 수 있게 해준다. 주요 프로세스 활동에는 소프트웨어의 기능과 운영상 제약 조건을 정하는 소프트웨어 명세, 소프트웨어를 설계하고 프로그래밍 하는 소프트웨어 개발, 고객이 원하는 것을 수행하는 지 검사하는 소프트웨어 검증, 소프트웨어를 유지 및 보수하는 소프트웨어 진화가 있다. 개발 조직에 따라, 프로젝트 유형에 따라 각각 다른 프로세스를 적용해야 한다. 선형순차적 모델과 진화적 프로세스 모델이 있는데 선형 순차적 모델은 폭포수 모델, V 모델 이 2가지 밖에 없다.
폭포수 모델
대표적인 선형순차적 모델로, 개발의 흐름이 마치 폭포수처럼 지속적으로 아래로 향하는 것처럼 보이는 데서 이름이 붙여졌다. 앞에서 본 요구사항 분석, 설계, 구현, 테스트, 유지보수 단계 외에 통합 단계가 하나 더 있다. 소프트웨어 요구사항 기술, 설계, 구현, 테스트, 통합, 유지보수가 각각 순차적으로 진행되어야한다. 다음 단계에 오류가 넘어가지 않도록 하려면 앞 단계에서 결과물이 완벽한 수준으로 작성되어야 하기 때문에 각 단계는 앞 단계가 완료되어야만 다음 단계를 수행할 수 있다. 사용자가 가시적인 결과를 중간에 확인할 수 없다. 그렇지만 관리가 용이하고, 체계적인 문서화가 가능하기 때문에 요구사항의 변화가 적은 프로젝트에 적합하다.
V모델
산출물 중심의 폭포수 모델을 확장하여 각 개발 단계를 검증하는 것에 초점을 맞춘 것으로, 크게 검증단계와 유효화 단계 2가지로 나뉜다. 검증단계는 요구분석, 시스템 설계, 아키텍쳐 설계, 모듈 설계로 이 과정들이 끝나면 코딩을 진행한다. 이후 각 설계가 제대로 진행 되었는지 확인하기 위해서 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트가 진행된다. 단위 테스트는 모듈 확인, 통합 테스트는 인터페이스 확인, 시스템 테스트는 기능 확인, 인수 테스트는 요구 확인을 위한 것이다. 코딩을 중심으로 알파벳 V자 모양이 되기 때문에 V 모델이라고 한다. 개발 생명 주기의 각 단계와 그에 상응하는 소프트웨어 시험 각 단계의 관계를 보여주고, 각 단계마다 상세한 문서화를 통해 작업을 진행한다. 테스트 설계와 같은 테스트 활동은 코딩 이후가 아닌 프로젝트 시작과 동시에 함께 시작한다는 것이 특징이고, 전체적으로 많은 양의 프로젝트 비용과 시간을 감소할 수 있다.
프로토 타입 모델
진화적 프로세스의 대표로, 정식 절차에 따라 완전한 소프트웨어를 만들기 전에 사용자의 요구를 받아 일단 모형을 만들고 이 모형을 사용자와 의사소통하는 도구로 활용하는 방식이다. 요구사항 정의 및 분석, 프로토타입 설계, 프로토타입 개발, 사용자의 평가, 구현 추가 및 수정 순으로 진행된다. 반복된 요구사항 정의를 통해 사용자 요구가 충분히 반영된 요구 분석 명세서를 작성할 수 있고, 프로토타입이 의사소통 도구로 활용될 수 있다. 또한 초기 프로토타입 사용을 통해 새로운 요구사항을 발견할 수 있고, 프로토타입 사용을 통한 완성품의 예측이 가능하다는 장점이 있다. 다만 반복적 개발을 해야하기 때문에 투입 인력 및 비용의 산정과 프로토타이핑 과정에 대한 통제 및 관리가 어렵고, 중간 산출물 생성의 어려움이 있을 뿐만 아니라, 불명확한 개발 범위로 인해 개발이 종료되거나 목표가 불확실하다는 단점이 있다.
나선형 모델
프로토 타입에 위험 분석 과정을 더한 것으로 위험 분석의 대상이 되는 요소에는 빈번하게 변경되는 요구사항, 팀원들의 경험 부족, 결속력이 떨어지는 팀, 프로젝트 관리 부족 등이 있다. 계획 및 요구 분석 단계, 위험 분석 단계, 개발 단계, 사용자 평가 단계 총 4 단계로 진행된다. 사전 위험 분석을 통해 돌출 위험 요소를 감소시켜, 프로젝트 중단 확률을 감소시킬 수 있고, 사용자 평가에 의한 개발 방식을 사용해 요구가 충분히 반영되어 사용자의 불만을 감소시킬 수 있다는 장점이 있다. 단점으로는 반복적 개발에 의한 프로젝트 기간 연장이 가능하고, 반복 회수 증가에 따라 위험요소도 많기 때문에 프로젝트 관리가 어려워진다. 프로토타입과 다른 점은 위험 분석 과정이 있다는 것이기 때문에 위험 요소를 관리하는 것이 중요한데, 이는 위험 전문가 필요에 따라 추가 비용이 발생하는 등의 부담이 될 수 있다.
통합 프로세스(UP) 모델
통합 프로세스 모델은 폭포수 모델의 문제점을 해결하기 위해 반복적인 개발을 하는 방식으로, 반복적이고 점진적이다. 아키텍처의 정의를 중요하게 생각하여 쓰임새와 물질을 토대로 아키텍처를 먼저 구축한 뒤 소프트웨어를 구현한다. 아키텍처와 객체 지향이 중요해짐에 따라 활용도가 증가했다. 토입 단계, 구체화 단계, 구축 단계, 전이 단계가 있는데, 이 과정들이 반복해서 진행된다. 점증적으로 개발해 나감으로써 기술적 또는 요구사항 변경 등에 대한 위험 요소를 초기에 완화시킬 수 있다. 발주자의 실제 요구 사항에 근접한 시스템을 만들 수 있고, 이전 반복을 통해 얻은 교훈은 다음 반복의 피드백으로 작용할 수 있다. 이러한 반복이 거듭될수록 노하우가 생기고, 개발자로서의 스킬이 숙달되는 것이다.
애자일 프로세스 모델
애자일(agile)은 “날렵한”, “민첩한”이란 뜻으로 애자일 프로세스 모델은 고객의 요구에 민첩하게 대응하고, 그때 그때 주어지는 문제를 풀어나가는 방법이다. 프로세스와 도구 중심이 아닌 개개인과의 상호 소통을 중시하고, 문서 중심이 아닌, 실행 가능한 소프트웨어를 중시한다. 또한 계약과 협상 중심이 아닌, 고객과의 협력을 중시하고, 계호기 중심이 아닌 변화에 대한 민첩한 대응을 중시한다. 반복적인 개발을 통한 잦은 출시를 목표로 한다.[8]
각주
- ↑ 1.0 1.1 〈소프트웨어〉, 《위키백과》
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 〈소프트웨어〉, 《나무위키》
- ↑ 청년학술회, 〈소프트웨어란 무엇인가〉, 《네이버 블로그》, 2016-03-27
- ↑ 〈소프트웨어〉, 《네이버 지식백과》
- ↑ codedragon, 〈소프트웨어의 개발 5단계〉, 《티스토리》
- ↑ 〈제 2 장 소프트웨어 개발 단계〉
- ↑ 아보카도, 〈소프트웨어 / 소프트웨어 공학 / 발전과정 / 소프트웨어 프로세스 특성〉, 《네이버 블로그》, 2019-03-24
- ↑ ForzaCoding, 〈소프트웨어 개발단계 : 프로세스 모델〉, 《티스토리》, 2020-03-08
참고자료
- 〈소프트웨어〉, 《위키백과》
- 〈소프트웨어〉, 《나무위키》
- 청년학술회, 〈소프트웨어란 무엇인가〉, 《네이버 블로그》, 2016-03-27
- 〈소프트웨어〉, 《네이버 지식백과》
- codedragon, 〈소프트웨어의 개발 5단계〉, 《티스토리》
- 〈제 2 장 소프트웨어 개발 단계〉
- ForzaCoding, 〈소프트웨어 / 소프트웨어 공학 / 발전과정 / 소프트웨어 프로세스 특성〉, 2019-03-24《네이버 블로그》
같이 보기