[소프트웨어공학] 소프트웨어 공학 개요

👑 소프트웨어란 무엇인가?

소프트웨어(software)란 컴퓨터 시스템을 효율적으로 운영하기 위해 개발된 프로그램, 데이터,

그리고 그와 관련된 문서들의 집합을 의미한다. 하드웨어(hardware)와는 달리, 소프트웨어는 물리적

형태가 존재하지 않고 코드로 이루어진 비물리적 요소이다. 소프트웨어는 크게 두 가지로 나눌 수 있다.

  • 시스템 소프트웨어

    • 컴퓨터 시스템의 하드웨어를 관리하고 운영하는 역할을 한다.

    • 대표적으로 운영 체제, 드라이버, 유틸리티 프로그램 등이 있다.

  • 응용 소프트웨어

    • 사용자가 특정 작업을 수행하기 위해 사용되는 프로그램을 의미한다.

    • 사용자의 요구에 따라 다양하게 개발되며, 게임, 워드 프로세서 등이 해당한다.


💡 소프트웨어의 특징

  • 형체가 없는 비물리적 요소이다.

    • 개발 작업을 이해하기 어려우며, 구조 파악이 쉽지 않다.
  • 대량 생산이 용이하다.

    • 제조 단계의 비용이 큰 다른 엔지니어링과 다르게 비용 대부분이 개발 과정에 소요된다.
  • 노동 집약적이다.

  • 노후화되지 않는다.

  • 쉽게 변경이 가능하다.


💡 소프트웨어의 유형

  • 주문형

    • 특정 고객의 수요를 만족시키기 위해 개발되는 프로그램을 의미한다.

    • 재정관리 시스템, 기업의 인사 시스템 등

  • 패키지형

    • 시장에 판매할 목적으로 개발되는 범용적인 프로그램이다.

    • COTS(Commercial Off-The-Shelf) 라고도 불린다.

    • Excel, DBMS 프로그램 등

  • 임베디드 시스템

    • 하드웨어에 탑재할 목적으로 개발되는 프로그램이다.

    • 변경이 어려우며, 세탁기, 자동차 등에 설치되는 프로그램 등을 예시로 들 수 있다.

  • 실시간(Real-time) 소프트웨어

    • 임베디드 시스템이나 통신 네트워크 같은 특수 목적 하드웨어에 탑재되는 프로그램이다.

    • 제어, 모니터링을 위해 사용되며, 신속하게 반응하는 것과 안전성 확보가 가장 중요하다.

  • 자료처리 소프트웨어

    • 비즈니스 업무 처리에 사용되며, 자료의 정확성과 보안이 중요한 프로그램이다.


👑 소프트웨어 공학이란?

소프트웨어 공학이란 소프트웨어의 개발, 운용, 유지보수 등의 관련된 모든 것에 대해 체계적이고,

서술적으로 다루는 학문이다.

소프트웨어 공학의 궁극적인 목표는 결국 고객의 문제를 효율적으로 해결하는 것이라고 볼 수 있다.

대규모 소프트웨어의 경우 소수의 사람이 정해진 시간과 비용으로 개발·발전시키기 어려우므로, 체계적인

프로세스가 필수적이다. 작업을 분할하고, 한정된 자원을 분배하며, 그 외 기타 제약 사항들에 대해서도

생각하며 개발을 진행해야 하므로, 소프트웨어 공학적 사고는 필수적인 요소라고 볼 수 있다.

소프트웨어 공학이라는 용어는 1968년 NATO conference에서 처음 나타났으며, 소프트웨어 개발에

엔지니어링 원리가 도입되어야 함을 인식한 계기가 되었다.


💡 소프트웨어 품질의 속성

  • 사용용이성(usability)

    • 빨리 배우고 작업을 쉽게 할 수 있는 속성
  • 신뢰성(reliability)

    • 요구한 기능을 실패 없이 수행할 수 있는 속성
  • 유지보수성(maintainability)

    • 유지 보수를 쉽게 할 수 있는 속성
  • 효율성(efficiency)

    • 메모리와 같은 자원을 효율적으로 사용할 수 있는 속성
  • 재사용성(reusability)

    • 부품이 다른 프로젝트에서도 사용될 수 있는 속성


위의 속성들은 서로 상충될 수 있으며, 자원을 과다하게 낭비하는 것을 피해야 하기 때문에

품질의 목표 설정이 중요하다. 또한 한정된 자원으로 최대의 효율을 얻기 위한 최적화가 필요하다.

프로그램의 내부 품질 요소는 설계의 특징을 좌우하며, 외부 품질 특성에도 영향을 준다. 예를 들어

프로그램의 원시 코드의 복잡도와 주석의 양 등은 외부 품질 특성에 영향을 주게 된다.


💡 소프트웨어 프로젝트의 유형

  • 새로운 시스템의 개발

    • 설계가 비교적 자유로우며, 작업에 많은 시간이 소요된다.

    • 소프트웨어 구조가 중요하다.

  • 진화 유형

    • 기존 시스템에 대한 깊은 이해가 필요하며, 새로 추가하는 기능과 조화가 필요하다.
  • 컴포넌트 기반

    • 프레임워크나 컴포넌트를 기초로 시작하며, 조립과 커스터마이징이 주된 작업이다.


💡 소프트웨어 프로젝트의 단계

  • 요구 분석과 명세화

    • 사용자, 이해관계자, 고객 등으로부터 소프트웨어에 필요한 기능, 성능, 제약 조건 등을 수집하는 과정

    • 기능적 요구사항과 비기능적 요구사항(성능, 보안, 확장성 등)이 포함된다.

    • 수집한 요구사항을 문서로 정리하여 명확하고 구체적으로 표현하는 작업이 명세화

  • 설계

    • 요구사항이 어떻게 구현되어야 하는지를 기술

    • 시스템 엔지니어링 : 어떤 부분이 하드웨어, 소프트웨어가 되어야 하는지 결정

    • 소프트웨어 아키텍처 : 시스템을 서브 시스템으로 분할, 서브시스템의 작동을 결정

    • 서브시스템의 상세 설계와 사용자 인터페이스, DB 등을 설계한다.

  • 모델링

    • 소프트웨어 시스템을 시각적으로 표현하는 작업

    • UML 과 같은 다이어그램을 사용하여 소프트웨어의 구조와 동작을 시각화

    • 유스케이스 모델링, 정적, 동적 모델링, 행위 모델링 등

  • 프로그래밍

    • 실제 코드 작성

    • 프로그래밍 언어, 프레임워크, 도구를 선택하고 이를 바탕으로 소프트웨어를 완성해 나감

  • 품질 보증

    • 소프트웨어가 요구사항을 충족하고 결함이 없는지를 확인하는 단계

    • 리뷰, 인스펙션, 테스트 등을 통한 품질 보장, 검증

  • 배포

    • 개발이 완료된 소프트웨어를 실제 사용 환경에 배포하는 과정
  • 유지보수

    • 개발 완료된 소프트웨어의 오류 발생 시 복구, 수정, 새로운 사항 추가 등을 수행

Categories:

Updated:

Leave a comment