Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SoftwareEngineering] eXtreme Programming 정리 #63

Merged
merged 1 commit into from
Aug 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions contents/software-engineering/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@
아래의 자료에서 자세한 설명과 코드를 볼 수 있다.

- 작성자 이세명 | [Agile Software Development](./materials/CS_(Agile).pdf)
- 작성자 정희재 | [eXtreme Programming(XP)](./eXtremeProgramming.md)

---

Expand Down
48 changes: 48 additions & 0 deletions contents/software-engineering/eXtremeProgramming.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# eXtreme Programming (XP)

> 작성자 : [정희재](https://github.com/Hee-Jae)

참조 : [위키피디아](https://ko.wikipedia.org/wiki/%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%A6%BC_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
<details>
<summary>Table of Contents</summary>

- [eXtreme Programming이란?](#extreme-programming-이란)
- [다른 애자일 방법론과 구분되는 특징](#다른-애자일-방법론과-구분되는-특징)
- [XP 실천 방법](#xp-실천-방법)

</details>

---

## eXtreme Programming 이란?
**익스트림 프로그래밍(eXtreme Programming, XP)** 은 `켄트 백` 등이 제안한 소프트웨어 개발 방법이다. 비즈니스 상의 요구가 시시각각 변동이 심한 경우에 적합한 개발 방법이다. 1999년 `켄트 백`의 저서인 'Extreme Programming Explained - Embrace Change'에서 발표되었다. **애자일 개발 프로세스**라 불리는 개발 방법 중의 대표적인 하나로 꼽히며, 약칭인 'XP'로 잘 알려져 있다.

## 다른 애자일 방법론과 구분되는 특징
1. 프로그래머들이 코딩을 할 때 **테스트 코드**도 함께 작성한다.
2. **테스트를 기반**으로 프로젝트를 완성해 나간다.
3. **반복적으로 고객에게 프로토타입을 전달**함으로써 고객의 요구사항 변화에 민첩하게 대응한다.
4. 매번 프로토타입을 고객에게 전달함에 있어서 프로토타입 자체로써 **버그가 상대적으로 적은 완벽에 가까운 데모**를 경험하게 해준다.


## XP 실천 방법

#### Whole Team
프로젝트에 참여하는 모든 팀원들을 가리킨다. 디자이너, 프로젝트 관리자, 개발자, 테스터, 유저 등 역할들이 많은데 이중 **유저가 제일 중요하다.** 유저가 프로젝트의 키를 가지고 있는 `Stakeholder`이기 때문이다.

#### Planning Game
어떤 개발 과정을 끝마칠 것인가, 다음에는 어떤 일을 할 것인가에 중점을 두어 `iteration`을 계획한다. 일반적으로 2주를 주기로 한 `iteration`을 진행한다. 한 `iteration` 동안 프로토타입을 만들어서 의뢰인에게 보여주고 회의를 한다. 따라서 **기한 내에 프로토타입이 반드시 개발되어야 한다.** 이를 통해 기업은 본인들의 실력을 입증할 수 있고, 의뢰인 입장에서는 프로토타입이 마음에 안들 때 빠르게 손절해서 비용을 아낄 수가 있다.

#### Customer Tests
의뢰인이 원하던 결과물을 만들어내는게 중요하다. 따라서 주기적으로 **결과물이 정말 의뢰인이 원하는 게 맞는지 테스트를 해본다.**

#### Small Releases
**개발자는 주기적으로 의뢰인에게 프로토타입을 보여준다.** 의뢰인은 이를 통해 추가적인 요구사항을 제시할 수 있으며, 개발자는 이를 통해 현재까지 개발 상황이 올바르게 가고 있음을 알 수 있다.

#### Simple Design
개발을 하다 보면 코드가 복잡해진다. 따라서 **코드를 가능한 심플하게 설계를 한다.** (KISS 원칙 : Keep It Small, Simple)
Comment on lines +41 to +42
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 KISS ~~ 💋

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그... 그런 방 아닙니다..


#### Test-Driven Development
XP에서 가장 중요한 요소이다. **테스트를 거치면서 코딩한다.**

#### Pair Programming
**두명 혹은 그 이상의 프로그래머가 함께 코딩을 한다.** 코딩 하는 역할, Quality Assurance 역할 등으로 나누어서 개발과 테스트에 모두 집중한다.
Comment on lines +44 to +48
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XP에서 코딩을 할 때 테스트도 같이 개발을 한다고 했는데, 테스트와 코딩은 어떤 것이 먼저 이루어지거나가 없이 "동시에" 이루어지나요? 아니면 TDD처럼 테스트 코드를 먼저 작성한 후 개발을 진행하나요?

그리고 페어 프로그래밍에서 코딩 역할과 QA 역할으로 나뉜다고 그랬는데, 코딩과 QA는 각각 한 사람이 맡는건가요? 아니면 한 사람이 코딩과 QA를 모두 맡고, 다른 사람이 그와 관련된 아이디어를 던져주는 방식으로 진행되나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우선 첫번째 질문에 대한 답을 드리자면 일반적으로 XP에서는 테스트와 코딩이 "동시에" 이루어집니다. 물론 코딩을 하는 사람과 테스트 코드를 작성하는 사람의 역량 차이에 따라 둘 중 하나가 먼저 마무리되는 경우는 있습니다.
다만 주의해야할 점이 있습니다. "Test-Driven Development 란 테스트와 코딩을 동시에 하는 것이다." 라고 이해하시면 안됩니다. Test-Driven Development 는 말 그대로 테스트 주도 개발입니다. 개발을 하면서 항상 단위 테스트를 거치는 방법인데, 여러 방법이 있겠죠. 테스트 코드 먼저 작성하고 개발하기, 개발 후에 테스트 코드 작성하기, 둘 다 동시에 하기. 전부다 Test-Driven Development 라고 할 수 있습니다. XP에서는 이러한 테스트 주도 개발 메커니즘을 채택했다고 보시면 됩니다.
그런데 제가 왜 첫단에 "동시에" 이루어 진다고 답을 했는가, 그 이유는 밑에 질문하신 페어 프로그래밍과 관련있습니다.

페어 프로그래밍에서는 두 사람이 한 팀이되어 한명은 코딩, 한명은 QA를 위한 테스트 코드를 만듭니다. XP에서는 이런 방식으로 TDD가 진행됩니다. 서로 협력하는 과정에서 당연히 커뮤니케이션이 오고가니 서로 아이디어를 던져줄 수는 있습니다. 그런데 일방적으로 한 사람은 아이디어만 주고 한 사람은 아바타 마냥 코딩만하는건... 그것도 어찌보면 페어니까 페어 프로그래밍이라고 할수도 있겠네요ㅎㅎ 다만 XP에서는 코딩과 QA를 각각 한 사람이 맡는 것을 페어 프로그래밍이라 칭합니다.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 덕분에 검색을 해도 모호하게 나오던 개념을 확실하게 잡을 수 있었네요 !! 정말 감사합니다 ㅎㅎㅎㅎ!! 확실히 이해가 되었어요 ㅎㅎ