이번 게시물에서는 소프트웨어공학의 정의와 간단한 특징에 대해 알아볼 것이고 각 부분에 대해 자세한 내용은 뒤에 차차 다룰 예정이다.
💻 Software Engineering (SE)
: 소프트웨어를 비용 효율적 (cost-effective)으로 만들고 professional 하게 만들고자 하는 것으로 쉽게 말해 소프트웨어를 잘 개발하고 유지보수하기 쉽게 만들고자하는 공학이라고 볼 수 있다
현재 소프트웨어는
- 큰 시스템, 여러 사람의 개발, 지속적인 유지 보수(maintenance, reuse) 로 인해 힘듦
- 특히 개발 보다 유지보수 (maintenance)가 더 어렵고 가격이 많이 듦
이러한 어려움을 해결하기 위해 소프트웨어 공학 (software engineering)은 software production의 모든 부분과 관련되어있음
- “All aspects of software Production”
: technical process of development & project management & support software production
- “Engineering discipline”
: 문제를 해결하기 위한 적절한 이론과 방법을 사용
🌀 Fundamentals of SE
' NO SILVER BULLET '
: 소프트웨어공학을 관통하는 문장으로 SE는 워낙 다양 (diversity) 하여 정확하고 명확한 해답이 존재하지 않는다.
따라서 근본적인 원칙들을 기반으로 적용해야한다
- 잘 관리되어야하고 이해할 수 있는 개발 프로세스를 활용해야 함
- ex) SDLC(생명주기 모델), development Process, Agile 등..
- 품질이 좋아야함 즉, dependability and 성능 (performance)가 중요함
- 요구사항을 이해하고 만족해야함
- ex) Requirement Engineering
- 적절한 곳에 이미 개발되어 있는 소프트웨어를 재사용 (software reuse) 하는 것이 가능해야 함
-> 즉 새로 만드는 것보다 재활용하는 것이 더 나음
- ex) Software Reuse, Open-Source Software → API와 같이 Web-based software에 대한 정보를 가져다가 씀
🌀 Types of Software Products
소프트웨어 상품은 크게 'generic software'와 'customized software'로 구분된다
- Generic software
: 일반적인 소프트웨어로 SRS가 개발자에 의해 결정되는 것으로 개발자가 원하는 대로 만들어 놓은 후, 그것을 원하는 사람이 있다면 사서 쓰는 방식
- reuse의 관점 → evolution
- ex) word, excel …
- Customized Software
: 사용할 사람 즉, 고객 (customer)이 개발자에게 그들의 요구 사항을 말한 후 그것을 기반으로 개발하는 방식
- SRS는 소프트웨어의 user에 의해 결정됨
- reuse의 관점 → maintenance
- ex) teller가 은행에서 사용하는 시스템, 대학교 포탈
🌀 Esstential Attributes of Good Software Products
좋은 소프트웨어라고 하는 것에는 필수적인 특징들이 존재한다
- Maintainability (=유지보수)
- 계속하여 수정되고 변경되는 코드에 유연한 대응이 가능해야함
- 고객 (customer)의 요구를 충족할 수 있도록해야함
- Dependability (= 의존 가능, 신뢰 가능)
- 의존성 (reliability), 보안 (security), 안전성 (safety) 포함해야함
- 시스템이 안정적으로 동작할 수 있어야함
- Efficiency
- time, resource같은 제한된 자원을 효율적으로 사용하는 것
- 자원을 낭비해서는 안됨
- Acceptability (=수용성)
- user의 타입에 accceptable 해야함
- 이해가능하고 (understandable), 사용하기 쉽고 (usable), 호환이 편리한 (compatible) 시스템이여야 함
🌀 Typical Activities in S.E
-
Software Specification
- 요구사항 분석
- '요구공학 (Requirements Engineering)'의 최종산출물은 SRS이다.
SRS(Software Requirement Specification Document)란?
: 특정 프로젝트의 요구 사항과 요구 사항에 대한 자세한 설명을 제공하는 소프트웨어 개발에 필수적인 문서
-
Software Development
- 프로그램 화 작업 → designed & programmed
- ex) Architecture Design(high level), Detailed Design(low level), Implementation
- CTIP (continuous test and integration platform): 지속적 테스트와 통합으로 빠른 피드백과 높은 품질의 소프트웨어 배포를 지원함
-
Software Validation
- customer가 요구한대로 만들어졌는지 확인&검증
- ex) Software V&V(Verification&Validation), Testing
+) verfication과 validation은 엄연히 다른 과정이니 구분해야한다. 나중에 자세히 다룰 것이다.
-
Software Evolution
- 유지보수 (Maintenance)의 일종으로 계속해서 요구 사항에 맞게 발전하는 것
🌀 Software Application Types
소프트웨어 어플리케이션 종류에는 여러 종류가 존재하는데 몇 개만 알아보도록 하겠다. 그냥 이런 종류가 있구나 하고 넘어가도 된다.
-
stand-alone applications
- 네트워크 연결 없이 잘 돌아가는 독립적인 application
(= do not need to be connected to network)
-
Interactive transcation-based applications (=~ Web-based Systems)
- 사용자의 입력에 반응하여 application을 수행하는 것으로 네트워크를 필요로함
ex) online-game 종류, 예약 시스템
-
Embedded control systems
- 하드웨어 장치를 관리하고 제어하는 software control system
ex) 전국 T-money, 전투기 등..
-
Batch processing systems
- 중간에 개입이나 인터럽트 없이 한 번에 쭉 진행되어 결과를 내놓는 시스템
ex) 월급이나 성과금 계산
-
Systems for modelling and simulation (M&S)
- 하드웨어와 소프트웨어 동시에 보는 것
- 복잡한 현실 세계의 시스템이나 프로세스를 표현하고 실험하는데 사용
ex) matlab
-
Data collection systems
- 센서를 통해 데이터를 수집하고 처리를 위해 다른 시스템 송신
ex) IOT
-
Systems of systems (= CPS: cyber physical system)
- 여러 다른 소프트웨어 시스템으로 구성되어있음 (서로 communication허는 software로 구성)
- 회사 등에서 하위 시스템들을 관리하는 총괄 시스템

