728x90
반응형
01. 소프트웨어 공학의 배경과 목적
가) 소프트웨어 공학 소개
- 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문
- 성공적인 SW프로젝트의 3가지 핵심요소
- Process : 체계적인 업무 방식 및 흐름의 정의와 이를 적용할 수 있는 프로세스
- People : 전문적인 지식을 갖춘 조직 및 인력 구성
- Technology : 정의된 업무 방식과 조직인력이 효율적으로 운영되기 위한 인프라기술
나) 소프트웨어 공학 배경
- 1960년대, 수요 급증 / 인력 부족이 원인 --> "소프트웨어의 위기" 발생하여 본격적 도입
- 1970년대, 비전공자 대거 투입으로 선코딩-후수정 접근방식 --> 부작용으로 많은 결함 발견 --> 구조적, 정형적 기법 발생 --> 폭포수 모델 사용
- 1980년대, 폭포수 모델 많은 비용 소요, 진척도 떨어짐 단점 보완 --> 개발 생산성 높이기 위해 재사용성
- 1990년대, 동시공학 --> 폭포수모델에서 요구사항,설계,구현 동시 진행
- 2000년대, 애자일 방법론 도입
다) 소프트웨어 공학의 4가지 중요요소
- 방법
- 도구 : 생산성 혹은 일관성을 목적으로 사용하는 방법
- 절차 : 방법과 도구 결합하여 합리적이고 적시에 개발할 수 있도록 함
- 사람 : 사람과 조직대한 의존싱이 높음
02. 소프트웨어 개발 생명주기
가) 정의
- 타당성 검토 --> 개발 계획 --> 요구사항 분석 --> 설계 --> 구현 --> 테스트 --> 운용 --> 유지보수
나) 목적
- 비용 산정, 개발 계획 수립, 용어의 표준화, 프로젝트 관리
다) 소프투웨어 생명주기 선정
- 선택한 모델은 프로젝트에 존재하는 리스크/불확실성 최소화 할 수 있어야 함
라) 소프트웨어 생명주기 모델 종류
- V 모델
- 시스템의 요구사항이 모두 식별되고 명확할 때 이상적인 모델
- 검증 및 확인을 강조
- VP 모델 (V 모델 + Prototyping)
- 리스크, 불확실성 요소 등의 이슈를 해결하기 위해 시스템 혹은 시스템의 일부를 빠르게 개발하는 방법
- 접근방법 : 적용 가능한 해결책을 조사하고 적용, 여러 해결 안을 열거하고 정해진 기준에 따라 평가
- 점증적 모델(incremental Model)
- 핵심이 되는 부분 먼저 개발 후 나머지 기능 구현
- 몇 번의 기능 확장을 통해 개발
- 진화 모델(Evolutionary Model)
- 전체 시스템에 대한 개발 단계가 여러번 반복
- 보통 점증적 모델과 조합해서 사용
03. 소프트웨어 개발 방법론
가) 소프트웨어 개발 방법론의 필요성
- 개발 경험의 축적 및 재활용을 통한 개발 생산성 향상
- 효과적인 프로젝트 관리
- 공식 절차와 산출물을 제시하고 표준용어를 통일하여 의사소통 수단 제공
- 각 단계별 검증과 승인된 종료를 통해 일정수준의 품질보증
나) 소프트웨어 개발 방법론 비교
- 구조적 방법론 : 업무활동
- 정보공학 방법론 : 데이터
- 객체지향 방법론 : 객체, 클래스 간의 관계를 식별하여 설계모델로 변환
- CBD 방법론 : 재사용 컴포넌트 조합
다) 소프트웨어 개발 단계
- 요구사항 분석 :
- 개념적인 단계
- 개발 비용을 감소시킬 수 있는 결정적인 단계
- 설계
- 물리적 실현 단계
- 품질에 직접적인 영향, 제대로 되지 않으면 안정감 저하
- 즉, 시스템 유지보수 어려움
- 구현
- 설계 명세를 기반 프로그래밍
- 코딩 표준을 정하고 이를 기반으로 명확하게 코드 작성
- 테스팅
- 품질 확보하기 위해 결함을 찾아내는 일련의 작업
04. 애자일 개발 방법론
가) 애자일 방법론 종류
- 스크럼, XP, 린, 칸반
나) XP (eXtreme Programming)
- 절차 및 용어
- 유저 스토리 : 요구사항 수집, 의사소통의 도구, 기능 단위의 필요한 내용을 간단히 기재
- 스파이크 : 간단한 프로그램, 사용자 스토리의 신뢰성 증대와 기술 문제 위험 감소 목적
- 릴리즈 계회
- 승인 테스트
- 작은 릴리즈
- 가치 - 5가지
- 의사소통
- 단순성 : 설계를 단순하고 명확하게 함
- 피드백 : 점진적인 개선
- 용기 : 가능한 빨리 변경된 사하 반영하여 고객 인도. 즉 문제를 적극적으로 해결하는 용기
- 존중 : 팀원 존중
- 실천방법 - 12가지
- 개발
- 단순한 설계, 테스트 기반 개발, 리팩토링, 코딩 표준, 짝 프로그래밍, 코드 공유, 지속적인 통합
- 관리
- 계획 게임, 작은 릴리즈, 메타포
- 환경
- 주당 40시간 작업, 현장 고객
- 개발
다) 스크럼 (SCRUM)
- 개용
- 추정 및 조정 기반의 경험적 관리 기법
- 제품 책임자(Product Owner)
- 제품 기능목록(백로그) 작성
- 우선순위 조정, 항목 추가
- 계획 수립 시 핵심역할이나 시작 후에는 가능한 미관여
- 스크럼 마스터(Scrum Master)
- 팀 업무 방해요소 제거 노력
- 원칙과 가치를 지키며 팀 개발 진행 지원
- 스크럼 팀(Scrum Team)
- 최소 5 ~ 최대 9명 구성
- 사용자 스토리사용하여 한 스프린트 동안 개발 기능 도출
- 스크럼 프로세스
- 스프린트(Sprint) : 반복개발 기간
- 3가지 미팅
- 일일 스크럼
- 매일 진행하는 15분 간의 진행상황 공유 회의
- 모든 팀원 참석
- 스프린트 계획
- 각 스프린트에 대한 목표,
- 스프린트 리뷰
- 스프린트 작업 진행과 결과물 확인 회의
- 스크럼 팀 작업결과 데모 및 피드백
- 일일 스크럼
- 3가지 산출물
- 제품 백로그
- 기능의 우선순위를 정리한 목록
- 고객을 대신하여 제품 책임자가 결정
- 백로그에 정의된 기능을 사용자 스토리라고 함
- 스프린트 백로그
- 하나의 스프린트 동안 개발할 목록
- 소멸 차트
- 개발을 완료하기까지 남은 작업량 표시
- 작업량을 스토리 포인트라는 것 나타냄
- 제품 백로그
- 스크럼 특징
- 투명성 : 회의, 산출물 등으로 프로젝트 상태나 문제점 효율적 파악
- 타임박싱 : 스크럼 진행 시간 제한 (15분)하여 프로젝트 진행에만 집중 ???
- 커뮤니케이션 : 일일 스크럼
- 경험주의 모델 : 개개인의 경험 중시
https://blog.naver.com/nabilera1/222114655735?trackingCode=blog_bloghome_searchlist
https://swingswing.tistory.com/121
https://evan-moon.github.io/2019/07/02/what-is-agile/
728x90
반응형