2 소프트웨어와 소프트웨어 공학
소프트웨어의 중요성
소프트웨어
소프트웨어 공학
소프트웨어 생명주기
 
1 소프트웨어의 중요성
소프트웨어 공정의 문제점
 - 비용 초과
 - 기간 지연
 - 성능 저하
 - 신뢰성 저하
 - 유지보수 불가능
 - 엄청난 유지보수 비용
소프트웨어 위기 : 소프트웨어의 요구와 그 공급 능력간의 차이가 갈수록 심화
1.1 소프트웨어의 개념
소프트웨어란?
  협의 : 프로그램들의 집합, 프로그램 그 자체
  광의 : 프로그램,  프로그램 개발,  설치,  시험,  이용,  유지보수 과정,  필요한 문서체계
 
소프트웨어 구성요소
1) 실행할 때 원하는 기능과 성능을 제공해 주는 명령어들
2) 프로그램이 정보를 알맞게 조작하도록 해주는 자료구조
3) 프로그램의 수행과 사용을 설명해 주는 문서

1.2 소프트웨어의 발전

소프트웨어의 발전과정
 1) 1950년 - 1960년대 중반 (초창기 : Early Era)
   - 소프트웨어 초보단계, 자체사용 목적의 주문에 의해 설계, 개발
   - 한사람이 설계(design), 문서(documentation)는 거의 작성 안함.
   - 일괄처리 작업 수행
   - FORTRAN, COBOL, ALGOL과 같은 고급언어 개발
 2) 1960년 중반 - 1970년대 말 (2세대 : 성장기 Growing Era)
   - 1세대 데이터베이스 관리시스템 등장
   - Interactive기법
   - Realtime system등장
 3) 1970년 중반 - 1980년대 말 (3세대 : 세련기 Refining Era)
   - 소프트웨어 패키지 등장
   - 소프트웨어의 개발에 더 많은 투자
   - 통신분야 : WAN, LAN 출현
 4) 1980년 말 -  ...  (제 4세대) (4세대 : 숙련기 Maturing Era)
   - 전문가 시스템
   - Artificial Intelligent 소프트웨어 실용화
   - 객체지향기술 발전

2. 소프트웨어
2.1 소프트웨어의 특성 :
(1) 소프트웨어 개발의 특성
     ① 제조, 생산되는 것이 아니라 개발되거나 공학화되는 것이다.
     ② 소프트웨어는 “마모되는 것”이 아니라, 질이 나빠지는 것이다.
     ③ 소프트웨어는 하드웨어보다 유지보수가 상당히 복잡하다.
     ④ 기존의 구성요소를 조립하기보다는 주문하여 만든 것이다.
     ⑤ 수학적이지 못하고 논리 및 관리기술이 중요 ⇒ 비 과학성
 
(2) 소프트웨어가 가져야 할 특성
     ① 사용자가 원하는 대로 작동하여야 한다
     ② 사용하기 편해야 한다
     ③ 신뢰성이 높아야 한다
     ④ 효율적이어야 한다.
     ⑤ 유지보수가 용이해야 한다
     ⑥ 내포된 오류가 적어야 한다
(3) 소프트웨어 개발시의 유의 사항
     ① 단계적으로 추진
     ② 요구사항을 명확히 정의
     ③ 표준방법과 절차를 준수하여 생산성을 향상
     ④ 결과의 미비함을 보완시켜 신뢰도를 향상
     ⑤ 기간 안에, 예산범위에 공정관리
     ⑥ 신기술 도입 검토.
(4) 소프트웨어의 특성
     ① 유형성(Tangibility) : 인쇄된 Source code, 요구명세서, 상세설계서, 자료구조도, 시험계획서 등
     ② 행위성(Dynamic Behavior) : S/W는 H/W에서 작동되는 Program이다
     ③ 상품성(Goods) : Program은 제품이지만 S/W는 상품이다.
     ④ 견고성(Hardness) : S/W는 한번 구성되면 계속 사용하여야 하며, 구조성을 잃으면 사용 불가
