1장. 소프트웨어와 소프트웨어공학

기타/[소프트웨어 공학]

2019. 3. 5. 15:48

 

[소프트웨어]

: 컴퓨터 프로그램 + 관련 기록문서(Documentation)

 

 

[소프트웨어의 분류]

1. 용도에 따른 분류

 (과거)

  1. 응용 소프트웨어 : 사용자의 원하는 목적에 맞게 개발된 소프트웨어 (ex. 워드,브라우저등)

  2. 시스템 소프트웨어 : 하드웨어 관리, 응용 소프트웨어를 지원하는 소프트웨어 (ex. 운영체제, 네트워크관리프로그램등)

 (오늘날) - 암기X

  1. 시스템 소프트웨어 : 다른 프로그램 서비스위한 프로그램 (ex. 컴파일러, 에디터, 파일관리자)

  2. 실시간(RT) 소프트웨어 : 즉시적 반응을 리턴하는 프로그램 (ex. 자동차 엔진제어 SW)

  3. 비지니스(Business) 소프트웨어 : 비지니스 활동을 지원하는 프로그램 (ex. MIS(경영정보시스템))

  4. 공학 및 과학용 소프트웨어 : 계산활동 지원하는 프로그램 (ex. 인공위성궤도분석, CAD)

  5. 내장형(Embedded) 소프트웨어 : 제한적 기능 수행 (ex. IOT 제어)

  6. 개인용 소프트웨어 : 특정 개인의 목적위해 사용되는 프로그램 (ex. 워드,PPT등)

  7. 웹 기반 소프트웨어 : 내 서버에 수정하면 그 수정적용된것을 사람들이 보는 구조의 프로그램 (ex. 온라인 회원관리 프로그램)

  

2. 작동경로에 따른 분류

  1. Stand-alone(독립형) : 다른 소프트/하드웨어와 연결X (ex. 워드)

  2. Embedded(내장형) : 특정(Unique) 응용위해 설계, 적은 확장성 (ex. 자동차제어 SW)

  3. Real-Time(실시간형) : 적은 시간차내 기능해야함 (ex. 레이더관측)

  4. Networt(네트워크형) : 복수의 기기서 동시작동(ex. 웹기반 게임)

 

 

[소프트웨어의 특징]

- 소프트웨어의 비가시성(Invisibility) : 소프트웨어 개발중/완성품의 구조가 코드안에 숨어있어 파악이 어려움

- 요구사항의 변경과 주변 환경의 변화에 따라 소프트웨어는 수정되고 진화해야함 (프레스만이 정의 - 소프트웨어의 의미는 '제조'가 아닌 '개발'이다.)

 

 

[소프트웨어의 특성으로 인한 개발의 어려움]

- 소프트웨어는 물리적 형태 X  : 개발과정/진행사항에 대한 정확한 이해 및 파악이 어려움

- 만드는 과정중 오류확인의 어려움 => 프로젝트 실패 가능성 高

 

 

[소프트웨어 개발 단계]

: 요구사항 분석 -> 설계 -> 구현 -> 테스팅

 

 

[소프트웨어 개발에 연관된 역할들]

1. 고객(Customer) 

 - 소프트웨어의 개발 필요성을 결정(이런 프로그램이 필요해!)

 - 개발 의뢰, 비용 제공

2. 사용자(User)

 - 사용자 측면에서의 요구사항을 제공 (주로 벤치마크, 설문조사 등을 통해 이런 요구사항 확인)

3. 개발자(Developer)

 - 주어진 시간 및 비용내에서 사용자들의 요구사항을 기반으로 소프트웨어 시스템을 개발하는 역할

 

 

[과거의 소프트웨어 개발]

- 소프트웨어 프로그래밍 = 예술 (ex. 한줄코딩)

  : 체계적 방법의 부재(정형적인 방법론X, 개개인의 시행착오로 기술습득) => 대규모 프로젝트의 어려움

      1. 수백명의 개발자 : 의사소통, 상호협력의 어려움

      2. 오랜 개발시간 : 비용, 시간

      3. 모호하고 복잡한 요구사항 : 너무많은 요구사항, 빈번한 요구사항의 변화

