소프트웨어 공학 (1~2주차)
● 소프트웨어 공학이란?
- 전문적이고 cost적으로 효율적인 소프트웨어를 개발하기 위한 이론과 방법, 도구들을 공부하는 학문
- 시스템의 초기 단계부터 사용 후 유지보수단계까지 소프트웨어 생산의 모든 측면을 다루는 학문
- 더 많은 시스템들이 소프트웨어에 의존되어 가는 중
- 선진국들에서 소프트웨어는 이미 핵심적인 부분으로 소프트웨어에 대한 의존도가 높음
- 소프트웨어 관련되어 시스템에 들어가는 비용 비용이 하드웨어와 관련된 시스템들에 들어가는 비용보다 높음
- 소프트웨어는 처음 개발할 때 드는 초기 개발비용보다 유지 및 보수할 때 더 많은 비용이 소모됨
● 소프트웨어의 두가지 종류
1) 일반적인 소프트웨어 (Generic Software)
- 일반 소비자들이 구매할 수 있는 독립 실형 소프트웨어
ex) graphics programs, project management tools 등등
2) 맞춤제작 소프트퉤어 (Custom Software)
- 특정 소비자들과 그들의 니즈를 충족시키기 위해 맞춤형으로 제작한 소프트웨어
ex) embedded control systems, air traffic control software, traffic monitoring systems 등등
● 좋은 소프트웨어 제품의 필수적인 요소들
- Maintainability ( 유지 보수성) : 변하는 비즈니스 환경에따라 소프트웨어가 변하는 것은 필연적이므로 변하는 소비자들의 니즈들을 충족시킬 수 있도록 계속 발전할 수 있게 유지보수적인 측면을 신경써 만들어져야 한다.
- Dependability( 신뢰성, 독립성) : 신뢰성, 안정성, 보안성 등이 보장될 수 있고, 시스템이 고장나거나 시스템 실패가 발생했을 때 물리적, 경제적 측면에서 손해를 야기하지 않도록 만들어야한다.
- Efficiency ( 효율) : 메모리와 프로세서 사이클 등의 시스템 자원들을 낭비하지 않도록 만들어져야 한다.
- Acceptability (수용성) : 다른 소프트웨어들과 호환이 잘 되어야 한다.
● 소프트웨어 공학에서 하는 일
● Software Specification ( 요구 공학 )
- 고객과 엔지니어가 소프트웨어의 운영제한사항들과 목표를 정의함 ( 수정할 부분이 생기면 다시 돌아가서 다시 수정하는 작업을 반복함 )
- '요구 공학'임
● Software Development ( 소프트웨어 개발 )
- 아키텍처 설계, 상세 설계등 소프트웨어와 프로그래밍을 어떻게 할지 설계하고 구현함 (디자인이 완벽하게 끝나고 구현하는 것보다는 디자인하고 구현하는 과정이 계속해서 반복되는 구조가 대부분임)
- CTIP를 통헤 지속적으로 테스트하고 통합하는 걸 반복함
(여기서 CTIP이란 'Continuous Test and Integration Platform' 의 약자로 지속적으로 테스팅하고 지속적으로 통합하는 과정을 의미함)
● Software Validation ( 소프트웨어 검증)
- 소프트웨어가 고객들의 니즈에 맞게 제작되었는지 확인함
- V&V를 통해 소프트웨어의 정확성과 품질을 평가함
(여기서 V&V란 'Verification and Validation' 의 약자로 지속적으로 테스팅하고 지속적으로 통합하는 과정을 의미함)
● Software Evolution ( 소프트웨어 업그레이드)
- 변화하는 시장과 고객들의 니즈들을 반영해 소프트웨어를 계속해서 변화시키고 발전시킴
- 소프트웨어 업그레이드과정에서 유지보수부분이 매우 중요함
● 소프트웨어 프로젝트의 다양성
- 소프트웨어 시스템은 매우 다양하기 때문에 모든 시스템에 적용가능한 Silver Bullet같은 만능 솔루션이 존재하지 않음
- 사용되는 소프트웨어 공학 방법과 도구들은 애클리케이션의 유형, 고객의 요구사항, 개발 팀의 작업환경등에 따라 달라지기에 어떤 프로젝트를 진행하느냐에 따라 각각에 맞는 소프트웨어 공학 방법과 도구들을 활용해야함