소프트웨어 공학의 개념
소프트웨어
소프트 웨어의 개념
- 컴퓨터를 동작시키고 어떤 일의 처리 순서와 방법을 지시하는 명령어의 집합인 프로그램과 프로그램의 수행에 필요한 절차, 규칙, 관련 문서 등을 총칭
- 프로그램
- 컴퓨터를 통해 일련의 작업을 처리하기 위한 명령어와 관련된 데이터의 집합
- 자료구조(Data Structure)
- 컴퓨터 기억 장치 내에 자료의 표현, 처리, 저장 방법 등을 총칭하는 것으로 데이터 간의 논리적 관계나 처리 알고리즘을 의미함
- 문서(paper)
- 소프트 웨어를 개발함에 있어서 사용자 설명서, 소프트웨어 요구분석서, 평가서, 명세서, 프로젝트 계획서, 검사 계획서 등을 의미함
소프트웨어 특징
상품성
- 소프트 웨어를 개발하면 상품이 되어 판매가 됨
복잡성
변경가능성
- 프로그램을 일부 수정하여 업그레이드 및 오류 수정 등을 할 수 있음
복제성
시스템 개요와 기본요소
시스템의 개요
- 컴퓨터로 처리 가능한 자료를 입력하고 저장, 처리, 가공해 출력할 수 있도록 설계/구현된 정보체계를 의미함
- 하나의 목적을 위해 다양한 요소가 유기적으로 결합된 것을 의미
기본요소
- 입력, 처리, 출력, 제어, 피드백으로 구성됨
소프트웨어 위기(software crisis)
- 컴퓨터의 발달 과정에서 소프트웨어의 개발 속도가 하드웨어의 개발 속도를 따라가지 못해 사용자들의 요구사항을 감당할 수 없는 문제가 발생함을 의미
-
소프트웨어 위기의 원인
- 하드웨어 비용을 초과하는 개발비용의 증가
- 개발 기간의 지연
- 개발인력 부족 및 인건비 상승
- 성능 및 신뢰성 부족
- 유지보수의 어려움에 따른 엄청난 비용
소프트웨어 공학(Software Engineering)
소프트웨어 공학의 이해
- 경제적으로 신뢰도 높은 소프트웨어를 만들기 위한 방법, 도구와 절차들의 체계를 의미
- IEEE(전기/전자기술협회)는 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법이라 정의
소프트웨어 공학 계층구조
-
도구
-
방법론
-
프로세스
- 소프트웨어의 가장 기초
- 개발에 사용되는 방법론과 도구가 적용되는 순서를 의미
소프트웨어 공학의 목표
- 생산성과 품질 향상
- 최소비용으로 단기간에 시스템에 적합한 소프트웨어를 개발
재공학
재공학
소프트웨어 재공학(Software Reengineering)
- 소프트웨어 위기를 개발의 생산성이 아닌 유지보수의 생산성으로 해결하려는 방법
- 현재의 시스템을 변경하거나 재구조화(Restructuring)
- 재구조화는 재공학의 한 유형으로 사용자의 요구사항이나 기술적 설계의 변경 없이 프로그램을 개선하는 것
- 소프트웨어 재공학 관점에서 가장 연관 깊은 유지보수 유형은 예방 유지보수(Preventive Maintenance)
재공학의 장점, 목표 및 과정
장점
목표
- 유지보수성 향상이 최우선 목표
- 복잡한 시스템을 다루는 방법 구현
- 다른 view의 생성
- 잃어버린 정보의 복구 및 제거
- 재사용을 수월하게하며 소프트웨어의 수명 연장
과정
[분석: Analysis]>[구성: Restructuring]>[역공학: Reverse Engineering]>[이식: Migration]
역공학(Reverse Engineering)
- 소프트웨어 분석 기법
- 역공학의 가장 간단하고 오래된 형태는 재문서화
CASE; Computer Aided Software Engineering
CASE란?
- 소프트웨어 개발과정에서 사용되는 요구분석, 설계, 구현, 검사 및 디버깅 과정을 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 작업
- 자료 흐름도 등의 다이어그램을 쉽게 작성하게 해주는 소프트웨어 CASE 도구
- 작업 과정 및 데이터 공유를 통해 작업자간의 커뮤니케이션을 증대함
CASE가 제공하는 기능
-
신속한 개발 가능, 오류 수정 용이성 > 소프트웨어 품질 향상
-
소프트웨어 생명 주기의 전 단계를 연결해주고 자동화시켜주는 통합된 도구를 제공해주는 기술
-
소프트웨어 시스템의 문서화 및 명세화를 위한 그래픽 기능을 제공
-
소프트웨어 개발 단계의 표준화를 가능케하고 자료 흐름도 작성기능 제공
-
모델들 사이의 모순 검사 기능을 제공하며 다양한 소프트웨어 개발 모형을 지원
-
원천기술
CASE의 분류
상위(Upper) CASE
- 요구 분석 및 설계 단계 지원
- 모델 간 모순 검사 기능
- 모델 오류 검증 기능
- 자료 흐름도 작성 기능
하위(Lower) CASE
통합(Integrate) CASE
요구사항 분석을 위한 CASE 도구
SADT(Structured Analysis and Design Technique)
- softTech사에서 개발
- 시스템 정의, 소프트웨어 요구사항 분석, 시스템/소프트웨어 설계를 위해 널리 이용되어 온 구조적 분석 및 설계 도구
- 구조적 요구 분석을 하기 위해 블록 다이어그램을 채택한 자동화 도구
REM(Software Requirements Engineering Methodology) = RSL/REVS
- TRW사가 우주 국방 시스템 그룹에 의해 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 기술하도록 할 목적으로 개발
- RSL과 REVS를 사용하는 자동화 도구
- RSL(Requirement Statement Language)
- 요소, 속성, 관계, 구조들을 기술하는 요구사항 기술언어
- REVS(Requirement Engineering and Validation System)
- RSL로 기술된 요구사항들을 자동으로 분석하여 요구사항 분석 명세서를 출력하는 요구사항 분석기
소프트웨어 개발 방법론
소프트웨어 설계 방법론
소프트웨어 생명주기(Software Life Cycle)
- 소프트웨어 제품의 개념 형성에서 시작하여 운용/유지보수에 이르기까지 변화의 모든 과정
[타당성 검토]>[개발 계획]>[요구사항 분석]>[설계]>[구현]>[테스트]>[운용]>[유지보수]
폭포수(Waterfall Model) 모형의 개요
- 선형 순차적 모델
- Boehm이 제시한 고전적 생명주기 모형
- 소프트웨어 개발 과정의 각 단계가 순차적으로 진행
❗️ 나선형 모형(Spiral Model)
- 점증적 모형, 집중적 모형
- Boehm이 제시
- 반복적인 작업을 수행하는 점증적 생명주기 모형
- 유지보수 과정이 필요없음
- 소프트웨어 개발 중 발생할 수 있는 위험을 관리하고 위험을 최소화하는 것이 목적
- 나선을 따라 돌아가면서 각 개발 순서를 반복하여 수행하는 점진적 방식으로 누락된 요구사항 추가 가능
하향식과 상향식 설계
하향식
- 소프트웨어 설계 시 제일 상위에 있는 Main User Function에서 시작하여 기능을 하위 기능들로 나눠가면서 설계하는 방식
상향식
- 가장 기본적인 컴포넌트를 먼저 설계한 다음 이것을 사용하는 상위 수준의 컴포넌트를 설계하는 방식
프로토타입 모형(Prototype Model)
- 실제 개발될 시스템의 견본(Prototype)을 미리 만들어 최종 결과물을 예측
- 개발이 완료되고 나서 사용을 하면 문제점을 알 수 있는 폭포수 모형의 단점을 보완하기 위한 모형
- 요구사항 반영 가능
- 입력, 처리, 출력으로 구성되는 시스템 분석 및 설계와 시스템 문서화용 기법
- 가시적 도표(Visual Table of Contents), 총체적 다이어그램(Overview Diagram), 세부적 다이어그램(Detail Diagram)으로 구성됨
- 가시적 도표는 전체적인 기능과 흐름을 보여주는 구조
- 구조도(가시적 도표), 도표(Index Diagram), 상세도표(Detail Diagram)으로 구성
- 하향식 소프트웨어 개발을 위한 문서화 도구
❗️ ❗️ V-모델
- 폭포수 모형에 시스템 검증과 테스트 작업을 강조한 모델
- 테스트 작업을 단계별로 구분하므로 책임이 명확해짐
- 그림 꼭 기억