=> 소프트웨어 위기(SW crisis) : 증가하는 수요에 비해 어려운 공급 및 개발

=> 소프트웨어 위기의 해결 : 공학의 패러다임을 이용(Art => Engineering)

 

 

[소프트웨어 공학]

: 소프트웨어의 개발, 운용, 유지보수 및 폐기에 대한 체계적인 접근 방법

<목표> : 추정된 비용과 기간에 고객이 원하는 품질 높은 소프트웨어를 개발하는것.

 

 

[과학, 공학, 예술]

- 예술(과거) : 자기 목표만 달성/ 독창적

- 공학(현재) : 다른사람과 체계속에서 자기역량 발휘

- 과학 : 공학+예술

 

 

[공학]

: 실제적 문제 해결 / 자원과 비용의 효과적 활용, 과학적 지식을 적용

<소프트웨어 공학>

: 소프트웨어 개발 기술, 절차 및 도구의 우수한 사례들을 정리해 소프트웨어 개발시 , 누구나 당면한 문제를 해결할수 있도록 체계적 기술 지식을 제공

 

 

[소프트웨어 공학의 주요 영역들]

1. 요구공학(Requirement Engineering) 

  : 고객의 요구를 이해, 목표와 제약사항을 확립 / 비용 증가, 납기 지연, 품질 저하 방지 위한 필수 요건

2. 아키텍쳐(Architecture) 

  : 요구사항을 보며 소프트웨어의 큰틀을 짜는 과정(전체적인 형태)

3. 개발 방법론(Development Methodology) 

  : 시스템 개발위해 어떤 방법으로 진행할지 다루는 분야 (구조적 방법론, 객체지향 방법론(class단위), 컴포넌트 방법론(package단위)) / 개발 기술 진화에 따라 지속적으로 공부해야함.

4. 테스팅(Testing)

  : 효과적인 테스트 케이스 산출 방법론, 다양한 테스트 방법 연구

5. 프로세스(Process)

  : 일련 작업의 흐름들중 적절한 거 선택(소프트웨어 개발, 진화에 사용되는 활동들의 집합)

6. 형상관리(Configuration Management) 

  : 변경관리대상인 형상 항복 식별, 변경통제, 기록 (GIT)

7. 품질(Quality)

8. 재사용(Reuse) 

  : 지식,요구분석,설계,문석등의 재사용(벤치마크등)

9. 프로젝트 관리(PM)

  : 프로젝트 일정, 인력, 예산 관리.

10 정형기법(Formal Method)

  : 요구사항 충돌 확인, 하드/소프트웨어 시스템 명세및 검증 기법

11. 유지보수(Maintenance)

  : 개선목적 수정, 보안

 


 

[Summary]

1. 소프트웨어 특성 

 : 비가시성(Invisibility), 요구사항/주변환경에 따른 지속적 변화

 

2. 소프트웨어 공학 

 : 소프트웨어의 개발, 운용, 유지보수 및 폐기(전체적 과정)에 대한 체계적인 접근 방법( 우수사례 정리해 개발시 이를 이용해 문제해결하도록 만듬 )

 

3. 소프트웨어 공학의 등장 배경 

 : 기존의 소프트웨어 프로그래밍 = Art(개인적,독창적) => 대규모 프로젝트의 어려움, 소프트웨어 위기 => 공학의 패러다임을 이용

 

4. 소프트웨어 위기 

 : 소프트웨어의 수요의 증가추세를 공급이 따라가지 못함

 

5. 소프트웨어 공학의 분야 

 : 요구공학/아키텍쳐/개발방법론/테스팅/프로세스/형상관리/품질/재사용/프로젝트관리/정형기법/유지보수 등

 

6. 소프트웨어 관련 고객, 사용자 개발자의 역할 

 : 1. 고객 : 소프트웨어 개발 필요성, 비용 제공  /  2. 사용자 : 사용자입장에서의 요구사항 제공   /   3. 주어진 시간,비용으로 요구사항 만족