Ch03. 애자일 소프트웨어 개발

728x90

3주차 필기 내용

Ch03. 애자일 소프트웨어 개발

신속한 개발과 인도(delivery) 필요
-다수 비즈니스 시스템에서 신속한 개발과 인도가 중요함
-변화하는 비즈니스 환경에 따라 안정적인 요구사항 얻기 힘듬
-시스템 경험 후 요구사항 명확히 알게 되지만 요구사항은 계속 바뀜


계획 주도 프로세스 :신속한 소프트웨어 개발에 부적합
-이 프로세스는 안정성 중심 시스템. 완벽한 분석 필요한 경우 적합


애자일 기법의 등장
-익스트림 프로그래밍 (Extreme Programming) : XP 개발
-스크럼(Scrum) : 관리

 

[애자일 기법의 특징]

-명세, 설계, 구현이 중첩되며 설계문서 최소화

-시스템을 연속적인 증분으로 구현.

-최종 고객 사용자 + 이해당사자가 증분의 명세화와 평가에 참여

-보통 2-3주마다 새로운 증분을 인도

-테스트 자동화 도구, 형상관리 도구, UI 생성 도구 등 여러 도구를 활용

-(고객) 커뮤니케이션 활성화, 문서 최소화

 

[계획주도 VS 애자일 비교]

계획주도 개발

-프로세스 단계별로 해당하는 산출물 생성하도록 각 단계를 나눔.

-각 단계의 산출물이 다음 단계에서 사용됨

-활동 별로 반복 이뤄짐

애자일 개발

-설계와 구현을 프로세스 중심 활동으로 두고 요구사항, 테스팅 등을 설계와 구현에 포함시킴

-요구사항과 설계를 따로 다루지 않고 함께 발전시킴


   3.1 애자일 기법

-계획주도 접근법은 요구사항/설계 등의 문서화에 중점

-대규모로 오래 지속되는 소프트웨어 시스템 개발에 적합

-중소 규모 비즈니스 시스템을 개발하기에 오버헤드 큼

-요구사항 바뀌면 명세, 설계, 프로그램을 함께 변경해야 함

 

[애자일 기법]

-1990년대 말 등장

-개발팀이 설계, 문서 작업보다는 소프트웨어 자체에 더 집중 O

-요구사항 자주 변경되는 애플리케이션 개발에 적합

-반복적 개발

-고객이 작동하는 소프트웨어 빨리 받아 요구사항 도출에 기여

 

[애자일 선언]

-프로세스의 도구 < 개인과 상호작용

-문서 < 작동 소프트웨어

-계약 협상 < 고객과의 협업

-계획 < 변화에 대응

 

[애자일 기법 원칙들]

고객 참여
변화 수용
점증적 인도
단순성 유지
프로세스가 아닌 사람

 

[애자일 기법 적용]

-소프트웨어 회사가 중소규모의 제품 개발 시.

-고객이 개발 프로세스에 참여 의사O 참여 가능O

-외부 이해당사자나 규제 없는 조직 내에서 이뤄지는 맞춤형 개발

-같은 장소에 있는 팀으로 구성 (밀접/신속 의사소통 O)


   3.2 애자일 개발 기법

[Extreme programming] XP : ‘개발기법

-극단적으로 반복적인 접근법

-하루에 여러 개 버전. 2주마다 증분을 인도

-요구사항을 사용자 스토리라는 시나리오로 표현. 사용자 스토리를 태스크로 나누어 표현

-프로그래머는 으로 개발하고 코드 작성 전 테스트를 먼저 작성

-새로운 코드를 시스템에 통합하려면 모든 테스트를 통과해야 함  (기존 테스트 자동화 + 추가 테스트)

-시스템 자주 배포함. 시스템 배포 간격이 짧음

[XP 실무]

