카테고리 없음

정처기 1과목 소프트웨어 설계 - 1

춘핑이 2024. 1. 23. 22:21

1.요구사항 확인 A등급

1.소프트웨어 생명주기

소프트웨어 생명주기는 소프트웨어 개발 방법론의 바탕이 된다. 소프트웨어를 개발하기 위한 운용 유지보수 등의 과정을 각 단계 별로 나눈 것이다.
각 단계별 주요활동 활동의 결과에 대한 산출물로 표현한다. 소프트웨어 수명주기라고도 한다.
생명주기모혀엥는 폭포수 모형, 프로토타입 모형, 나선형 모형, 애장리 모형등이 있다.

2. 폭포수 모형

폭포에서 한번 떨어진 물은 거슬러 올라갈 수 없듯이 개발단계도 이전단계로 돌아갈 수 없는 것을 전데로 각 단계를 확실하게 매듭짓고 그 결과를 철저하게 검토하며 승인과정을 거친 후에 다음 단계를 진행하는 개발 방법론이다.
가장 오래되고 가장 폭넓게 사용된 전통적인 생명주기 모형이고 고전적 생명 주기 모형이라고도 한다.
개발과정의 한단계가 끝나야 다음 단계로 넘어가는 선형 순차적 모형이다.

모형을 적용한 경험과 성공사례가 많다.
제품의 일부가 될 메뉴얼을 작성해야한다.
각 단계가 끝난 후에 다음 단계를 수행하기 위한 결과물이 명확하게 산출되어야 한다.
두 개 이상의 과정이 병행하여 수행되지 않는다.

타당성 검토 -> 계획 -> 요구분석 -> 설계 -> 구현(코딩) -> 시험(검사) -> 유지보수

3. 프로토타입 모형(원형모형)

사용자의 요구사항을 정확히 파악하기 위해 실제 개발될 소프트웨어 견본을 만들어 최종 결과물을 예측하는 모델이다.
시제품은 의뢰자나 개발자 모두에게 공동의 참조모델이 된다.
시스템의 일부 혹은 시스템의 모형을 만드는 과정으로서 요구된 소프트웨어를 구현하는데 이는 추후 구현단계에서 사용될 골격 코드가 된다.
새로운 요구사항이 도출될때마다 이를 반영한 프로토타입을 새롭게 만들며 소프트웨어를 구현한다.
단기간 제작을 목적으로해 비효율적인 언어나 알고리즘이 사용될 수 있다.

요구수집 -> 빠른설계 -> 프로토타입 구축 -> 고객평가 -> 프로토타입 조정 -> 구현

4. 나선형 모형(점진적 모형)

보헴이 제안
폭포수 모형과 프오토타입 모형의 장점에 위험분석기능을 추가했다.
나선을 따라 돌듯이 여러번의 소프트웨어 개발 과정을 거쳐 점진적으로 오나벽한 최종 소프트웨어를 개발하는 것으로 점진적 모형이라고 한다.
소프트 웨어를 개발하며 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 한다.
핵심기술에 문제가 있거나 사용자의 요구사항이 이해하기 어려운 경우에 적합한 모델이다.
점진적으로 개발과정이 반복되므로 누락되거나 추가된 요구사항을 첨가할 수 있고 정밀하며 유지보수과정이 필요없다.

계획수립 -> 위험분석 -> 개발 및 검증 -> 고객 평가 반복

5. 애자일 모형

민첩한 기민함이라는 의미로 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발과정을 진행한다.
어느 특정 개발 방법론이 아니라 좋은 것을 빠르고 낭비없게 만들기 위해 고객과의 소통에 초점을 맞춘 방법론을 통칭한다.
애자일 모형은 기업활동 전반에 걸쳐 사용된다.
스프린트 또는 이터레이션이라고 부리는 짧은 개발 주기를 반복하며 반복되는 주기마다 만들어지는 결과물에 대한 고객의 평가와 요구를 적극 수용한다.
각 개발주기에서는 고객의 요구사항에 우선순위를 부여하여 개발작업을 진행한다.
소규모 프로젝트 고도로 숙달된 개발자 급변하는 요구사항에 적합하다.
애자일 모형을 기반으로 하는 개발모형에는 스크럼, 칸반, Lean, 크리스탈, ASD, 기능중심개발, DSDM, DAD등이 있다.

개발 설계 테스트 를 수행 및 유지보수하면서 반복한다.

애자일 선언에는 4가지 핵심가치와 12가지 실행지침이 있다.
4가지 핵심가치
1.프로세스와도구보다는 개인과 상호작용에 더 가치를 둔다.
2.방대한 문서보다는 실행되는 SW에 더 가치를 둔다.
3.계약협상보다는 고객과 협업에 더 가치를 둔다.
4.계획을 따르기 보다는 변화에 반응하는 것에 더 가치를 둔다.

