chlqhrud0208
나 혼자 코딩
chlqhrud0208
전체 방문자
오늘
어제
  • 분류 전체보기 (23)
    • Git & Github (2)
    • 그로스 해킹 (2)
    • 소프트웨어공학 (19)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 그로스 해킹

공지사항

인기 글

태그

  • GitHub
  • 그로스해킹
  • 그로스 해킹
  • Git

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
chlqhrud0208

나 혼자 코딩

소프트웨어 공학과 개발 프로세스 (Part2)
소프트웨어공학

소프트웨어 공학과 개발 프로세스 (Part2)

2024. 10. 20. 00:18

소프트웨어 개발 생명주기 모델

  • 주먹 구구식 모델 -> No Document
  • 선형 순차적 모델
    - 폭포수 모델
    - V 모델
  • 진화적 프로세스 모델
    - 프로토타입 모델
    - 나선형 모델
  • 단계적 개발 모델
    - 점증적 개발 모델
  • 일정 중심 설계 모델
  • 애자일 프로세스 모델 -> No Document

-> 주먹 구구식 모델과 애자일 프로세스 모델을 제외한 모델들은 모두 Plan and Document 모델

주먹 구구식 모델

- 계획 단계 없이 바로 구현(코딩)에 들어감 (code and fix)

- 제품을 완성까지 시킨다음에 문제가 생기면 수정하고 문제가 없으면 사용하는 형식

- 매우 간단함 (장점)

- 반려동물 집 짓기와 유사

단점

- 문서화된 산출물이 없음
   -> 유지보수 및 관리가 어려움

- 문제 범위를 정하지 않음
 -> 전체 프로그램을 알기 어렵고 좋은 아키텍쳐를 만들 수 없음

- 대규모 프로젝트에 적합하지 않음

- 코딩을 먼저하기 때문에 코드 수정 가능성이 높아지고, 이는 코드의 가독성을 떨어뜨리고 수정을 어렵게 함

선형 순차적 모델 (Linear Sequential Model , 폭포수 모델)

 

- '계획 -> 요구 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수' 순서로 진행

- 물이 떨어지는 흐름(아래에서 위로갈 수 없음)처럼 한 방향으로 진행됨 (하향식)

- 한 단계가 완벽하게 끝났다는 가정하에 다음 단계를 진행함 (전 단계로 돌아갈 수 없음)

- 요구 사항을 변경할 수 없기 때문에 소규모 프로젝트(요구사항이 확정)에 적합함

- 확실하게 해당단계를 마쳐야 하기 때문에 문서화가 중요함

- 전 단계가 끝나야 다음 단계를 진행할 수 있음

- 전 단계의 문서를 참고하여 다음 단계를 진행함

구현

(계획, 요구분석, 설계는 뒤에서 나오기 때문에 생략)

- 'Do it' 단계

- 전체 일정을 줄이기 위해 설계랑 합치기도 함

테스트

- 모듈을 통합하면서 점진적으로 진행  (작은 함수 테스트 -> 전체 코드 테스트 )
   -> 어디에 문제가 있는지 알기 위함
- 테스트는 따로 테스트 팀이 담당

유지보수

- 가장 긴 단계

- 성능 추가

- 새 기능(요구사항) 추가

- 결함 고침

특징

- 각 단계간의 중복이나 상호작용이 없음 (순서적)

- 단순하거나 응용분야를 잘 아는 경우 유용함 (경험이 있는)

- 각 단계의 결과는 다음 단계를 넘어가기 전에 점검

vs 주먹 구구식 모델

- 주먹 구구식 모델은 단계가 없지만(code and fix) 폭포수 모델은 단계가 있음

- 주먹 구구식 모델은 문서화된 산출물이 없지만 폭포수 모델은 있음

장점

- 절차가 단순하여 이해하기 쉬움 (초보자도 쉽게 적용 가능)

- 단계별 진척상황에 대한 관리가 쉬움

- 각 단계별 산출물이 명확하여, 체계적으로 문서화할 수 있음

단점

- 앞 단계가 완벽하 완료되어야 다음 단계를 시작할 수 있음

   -> 앞 단계가 지나치게 강조되면 코딩이나 테스트가 지연될 수 있음

