프로세스 (1) - 프로세스란 무엇인가?

소프트웨어공학

2020. 4. 14. 01:06

1. Development Process

  • 소프트웨어를 개발하는 과정(작업 순서)를 의미함
  • 순서의 제약이 있는 작업의 집합을 말함. 이는 높은 품질과 생산성이 목표임
  • 실제로 제품의 생산성과 품질이 좋은 그룹은 그렇지 못한 그룹과 프로세스 차이가 매우 큼
  • 만약 프로세스 없이 개발한다면? → code & fix의 무한 반복

[그림] Process 없이 개발한다면? → Code & fix

 

2. 프로세스 (Process) VS 방법론 (Methodology)

1) 프로세스 (Process) : 커다란 틀을 마련하는 인터페이스

  • 개발의 단계적인 작업틀을 정의
  • 무엇을 하는가에 중점을 둠
  • 패러다임에 독립적
  • 각 단계가 다양한 방법론으로도 실현가능
  • e.g. 폭포수, 나선형, 프로토타이핑, Unified, 애자일

 

2) 방법론 (Methodology) : 인터페이스의 각 단계를 구현하는 방법

  • 프로세스의 각 단계(컴포넌트)를 실제로 실현하는 방법
  • 어떻게 하는가에 중점을 둠
  • 패러다임에 종속적임
  • 프로세스 각 단계의 절차, 기술, 가이드라인을 제시
  • e.g. 구조적설계(절차형), 객체지향(객체지향형), 컴포넌트기반, 애자일

 

3. Software Process

[그림] 소프트웨어 개발 프로세스

  • 각 프로세스 모델별로 컴포넌트 프로세스(대분류)가 있고, 컴포넌트마다 부프로세스(세부작업)가 있음.
  • 각 컴포넌트 단계(계획, 요구분석, 설계, 구현, 테스팅, 유지보수)의 목적은 모두 다름
  • 그러나 실제 필드로 가면 대부분 설계, 요구분석, 테스팅 등의 중요한 과정들이 많이 생략되곤함.
  • 이는 실제 건축, 기계 설계등과는 다르게 구조의 복잡함이 당장에 눈 앞에 보이지 않기 때문임.
  • 실제로 대규모 소프트웨어를 개발할 때 이런 과정을 생략하면 큰 문제가 생길 가능성이 높음

 

4. Process Model & Process Specification

  • 프로세스 모델 (Model) : 해당 프로세스 모델의 전반적인 사항 (폭포수, 애자일 등) 
  • 프로세스 명세 (Specification) : 해당 모델을 기반으로 하여 실제 프로젝트에 적용해 명세화 한 것

 

5. Process의 종류

[그림] Process의 종류

1) 프로덕트 엔지니어링 프로세스 : 제품을 생산하기 위한 프로세스들

  • 개발 프로세스 : 개발에 사용될 프로세스, 위에서 본 폭포수, 애자일 등의 프로세스임 (개발팀)
  • 프로젝트 관리 프로세스 : 개발하기 이전에 조직을 구성하고 예산을 추정하는 등의 프로세스 (프로젝트 매니저)
  • 형상관리 프로세스 : 여러사람이 구현하면 여러 버전이 나오기 때문에 이를 관리하기 위한 프로세스 (QA팀)

 

2) 프로세스 관리 프로세스 : 위의 프로덕트 엔지니어링 프로세스들을 관리하기 위한 프로세스

 

6. Process 정의하기

[그림] 프로세스 정의하기

  • 각 단계의 입력(요구사항)과 출력(산출물)을 정의함
  • 각 단계의 작업의 수행 방법과 검토 방법을 정의함

 

7. 좋은 Process의 특징 (결예변테)

  • (1) 결함제거 : 결함을 제거할 때 비용이 적게 드는 프로세스가 좋은 프로세스임 (아래 그림은 각 개발 단계에서 변경이 발생했을 때, 드는 비용을 나타낸다) 
  • (2) 예측 가능성 : 프로젝트에 필요한 기간이나 인력의 오차 발생시 예상한 범위 내라면 좋은 프로세스임. 즉 이런식으로 프로젝트에 필요한 자원(기간, 인력) 등이 예상 가능하다면 좋은 프로젝트라고 할 수 있음.

[그림] X축 : 프로젝트 / Y출 : 수행기간 / 점선 : 예측범위 내의 오차

  • (3) 변경 지원 : 중간에 요구사항, 설계, 구현 등이 변경되었을 때, 변경하기 쉬운 프로세스라면 좋은 프로세스임

[그림] 개발 프로세스 후반으로 갈 수록 '변경'의 파급효과가 매우 커진다.

 

8. Reference

 

소프트웨어공학 개론

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

www.kocw.net