소프트웨어 공학의 정의
소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문이다.
NATO 소프트웨어 공학 콘퍼런스 이후로 고품질 소프트웨어의 경제적이고 빠른 생산과 유지보수를 위한 전문 작업과 연구 분야로 발전되었다. 즉, 소프트웨어 위기 현상을 부각하고 해결책으로 표현하기 위해서 만든 용어.
소프트웨어 공학의 여러 정의들
NATO 바우어 교수
"신뢰성 있고 요구기능을 효율적으로 수행하는 소프트웨어를 경제적으로 생산하기 위해 건전한 공학적 원리와 방법을 만들고 사용하는 것이다."
IEEE 소프트웨어 공학 표준 용어집
"소프트웨어의 개발, 운영, 유지보수에 체계적이고 제어 가능하며 정량화된 접근 방법을 적용하는 것, 즉 소프트웨어 개발에 공학 기술을 적용하는 것."
다른 정의들
"인간에게 유용한 소프트웨어 제품을 만드는 과정에 과학적 지식을 적용함으로 실제적 문제의 비용 효율적 해결책을 다루는 일."
학자나 기관에 따라 차이가 있지만 초기 바우어 교수가 제시한 정의가 기본적 틀로 사용된다.
소프트웨어 공학을 하나의 공학 분야로 본다면 고품질의 소프트웨어를 품질, 비용, 일정 등을 고려해 효율적으로 생산하는 지식을 제공하기 위한 것이다.
소프트웨어 개발 시 고려 사항들
- 요구사항 명세, 설계, 프로젝트 관리 등 통합적 문제 인식 필요
- 개발 프로세스와 프로젝트 관리 중요
- 초기 요구사항 명세화 작업에 노력을 기울여야 함
- 재사용을 염두에 둔 작업 필요
소프트웨어 공학 계층
소프트웨어 공학의 대상은 중규모 이상의 복잡하고 중요한 소프트웨어이다. 그래서 다양한 해결 방법들을 통합적으로 다루어야 한다.
소프트웨어 공학 원리
소프트웨어 프로세스와 제품의 바람직한 측면들을 기술하는 추상적 설명. 추상화, 분할 정복, 계층적 조직의 원리 등이 해당한다.
방법과 기술
행위를 통제하는 체계적이고 일반적인 가이드라인으로 바람직한 속성을 프로세스나 제품에 포함시키기 위해 필요하다.
방법론과 도구
여러 방법들과 기술들이 정해진 프로세스 안에서 함께 묶인 것이 방법론이다. 방법론의 목적은 문제 해결을 위해 사용되어야 할 방법들과 기술들을 지정함으로써 특정 방식의 해법을 권장하는 것.
도구는 기술과 방법 그리고 방법론들의 적용을 지원하기 위해 개발된다. 즉, 소프트웨어 제품 개발에 필요한 방법들을 구현하기 위해 컴퓨터를 활용하는 것을 뜻한다.
좋은 소프트웨어란?
소프트웨어의 특성을 좌우하는 품질 기준은 두 가지가 있다.
외부 품질 - 사용자가 인지할 수 있는 품질 요소.
내부 품질 - 내부 품질 향상은 외부 품질을 개선하는데 도움을 줄 수 있다.
ex) 잘 작성된 설계 문서는 보통 사용자가 볼 수 없으나 외부 품질 개선에 반드시 필요.
소프트웨어의 신뢰도
- 사용자가 소프트웨어를 신뢰하는 정도를 의미.
- 오랜 시간 동안 치명적 오류가 없어야 하며 발생 후에도 복구되어야 한다.
- 신뢰도를 측정할 때는 MTTF로 측정한다.
소프트웨어의 정확성
- 작은 결함이 있어도 정확한 것은 아니나 신뢰도에 문제가 되지 않을 수 있다.
소프트웨어의 성능
- 지정된 시간 안에 컴퓨터 시스템이 처리할 수 있는 작업량을 의미한다.
소프트웨어의 사용성
- 효율성 있게 사용할 수 있는가의 정도.
소프트웨어의 상호운영성
- 다른 시스템과 공존하며 협력할 수 있는 능력
소프트웨어의 유지보수성
- 소프트웨어의 변경이 용이한 정도를 나타낸다. 변경을 고려하여 설계하면 전체 비용을 절감할 수 있다.
소프트웨어의 이식성
- 다른 환경에서 동작할 수 있는 능력.
검사성
- 좋은 소프트웨어의 속성을 갖추었는지 검사할 수 있나.
추적성
- 이해당사자, 요구사항, 설계 문서, 소스 코드 간의 관례를 추적할 수 있는가.
- 추적성을 높이려면 관계 정보들이 유지되어야 한다(관련성이 있는 요구사항들 파악).
학부에서 공부한 내용들을 정리하며 올립니다.
참고도서: 소프트웨어공학(김희천 저), 쉽게 배우는 소프트웨어 공학(한빛소프트)
'Study > Software Engineering' 카테고리의 다른 글
[소프트웨어공학] 폭포수 모델(waterfall model) (3) | 2020.04.07 |
---|---|
[소프트웨어공학] 소프트웨어 프로세스 개요 (2) | 2020.04.05 |
[소프트웨어공학] 소프트웨어(Software) (3) | 2020.04.03 |