- 사용자가 중간에 가시적인 결과를 볼 수 없음

   -> 잘못된 것을 테스트 단계 이후에 알 수도 있음

- 새로운 요구사항을 받아들이기 힘듦

   -> 유지보수 때 힘들어질 수 있음

선형 순차적 모델 - V모델

- 테스트 단계를 추가한 폭포수 모델의 변형 (테스트 단계가 여러 stage로 나누어져 있음)

- 각 개발 단계를 검증하는데 초점을 맞춤 (폭포수 모델은 산출물 중심) -> 오류를 줄일 수 있음

 

장점

- 각 개발 단계의 검증에 초점을 두기 때문에 오류를 줄일 수 있음

- 신뢰성이 높이 요구되는 분야에 사용 가능

단점

- 변경사항을 받아들이기 힘듦

- 구현까지 끝나야 테스트 단계를 시작할 . 수있음

   (폭포수 모델의 단점과 같음)

진화적 프로세스 모델

- 폭포수 모델의 단점을 해결하기 위해 등장

   -> 단계를 거슬러 올라갈 수 없음 (요구사항의 변화에 대응할 수 없음)

   -> 새로운 요구사항에도 민첩하게 대응할 수 있는 방법

- 주로 요구분석 단계를 고려한 모델

  1.  초기의 사용자 요구사항을 토대로 초기 버전의 프로토타입(더미 소프트웨어) 개발
  2. 이를 바탕으로 가상의 결과 화면을 관찰
  3. 변경된 요구사항을 반영하여 지속적인 프로토타입 개선 (프로토타입)
  4. 추가로 프로토타입에 위험분석단계(우리가 이 요구를 정말 반영해야 하는가?)까지 추가 가능 (나선형 모델)

프로토타입 모델

- 사용자의 요구사항을 충분히 분석할 목적으로 개발된 모델

- 시스템의 일부분을 시험적으로 구현하여 사용자의 피드백을 받고 이를 바탕으로 프로토타입을 개선하는 과정을 반복 (사용자 중심 모델)

- 설계 이후의 과정에서는 반복이 이루어지지 않음

주의할 점

- 프로토타입은 완전한 설계가 중요한 것이 아니라 사용자와 대화할 수 있는 정도의 설계가 필요

- 입출력 화면을 통해 사용자 인터페이스 중심의 설계 진행 (가시적인 것 중요)

- 많은 에너지를 쏟아서는 언됨

- 결과를 통해 사용자가 원하는 것인지 확인

vs 폭포수 모델

- 요구사항 정의 분석

   폭포수 모델은 요구 사항을 완전히 명세하고 다음 단계로 넘어감
   프로토타입 모델은 요구사항을 반복적으로 수용하여 완성도를 높여서 최종 프로토타입을 개발

 

- 프로토타입 설계 및 개발

   폭포수 모델은 완성된 요구사항을 바탕으로 설계 이후 바로 구현에 들어감 (프로토타입 없음)

   프로토타입은 출력 결과가 사용자가 원하는 것인지 보여주기 위해 프로토타입을 구현

 

- 사용자에 의한 평가

   폭포수 모델은 사용자의 평가를 받지 않음

   프로토타입 모델은 요구분석 단계에서 반복된 프로토타입으로 사용자에게 평가를 받음

 

- 공통점 : 요구사항이 끝난 뒤에는 돌아올 수 없음

장점

- 사용자의 새로운 요구 사항을 받을 수 있음 (사용자 중심)

- 프로토타입을 의사소통 도구로 이용 가능

- 프로토타입으로 완성품을 미리 예측해볼 수 있음 (ex 모델하우스)

- 유지보수때 필요한 노력과 시간을 줄일 수 있음

단점

- 반복되는 개발 과정으로 인해 투입 인력과 비용 산정이 어려움

- 개발자 입장

   프로토타이핑 과정을 관리/통제하기 어려움

   개발 범위가 명확하지 않아 언제 끝날지 알 수 없음 (개발자가 지침)

- 사용자 입장

   기대 심리 유발

진화적 프로세스 모델 - 나선형 모델

- 시스템 개발시 위험을 최소화하기 위해서 점진적으로 완벽한 시스템으로 개발해 나가는 모델

