1. 소프트웨어 공학론 - 서론

1) 소프트웨어란 무엇인가?

소프트웨어 → 프로그램 + 문서(분석, 디자인등의 모든 것을 의미한다)

프로그램 → 실행 가능한 명령어의 집합

코드 → 프로그램의 일부분

소프트웨어의 4가지 특징

  • 복잡성(Complexity) = 동일모듈의 반복으로 만들 수 없다.
  • 순응성(Conformity) = 사용자 목적에 따라 설계가 달라진다.
  • 변경성(Changeability) = 운영체제, 버전등이 업그레이드 된다.
  • 비가시성(Invisibility) = 보이지 않아서 파악이 어렵다.

[Frederick P. Brooks, Jr., No Silver Bullet, 1987]

소프트웨어의 4가지 종류

  • Custom Software = 맞춤형 소프트웨어
  • Package Software(Commercial Off-The Shelf[COTS]) = 마트에서 기성품 판매하는 것 처럼 판매하는 소프트웨어
  • Embedded Software = 하드웨어에 종속된 소프트웨어
  • SaaS(Software as a Service) = 브라우저에 접속해서 사용하는 서비스.

2) 소프트웨어 엔지니어링이란?

“소프트웨어 엔지니어링”이라는 단어는 1968년에 NATO회의에서 처음으로 등장했다. 해당 회의의 주제는 Software Crisis에 관한 것이었다.

Software Crisis란, 1960년대들어 급격히 증가한 소프트웨어 개발의 규모와 그 복잡성으로 인한 충격들을 의미한다. Software Crisis로 인한 문제들을 해결하고자 소프트웨어 개발에 대하여 공학적 방법으로 접근한 것이 소프트웨어 엔지니어링의 시작이다.

소프트웨어 엔지니어링이란, 소프트웨어의 개발, 운영, 유지보수, 폐기에 관한 체계적인 접근방법. 소프트웨어의 전 생애를 체계적으로 관리하는 것이다.(by IEEE Computer Society) 최소 비용으로 최고 효율(경제적인)의 프로그램을 만들기 위한, 공학, 수학적 방법이라고도 한다.

소프트웨어 비즈니스 문제들

소프트웨어를 개발하다 보면 여러가지 문제들을 마주하게 되는데, 대표적으로 아래의 4가지가 있다.

  • 높은 비용

    → 소프트웨어 생산성 평균 300~1000 LOC/MM (LOC : Lines of code, MM : Man Month)

  • 프로젝트 지연

    → About 13,000 projects between 1983 and 2009

    Untitled

    [Software Quality and Software Economics, Software Tech News, April 2010]

  • 낮은 안정성
  • 유지보수

    → 개발 비용보다 유지보수 비용이 더 높아지기도 한다.

3) 소프트웨어 엔지니어링 접근법

소프트웨어 엔지니어링은 개발 절차, 소프트웨어 퀄리티 보장, 프로젝트 관리 측면에서 개발에 접근한다. 개발 절차는 아래의 4개 과정으로 나타낼 수 있다.

  1. 필요조건 분석
  2. 설계
  3. 구현
  4. 테스트

테스트는 소프트웨어 퀄리티 보장(SQA : Software Quality Assurance)의 일부이다.

SWEBOK

Software engineering body of knowledge의 약자로, 소프트웨어 엔지니어링이 다루는 지식체계를 ISO/IEC에서 표준화 한 것이다. 아래는 SWEBOK 3.0이 다루는 15가지 지식영역이다.

Untitled

해당 링크에서 영문 문서를 다운받을 수 있다. v2.0의 한국어 번역 블로그 링크도 있다.

참고자료