공동 소유권 모든 개발자는 모든 코드에 책임 O
연속적 통합 작업 끝나자마자 시스템에 통합. 통합 후 모든 테스트 통과해야함
점증적 계획 요구사항은 스토리 카드(시나리오)에 기록.
개발자는 스토리를 개발 태스트로 나눔
고객 참여 고객은 개발 팀의 구성원. 요구사항 도출 책임 가짐
짝 프로그래밍 개발자는 짝을 지어 일하고 서로의 작업 검토
리팩토링 기능은 그대로. 코드의 단순화(리팩토링)
단순한 설계 현재의 요구사항만을 생각하며 설계 수행 (미래 반영X 고려X)
소규모 릴리스 최소한의 기능 먼저 개발
초기 릴리스에 점증적으로 기능 추가하며 자주 시스템 릴리스함
유지할 수 있는 속도 과도한 초과근무 X. 되려 코드 품질과 생선성 떨어뜨림
테스트 주도 개발 자동화된 테스트 프레임워크 이용하여 새 기능 구현 전 테스트 먼저 작성함

 

[애자일. XP 원칙]

1, ‘점증적 개발은 빈번하고 작은 릴리스를 통해 지원됨
2. ’고객참여는 고객이 개발팀에 지속적으로 관여함을 의미.
3. ’프로세스가 아닌 사람은 짝 프로그래밍, 공동 소유권, 초과근무 지양하는 지속 가능 개발
4. ’변화 수용은 정기적 릴리스, 테스트 우선 개발, 리팩토링, 새로운 기능의 연속적 통합을 통해 지원됨
5. ’단순성 유지는 코드 품질 개선하는 계속적인 **리팩토링과 미래의 변경을
                                                                 불필요하게 반영하지 않는 단순한 설계를 통해 지원됨

 

[실무적 XP 기법]

대부분의 조직에서 XP는 너무 극단적. 실무 적용 어려움

-실무 원칙을 골라서 사용함

-Scrum 관리 중심 기법과 함께 사용

주요 실무 원칙

-테스트 우선(주도) 개발 : TDD(Test Driven Development)
-리팩토링(refactoring)
-점증적 개발
-사용자 스토리
-짝 프로그래밍

 

[1. 사용자 스토리]

*사용자 스토리 :시스템 사용자가 경험할 수 있는 일종의 사용 시나리오

XP의 요구사항 관리

-요구사항 변경 지원을 위해 별도의 요구공학 활동 두지 않음

-시스템 사용자가 경험할 수 있는 일종의 사용 시나리오(사용자 스토리) 만들어 관리

-고객은 개발팀과 스토리 카드를 작성. 스토리 카드를 과업’(task)로 나누어 개발

 

사용자 스토리의 장단점

-요구사항 문서나 유스케이스 보다 쉽게 이해 가능

-요구사항 완전성 문제

: 스토리들이 시스템 주요 요구사항 전체를 포함하였는지

: 개별 스토리에 누락된 내용은 없는지

 

[2. 리팩토링]

전통적인 소프트웨어 공학

-변경을 고려한 설계를 하라

XP

-변경이 없거나 예상치 못한 변경 요청 일어나기도 하므로 변경 고려한 설계 = 시간낭비

-변경은 필연적 발생 + 점증적 개발 -> 소프트웨어 구조 망가짐

-지속적 리팩토링으로 소프트웨어 구조와 가독성 개선 -> 구조적 악화 막고 변경 처리 쉬움

리팩토링의 예시

*리팩토링 : 개선 가능 부분 찾아서 즉시 구현하는 것 의미

-중복 코드 제거위한 클래스 구조 변경

-속성/메소드 이름 적절 변경

-비슷한 코드 반복 사용을 메소드 호출로 묶어서 대체

 

[3. 테스트 우선 개발]

XP의 테스트

-명세 없이 테스팅하는 문제

-테스팅을 자동화하고 변경 후에 모든 테스트 통과해야 진행

XP 테스팅 특징

-테스트 우선 개발 -> 코딩 -> 테스트

-시나리오 이용하여 점증적 테스트 개발