2.2 프로그래밍 언어
(1) 기계중심 언어
(2) 고급 언어 : FORTRAN, COBOL, C, PASCAL 등
(3) 비 절차 언어 : LISP, PROLOG, RPG 등
 
2.3 소프트웨어 분류
응용 영역으로 분류
  1) 시스템 소프트웨어(system software)
  2) 실시간 소프트웨어(real-time software)
  3) 비즈니스 소프트웨어
  4) 공학 및 과학 소프트웨어
  5) 내장 소프트웨어 : ROM에 내장
  6) 개인용 컴퓨터 소프트웨어
  7) 인공지능 소프트웨어
 
적용분야별로 구분
  1) 응용 소프트웨어
  2) 시스템 소프트웨어
  3) 지원 소프트웨어

3. 소프트웨어 공학
소프트웨어 공학이란? : 소프트웨어 개발에서 부딪치는 일정, 비용, 생산성, 품질 등의 문제점과 원인을 인식하고 그 난관을 극복하는 모든 원리와 방법을 찾는 것

소프트웨어 공학의 여러 측면
- 지식-집약적 작업이다.
- 소프트웨어 표현 관한 지식 요구됨
- 소프트웨어 공정에 관한 지식 요구됨
  ∙프로그래밍
  ∙소프트웨어 개발 공정
  ∙도구, 환경
  ∙소프트웨어 프로젝트 관리
  ∙형상 관리
  ∙품질 관리
- 응용 분야에 관한(Domain-specific) 지식
 
3.1  소프트웨어 공학의 정의
① Fritz Bauer (1969) : 신뢰성 있고 실제 기계에 효과적으로 작동하는 소프트웨어를 경제적으로 얻기 위해서 올바른 공학적 원리들을 체계화시키고 이용하는 것
② Fritz Bauer (1972) : 컴퓨터 하드웨어에서 신뢰성 있게 운용되는 소프트웨어를 경제성 있게 개발하기 위해 공학적 원리를 응용하고 확립시킨 이론
③ Bohem (1978) : 컴퓨터 프로그램을 설계하고 개발하며, 개발․운용․유지보수에 관련된 문서를 작성하는 데 필요한 과학적인 지식의 실용화
④ IEEE Computer Society (1983) : 소프트웨어의 개발․운용․유지보수 및 폐기처분을 위한 제도적인 접근방안
⑤ Fairley (1985) : 전산학, 경영학, 경영과학 및 의사소통 기술과 문제해결을 위한 공학적인 접근방안을 토대로 소프트웨어개발에 임하는 기술적 체계
⑥ 권용래 (1986) : 최소의 경비로 품질 높은 소프트웨어를 개발하기 위한 기법․도구․관행의 총칭
⑦ 이철희 (1988) : 신뢰할 수 있고 요구기능을 수행하는 소프트웨어를 경제적으로 획득하기 위하여 공학적인 원인이나 방법을 창출하고 사용하는 기술
⑧ 이주헌 (1993) : 최소의 경비로 품질 높은 소프트웨어 상품의 개발․유지보수 및 관리를 위한 모든 기법․도구․방법론의 총칭으로서 전산학․경영학․심리학을 토대로 한 종합학문

3.2  소프트웨어 공학의 구성요소
1) 방법(method) :  소프트웨어 구축 기술인 “how to”를 제공
    ① 프로젝트의 계획수립과 추정
    ② 시스템과 소프트웨어 분석
    ③ 자료구조
    ④ 프로그램 구조
    ⑤ 알고리즘
    ⑥ 코딩
    ⑦ 테스팅
    ⑧ 유지보수
2) 도구(Tool)
3) 프로시듀어(procedure)

4 소프트웨어 생명주기
소프트웨어 생명주기란
  - 소프트웨어 프로세스 모형
  - 소프트웨어가 계획되어 더 이상 사용되지 않을 때까지의 기간
  - 순서 있는 작업에 의하여 목적한 제품을 생산
    ∙기술과 절차의 통합
    ∙프로젝트가 어떻게 일을 수행하여야 하는가 안내
    ∙소프트웨어 개발 단계의 순서를 결정
    ∙각 단계에서의 완성 기준 설정
  - 소프트웨어 개발 :
    ∙창조(creation)라기보다 점증적 개선(evolution)
 
