1장. 서론
소프트웨어란?
컴퓨터 프로그램과 관련된 문서들, 특정 고객 및 일반 시장을 고려해서 소프트웨어 개발 가능
좋은 소프트웨어 특징
요구되는 기능과 성능을 사용자에게 제공해야 하고, 유지보수성, 확실성, 사용성이 좋아야 한다.
소프트웨어 공학이란?
초기 구상 단계부터 운영과 유지보수까지 포함하는 소프트웨어 생산의 모든 관점과 연관된 공학 분야이다.
소프트웨어 공학 기본활동
•
명세화 (Specification)
•
개발 (Development)
•
검증 (Validation)
•
진화 (Evolution)
소프트웨어 공학이 직면한 주요 도전과제
증가하는 다양성, 인도기간 단축 요구, 신뢰할 수 있는 소프트웨어 개발에 대응하는 것
소프트웨어 공학 비용
60%가 개발비용, 40% 테스트 비용. 맞춤형의 경우 종종 진화 비용이 개발비용을 넘어선다.
최선의 소프트웨어 공학 기법과 방법은 무엇인가?
모든 소프트웨어 프로젝트는 전문적으로 관리되고 개발되어야 하며 시스템 유형에 따라 적합한 기법이 다르기 때문에 우열을 가릴 수 없다.
소프트웨어 공학 - 소프트웨어 중요성과 특징
1. 국가 기반 시설, 공익 사업을 컴퓨터 기반 시스템으로 제어
2. 대부분의 전기 시스템은 컴퓨터와 제어 소프트웨어를 탑재
3. 제조, 유통, 금융 등 분야의 컴퓨터화
4. 소프트웨어 시스템은 추상적이며 무형이다.
•
4-1. 제품의 특성으로 인한 제약이 없으며, 물리적 법칙이나 제조공정으로부터 영향이 없다.
•
4-2. 물리적 제약이 없기 때문에, 소프트웨어 시스템이 극도로 복잡해진다.
◦
이로 인해 이해하기 어려우며 변경하는데 많은 비용이 들게 된다.
다양한 종류의 소프트웨어 시스템
1.
단순한 임베디드 시스템부터 복잡한 정보 시스템까지 다양한 소프트웨어 시스템이 존재한다.
2.
소프트웨어 시스템의 종류에 따라 다른 접근법이 필요하다.
3.
소프트웨어 공학에는 보편적인 표기법이나 방법, 기법이 존재하지 않는다.
소프트웨어 실패
소프트웨어 장애의 2가지 요인 (소프트웨어 실패)
1.
시스템 복잡도 증가
•
시스템을 더 신속하게 공급해야 하며 더 크고 더 복잡한 시스템이 필요해졌기 때문이다.
2.
소프트웨어 공학 방법론 사용의 실패
•
소프트웨어 공학 방법과 기술을 사용하지 않을 시 소프트웨어가 안정성, 신뢰성이 부족하게 된다.
소프트웨어 제품
소프트웨어 제품 분류
1.
일반 제품 (Generic)
•
1-1. 수평적 제품 (Horizontal): 응용 분야에 관계 없이 사용되는 애플리케이션
•
1-2. 수직적 제품 (Vertical): 특정 응용 분야를 위한 애플리케이션
2.
맞춤식 제품 (Customized, Bespoke)
•
특정 고객을 위해 해당 고객에 맞추어 개발하는 시스템
3.
ERP (Enterprise Resource Planning) 시스템
•
전사적 자원 관리 시스템
•
일반 제품으로 개발하여 특정 고객의 요구사항을 반영
제품 명세
1.
일반 제품
•
소프트웨어 명세를 개발 조직이 소유하고 변경 사항을 결정
2.
맞춤형 제품
•
소프트웨어 명세를 고객이 소유하고 변경 사항을 결정
좋은 소프트웨어의 필수적 특성
1. 수용성 (Acceptability)
•
소프트웨어는 해당 유형의 사용자에 의해 수용될 수 있어야 한다.
•
이해하기 쉽고, 사용하기 쉽고, 기존 시스템과 호환성 있어야 한다.
•
Understandable, Usable, Compatible
2. 확실성, 보안성 (Dependability and Security)
•
(확실성) 시스템 장애시에 물리적 또는 경제적 손실이 없어야 한다.
•
(보안성) 악의적 사용자가 시스템에 접근하거나 피해를 줄 수 없어야 한다.
•
신뢰성, 보안성, 안전성을 포함
•
Reliability, Security, Safety
3. 효율성 (Efficiency)
•
메모리나 CPU 타임 등의 시스템 자원을 낭비해서는 안된다.
•
응답성과 처리시간 메모리 활용 등을 포함한다.
•
Responsiveness, Processing Time, Memory Utilization
4. 유지보수성 (Maintainability)
•
소프트웨어는 고객의 변경 요구에 맞도록 진화할 수 있게 작성되어야 한다.
소프트웨어 공학
소프트웨어 공학이란
•
초기 시스템 명세를 작성하는 것부터 시스템이 사용되고 유지보수 되는 것까지 소프트웨어 제품화와 관련된 모든 관점을 다루는 공학 분야다.
공학적 학문 분야
•
적절한 이론, 방법, 도구 등을 적용하여 조직, 재정 등 제약 하에서 해결책을 찾는다.
•
적용 가능한 이론이나 방법이 없는 경우에도 문제 해결을 위해 노력해야 한다.
소프트웨어 생산의 모든 관점
기술적인 소프트웨어 개발 과정 뿐만 아니라 프로젝트 관리와 개발 지원 도구, 방법, 이론의 개발 등을 포함
소프트웨어 공학의 중요성
•
개인과 사회가 소프트웨어 시스템에 많이 의존적이다.
•
안정적이고 신뢰할 수 있는 시스템을 경제적이고 빠르게 개발할 필요가 있다.
•
전문적인 소프트웨어 개발을 위해 소프트웨어 공학 방법 및 기법을 사용하는 것이 보통 비용이 적게 든다.
•
소프트웨어 공학 방법을 사용하지 않을 시 테스팅, 품질보증, 장기적 유지보수 등을 위한 비용이 증가한다.
소프트웨어 프로세스
소프트웨어 제품을 만드는 데 필요한 일련의 활동들이다.
소프트웨어 프로세스의 공통적인 4가지 기본사항
1. 소프트웨어 명세화 (Specification)
고객과 개발자가 소프트웨어의 기능과 운영 제약조건을 정의
2. 소프트웨어 개발 (Development)
소프트웨어를 설계하고 프로그램을 작성
3. 소프트웨어 검증 (Validation)
소프트웨어가 고객이 요구하는 것이 맞는지 확인
4. 소프트웨어 진화 (Evolution)
고객과 시장의 요구에 따라 소프트웨어를 수정
애플리케이션 유형
애플리케이션 유형
1.
독립형 애플리케이션
2.
대화형 트랜잭션 기반 애플리케이션
3.
임베디드 제어 시스템
4.
일관처리 시스템
5.
오락 시스템
6.
모델링 및 모의실험 시스템
7.
데이터 수집 및 분석 시스템
8.
복합 시스템
소프트웨어 공학 기본 사항
1.
관리되고 이해할 수 있는 개발 프로세스를 이용하여 개발해야 한다.
2.
모든 유형에 시스템에서 확실성 (Dependability)과 성능 (Performance)는 중요하다.
•
장애 없이 의도대로 작동해야 하며, 동작 중엔 안전해야 하며, 자원낭비 없이 동작해야 한다.
3.
소프트웨어 명세와 요구사항을 이해하고 관리하는 것이 중요하다.
4.
기존의 자원을 활용 → 이미 개발되어 있는 소프트웨어를 재사용(Reuse) 해야 한다.