IT 자격증/정보처리기사

요구사항 확인 - 소프트웨어 개발 방법론 (I-1-1)

devGSP 2022. 4. 15. 00:17
반응형

I. 요구사항 확인 - 1. 소프트웨어 개발 방법론 - ① 소프트웨어 개발 방법론

 

(1) 소프트웨어 생명주기 모델

 

*소프트웨어 생명주기(SDLC, Software Development Life Cycle)

- 시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차

- 시스템이 개발될 때부터 운용과 유지보수를 거쳐 생애를 마칠 때까지 어떠한 순서를 밟는지에 대한 작업 프로세스를 모델화함

 

 

*소프트웨어 생명주기 모델 프로세스

순서 프로세스 설명 활동
1 요구사항 분석 - 다양한 이해관계자의 요구사항을 고려해 새로운 제품이나 변경된 제품에 부합하는 요구와 조건을 결정
- 개발할 소프트웨어의 기능과 제약 조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의
- *기능 요구사항
- *비기능 요구사항
2 설계 *시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정 - 시스템 구조 설계
- 프로그램 설계
- 사용자 인터페이스 설계
3 구현 - 설계 단계에서 논리적으로 결정한 문제 해결 방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램을 작성
- 프로그래밍 언어 선택, 기법, 스타일, 순서 등을 결정
- 인터페이스 개발
- 자료 구조 개발
- 오류 처리
4 테스트 시스템이 정해진 요구를 만족하는지, 예상과 결과가 어떻게 차이 나는지 검사하고 평가 - 단위 테스트
- 통합 테스트
- 시스템 테스트
- 인수 테스트
5 유지보수 시스템이 인수되고 설치된 후 일어나는 모든 활동 예방, 완전, 교정, 적응 유지보수

*기능 요구사항 : 사용자가 원하는 기능. 시스템은 사용자에게 필요한 기능을 제공해 줘야 한다. 이를 위해서는 사용자의 요구를 빠짐 없이 정확하게 도출하고, 도출된 기능을 요구 분석 명세서에 완전하고 일관성 있게 표현해야 하며, 시스템에도 전부 반영하여 사용자에게 100% 제공해야 함

*비기능 요구사항 : 기능 요구사항에서 구현한 기능 외, 수행 가능한 환경, 품질, 제약 사항 등을 말함. 상황에 따라서는 비기능적 요구사항이 더 중요할 수도 있음

*시스템 명세 단계 : 시스템이 무엇을 수행해야 하는가를 정의함. 시스템 기능 명세서를 작성하여 입력 데이터, 처리내용, 생산 결과가 무엇인지를 정의

 

 

*소프트웨어 생명주기 모델 종류

종류 설명
폭포수 모델
(Waterfall Model)
- 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후에 다음 단계로 넘어가는 모델
- 가장 오래된 모델
- 선형 순차적 모형
- 고전적 생명 주기 모형
- 모형의 적용 경험, 성공 사례가 많음
- 단계별 정의, 산출물이 명확함
- 요구사항 변경이 어려움
프로토타이핑 모델
(Prototyping Model)
- 고객이 요구한 주요 기능을 프로토타입으로 구현하고 고객의 피드백을 반영하여 소프트웨어를 만들어가는 모델
- 프로토타입은 발주자나 개발자 모두에게 공동의 참조 모델을 제공
- 프로토타입은 구현 단계의 구현 골격
나선형 모델
(Spiral Model)
시스템 개발 시 위험을 최소화하기 위해 점진적으로 완벽한 시스템으로 개발해 나가는 모델
반복적 모델
(Iteration Model)
- 구축 대상을 나누어 병렬적으로 개발 후 통합하거나 반복적으로 개발하여 점증 완성시키는 *SDLC 모델
- 사용자의 요구사항 일부분 혹은 제품 일부분을 반복적으로 개발하여 최종 시스템으로 완성하는 모델

 

*소프트웨어 생명주기 모델별 특징

[폭포수 모델]

- 특징 : 순차적 접근

- 장점 : 이해가 용이하고 관리가 편리함

- 단점 : 요구사항 변경이 어려움

- 절차

waterfallmodel
폭포수 모델 절차도

 

[프로토타이핑 모델]

- 특징 : 프로토타입 개발

- 장점 : 요구분석이 용이하고 타당성 검증 가능

- 단점 : 프로토타입 폐기에 따른 비용 증가

- 절차

prototypemodel
프로토타이핑 모델 절차도

 

[나선형 모델]

- 특징 : 위험분석, 반복개발

- 장점 : 위험성 감소, 변경에 유연한 대처 가능

- 단점 : 단계 반복에 따른 관리 어려움

- 절차

spiralmodel
나선형 모델 절차도

 

[반복적 모델]

- 특징 : 증분방식으로 병행 개발

- 장점 : 병행 개발로 인한 일정 단축 가능

- 단점 : 병행 개발에 따른 관리 비용 증가

- 절차

iterationmodel
반복적 모델 절차도

 

