본문 바로가기
컴퓨터과학/소프트웨어공학

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

by 윤호 2021. 3. 8.

Github로 보기


소프트웨어란 무엇인가

  • Computer programs and associated documentation
  • 소프트웨어 개발은 코딩 이상으로 문서 관리가 중요하다.
    • 유지보수 차원에서 문서가 굉장히 중요한 역할을 함

소프트웨어 공학이란 무엇인가

  • 소프트웨어를 마드는데 필요한 체계적인 절차
  • 프레스만의 정의
    • instruction(computer programs), datastructures(I/O), documentations

소프트웨어의 분류

가장 고전적인 분류

  • 응용 소프트웨어
    • 사용자의 원하는 목적에 맞게 개발된 소프트웨어
    • 예) 워드프로세서, 웹브라우저, 모바일앱 등등
  • 시스템 소프트웨어
    • 하드웨어를 관리하고 응용 소프트웨어를 지원하는 소프트웨어
    • 예) 운영체제, 네트워크 관리 프로그램, 파일 관리 프로그램 등등

필요한 자원을 기준으로 분류

image-20210308111941264.png

  • 일반 소프트웨어
    • 특정한 플랫폼, 운영체제 위에서 돌아가는 소프트웨어
    • 규격화된 하드웨어 및 OS를 대상으로 좋은 범용 개발 환경을 갖추고 있어, 소프트웨어 분야의 지식만으로도 개발 가능
  • 임베디드 소프트웨어
    • 특정 기계 또는 시스템상 특정 목적만을 위해 수행되는 소프트웨어
    • 특정 응용을 위해 설계, 확장성 적음, 비기능적인 부분을 충분히 고려해야함
    • 해당 도메인, 하드웨어 및 소프트웨어 분야의 지식을 충분히 갖추어야 개발 가능

소프트웨어의 특징

소프트웨어의 비가시성(invisibility)

  • 소프트웨어 완제품의 구조가 개발된 코드 안에 숨어 있어 파악하기 힘든 특징

프레스만이 정의한 소프트웨어의 특징

  • 소프트웨어는 고전적인 의미의 '제조(Manufacture)'가 아니라, '개발(Development)'
    • 제조는 생산하는 과정을 거침. -> 아이폰을 공장에서 여러개 찍어냄
    • 소프트웨어는 생산하는 데 자원이 거의 들지 않음. -> 계산기 프로그램을 배포하는 것이지 여러개를 복제할 필요하는 것이 아님
  • 소프트웨어는 닳지 않지만, 요구사항의 변경과 주변 환경의 변화에 따라 수정되고 진화

소프트웨어의 특성으로 인한 개발의 어려움

  • 물리적인 형태가 없는 무형의 논리적인 요소
    • 개발 과정에 대해 정확하게 이해하기 어려움
    • 개발 진행 상황을 파악하기 어려움
  • 최종 산출물이 개발 과정에서 확인되지 않음
    • 오류를 발견해야 할 시기를 놓칠 수 있음
    • 오류에 대한 해결책을 못 찾는 경우 발생
      • 코드를 짠다고 바로 확인 가능하지 않음. 구현 가능한 수준이 되어야 확인할 수 있음
  • 결과적으로 프로젝트의 지연 및 예상 범위 초과와 인한 프로젝트 실패 가능성이 높음

소프트웨어 개발

고객의 요구 -> 요구사항 분석 -> 설계 -> 구현 -> 테스팅 -> SW 제품

관련된 역할들

  • 고객(Customer)
  • 사용자(User)
    • 개발자에게 소프트웨어 시스템에 대한 사용자 측면에서의 요구사항을 제공
    • 고객이 사용자의 역할을 같이 할 수도 있음
    • 사용자의 작업을 이해하고, 요구사항을 이끌어내는 것이 매우 중요함
  • 개발자(Developer)
    • 고객과의 계약대로 주어진 시간 및 비용 내에서 사용자들의 요구사항을 기반으로 소프트웨어 시스템을 개발하는 역할

예전의 소프트웨어 프로그램의 개념

  • 소프트웨어 프로그래밍 = 예술

    • 개발자에 따라 다양한 방식이 존재
    • 사용자 = 프로그래머 = 유지보수 담당자
    • (전형적인 검은화면에 타다다닥하는 천재 너드같은 이미지를 생각해보자)
  • 체계적 방법의 부재

    • 정형적인 방법론이 거의 없고, 그것을 사용할 수 잇는 사람도 거의 없음
    • 프로그래머는 시행착오에 의해 기술을 습득함
  • 소수의 천재 개발자들이 주도하던 시절, 혼자 해도 가능한 정도의 소프트웨어 규모

공학으로써의 소프트웨어

프로젝트의 규모가 커지므로써 소프트웨어의 공학적 접근이 필요해짐

image-20210308115940480.png

  • 소프트웨어의 위기
    • 소프트웨어 수요 증가에 비해 공급 및 개발의 어려움
  • 소프트웨어의 위기 해결
    • 다른 분야에서 사용했던 공학(Engineering) 패러다임을 이용하자는 결론
    • 1968년 NATO 컨퍼런스에서 소프트웨어 공학(Software Engineering) 제안됨

소프트웨어 공학

소프트웨어 공학이란

정의

  • 소프트웨어의 개발, 운용, 유지보수 및 폐기에 대한 체계적인 접근 방법

특징

  • 소프트웨어 개발 전 과정 걸쳐 필요한 이론, 개념 및 기술을 다룸 (단순한 코딩X)
  • 소프트웨어 개발 과정에서 생산되는 모든 산출물이 그 대상이 됨

목표

  • 소프트웨어 개발이 체계적이고 공학적인 방법으로 이루어져 추정된 비용과 기간에 고객이 원하는 품질 높은 소프트웨어를 개발하는 것

과학, 공학, 예술의 차이

예술 - 천재를 양산하는 것이 목적

과학 - 결과물로써의 관심. 결과에 비중을 둠 (컴퓨터는 과학과 공학의 경계가 희미함)

공학 - 천재의 퍼포먼스를 조금 줄이더라도 보통사람들의 퍼포먼스도 이끌어 내는 것

공학이란

의미

  • 실제적 문제를 해결하거나
  • 실제적인 산출물을 생산해내기 위해
  • 자원과 비용을 효과적으로 활용하면서
  • 과학적 지식을 적용하는 것

공학과 소프트웨어 공학

  • 공학
    • 업무분야에서 문제 발생 시, 실무자가 적절한 해답을 찾을 수 있도록 체계적으로 정리된 기술적 지식을 제공
    • (화학과와 화공과 - 화학과는 물질이 어떻게 조합되는지 지식을 공부함. 화공은 지식을 활용하여 어떻게 만들지를 공부함)
  • 소프트웨어 공학
    • 소프트웨어 개발 기술, 절차 및 도구의 Best Practice들을 정리하여 소프트웨어 개발 시 , 누구나 당연한 문제를 해결할 수 있도록 체계적인 기술 적 지식을 제공
    • (과학은 진리가 있으나 공학은 없음)

소프트웨어 공학의 주요 영역들

  • (미국과 같이 컴퓨터 전통이 오래된 곳은 이를 각각의 과목으로 둔다고함)

요구공학(Requirement Engineering)

아키텍처(Architecture)

개발방법론(Development Methodology)

테스팅(Testing)

프로세스(Process)

형상관리(Configuration Management)

품질(Quality)

재사용(Reuse)

프로젝트관리(Project Management)

정형기법(Formal Method)

유지보수(Maintenance)


reference

  • 상명대학교 한종대교수님 소프트웨어공학 수업

댓글