Software Engineering
- 서영 조
- 2022년 10월 19일
- 2분 분량
Software Engineering의 궁극적인 목표
"품질 좋은 소프트웨어를 최적의 비용으로 계획된 일정에 따라 개발하는 것"
=품질과 생산성의 동시 추구
Program과 Software
Program: 프로그래밍 언어로 작성된 명령어 집합
Software: 프로그램+프로그램을 실행하기 위한 데이터+그에 따른 산출물들

*2가지 종류의 Software Product
1.Generic: 패키지화된 소프트웨어, COTS(제품화된 소프트웨어)
예: MS-Office, Game, Windows
2. Beskpoke: 사용자의 요구에 따라 개발된 소프트웨어
예: DKU 도서관 시스템, DKU 수강신청 시스템
Software의 개발단계
소프트웨어는 보통 5~6개의 단계를 거쳐서 개발된다.
1.S/W 요구사항 정의
시스템의 기능적 요구사항을 도출한다.
고객의 요구사항을 이끌어내는 단계
고객의 요구사항을 고객이 이해할 수 있는 수준으로 문서화한다.
2. S/W 요구사항 분석
시스템을 구성하는 논리적 구성요소 도출
3.설계
시스템의 논리적 구성요소로서의 컴포넌트들을 정의하고 설계한다.
* 아키텍쳐 설계
논리적 구성요소들을 모듈화
* 상세 설계
각 모듈별로 알고리즘 level까지 설계
4.구현[개발+테스팅]
설계를 기반으로 코드를 구현하고, 테스팅 한다.
5.S/W 유지보수
소프트웨어를 배포한 이유 지속적인 유지보수가 필요하다.
소프트웨어는 하드웨어와 달리 고정된 형태가 아니라 지속적으로 개선되어야 하는 특성을 가진다.
*완전적 유지보수(약 60.3%): 새로운 요구사항을 시스템에 적용하기 위한 유지보수
*적응적 유지보수(약 18.2%): 시스템을 새 환경에 적응시키기 위한 유지보수
*수정적 유지보수(약 17.4%): 잘못된 점을 고치기 위한 유지보수

소프트웨어 개발의 각 단계에서 UML 다이어그램을 이용할 수 있다.
소프트웨어의 특징
소프트웨어는 변경이 가능하다.(변경이 가능하다≠변경이 쉽다.)
소프트웨어는 모듈화되어야 한다.
소프트웨어는 폐기의 단계도 거친다. 유지보수 비용이 과도하게 늘어나면 폐기를 한다.
예상되는 문제를 최소화하기 위해서 test-case를 잘 만들어야 한다.
소프트웨어 분류
[System Software]다른 시스템의 실행을 도와주는 소프트웨어
예:compiler, editor
[Business application software]비즈니스를 도와주는 소프트웨어
예:MIS, ERP
[Engineering&Scientific software]
예:수치해석
[Real-time Software]
온라인 시스템과 실시간 시스템은 다르다. 온라인 시스템은 요청을 즉시 처리한다는 특징이 있지만, 실시간 시스템은 요청을 즉시 처리한다는 특징과 함께 요청이 적정시간 내에 처리된다는 특징이 있다.
예:무기시스템
[Embedded Software]
[AI Software]
[Entertainment Software]
소프트웨어 위기(문제)
기간 지연
비용 초과
명세와 불일치
비신뢰성
엄청난 유지보수비용
SW에 대한 오해
1.개발자를 더 투입하면 스케줄을 맞출 수 있지 않을까?→새로운 사람들에게 지금까지 작업했던 내용을 공유하고 그것을 익히는 시간이 추가적으로 필요하게 된다.
2.앞에서 시작할 때 대충하면, 시간이 지난후 이를 해결하기 위해서 훨씬 더 큰 노력을 필요로 한다.
3.프로그램을 작성하는 것은 전체 과정의 매우 작은 일부분일 뿐이다.
4.프로그램이 실행되기 전까지는, 프로그램이 제대로 실행되는지 알 수 있는 길이 없다.
5.소프트웨어 지침만 믿고 그대로 따른다고 좋은 소프트웨어가 개발되는 것이다.→하나의 보편적 지침일 뿐, 이것을 따른다고 반드시 좋은 소프트웨어가 개발되는 것은 아니다.
6.소프트웨어를 바꿀 수 있도록 쉽게 모듈화 시켜야한다. 고객이 원하는 것의 일부분을 먼저 만들어 시제품을 만들어 고객에게 검토를 받고 개발을 진행해야한다.
7.“나만 잘하면 되지”의 접근 방식은 옳지 않다.→전체적으로 문제가 된다.
소프트웨어는 엔지니어적인 관점으로 개발되어야 한다. 초고층 건물을 지을 때와 공법을 체계적으로 해야 건물이 지어지듯이 소프트웨어도 체계적으로 만들기 위해서는 소프트웨어공학이 필요하다.
Comments