728x90
소프트웨어 공학
소프트웨어 공학이란?
- 하드웨어의 빠른 발전은 사용자 요구 증가, 불 만족 등 문제 발생
- 이러한 문제점이나 위기를 극복하기 위한 학문
- 소프트웨어 개발 과정에 공학적인 원리를 적용하여 소프트웨어를 개발
- 최소 비용 고품질 개발을 위해 모든 도구, 방법론을 총칭
- 과학적인 지식을 컴퓨터 프로그램의 설계와 제작에 응용
(이를 개발, 운영, 유지 보수하는데 필요한 활동을 문서화)
소프트웨어 공학의 접근법
즉흥적인 개발의 문제점
- 개발 지연과 예산 초과
- 낮은 품질
- 유지보수 곤란
- 재작업
접근법
- 개발, 운영, 유지보수, 소멸에 대한 체계적인 접근 방법
- 일회성이 아닌 반복 사용이 가능한 의미
- 결과를 예측할 수 없는 주먹구구식이 아닌 엔지니어링 기법을 도입하려고 함
- 유사한 소프트웨어를 만들 수 있음
소프트웨어 엔지니어링 기법
- 소프트웨어 개발 프로세스: 시스템에 대한 비전과 개념을 목표로 컴퓨터 환경에 실행되는 소프트웨어로 바꾸는 작업
- 품질 보증 SQA: 개발 작업이 적절히 수행되었는지 확인, 산출물이 요구와 일칳라는지 검증
- 프로젝트 관리: 개발 품질보증 작업을 관리하고 감독하며 프로젝트 관리
소프트웨어 공학의 목표
- 개발 어려움 해결, 복잡도 낮춤 (대규모 프로젝트는 복잡함)
- 효율적 개발을 통한 생산성 향상 (표준화 작업으로 효율성 높임)
- 고품질 소프트웨어 제품 생산 (사용자 만족, 정상작동 신뢰성 보장)
- 비용 최소화 (개발자 인건비가 매우 높음)
- 개발 기간 단축 (계획 없이 하면 시간을 낭비할 수 있음)
- 대규모 프로젝트 관리 (규모가 큰 프로젝트는 단기간 구축할 수 없음)
소프트웨어 공학 기본 원칙
- 소프트웨어 구축을 위한 방법, 도구를 제공
- 소프트웨어 구축 방법에 대한 자동, 반자동 자원을 제공
- 방법과 도구를 이용하여 소프트웨어 합리적으로 개발하고 접속
- 현대적인 구축 기술 계속 적용
- 개발된 소프트웨어가 최상의 품질을 유지하도록 지속 검증
- 관련 사항을 문서화 하여 명확성을 유지
- 비용을 최소화한다
- 컴퓨터 이용 효율, 정보를 데이터 베이스화 한다
- 언어와 알고리즘 최신 동향을 주기적으로 파악한다.
- 바이러스 예방을 통해 시스템 안전을 확보한다.
객체지향 소프트웨어 공학
- 1980년 C++ 보급되며 객체지향 소프트웨어를 설계하기 위한 방법론이 요구됨
- UML
순차적인 프로세스는 요구 변경이 어려워 극복하기 위해 객체지향 프로세스가 제안됨, 작업 단게를 명시하고 작업을 수행하기 위해 어던 단계를 밟아야 하는지 나타냄
언제 무엇을 할 것인지 개발 작업의 순서와 결과물들을 정의함
최신 소프트웨어 공학의 핵심 기술
- 추상: 문제 핵심을 개괄적으로 표현
- 분석과 설계 비법: 설계 의도와 아이디어를 표현할 수 있는 표준 바업
- 사용자 인터페이스 프로토타이핑: 사용자에게 시스템을 미리 보여주어 요구사항 일치하는지 점검
- 소프트웨어 구조: 각 컴포넌트가 어떤 역할을 담당하며 인터페이스를 나타낸 것
- 소프트웨어 프로세스: 개발하는 절차
소프트웨어 개발 생명주기(SDLC)
- 계획 단계에서 유지보수 까지 일어나는 일련의 과정
- 개발된 소프트웨어는 계속 변경되고 기능이 추가되어 쓰이다가 소멸됨
- 소프트웨어를 개발하는 절차 및 개발 단계의 반복
소프트웨어 생명주기의 역할
- 사용자와 개발자간 공동 의식을 가질 수 있음
- 소프트웨어 개발의 기본 골격으로 개발 진행의 파악이 용이함
- 개발된 소프트웨어 관리 하기 용이함
- 용어 및 기술 표준화가 가능함
소프트웨어 개발 단계
- 계획
- 요구분석
- 설계
- 구현
- 테스트
- 유지보수
- 품질 관리
- 프로젝트 관리
정의 단계
- 사용자 요구를 정의
- 타당성 검토: 기술적, 경제적, 법적 타당성
- 프로젝트 계획: 개발하는데 필요한 모든 자원, 비용을 준비
- 요구 분석: 개발할 소프트웨어 문제 영역을 사용자에게 얻어내어 분석
개발 단계
- 소프트웨어를 만드는 단계
- 설계: 절차 구조, 알고리즘, 자료구조, 구조도 등 작성하여 프로그램을 쉽게 구현할 수 있도록 준비
- 구현(코딩): 코딩 + 번역
- 검사: 오류를 찾아 수정하는 단계
유지보수 단계
- 개발된 소프트웨어의 품질을 유지하기 위한 노력
- 많은 시간과 비용이 투입
1단계: 계획단계
- 프로젝트에서 가장 먼저 하는 일
- 개발 비용 산정: COCOMO모델, 기능점수(FP) 모델
- 일정 계획: 작업분할구조도(WBS), CPM
- 위험 관리
- 최종 산출물: 기획서, 간트차트 등
2단계: 요구분석 단계
- 기존 시스템 문제점 파악 → 요구사항 도출 → 다이어그램 작성
- 개발 방법론에 따른 표현 도구
- 구조적 방법론: DFD, DD, Mini Spec
- 정보공학 방법론: E-R 다이어그램
- 객체지향 방법론: UML 유스케이스 다이어그램
- 최종 산출물: 요구분석 명세서
3단계: 설계 단계
- 분석단계에서 표현한 산출물을 통해 코딩할 수 있는 수준으로 구체화
- 설계 원리: 분할 정복, 추상화, 단계적 분해, 모듈화, 정보은닉
- 소프트웨어 아키텍처 설계, 객체지향 설계, 디자인 패턴
- 모듈 평가 기준: 응집도와 결합도
- 데이터 중심 형 모델, 클라이언트-서버모델, mvc등
4단계: 구현단계
- 프로그램을 작성
- 표준 코딩 규칙 (명칭, 소스형식, 주석, 변수 선언 자료형, 상수..등)
5단계: 테스트 단계
- 품질의 이상 유무에 대한 여러가지 테스트 가능
- 제품을 출시하기 전 여러 테스트 기법을 사용하여 오류를 찾아냄
- 테스트의 절차
테스트 계획, 테스트 케이스 설계, 테스트 실행 및 측정, 결과 분석 및 평가, 오류 추적 및 수정
6단계: 유지보수 단계
- 사용자가 소프트웨어를 사용하다 추가, 변경, 요구를 하면 조치를 취함
- 수정 유지보수, 적용 유지보수, 기능 보강 유지보수, 예방 유지보수
7단계: 품질 관리 단계
- 개발된 소프트웨어가 사용자 요구사항에 얼마나 만족하는지 점검
- 미굼 품질 보증 연구서에 11가지 품질목표를 설정
8단계: 프로젝트 관리 단계
- 프로젝트가 예정된 기간과 주어진 비용 안에서 요구하는 품질을 만족시키도록 프로젝트가 시작될 때부터 끝날 때 까지 관리
자원 관리, 리스크 관리, 프로젝트 수행과 모니터링
'IT개념 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어 공학]1-1. 소프트웨어 개념과 공학 소개 (0) | 2022.03.06 |
---|