본문 바로가기

개발 과정

소프트웨어 개발 순서 1단계 - 계획하기

반응형

소프트웨어 공학이란?

먼저 소프트웨어 개발 순서를 따지기 전에 소프트웨어 공학이란 무엇인지? 알아야 합니다! 그럼 소프트웨어 공학이란 무엇일까요?

소프트웨어 공학의 정의를 보면 소프트웨어 공학이란 소프트웨어를 개발하기 위하여 체계적으로 접근하고 원리를 적용하는 것이다. 라고 합니다.

말이 조금 어려운데요, 쉽게 말해서 체계적이란 것은 반복 사용 가능하다는 것을 의미하고 원리는 말그대로 원리를 의미하겠죠?

즉 우리는 소프트웨어 공학을 이용하면, 소프트웨어를 개발할 때 반복 사용가능한 어떤 원리를 이용해 개발과정을 따를 수 있다는 겁니다!

그럼 왜 우리는 이런 개발과정을 따라야 할까요? 한번 생각해봅시다.

소프트웨어 공학의 장점

위에서 이야기 했듯이 개발과정을 따르면 다양한 장점이 존재합니다.

  1. 소프트웨어의 품질이 좋아집니다!
  2. 소프트웨어 개발 할 때 비용 예측이 가능해집니다.
  3. 소프트웨어 개발 시 일정을 계획할 수 있습니다.

이외에도 다양한 장점이 존재합니다!

소프트웨어 공학의 예시!

개발자 분들의 경우 자신들의 코드의 구조가 좋은지 나쁜지 항상 고민 되실텐데요, 이 때 흔히들 스파게티 코드 같다구 하죠. 이 때 소프트웨어 공학을 알게되면 조금 더 구조적으로 코드를 만들 수 있습니다!

일반적인 사람들의 경우 개발자 분들이 사람들에게 설명할 수 있는 어떤 것이 생기는 거에요! 그 어떤 것은 블로그를 써 나가면서 설명할테니 따라와주세요!

따라서 우리는 소프트웨어 공학을 이용하는거죠! 그럼 이제부터 그 첫번째 단계인 계획하기 단계부터 시작해볼까요! 잘 따라오시면, 소프트웨어에 대한 완벽한 설계서를 만드실 수 있을겁니다!

  • 아무튼 소프트웨어 공학에 대해서는 여기까지만 이야기 하고, 진짜 소프트웨어 개발 단계에 대해 이야기 해볼게요!

소프트웨어 개발 계획하기!

  • 자 우리는 소프트웨어를 개발하기 위해 정해야 할 것들이 많습니다! 그 중 첫번째로 해야 할 것이 어떤 소프트웨어를 개발할지에 대해서 정해야 합니다! 말이 웃긴데, 더 자세히 이야기 하면, 내가 지금 개발하는 소프트웨어를 왜 어떤 목적때문에 개발하려고 하는지? 정해야 합니다!

1단계 프로젝트 가치 알아보기!

  • 프로젝트에 의해 얻는 직접적인 가치와 간접적인 가치를 생각해 볼 필요가 있어요. 내가 하는 프로젝트가 예를 들어 매출에 어떤 영향을 미치는지? 사회적으로 어떤 영향을 미치는지 여러 방면에서 생각해 볼 필요가 있다고 합니다! 사실 결국에는 소프트웨어 품질, 들어가는 비용, 들어가는 시간 때문에 생각해보자는 거니까 꼭 한번 생각해봅시다!

2단계 가치를 탐색했다면? -> 할 일 작성하기!

  • 가치를 탐색했다면, 프로젝트에 대한 목표와, 범위가 정해 졌을거에요! 그럼 이제 프로젝트를 만들기 위해 할 일을 작성해야 합니다! 보통 일정을 짜기 위해서 WBS를 작성합니다!
  • WBS (Work Breakdown Structure)란? 해야할 일을 정리한 것을 말합니다! 좀 더 자세히 이야기 하면 해야할 일들에 대한 의존관계를 따질 수 있습니다! 다음 표와 같이 작업의 의존 관계를 표시해 주는 거에요!
작업 선행 작업 소요기간(일)
A - 8
B - 15
C - 15
D A 10
E A, B 5
F E 20
G C 25
H F, G 15

3단계 위와 같이 표를 작성했다면? -> CPM(Critical Path Methond) 네트워크를 작성할 수 있어요!

CPM 네트워크는 작업을 노드와 간선으로 만든 그림이에요! 다음 그림을 보면 쉽게 이해할 수 있어요!

  • 이렇게 CPM네트워크를 보면 어떤 작업이 프로젝트 일정에 가장 큰 영향을 주는지 알 수 있어요!

위 그림에서는 S -> B -> E -> F -> H -> 완성 경로가 가장 긴 경로에요 이런 경로를 임계경로라고 한답니다!

4단계 CPM네트워크를 그렸다면? -> 간트 차트 작성하기!

  • 이제 우리는 일정을 계획할 수 있어요! CPM네트워크로 간트차트를 그릴 수 있답니다!
  • 간트차트는 일정을 관리하는 엑셀 차트라고 생각하시면 됩니다!
  • 네이버나 구글에 검색해보시면 엑셀 다운받을 수 있으니 한번 검색해보세요!

위 사진은 제가 데이터베이스 프로젝트 할 때 만들어 보았던 간트차트입니다!

