본문 바로가기

IT개념/소프트웨어공학

[소프트웨어 공학] 1-2. 소프트웨어 개발 프로세스의 세부 단계

728x90

소프트웨어 공학

소프트웨어 공학이란?

  • 하드웨어의 빠른 발전은 사용자 요구 증가, 불 만족 등 문제 발생
  • 이러한 문제점이나 위기를 극복하기 위한 학문
  • 소프트웨어 개발 과정에 공학적인 원리를 적용하여 소프트웨어를 개발
  • 최소 비용 고품질 개발을 위해 모든 도구, 방법론을 총칭
  • 과학적인 지식을 컴퓨터 프로그램의 설계와 제작에 응용
    (이를 개발, 운영, 유지 보수하는데 필요한 활동을 문서화)

소프트웨어 공학의 접근법

즉흥적인 개발의 문제점

  • 개발 지연과 예산 초과
  • 낮은 품질
  • 유지보수 곤란
  • 재작업

접근법

  • 개발, 운영, 유지보수, 소멸에 대한 체계적인 접근 방법
  • 일회성이 아닌 반복 사용이 가능한 의미
  • 결과를 예측할 수 없는 주먹구구식이 아닌 엔지니어링 기법을 도입하려고 함
  • 유사한 소프트웨어를 만들 수 있음

소프트웨어 엔지니어링 기법

  • 소프트웨어 개발 프로세스: 시스템에 대한 비전과 개념을 목표로 컴퓨터 환경에 실행되는 소프트웨어로 바꾸는 작업
  • 품질 보증 SQA: 개발 작업이 적절히 수행되었는지 확인, 산출물이 요구와 일칳라는지 검증
  • 프로젝트 관리: 개발 품질보증 작업을 관리하고 감독하며 프로젝트 관리

소프트웨어 공학의 목표

  1. 개발 어려움 해결, 복잡도 낮춤 (대규모 프로젝트는 복잡함)
  2. 효율적 개발을 통한 생산성 향상 (표준화 작업으로 효율성 높임)
  3. 고품질 소프트웨어 제품 생산 (사용자 만족, 정상작동 신뢰성 보장)
  4. 비용 최소화 (개발자 인건비가 매우 높음)
  5. 개발 기간 단축 (계획 없이 하면 시간을 낭비할 수 있음)
  6. 대규모 프로젝트 관리 (규모가 큰 프로젝트는 단기간 구축할 수 없음)

소프트웨어 공학 기본 원칙

  1. 소프트웨어 구축을 위한 방법, 도구를 제공
  2. 소프트웨어 구축 방법에 대한 자동, 반자동 자원을 제공
  3. 방법과 도구를 이용하여 소프트웨어 합리적으로 개발하고 접속
  4. 현대적인 구축 기술 계속 적용
  5. 개발된 소프트웨어가 최상의 품질을 유지하도록 지속 검증
  6. 관련 사항을 문서화 하여 명확성을 유지
  7. 비용을 최소화한다
  8. 컴퓨터 이용 효율, 정보를 데이터 베이스화 한다
  9. 언어와 알고리즘 최신 동향을 주기적으로 파악한다.
  10. 바이러스 예방을 통해 시스템 안전을 확보한다.

객체지향 소프트웨어 공학

  • 1980년 C++ 보급되며 객체지향 소프트웨어를 설계하기 위한 방법론이 요구됨
  • UML

순차적인 프로세스는 요구 변경이 어려워 극복하기 위해 객체지향 프로세스가 제안됨, 작업 단게를 명시하고 작업을 수행하기 위해 어던 단계를 밟아야 하는지 나타냄

언제 무엇을 할 것인지 개발 작업의 순서와 결과물들을 정의함

최신 소프트웨어 공학의 핵심 기술

  • 추상: 문제 핵심을 개괄적으로 표현
  • 분석과 설계 비법: 설계 의도와 아이디어를 표현할 수 있는 표준 바업
  • 사용자 인터페이스 프로토타이핑: 사용자에게 시스템을 미리 보여주어 요구사항 일치하는지 점검
  • 소프트웨어 구조: 각 컴포넌트가 어떤 역할을 담당하며 인터페이스를 나타낸 것
  • 소프트웨어 프로세스: 개발하는 절차


