예전 학기중에 공부했던 내용들을 차근차근 다시 정리하여 올려볼까 합니다.
Introduction to Software Engineering
소프트웨어공학이란?
- 1967년 NATO에서 처음으로 "Software Engineering"이란 용어를 사용
- 규모가 크고 복잡한 소프트웨어를 개발함에 있어서 발생하는 문제들을 해결하고 싶었다. → software crisis
- Software Crisis
- 소프트웨어의 질이 너무 낮고 예산과 마감일 또한 지켜지지 않았다.
- 55%는 예산을 초과했고 68%는 기한을 넘어섰고 88%는 다시 디자인되어야 했다.
소프트웨어공학의 정의
- 소프트웨어의 개발, 운용, 유지보수 등이 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문
- 소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한 체계적인 접근
대규모 프로젝트의 어려움
- 수백명의 개발자
- 오랜 개발 시간
- 모호하고 복잡한 요구사항
소프트웨어공학의 필요성
- 소프트웨어 개발에 있어서 예산 산정, 기한 예측의 어려움
- 낮은 품질
- 유지보수의 중요성
- hardware의 발전
- software의 필요성 증가
- 좀 더 크고 복잡한 software system의 요구
소프트웨어공학의 목표
- 고품질의 소프트웨어 개발
- 낮은 예산의 비용으로(효율적으로)
- 유저가 만족할 수 있는 시간내에
소프트웨어공학이 왜 중요한가?
- 모든 선진국의 경제 시스템은 소프트웨어에 의존적이다.
- 소프트웨어 비용은 시스템 비용을 넘어선다.
- 소프트웨어는 개발보다 유지에 비용이 더 많이 든다.
소프트웨어공학의 특징
- 소프트웨어는 프로그램 + 문서 + 데이터로 이루어진 집합이다.
- Software is developed or engineered, NOT manufactured.
- 대부분의 소프트웨어는 주문제작 형식이다. (기존의 재료, 부품을 재조합 하는 형식이 아님)
- 소프트웨어는 닳지 않는다. → 하지만 계속된 기능의 추가, 유지 보수 과정에서 오류가 발생할 수 있다.
- 문서화(Documentation)은 정말 중요하다.→ 하지만 아직도 많은 사람이 이를 중요하게 여기지 않는다.
소프트웨어 개발은 왜 어려운가?
- 소프트웨어는 눈에 보이지 않는다. (Invisibility)
- 복잡하다. (Complexity)
- 똑같은 것을 또 만들 필요는 없다. (Conformity)
- 완성 후에도 계속 발전한다. (Changeability)
- 완전히 자동화될 수 없다. → 사람의 역할이 중요하다.
- 소통이 중요하다. (Communication)
- Test가 어렵다. → 테스터의 능력에 따라 결과가 달라지며 모든 경우를 다 테스트할 수도 없다.
Development vs. Maintenance : 개발 vs. 유지보수
- 소프트웨어 유지보수에 드는 비용은 개발에 드는 비용의 두배 이상이다.
- 개발자체가 목표가 아니다. → 계속된 발전이 필요 → 유지보수가 중요하다.
에러 수정 비용
- 에러는 개발과정에서 빨리 발견될수록 더 좋다.
- 에러는 개발자보다 테스터나 유저들이 더 많이 발견한다.
- 에러는 개발의 모든 과정에서 후반부로 갈수록 더 많이 발견된다.
소프트웨어 개발은 건축과 비슷하지만 다르다
- SW는 디지털 상품이다.
- 한 번 개발한 후 복제를 통한 재생산이 가능
- 재사용이 많을수록 경쟁력 향상
- 중간 결과물의 완성 여부 확인이 어렵다. → 그러므로 개발자의 능력과 문서작업이 중요하다.
소프트웨어공학 기술 추세
- SW생산성 향상 → SW품질 개선 → SW가치 창출
- 위와 같은 단계의 핵심기술들을 제시하면서 발전하고 있다.