[컴퓨터공학/소프트웨어공학] 소프트웨어 공학 개요

2021. 4. 21. 00:34 기타 정보/소프트웨어 공학

[컴퓨터공학/소프트웨어공학] 소프트웨어 공학 개요

1. 소프트웨어의 정의

포괄적/소프트웨어 공학 관점의 소프트웨어 정의 :

👉 좁은 의미의 소프트웨어(프로그램과 관련 데이터의 묶음)에 더하여 관련 문서들을 포함한 개념

 

2. 소프트웨어의 분류

  • 기능에 따른 분류
    • 시스템 소프트웨어
    • 응용 소프트웨어
  • 사용자에 따른 분류
    • 일반(Generic) 소프트웨어 : = 패키지 소프트웨어 = 범용 소프트웨어
    • 맞춤형(Custom) 소프트웨어 : = 비스포크 소프트웨어

 

3. 소프트웨어의 성질

  • 무형의 인공물 - 물질적인 성질 없음
  • (H/W에 비해) 컴포넌트들의 조립을 통해 만들기 어려움
  • 설계 과정의 품질 보증 활동 중요 (cf. H/W : 구현/제작 과정이 중요)
  • 개발 비용 ≒ 인건비
  • (H/W에 비해) 변경 용이 - 소프트웨어의 유연성 / 순응성
  • 마모되지 않음
    • 하드웨어 신뢰성의 욕조 곡선(bathtub curve)와 비교

(좌) 하드웨어는 초기 고장률이 높고 안정기를 거쳐 마모되며 고장률이 다시 증가하는 반면 (우) 소프트웨어는 시간이 지남에 따라 안정됨

 

4. 소프트웨어 응용 분야

  • 시스템 소프트웨어
  • 실시간 소프트웨어 : 자동 제어 시스템, 은행 시스템, 좌석 예약 시스템
  • 내장형 소프트웨어 : 장비 제어 목적으로 주로 사용
  • 비즈니스 소프트웨어 : 회계 업무 패키지, 급여 관리/재고 관리 패키지, MIS(경영 정보 시스템)
  • 개인용 소프트웨어
  • 인공지능 소프트웨어 : 로보틱스, 전문가 시스템, 화상/음성 인식 소프트웨어
  • 웹 기반 소프트웨어
  • 공학용/과학용 소프트웨어 : CAD, 기상 분석 소프트웨어, 유전자 분석 소프트웨어

 

5. 소프트웨어 위기 현상

  • 1968년 NATO 소프트웨어 공학 컨퍼런스에서 첫 용어 등장
  • 하드웨어에 비해 소프트웨어의 기술 발전이 더딤을 일컬음
  • 소프트웨어 공학이라는 학문 분야가 등장하게된 배경

 

6. 소프트웨어 위기 현상의 원인과 사례(결과)

원인 사례(결과)
소프트웨어 엔지니어의 부족
경영층의 인식 부족
방법론과 도구의 부재 -> 개발 생산성의 저하
소프트웨어 자체의 복잡성 증가
개발 일정의 지연
초과 비용 발생
제품 신뢰도 결여
명세를 충족하지 못하는 제품
유지보수가 어려워짐

 

7. 소프트웨어 개발 시 고려 사항

  • 소프트웨어 개발은 단순한 코드의 생성이 아님
    • 요구사항 명세, 설계, 프로젝트 관리 등을 포함한 통합적 문제 인식 필요
  • 개발 프로세스와 프로젝트 관리가 중요함
  • 비용을 줄이고 제품의 품질을 높이기 위한 방법
    • 문서화를 통한 프로젝트 관리
    • 초기 요구사항 명세화 작업
    • 소프트웨어의 변경/재사용성을 염두해서 개발

 

8. 소프트웨어 공학 환경의 구성

  • 소프트웨어 공학 원리 : 소프트웨어 공학의 기본 철학, 원리
    • 예) 추상화, 분할정복, 계층적 조직의 원리, ...
  • 방법과 기술 : 체계적이고 일반적인 가이드라인
  • 방법론 : 소프트웨어 개발 프로세스(what)와 개발 방법(how)를 결합한 개념

계층적 구조 👉 소프트웨어 공학 원리에 기초하여 방법과 기술이, 방법과 기술에 의해 방법론이, 방법론에 기초하여 도구가 만들어짐

 

출처 : atoz-develop.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B3%B5%ED%95%99-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EA%B3%B5%ED%95%99-%EA%B0%9C%EC%9A%94?category=814648