소프트웨어 개발 생명주기(SDLC)

  • 계획 단계에서 유지보수 까지 일어나는 일련의 과정
  • 개발된 소프트웨어는 계속 변경되고 기능이 추가되어 쓰이다가 소멸됨
  • 소프트웨어를 개발하는 절차 및 개발 단계의 반복

소프트웨어 생명주기의 역할

  • 사용자와 개발자간 공동 의식을 가질 수 있음
  • 소프트웨어 개발의 기본 골격으로 개발 진행의 파악이 용이함
  • 개발된 소프트웨어 관리 하기 용이함
  • 용어 및 기술 표준화가 가능함

소프트웨어 개발 단계

  1. 계획
  2. 요구분석
  3. 설계
  4. 구현
  5. 테스트
  6. 유지보수
  7. 품질 관리
  8. 프로젝트 관리

정의 단계

  • 사용자 요구를 정의
  • 타당성 검토: 기술적, 경제적, 법적 타당성
  • 프로젝트 계획: 개발하는데 필요한 모든 자원, 비용을 준비
  • 요구 분석: 개발할 소프트웨어 문제 영역을 사용자에게 얻어내어 분석

개발 단계

  • 소프트웨어를 만드는 단계
  • 설계: 절차 구조, 알고리즘, 자료구조, 구조도 등 작성하여 프로그램을 쉽게 구현할 수 있도록 준비
  • 구현(코딩): 코딩 + 번역
  • 검사: 오류를 찾아 수정하는 단계

유지보수 단계

  • 개발된 소프트웨어의 품질을 유지하기 위한 노력
  • 많은 시간과 비용이 투입

1단계: 계획단계

  • 프로젝트에서 가장 먼저 하는 일
  • 개발 비용 산정: COCOMO모델, 기능점수(FP) 모델
  • 일정 계획: 작업분할구조도(WBS), CPM
  • 위험 관리
  • 최종 산출물: 기획서, 간트차트 등

2단계: 요구분석 단계

  • 기존 시스템 문제점 파악 → 요구사항 도출 → 다이어그램 작성
  • 개발 방법론에 따른 표현 도구
  • 구조적 방법론: DFD, DD, Mini Spec
  • 정보공학 방법론: E-R 다이어그램
  • 객체지향 방법론: UML 유스케이스 다이어그램
  • 최종 산출물: 요구분석 명세서

3단계: 설계 단계

  • 분석단계에서 표현한 산출물을 통해 코딩할 수 있는 수준으로 구체화
  • 설계 원리: 분할 정복, 추상화, 단계적 분해, 모듈화, 정보은닉
  • 소프트웨어 아키텍처 설계, 객체지향 설계, 디자인 패턴
  • 모듈 평가 기준: 응집도와 결합도
  • 데이터 중심 형 모델, 클라이언트-서버모델, mvc등

4단계: 구현단계

  • 프로그램을 작성
  • 표준 코딩 규칙 (명칭, 소스형식, 주석, 변수 선언 자료형, 상수..등)

5단계: 테스트 단계

  • 품질의 이상 유무에 대한 여러가지 테스트 가능
  • 제품을 출시하기 전 여러 테스트 기법을 사용하여 오류를 찾아냄
  • 테스트의 절차
    테스트 계획, 테스트 케이스 설계, 테스트 실행 및 측정, 결과 분석 및 평가, 오류 추적 및 수정

6단계: 유지보수 단계

  • 사용자가 소프트웨어를 사용하다 추가, 변경, 요구를 하면 조치를 취함
  • 수정 유지보수, 적용 유지보수, 기능 보강 유지보수, 예방 유지보수

7단계: 품질 관리 단계

  • 개발된 소프트웨어가 사용자 요구사항에 얼마나 만족하는지 점검
  • 미굼 품질 보증 연구서에 11가지 품질목표를 설정

8단계: 프로젝트 관리 단계

  • 프로젝트가 예정된 기간과 주어진 비용 안에서 요구하는 품질을 만족시키도록 프로젝트가 시작될 때부터 끝날 때 까지 관리

자원 관리, 리스크 관리, 프로젝트 수행과 모니터링