Preface
이번 장을 공부하면서 느낀 점이 있다.
'아는 만큼 보인다'라는 말은 괜히 나온 말이 아니다.
처음 글을 읽었을 땐 모르는 용어가 너무 많아 글의 요점을 파악하는 데 어려움이 있었다.
포털 사이트를 통해 단어의 의미를 파악한 후에야 저자가 전달하고자 하는 개념을 쉽고 빠르게 이해할 수 있었다.
앞으로의 IT 공부를 위해 각종 용어의 의미를 정확히 이해하고 암기하는 것이 필요해보인다.
또, 이번 장에서 소개된 plug-in은 티스토리에서도 사용할 수 있는 기능이다.
이전까지는 이 단어의 정확한 의미를 몰라 기능을 사용하지 못했는데, 무슨 의미이며, 언제 어떻게 사용되는 것인지 알고 나니 꼭 사용해봐야겠다는 생각이 들었다.
마지막으로 CBD는 나같은 초심자가 간단한 소프트웨어를 개발할 때 다른 개발 방법론들에 비해 비교적 쉽게 사용할 수 있을 것 같다고 생각했다.
5. 애자일 방법론
- 문서 중심의 전통적 개발방법이 아닌 필요한 요구를 그때그때 추가하고 수정하는 코드 중심의 점진적 개발방법이다.
- 특징
① 프로세스와 도구보단 협업에 가치를 둠
② 계약협상보다 고객과의 협력에 가치를 둠
③ 계획에 따르기보단 변화에 대응하는 것에 가치를 둠
④ 단순성, 의사소통, 피드백, 용기 원칙에 기반
⑤ 소규모 목표를 달성하며 원래 가치에 접근
⑥ 점진적 개발과 인도에 기반
⑦ 짧은 사이클과 릴리즈 반복
⑧ 요구사항의 변화 빈번, 소규모 개발자(10명 내외), 같은 공간을 사용하는 소형·중형 사이즈 시스템, 게임 소프트웨어 개발에 적합
⑨ 팀이 각자 다른 장소에서 작업하거나 대형 소프트웨어 개발 프로젝트에 부적합
- 이터레이션(iteration) : 하나의 릴리즈를 더 분할한 단위
- 릴리즈(release) : 고객에게 인도되는 제품
- 기술적 부채 : 기존의 결함들로 인해 새로운 기능을 개발·확장하는 데 문제가 발생하는 것
- 아키텍처(architecture) : 설계 방식(도면)
- 소프트웨어 무질서도 증가 → 소프트웨어의 부패
- 리펙토링(refactoring) : 소프트웨어를 쉽게 이해하고 적은 비용으로 수정할 수 있도록 기존 코드 설계를 개선하는 기술
① 외부 행위 변화는 없고 내부 구조만 바꿈 (cf. 컴포넌트는 외부 인터페이스 중심)
② '파울러(Martin Fowler)'의 '나쁜 냄새'
→ 중복된 코드
→ 긴 메소드( : 특정 작동을 수행하라는 단일 요구 메시지)
→ 거대한 클래스
③ 다른 프로그래머의 이해 수준 향상
④ 버그 찾는 데 도움
⑤ 프로그램 개발 속도 증가
- 오픈 소스(open source) 프로젝트 : 개방형 협업 개발
- 디자인 패턴 : 설계 단계에서 패턴을 적용하여 소프트웨어의 구조적 완성도 향상
cf. 리팩토링 : 이미 완성된 코드를 수정하여 동일한 목표 추구
- 객체지향 개발방법 : 시스템을 수평적으로 설계하여 재사용성 확장
→ 개발 속도 및 관리 효율 향상
- 디버깅(debugging) : 오류 수정
- 마일스톤(milestone) : 프로젝트 진행 과정에서 특기할 만한 사건
- 애자일 도입의 어려움
① 낯선 프로세스
② 팀원들에게 요구되는 역량
③ 이끌어내기 힘든 고객 참여
→ 사용자 스토리 작성
→ 스토리 테스트 케이스 작성
→ 스토리 구현에 필요한 자원 추정
→ 릴리즈 계획 수립 etc.
6. 익스트림 프로그래밍(XP)
- 애자일 소프트웨어 개발방법론 중 하나이다.
- 의사소통, 단순함, 피드백, 용기, 존중 5가지 가치에 초점을 맞춘 경량방법론이다.
- 사용자 스토리(user story) 제작
① 구체적이 아닌 간결하고 짧게 표현
② 인덱스 카드 사용 권장 : 고객과의 대화에 시간 투자
- 좋은 사용자 스토리 특성 : INVEST
① 독립적이다 : Independent
② 협상 가능하다 : Negotiable
③ 사용자와 고객에게 가치 있다 : Valuable (고객의 관점에서 평가)
④ 추정 가능하다 : Estimable
⑤ 작다 : Small
⑥ 테스트 가능하다 : Testable
- 사용자 스토리와 유스케이스의 차이점은 다루는 범위가 다르다는 것이다.
- XP는 다른 애자일 기법보다 테스트 프로세스를 강조한다.
- XP는 팀 중심의 개발 방법이다. (비정형적 검사, 코드 검토)
- 테스트 케이스는 사용자 스토리 뒷면에 메모 형식으로 작성한다.
- 개발자는 사용자 스토리를 개발 작업으로 분해한다.
7. 컴포넌트 기반 개발방법론(CBD)
- 재사용 가능한 컴포넌트를 기반으로 소프트웨어를 개발하는 방법이다.
- 컴포넌트(component) : 재사용 가능한 부품
① 하나 이상의 프로그램을 하나의 단위로 관리하는 패키지이자 독립된 배포 단위
② 제공 인터페이스 + 요구 인터페이스
③ 인터페이스가 동일하면 다른 소프트웨어 컴포넌트로 대체 가능 (내부 구현 관여 X)
④ 느슨한 결합도
⑤ 큰 입자
- 플러그인(plug-in) : 조립
참고 문헌 : 윤청, 『소프트웨어 공학 에센셜』(생능출판), 2019, p.71~96.
'CS > 소프트웨어 공학 에센셜' 카테고리의 다른 글
프로젝트 계획 (0) | 2021.05.30 |
---|---|
프로젝트 관리 (0) | 2021.05.28 |
소프트웨어 개발방법론(1) (2) | 2021.05.25 |
소프트웨어 개발에 대한 오해와 실체 (0) | 2021.05.24 |
시스템 공학과 소프트웨어 공학 (0) | 2021.05.22 |
댓글