본문 바로가기
CS/소프트웨어 공학 에센셜

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

by k-mozzi 2021. 5. 27.
반응형
Preface

 

이번 장을 공부하면서 느낀 점이 있다.

 

'아는 만큼 보인다'라는 말은 괜히 나온 말이 아니다.

 

처음 글을 읽었을 땐 모르는 용어가 너무 많아 글의 요점을 파악하는 데 어려움이 있었다.

포털 사이트를 통해 단어의 의미를 파악한 후에야 저자가 전달하고자 하는 개념을 쉽고 빠르게 이해할 수 있었다. 

 

앞으로의 IT 공부를 위해 각종 용어의 의미를 정확히 이해하고 암기하는 것이 필요해보인다.

 

또, 이번 장에서 소개된 plug-in은 티스토리에서도 사용할 수 있는 기능이다.

이전까지는 이 단어의 정확한 의미를 몰라 기능을 사용하지 못했는데,  무슨 의미이며, 언제 어떻게 사용되는 것인지 알고 나니 꼭 사용해봐야겠다는 생각이 들었다.

 

마지막으로 CBD는 나같은 초심자가 간단한 소프트웨어를 개발할 때 다른 개발 방법론들에 비해 비교적 쉽게 사용할 수 있을 것 같다고 생각했다.


5. 애자일 방법론

 

- 문서 중심의 전통적 개발방법이 아닌 필요한 요구를 그때그때 추가하고 수정하는 코드 중심의 점진적 개발방법이다.

 

- 특징

① 프로세스와 도구보단 협업에 가치를 둠

② 계약협상보다 고객과의 협력에 가치를 둠

③ 계획에 따르기보단 변화에 대응하는 것에 가치를 둠

④ 단순성, 의사소통, 피드백, 용기 원칙에 기반

⑤ 소규모 목표를 달성하며 원래 가치에 접근

⑥ 점진적 개발과 인도에 기반

⑦ 짧은 사이클과 릴리즈 반복

⑧ 요구사항의 변화 빈번, 소규모 개발자(10명 내외), 같은 공간을 사용하는 소형·중형 사이즈 시스템, 게임 소프트웨어 개발에 적합

⑨ 팀이 각자 다른 장소에서 작업하거나 대형 소프트웨어 개발 프로젝트에 부적합

 

- 이터레이션(iteration) : 하나의 릴리즈를 더 분할한 단위

 

- 릴리즈(release) : 고객에게 인도되는 제품

 

- 기술적 부채 : 기존의 결함들로 인해 새로운 기능을 개발·확장하는 데 문제가 발생하는 것

 

- 아키텍처(architecture) : 설계 방식(도면)

 

- 소프트웨어 무질서도 증가 → 소프트웨어의 부패

 

- 리펙토링(refactoring) : 소프트웨어를 쉽게 이해하고 적은 비용으로 수정할 수 있도록 기존 코드 설계를 개선하는 기술

① 외부 행위 변화는 없고 내부 구조만 바꿈 (cf. 컴포넌트는 외부 인터페이스 중심)

② '파울러(Martin Fowler)'의 '나쁜 냄새'

→ 중복된 코드

→ 긴 메소드( : 특정 작동을 수행하라는 단일 요구 메시지)

→ 거대한 클래스

③ 다른 프로그래머의 이해 수준 향상

④ 버그 찾는 데 도움

⑤ 프로그램 개발 속도 증가

 

- 오픈 소스(open source) 프로젝트 : 개방형 협업 개발

 

- 디자인 패턴 : 설계 단계에서 패턴을 적용하여 소프트웨어의 구조적 완성도 향상

cf. 리팩토링 : 이미 완성된 코드를 수정하여 동일한 목표 추구

 

- 객체지향 개발방법 : 시스템을 수평적으로 설계하여 재사용성 확장

→ 개발 속도 및 관리 효율 향상

 

- 디버깅(debugging) : 오류 수정

 

- 마일스톤(milestone) : 프로젝트 진행 과정에서 특기할 만한 사건

 

- 애자일 도입의 어려움

① 낯선 프로세스

② 팀원들에게 요구되는 역량

③ 이끌어내기 힘든 고객 참여

→ 사용자 스토리 작성

→ 스토리 테스트 케이스 작성

→ 스토리 구현에 필요한 자원 추정

→ 릴리즈 계획 수립 etc.


6. 익스트림 프로그래밍(XP)

 

- 애자일 소프트웨어 개발방법론 중 하나이다.

 

- 의사소통, 단순함, 피드백, 용기, 존중 5가지 가치에 초점을 맞춘 경량방법론이다.

 

[XP 개발 프로세스]

 

- 사용자 스토리(user story) 제작

① 구체적이 아닌 간결하고 짧게 표현

② 인덱스 카드 사용 권장 : 고객과의 대화에 시간 투자

 

- 좋은 사용자 스토리 특성 : INVEST

① 독립적이다 : Independent

② 협상 가능하다 : Negotiable

③ 사용자와 고객에게 가치 있다 : Valuable (고객의 관점에서 평가)

④ 추정 가능하다 : Estimable

⑤ 작다 : Small

⑥ 테스트 가능하다 : Testable

 

- 사용자 스토리와 유스케이스의 차이점은 다루는 범위가 다르다는 것이다.

 

- XP는 다른 애자일 기법보다 테스트 프로세스를 강조한다.

 

- XP는 팀 중심의 개발 방법이다. (비정형적 검사, 코드 검토)

 

- 테스트 케이스는 사용자 스토리 뒷면에 메모 형식으로 작성한다.

 

- 개발자는 사용자 스토리를 개발 작업으로 분해한다.


7. 컴포넌트 기반 개발방법론(CBD)

 

- 재사용 가능한 컴포넌트를 기반으로 소프트웨어를 개발하는 방법이다.

 

- 컴포넌트(component) : 재사용 가능한 부품

① 하나 이상의 프로그램을 하나의 단위로 관리하는 패키지이자 독립된 배포 단위

② 제공 인터페이스 + 요구 인터페이스

③ 인터페이스가 동일하면 다른 소프트웨어 컴포넌트로 대체 가능 (내부 구현 관여 X)

느슨한 결합도

⑤ 큰 입자

 

- 플러그인(plug-in) : 조립

 

[CBD 프로세스]

 

 

 

 

 

참고 문헌 : 윤청, 소프트웨어 공학 에센셜(생능출판), 2019, p.71~96.

728x90
반응형

댓글