소프트웨어 공학 정리
· 약 115분
소프트웨어
- 하드웨어를 동작시켜 사용자가 작업을 편리하게 수행하도록하는 프로그램과 자료구조
- 프로그램 개발, 운용, 유지보수 관련된 모든 문서와 정보를 포함
특징
프레드릭 브룩스가 정의
- 복잡성: Complexity, 개발과정이 복잡, 비표준화
- 순응성: Conformity, 사용자의 요구나 환경 변화에 적절히 변경
- 변경성: Changeability
- 비가시성: Invisibility, 소프트웨어 구조는 외관으로 나타나지 않고 코드로 숨어 있다.
확장판
- 상품성 : 개발된 소프트웨어는 상품화되어 판매된다.
- 견고성 : 일부 수정으로 소프트웨어 전체에 영향을 줄 수 있다.
- 비마모성 : 마모되거나 소멸되지 않는다.
- 비제조성 : 하드웨어처럼 제작이 아니라 논리적인 절차에 맞게 개발
- 비과학성 : 과학적이 아니라 조직, 인력, 시간, 절차 등 중심
분류
- 유형:
- 주문형
- 패키지형
- 임베디드형
- 기능에 의한 분류 : 시스템, 응용
- 사용 분야에 의한 분류 : 프 로그래밍, 문서, 통신, 분산처리, 멀티미디어, 개발, 인공지능
- 개발 과정 성격에 따른 분류 : 프로토타입, 프로젝트 산출물, 패키지
- 정보처리 방법에 따른 분류 : 일괄처리, 온라인, 실시간
시스템 구성요소
- 입력 : 처리 방법, 처리할 데이터, 조건을 시스템에 투입하는 것
- 처리 : 입력된 데이터를 처리 방법과 조건에 따라 처리하는 것
- 출력 : 처리된 결과를 시스템에서 산출하는 것
- 제어 : 자료를 입력하여 출력될 때까지의 처리 과정이 올바르게 진행되는지 감독하는 것
- 피드백 : 출력된 결과가 예정된 목표를 만족시키지 못할 경우 목표 달성을 위해 반복 처리 하는 것
위기
여러가지 원인해 의해 개발 속도가 하드웨어의 개발속도를 따라가지 못해 소프트웨어에 대한 사용자들의 요구사항을 처리할 수 없는 문제가 발생함을 의미
- 소프트웨어의 특징에 대한 이해 부족 : 물리적이지 않고 논리적인 소프트웨어 특징을 이해하지 못함
- 소프트웨어의 관리 부재 : 소프트웨어에 대한 관리를 소홀히 하여 효율적인 자원 통제가 이루어지지 못했다.
- 프로그래밍에만 치중 : 소프트웨어 품질이나 유지보수는 고려하지 않고, 프로그래밍만 하려하므로 다양하고 복잡해지는 소프트웨어의 요구사항을 처리하지 못함
- 개발 인력 부족과 그로 인한 인건비 상승
- 성능 및 신뢰성 부족
- 개발 기간 지연 및 개발 비용 증가
- 유지보수가 어려워져 비용 증가
- 소프트웨어의 생산성 저하
- 소프트웨어의 품질 저하
소프트웨어 공학
- 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문
- 소프트웨어의 품질과 생산성 향상을 목적
- IEEE 정의 : 소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한 체계적인 접근 방안
- Fairley 정의 : 지정된 비용과 기간 내의 소프트웨어를 체계적으로 생산하고 유지보수하는 데 관련된 기술적이고 관리적인 원리
- Boehm 정의 : 과학적인 지식을 소프트웨어 설계와 제작에 응용하는 것이며 이를 개발 운용, 유지보수하는 데 필요한 문서 작성 과정
- 제품을 단지 생산하는 것이 아니라 가장 경제적인 방법으로 양질의 제품을 생산하는 것
- 계층화 기술을 사용한다.
계층화 기술
도구, 방법, 절차가 있다.
- 도구 : Tool 절차와 방법을 자동 또는 반자동으로 처리하는 기능을 제공, 대표적으로 CASE를 사용
- 방법 : Method 소프트웨어를 구축하는 기술적인 방법을 제공
- 절차 : Process
- 소프트웨어 개발에 사용되는 개발 방법과 도구가 사용되는 순서
- 계층화 기술들을 결 합시켜 합리적이고 적절한 방법으로 소프트웨어를 개발하고 유지
기본 원칙
- 현대적인 프로그래밍 기술을 계속적으로 적용해야한다.
- 개발된 소프트웨어 품질이 유지되도록 지속적으로 검증해야한다.
- 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야한다.
발전 과정
- 1960 : 소프트웨어 공학의 시작, 구조적 프로그래밍
- 1970 : 구조적 분석/설계 개념 도입, 상품화
- 1980 : 하드웨어 가격 하락
- 1985~ : 객체지향 기술 사용, CASE 등의 활용, 재공학
품질과 생산성
품질
- 사용자가 요구하는 대로 동작
- 하드웨어 자원을 효율적으로 이용
- 일정 시간 내에 주어진 조건하에서 원하는 기능을 실행
- 처리 절차에 맞게 수행되어 정확하게 결과가 산출
- 소프트웨어의 개발, 유지보수 등이 초기 예상 비용 이내에서 수행
- 적당한 사용자 인터페이스를 제공해 사용하기가 편리해 야한다.
- 유지보수가 용이하고 신뢰성이 높아야한다.
- 에러가 최소화
- 소프트웨어 사용법, 구조의 설명, 성능, 기능이 이해하기 쉬어야한다.
- 실행 속도가 빠르고, 기억 용량을 적게 차지해야 한다.
생산성
투입된 비용, 노력에 대한 생산량을 의미
- 개발자의 능력
- 원활한 의사 전달
- 프로젝트의 복잡도와 성격
- 기술 수준
- 관리 기술
생명 주기
- 소프트웨어 수명 주기
- 소프트웨어 개발 방법론의 바탕
- 소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 단계별로 나눈 것
- 프로젝트 비용 산정과 개발 계획을 수립할 수 있는 기본 골격
- 프롲게트 진행 방향을 명확하게 파악
- 용어 및 기술의 표준화를 가능하게 한다.
- 프로젝트 관리를 용이하게 한다.
- 여러 소프트웨어 간 상호 일관성을 유지하게 한다.
단계
정의 단계, 개발단계, 유지보수 단계로 나뉨