[[2023-07-05-소프트웨어 공학]]
1과목. 소프트웨어 구축 - 2.소프트웨어 개발 방법론
소프트웨어 생명주기 (SDLC): Software Development Life Cycle)
- 요구사항 분석
- 기능 요구사항, 비기능 요구사항
- 설계
- 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계
- 구현
- 인터페이스 개발, 자료구조 개발, 오류 처리
- 테스트
- 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트
- 유지보수
- 예방, 완전, 교정, 적응 유지보수
1. 소프트웨어 개발 방법론 개념
- 소프트웨어 개발에 필요한 과정(절차, 방법, 산출물, 기법, 도구)들을 체계적으로 정리
2. 소프트웨어 개발 방법론 종류
1. 구조적 방법론
- 절차지향 개발 방법론
- 하향식
- 데이터 흐름도(DFD), 자료사전(DD), 상태전이도(STD), 소단위 명세서(Minispec)
2. 정보공학 방법론
- 기업에서 사용하는 데이터 중심 방법론
- 기업의 경영 전략에 초점을 둠
3. 객체지향 방법론
- 현실 개체(Entity)를 속성(Attribute)과 메소드(Method)형태로 표현
- 분석과 설계, 구현의 전 과정을 객체 중심으로 개발
- 특징: 캡슐화, 정보은닉, 상속, 다형성, 추상화
4. CBD(Component Based Development) 분석 방법론
- 컴포넌트별로 개발 후 하나의 어플리케이션으로 조합하는 방법
- 기능추가 용이, 생산성 및 품질 향상, 유지보수 비용 최소화(잘 만들었을때ㅋㅋ;)
5. 애자일 방법론
- 기존 방법론들과는 달리 절차를 중요시 하지 않음, 변화에 빠른 대응 가능
- XP(eXtreme Programming), SCRUM, FDD, Crystal
6. 개발 방법론 선택 기준
- 프로젝트 특성 및 규모
- 참여자 수준
- 가용 자원(인력, 장비, 시간, 비용)
- 요구사항의 정확도
- 위험도
기본적으로 모든 방법론이 계획-분석-설계-구현-테스트-유지보수를 따르지만 순서나 중요시 하는 부분이 다름
3. 소프트웨어 생명주기 모델 종류
1. 폭포수 모델(Waterfall Model)
- 단계별 **순서대로 진행**
- 선형 순차적 모형, 고전적 생명주기 모형
- 요구사항 변경이 어려움
- 절차:
- 타당성 검토 -> 계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수
출처: https://m.blog.naver.com/roser111/221661276734
2. 프로토타이핑 모델(Prototyping Model)
- 고객의 피드백을 반영하여 소프트웨어를 만들어가는 모델
- 발주자, 개발자 모두에게 공동의 참조 모델을 제공
- 구현단계의 구현 골격
- ex) 시제품을 만들어서 고객한테 보여주고 피드백을 받아 개선해나가는 방법
- 절차:
- 계획수립 -> 프로토타입 개발 -> 사용자 평가 -> 구현 -> 인수
- 장점: 요구사항이 충실히 반영됨, 결과물을 사용자가 빨리 볼 수 있다, 오류를 초기에 발견
- 단점: 시간과 비용이 많이 듬, 문서작성이 소홀해질 수 있다
출처: https://bigdown.tistory.com/376
3. 나선형 모델(Spiral Model)
- 위험을 최소화하기 위해 점진적으로 완벽한 시스템으로 개발해 나가는 모델
- 폭포수모델과 프로트타이핑 모델의 장점을 수용
- 절차:
- 반복: 계획 및 정의 -> 위험 분석 -> 개발 -> 고객 평가
출처: https://m.blog.naver.com/seilius/130185846022
4. RAD(Rapid Application Development) 모델
- 매우 짧은 개발 주기를 강조함(60일~90일)
- 점진적 소프트웨어 개발 방식
- CASE(Computer Aided Software Engineering) 도구 이용하여 개발
- 위험이 적고 빠른 개발이 요구될 때 적합
5. V 모형(Iteration Model)
- 폭포수 모델에 시스템 검증과 테스트 작업을 강조
- 높은 신뢰성이 요구되는 분야에 적합
- 테스트가 중요!
출처: https://devuna.tistory.com/98
- 단위 테스트: 정적(소스 코드 보면서), 동적(기능)
- 통합 테스트: 상향식, 하향식, 빅뱅
- 시스템 테스트: 기능(요구사항에 맞게 잘 만들어졌는지), 비기능(기능이 동작할때 효율성, 보안 등)
- 인수 테스트: 알파(개발자와 사용자), 베타(사용자들끼리 진행)
6. 4세대 기법(4th Generation Techniques)
- 요구사항 명세서로부터 원시코드를 자동으로 생성할 수 있게 해주는 모델
7. 반복적 모델(Iteration Model)
- 구축대상을 나누어 병력적으로 개발 후 통합하거나, 반복적으로 개발하여 점증 완성시키는 모델
- 사용자의 요구사항 일부분 혹은 제품 일부분 혹은 제품 일부분을 반복적으로 개발하여 최종 시스템으로 완성하는 모델
- 증분방식으로 병행 개발
- 장점: 일정 단축 가능
- 단점: 관리 비용 증가
4. 애자일(Agile) 방법론
1. 개념
- 신속한 방법 작업을 통해 소프트웨어 개발
- 특정 개발론을 뜻하기 보다 애자일 개발을 목적으로 한 모든 방법론을 뜻함
- 경량(Lightweight)프로세스 라고도 함
2. 등장배경
- 문서등을 중시하는 이전 방법론을 개선하기 위해 등장
3. 선언
중요도:
- 공정도구 < 개인과 상호작용
- 문서 < 작동하는 소프트웨어
- 계약 협상 < 고객과 협력
- 계획 < 변화
4. 특징
- 변화하는 요구사항 신속하게 수용
- 개발자 개인보단 팀의 목적 우선시
- 고객의 의견이 가장 중요
- 작업계획을 짧게 세우고, 반복적으로 수행 -> 변화헤 유연하게 대처
5. 종류
1. XP (Extreme Programming)
- 특징
- 문서보다는 코드중심
- 5가지 핵심 가치, 12가지 실천 항목
- 5가지 핵심 가치:
- 용기, 존중, 의사소통, 피드백, 단순성
- 12가지 실천 항목:
- 짝 프로그래밍, 계획 세우기, 테스트 기반 개발, 고객 상주, 지속적인 통합, 코드 개선, 작은 릴리즈, 코딩 표준, 공동 코드 소유, 간단한 디자인, 시스템 메타포어, 작업시가ㅏㄴ 준수
의사(의사소통)선생님 피(피드백)존(존중) 용기(용기)에 단(단순성)아 주세요
2. 스크럼 SCRUM
- 특징
- 기능, 개선점에 대한 우선순위를 부여
- 개발주기는 30일 정도로 개발 주기마다 동작할 수 있는 결과를 제공
- 팀 단위로 생각, 날마다 15분 정도의 회의
- 주요 개념
- 제품 백로그, 스프린트, 스프린트 계획 회의, 스프린트 백로그, 일일 스크럼 회의, 실행 가능한 제품, 제품 책임자, 스크럼 마스터
3. 크리스탈(Crystal)
- 프로젝트 규모와 영향에 따라 여러 방법론을 제공
4. FDD(Feature-Driven Development)
- feature 마다 2주 정도의 반복 개발을 실시
- 신규 기능 단위로 하는 개발 방법론
5. ASD(Adaptive Software Development)
6. 린(Lean)
5. IT 서비스 관리
1. SLM(Service Level Management)
- 서비스 수준을 측정, 실적 평가하여 미흡한 부분을 개선 -> 서비스 품질 향상 하는 관리 및 활동
2. SLA(Service Level Agreement)
- 수요자와 공금자 사이의 상호 동의에 의해 서비스 수준을 정의한 문서
- 구성요소:
- 업무 목표/범위
- 성과 지표
- 조정 절차
3. ITSM(Information Technology Service Management)
- 사용자를 위한 IT서비스 구현, 전달 및 관리하기 위한 정책과 관핵
- 최종 사용자의 요구사항과 목표에 부합하는 방식으로 제공
- 서비스 수준(SLA에 맞는 IT서비스를 제공
4. ITIL(IT Infrastructure Library)
- IT 서비스를 쉽게 제공하고 관리할 수 있는 가이드 혹은 프레음워크
- ITSM을 실행하는 방법 혹은 도구