Software Engineering Overview
소프트웨어 엔지니어링 개요
- 소프트웨어 엔지니어링은 Software Production의 모든 부분을 고려하여
Cost-Effective한 결과를 도출해내는 작업을 통칭한다.
- 소프트웨어에 대한 선진국 경제의 의존도가 나날이 높아지고 있고,
컴퓨터 기술이 발전함에 따라 같이 증가하는 소프트웨어의 복잡도로 인해
소프트웨어 엔지니어링의 수요가 기하급수적으로 증가되고 있다.
- 소프트웨어 엔지니어링을 적용한 개발 방식이 장기적으로 더욱 저렴하고 시간 효율적인 모습을 보여주고 있다.
"Larger and more complex software are required to be built and delivered more quickly."
= 앞으로는 더욱 크고 복잡한 소프트웨어가 빠르게 개발되어 시장에 출시될 것이 요구된다.
- 여기서, Deliver는 Release와 같은 의미를 갖는다.
* Science vs Engineering (과학과 공학의 차이)
Science (과학) |
Engineering (공학) |
= Discovery - 본래 자연계에 존재하던 사실을 찾아내는 것을 목표로 한다. |
= Invention - Cost 대비 Quality를 고려하여 제품을 만든다. |
* Computer Science vs Software Engineering (컴퓨터 과학과 소프트웨어 공학의 차이)
Computer Science (컴퓨터 과학) |
Software Engineering (소프트웨어 공학) |
- Theory와 Fundamentals를 다룬다. - 이론적이고 기본적이다. |
- 소프트웨어 생산과정에서 생기는 실질적인 문제를 다룬다. - 경험적이고 실질적이다. |
Definition of Software (소프트웨어의 정의)
- 소프트웨어는 개발자가 만들어야 하는 모든 Output을 지칭하며, 그것들은 아래와 같다.
- Computer Programs (Binary Codes)
- Configuration Files (System Parameters, Defaults 등 환경설정 정보)
- System Documentation (설계, 테스팅 관련 문서)
- User Documentation (사용자 설명서)
Software Type | Description |
Generic Software (범용 소프트웨어) |
- 해당 서비스를 원하는 어떠한 고객(Any Customer)에게도 판매할 수 있는 범용적(일반적)인 소프트웨어를 의미한다. - S/W의 Specification을 개발자가 결정한다. ex) Microsoft Excel, Microsoft Word, CAD |
Customized Software (맞춤 소프트웨어) |
- 특정 고객(Specific Customer)의 Specification을 만족시키는 소프트웨어를 의미한다. - S/W의 Specification을 고객이 결정한다. ex) E-Commerce S/W, Real-Time Transportation Tracking S/W |
Both Generic and Customized Software | - 프로그램의 기본적인 부분은 Generic하게 구성하고, 세부적인 부분은 Customized하게 구성한 소프트웨어를 의미한다. ex) SAP ERP Software (전사적 자원관리 프로그램) |
Fundamental Principles for S/W Engineering (S/W 엔지니어링의 기본 원칙)
- 개발하고자 하는 S/W System의 유형에 맞추어 개발해야하지만,
모든 S/W Engineering Technique을 아우르는 기본 원칙은 존재하며 아래와 같다:
- Use a Managed and Understood S/W Process
(효율성이 입증되고, 개발자 본인이 완벽히 이해한 S/W 프로세스를 사용해야 한다.)
- Important to Understand Requirements and Design S/W
(요구사항을 이해하고 S/W를 설계하는 것은 매우 중요하다.)
- Reuse S/W that has already been Developed rather than Write New S/W
(새로운 S/W를 개발하기 보다는 검증된 기존 S/W를 재사용하는 것에 초점을 맞추어야 한다.)
Attributes of Good S/W (좋은 S/W가 갖추어야 할 속성들)
- Maintainability (유지보수성)
- S/W는 요구사항의 변화에 쉽게 대응할 수 있도록 개발되어야 한다.
- 또한, 새로운 개발자가 합류·인수인계해도 문제가 없을 만큼 체계화되어 있어야 한다. - Dependability (강력한 신뢰성)
- S/W는 Availability, Reliability, Security, Safety, Integrity를 갖추어야 한다.
- Availability(= Readiness)는 사용자가 원할 때 언제든지 사용할 수 있는 특성을 의미한다.
- Reliability는 서비스를 시작한 시점부터 끝나는 시점까지 온전히 지속되는 특성을 의미한다.
- Security는 악의적 공격에 대해 방어가 이루어지고 있는 특성을 의미한다.
- Safety는 정보의 손실이 발생되지 않는 특성을 의미한다.
- Integrity는 잘못된 동작을 하지 않는 특성, 즉 무결성을 의미한다. - Efficiency (= Cost-Effective; 효율성)
- S/W는 System Resource를 낭비없이 사용해야 한다. - Acceptability (수용성)
- S/W는 Usable(사용하기 편한), Understandable(직관적인), Compatible(호환성이 좋은) 해야 한다.
Ad hoc Approach (맞춤 접근방식)
- S/W System은 무수히 많은 유형으로 존재하기 때문에
모든 경우에 알맞은 S/W Engineering Technique의 Universal Set은 존재할 수 없고,
그때그때 경우에 알맞는 Ad hoc 접근방법이 바람직하다.
* Ad hoc의 반의어는 Standard 이다.
Reference: Software Engineering 10th Edition
(Ian Sommerville 저, Pearson, 2016)