🌀 10 FAQs about Software Engineering
소프트웨어 공학에 대해 자주 묻는 10가지의 질문에 대해 정리해보았다
1. 소프트웨어란 무엇인가?
: 컴퓨터 프로그램과 관련 문서로 소프트웨어 제품은 특정 고객을 위해 개발되거나 일반 시장을 위해 개발될 수 있다
2. 좋은 소프트웨어의 속성은?
: 좋은 소프트웨어는 요구된 기능과 성능을 사용자에게 제공하고 유지보수 가능하고 신뢰성 있으며 사용하기 쉬워야 한다
3. 소프트웨어 공학이란?
: 소프트웨어 공학은 소프트웨어 생산의 모든 측면을 다루는 엔지니어링 학문이다
4. 기본적인 소프트웨어 공학 활동은?
: 소프트웨어 구체화 (software specification), 소프트웨어 개발 (software development), 소프트웨어 검증 (software validation) 및 소프트웨어 진화 (software evolution) 이다
5. 소프트웨어 공학과 컴퓨터 과학의 차이는?
: 컴퓨터 과학은 이론과 기초에 중점을 두는 반면 소프트웨어 공학은 유용한 소프트웨어를 개발하고 제공하는 실용성에 중점을 둔다
6. 소프트웨어 공학과 시스템 공학의 차이는?
: 시스템 공학은 하드웨어, 소프트웨어 및 프로세스 엔지니어링을 포함한 컴퓨터 기반 시스템 개발의 모든 측면을 다루는 반면 소프트웨어 공학은 이 더 일반적인 과정의 일부이다
7. 소프트웨어 공학이 직면한 주요 과제는?
: 증가하는 개발의 다양성, 짧은 시간 내의 요구 및 신뢰할 수 있는 소프트웨어 개발에 대처하는 것이다
8. 소프트웨어 공학의 비용은 얼마나 되나요?
: 일반적으로 소프트웨어 비용의 약 60%는 개발 비용이고 40%는 테스트 비용입니다.
9. 가장 좋은 소프트웨어 공학 기법과 방법은 무엇인가요?
: 모든 소프트웨어 프로젝트는 전문적으로 관리되고 개발되어야 하고 특정 유형의 시스템에는 특정 기법이 적합하기 때문에 한 가지 방법이 다른 방법보다 낫다고 할 수 없다. 앞서 말했듯이 소프트웨어공학은 'NO SILVER BULLET'이다.
10. 웹이 소프트웨어 공학에 미친 영향은?
: 웹 기반 시스템 개발은 프로그래밍 언어와 소프트웨어 재사용의 발전을 가져왔다
<참고: 소프트웨어공학 수업 자료, Software Engineering 10th edition>
소프트웨어 공학 수업을 들으면서 정리했던 자료를 복습하면서 올려보고자한다. 다시 공부하면서 업로드해야지 !!