소프트웨어 공학의 등장 배경
소프트웨어의 위기
1968년 NATO 소프트웨어 공학 컨퍼런스에서 등장한 소프트웨어의 위기
라는 용어는 소프트웨어 공학이라는 학문 분야가 등장하게 된
배경을 설명하는 용어이다. 소프트웨어의 위기란, 소프트웨어의 발전 속도가 하드웨어 기술의 발전 속도보다 더딘 상황과, 소프트웨어에 대한 요구사항의 다양화, 복잡화로 인해 발생하는 문제들을 일컫는다.
소프트웨어의 위기는 아래와 같은 사례들을 일컫는다.
No | 소프트웨어 위기 현상의 사례 |
---|---|
1 | 개발 일정이 계획보다 지연되는 경우 |
2 | 개발 비용이 초과되는 경우 |
3 | 제품의 신뢰도가 결여되는 경우 |
4 | 요구사항, 명서를 충족하지 못하는 경우 |
5 | 품질 저하와 유지보수에 어려움이 생기는 경우 |
그리고 이러한 소프트웨어 위기 현상의 원인은 아래와 같다.
No | 소프트웨어 위기 현상의 원인 |
---|---|
1 | 소프트웨어 엔지니어(소프트웨어 공학을 훈련 받은) 인력의 부족 |
2 | 소프트웨어에 대한 경영층의 인식 부족 |
3 | 방법론 및 지원 도구의 부재 |
4 | 소프트웨어 자체의 복잡성 증가 |
5 | 위 원인들에 따른 개발 생산성의 저하 |
이러한 원인들을 해결하기 위해 소프트웨어 공학이라는 학문이 등장했다.
소프트웨어 공학의 정의
소프트웨어 공학의 다양환 정의
소프트웨어 공학에 대해서는 다양한 정의가 존재하지만, 그 중 소프트웨어 공학의 시초가 되며 아직까지 소프트웨어 공학을 정의하는 틀이 되는 정의는 NATO 컨퍼런스의 바우어 교수의 정의이다. "신뢰성 있고 요구기능을 효율적으로 수행하는 소프트웨어를, 경제적으로 생산하기 위해, 건전한 공학적 원리와 방법을 만들고 사용하는 것."
구분 | 정의 |
---|---|
바우어 교수 | 신뢰성 있고 요구기능을 효율적으로 수행하는 소프트웨어를, 경제적으로 생산하기 위해, 건전한 공학적 원리와 방법을 만들고 사용하는 것. |
IEEE 표준 용어집 | 소프트웨어의 개발, 운영, 유지보수에 체계적이고 제어가능하며 정량화된 접근 방법을 적용하는 것. 즉, 소프트웨어 개발에 공학 기술을 적용하는 것. |
기타 | 인간에게 유용한 소프트웨어 제품을 만드는 과정에 과학적 지식을 적용함으로써 실제적 문제의 비용 효율적 해결책을 다루는 일 |
소프트웨어 공학의 유래
-공학 : 결과물을 생산하기 위해 지식이나 경험의 적용을 연구하는 분야
-소프트웨어 공학 : 고품질 소프트웨어의 경제적이고 빠른 생산과 유지보수를 위한 연구 분야
-또한 소프트웨어 공학이란 소프트웨어 위기 현상을 부각하고, 해결책으로 표현하기 위해 만들어진 용어이다.
소프트웨어 공학 개요
소프트웨어 개발 시 고려 사항
-소프트웨어 개발이 단순 코드의 생성을 넘어, 요구사항 명세, 설계, 프로젝트 관리 등 통합적인 문제라는 인식이 필요함.
-개발 프로세스와 프로젝트 관리는 코드의 신뢰성, 유지보수성 및 비용에 큰 영향을 미치는 작업이므로, 이들에 대한 중요성을 인식해야 함.
-따라서 개발의 효율화(기간 최소화, 재작업 최소하)를 위해 초기 요구사항 명세화 작업에 노력을 기울여야 하며, 향후 유지보수와 재사용성을 우해 변경이나 재사용을 염두에 두고 작업을 진행해야 한다.
소프트웨어 공학 환경
소프트웨어 공학 환경
이란 중규모 이상의 소프트웨어 시스템을 만들 때 맞딱뜨리는 영향력과 보이지 않는 어려움에 맞서, 논리적으고 질서 있으며 관리 가능한 소프트웨어 시스템의 진화를 이루기 위한 전체적인 환경을 말한다.
소프트웨어 공학 원리에 기초해 방법과 기술이 만들어지며, 이러한 방법과 기술을 토대로 방법론이 만들어지며, 방법론에 기초하여 도구가 만들어지게 되며 이를 도식화 하면 아래와 같다.
구성 | 설명 |
---|---|
소프트웨어 공학 원리 | 소프트웨어 프로세스와 제품의 바람직한 모습을 기술하는 일반적이고 추상적인 설명 예 : 추상화, 분할정복, 계측적 조직의 원리 요리를 예로 들면, 맛이나 영양에 대한 일반 상식, 일반론 등. |
방법과 기술 | 단위 행위를 통제하는 체계적이고 일반적인 가이드라인 요리를 예로 들면, 채소를 어떻게 씻어야 한다. 칼질을 어떻게 해야 한다. |
방법론 | 방법과 기술들의 조합으로 문제 해결을 위해 정해진 프로세스 안에서 조직화한 것 프로세스와 방법을 함께 기술한 것. 요리를 예로 들면, 레시피. |
도구 |
소프트웨어 프로세스 모델
모델이란 어떠한 문제 해결을 위한 알고리즘이나 방법을 추상화(일반화)하여 표현한 것을 뜻한다.
소프트웨어 프로세스 모델이란, 소프트웨어의 생산과 진화 과정, 즉 소프트웨어 프로세스를 추상화해 표현한 것으로, 생명주기 모델이라고 할 수 있다.
소프트웨어 프로세스란 시스템의 개념화, 요구사항 정의, 설계 그리고 구현에 이르는 전이 과정을 표현한 것으로, 좋은 프로세스 모델은 이러한 전이 과정에서 생기는 문제를 최소화하고, 공통 개발 프레임워크를 제공해 생산성을 향상시키며, 개발자 간 공통의 문화와 공통의 기술을 제공하는 것이라고 정의할 수 있다.