- 진행순서 : 요구분석 -> 위험분석 -> 개발 -> 평가

- 위험 부담이 큰 시스템 개발에 적함

요구분석

- 사용자와 미팅

- 요구 사항을 분석하고 타당성을 검토

- 각 단계에 대한 목적 수립

   목적 : 해당 cycle에서 완료되는 목표, cycle마다 새로운 목적으로 변경됨

위험분석

- 사용자와 같이 하는 것 X

- 요구 사항을 바탕으로 예측되는 위험 사항에 대한 분석

   위험 사항

    -> 개발자의 이직

    -> 요구사항의 변경

    -> 개발비의 초과

    -> 개발 기간의 부족

개발

- 구축하려고하는 시스템과 개발 환경에 맞는 개발 모델 선택

평가

- 고객이 평가후 추가 반복에 대한 여부 결정

- 고객의 추가 및 수정 요청사항 반영

장점

- 사용자 요구를 최대한 반영

- 이번 cycle에 반영 못한 요구를 다음 cycle에 반영 가능

- 위험 분석 단계가 있기 때문에 개발 후반에 갑작스럽게 발생하는 문제 때문에 프로젝트가 중단될 가능성 적음

- 대규모 시스템 개발에 적합 (Risk reduction 메커니즘)

- 반복적인 개발 및 테스트 (강인성 향상)

단점

- 요구분석, 위험분석, 개발, 평가가 반복적으로 일어나기 때문에 개발 기간이 길어질 수 있음

- 반복횟수가 많아질 수 있기 때문에 프로젝트 관리가 힘듦

- 위험 분석이 중요하기 때문에 위험 분석 전문가(ex 경험이 많은 사람)가 필요

단계적 개발 모델

- 개발자가 먼저 릴리즈 1(완전히 만들어진 것 아님)을 개발하여 사용자가 사용

- 사용자가 릴리즈 1을 사용하는 동안 릴리즈 2를 개발 (업데이트)

- 개발과 사용을 병행하는 과정을 반복

- 빠른 출시를 해야할 때 좋음 (개발 사이클이 짧은 환경)

- 비교적 개발자 친화적인 방법

단계적 개발 모델 - 점증적 개발 모델 (Incremental)

- 중요하다고 생각하는 기능부터 개발하고 점점 기능을 추가해나가는 방식

- 요구분석명세서에 기록되어있는 전체 서비스의 기능을 서브 시스템으로 분할

- 서브 시스템을 단계적으로 하나씩 릴리즈

장점

- 기능이 부족해도 일단 출시할 수 있음 (내부적 부족, 사용자는 모름)

- 사용자의 요구를 받아들이기 쉬움

- 한꺼번에 많은 비용을 들이지 않아도 됨

- 전체 시스템을 한 번에 주었을 때 조직이 받는 충격을 완화할 수 있음

- 이미 사용하고 있는 서브 시스템이 있기때문에 어떤 유형으로 개발하면 되는지 잘 알 수 있음

단점

- 처음 설계할 때부터 이후에 개발할 다른 서브 시스템과의 연관성을 고려해야 함

- 이미 개발한 서브 시스템과 새로운 서브 시스템 통합 시 어려움을 느낄 수 있음

일정 중심 설계 모델

- 사용자의 요구사항을 바탕으로 우선순위를 정하고 이를 따라서 사이클을 계획 (설계, 구현, 테스트)

- 초기 단계 : 중요한 기능을 설계, 구현하여 골격을 만듦

- 상대적으로 덜 중요한 기능을 나중에 구현 -> 일정 조정 가능

- 빠르게 출시하기 위한 모델

장점

- 소프트웨어 제품 출시 날짜가 매우 중요할 때 유용

- 목표 일정을 달성할 수 있을지 불확실할 때 유용 (우선순위에 따라 진행)

단점

- 우선순위를 정하는데 시간을 낭비할 위험 있음

- 우선순위를 낮게 설정했는데 실제로는 중요할 위험 있음

- 출시를 하고 우선 순위가 낮은 기능을 미개발할 수 있음

애자일 프로세스 모델

- 애자일(Agile) : 민첩한, 날렵한

- 진화적 프로세스 모델의 장점을 살리며 요구사항의 변화를 주기적으로 수용하여 반복적으로 개발하는 모델

