1.3 소프트웨어 공학이란?
: 전기전자 기술자 협회(IEEE)의 소프트웨어 공학 표준에 의하면 소프트웨어 공학이란
소프트웨어의 개발과 운영, 유지보수, 소멸에 대한 체계적인 접근 방법이라고 정의.
- 소프트웨어 엔지니어링의 목표
: 소프트웨어 개발 작업이 결과를 예측할 수 없는 주먹구구식이 아니라
과학이나 공학에 더 가깝게 하려는 노력임.
아래 설명하는 요소들이 소프트웨어 공학 분야의 발전과 기술 개발의 원동력이 됨.
1.3.1 규모
- 규모가 큰 시스템을 개발하는 일은 작은 시스템을 개발하는 방법과 다른 방법이
동원되어야 함.
-일반적으로 소규모 시스템에 사용하던 방법은 대규모 시스템에 확대 적용하기 어려움.
-대규모 프로젝트는 엔지니어링(사용하는 방법, 절차, 도구)과 프로젝트 관리 기법이 필요.
-소규모 프로젝트에서는 개발과 관리에 비정형 방법을 사용할 수 있으나,
대규모 프로젝트에는 정형화된 방법이 필요.
*소프트웨어 제품의 규모(KLOC)
-소규모: 만 줄 이하
-중규모: 십만 줄 이하
-대규모: 백만 줄 이하
-초대규모: 수백 만 줄 이상
1.3.2 품질과 생산성
: 엔지니어링 원리는 비용, 일정, 품질과 같은 변수를 중요하게 여김.
-소프트웨어 시스템을 개발하기 위한 비요은 대부분 인건비에 속함.
(사람이 많이 필요한 노동집약적인 작업이기 때문)
→ 소프트웨어 프로젝트의 비용은 MM(man-month)로 측정.
-일정은 대부분의 프로젝트에서 중요한 요소.
최근에는 제품이 시장에 나올 때까지 걸리는 기간(time to market)이 더욱 짧아지는 추세.
→ 즉 소프트웨어는 더욱 빨리 개발되어야 함.
*생산성
: MM당 생산하는 소프트웨어의 라인 수.
-모든 사업 전략을 '품질' 중심으로 짜고 있음.
고품질의 소프트웨어를 개발하는 것이 소프트웨어 엔지니어링의 또 다른 근본적인 목표.
*소프트웨어의 품질 속성
ⓐ기능성(functionality): 소프트웨어가 사용될 때 원래 정한 또는 내재된 요구를
만족시키는 기능을 제공하는 능력. (적합성, 정확성, 보안성 등)
ⓑ신뢰성(reliability): 소프트웨어가 정해진 수준의 성능을 유지할 수 있는 능력.
ⓒ사용용이성(usability): 쉽게 이해되고 배울 수 있고 사용될 수 있는 능력.
(이해용이성, 학습용이성, 운용성 등)
ⓓ효율성(efficiency): 사용되는 자원의 양에 따라 적절한 성능을 제공할 수 있는 능력.
ⓔ유지보수성(maintainability): 정정, 개선, 적응시킬 목적으로 수정될 수 있는 능력.
(변경용이성, 시험용이성, 확장성 등)
ⓕ이식성(portability): 별도의 작동이나 수단 없이 다양한 환경에서 적응될 수 있는 능력.
(적응성, 설치용이성 등)
-품질은 많은 의미가 담긴 다차원 개념.
→소프트웨어 품질은 하나의 숫자로 축약할 수 없음.
→품질 개념은 프로젝트마다 다름.(프로젝트마다 개벌 전에 품질 목표를 설정하여야 함)
-일반적으로 '신뢰성'이 소프트웨어 품질의 기준을 대표함.
-품질 측정 방법 중 한가지는 출시된 소프트웨어의 단위크기(일반적으로 천 줄, KLOC)당 결함의 수.
*결함
: 소프트웨어가 고장 나게 하거나 출력이 바르지 않게 하는 문제.
1.3.3 일관성과 재현성
: 어떻게 하면 성공적인 결과가 되풀이 될 수 있고 품질과 생산성에 일관성을 가지게 하느냐.
-사용하는 방법이 프로젝트 전체에 반복 적용되어 생산된 소프트웨어의 품질에 일관성이 있어야 함.
-소프트웨어 개발 기관은 일관된 품질을 일관된 생산성으로 만들기 원함.
-ISO 9001과 CMM(Capability Maturity Model)은 기관이 방법론을 표준화 하고 일관되게
사용할 것을 권장하고 있음.
1.3.4 변경
: 오늘날 비즈니스 환경 변화가 매우 빨라 소프트웨어도 변화의 흐름을 따라갈 것을 요구.
-소프트웨어는 변경을 어렵게 하는 물리적인 부분이 없기 때문에 변경하기 쉽고 소프트웨어에서
더 많은 변경이 일어날 것으로 예상됨.
-변경은 소프트웨어 공학의 중요한 성장 요인.
[출처]소프트웨어공학론(최은만 저, 정익사)
'Software Engineering > 소프트웨어공학론' 카테고리의 다른 글
1.4 소프트웨어 공학의 접근 방법 (0) | 2019.03.16 |
---|---|
1.2 소프트웨어 공학의 필요성 (0) | 2019.03.12 |
1.1.2 소프트웨어와 시스템 (0) | 2019.03.11 |
1.1.1 소프트웨어의 유형 (0) | 2019.03.06 |