본문 바로가기
정보처리기사/소프트웨어 설계

소프트웨어 공학의 개념

by jhwannabe 2023. 7. 7.

소프트웨어

소프트웨어(Software)의 개념

프로그램, 자료 구조, 문서

  • 컴퓨터를 동작시키고 어떤 일의 처리 순서와 방법을 지시하는 명령어의 집합인 프로그램과 프로그램의 수행에 필요한 절차, 규칙, 관련 문서 등을 총칭함
  • 프로그램(Program) : 컴퓨터를 통해 일련의 작업을 처리하기 위한 명령어와 관련된 데이터의 집합을 의미
  • 자료 구죠(Data Structure) : 컴퓨터 기억장치 내에 자료의 표현, 처리, 저장 방법 등을 총칭. 데이터 간의 논리적 관계나 처리 알고리즘을 의미
  • 문서(Paper) : 소프트웨어를 개발함에 있어서 사용자 설명서, 소프트웨어 요구분석서, 평가서, 명세서, 프로젝트 계획서, 검사 계획서 등을 의미

소프트웨어의 특징

상품성, 복잡성, 변경 가능성, 복제성

  • 상품성 : 소프트웨어를 개발하면 상품이 되어 판매가 됨
  • 복잡성 : 개발하는 과정이 복잡하고 관리가 어려움
  • 변경 가능성: 프로그램을 일부 수정하여 업그레이드 및 오류 수정 등을 할 수 있음
  • 복제성 : 복제가 용이해 쉽게 복사, 유통이 가능함

시스템(System)의 개요와 기본 요소

  • 시스템의 개요
    • 컴퓨터로 처리 가능한 자료를 입력하고 저장, 처리, 가공해 출력할 수 있도록 설계/구현된 정보 체계를 의미
    • 하나의 목적을 위해 다양한 요소가 유기적으로 결합된 것을 의미
  • 기본 요소
    • 입력, 처리, 출력, 제어, 피드백으로 구성

소프트웨어 위기(Software Crisis)

  • 컴퓨터의 발달 과정에서 소프트웨어의 개발 속도가 하드웨어의 개발 속도를 따라가지 못해 사용자들의 요구사항을 감당할 수 없는 문제가 발생함을 의미
  • 소프트웨어 위기의 원인
    • 하드웨어 비용을 초과하는 개발 비용의 증가
    •  개발 기간의 지연
    • 개발 인력 부족 및 인건비 상승
    • 성능 및 신뢰성 부족
    • 유지보수의 어려움에 따른 엄청난 비용

 

소프트웨어 공학(Software Engineering)

소프트웨어 공학의 이해

  • 경제적으로 신뢰도 높은 소프트웨어를 만들기 위한 방법, 도구와 절차들의 체계를 말함
  • IEEE는 소프트웨어의 개발 운용, 유지보수 및 파기에 대한 체계적인 접근 방법이라 정의함

소프트웨어 공학의 기본 원칙

  • 현대적인 프로그래밍 기술을 적용해야 함
  • 신뢰성이 높아야 함
  • 사용의 편리성과 유지보수성이 높아야 함
  • 지속적인 검증 시행해야 함
  • 결과에 대한 명확한 기록을 유지해야 함
  • 사용자가 원하는 대로 동작해야 함
  • 시스템의 안전성과 보안에 만전을 기함
  • 최신 프로그램 언어, 최신 알고리즘 사용 현황을 확인함
  • 소프트웨어 개발 비용을 최소화하도록 노력함
  • 개발 단계와 소스 코드 등의 문서화를 통해 명확성을 유지하도록 함

공학적으로 좋은 소프트웨어의 조건

  • 신뢰성이 높고 효율적이어야 하며, 사용자의 의도대로 동작해야 함
  • 편리성 제공 및 잠재적 에러를 최소화해야 함
  • 유지보수성이 용이해야 함

소프트웨어 공학 계층 구조

도구, 방법론, 프로세스

 

  • 도구 : 프로세스와 방법을 처리하는 기능을 제공하는 것
  • 방법론 : 소프트웨어를 설계하는데 기술적인 방법을 제공하는 것
  • 프로세스 : 소프트웨어의 가장 기초가 되며 개발에 사용되는 방법론과 도구가 적용되는 순서를 의미

소프트웨어 품질

  • 사용자의 요구대로 만들어져야 함
  • 유지보수가 쉬워야 함
  • 에러를 최소화해야 함
  • 초반에 정한 비용에 맞춰 개발해야 함
  • 정확한 결과가 도출되어야 함
  • 원하는 시간에 원하는 기능을 수행할 수 있어야 함

소프트웨어 공학의 목표

  • 소프트웨어의 생산성과 품질을 향상시킴
  • 초소의 비용으로 단기간에 시스템에 적합한 소프트웨어를 개발하는 것이 소프트웨어 공학의 궁극적 목적임

 

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

소프트웨어 재공학의 개념

  • 소프트웨어 위기를 개발의 생산성이 아닌 유지보수의 생산성으로 해결하려는 방법
  • 현재의 시스템을 변경하거나 재구조화(Restructuring)하는 것
  • 재구조화는 재공학의 한 유형으로 사용자의 요구사항이나 기술적 설계의 변경 없이 프로그램을 개선하는 것
  • 소프트웨어 재공학 관점에서 가장 연관 깊은 유지보수 유형은 예방 유지보수(Preventive Maintenance) 임