12가지 실행지침
1.유용한 소프트웨어를 빠르고 지속적으로 제공하여 고객을 만족시킨다.
2.개발막바지라도 요구사항 변경을 적극 수용한다.
3.몇 개월이 아닌 몇 주단위로 실행되는 소프트웨어를 제공한다.
4.고객과 개발자가 프로젝트 기간에 함께 일한다.
5.개발에 대한 참여의지가 확실한 사람들로 팀을 구성하고 필요한 개발환경에 지원을 제공하며 일을 잘 끝낼 수 있도록 신뢰한다.
6.같은사무실에서 얼굴을 맞대고 의견을 나눈다.
7.개발의 진척도를 확인하는 1차 기준은 작동하는 소프트웨어이다.
8.지속 가능한 개발을 장려하고 일정한 속도로 개발을 진행한다.
9.기술적 우수성과 좋은 설계에 지속적인 관심을 기우리면 민첩성이 향상된다.
10.단순화를 추구한다.
11.최상의 아키텍쳐 명확한 요구사항, 최상의 설계는 자기 스스로 일을 주도한느 조직적인 팀으로 부터 나온다.
12.더 효과적인 팀이 될 수 있는 방안을 정기적으로 깊이 고민하고 그에 따라 팀의 행동을 조정한다.

6.폭포수 모형과 애자일의 비교

구분 | 폭포수 모형 | 애자일
새로운 요구사항 반영 | 어려움 | 지속적으로 반영
고객과의 의사소통 | 적음 | 지속적임
테스트 | 마지막에 모든기능을 테스트 | 반복되는 일정주기가 끝날때마다 테스트
개발중심 | 계획 문서(메뉴얼) | 고객

2. 스크럼기법 C등급

1. 스크럼 개요

스크럼이란 럭비에서 반칙으로 경기가 중된된 경우 양팀 의 선수들이 럭비공을 가운데 두고 상대팀을 밀치기 위해 서로 대치해 있는 대형을 말한다. 팀이 중심이 되어 개발의 효용성을 높이는 것을 내포하고 있다.
팀원스스로가 스크럼 팀을 구성해야하고 개발 작업에 관한 모든 것을 스스로 해결할 수 있어야한다.
스크럼 팀은 제품 책임자, 스크럼 마스터, 개발팀으로 구성된다.

1.제품책임자
이해관계자 들 중 개발될 제품에 대한 이해도가 높고 요구사항을 책임지고 의사결정을 할 사람으로 선정한다.
주로 개발의뢰자나 사용자가 담당한다.
이해 관계자들의 의견을 종합하여 제품에 대한 요구사항을 작성하는 주체다.
요구사항이 담긴 백로그를 작성하고 백로그(제품개발에 필요한 요구사항을 모아 우선순위를 부여해놓은 목록)에 대한 우선순위를 지정한다.
팀원들이 백로그에 스토리(요구사항에 대한 스토리 또는 사용자 스토리)를 추가할 수있지만 우선순위를 지정할 수는 없다.
제품에 대한 테스트를 수행하면서 주기적으로 요구사항의 우선순위를 갱신한다.

2.스크럼마스터
스크럼팀이 잘 수행할 수 있도록 객관적인 시각에서 조언해주는 가이드 역할을 수행 팀원을 통제하는 것이 목표가 아니다.
일일 스크럼 회의를 주관하여 진행 사항을 점검하고 개발과정에서 발생된 장애 요소를 공론화하여 처리한다.

3.개발팀
제품 책임자와 스크럼마스터를 제외한 모든팀원
개발자 외에도 디자이너 테스터 등이 포함된다.
최대 인원은 7~8명이 적당하다.

2. 스크럼 개발 프로세스

1.제품 백로그
제품개발에 필요한 모든 요구사항을 우선순위에 따라 나열한 목록
개발 과정에 새롭게 도출되는 요구사항으로 지속적으로 업데이트
제품 백로그에 작성된 사용자 스토리를 기반으로 전체 일정계획인 릴리즈 계획을 수립

2.스프린트 계획회의
제품백로그 중 이번 스프린트에서 수행할 작업을 대상으로 단기일정을 수립하는 것
스프린트에서 처리할 요구사항을 개발자들이 나눠 작업할 수 있도록 태스크라는 작업 단위로 분할한 후 개발자벼로 수행할 작업목록인 스프린트 백로그를 작성

3.스프린트
실제 개발 작업을 진행하는 과정 2~4주기간내에서 진행
스프린트 백로그에 작성된 태스크를 대상으로 속도를 추정한 후 개발 담당자에게 할당
태스크를 할당할때는 개발자가 원하는 태스크를 직접 선별하여 담당할 수 있도록 하는 것이 좋다.
개발 담당자에게 할당된 태스크는 보통 할일, 진행중, 완료 상태를 갖는다.

