SW설계 - SW 생명주기

soo·2023년 5월 9일
0

SW설계

목록 보기
1/1
post-thumbnail

소프트웨어 생명 주기(Software Life Cycle)란?

소프트웨어 생명 주기는 소프트웨어 개발 방법론의 바탕이 되는 것으로, 소프트웨어를 개발하기 위한 설계, 운용, 유지보수 등의 과정을 각 단계별로 나눈 것.
소프트웨어 생명 주기는 소프트웨어 개발 단계와 각 단계별 주요 활동, 활동의 결과에 대한 산출물로 표현한다.

대표적인 생명주기 모형:

  • 폭포수 모형(Waterfall Model)
    - 이전 단계로 돌아갈 수 없다는 전제하에 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하는 개발 방법론. 각 단계가 끝난 후에는 다음 단계를 수행하기 위한 결과물이 명확하게 산출되어야 하는 '선형 순차적 모형'이다.
    - '고전적 생명 주기 모형'으로도 불리며, 가장 오래되고 가장 폭넓게 사용된 전통적인 소프트웨어 생명 주기 모델.
    - 모형을 적용한 경험과 성공 사례가 많음.
    - 단계: 타당성 검토 -> 계획 -> 요구 분석 -> 설계 -> 구현(코딩) -> 시험(검사) -> 유지 보수
  • 프로토타입 모형(Prototype Model, 원형 모형)
    - 사용자의 요구사항을 파악하기 위해 실제 개발될 소프트웨어에 대한 Prototype(견본품)을 만들어 최종 결과물을 예측하는 모형.
    - 견본품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발.

  • 나선형 모형(Spiral Model, 점진적 모형)
    - 나선을 따라 돌듯이 여러번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발하는 모형.
    - 보헴(Bhoehm)이 제안한 모형으로, 폭포수 모형과 프로토타입 모형의 장점에 위험 분석 기능을 추가한 모형.
    - 개발 과정에서 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 하며, 점진적으로 개발 과정이 반복되므로 누락되거나 추가된 요구사항을 첨가할 수 있고 유지 보수 과정이 필요 없음.
    - 단계: (계획 수립 -> 위험 분석 -> 개발 및 검증 -> 고객 평가) -> 반복

  • 애자일 모형(Agile Model)
    - '민첩한', '기민함'이라는 의미로, 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기 반복을 통해 개발하는 모형.
    - 폭포수 모형과 대조적인 모형. 특정 개발 방법론이 아닌, 좋은 것을 신속하고 낭비없이 만들기 위해 고객과의 소통에 초점을 맞춘 방법론을 통칭한다.
    - 기업 활동 전반에 걸쳐 사용.
    - 대표적인 개발 모형: 스크럼(Scrum), XP(eXtreme Programming), 칸반(Kanban), Lean, 크리스탈(Crystal), 기능 중심 개발(FDD, Feature Driven Development), DSDM(Dynamic System Development Method), DAD(Disciplined Agile Delivery) ...
    - 핵심 가치:

    • 프로세스와 도구보다는 개인과 상호작용에 더 가치를 둔다.
    • 방대한 문서보다는 실행되는 소프트웨어에 더 가치를 둔다.
    • 계약 협상보다는 고객과 협업에 더 가치를 둔다.
    • 계획을 따르기 보다는 변화에 반응하는 것에 더 가치를 둔다.