재공학의 장점, 목표, 과정

장점  개발 시간 및 비용 감소, 품질 향상, 생산성 향상, 신뢰성 향상, 구축 방법에 대한 지식의 공유, 프로젝트 실패 위험 감소
목표
  • 소프트웨어의 유지보수성 향상이 최우선 목표임
  • 복잡한 시스템을 다루는 방법 구현, 다른 뷰의 생성, 잃어버린 정보의 복구 및 제거
  • 재사용을 수월하게 하며 소프트웨어의 수명을 연장하기 위해서임
과정  분석(Analysis) → 구성(Restructuring) → 역공학(Reverse Engineering) → 이식(Migration)

재공학의 과정

  • 분석(Analysis) : 기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고 재공학 대상을 선정하는 것
  • 재구성(Restructuring) : 소프트웨어 구조를 향상시키기 위해 코드를 재구성하는 것
  • 역공학(Reverse Engineering) : 원시 코드를 분석하여 소프트웨어 관계를 파악하고 기존 시스템의 설계 정보를 재발견하여 다시 제작하는 작업
  • 이식(Migration) : 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환하는 작업

리팩토링(Refactoring)

  • 소프트웨어를 보다 쉽게 이해할 수 있고, 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작의 변화 없이 내부 구조를 변경하는 것을 의미

 

CASE (Computer Aided Software Engineering)

CASE

  • 소프트웨어 개발 과정에서 사용되는 요구분석, 설계, 구현, 검사 및 디버깅 과정을 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 작업
  • 자료 흐름도 등의 다이어그램을 쉽게 작성하게 해주는 소프트웨어 도구
  • 작업 과정 및 데이터 공유를 통해 작업자 간의 커뮤니케이션을 증대함

CASE가 제공하는 기능

  • 개발을 신속하게 할 수 있고, 오류 수정이 쉬워 소프트웨어 품질이 향상됨
  • 소프트웨어 생명주기의 전체 단계를 연결해 주고 자동화시켜 주는 통합된 도구를 제공해 주는 기술
  • 소프트웨어 시스템의 문서화 및 명세화를 위한 그래픽 기능 제공
  • 소프트웨어 개발 단계의 표준화를 기할 수 있으며 자료 흐름도 작성 기능 제공
  • 모델들 사이의 모순 검사 기능을 제공하며 다양한 소프트웨어 개발 모형 지원
  • 원천 기술 : 구조적 기법, 프로토타이핑 기술, 정보저장소 기술

CASE 사용의 장점

  • 소프트웨어 개발 기간 단축 및 개발 비용을 절약하여 소프트웨어 생산성을 향상시킴
  • 자동화된 검사를 통해 소프트웨어 품질이 향상됨
  • 프로그램의 유지보수가 간편해지고 소프트웨어 모듈의 재사용성이 향상됨
  • 소프트웨어 개발 주기의 표준안 확립, 소프트웨어 개발 기법의 실용화, 문서화의 용이성 제공, 시스템 수정 및 유지보수 축소 등의 효과를 얻을 수 있음

CASE의 분류

  • 상위(Upper) CASE : 요구분석 및 설계 단계 지원 (모델 간 모순 검사 가능, 모델 오류 검증 기능, 자료 흐름도 작성 기능)
  • 하위(Lower) CASE : 소스 코드 작성, 테스트, 문서화 과정 지원
  • 통합(Integrate) CASE : 소프트웨어 개발 주기 전체 과정 지원

 

요구사항 분석을 위한 CASE 도구

요구사항 분석을 위한 CASE

  • 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구를 의미
  • 표준화와 보고를 통한 문서화 품질 개선, 변경이 주는 영향 추적의 용이성, 명세에 대한 유지보수 비용 축소, 교차 참조도와 보고서를 통한 결함, 생략, 불일치 등의 발견 용이성 등의 특징을 가짐
  • DB를 모두가 이용 가능하다는 점에서 분석자들 간의 적절한 조정 기능을 제공함

요구사항 분석을 위한 CASE 도구

  • SADT(Structured Analysis and Design Technique)
    • SoftTech 사에서 개발한 것으로 시스템 정의, 소프트웨어 요구사항 분석, 시스템/소프트웨어 설계를 위해 널리 이용되어 온 구조적 분석 및 설계 도구
    • 구조적 요구분석을 하기 위해 블록 다이어그램을 채택한 자동화 도구
  • SREM(Software Requirements Engineering Methodology) = RSL / REVS
    • TRW 사가 우주국방시스템 그룹에 의해 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 기술하도록 할 목적으로 개발한 것
    • RSL(Requirement Statement Language) : 요소, 속성, 관계, 구조들을 기술하는 요구사항 기술 언어
    • REVS(Requirement Engineering and Validation System) : RSL로 기술된 요구사항들을 자동으로 분석하여 요구사항 분석 명세서를 출력하는 요구사항 분석기
  • PSL / PSA
    • 미시간 대학에서 개발한 것으로 PSL과 PSA를 사용하는 자동화 도구
728x90
반응형

'정보처리기사 > 소프트웨어 설계' 카테고리의 다른 글

요구사항 확인 기법  (0) 2023.07.08
요구사항 개발  (1) 2023.07.07
현행 시스템 분석  (0) 2023.07.07
SCRUM  (0) 2023.07.07
소프트웨어 개발 방법론  (0) 2023.07.07