소프트웨어 공학 파라다임(paradigm)
  ① 고전적 생명주기 : 폭포수 모형(waterfall model)
  ② 원형(prototyping)
  ③ 나선형 모형(spiral model)
  ④ 4세대 기술(fourth generation technology)

4.1 폭포수 모형(waterfall model)
고전적인 생명주기(classic life-cycle) :
 
 
1) 계획수립 및 정의단계(Planing & Definition Phase) :  무엇(what)에 초점
  ① 시스템 요구분석 단계(System Requirement) :
  ② 소프트웨어 요구분석 단계(Software Requirement) :
2) 개발단계(Development Phase) :  어떻게(How)에 초점
  ① 개략 설계 단계(Preliminaly Design) :
  ② 상세 설계 단계(Detailed Design) :
  ③ 코딩 및 디버깅 단계(Code and Debug) :
  ④ 시험 및 운영준비 단계(Testing and Preoperation) :
3) 유지 보수 단계(Maintenance Phase) :
① 수정적 유지 보수
② 적응적 유지 보수
③ 기능 향상
    폭포수 모형(Waterfall Model) 특징
    - 각 단계가 다음 단계 시작 전에 끝나야 함.
    - 각 단계 사이에 중복이나 상호작용이 없음
    - 각 단계의 결과는 다음 단계가 시작되기 전에 점검됨
    - 프로토타이핑이나 재사용을 배제
    - 설계, 코딩, 테스트의 지연
    - 소용없는 여러 종류의 문서를 생산

4.2 원형(Prototyping)
특징
 ① 사용자와 개발자 사이의 의사소통을 원활하게 함
 ② 갑작스런 사용자 요구 수용 가능 ⇒ 사용자 만족도 제고
 ③ 정확한 요구사항 전달 ⇒ 신뢰할 수 있는 문서화 가능
 ④ 생산성 향상 ⇒ 개발비용 절감
 ⑤ 사용자의 직접적인 참여 ⇒ 사용자로부터 품질보증.
 ⑥ 사용자에 대한 훈련시간 감소
 ⑦ 개발초기에 만족감을 줌
 ⑧ 프로젝트의 관리가 쉽다
 ⑨ 유지보수 노력 감소 ⇒ 유지보수 비용 절감
 
원형(Prototype)작성을 위한 순서
 ① 원형 작성 타당성 검토
 ② 기본 요구사항 확인 ⇒ 원형 개발
 ③ 개발된 원형을 사용자와 함께 사용해보고 평가
 ④ 문제점을 추출하여 보완
 ⑤ 문제점 없으면 최종 시스템으로 변환

4.3 나선형 모형(Spiral Model)
나선형 모형 구성의 4개 활동
 1) 계획 수립
 2) 위험 분석
 3) 개발
 4) 고객 평가
 
나선형 모형의 특징
 1) 대규모에 적합한 현실적 접근방법
 2) 개발자와 사용자가 위험을 이해하고 대응책 제시
 3) 각 단계마다 위험 감소장치로서 원형 적용 사용 가능
 
4.4  4 세대 기법

4세대 기법(fourth-generation techniques)
4GT :
- 소프트웨어의 특징만 명시하면 도구가 자동적으로 원시코드를 생성해주는 기법
- CASE도구로 알려진 도구의 사용 방법
- 대표적인 도구는 4GL

4.5  통합 패러다임
여러 패러다임을 사안이나  기능 또는 편이성에 따라
선택해서 하나의 패러다임으로 만들어 사용하는 것
4.6  기타
OOSE(Object-Oriented Software Engineering)패러다임

'UP! > Software Engineering' 카테고리의 다른 글

개발의 중요문제  (0) 2008.08.21
시스템분석가의 역할  (0) 2008.08.21
시스템의 특성  (0) 2008.08.21
분산시스템아키텍처  (0) 2008.08.21
소프트웨어 공학 개요 및 사회, 기술적 시스템  (0) 2008.08.21
Posted by 으랏차
,