(2) 소프트웨어 개발 방법론

 

*소프트웨어 개발 방법론

- 소프트웨어 개발 전 과정에 지속적으로 적용할 수 있는 방법, 절차, 기법

- 소프트웨어를 하나의 생명체로 간주하고 소프트웨어 개발의 시작부터 시스템을 사용하지 않는 과정까지의 과정을 형상화한 방법론

 

 

*소프트웨어 개발 방법론 종류

종류 설명
구조적 방법론
(Structured Development)
- 전체 시스템을 기능에 따라 나누어 개발하고, 이를 통합하는 분할과 정복 접근 방식의 방법론
- 프로세스 중심의 하향식 방법론
- 구조적 프로그래밍 표현을 위해 *나씨-슈나이더만 차트 사용
정보공학 방법론
(Information Engineering Development)
- 정보시스템 개발에 필요한 관리 절차와 작업 기법을 체계화
- 개발주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론
객체 지향 방법론
(Object-Oriented Development)
- '객체'라는 기본 단위로 시스템을 분석 및 설계
- 복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용
- 객체, 클래스, 메시지를 사용
컴포넌트 기반 방법론
(CBD, Component Based Development)
- 소프트웨어를 구성하는 *컴포넌트를 조립해서 새로운 응용 프로그램을 작성
- 개발 기간 단축으로 인한 생산성 향상
- 새로운 기능 추가 쉬움(확장성)
- 소프트웨어 재사용이 가능
애자일 방법론
(Agile Development)
- 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론
- 개발 과정의 어려움을 극복하기 위한 방법론
제품 계열 방법론
(Product Line Development)
- 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
- *임베디드 소프트웨어를 작성하는 데 유용한 방법론
- *영역 공학과 *응용 공학으로 구분

*나씨-슈나이더만(Nassi-Shneiderman) 차트

- 논리의 기술에 중점을 둔 도형식 표현 방법

- 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조로 표현

- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합

*컴포넌트(Component) : 원하는 데이터베이스와 소프트웨어의 개발된 모듈 단위

*임베디드 소프트웨어(

Embedded Software) : 미리 정해진 특정한 기능을 수행하고, 특정의 하드웨어만을 지원하기 위해 만들어지고 탑재되는 소프트웨어. 즉, 시스템 소프트웨어, 응용 소프트웨어 등

*영역 공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역

*응용 공학 : 제품 요구분석, 제품 설계, 제품을 구현하는 영역

 

 

*애자일

- 애자일 방법론은 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론이다.

- 개발 기간이 짧고 신속하며, 폭포수 모형에 대비되는 방법론으로 개발과 함께 즉시 피드백을 받아서 유동적으로 개발할 수 있다.

 

 

*애자일의 등장배경 : 기존 개발 방법론의 한계를 극복하기 위해 등장

등장 배경 설명
소프트웨어 개발 환경의 변화 - 소프트웨어 개발 트렌드가 모바일 환경으로 변화
- 시장 적시성과 잦은 배포의 중요성 부각
기존 개발 방법론의 한계 - 전통적 방법론은 문서 및 절차 위주로 변화에 신속한 대응이 어려움
- 빠르게 적용하고 효율적으로 개발할 수 있는 방법론의 필요성 증가

 

*애자일 방법론의 유형

종류 내용
XP(eXtreme Programming) - 의사소통 개선과 즉각적 피드백으로 소프트웨어 품질을 높이기 위한 방법론
- 1~3주의 반복(Iteration) 개발 주기
- 5가지 가치와 12개의 실천항목이 존재
스크럼(SCRUM) 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
린(LEAN) - 도요타의 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론
- JIT(Just In Time), 칸반(Kanban) 보드 사용

 

*XP

- XP의 5가지 가치

가치 설명
용기(Courage) - 용기를 가지고 자신감 있게 개발
- 코드를 작성하기 전에 테스트, 빠르게 피드백, 테스트에 부합하지 못하는 코드를 리팩토링할 수 있는 용기
단순성(Simplicity) 필요한 것만 하고 그 이상의 것들은 하지 않음
의사소통(Communication) 개발자 관리자, 고객 간의 원활한 소통
피드백(Feedback) 의사소통에 대한 빠른 피드백
존중(Respect) 팀원 간의 상호 존중

 

- XP의 12가지 기본원리

