프로세스 (2) - 프로세스의 각 단계

소프트웨어공학

2020. 4. 14. 01:09

번외. Software Lifecycle

[그림] 소프트웨어 생명주기

  • 사람이 태어나서 성장기때 교육을 받고 장년기가 되어 경제활동을 하듯이, 소프트웨어도 생명주기가 존재한다. 
  • 개발되기전 개념화되고, 유아/성장기에 개발받고 성년기를 지나 장년기가 되면 배포되어 사람들에게 사용된다.
  • 장년기 이후에는 사람처럼 노년기가 찾아오는데, 너무 낡아서 더 이상 사용되지 않게 된다.
  • 이 중 개발 단계만 뽑아서 라이프사이클화 시킨 것을 개발 라이프사이클이라고 부른다.

 

1. 계획 단계 (Why ?)

  • 비용/기간/인력 등이 얼마나 소모되는지, 오류발생시 어떻게 대처할지 등에 대한 대답을 찾는 단계
  • 범위정하기, 비용산정, 리스크분석, 일정 계획, 관리전략 수립
  • ROI (Return of Investment) : 투자금액을 얼마나 회수할 수 있을지에 대한 것을 고려
  • 프로젝트의 대략적인 Concept을 잡는 단계라고 할 수 있음.

 

2. 요구분석 (What ?)

  • 시스템이 가져야할 기능, 능력, 조건 등을 정의하는 단계
  • 응용분야(도메인) 자체에 집중하는 단계로 분석단계에서 솔루션은 고려하지 않음
  • 솔루션 : (MySQL vs Oracle), (Java vs Python) 등을 결정하는 단계가 아님 (도메인만 집중)
  • 가장 중요하고 어려운 단계 (작은 오류가 엄청난 비용 손실로 만듬)
  • 산출물 : SRS (Software Requirement Specification) : 요구사항 명세서

[그림] 단계별 비용 손실 (요구분석 > 설계 > 구현 > ... )

 

3. 설계 단계 (How ?)

  • 분석단계에서 사용자의 요구가 기능/성능 등의 조건에 의해 모두 분석됐음.
  • 이제는 분석에 맞춰서 솔루션에 집중할 차례임 (MySQL 쓸지 vs Oracle 쓸지 등)
  • 아키텍처(모듈)와 데이터베이스 테이블 등을 설계하는 단계임 → 설계도만들기
  • UI 및 상세 설계 작업 진행
  • 산출물 : SDD (Software Design Diagram)

 

4. 구현 단계 (Do it !)

  • 프로그램 코딩과 단위테스트 진행
  • 단위테스트(Unit Test)란 해당 모듈 안에서 테스트 하는 것
  • 설계와 통합테스팅과 겹치기도 한다. → 일정을 줄일 수 있음
  • (특정 모듈이 설계가 일찍 끝나거나 구현이 일찍 끝난 경우)
  • 압력증가, 인력이 가장 많이 투입되는 작업
  • Last Minute Change (마감 직전에 갑자기 잘 안될 때) → 버전관리 필수
  • Communication Overhead (소통을 위해 시간이 반드시 소모됨)

 

5. 통합과 테스트

  • 먼저 개발된 모듈의 통합으로 시작하여 점차 완성된 모듈들을 추가함
  • 통합은 주로 개발자가 담당하고 테스트는 보통 QA가 담당
  • ◎ 단계적인 테스트 (단위, 통합, 시스템)
  • ◎ 목적중심 테스트 (스트레스, 성능, 알파, 베타, Acceptance, Usability 등)
  • → 스트레스 테스트 : 데이터, 트래픽을 과도하게 부여해서 얼마나 버티는지 테스트
  • → 성능 테스트 : 성능 그 자체, 즉 Response Time이나 Throughput을 체크하는 것
  • → 알파 테스트 : 릴리즈 전에 개발자의 환경에서 마지막 테스트 해보는 단계
  • → 베타 테스트 : 릴리즈 전에 사용자의 환경에서 처음으로 테스트 해보는 단계
  • → Acceptance 테스트 : 외주 개발시 외주가 끝나고 인수하여 승인하는 테스트
  • → Usability 테스트 : 사용하기 편리한지 테스트 하는 것 (UI/UX 등을 테스트)

 

6. 설치와 유지보수

  • 시스템 타입에 따라 설치 방법이 다름 (Web, CDROM, in-house 등)
  • Migration 정책 설정 (이전 버전 to 새 버전으로 데이터 이관)
  • 설치과정 : 개발프로젝트의 일부
  • 유지보수 : 개발프로젝트와 별개 (릴리즈 이후임)
  • 유지보수는 결함고침, 새기능추가, 성능 추가등의 작업을 말함
  • 개발팀이 아니라 유지보수 팀이 따로 있는 경우도 있음

 

7. Reference 

 

소프트웨어공학 개론

소프트웨어를 개발하고 유지보수하는 데 적용되는 체계적이며 원리적인 접근 방법을 소개한다. 소프트웨어를 개발하는 프로젝트를 계획하는 기법, 사용자의 요구를 분석하는 기법, 소프트웨어 구조를 설계하는 기법, 모듈과 사용자 인터페이스를 설계하는 기법, 코딩 스타일, 테스팅 기법, 유지보수 기법, 소프트웨어 품질 보증 활동을 다룬다.

www.kocw.net