스크럼(Scrum) 기법

  • 팀이 중심이 되어 개발의 효율성을 높이는 기법.

  • 팀원 스스로가 스크럼 팀을 구성(self-organizing)해야 하며, 개발 작업에 관한 모든 것을 스스로 해결(cross-functional)할 수 있어야 한다.

  • 구성원

    • 제품 책임자(PO, Product Owner):
      • 요구사항이 담긴 Backlog를 작성하는 주체.
      • 이해관계자들 중 개발될 제품에 대한 이해도가 높고, 요구사항을 책임지고 의사를 결정할 사람으로 선정.
      • 제품에 대한 테스트를 수행하면서 주기적으로 요구사항의 우선순위를 갱신함.
    • 스크럼 마스터(SM, Scrum Master):
      • 스크럼 팀이 스크럼을 잘 수행할 수 있도록 가이드 역할 수행. 팀원을 통제하는 것이 목표가 아님.
      • 일일 스크럼 회의를 주관하여 진행 사항을 점검하고, 개발 과정에서 발생된 장애 요소를 공론화하여 처리.
    • 개발팀(DT, Development Team):
      • PO와 SM를 제외한 모든 팀원. 개발자 외에도 디자이너, 테스터 등 제품 개발을 위해 참여하는 모든 사람이 대상.
      • 보통 최대 인원은 7~8명이 적당하다.
  • 개발 프로세스: 계획 -> 진행(스프린트) -> 회의 -> 검토 -> 회고
    - 제품 백로그(Product Backlog): 제품 개발에 필요한 모든 요구사항(User Story)을 우선순위에 따라 나열한 목록.
    - 스프린트 계획 회의(Sprint Planning Meeting): 제품 백로그 중 이번 스프린트에서 수행할 작업을 대상으로 단기 일정을 수립하는 회의.
    - 스프린트(Sprint): 실제 개발 작업을 진행하는 과정으로, 2~4주 정도의 기간 내에서 진행. 스프린트 백로그(Sprint Backlog)에 작성된 태스크를 대상으로 속도(Velocity)를 추정한 후 담당자에게 할당함.
    - 일일 스크럼 회의(Daily Scrum Meeting): 모든 팀원이 매일 약속된 시간에 약 15분 동안 진행 상황을 점검하는 회의로, 남은 작업 시간은 소멸 차트(Burn-down Chart)에 표시함.
    - 스프린트 검토 회의(Sprint Review): 부분 또는 전체 완성 제품이 요구사항에 잘 부합하는지 사용자가 포함된 참석자 앞에서 테스팅하는 회의.
    - 스프린트 회고(Sprint Retrospective): 스프린트 주기를 되돌아보며 정해놓은 규칙 준수 여부 및 개선할 점 등을 확인하고 기록함.

XP(eXtreme Programming) 기법

  • 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법.
  • 짧고 반복적인 개발 주기, 단순한 설계, 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것을 목적으로 함.
  • 릴리즈(Release)의 기간을 짧게 반복하면서 고객의 요구사항 반영에 대한 가시성을 높임.
  • 핵심 가치:
    - 의사소통(Communication)
    - 단순성(Simplicity)
    - 용기(Courage)
    - 존중(Respect)
    - 피드백(Feedback)
  • 개발 프로세스: 계획 -> 진행(이터레이션) -> 검사(릴리즈) -> 출시
    - 릴리즈 계획 수립(Release Planning): 부분 또는 전체 개발 완료 시점에 대한 일정을 수립하는 것. 몇 개의 스토리가 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것을 릴리즈라고 함.
    - 이터레이션(Iteration, 주기): 실제 개발 작업을 진행하는 과정으로, 보통 1~3주 정도의 기간으로 진행됨.
    - 승인 검사(Acceptance Test, 인수 테스트): 하나의 이터레이션 안에서 부분 완료 제품이 구현되면 수행하는 테스트.
    - 소규모 릴리즈(Small Release): 요구사항에 유연하게 대응할 수 있도록 릴리즈의 규모를 축소한 것.
  • 주요 실천 방법:
    • Pair Programming(짝 프로그래밍): 다른 사람과 함께 프로그래밍을 수행함으로써 개발에 대한 책임을 공동으로 나눠 갖는 환경을 조성.
    • Colletive Ownership(공동 코드 소유): 개발 코드에 대한 권한과 책임을 공동으로 소유함.
    • Teat-Driven Development(테스트 주도 개발): 개발자가 실제 코드를 작성하기 전에 테스트 케이스를 먼저 작성하여 자신이 무엇을 해야할지를 정확히 파악함. 테스트가 지속적으로 진행될 수 있도록 자동화된 테스팅 도구(구조, 프레임워크)를 사용.
    • Whole Team(전체 팀): 고객을 포함해 개발에 참여하는 모든 구성원들은 각자 자신의 역할이 있고 그 역할에 대한 책임을 가져야 함.
    • Continuous Integration(계속적인 통합): 모듈 단위로 나눠서 개발된 코드들을 하나의 작업이 마무리 될 때마다 지속적으로 통합.
    • Refactoring(리팩토링): 프로그램 기능의 변경 없이 시스템을 재구성. (목적 - 프로그램을 쉽게 이해하고 쉽게 수정하여 빠르게 개발할 수 있도록 하기 위해)
    • Small Release(소규모 릴리즈): 릴리즈 기간을 짧게 반복함으로써 고객의 요구 변화에 신속히 대응 가능.

소프트웨어 공학(SE, Software Engineering)이란?

소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문으로 , 여러 가지 방법론과 도구, 관리 기법들을 통해 소프트웨어의 품질과 생산성 향상을 목적으로 한다.

SE의 기본원칙:

  • 현대적인 프로그래밍 기술을 계속적으로 적용해야 된다.
  • 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야 한다.
  • 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야 한다.
profile
이것저것 공부하는

0개의 댓글