-
2024.03.07 - [컴퓨터공학] - 소프트웨어공학이란? 소프트웨어공학의 정의, 역사, 기본 원리, 목표
소프트웨어 개발 방법론
소프트웨어 개발 방법론은 소프트웨어 생명 주기, 소프트웨어 개발 프로세스이다. 소프트웨어 제품을 개발하기 위한 과정 또는 구조이다. 이러한 방법론을 소프트웨어 프로젝트에 적용하여 소프트웨어 품질을 높게 개발하고 효율적으로 관리하는 것이 목표이다.
폭포수 모델(Waterfall)
폭포수(Waterfall) 모델은 각 단계가 엄격하게 구분된 순차적인 소프트웨어 개발 방법론이다. 되어 있다. 전통적인 방법론으로 폭포수가 아래로만 흐르는 것과 같이 개발 과정이 비슷하다는 것에서 붙은 이름이다. 요구사항 정의, 설계, 구현, 테스트, 유지보수의 단계를 변경 없이 순차적으로 진행한다. 문제가 발생하면 추가 비용과 시간이 소요될 수 있다. 현재 단계가 완료되어야 다음 단계로 진행할 수 있다. 폭포수 모델은 요구사항이 변경되지 않는 경우가 거의 없으며, 이후 새로운 요구사항이 발생할 수 있고 해당 작업의 난이도를 완벽하게 예측하기 어렵다는 것에 많은 비난을 받았다. 현재는 이런 단점을 보완한 여러 변형 모델이 등장했다. 폭포수 모델을 활용한 대표적인 사례로는 NASA가 있다. NASA(미국 항공우주국)는 복잡하고 안전에 중점을 둔 공간 탐사, 항공 기술 개발과 같은 프로젝트를 수행하는 데에 폭포수 모델을 적극적으로 채택했다. 그중 인류 최초의 달 착륙을 달성하는 데에 성공한 Apollo 프로그램이 대표적이다. 1960년대 초반부터 1970년대 중반까지 진행된 프로젝트로, 폭포수 모델을 활용하여 단계별로 완벽하게 수행하여 안전성과 신뢰성을 높였다. 각 단계가 완료되지 않으면 다음 단계를 진행하지 않도록 계획했다. 그로 인해 최초로 달에 도착하는 데에 안전한 방식으로 성공한다. 이처럼 복잡하고 안전성을 최우선으로중요시해야 하는는 프로젝트에는 폭포수 모델이 더 적합하다.단계별로로 목표가 명확하다. 계획 및 분석 단계에서는 문제를 분석, 해결 방법을 찾고 요구를 분석한다. 설계 단계에서는 구조를 설계, 디자인하고 상세명세를을 설계한다. 개발단계는 실질적으로 소프트웨어를 개발한다. 테스트단계는 시스템 테스트, 사용자 테스트, 인수 테스트 등 여러 테스트를 반복하여 진행한다. 운영, 유지보수 단계에는 기능을 추가하거나 보완한다.
애자일(Agile)
애자일(Agile)은 작은 주기의 반복을 통해 빠르게 소프트웨어를 개발하고 사용자의 피드백을 수용하는 유연한 방법론이다. 변화에 대응하기에 적합하다. 애자일은 일정한 주기마다프로토타입을을 반복적으로 개발하여 새로운 요구사항을 처리한다. 요구사항이 바뀔 때마다 해당 작업의 비용을 정확하게 예측하기 어렵다. 객체지향 기술의 등장으로 애자일 방법론이 등장했다. 애자일은 객체지향기술을 사용한다. 제한된 기한과 비용으로 최대한의 품질을 개발하고자 하는 목표가 있다. 애자일 방법론은은 다양한 개발 방법론이 존재한다. 대표적으로 익스트림 프로그래밍, 스크럼, 크리스털 패밀리, Feature-Driven Development, Adaptive Software Development, 익스트림 모델링 등이 있다. 익스트림 프로그래밍은 애자일 방법론의 대표적인 방법이다. 이 방법은 2주 정도 개발하는 것을 반복하여 테스트를 중시하여 개발하는 것이 특징이다. 스크럼은 스프린트 중심으로 30일마다 동작이 가능한 제품을 개발한다. 짧은 시간 개발하는 프로젝트 관리를 중심으로 하는 방법론이다. 애자일은 다양한 개발 방법론이 있고 각자 특징 및 범위가 다르다. 이런 방법론을 조합하여 여러 방법론을 섞어 사용하기도 한다. 스크럼을 활용한 사례로 Spotify가 있다. Spotify는 음악 스트리밍 서비스로 스크럼을 도입하여 성공한 대표적인 사례다. 해당 기업은 조직 문화를 애자일 전체로 정착하고 빠르게 변하는 음악 시장에 대응했다. 애자일은 가벼운 개발 방법론의 필요성이 대두되기 시작하며 등장한 건 90년대이다. 처음에는 애자일이 아닌 경량 방법론과 같은 명칭으로 불렸으나 애자일 선언문 이후 애자일이라 불리기 시작했다.
폭포수, 애자일 방법론 비교
폭포수와 애자일은 소프트웨어 개발 방법론으로 소프트웨어를 효율적으로 개발하기 위한 방법이다. 폭포수와 같이 전통적인 개발 방법은 철저히 계획 위주고 애자일은 작은 주기의 반복이라는 점이 특징이다. 프로젝트의 특징을 잘 파악하고 적절한 방법을 선택하는 것이 중요하다. 폭포수 모델은 계획대로 진행하기 때문에 전체 프로젝트에 대해 이해하기 쉽다. 또한 단계별로 순차적으로 진행하기 때문에 안전성을 높이기에 효과적이다. 하지만 그로 인해 요구사항이 변경되었을 때 프로젝트 완료일이 계획보다 지연될 수 있다. 또한 그렇게 완성되어도 고객의 요구를 충족하지 못할 수 있다. 그로 인해 개발자들의 스트레스 지수가 높아지고 업무가 과중해질 수 있다. 폭포수 모델의 장점으로는 관리하기 쉽고 각 단계의 결과물과 검증 프로세스가 있어 안전하다는 것이다. 요구사항이 단순한 소규모 프로젝트에 적합하다. 애자일은 고객을 중심으로 하므로 단계마다 고객의 요구사항을 반영하기에 좋다. 처음 계획보다 개발 품질을 향상할 수 있다. 하지만 소규모 프로젝트에는 적합하지 않고 프로젝트가 처음의 의도에서 벗어날 가능성이 높다. 문제를 해결하기 위한 비용이 많이 들고 고객과의 소통이 중요하다.
'컴퓨터공학' 카테고리의 다른 글
프로세스 스케줄링이란? 비선점 스케줄링, 선점 스케줄링 (0) 2024.03.09 운영체제란? 운영체제 정의, 목적, 기능 (0) 2024.03.08 시스템이란? 정의, 특성, 기본 요소, 종류, 분류 (0) 2024.03.07 소프트웨어공학이란? 소프트웨어공학의 정의, 역사, 기본 원리, 목표 (0) 2024.03.07 컴퓨터공학이란? 컴퓨터공학의 정의, 역사, 주요 연구 분야, 사회적 역할, 미래 (0) 2024.03.06