소프트웨어 공학이란 무엇입니까? 정의, 기본, 특성
소프트웨어 공학이란 무엇입니까?
소프트웨어 엔지니어링은 사용자 요구 사항을 분석한 다음 해당 요구 사항을 충족하는 소프트웨어 응용 프로그램을 설계, 구축 및 테스트하는 프로세스로 정의됩니다.
소프트웨어 엔지니어링의 다양한 정의를 살펴보겠습니다.
- IEEE는 표준 610.12-1990에서 소프트웨어 엔지니어링을 소프트웨어의 개발, 운영, 유지 관리를 위해 체계적이고 규율적이며 계산 가능한 접근 방식을 적용하는 것으로 정의했습니다.
- 프리츠 바우어(Fritz Bauer)는 이를 '표준 공학 원리를 확립하고 사용하는 것'이라고 정의했습니다. 실제 기계에서 안정적이고 효율적으로 작동하는 소프트웨어를 경제적으로 확보하는 데 도움이 됩니다.
- Boehm은 소프트웨어 엔지니어링을 '과학적 지식을 컴퓨터 프로그램의 창의적 설계 및 구축에 실질적으로 적용하는 것'으로 정의합니다. 여기에는 개발, 운영 및 유지 관리에 필요한 관련 문서도 포함됩니다.
왜 소프트웨어 공학인가? 소프트웨어 위기와 그 해결책
소프트웨어 위기란 무엇이었는가?
- 많은 소프트웨어 프로젝트가 실패했던 것은 1960년대 후반이었습니다.
- 많은 소프트웨어가 예산을 초과했습니다. 출력은 유지 관리 비용이 많이 드는 신뢰할 수 없는 소프트웨어였습니다.
- 더 큰 소프트웨어는 어렵고 유지 관리 비용이 꽤 많이 들었습니다.
- 고객의 증가하는 요구사항을 충족시킬 수 있는 소프트웨어가 많지 않습니다.
- 하드웨어 성능이 향상될 때마다 소프트웨어 프로젝트의 복잡성도 커졌습니다.
- 새로운 소프트웨어에 대한 수요는 새로운 소프트웨어를 생성하는 능력에 비해 더 빠르게 증가했습니다.
위의 모든 문제는 '소프트웨어 위기'로 이어집니다.
솔루션
문제에 대한 해결책은 체계화되지 않은 코딩 작업을 소프트웨어 엔지니어링 분야로 전환하는 것이었습니다. 이러한 엔지니어링 모델은 회사가 운영을 간소화하고 고객 요구 사항을 충족하는 소프트웨어를 제공하는 데 도움이 되었습니다.
- 1970년대 후반에는 소프트웨어 엔지니어링 원리가 널리 사용되었습니다.
- 1980년대에는 소프트웨어 엔지니어링 프로세스가 자동화되고 (CASE) 컴퓨터 지원 소프트웨어 엔지니어링이 성장했습니다.
- 1990년대에는 ISO 9001과 마찬가지로 프로젝트 품질 및 프로세스 표준의 '관리' 측면이 더욱 강조되었습니다.
소프트웨어 공학이 인기 있는 이유는 무엇입니까?
소프트웨어 엔지니어링이 인기를 얻는 중요한 이유는 다음과 같습니다.
- 대형 소프트웨어 – 실생활에서는 집이나 건물을 짓는 것보다 벽을 쌓는 것이 훨씬 편합니다. 마찬가지로 소프트웨어의 크기가 커질수록 소프트웨어 엔지니어링은 소프트웨어를 구축하는 데 도움이 됩니다.
- 확장성- 소프트웨어 개발 프로세스가 과학적이고 공학적인 개념에 기반을 둔다면, 기존 소프트웨어를 확장하여 새로운 소프트웨어를 재생성하는 것이 더 쉽습니다.
- 적응성: 소프트웨어 프로세스가 과학과 공학을 기반으로 할 때마다 소프트웨어 엔지니어링의 도움으로 새로운 소프트웨어를 쉽게 다시 만들 수 있습니다.
- 비용- 하드웨어 산업은 그 기술을 보여주었고, 대량 생산으로 인해 컴퓨터와 전자 하드웨어의 비용이 낮아졌습니다.
- 역동적인 성격– 소프트웨어의 항상 성장하고 적응하는 특성. 사용자가 작업하는 환경에 따라 달라집니다.
- 품질 경영: 고품질의 소프트웨어 제품을 제공하기 위해 더 나은 소프트웨어 개발 방법을 제공합니다.
소프트웨어 공학과 다른 학문의 관계
소프트웨어 엔지니어링이 다른 분야와 어떻게 관련되어 있는지 살펴보겠습니다.
- 컴퓨터 과학 : 전기공학은 주로 물리학에 의존하므로 소프트웨어의 과학적 기초를 제공합니다.
- 경영 과학: 소프트웨어 엔지니어링은 기술적, 관리적 통제가 모두 필요한 노동 집약적인 작업입니다. 따라서 경영학 분야에서 널리 사용됩니다.
- 경제학: 이 분야에서 소프트웨어 엔지니어링은 자원 추정 및 비용 관리에 도움이 됩니다. 컴퓨팅 시스템을 개발해야 하며, 데이터는 주어진 예산 내에서 정기적으로 유지 관리되어야 합니다.
- 시스템 공학: 대부분의 소프트웨어는 훨씬 더 큰 시스템의 구성 요소입니다. 예를 들어 산업 모니터링 시스템의 소프트웨어나 비행기의 비행 소프트웨어가 있습니다. 이러한 유형의 시스템을 연구하려면 소프트웨어 엔지니어링 방법을 적용해야 합니다.
소프트웨어 엔지니어링의 과제
소프트웨어 엔지니어가 직면한 몇 가지 중요한 과제는 다음과 같습니다.
- 우주, 항공, 원자력 발전소 등과 같이 안전이 중요한 분야에서는 생명이 위험하기 때문에 소프트웨어 오류로 인한 비용이 엄청날 수 있습니다.
- 빠른 처리 시간에 대한 시장 요구가 증가했습니다.
- 새로운 애플리케이션에 대한 소프트웨어 요구 사항의 증가로 인한 복잡성을 처리합니다.
- 다양한 소프트웨어 시스템이 서로 소통해야 합니다.
소프트웨어 제품의 속성
모든 소프트웨어 제품의 특성에는 제품을 설치하고 사용할 때 표시되는 기능이 포함됩니다.
제품이 제공하는 서비스가 아닙니다. 대신, 제품의 동적 동작 및 제품 사용과 관련이 있습니다.
이러한 속성의 예는 다음과 같습니다.
Efficiency, reliability, robustness, maintainability, etc.
그러나 이러한 특성의 상대적 중요성은 소프트웨어 시스템마다 다릅니다.
제품 특성 | 기술설명 |
---|---|
유지 보수성 | 소프트웨어는 변화하는 고객의 요구를 충족할 수 있도록 발전해야 합니다. |
믿을 수 있음 | 신뢰성에는 다양한 특성이 포함됩니다. 신뢰할 수 있는 소프트웨어는 시스템 장애 시 물리적, 경제적 피해를 초래해서는 안 됩니다. |
효율성: | 소프트웨어 응용 프로그램은 메모리 및 프로세서 주기와 같은 시스템 리소스를 과도하게 사용해야 합니다. |
편의성 | 소프트웨어 애플리케이션에는 특정 UI와 문서가 있어야 합니다. |
위의 속성을 최적화하는 것은 매우 어렵습니다. 예를 들어, 더 나은 UI를 제공하면 시스템 효율성이 저하될 수 있습니다.
좋은 소프트웨어의 특징
모든 소프트웨어는 그것이 제공하는 내용과 이를 사용하는 데 도움이 되는 방법에 따라 판단되어야 합니다.
모든 소프트웨어는 다음 속성을 충족해야 합니다.
- Operational
- 과도
- 유지보수
소프트웨어 전문가가 개발한 좋은 소프트웨어의 중요한 특징은 다음과 같습니다.
Operational
이러한 특성을 통해 소프트웨어가 다음 사항을 측정하여 운영에서 얼마나 잘 작동하는지 알 수 있습니다.
- 예산
- 효율성:
- 편의성
- 믿을 수 있음
- 단정
- 기능
- 안전
- 보안
과도
이는 소프트웨어를 한 플랫폼에서 다른 플랫폼으로 이동할 때 필수적인 측면입니다.
- 상호 운용성
- 재사용 성
- 이식성
- 적응성
유지보수
이 측면은 소프트웨어가 빠르게 변화하는 환경에 얼마나 잘 적응할 수 있는지에 대해 설명합니다.
- 유연성
- 유지 보수성
- 모듈성
- 확장성
제품 개요
- 소프트웨어 엔지니어링은 사용자 요구 사항을 분석한 다음 해당 요구 사항을 충족하는 소프트웨어 응용 프로그램을 설계, 구축 및 테스트하는 프로세스입니다.
- 소프트웨어 엔지니어링을 사용하는 중요한 이유는 1) 대규모 소프트웨어, 2) 확장성 3) 적응성 4) 비용 및 5) 동적 특성입니다.
- 1960년대 후반에 많은 소프트웨어가 예산을 초과했습니다. 따라서 유지 관리 비용이 많이 들고 신뢰할 수 없는 소프트웨어를 제공합니다.
- 1970년대 후반에는 소프트웨어 엔지니어링 원리가 널리 사용되었습니다.
- 소프트웨어공학 개념 1) 컴퓨터공학 2) 경영과학 3) 시스템공학 4) 경제학
- 빠른 처리 시간에 대한 시장 수요 증가는 소프트웨어 엔지니어링 분야의 가장 큰 과제입니다.
- 1) 유지관리성, 2) 신뢰성, 3) 효율성, 4) 유용성은 소프트웨어 제품의 가장 중요한 특성입니다.
- 좋은 소프트웨어의 가장 중요한 세 가지 특성은 다음과 같습니다. 1) Opera2) 과도기 3) 유지 관리.