소프트웨어란 무엇인가
- Computer programs and associated documentation
- 소프트웨어 개발은 코딩 이상으로 문서 관리가 중요하다.
- 유지보수 차원에서 문서가 굉장히 중요한 역할을 함
소프트웨어 공학이란 무엇인가
- 소프트웨어를 마드는데 필요한 체계적인 절차
- 프레스만의 정의
- instruction(computer programs), datastructures(I/O), documentations
소프트웨어의 분류
가장 고전적인 분류
- 응용 소프트웨어
- 사용자의 원하는 목적에 맞게 개발된 소프트웨어
- 예) 워드프로세서, 웹브라우저, 모바일앱 등등
- 시스템 소프트웨어
- 하드웨어를 관리하고 응용 소프트웨어를 지원하는 소프트웨어
- 예) 운영체제, 네트워크 관리 프로그램, 파일 관리 프로그램 등등
필요한 자원을 기준으로 분류
- 일반 소프트웨어
- 특정한 플랫폼, 운영체제 위에서 돌아가는 소프트웨어
- 규격화된 하드웨어 및 OS를 대상으로 좋은 범용 개발 환경을 갖추고 있어, 소프트웨어 분야의 지식만으로도 개발 가능
- 임베디드 소프트웨어
- 특정 기계 또는 시스템상 특정 목적만을 위해 수행되는 소프트웨어
- 특정 응용을 위해 설계, 확장성 적음, 비기능적인 부분을 충분히 고려해야함
- 해당 도메인, 하드웨어 및 소프트웨어 분야의 지식을 충분히 갖추어야 개발 가능
소프트웨어의 특징
소프트웨어의 비가시성(invisibility)
- 소프트웨어 완제품의 구조가 개발된 코드 안에 숨어 있어 파악하기 힘든 특징
프레스만이 정의한 소프트웨어의 특징
- 소프트웨어는 고전적인 의미의 '제조(Manufacture)'가 아니라, '개발(Development)'
- 제조는 생산하는 과정을 거침. -> 아이폰을 공장에서 여러개 찍어냄
- 소프트웨어는 생산하는 데 자원이 거의 들지 않음. -> 계산기 프로그램을 배포하는 것이지 여러개를 복제할 필요하는 것이 아님
- 소프트웨어는 닳지 않지만, 요구사항의 변경과 주변 환경의 변화에 따라 수정되고 진화함
소프트웨어의 특성으로 인한 개발의 어려움
- 물리적인 형태가 없는 무형의 논리적인 요소
- 개발 과정에 대해 정확하게 이해하기 어려움
- 개발 진행 상황을 파악하기 어려움
- 최종 산출물이 개발 과정에서 확인되지 않음
- 오류를 발견해야 할 시기를 놓칠 수 있음
- 오류에 대한 해결책을 못 찾는 경우 발생
- 코드를 짠다고 바로 확인 가능하지 않음. 구현 가능한 수준이 되어야 확인할 수 있음
- 결과적으로 프로젝트의 지연 및 예상 범위 초과와 인한 프로젝트 실패 가능성이 높음
소프트웨어 개발
고객의 요구 -> 요구사항 분석 -> 설계 -> 구현 -> 테스팅 -> SW 제품
관련된 역할들
- 고객(Customer)
- 사용자(User)
- 개발자에게 소프트웨어 시스템에 대한 사용자 측면에서의 요구사항을 제공
- 고객이 사용자의 역할을 같이 할 수도 있음
- 사용자의 작업을 이해하고, 요구사항을 이끌어내는 것이 매우 중요함
- 개발자(Developer)
- 고객과의 계약대로 주어진 시간 및 비용 내에서 사용자들의 요구사항을 기반으로 소프트웨어 시스템을 개발하는 역할
예전의 소프트웨어 프로그램의 개념
소프트웨어 프로그래밍 = 예술
- 개발자에 따라 다양한 방식이 존재
- 사용자 = 프로그래머 = 유지보수 담당자
- (전형적인 검은화면에 타다다닥하는 천재 너드같은 이미지를 생각해보자)
체계적 방법의 부재
- 정형적인 방법론이 거의 없고, 그것을 사용할 수 잇는 사람도 거의 없음
- 프로그래머는 시행착오에 의해 기술을 습득함
소수의 천재 개발자들이 주도하던 시절, 혼자 해도 가능한 정도의 소프트웨어 규모
공학으로써의 소프트웨어
프로젝트의 규모가 커지므로써 소프트웨어의 공학적 접근이 필요해짐
- 소프트웨어의 위기
- 소프트웨어 수요 증가에 비해 공급 및 개발의 어려움
- 소프트웨어의 위기 해결
- 다른 분야에서 사용했던 공학(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
- 상명대학교 한종대교수님 소프트웨어공학 수업
'컴퓨터과학 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 프로젝트 계획 및 통제 - WBS, PERT, Gantt, EVM (0) | 2021.04.13 |
---|---|
[소프트웨어공학] 프로젝트 산정 - Delphi, LOC, COCOMO, FP (0) | 2021.04.12 |
[소프트웨어공학] 요구사항 개발 및 관리 - 요구사항, 유스케이스 다이어그램 (0) | 2021.03.29 |
[소프트웨어공학] 프로젝트 관리 - CMM, CMMI, ISO (0) | 2021.03.28 |
[소프트웨어공학] 프로세스 - 생명주기 모델(Build-Fix/Waterfall/Prototyping/Spiral), 개발 방법론(UX/XP) (0) | 2021.03.17 |
댓글