-테스트 개발과 검증에 사용자 참여

-테스트 자동화 프레임워크 사용

-스토리 카드 -> 태스크 -> 태스크 별 테스트 작성

-고객은 다음 릴리스에서 구현할 스토리에 대한 인수 테스트 개발을 도움

 

[테스트 주도 개발(TDD) ]

-코드 작성 전 테스트 먼저 작성

테스트 주도 개발 특징

-테스트 작성하려면 기능, 인터페이스에 대해 알아야 하므로 요구사항 명확히 할 수 있음

-테스트 지연 문제 방지

-자동화된 테스트 프레임워크 사용 필수 (ex. JUnit)

: 테스트 쉽게 작성할 수 있게 함

: 테스팅을 자동으로 실행할 수 있으며 테스팅 결과가 명세에 맞는지 확인 가능

 

[테스트 자동화]

-테스트 자동화는 TDD에 필수적

[테스팅 컴포넌트]

-독립 실행 가능

-테스트 입력과 결과 확인 가능

-JUnit 등 자동화 프레임워크 이용

[테스트 커버리지] coverage (***)

-완전성 판단할 수 없음

 

[4. 짝 프로그래밍]

짝 프로그래밍

-프로그래머가 짝을 지어 코드 같이 개발. (짝 바뀔 수 O)

장점

-시스템에 대한 공동 소유권, 책임

-다른 사람이 같이 코드 보기 때문에 비공식적 인스펙션’(코드 리뷰) 프로세스 진행됨

-리팩토링 장려,지지

짝 프로그래밍의 실무 적용

-경험 많은 개발자 + 경험 부족한 개발자

-학생 개발자의 경우, 짝 프로그래밍 생산성 낮지 않다는 연구

-경험 많은 개발자의 경우, 생산성이 떨어진다는 연구

-지식 공유가 중요


3.3 애자일 프로젝트 관리

계획주도 접근법
-무엇이 언제 인도될 것인지, 누가 산출물 만들 것인지 계획 가지고 있음
-관리 쉬움
애자일 기법
-프로젝트 진척도가 가시적 X
-비공식적 계획과 프로젝트 관리
-큰 조직에 부적합

 

[스크럼] : Scrum

스크럼: 애자일 프로젝트 조직화, 외부 가시화 제공 위한 프레임워크

-반복적 개발 관리에 중점을 둔 방법

-특정 애자일 실무 원칙 요구 X

용어

스크럼 마스터 프로젝트 관리자
제품 *백로그(backlog) 할 일 목록 To do list
*스크럼 개발 팀 일일 회의 (짧은 회의)
*스프린트(sprint) 반복

 

[스프린트 주기]

2-4주 범위의 고정 길이

-완성 못한 작업 처리 목적으로 기간 늘리지 X 않음

-마치지 못한 작업은 제품 백로그’(전체 할 일)에 돌려놓음

제품 백로그 항목 우선순위 매겨서 해당 스프린트에 작업할 스프린트 백로그를 선정

-‘스프린트 백로그’(이번에 할 일)

매일 스크럼 진행

-진척도 점검. 우선순위 조정하는 짧은 미팅

-진척 사항, 문제점, 계획 등 정보 공유

스크럼 보드를 두어 정보 공유함

-스프린트 백로그, 진행상황, 완료된 작업 등 표시

-누구든지 변경 가능

스프린트 끝날 때 리뷰 미팅 실시

[소프트웨어 공학]  한티 미디어 10판 교재 

728x90

'[전공] 학교 전공 공부 > [학교] 소프트웨어 공학' 카테고리의 다른 글

Ch05. 시스템 모델링  (0) 2022.04.08
Ch04. 요구공학  (0) 2022.04.08
4주차 과제 - [소프트웨어 공학]  (0) 2022.04.02
Ch02. 소프트웨어 프로세스  (0) 2022.03.17
Ch01. 서론  (0) 2022.03.17