정보처리기사 - 요구사항 확인 #20~21

2023. 8. 19. 10:58자격증/정보처리기사

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

20.1 소프트웨어 개발 방법론

소프트웨어 개발, 유지보수 등에 필요한 여러 가지 일들의 수행 방법과 이러한 일들을 효율적으로 수행하려는 과정에서 필요한 각종 기법 및 도구를 체계적으로 정리하여 표준화한 것
  • 소프트웨어 개발 방법론의 목적은 소프트웨어의 생산성과 품질 향상
  • 주요 소프트웨어 개발 방법론
    • 구조적 방법론 : 처리(Process) 중심
    • 정보공학 방법론 : 자료(Data) 중심
    • 객체지향 방법론
    • 컴포넌트 기반(CBD) 방법론
    • 제품 계열 방법론
    • 애자일 방법론

20.2 구조적 방법론

정형화된 분석 절차에 따라 사용자 요구사항을 파악하여 문서화하는 처리(Process) 중심의 방법론
  • 1960년대까지 가장 많이 적용되었던 소프트웨어 개발 방법론
  • 쉬운 이해 및 검증이 가능한 프로그램 코드를 생성하는 것이 목적
  • 복잡한 문제를 다루기 위해 분할과 정복(Divide and Conquer) 원리를 적용
  • 구조적 방법론의 개발 절치
    • 타당성 검토 단계 → 계획 단계 → 요구사항 단계 → 설계 단계 → 구현 단계 → 시험 단계 → 운용/유지보수 단계

20.3 정보공학 방법론

정보 시스템의 개발을 위해 계획, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합 및 적용하는 자료(Data) 중심의 방법론
  • 정보 시스템 개발 주기를 이용하여 대규모 정보 시스템을 구축하는데 적합함
  • 정보공학 방법론의 개발 절차
    • 정보 전략 계획 수립 단계 → 업무 영역 분석 단계 → 업무 시스템 설계 단계 → 업무 시스템 구축 단계

20.4 객체지향 방법론

현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 소프트웨어를 개발할 때 기계의 부품을 조립하듯이 객체들을 조립해서 필요한 소프트웨어를 구현하는 방법론
  • 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택
  • 객체지향 방법론의 개발 절차
    • 요구 분석 단계 → 설계 단계 → 구현 단계 → 테스트 및 검증 단계 → 인도 단계

20.4.1 구성 요소

  • 객체, 클래스, 메시지 등

20.4.1.1 객체(Object)

데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈

20.4.1.2 클래스(Class)

공통된 속성과 연산을 갖는 객체의 집합으로 객체의 일반적인 타입(Type)

20.4.1.3 메시지(Message)

객체들 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구 사항

20.4.2 기본 원칙

  • 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등

20.4.2.1 캡슐화(Encapsulation)

데이터와 데이터를 처리하는 함수를 하나로 묶는 것

20.4.2.2 정보 은닉(Information Hiding)

캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것

20.4.2.3 추상화(Abstraction)

불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에 중점을 두어 개략화하는 것

20.4.2.4 상속성(Inheritance)

이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

20.4.2.5 다형성(Polymorphism)

메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력

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

기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조합하여 하나의 새로운 애플리케이션을 만드는 방법론
  • 컴포넌트(Component) : 문서, 소스코드, 파일, 라이브러리 등과 같은 모듈화된 자원
  • 컴포넌트의 재사용(Reusability)이 가능하여 시간과 노력을 절감할 수 있음
  • 새로운 기능을 추가하는 것이 간단하여 확장성이 보장
  • 유지 보수 기능을 최소화하고 생산성 및 품질을 향상시킬 수 있음
  • 컴포넌트 기반 방법론의 개발 절차
    • 개발 준비 단계 → 분석 단계 → 설계 단계 → 구현 단계 → 테스트 단계 → 전개 단계 → 인도 단계

20.6 제품 계열 방법론

특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
  • 임베디드 소프트웨어를 만드는 데 적합
  • 임베디드 소프트웨어(Embedded Software) : 제품의 특정 기능에 맞게 특화되어서 제품 자체에 포함된 소프트웨어
  • 제품 계열 방법론은 영역공학과 응용공학으로 구분
    • 영역공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역
    • 응용공학 : 제품 요구 분석, 제품 설계, 제품을 구현하는 영역
  • 영역공학과 응용공학의 연계를 위해 제품의 요구사항, 아키텍처, 조립 생산이 필요

21. 소프트웨어 공학의 발전적 추세

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

이미 개발되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것
  • 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법
  • 기존에 개발된 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용

21.1.1 소프트웨어 재사용 방법

21.1.1.1 합성 중심 (Composition-Based)

전자 칩과 같은 소프트웨어의 부품, 즉 블록을 만들어서 끼워 맞춰 소프트웨어를 완성시키는 방법으로, 블록 구성 방법이라고도 함

21.1.1.2 생성 중심 (Generation-Based)

추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법으로, 패턴 구성 방법이라고도 함

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

새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것
  • 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하기 때문에 유지보수의 생산성 향상을 통해 소프트웨어의 위기를 해결하는 방법
  • 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시킴
  • 소프트웨어 재공학의 이점
    • 소프트웨어 품질 향상, 생산성 증가, 수명 연장, 오류 감소
  • 소프트웨어 재사용과 소프트웨어 재공학의 차이
    • 소프트웨어 재사용 : 이미 개발된 소프트웨어를 다른 소프트웨어에 사용
    • 소프트웨어 재공학 : 기존 시스템을 활용하여 소프트웨어 성능 향상

21.3 CASE (Computer Aided Software Engineering)

소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것
  • 객체지향 시스템, 구조적 시스템 등 다양한 시스템에서 활용되는 자동화 도구(CASE Tool)
  • 자동화 도구(CASE Tool) : 소프트웨어 공학과 관련된 작업 중에서 하나의 작업을 자동화하는 패키지를 의미
  • 소프트웨어 생명 주기의 전체 단계를 연결하고 자동화하는 통합된 도구를 제공
  • 소프트웨어 개발 도구와 방법론이 결합되었으며, 정형화된 구조 및 방법을 소프트웨어 개발에 적용하여 생산성 향상을 구현함
  • CASE의 주요 기능
    • 소프트웨어 생명 주기 전 단계의 연결
    • 다양한 소프트웨어 개발 모형 지원
    • 그래픽 지원