경희대학교 김정욱 교수님의 소프트웨어 공학 수업을 기반으로 정리한 글입니다.
소프트웨어의 정의
소프트웨어 (Software)
soft (부드러운) + ware (제품)
컴퓨터를 비롯한 시스템에서 특정 작업을 수행하게 하는 프로그램의 집합으로,
그 수행에 필요한 절차, 규칙, 문서 등의 총칭이다.
개발 과정에서 생성되는 모든 산출물(자료 구조, 데이터베이스 구조, 테스트 결과 등)과
각 단계에서 만들어지는 문서와 사용자 메뉴얼 등을 포함한다.
※ 프로그램: 프로그래밍한 원시 코드 (Source Code)
소프트웨어의 특징
소프트웨어의 특징
1. 비제조성
2. 소모되지 않는 소프트웨어
3. 사용자의 요구에 따라 새롭게 생산
4. 변경성 (Changeability)
5. 복제 가능 (Duplicability)
소프트웨어의 특징 (하드웨어와의 비교)
1. 제조가 아닌 개발
- 제조: 정해진 틀에 맞춰 일정하게 제품을 생산하는 것이다. (결과물의 차이는 크지 않음)
- 개발: 개인 능력에 따라 차이가 크다. (ex) 경력 1달의 프로그래머 vs 경력 10년의 프로그래머)
▶ 제조 vs 개발
2. 소모가 아닌 품질 저하
하드웨어 부품
먼지, 진동, 열, 마모 등으로 고장이 날 수 있다.
▶ 하드웨어의 실패 곡선
실패 곡선: 욕조 곡선(Bathtub Curve)
- 초기 실패율이 높지만, 오류를 해결하면 문제없이 오래 지속된다.
- 오래 사용하면 주변 환경의 문제(먼지, 마모 등)로 실패율이 치솟는다.
소프트웨어
하드웨어와 달리 닳지 않는다.
▶ 이상적인 소프트웨어의 실패 곡선 / 실제 소프트웨어의 실패 곡선
실패 곡선
- 이상: 오류를 해결한 후 문제없이 사용한다. (변경 사항도 없고, 환경 변화도 없을 때)
- 실제: 사용자의 요구가 계속 발생한다. -> 변경으로 인한 부작용으로 실패율이 급격히 증가할 수 있다.
※ 실제론 부작용을 해결하기도 하기에, 실패율이 오르락 내리락 반복하며 올라간다.
소프트웨어 개발의 어려움
수준에 따른 구분 (개발 난이도)
반려 동물 집 짓기 -> 단독 주택 짓기 -> 대형 빌딩 짓기
대규모 소프트웨어 개발의 어려움
대형 빌딩 짓기와 유사하다.
▶ 대규모 소프트웨어 개발의 어려움
▶ 실패한 제품을 통해 본 제품 개발 (소통의 어려움)
소프트웨어 공학의 등장배경
소프트웨어의 위기 (Software Crisis)
▶ 소프트웨어의 위기
소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 사용자 요구 사항을 감당할 수 없는 문제가 발생했다.
- 예산 초과, 일정 지연
- 비효율적이고 품질이 낮은 소프트웨어
- 고객의 요구사항을 만족 못 함
- 관리 불가능
즉, 체계적이지 못한 상황으로 인해 대규모 소프트웨어 개발이 어려워졌다.
이에 따라 공학의 개념을 소프트웨어에 주입하였다. (공학은 프로세스에 따라 처리, 즉 체계적인 학문)
※ 소프트웨어는 하드웨어를 기반으로 하는 것이기에, 하드웨어가 먼저 완성이 되어야 소프트웨어가 따라갈 수 밖에 없다.
소프트웨어 공학 (Software Engineering)
공학
- 공업적인 생산에 응용하여 생산력과 생산품의 성능을 향상, 발전시키기 위한 과학 기술의 체계적인 학문이다.
- 인류의 이익을 위해 과학적 원리, 지식, 도구 등을 활용하여 새로운 제품, 도구 등을 만드는 것이다.
소프트웨어 공학
- 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 정량적으로 다루는 학문이다.
소프트웨어 공학의 필요성
소프트웨어 공학의 필요성
1. 소프트웨어 공학은 소프트웨어에 있는 심각한 직접적인 손해 또는 간접적인 손해가 따를 수 있는 문제를 해결한다.
2. 소프트웨어 제품은 고객의 문제를 해결하기 위해 구축, 비즈니스를 운영하기 위하여 사용한다. (요구 분석)
3. 소프트웨어가 제대로 작동하지 않으면 재정적 손실이 크고 사용자가 불편을 겪는다.
소프트웨어 엔지니어의 역할
역할
- 문제 분석, 정확한 요구 사항 도출 (요구 분석)
- 소프트웨어 구조, 입출력, 인터페이스 설계
- 알고리즘, 데이터 구조, 데이터베이스 설계
- 양질의 프로그램 생산
- 테스트 및 통합 기술
- 사용자 지침서 및 개발 문서 작성
- 성능 측정(테스트)과 모델 설계
- 유지보수
- 프로젝트 계획 및 관리
※ 설계: 코딩 전 단계
소프트웨어 개발 프로세스
프로세스 (Process)
- 일을 해결하기 위한 목적으로 그 순서가 정해져 수행되는 일련의 절차 ex) 공장에서 자동차가 조립되어 완제품이 되는 과정
- 어떤 일을 해결할 때, 해당 프로세스만 잘 따르면 목적을 달성할 수 있다.
소프트웨어 개발 프로세스 모델
- 반려동물 집 짓기 -> 규모가 작은 소프트웨어 (소규모 프로젝트)
- 고층 빌딩 짓기 -> 규모가 큰 소프트웨어 (대규모 프로젝트)
소프트웨어 개발 생명주기 (SDLC)
1. 소프트웨어 공학에서의 소프트웨어 개발 프로세스의 의미
소프트웨어 공학
품질 좋은 소프트웨어를 경제적으로 개발하기 위해 계획을 세우고, 개발하며, 유지 및 관리하는 전 과정에서
공학을 적용해 필요한 이론과 기술 및 도구들에 관해 연구하는 학문이다.
즉, 소프트웨어 개발 과정에서 생산성을 높이고, 고품질의 소프트웨어를 생산해 사용자를 만족시키는 것이다.
소프트웨어 공학 관점에서의 소프트웨어 개발 프로세스
소프트웨어 개발 생명주기 (Software Development Life Cycle)
2. 소프트웨어 개발 생명주기 (Software Development Life Cycle)
하나의 제품인 소프트웨어를 만들기 위해 계획 단계에서 유지보수 단계에 이르기까지 일어나는 일련의 과정을 말한다.
(계획, 분석, 설계, 구현, 테스트, 유지보수)
▶ 소프트웨어 개발 생명주기
3. 소프트웨어 개발 생명주기 6단계
1단계: 계획
비용, 기간 등 프로젝트를 수행하는데 필요한 것에 대해 계획하는 단계이다. (개발자들끼리 내부적으로 회의)
▶ 예시: 배틀그라운드 (PC 게임)
2단계: 분석(요구분석)
개발할 소프트웨어의 기능, 제약조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의하는 단계이다. (예비 사용자들 의견 수렴)
▶ 예시: 배틀그라운드 (PC 게임)
3단계: 설계
분석 단계에서 표현한 다이어그램을 가지고 코딩할 수 있는 수준으로 환경에 밀접하게 구체화,
즉 소프트웨어의 구조, 알고리즘을 작성하는 단계이다. (체계적으로 구조화)
▶ 예시: 배틀그라운드 (PC 게임)
4단계: 구현
프로그래밍 언어를 사용하여 실제로 프로그램을 작성하는 단계로,
프로그래밍 언어를 선택하여야 하고, 프로그래밍 기법과 스타일, 프로그래밍 순서를 결정한다. (코딩)
▶ 예시: 배틀그라운드 (PC 게임)
※ 설계만 잘 되면 구현은 저절로 된다.
5단계: 테스트
개발한 시스템이 요구사항을 만족하는지, 실행 결과가 예상 결과와 맞는지,
숨어 있는 오류는 없는지 찾아내 완성도를 높이는 단계이다.
※ 테스트 단계에서 실패 곡선이 내려간다.
▶ 예시: 배틀그라운드 (PC 게임)
일단 돌아간다면 건드리지 마라?
좋은 소프트웨어 개발을 위해서는 건드려야 한다.
6단계: 유지보수
시스템이 인수되고, 배포가 이루어진 후 일어나는 모든 활동을 하는 단계로,
소프트웨어 개발 생명주기 중 가장 긴 기간이다.
여기서 모든 활동이란 결함을 수정하거나 성능 개선, 소프트웨어 제품 수정(v1.0 -> v2.0)을 말한다.
※ 유지보수 단계에서 실패 곡선이 올라간다.
※ 1~6단계는 개발 과정이지만 6단계는 배포 이후의 과정이다. (테스트 단계 이후 배포)
▶ 예시: 배틀그라운드 (PC 게임)
소프트웨어 개발 생명주기 모델
소프트웨어 개발 생명주기 모델은 왜 필요할까?
소프트웨어마다 특성이 다 다르기 때문이다.
어떤 소프트웨어를 개발하는지에 따라 소프트웨어 개발 생명주기의 각 단계별 중요도가 바뀐다. (가중치)
ex) 빠르게 출시해야 되는 소프트웨어, 보안이 중요한 은행 시스템
소프트웨어 개발 생명주기 모델의 정의
- 소프트웨어를 어떻게 개발할 것인가에 대한 전체 흐름을 체계화한 개념이다.
- 각 단계에서 무엇을 어떤 순서로 작업하며, 어떤 자원을 사용할 것인지에 대한 지침이다.
소프트웨어 개발 생명주기 모델의 목저
고품질의 소프트웨어 제품을 만드는 것이다.
소프트웨어 개발 생명주기 모델의 역할
- 프로젝트에 대한 전체적인 기본 골격을 세워 준다.
- 일정 계획을 수립할 수 있고, 개발 비용 산정 등을 분배할 수 있다.
- 각 단계별로 생성되는 문서를 포함한 산출물을 활용해 검토할 수 있게 해 준다. (history 확인)
소프트웨어 개발 생명주기 모델의 특징
세부적인 생명주기 모델(SDLC)은 소프트웨어 개발 팀마다 다르다.
▶ 소프트웨어마다 생명주기의 각 단계별 중요도가 다르다.
소프트웨어 개발 생명주기 모델의 종류
- 주먹 구구식 모델
- 선형 순차적 모델 ex) 폭포수 모델, V 모델
- 진화적 프로세스 모델 ex) 프로토타입 모델, 나선형 모델
- 단계적 개발 모델 ex) 점증적 개발 모델, 반복적 개발 모델(통합 프로세스 모델)
- 애자일 프로세스 모델
'전공 과목 > 소프트웨어 공학' 카테고리의 다른 글
Lecture 07: 요구분석 - 2 (7) | 2024.10.09 |
---|---|
Lecture 06: 요구분석 - 1 (11) | 2024.10.09 |
Lecture 05: 계획 (프로젝트 관리와 계획) - 2 (5) | 2024.10.05 |
Lecture 04: 계획 (프로젝트 관리와 계획) - 1 (12) | 2024.10.05 |
Lecture 03: 소프트웨어 공학과 개발 프로세스 - 2 (16) | 2024.10.03 |