- 고객의 요구사항에 민첩하게 대응하고, 그때그때 주어지는 문제를 풀어나가는 방법론

목표

- 프로세스 중심이 아닌 개개인의 소통을 중요시함

- 문서화가 중심이 아닌, 실행 가능한 소프트웨어를 중시 ( != 프로토타입 )

- 계약의 관계가 아닌, 고객과의 협력을 중시 (사용자를 많이 만남)

- 계획 중심이 아닌, 변화에 대한 민첩한 대응을 중시 

vs 폭포수 모델

- 폭포수 모델은 실행 가능한 소프트웨어를 한 번 만들면 개발이 끝나지만 애자일 프로세스 모델은 실행 가능한 소프트웨어를 계속해서 만들고 업데이트함

- 폭포수 모델은 문서화를 중요시하지만 애자일 프로세스 모델은 고객과의 협력, 빠른 시간안에 실행가능한 소프트웨어, 환경과 고객의 변화에 능동적으로 대처하는 것을 중요시함

vs 프로토타입 모델

- 프로토타입 모델의 프로토타입은 실행할 수 없는 더미 소프트웨어이지만 애자일 프로세스 모델의 제품은 실행가능한 소프트웨어임

- 프로토타입은 요구분석 단계가 지나면 요구사항에 대한 변화를 받아들일 수 없지만 애자일 프로세스 모델은 스프린트 단위로 요구 사항의 변화를 수용하면서 개발

vs 나선형 모델

- 나선형 모델은 위험 식별 및 완와에 목적을 두고 있고 애자일 프로세스 모델은 소통을 중요시 하는 모델

- 나선형 모델은 불확실성이 높은 복잡한 프로젝트에 적합하고, 애자일 프로세스 모델은 유연성과 응답성이 중요시되는 작고 간단한 프로젝트에 적합

   ( 애자일 프로세스 모델에는 위험 분석을 할 시간이 없음 )

스크럼

- 애자일 프로세스 모델 중 가장 대표적

- 팀(Team)이라는 의미

- 하나의 팀이 하나의 사람처럼 움직이고 따라줘야 성공할 수 있는 프로세스

- 너무 큰 모델에는 적합하지 않음 (사람이 너무 많으면 하나의 사람처럼 움직이기 어려움)

- 스크럼 방식

   1. 제품 기능 목록 작성

   2. 스프린트 계획 회의

   3. 스프린트 수행 (1주 ~ 4주)
   4. 스프린트 개발완료: 최종 제품 (실행 가능한)

   5. 스프린트 검토 회의 및 회고

장점

- 반복 주기 마다 제품이  생성되기 때문에 사용자와 많이 소통할 수 있음

- 프로젝트 계획에 걸리는 시간을 최소화 할 수 있음 (가까운 미래만 예측해도 됨)

- 점진적으로 테스트할 수 있음 -> 버그를 쉽게 발견할 수 있음

- 계획, 기능의 수정과 변경에 빠르게 대처할 수 있음

- 프로젝트의 진행 현황을 볼 수 있어, 목표에 맞게 변화를 시도할 수 있음

단점

- 스프린트마다 제품이 만들어져야함

- 불완전하고 예측불가능한 요소들이 있음 (반복되기 때문에)

- 빈번한 수정으로 인해 개발인력들의 피로도가 높음

- 잦은 소통과 미팅이 있기 때문에 대규모 프로젝트에 적합하지 않음

 

 

 

'소프트웨어공학' 카테고리의 다른 글

설계 (Part1)  (0) 2024.10.21
요구분석 (Part2)  (0) 2024.10.21
계획(프로젝트 계획과 관리) (part 2)  (0) 2024.10.20
계획 (프로젝트 관리와 계획) Part 1  (1) 2024.10.20
소프트웨어 공학과 개발 프로세스 (Part 1)  (1) 2024.10.19
    '소프트웨어공학' 카테고리의 다른 글
    • 요구분석 (Part2)
    • 계획(프로젝트 계획과 관리) (part 2)
    • 계획 (프로젝트 관리와 계획) Part 1
    • 소프트웨어 공학과 개발 프로세스 (Part 1)
    chlqhrud0208
    chlqhrud0208

    티스토리툴바