4.일일 스크럼 회의
모든 팀원이 매일 약속된 시간에 짧게 진행상황을 점검한다.
회의는 보통 서서 진행 남은 작업시간은 소멸차트에 표시
스클머마스터는 발견된 장애 요소를 해결할 수 있도로 도와준다.

5.스프린트 검토회의
부분 도는 전체 완성제품이 요구사하엥 잘 부합되는지 사용자가 포함된 참석자 앞에서 테스팅을 수행
스프린트의 한주당 한시간내에서 진행
제품책임자는 개선할 사항에 대한 피드백을 정리한후 다음 스프린트에 반여할 수있도록 제품 백로그를 업데이트

6.스프린트 회고
스프린트 주기를 되돌아 보며 규칙을 잘 준수햇느지 개선할점이 없는지 등을 확인하고 기록
해당 스프린트가 끝난 시점에 서 수행하거나 일정 주기로 수행

3. XP 기법 B등급

1. XP(eXtreme Programming)

XP는 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법이다.
짧고 반복적인 개발 주기, 단순한 설계 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것을 목적으로 한다.
릴리즈의 기간을 짧게 반복하면서 고객의 요구사항 반영에 대한 가시성을 높인다.
릴리즈 테스트마다 고객을 직접 참여시킴으로써 요구한 기능이 제대로 작동하는 지 고객이 직접확인할 수 있다.
비교적 소규모인원의 개발 프로젝트에 효과적이다.

5가지 핵심가치
의사소통, 단순성, 용기, 존중, 피드백

2. XP 개발 프로세스

책 P.30 그림 참조
1.사용자스토리
고객의 요구사항을 간단한 시나리오로 표현한것
내용은 기능단위로 구성 필요한 경우 간단한 테스트 사항도 기재한다.

2.릴리즈 계획 수립
몇 개의 스토리가 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것을 릴리즈라고 한다.
부분 혹은 전체 개발 완료시점에 대한 일정을 수립한다.

3.스파이크
요구사항의 신뢰성을 높이고 기술문제에 대한 위험을 감소시키기 위해 별도로 만드는 간단한 프로그램이다.
처리할 문제외의 다른조건은 모두 무시하고 작성한다.

4.이터레이션
하나의 릴리즈를 더 세분화한 단위를 이터레이션이라고 한다.
일반적으로 1~3주 정도의 기간으로 진행된다.
이 기간 중 새로운 스토리가 작성될 수 있으며 작성된 스토리는 진행중인 이터레이션 혹은 다음 이터레이션에 포함될 수 있다.

5.승인검사
하나의 이터레이션안에서 계획된 릴리즈 단위의 부분 완료 제품이 구현되면 수행하는 테스트이다. 사용자 스토리 작성 시 함께 기재한 테스트 사항에 대한 고객이 직접 수행한다.
테스트과정에서 발견한 오류사항은 다음 이터레이션에 포함한다.
테스트 이후 새로운 요구사항이 작성되거나 요구사항이 상대적 우선순위가 변경될 수 있다.
테스트가 완료되면 다음 이터레이션을 진행한다.

6.소규모릴리즈
릴리즈를 소규모로 하게되면 고객의 반응을 기능별로 확인할 수 있어 고객의 요구사항에 좀 더 유연하게 대응할 수 있다.
계획된 릴리즈 기간동안 진행된 이터레이션이 모두 완료되면 고객에 의한 최종 테스트를 수행한 후 릴리즈 즉 최종결과물을 고객에게 전달한다.
릴리즈가 최종 완제품이 아닌 경우 다음 릴리즈 일정에 맞게 개발을 계속진행한다.

실천방법(영문명 의미 구분 필요)
1.Pair Programming(짝 프로그래밍) - 다른사람과 함께 프로그래밍을 수행함으로써 개발에 대한 책임을 공동으로 나눠갖는 환경을 조성
2.Collective Ownership(공동 코드 소유) - 개발 코드에 대한 권한과 책임을 공동으로 소유합니다.
3.Test-Driven Development(테스트 주도 개발) - 개발자가 실제 코드를 작성하기 전에 테스트 케이스를 먼저 작성하므로 자신이 무엇을 해야할지를 정확히 파악합니다. 테스트가 지속적으로 진행될 수 있도록 자동화된 테스팅 도구(구조, 프레임워크)를 사용합니다.
4.Whole Team - 개발에 참여하는 모든 구성원(고객포함)들은 각자 자신의 역할이 있고 그 역할에 대한 책임을 가져야한다.
5.Continous Integration(계속적인 통합) - 모듈 단위로 나눠서 개발된 코드들은 하나의 작업이 마무리될때마다 지속적으로 통합된다.
6.Desgin Improvement(디자인개선) 또는 Refactoring(리팩토링) - 프로그램 기능의 변경없이 단순화 유연성 강화등을 통해 시스템을 재구성합니다.
7.Small Realeases(소규모 릴리즈) - 릴리즈 기간을 짧게 반복함으로써 고객의 요구 변화에 신속하게 대응할 수 있습니다.