이제 우리가 사는 세상은 소프트웨어가 없으면 질높은 삶을 영위하기가 힘들다.
점점 더 많은 시스템들이 s/w에 의해 제어되고, 대부분의 선진국들에선
s/w에 대한 지출비용이 GNP의 상당한 부분을 차지한다.
이런 시대에서 IT분야를 공부하는 우리는 소프트웨어 개발에 대한
전문적인 지식이 필요하다.
소프트웨어 공학은 그런 취지에서 시작한다.
소프트웨어는 시스템 비용 대부분을 차지할 정도로 비용이 많이 든다.
요즘은 하드웨어보다 소프트웨어가 비용이 더 많이 들때가 있다.
그리고 개발보다는 유지보수에 비용이 더 많이 든다.
(긴 수명을 가진 시스템인 경우 개발비용의 5~6배 정도 든다.)
이렇게 비싼 비용이 드는 소프트웨어로 인해
소프트웨어 공학은 cost-effective 즉, 가격대 성능비를 추구한다. 이게 핵심이다.
이걸 뜻하는 ROI(Return On Investment).. "투자 대비 수익" 이라는 말이 있는데
사업 계획에서 가장 주가되는 항목이다.
그럼 소프트웨어 공학을 알아보기 이전에 소프트웨어가 뭔지? 부터 정확하게 알고 가자.
- 소프트웨어(Software)란?
컴퓨터 프로그램들과 관련된 문서를 뜻한다.
범용적 소프트웨어와 주문(맞춤형) 소프트웨어가 있는데,
뜻은 말안해도 알것이고.. 시장은 주문 맞춤형 소프트웨어가 시장이 더 크다.
그럼 이제 소프트웨어가 뭔지 알았다. 그럼 소프트웨어 공학이 뭔지 알아보자.
- 소프트웨어 공학(Software Engineering)란?
소프트웨어 생산의 모든 측면에 관심을 가지는 공학분야 이다.
소프트웨어 공학은 체계적(systematic)이고 조직적(organized)으로 접근해야한다.
그리고 해결해야할 문제, 개발 제약조건, 이용가능한 자원에 따라 적절한 도구들과 기술활용 능력 등이 요구된다.
- 소프트웨어 공학 VS 컴퓨터 과학?
소프트웨어 공학(=SE)와 비슷한 개념인 컴퓨터 과학이 있는데, 이것들 둘의 차이도 알아봐야지.
컴퓨터 과학은 "이론과 기초"에 관심이 많은 학문이다.
그리고 학문적인 성격이 강하므로 완벽함을 추구한다.
소프트웨어 공학은 반대로 유용한 소프트웨어 즉, 실질적인 것들에 포커스가 맞추어져 있다.
실용성에 초점을 두기 때문에 완벽하지 못한 소프트웨어라도 경제성이 있으면 ok.
- 소프트웨어 공학 VS 시스템 공학?
어째보면 SE가 시스템 공학의 일부분이다.
시스템 공학은 H/W, S/W 그리고 프로세스 공학 등을 포함한 컴퓨터 기반 시스템 개발에 대한
모든 측면에 관심을 가진다. 그래서 SE가 시스템 공학의 일부분이다.
그럼 이제 실질적인 SE에 대한 내용을 보겠다. 소프트웨어에 관한 개념으로 소프트웨어 프로세스라는 것이 있다.
- 소프트웨어 프로세스?
소프트웨어 개발 이나 진화를 목적으로 하는 활동들을 통칭해서 소프트웨어 프로세스라고 한다.
쉽게 말해 소프트웨어 제작 공정? 정도로 설명할 수 있겠다.
소프트웨어 프로세스에 4가지 단계가 있다.
1. 명세화(Specification)
시스템이 무엇을 해야하고 개발 제약조건에는 어떤 것들이 있는가?
2. 개발(Development)
소프트웨어 시스템의 생산
3. 확인(Validation)
소프트웨어가 고객이 원하는 것인가를 확인한다.
4. 진화(Evolution)
변하는 요구사항에 따라서 소프트웨어를 변경하는 것.
이 소프트웨어 프로세스들도 프로세스 모델이 따로 있다. 뭐 결국에는 그냥 그림이다. 단순화되는 표현이라고 보면된다.
워크 플로우 측면, 자료-흐름 측면, 역할/활동 측면 등이 있다.
- 소프트웨어 공학에서의 비용
보편적으로는 60%는 개발비용, 40%는 테스트 비용이다.
주문 소프트웨어는 S/W 진화시키는 비용이 개발비용을 넘을 때도 있다.
비용 같은 부분은 솔직히 case by case
- 소프트웨어 공학 방법론?
쉽게 말해 소프트웨어 개발에 대한 구조적인 접근법이다.
모델 설명 → 규칙 → 권고 사항 → 프로세스 지침
모델 설명 : 만들어야 되는 그래픽 모델들에 대한 설명(다이어그램 같은것들)
규칙 : 시스템 모델들에 적용되는 제한 조건 ( 상속이다 뭐다 하는 규칙)
권고 사항 : 좋은 설계에 대한 충고
프로세스 지침 : 작업들의 순서에 대한 지침
- CASE가 무엇인가.
CASE란 Computer-Aided Software Engineering 의 약자로 S/W 개발에 필요한 도구들을
일컫는 말이다. 예를 들어 버전 관리 도구 같은..
CASE는 두가지 종류가 있다.
Upper-CASE
Life cycle의 앞부분 즉, real world의 관점에서 필요한 도구를 말한다.
주로 설계, 분석 같은 초기 프로세스 활동을 지원한다.
Lower-CASE
Life cycle의 뒷부분 즉, computer world의 관점에서 필요한 도구.
디버깅, 테스트 같은 후반기 프로세스 활동을 지원하는 도구들이다.
- 좋은 S/W는 뭔가.
> 유지보수성(메인테너빌리티) : 요구되는 사항들에 맞춰 진화할 수 있나? 잘되려면 모듈화가 잘 되어 있어야한다
> 신빙성(디펜더빌리티) : 믿을만 한가
> 효율성(이피시언시) : 쓸데없이 많은 시스템 자원을 낭비하지 않는가
> 유용성(유저빌리티) : 용도가 사용자들에게 적절한가
- SE가 직면한 과제
> 레거시 시스템 : 오래됐지만 가치있는 시스템을 관리,갱신
> 이질성 : 분산된 시스템과 S/W, H/W의 결합
> 인도 : 빠른 공급에 대한 압박이 증가함
> 신뢰도 : 믿을 수 있는 S/W인지.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
COCOMO (Constructive Cost Model) (0) | 2021.04.10 |
---|---|
소프트웨어 공학 - Software Process (0) | 2021.04.10 |
윈도우 UserAssist를 통한 파일실행 흔적 분석 (0) | 2021.04.10 |
NTFS (New Technology File System) (0) | 2021.04.10 |
FAT (File Allocation Table) 32 (0) | 2021.04.10 |