[소프트웨어공학] - 2주차 : 소프트웨어 공학과 개발 프로세스 (2)
소프트웨어 개발 생명주기 6단계
: 계획은 비용, 기간, 위험 분석, 문제 정의(시스템의 목표 및 제약 조건) 등 프로젝트 수행에 필요한 것을 계획한다. 요구 분석은 개발할 소프트웨어의 기능 및 제약 조건, 목표 등을 사용자와 함께 정의한다. 설계는 요구 분석 단계에서 표현한 다이어그램을 가지고 이를 구현할 수 있도록 구체화한다. 즉, 소프트웨어의 구조 및 알고리즘을 설계한다. 구현은 프로그래밍 언어로 실제 프로그램을 작성한다. 프로그래밍 언어 선택, 프로그래밍 기법과 스타일 등을 정한다. 테스트는 개발한 프로그램이 요구사항을 만족하는지, 실행 결과가 예상 결과와 맞는지, 오류는 없는지 등 완성도를 높인다. 유지 보수는 프로그램이 인수되고, 배포 후 일어나는 모든 활동으로, 시스템 결함 수정, 성능 개선, 소프트웨어 수정(버전 관리) 등을 한다.
소프트웨어 개발 생명주기(SDLC) 모델
: 정의는 소프트웨어를 어떻게 개발할 것인가에 대한 전체 흐름을 체계화 한 개념으로, 각 단계에서 무엇을 어떤 순서로 작업하며, 어떤 자원을 사용할 것인가에 대한 지침이다. 목적은 고품질 소프트웨어를 만드는 것으로, 역할은 프로젝트의 전체적인 골격을 세워주고, 일정 계획 및 개발 비용 산정을 가능하게 한다. 또한 단계별 산출물을 활용해 프로젝트 검토가 가능하며, 용어의 표준화 및 참여자 간의 의사소통 기준을 정할 수 있다. 특징으로 세부적인 SDLC 모델은 소프트웨어 개발 팀마다 다르다.
주먹 구구식 모델
: 정의는 공식 가이드라인이 없으며, Build and Fix 모델이다. 즉, 제품을 만든 뒤 코드에 문제가 있으면 수정하고, 문제가 없으면 사용한다. 단점은 (1) 정해진 개발 순서나 각 단계별 산출물이 없어서 유지보수가 어렵다. (2) 문제 범위를 정하기 않기 때문에 프로젝트의 전체 범위를 알 수 없다. (3) 대규모 프로젝트에서는 불가능하다. (4) 여러 번 수정 시 코드의 가독성이 떨어진다.
선형 순차적 모델 - 폭포수 모델
: 정의는 각 단계는 하향식으로 진행되며, 각 단계에서 확실하게 작업을 종료하고 결과를 문서화 한 뒤 다음 단계를 진행한다. 특징으로 (1) 각 단계는 중복이나 상호작용 없이 순서적이다. (2) 각 단계의 결과는 다음 단계 시작 전에 점검한다. (3) 한번의 과정으로 끝낼 수 있는 시스템, 비전문가가 사용할 시스템 등 단순하거나 응용 분야를 잘 알고 있는 경우 적합하다. (4) 요구사항 변동이 없는 소규모 프로젝트에 적합하다.
: 장점으로 (1) 절차가 단순하여 이해하기 쉽다. (2) 단계별 진행 상황 관리가 쉽다. (3) 단계별 산출물이 명확하여, 체계적으로 문서화 할 수 있다. 단점으로는 (1) 현재 단계가 완료되어야 다음 단계가 수행된다. (2) 현재 단계의 결과물이 완벽하지 않으면 다음 단계에서 오류가 발생할 수 있다. (3) 사용자는 테스트 단계 이후에 완성된 제품을 볼 수 있기 때문에, 그 이전에 사용자가 가시적인 결과를 볼 수 없다. (4) 이전 단계로 되돌아가지 않으므로 요구사항이 수정되면 이를 반영하기 어렵다.
선형 순차적 모델 - V 모델
: 정의는 여러 테스트 단계를 추가한 폭포수 모델의 변형이다. 장점은 각 개발 단계를 검증하는 데 초점을 맞춰 오류가 적으며, 신뢰성이 높은 분야에 적합하다. 단위 테스트는 모듈 내 각 함수에 대한 모듈 검증, 통합 테스트는 함수 사이의 연결에 대한 인터페이스 검증, 시스템 테스트는 해당 소프트웨어를 실제 하드웨어에 탑재하였을 때 요구 사항을 만족하는지에 대한 요구분석 검증을 테스트한다. 단점은 폭포수 모델과 유사하게 각 단계가 반복되지 않으므로 새로운 요구사항을 반영하기 어렵다.
진화적 프로세스 모델
: 정의는 주로 요구 분석 단계에 중점을 두는 모델이다. 진행 과정은 (1) 초기 사용자 요구에 따라 초기 버전의 프로토타입을 개발한다. (2) 이를 바탕으로 가상의 결과 화면을 관찰한다. (3) 새로운 요구 사항을 추가 반영하여 지속적으로 프로토타입을 개선한다. (프로토타입 모델) (4) 요구사항에 대한 타당성을 판단하기 위해 위험 분석 단계를 추가한다. (나선형 모델)
진화적 프로세스 모델 - 프로토타입 모델
: 정의는 (1) 사용자의 요구사항을 충분히 분석할 목적으로 개발된 모델이다. (2) 시스템의 일부분을 시험적으로 구현하고, 사용자의 피드백을 받아 다시 요구사항에 반영하는 과정을 반복하는 사용자 중심 개발 모델이다. 주의사항으로는 (1) 설계 이후의 과정에서는 반복이 이루어지지 않는다. (2) 프로토타입은 완전한 설계가 중요한 것이 아니라, 사용자와 대화할 수 있는 수준의 정도만을 필요로 한다. (3) 입출력 화면을 통한 사용자 인터페이스 중심으로 설계하며, 출력 화면을 통해 사용자가 원하는 것인지 확인한다.
: 장점은 (1) 사용자의 요구사항이 불투명하고 요구사항 변화가 많을 때 적합하다. (2) 개발한 프로토타입은 기능이 부족하더라도 가시적이므로 의사소통 도구로 사용 가능하다. (3) 개발한 프로토타입으로 완성품을 어느 정도 예측할 수 있다. (4) 사용자의 요구가 충분히 반영되어 최종 제품이 나오므로 유지 보수에 필요한 노력과 시간을 줄일 수 있다. 단점은 (1) 반복적인 개발로 인해 필요한 인력과 비용 산정이 어려우며, 프로토타입에 따른 추가 비용이 들 수 있다. (2) 개발자 입장에서 프로토타이핑 과정을 관리하기 어려우며, 개발 범위가 명확하지 않다. (3) 사용자 입장에서는 개발된 프로토타입으로는 완벽히 동작할 수 없는데도, 빠른 시간 안에 최종 제품이 나올 것이라 착각할 수 있다.
: 폭포수 모델과 비교하면, (1) 폭포수 모델은 요구사항을 완벽히 명세한 후 다음 단계로 넘어가는데, 프로토타입 모델은 요구사항을 반복적으로 수용하여 완성도를 높여서 최종 프로토타입을 개발한다. (2) 폭포수 모델은 완성된 요구사항을 바탕으로 설계 및 개발을 하는데, 프로토타입 모델은 완제품을 보여주는 것이 아니라, 출력 결과가 사용자가 원하는 것인지 보여주기 위해 설계 및 개발을 한다. (3) 폭포수 모델은 테스트 과정에서 사용자 평가가 이루어지지 않는데, 프로토타입 모델은 반복된 프로토타입을 기반으로 사용자 평가가 이루어진다.
진화적 프로세스 모델 - 나선형 모델
: 정의는 시스템 개발 시 위험 최소화를 위해 점진적으로 완성도를 높여가는 모델이다. 진행 과정은 (1) 계획 및 요구분석 단계는 고객의 요구사항 분석 및 타당성 검토, 프로젝트 수행 여부를 결정한다. 또한, 현재 사이클 내 각 단계에서 완수하고자 하는 목표를 수립한다. (2) 위험 분석 단계는 고객의 요구사항을 기반으로 예측되는 위험 사항에 대해 분석한다. 대표적 위험 사항으로는 개발 기간 부족, 개발 비용 초과, 개발자 이직, 요구사항 변경 등이 있다. (3) 개발 단계는 시스템과 개발 환경에 맞는 개발 모델을 선택한다. (4) 평가 단계는 사용자 평가 후 추가 반복에 대한 여부를 결정하며, 새롭게 변경된 요구사항을 반영한다.
: 장점은 (1) 갑작스런 위험으로 인한 프로젝트 중단 가능성이 낮다. 즉, 대규모 프로젝트, 국책사업 및 위험 부담이 큰 시스템 개발에 적합하다. (2) 한 사이클에 추가하지 못한 요구사항은 다음 단계에 추가하여 사용자 요구를 충분히 반영할 수 있다. (3) 반복적인 개발 및 테스트로 완성품의 강인성이 향상된다. 단점은 (1) 사이클이 반복되면 프로젝트 기간이 길어지고 프로젝트 관리가 어렵다. (2) 위험 관리 전문가가 필요하다.
단계적 개발 모델
: 개발자가 먼저 릴리즈1을 개발해 사용자에게 제공해 이를 사용한다. 사용자가 릴리즈 1을 사용하는 동안 개발자는 릴리즈 2를 개발하는 등 개발과 사용을 병행하는 과정을 반복한다. 이는 빠른 출시가 이윤에 직결되는 개발 사이클이 짧은 환경에 적합하다.
단계적 개발 모델 - 점증적 개발 모델 (개발 범위의 증가)
: 정의는 (1) 중요하다고 판단한 부분부터 개발하고 개발 범위를 점차 늘려가는 방식이다. (2) 요구 분석 명세서에 명시된 시스템 전체를 서브(Sub) 시스템으로 분할하여 서브 시스템을 단계적으로 하나씩 릴리스해 완성하는 모델이다. 장점은 (1) 일부 기능이 부족해도 초기에 사용 가능하며, 사용자의 요구를 빠르게 반영할 수 있다. (2) 새로운 시스템 전체가 한 번에 주어졌을 때 조직이 받는 충격을 완화 할 수 있다. (3) 이미 사용 중인 서브 시스템이 존재한다면 또 다른 서브 시스템을 개발할 때 참고할 수 있으므로 개발에 용이하다. 단점은 (1) 처음 설계할 때부터 이후에 개발할 다른 서브 시스템과의 연관성을 고려해야 한다. (2) 이미 개발된 서브 시스템과 통합 시 어려움을 겪을 수 있다.
일정 중심 설계 모델
: 정의는 사용자 요구사항에 우선 순위를 정하고, 우선순위가 높은 기능들을 중심으로 상세 설계, 코딩, 테스트하며, 우선 순위가 낮은 것들은 이후에 진행하는 모델이다. 장점은 (1) 일정 조정이 가능하기 때문에 소프트웨어 제품 출시 날짜가 매우 중요한 경우에 적합하다. (2) 사용자 요구사항에 우선 순위를 지정할 수 있다. 단점은 (1) 낮은 우선 순위를 분석하기 위해 시간이 낭비될 수 있다. (2) 우선 순위가 낮은 업무는 개발되지 않을 수도 있다.