본문 바로가기

IT/정보처리기사

[시나공 토막강의] 20-21강 정리

20강. 소프트웨어 개발 방법론

- 소프트웨어 개발, 유지보수 등에 필요한 여러 가지 일들의 수행 방법, 그 과정에서 필요한 각종 기법 및 도구를 표준화한 것

- 목적은 소프트웨어의 생산성과 품질 향상

 ex) 구조적, 정보공학, 객체지향, 컴포넌트 기반(CBD), 제품 계열, 애자일 방법론

 

1. 구조적 방법론

- 정형화된 분석 절차에 따라 사용자 요구사항을 파악하여 문서화하는 처리 중심의 방법론

- 1960년대까지 가장 많이 적용

- 쉬운 이해 및 검증 가능한 프로그램 코드 생성이 목적, 분할과 정복(Divide and Conquer) 원리를 적용

- 개발 절차 : 타당성 검토 -> 계획 -> 요구사항 -> 설계 -> 구현 -> 시험 -> 운용/유지보수

 

2. 정보공학 방법론

- 계획, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합 및 적용하는 자료(Data) 중심의 방법론

- 정보 시스템 개발 주기를 이용하여 대규모 정보 시스템을 구축하는데 적합

- 개발 절차 : 정보 전략 계획 수립 -> 업무 영역 분석 -> 업무 시스템 설계 -> 업무 시스템 구축

 

3. 객체지향 방법론

- 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어 객체들을 조립해서 필요한 소프트웨어를 구현하는 방법론

- 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택

- 구성 요소 : 객체, 클래스, 메시지 등

- 기본 원칙 : 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등

- 개발 절차 : 요구 분석 -> 설계 -> 구현 -> 테스트 및 검증 -> 인도

 

4. 컴포넌트 기반(CBD; Component Based Design) 방법론

- 기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조합하여 새로운 애플리케이션을 만드는 방법론

- 컴포넌트의 재사용(Reusability)이 가능하여 시간과 노력을 절감할 수 있음

- 새로운 기능을 추가하는 것이 간단하여 확장성이 보장됨

- 유지 보수 비용을 최소화하고 생산성 및 품질을 향상 시킬 수 있음

- 개발 절차 : 개발 준비 -> 분석 -> 설계 -> 구현 -> 테스트 -> 전개 -> 인도

 

5. 제품 계열 방법론

- 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론

- 임베디드 소프트웨어를 만드는데 적합함

- 영역공학 : 영역 분석, 영역 설계, 색심 자산을 구현하는 영역

- 응용공학 : 제품 요구 분석, 제품 설계, 제품을 구현하는 영역

- 영역공학과 응용공학의 연계를 위해 제품의 요구사항, 아키텍처, 조립 생산이 필요함

 

 

21강. S/W공학의 발전적 추세

 

1. 소프트웨어 재사용(Software Reuse)

- 이미 개발되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것

- 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법

- 기존에 개발된 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용함

- 합성 중심(Composition-Based) : 소프트웨어 부품을 끼워 맞춰 소프트웨어를 완성(블록 구성 방법)

- 생성 중심(Generation-Based) : 추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방벙(패턴 구성 방법)

 

2. 소프트웨어 재공학(Software Reengineering)

* 재공학 : 문서 수정 -> 소스 수정, 역공학 : 소스 -> 문서

- 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것

- 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하기 때문에 유지보수의 생산성 향상을 통해 소프트웨어 위기 극복을 도모

- 이점 : 소프트웨어의 품질 향상, 생산성 증가, 수명 연장, 오류 감소

 

3. CASE(Computer Aided Software Engineering)

- 요구 분석, 설계, 구현 등 소프트웨어 개발 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것

- 객체지향 시스템, 구조적 시스템 등 다양한 시스템에서 활용되는 자동화 도구(CASE Tool)

- 소프트웨어 생명 주기의 전체 단계를 연결하고 자동화하는 통합된 도구를 제공

- 소프트웨어 개발 도구와 방법론이 결합되었으며, 정형화된 구조 및 방법을 소프트웨어 개발에 적용하여 생산성 향상 구현

- 주요 기능 : 소프트웨어 생명 주기 전 단계의 연결, 다양한 소프트웨어 개발 모형 지원, 그래픽 지원