1. 소프트웨어 공학이란? - 소프트웨어 공학의 정의와 개발과정

2019. 12. 27. 18:13 기타 정보/소프트웨어 공학

1. 소프트웨어 공학의 정의

1) 공학의 정의부터 살펴보자면, 인류의 이익을 위해서 과학적 원리, 지식, 도구등을 활용하여 새로운 제품, 도구등을 만드는 것이라고 볼 수 있다. 

2) 소프트웨어 공학은 인류의 이익을 위해서 소프트웨어와 관련된 원리, 지식, 도구등을 활용하여 새로운 제품, 도구등을 만드는 것이라고 볼 수 있는데, 더 학문적 개념으로 살펴보자면, 소프트웨어의 개발, 운용, 유지보수등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문이라고 볼 수 있다. 


2. 소프트웨어 공학의 개발 과정 개요

1) 계획, 요구사항 분석, 설계, 구현, 시험 및 유지 보수 과정을 거침. 

2) 소프트웨어는 여러 구성요소가 하드웨어 및 다른 요소들과 결합하여 유기적으로 상호작용하는 시스템.

3) 시스템 개발 시 우선되어야 하는 것은 프로젝트 계획, 고객과 개발회사의 계약 등이 있음


3.1 개발과정 - 프로젝트 계획 

1) 프로젝트 계획은 소프트웨어 프로젝트의 핵심 활동이며 소프트웨어 프로젝트 관리에서 가장 중요하게 여겨지는 과정. 계획은 본질적으로 미래의 변화를 준비하는 과정으로 볼 수 있음. 

2) 계획은 목표를 세우고 이를 달성하기 위해 체계적인 진행 상황 관리를 할 수 있도록 세부 행동 방안을 마련하는 것으로 프로젝트 실행과 통제의 지침이 됨.


3.2 개발과정 - 요구사항 정의 문서화 

1) 사용자의 요구사항과 시스템의 기능이 문서화되어야 함

2) 요구사항 명세서(Requirements specification)는 이 과정의 핵심 산출물. 고객과 개발 회사의 계약서로써 분석가가 고객과 함께 혹은 단독으로 만든다. 다만 프로젝트와 관계된 모든 사람들이 이해하기 쉽도록 쓰여져야 한다. 왜냐하면 추후에 발생하는 문제와 변화에 대한 책임이 명확히 규명되어야 하기 때문. 

3) 이를 위해서 요구사항 명세서에 시스템에 연관된 당사자들이 동의하여 서명하고 그 다음단계로 넘어가는 것이 일반적.


3.3 설계

1) 분석과정에서 모아진 요구사항을 설계도면에 옮기는 과정으로, 개념적 단계라고 볼 수 있는 분석과정의 다음 단계인 설계과정은 물리적 실현의 첫 단계. 

2) 시스템을 만들 때 중요하게 구분할 것이 무엇(What)과 어떻게(How to) 이다. 

3) 시스템 설계는 서브시스템들로 이루어지는 시스템 구조를 결정하고, 서브 시스템들을 하드웨어 및 소프트웨어 등의 구성요소들에게 할당. 

4) 설계는 품질에 직접적인 영향을 미치며, 설계가 제대로 되지 않으면 안정감이 없는 시스템이 만들어진다. 이는 곧 유지보수가 어렵고 조금만 변화를 가하여도 견디지 못하는 시스템이 된다는 것을 의미한다. 

5) 소프트웨어 시스템 설계 단계의 결과물은 설계문서라고 할 수 있다.


3.4 구현(Implementation) 

1) 설계의 결과를 사용자가 이용할 수 있는 모습으로 변환하는 과정으로, 프로그래밍 또는 코딩이라고 부른다. 

2) 결과물은 컴퓨터 프로그램이다. 

3) 시스템 개발 과정 중 프로그래밍에 드는 비용은 보통 20%정도. 40 - 50% 정도의 비용이 요구사항 분석과 설계 과정에 투입된다. 다시 말해서 요구사항 분석과 설계 과정은 총 과정에서 차지하는 비중이 아주 크다는 것을 알 수 있다. 

4) 소프트웨어 시스템 구현시 보통은 분석과 설계의 잘못에 의해 문제가 생기며 설계과정이 완벽하다면 시스템 구현은 상대적으로 단순하고 기계적인 과정이다. 


3.5 시험(Testing)

1) 제품의 품질 보증을 위해서 제품의 개발공정 과정마다 절차를 따라야 한다. 시험은 제품의 오류를 발견하고 수정하는 과정으로 시험단계에 드는 비용이 아까워 투입하지 않았을 때 차후에 다시 수정하는 과정에서 드는 비용은 시간이 지날수록 커질 수 있다. 다시말해서 오류는 빨리 찾을 수록 수정비용이 줄어든다는 것이다. 

2) 소프트웨어 시스템 시험은 사용자의 요구사항, 설계, 그리고 코딩의 전 과정에 대한 점검을 수행하며, 개발비용의 40%정도를 차지한다. 이 과정을 성공적으로 수행하기 위해서는 테스트 계획(Test plan)이 만들어져야 한다. 

3) 테스트 계획에는 시험 진행 단계, 시험에 사용되는 데이터 및 시험의 한계점등이 기술되어야 하며 최소한의 시간과 비용을 투자해서 최대한의 확률로 오류를 찾아낼 수 있도록 만들어져야 한다. 

4) 테스트 유형에는 총 네가지가 있다.

 - 프로그램의 기본단위인 모듈에 대한 테스트를 수행하는 단위 시험 (Unit Testing)

 - 단위 시험 후 모듈들을 통합하여 테스트를 수행하는 통합 시험 (Integration Testing)

 - 통합 시험 이후 소프트웨어와 다른 시스템 요소(하드웨어, 정보 등)들과 통합하여 시스템의 기능을 만족하는지 확인하는 시스템 시험 (System Testing)

 - 마지막으로 고객이 참여하여 고객 요구사항 만족 여부를 검증하는 인수 시험 (Acceptance testing) 


3.6 유지 및 보수(Maintenance) 

1) 제품의 유지보수는 사용중 발생하는 여러 변경사항에 대해 적응하는 활동이며 변화에 대비하는 과정으로 4가지 활동으로 요약될 수 있다.

 - 잘못된 것을 수정하는 유지보수

 - 시스템을 새 환경에 적응시키는 유지보수

 - 새로운 기능을 추가하는 유지보수

 - 미래의 시스템 관리를 위한 유지보수 

2) 소프트웨어 시스템의 유지보수를 위해서는 시스템 변경에 의한 요구분석, 설계, 구현, 시험이 다시 한번씩 더 필요하게 되고 관련 문서들의 수정까지도 필요하기 때문에 체계적으로 관리하는 기능이 필요하다.