01) 소프트웨어의 이해
1. 소프트웨어의 정의
프로그램 : 프로그래밍한 원시 코드(source code)를 의미
소프트웨어 : 프로그램(코드)를 비롯해 개발과정에서 생성되는 모든 산출물(자료 구조, 데이터베이스 구조, 테스트 결과 등)과 각 단계에서 만들어지는 문서와 사용자 메뉴얼 등을 모두 포함
2. 소프트웨어의 특징 (하드웨어와 구분되는)
* 제조가 아닌 개발
*소모가 아닌 품질 저하 : 하드웨어 처럼 물리적인 부품 소모로 인해 실패 곡선이 상승하는 것이 아니라, 개발 완료 후 변경 사항, 환경 변화로 인한 부작용으로 인해 실패율이 급격히 증가 할 수 있음.
3. (대규모) 소프트웨어 개발의 어려움
* 개발과정이 복잡 => 개발의 복잡함을 줄이기 위한 방법이 필요
* 참여 인력이 많음 : 개발의 참여 인력이 많으면, 사람들의 통제가 힘듬 => 개발에 참여하는 팀을 구성하고 관리하는 효율적인 방법이 필요
* 개발 기간이 김 : 개발 기간이 길어질수록 프로젝트 진행 상황을 파악하기 쉽지 않고 개발 비용 산정도 어려움 => 프로젝트를 효율적으로 관리하는 체계가 필요
🧡 4. 소프트웨어 공학
* 공학 : (정해진 기간과 주어진 비용안에서) ①품질 좋은(서비스의 질, 제품의 질 등 ...), ②효율적인(비용, 시간 등 ...) 을 추구하기 위해 연구하는 것
ex) 쿠팡 - 배달기사의 경로 최적화, 고객의 구매 패턴 분석 -> 미리 고객 근처 물류창고에 물량 공급
소프트웨어 + 공학 = "품질 좋은 소프트웨어를 경제적으로 개발하기 위해 계획을 세우고, 개발하며, 유지 및 관리를 하는 전 과정에서 공학, 과학 및 수학적 원리와 방법을 적용해 필요한 이론과 기술 및 도구들에 관해 연구하는 학문"
=> (목적) 소프트웨어 개발 과정에서 생산성을 높이고, 고품질의 소프트웨어를 생산해 사용자를 만족시키는 것
소프트웨어 개발 과정 = 소프트웨어 개발 생명주기 (Software Development Life Cycle, SDLC) =
계획 - 분석 - 설계 - 구현 - 테스트 - 유지보수
02) 소프트웨어 개발 프로세스
1. 프로세스 : '주어진 일을 해결하기 위한 목적으로 그 순서가 정해져 수행되는 일련의 절차'
2. 소프트웨어 개발 프로세스
* 작업(task) : 소프트웨어를 개발할 때 일을 수행하는 작은 단위
* 소프트웨어 개발 프로세스
: task 순서의 집합 =>소프트웨어 제품을 개발할 때 필요한 절차나 과정으로 사용자의 요구사항을 소프트웨어 시스템으로 구현하기 위한 일련의 활동 (활동을 포함한 개발에 필요한 과정, 도구 참여자 까지 모두 포함하기도 함)
프로세스의 3요소
1. 능력, 교육 및 동기가 부여된 인원
2. 작업들의 관계를 정의하는 절차와 방법
3. 도구와 장비
3. 소프트웨어 개발 프로세스 모델
: 소프트웨어를 어떻게 개발 할 것인가 에 대한 전체과정을 체계화 한 것
03) 주먹구구식 모델
단점 : 관리,유지,보수 어려움 , 수정가능성⬆
04) 선형 순차적 모델 (Waterfall 모델)
: 표준 프로세스를 정해 순차적으로 개발
1. 폭포수 모델의 개발 절차
계획, 분석, 설계, 구현, 테스데, 유지보수의 각 단계가 하향식(top-down)으로 진행 / 병행되거나 거슬러 올라가지 X
=> 각 단계가 끝날 때마다 확실히 매듭을 짓고 그 결과를 확인한 후에 다음 단계로 나감
즉, 각 단계에서 생성되는 산출물에 대해 확인 절차를 거침으로 서로의 책임 소재를 분명히 할 수 있음.
2. 폭포수 모델의 장점과 단점
장점
* 관리가 용이
(관리자 측면) 변수가 줄어들기 때문에 예측 가능하다. (비용적 측면)
* 체계적으로 문서화할 수 있음
: 단계적 산출물으로 체계적으로 문서화
* 요구사항의 변화가 적은 프로젝트에 적합함
요구사항의 변화가 적은 산업, 기술, 시장 등 ...
반대로, 변화에 대응하기 취약 (최근 IT 분야는 변화가 빠름)
단점
* 각 단계는 앞 단계가 완료되어야 수행할 수 있음
=> 앞 단계가 끝날 때까지 다음 단계는 본격적으로 활동을 할 수 없음
* 각 단계마다 작성된 결과물이 완벽한 수준으로 작성되어야 다음 단계에 오류를 넘겨주지 않음
* 사용자가 중간에 가지적인 결과를 볼 수 없어 답답해할 수 있음
=> 구현이 끝난 후에야 결과물을 볼 수 있음, 사용자가 만족하지 않으면 요구사항에 따른 수정시간이 많이 듦
3. V모델
폭포수 모델이 산출물 중심이라면 V 모델은 각 개발 단계를 검정하는 데 초점을 두므로 오류를 줄일 수 있음
05) 진화적 프로세스 모델
새로운 요구가 수시로 발생해 이에 민첩하게 대응할 수 있는 방법 필요 => 진화적 프로세스(evolutionary process) 모델
이전 방법 보다는 사용자의 요구 (변화)를 수용하고자 한 모델
1. 프로토타입 모델
: 완전한 소프트웨어를 만들기 전에 사용자의 요구대로 일단 모형(입출력 화면 중심)을 만들고 사용자와 의사 소통하는 도구로 활용 ex) 모델 하우스
프로토타입을 만드는 것 : 프로토타이핑(prototyping)
개발자는 이용자의 요구사항을 반영해 1차 프로토타입(입출력 화면)을 만들고, 사용자에게 보여준다. 사용자는 1차 프로토타입을 보고 추가 요구나 수정 요구를 하고, 개발자는 이를 바탕으로 2차 프로토타입을 만든다. => 프로토타이핑
사용자가 만족할 때까지 이 과정을 여러 번 반복하여 최종 완성품을 만드는 개발 방식 : 프로토타입 모델
1.1 프로토타입 모델의 개발 절차
1. 요구사항 정의 및 분석 : 1차로 대략적인 요구사항을 정의, 2차, 3차 , ... ,n차 넘어가면서 완성도를 높힘
2. 프로토타입 설계 : 사용자 인터페이스 중심 설계 => 사용자에게 피드백을 받기 위함
3. 프로토타입 개발
4. 사용자에 의한 프로토타입 평가
1.2 프로토타입 모델의 장점과 단점
장점
* 프로토타입이 개발자와 사용자 간의 의사소통 도구로 사용되어 구체적으로 원활하게 대화할 수 있다는 것
* [프로토타입 + 사용자의 피드백]이 과정을 반복하는 과정에서 사용자의 요구사항이 충분히 반영
* 프로토타입을 만들어 봄으로써 유지보수의 필요한 노력과 시간을 많을 줄일 수 있음
단점
* 반복적인 소프트웨어 개발 단계로 인해 필요한 투입 인력과 비용 산정이 어려움
* 프로토타입을 보고 사용자가 금방 개발될 것으로 오해할 수 있음
* 개발자의 입장 : 프로토타이핑 과정을 관리/통제하기 어려움
* 프로토타입에 따른 추가 비용이 들 수 있음
🧡 2. 나선형 모델
나선형 모델은 초기 요구분석 후 프로토타입 개발 이전에 위험 분석 단계를 거침.
프로토타입을 사용자가 평가한 후, 개발자가 추가 또는 수정 요구를 받아들여 위험 분석을 거쳐 2차 프로토타입을 만든다. 이렇게 3차, 4차, ... n차를 거치는 동안 사용자의 요구가 충분히 반영되어 만족할 만한 최종 제품이 만들어짐.
2.1 나선형 모델의 개발 절차 -> 프로토타입 개발이 계속되다 결과가 나옴
1. 계획 및 요구분석 단계 (Planning and Requirement Analysis)
2. 위험 분석 단계 (Risk Analysis)
3. 개발 단계 (Engineering) : 프로토타입을 만듦, 다른 소프트웨어 개발 프로세스의 설계와 구현
4. 사용자 평가 단계 (Users Evaluation)
2.2 나선형 모델의 장점과 단점
장점
* 위험분석단계가 존재하여, 위험을 고려하고 개발 => 위험에 의해서 프로젝트가 중단되는 심각한 사태가 일어날 확률⬇
* 사용자의 요구가 반영되는 반복되는 개발방식 => 최종완성본에 대한 사용자의 불만⬇
=> 사용자의 요구 충분히 반영 / 유연하게 변화에 대응 가능
단점
* 요구분석 - 위험분석 - 개발 - 사용자 평가 가 반복적으로 이루어짐 => 프로젝트 기간이 길어질 수 있음
* 반복횟수가 많아짐 => 프로젝트 관리가 어려움 (관리자 입장) -> 잘 관리하기 위해서 체계가 필요
<=> waterfall 방식은 전체적인 흐름을 크게 벗어나지 않고 계획대로 실행 + 과정이 순차적으로 진행 + 과정마다 산출물이 있음 => 관리자 입장에서 관리가 편함
06) 단계적 개발 모델
개발자가 릴리즈1을 개발하여 사용자에게 제공, 사용자가 릴리즈1을 사용하는 동안 릴리즈2를 개발.
개발과 사용을 병행하는 과정을 반복하면서 완료
1. 점증적 개발 방법 : 개발 범위의 증가
: 중요하다고 생각되는 부분부터 차례로 개발한 후 그 일부를 사용하면서 개발 범위를 점차 늘려가는 방식
2. 반복적 개발 방법 : 품질의 증가
: 초기에 시스템 전체를 일차적으로 개발에 인도한 후, 각 서브시스템의 기능과 성능을 변경 및 보강해 완성도를 높인다. 이렇게 업그레이드된 릴리스 버전을 다시 내놓는 것이다.
🧡🧡 07) 통합 프로세스 모델 (중요!)
폭포수 모델 => 사용자의 요구사항이 많으면 민첩하게 대응할 수 없음
이를 해결하기 위해, 반복적 개발 방법론 등장
반복적 생명주기를 사용하는 모델 중 가장 많이 사용 => 통합 프로세스 (Unified Process, UP)
❗ 요구사항 정의는 Inception 단계에서 10%만 이루어진다. 구체화 단계에서 대부분의 요구사항이 나온다. (구축 단계에서도 있기는 있다.)
1. 통합 프로세스 모델의 절차
① 도입 단계 (Inception Phase) (1~2회 정도 반복)
* 개발의 기초가 되는 아이디어 도출
* 투자 비용 대비 효과 분석
* 사업의 타당성 및 프로젝트의 실형 가능성 확인
* 소프트웨어 개발 목표 수립
* 프로젝트의 위험 요소 발굴 🧡
* 사용자의 요구는 인셉션 단계에서 10% 정도
* 사용자와 의사 교환할 수 있는 프로토타입 개발
* 몇 가지 요구사항의 명확화
* 액터(actor)와 유스케이스(use case) 도출
* 아키텍쳐 후보군 발굴
EX) 다음 중 Inception 단계의 활동이 아닌 것은?
cf) 아키텍처(architecture) : 소프트웨어 구조
② 구체화 단계 (Elaboration Phase) (2~3회 정도 반복, 혹은 더 늘어날 수 있음)
* 아키텍쳐 수립 -> baseline
* 상세한 프로젝트 계획
* 첫 번째 반복을 통한 산출물로 아키텍쳐 프로토타입 생성
* 생성된 첫 번째 프로토타입을 다음 단계의 아키텍쳐 기준선으로 활용
* 이단계가 끝나면 유스케이스 모델은 대략 80%정도 완료
+ 대부분의 요구사항이 나옴
③ 구축 단계 (Construction Phase) (1~n 끊임없이 반복)
구축 단계에서는 구현 작업이 가장 많이 이루어진다.
* 만들어진 프로토타입을 기반으로 인도(운영)가능한 최초 실행 버전의 소프트웨어 개발
* 모든 개발 요소 구현
* 작성된 평가 기준을 사용한 단위 테스트 및 통합 테스트 수행
*사용자 설명서(manual)몇 현재 버전의 설명서 작성
④ 전이 단계 (Transition Phase) (실제 사용할 수 있는 것으로 만드는 단계)
전이 단계 == 이행 단계 , 사용자를 위한 제품을 완성하는 단계
* 개발된 모듈(컴포넌트)에 대해 베타 테스트 실시
cf) 컴포넌트(component) : 여러 함수들을 모아 하나의 독립적인 기능을 수행하는 단위 , 모듈(module) 이라고도 함
* 사용자에게 배포 가능한 단위로 묶는 작업 수행
* 개발된 소프트웨어를 사용자 환경에서 사용자가 직접 테스트 (인수 테스트)
* 소프트웨어 제품과 사용자 설명서 등 단계별로 생성된 최종 산출물을 사용자에게 인도
* 제품 사용자 및 유지보수 담당자 교육
cf) 인셉션, 구체화, 구축, 트렌지션 단계에서 형상 및 변화 관리, 프로젝트 관리, 환경 점검 등은 지속적으로 수행분석, 설계, 구현, 테스트 작업은 공통으로 수행(정도의 차이)각 작업 반복
🧡🧡 08) 애자일 프로세스(Aglie Process) (중요!)
agile : 기민한, 민첩한, 날렵한
Agile Process : 고객의 요구에 민첩하게 대응하고 그때그때 주어지는 문제를 풀어나가는 방법론
애자일은 가벼운 프로세스 방법론의 공통적인 특성을 정의하는 말
🧡 1.1 애자일의 기본 가치
* 프로세스와 도구 중심이 아닌, 개개인과의 상호 소통을 중시
* 문서 중심이 아닌, 실행 가능한 소프트웨어를 중시 🧡
* 계약과 협상 중심이 아닌, 고객과의 협력을 중시 --> 이상적
* 계획 중심이 아닌, 변화에 대한 민첩한 대응을 중시
+ 환경과 고객의 변환에 능동적으로 대처하는 것을 강조
=>고객과의 협업, 빠른 시간 안에 고객이 작동해 볼 수 있는 소프트웨어, 환경과 고객의 변화에 능동적으로 대처하는 것을 강조
1.2 애자일의 원칙
* 최우선적인 목표는 고객을 만족시키기 위해 가치 있는 소프트웨어를 빨리, 지속적으로 제공하는 것
* 개발 후반에 새로 추가되는 요구사항도 기꺼이 받아들인다. 애자일 프로세스는 고객의 경쟁력을 위해 요구사항의 변경을 받아들인다.
* 동작 가능한 소프트웨어를 짧으면 2주, 길면 2개월 간격으로 자주 고객에게 전달한다. 이때 간격은 짧을수록 좋다.
* 업무 담당자 <-> 개발자 매일 소통* face-to-face가 가장 좋은 소통 방법* 진척 사항을 보여주는 가장 좋은 방법 -> 실행 가능한 소프트웨어를 보여주는 것* 개발팀 스스로 정기적인 미팅 -> 피드백
2. 애자일 프로세스 모델 : 스크럼(scrum)럭비 용어 스크럼 사용이유 : 팀이라는 단어가 주는 의미를 개발 팀에 적용해 효율적인 성과를 얻기 위해스크럼은 소프트웨어 개발보다는 팀의 개성과 프로젝트 관리에 중점을 둔 애자일 방법론으로, 경험적 관리 기법 중 하나이다.
스크럼 방식의 진행 과정
1. 제품 기능 목록 작성
◼ 사용자 스토리 : 제품 기능이 도출되면 각 기능을 간략하게 서술하는데, 이때 사용하는 것이 사용자 스토리(user story)
주로 한 장의 인덱스 카드(포스트잇)로 작성한다 , 사용자가 필요로 하는 내용을 서술 , 간략하게
스토리 기준
①스토리끼리 의존적 X
② 사용자 스토리는 언제든 변경 가능 해야함 , 즉 자세히 서술 X
③ 사용자 스토리의 구성요소 확인을 위해 테스트가 가능한 테스트 케이스를 만들어야 한다.
(접속이 빨라야함 X => 200명까지는 1GB 속도를 유지 O)
◼ 스토리 포인트 : 요구사항의 규모를 측정하는 단위 요구사항에 대한 크기를 말하고 복잡도를 감안한 업무량을 의미
2. 스프린트 계획 회의
스프린트 : 작업량이 그렇게 많지 않고 개발 기간도 짧은 경우를 의미 (작은 개발 단위로 사용)
보통 1~4주를 하나의 스프린트로 봄스프린트가 정해지면 중간에 멈추는 일이 X스프린트에 정해진 목표와 내용은 개발 도중에 바뀌지 X 팀원 동의 없이 바뀌지 X
이러한 것을 지키기 위해서 외부 개발 방해 요소를 차단 하는 것 : 스크럼 마스터(scrum master)의 역할
하나의 스프린트 개발이 끝나면 사용자에게 시연하고 사용자는 피드백을 제공
하나의 스프린트는 개발 완료 여부와 관계없이 정해진 일정이 지나면 끝난다. (Time_Boxing)
3. 스프린트 수행
◼ 소멸 차트 (burndown chart)
: 계획 대비 작업이 어떻게 진행되고 있는지를 날짜별 남은 작업으로 나타냄
=> 계획대로 진행되고 있는지 판단하는 작업
🧡 일일 스크럼 회의(daily scrum meeting)
: 스프린트 기간에 하는 회의
* 매일한다.
* 모든 팀원이 참석한다.
* 한 사람씩 어제 한 일을 얘기한다.
* 한 사람씩 오늘 할 일을 얘기한다.
🧡 한 사람씩 문제점 및 어려운 점 정도만 얘기한다.
일일 스크럼 회의에서 스크럼 마스터의 역할 (기억해둘 필요 있음)
* 팀원들의 개발 작업에 방해되는 요소를 찾아 문제를 해결
* 개발자 개개인이 수행하고 있는 일의 진행 상황을 확인
* 소멸 차트에 그날의 남은 작업량을 표시
4. 스프린트 개발 완료
: 모든 스프린트 주기가 끝나면 최종 제품 완성됨
5. 스프린트 완료 후
◼ 스프린트 검토 회의
◼ 스프린트 회고
: 개발한것을 되돌아 보고 개선할 점은 없는지 검토 => 다음 스프린트에 반영
스크럼 방식의 장점과 단점
장점
* 반복 주기마다 생산되는 실행 가능한 제품을 통해 사용자와 충분히 의견을 나눌 수 있다.
* 일일 회의를 함으로써 팀원들 간에 신속한 협조와 조율이 가능하다.
* 일일 회의 시 직접 일정을 발표함으로써 업무에 집중할 수 있는 환경이 조성된다. -> 문제점이 빠른 도출* 다른 개발 방법론에 비해 단순하고 실천 지향적이다.
단점
* 반복 주기가 끝날 때마다 실행 가능하거나 테스트할 수 있는 제품을 만들어야 한다. 이작업이 많아지면 그만큼의 작업 시간이 더 필요하다.
🧡 투입 공수를 측정하지 않기 때문에 작업이 얼마나 효율적으로 수행되었는지 알기 어렵다.
'Software Engineering' 카테고리의 다른 글
[쉽게 배우는 소프트웨어 공학] Chapter 02 UML (0) | 2022.04.18 |
---|---|
[쉽게 배우는 소프트웨어 공학] Chapter 02 연습문제 풀어보기 (0) | 2022.04.08 |