기본원리 설명
짝 프로그래밍
(Pair Programming)
개발자 둘이서 짝으로 코딩하는 원리
공동 코드 소유
(Collective Ownership)
시스템에 있는 코드는 누구든지 언제라도 수정 가능하다는 원리
지속적인 통합
(CI, Continuous Integration)
매일 여러 번씩 소프트웨어를 통합하고 빌드해야 한다는 원리
계획 세우기
(Planning Process)
고객이 요구하는 비즈니스 가치를 정의하고, 개발자가 필요한 것은 무엇이며 어떤 부분에서 지연될 수 있는지를 알려 주어야 한다는 원리
작은 릴리즈
(Small Release)
작은 시스템을 먼저 만들고, 짧은 단위로 업데이트한다는 원리
메타포어
(Metaphor)
공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자 간의 의사소통을 원활하게 한다는 원리
간단한 디자인
(SImple Design)
현재의 요구사항에 적합한 가장 단순한 시스템을 설계한다는 원리
테스트 기반 개발
(TDD, Test Driven Develop)
작성해야 하는 프로그램에 대한 테스트를 먼저 수행하고 이 테스트를 통과할 수 있도록 실제 프로그램의 코드를 작성한다는 원리
리팩토링
(Refactoring)
프로그램의 기능을 바꾸지 않으면서 중복제거, 단순화 등을 위해 시스템을 재구성한다는 원리
40시간 작업
(40-Hour Work)
개발자가 피곤으로 인해 실수하지 않도록 일주일에 40시간 이상을 일하지 말아야 한다는 원리
고객 상주
(On Site Customer)
개발자들의 질문에 즉각 대답해 줄 수 있는 고객을 프로젝트에 풀타임으로 상주시켜야 한다는 원리
코드 표준
(Coding Standard)
효과적인 공동 작업을 위해서는 모든 코드에 대한 코딩 표준을 정의해야 한다는 원리

 

*스크럼

주요 개념 설명
백로그(Backlog) 제품과 프로젝트에 대한 요구사항
스프린트(Sprint) 2~4주의 짧은 개발 기간으로 반복적 수행으로 개발품질 향상
스크럼 미팅(Scrum Meeting) - 매일 15분 정도 미팅으로 To-Do List 계획수립
- 데일리 미팅(Daily Meeting)이라고도 함
스크럼 마스터(Scrum Master) 프로젝트 리더, 스크럼 수행 시 문제를 인지 및 해결하는 사람
스프린트 회고(Sprint Retrospective) - 스프린트 주기를 되돌아보며 정해놓은 규칙 준수 여부, 개선점 등을 확인 및 기록
- 해당 스프린트가 끝난 시점이나 일정 주기로 시행
번 다운 차트(Burn Down Chart) - 남아 있는 백로그 대비 시간을 그래픽적으로 표현한 차트
- 백로그는 보통 수직축에 위치하며 시간은 수평축에 위치

 

*린의 7가지 원칙

1. 낭비제거

2. 품질 내재화

3. 지식 창출

4. 늦은 확정

5. 빠른 인도

6. 사람 존중

7. 전체 최적화

 

 

*애자일과 전통적 방법론 비교

비교 대상 애자일 방법론 전통적 방법론
계획수립 유동적 범위 설정 확정적 범위 설정
업무수행 팀 중심 업무 수행 - 관리자 주도적 명령과 통제
- 개인 단위로 업무수행
개발/검증 반복 주기 단위로 소프트웨어를 개발/검증 [분석 → 설계  구현  테스트] 순차적 수행
팀관리 업무 몰입, 팀 평가 경쟁, 개별 평가
문서화 문서화보다는 코드를 강조 상세한 문서화 강조
성공요소 고객 가치 전달 계획/일정 준수
유형 XP, 스크럼, 린 폭포수, 프로토타입, 나선형

 

(3) 객체 지향 분석 방법론

 

*객체 지향 분석(OOA, Object Oriented Analysis)

사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계를 정의하여 모델링하는 기법

 

*객체 지향 분석 방법론의 종류

종류 만든이 설명
OOSE
(Object Oriented Software Engineering)
야콥슨
(Jacobson)
- 유스케이스에 의한 접근 방법으로 유스케이스를 모든 모델의 근간으로 활용
- 분석, 설계, 구현 단계로 구성
- 기능적 요구사항 중심의 시스템
OMT
(Object Modeling Technology)
럼바우
(Rumbaugh)
그래픽 표기법을 이용하여 소프트웨어 구성요소를 모델링
OOD
(Object Oriented Design)
부치
(Booch)
- 설계 문서화를 강조하여 다이어그램을 중심으로 개발
- 분석과 설계의 분리 불가능
- 분석하는 데 이용된 객체 모델의 설계 시 적용

 

*럼바우의 객체 지향 분석 절차

객체 모델링 → 동적 모델링  기능 모델링

객체 모델링
(Object Modeling)
- 정보 모델링(Information Modeling)이라고도 부름
- 시스템에서 요구하는 객체를 찾고 객체들 간의 관계를 정의하여 ER 다이어그램을 만드는 과정까지의 모델링
- 객체 다이어그램을 활용하여 표현
동적 모델링
(Dynamic Modeling)
- 시간의 흐름에 따라 객체들 사이의 제어 흐름, 동작 순서 등의 동적인 행위를 표현하는 모델링
- 상태 다이어그램을 활용하여 표현
기능 모델링
(Functional Modeling)
- 프로세스들의 자료 흐름을 중심으로 처리 과정을 표현하는 모델링
- 자료 흐름도(DFD, Data Flow Diagram)를 활용하여 표현

 

반응형