소프트웨어 엔지니어링 개요
먼저 소프트웨어 엔지니어링이 무엇을 의미하는지 이해합시다. 이 용어는 소프트웨어와 엔지니어링의 두 단어로 구성됩니다.
Software 단순한 프로그램 코드 이상입니다. 프로그램은 일부 계산 목적을 제공하는 실행 가능한 코드입니다. 소프트웨어는 실행 가능한 프로그래밍 코드, 관련 라이브러리 및 문서의 모음으로 간주됩니다. 특정 요구 사항을 위해 만들어진 소프트웨어가 호출 될 때software product.
Engineering 반면에 잘 정의 된 과학적 원칙과 방법을 사용하여 제품을 개발하는 것입니다.
Software engineering잘 정의 된 과학적 원리, 방법 및 절차를 사용하는 소프트웨어 제품 개발과 관련된 엔지니어링 분야입니다. 소프트웨어 엔지니어링의 결과는 효율적이고 안정적인 소프트웨어 제품입니다.
정의
IEEE는 소프트웨어 엔지니어링을 다음과 같이 정의합니다.
(1) 소프트웨어의 개발, 운영 및 유지 보수에 대한 체계적이고, 규율 적이며, 수량화 가능한 접근 방식의 적용; 즉, 엔지니어링을 소프트웨어에 적용하는 것입니다.
(2) 위의 진술에서와 같은 접근법의 연구.
독일의 컴퓨터 과학자 인 Fritz Bauer는 소프트웨어 엔지니어링을 다음과 같이 정의합니다.
소프트웨어 엔지니어링은 경제적으로 신뢰할 수 있고 실제 기계에서 효율적으로 작동하는 소프트웨어를 얻기 위해 건전한 엔지니어링 원칙을 수립하고 사용하는 것입니다.
소프트웨어 진화
소프트웨어 엔지니어링 원리와 방법을 사용하여 소프트웨어 제품을 개발하는 프로세스를 software evolution. 여기에는 예상되는 요구 사항을 충족하는 원하는 소프트웨어 제품이 개발 될 때까지 소프트웨어의 초기 개발과 유지 관리 및 업데이트가 포함됩니다.
진화는 요구 사항 수집 프로세스에서 시작됩니다. 그런 다음 개발자는 의도 한 소프트웨어의 프로토 타입을 만들고 소프트웨어 제품 개발 초기 단계에서 피드백을받을 수 있도록 사용자에게 보여줍니다. 사용자는 여러 번의 연속 업데이트 및 유지 관리도 계속 변경되는 변경 사항을 제안합니다. 이 프로세스는 원하는 소프트웨어가 완성 될 때까지 원래 소프트웨어로 변경됩니다.
사용자가 원하는 소프트웨어를 손에 넣은 후에도 발전하는 기술과 변화하는 요구 사항으로 인해 소프트웨어 제품이 그에 따라 변경됩니다. 소프트웨어를 처음부터 다시 만들고 요구 사항에 따라 일대일로 진행하는 것은 불가능합니다. 실행 가능하고 경제적 인 유일한 솔루션은 최신 요구 사항과 일치하도록 기존 소프트웨어를 업데이트하는 것입니다.
소프트웨어 진화 법칙
Lehman은 소프트웨어 진화에 대한 법을 제시했습니다. 그는 소프트웨어를 세 가지 범주로 나눴습니다.
- S-type (static-type) - 이것은 정의 된 사양 및 솔루션 에 따라 엄격하게 작동하는 소프트웨어 입니다. 이를 달성하기위한 솔루션과 방법은 코딩 전에 즉시 이해됩니다. s 유형 소프트웨어는 변경이 가장 적으므로 가장 간단합니다. 예를 들어, 수학적 계산을위한 계산기 프로그램.
- P-type (practical-type) - 이것은 절차 모음이있는 소프트웨어입니다 . 이것은 절차가 정확히 무엇을 할 수 있는지에 의해 정의됩니다. 이 소프트웨어에서 사양을 설명 할 수 있지만 솔루션이 즉시 명확하지 않습니다. 예를 들어, 게임 소프트웨어.
- E-type (embedded-type) - 이 소프트웨어는 실제 환경 의 요구 사항으로 밀접하게 작동 합니다. 이 소프트웨어는 실제 상황에서 법률, 세금 등의 다양한 변화가 있기 때문에 고도로 진화했습니다. 예를 들어, 온라인 거래 소프트웨어.
E-Type 소프트웨어 진화
Lehman은 E-Type 소프트웨어 진화를위한 8 가지 법칙을 제시했습니다.
- Continuing change - E 형 소프트웨어 시스템은 현실 세계의 변화에 지속적으로 적응해야합니다. 그렇지 않으면 점차적으로 유용하지 않게됩니다.
- Increasing complexity - E 형 소프트웨어 시스템이 발전함에 따라 유지 보수 또는 축소를위한 작업을 수행하지 않으면 복잡성이 증가하는 경향이 있습니다.
- Conservation of familiarity - 소프트웨어에 대한 친숙 함 또는 개발 방법에 대한 지식, 특정 방식으로 개발 된 이유 등은 시스템의 변경 사항을 구현하기 위해 어떤 비용 으로든 유지되어야합니다.
- Continuing growth- 일부 비즈니스 문제를 해결하려는 E-type 시스템의 경우 비즈니스의 라이프 스타일 변화에 따라 변화를 구현하는 규모가 커집니다.
- Reducing quality - E 유형 소프트웨어 시스템은 엄격하게 유지 관리하고 변화하는 운영 환경에 적응하지 않으면 품질이 저하됩니다.
- Feedback systems- E- 타입 소프트웨어 시스템은 다중 루프, 다중 레벨 피드백 시스템을 구성하며 성공적으로 수정되거나 개선 되려면 그렇게 취급되어야합니다.
- Self-regulation - E- 타입 시스템 진화 프로세스는 정상에 가까운 제품 및 프로세스 측정의 분포와 함께 자체 규제됩니다.
- Organizational stability - 진화하는 E 형 시스템에서 평균 유효 글로벌 활동 률은 제품의 수명 동안 변하지 않습니다.
소프트웨어 패러다임
소프트웨어 패러다임은 소프트웨어를 설계하는 동안 취해지는 방법과 단계를 의미합니다. 많은 방법이 제안되고 현재 작동하고 있지만 소프트웨어 엔지니어링에서 이러한 패러다임이 어디에 있는지 확인해야합니다. 이들은 서로에 포함되어 있지만 다양한 범주로 결합 할 수 있습니다.
프로그래밍 패러다임은 소프트웨어 개발 패러다임의 하위 집합 인 소프트웨어 디자인 패러다임의 하위 집합입니다.
소프트웨어 개발 패러다임
이 패러다임은 소프트웨어 개발과 관련된 모든 엔지니어링 개념이 적용되는 소프트웨어 엔지니어링 패러다임으로 알려져 있습니다. 여기에는 소프트웨어 제품을 구축하는 데 도움이되는 다양한 연구 및 요구 사항 수집이 포함됩니다. 구성은 –
- 요구 사항 수집
- 소프트웨어 디자인
- Programming
소프트웨어 디자인 패러다임
이 패러다임은 소프트웨어 개발의 일부이며 다음을 포함합니다.
- Design
- Maintenance
- Programming
프로그래밍 패러다임
이 패러다임은 소프트웨어 개발의 프로그래밍 측면과 밀접한 관련이 있습니다. 여기에는 다음이 포함됩니다.
- Coding
- Testing
- Integration
소프트웨어 엔지니어링의 필요성
소프트웨어 엔지니어링의 필요성은 사용자 요구 사항 및 소프트웨어가 작동하는 환경의 변화율이 높기 때문에 발생합니다.
- Large software - 마찬가지로 소프트웨어의 크기가 커지면서 공학적으로 과학적 프로세스를 제공해야하기 때문에 집이나 건물보다 벽을 만드는 것이 더 쉽습니다.
- Scalability- 소프트웨어 프로세스가 과학 및 엔지니어링 개념을 기반으로하지 않았다면 기존 소프트웨어를 확장하는 것보다 새 소프트웨어를 다시 만드는 것이 더 쉬울 것입니다.
- Cost- 하드웨어 산업이 그 기술을 보여 주었고 거대한 제조는 컴퓨터와 전자 하드웨어의 가격을 낮추었습니다. 그러나 적절한 프로세스가 적용되지 않으면 소프트웨어 비용이 여전히 높습니다.
- Dynamic Nature- 항상 성장하고 적응하는 소프트웨어의 특성은 사용자가 작업하는 환경에 따라 크게 달라집니다. 소프트웨어의 특성이 항상 변경되는 경우 기존 소프트웨어에서 새로운 개선 사항을 수행해야합니다. 여기에서 소프트웨어 엔지니어링이 좋은 역할을합니다.
- Quality Management- 더 나은 소프트웨어 개발 프로세스는 더 나은 품질의 소프트웨어 제품을 제공합니다.
좋은 소프트웨어의 특성
소프트웨어 제품은 그것이 제공하는 것과 그것이 얼마나 잘 사용될 수 있는지에 의해 판단 될 수 있습니다. 이 소프트웨어는 다음을 충족해야합니다.
- Operational
- Transitional
- Maintenance
잘 설계되고 제작 된 소프트웨어는 다음과 같은 특성을 가질 것으로 예상됩니다.
운영
이것은 소프트웨어가 운영에서 얼마나 잘 작동하는지 알려줍니다. 다음에서 측정 할 수 있습니다.
- Budget
- Usability
- Efficiency
- Correctness
- Functionality
- Dependability
- Security
- Safety
과도기
이 측면은 소프트웨어가 한 플랫폼에서 다른 플랫폼으로 이동할 때 중요합니다.
- Portability
- Interoperability
- Reusability
- Adaptability
유지
이 측면은 소프트웨어가 끊임없이 변화하는 환경에서 자신을 유지하는 능력을 얼마나 잘 갖추고 있는지에 대해 간략히 설명합니다.
- Modularity
- Maintainability
- Flexibility
- Scalability
요컨대, 소프트웨어 엔지니어링은 효율적이고 내구성이 있으며 확장 가능한 예산 내 소프트웨어 제품을 생산하는 데 필요한 잘 정의 된 엔지니어링 개념을 사용하는 컴퓨터 과학의 한 분야입니다.