5단계 비용 예측해보기!

  • 비용 예측은 프로젝트를 수행하는데 가장 관심있는 부분이 아닐수가 없죠! 우리가 이렇게 힘들게 계획하고, 문서 작성하는 이유 중 하나가 모두 비용 문제 떄문이에요! 사람은 언제나 적정한 비용으로 물건을 사고 싶어하니까요! 자 그럼 자세히 알아보겠습니다.
  • 먼저 비용은 다양한 방법으로 구할 수 있어요! 예를 들면 어떤 전문가에게 물어봐서 개발비용을 알 수도 있고, PERT라는 계산식을 이용할 수도 있고, 그 동안 개발한 경험을 바탕으로 비용을 예측하는 알고리즘 식 방법이 있어요! 그 중 알고리즘이 가장 정확한 예측방법이겠죠? 그래서 우리는 알고리즘 식 방법을 사용해요.

알고리즘식 비용 예측방법 ( COCOMO )

  • COCOMO는 보헴이라는 어떤 유명한 사람이 만든 비용 예측 방법이에요. 한 줄로 그 방법을 표현하면 코드 라인 수에 기반해 비용을 예측합니다.우리는 이런 COCOMO에 대해서 알아볼게요.
  • 코코모 알고리즘은 친절하게도 비용 계산 식을 주고 있어요. 그 식은 다음과 같아요!
비용(노력) = A x (SIZE) ** B X M

이 때 각 알파벳의 의미는 다음과 같습니다.

  • A : 개발 기관의 특징 또는 개발 소프트웨어의 유형에 따라 달라지는 상수
  • B : SIZE(코드 수)가 커질 때 들어가는 노력이 기하 급수적으로 커짐을 나타내는 상수
  • M : 예측한 비용(노력)을 보정하기 위한 상수

따라서 우리는 위 계산식으로 비용을 예측할 수 있어요! 하지만 위 방법으로는 한계점이 있답니다. 바로 코드 수는 어떻게 측정할 것인가에 대한 거에요. 우리는 개발 계획 단계에 있기 떄문에 어떤 프로젝트의 목표만 보고 코드 수를 정확히 파악할 수 없잖아요? 그래서 이 것은 보완하는 COCOMO2를 배울거에요

알고리즘식 비용 예측방법 ( COCOMO2 )

  • COCOMO2는 위에서 말한 것처럼 코드 라인 수를 정확히 파악할 수 없어서 COCOMO를 보완시킨 거에요! 그럼 어떻게 보완 시켰는지 알아볼게요
단계 방법
응용 합성(프로토타이핑) 응용 점수 계산을 통해 비용 예측
초기 설계 기능 점수를 통해 비용 예측
설계 이후 COCOMO
  • 위 표를 보면 알 수 있듯이 단계라는 말이 있죠? 말 그대로 소프트웨어 개발 단계를 말하는 거에요 각 단계마다 방법들이 다른데 설계 이후에는 그대로 COCOMO가 사용되죠? 왜 그럴까요?
  • 그 이유는 설계 이후는 코딩 즉 구현 단계인데, 이 떄 부터 우리는 코드 수를 정확히 파악할 수 있다고 보는 겁니다! 그래서 그 이후로는 그냥 위에서 알아본 COCOMO를 써요.
  • 그럼 그 전 단계들을 봅시다!

응용 점수 구하기

  • 응용 점수는 화면에 포함된 뷰의 개수 자료 테이블의 개수에 대해 화면 복잡도를 계산하고, 보고서에 포함된 섹션의 개수와 자료 테이블의 개수를 구해서 그 복잡도를 계산해요! 그리고 마지막으로 개발자의 경험에 따라서 점수를 매겨 비용을 예측합니다!

기능 점수 구하기

  • 기능 점수는 다음 표와 같이 해당하는 것들에 대해 개수를 세고, 어떤 질의 응답 표에 따라 점수를 계산해 비용을 예측하는 방법이에요.
기능
외부 입력
외부 출력
내부 논리 파일
외부 인터페이스 파일
외부 조회

여기까지 우리는 비용 예측을 하는 방법을 알았습니다! 그럼 다음 단계로 가시죠!

6단계 팀 조직하기

  • 프로젝트에서 팀을 조직하는 것은 당연히 필요하겠죠? 정말 쉽습니다! 각자 잘하는 분야를 맡고 조직의 유형만 선택하면되요.
  1. 프로젝트별 조직
  • 프로젝트 별 조직은 말 그대로 프로젝트를 중심으로 돌아가는 조직이에요. 각 분야의 전문가들이 모여 한 프로젝트를 하는 것과 같죠.
  1. 직능별 조직
  • 직능별 조직은 직능 그러니까 어떤 직업에 대해 능력자들이 모인다고 이해하면되요. 능력자끼리 한팀이니까 그 분야에서는 일 처리가 굉장히 수준이 높겠죠? 이런 조직을 직능별 조직이라고 해요.
  1. 매트릭스 별 조직
  • 우리의 목표는 결국 프로젝트를 완성하는 것이기 때문에 직능별 조직과 프로젝트별 조직을 합쳐서 사용하면 좋겠죠? 팀을 직능별로 짜고 나서, 프로젝트를 여러개를 분할해서 팀을 돌리면 가장 효율적일겁니다!

7단계 프로젝트 관리

  • 프로젝트 관리 단계에서는 말 그대로 프로젝트를 관리하는 단계에요.
  • 프로젝트가 이상한 길로 빠지지 않게, 실패하지 않게 돕는 그런 단계인거죠. 이 단계에서는 일정을 모니터링하고(간트차트) 어닝밸류 분석, 번다운 차트 등 다양한 방법을 사용해서 프로젝트가 실패하는 것을 막는게 목표에요! 추가적으로 위험 관리라는 것을 하면서, 우리 프로젝트에 위협을 주는 어떤것을 조기에 회의를하고 막는거죠!

이렇게 각 단계별로 계획 단계에서는 어떤 작업들을 해야하는지 적어보았어요! 다음에는 계획의 다음 단계인 요구분석 단계를 적어보도록 하겠습니다!

반응형