Extreme Programming (XP)

Extreme Programming [번역]

정의

  • Extreme Programming (XP) 는 애자일 개발 방법 프레임워크 중 하나이다.
  • 이 목적은 높은 퀄리티의 소프트웨어와, 개발팀을 위한 높은 퀄리티의 라이프 사이클을 수행하는 것이다.
  • XP 는 에자일의 특화된 프레임워크이다. 소프트웨어 개발을 위한 적절한 엔지니어링 방식과 관련된 가장 구체적인 애자일 프레임워크이다.

적용 가능한 방법

  • Don Wells (www.extremeprogramming.org) 에 의해서 잘 설명 되어 있는 내용은 다음과 같다.
    • 소프트웨어 프레임워크에 대한 동적인 변경
    • 새로운 기술을 사용하는 고정시간 프로젝트로 인한 위험
    • 작은, 같은 공간에 활장된 개발팀
    • 사용 중인 기술은 자동화된 단위 및 기능 테스트를 허용한다.
  • XP의 목적은 소프트웨어 엔지니어링의 풀 셋이다.
  • 여기에는 완젼히 XP 를 수행하고자 원치 않는 몇가지 상황이 있다.
  • 많은 상황에서 XP 프레임워크 전체에 사용할 수 없을 수 있지만, 상황에 따라 가능한 한 많은 관행을 사용하는 것을 막지 않아야한다.

가치

  • XP 의 5가지 값들은 커뮤니케이션, 단순성, 피드백, 용기, 존중 이며, 더 상세한 내역이 있다.

커뮤니케이션

  • 스프트웨어 개발은 본질적으로 팀 스포츠이다. 이는 지식을 하나의 팀멤버에서 팀 모두에게 전달하는 스포츠이다.
  • XP는 적절한 종류의 의사소통을 강조한다.
  • 직접 만나서 토론하고, 화이트보드에 작성하고, 메커니즘을 그리는 작업이다.

단순성

  • 단순성의 의미는 “해야할 작업을 가장 단순하게 하는 것이다.”
  • 이는 낭비를 버리고, 꼭 필요한 일만 수행하는 것으로 시스템을 가능한 단순하게 디자인하고, 쉽게 관리할 수 있으며, 지원과 수정이 쉽게 하는 것이다.
  • 단순성은 또한 알고 있는 요구사항만 해결하는 것이며, 미래를 예측하는 것이 아니다.

피드백

  • 피드백은 이전에 수행한 노력에 대해서 지속적으로 피드백 하는 것이다.
  • 팀들은 향상시키고, 수정하는 반복하는 부분을 찾아내는 과정에 대한 노력에 대한 피드백이다.
  • 피드백은 또한 단순한 디자인을 지원한다.
  • 당신의 팀은 무언가를 개발하고, 피드백을 수집한 다음 앞으로 제품을 조정한다.

용기

  • 켄드 백은 “두려움앞에서 효과적인 액션” 에 대해 정의 했다.
  • 이 정의는 결과가 팀에 해롭지 않도록 원칙에 기반한 행동을 선호함을 보여준다.
  • 당신은 이슈를 제기할 용기를 가져야 한다. 이는 팀의 효율을 떨어뜨리는 내용에 대해서 문제 제기를 해야한다는 것이다.
  • 또한 동작하지 않는것, 혹은 잘못된 것을 수행하지 않을 용기가 필요하다. 흑은 용기를 내어서 해야할 일을 시도해야한다.
  • 그리고 받아들이기 어려운 피드백을 받아 들이고, 이를 수행할 용기도 역시 필요하다.

존중

  • 팀 멤버들은 서로 준중 해야한다.
  • 이들은 피드백을 제공하고, 받아들이는 과정을 서로 수행해야한다.
  • 또한 솔직한 관계를 유지하고, 단순한 디자인들과 솔루션들을 확인하기 위해서 함께 작업해야한다.

프랙티스

  • XP의 핵심은 아래 나열된 소프트웨어 개발 사례의 상호 연결된 집합이다.
  • 이러한 프랙티스가 개발젹으로 수행이 가능하지만, 많은 팀은 몇몇 프랙티스가 다른것을 강화하는 것을 발견했다.
  • 그리고 소프트웨어 개발에서 자주 직면하는 위험을 완전히 제거할 수 있도록 함께 수행해야한다.

  • XP 프랙티스는 초기 소개된 것에서 조금 변경이 되었다.
  • 원본은 12개의 실천사항들이 아래와 같이 있었다.
  • 만약 이러한 프랙티스에 대해서 원본 내용을 확인하고자 한다면 다음을 방문하자. http://ronjeffries.com/xprog/what-is-extreme-programming/
    • 플래닝 게임
    • 작은 릴리즈
    • 메타포
    • 단순한 디자인
    • 테스팅
    • 리펙토링
    • 페어 프로그래밍
    • 집단 오너쉽
    • 지속적인 통합
    • 주 40시간 업무
    • 고객과 한공간에서 일하기
    • 코딩 표준
  • 아래 설명하는 것은 두번째 Extreme Programming 으로 변경된 부분을 포함한다.
  • 아래 설명은 xp 활동을 통해서 경험을 기반으로 변경된 사항들이다.
  • 그리고 더욱 실제적인 프랙티스를 나타내고 있다.

Sit Together

  • 커뮤니케이션은 XP 의 핵심가치중에 하나이다.
  • 대부분의 사람들은 이에 동의한다.
  • 얼굴을 보고 대화를 하는 것은 커뮤니케이션의 가장좋은 형태이다.
  • 당신의 팀이 함께 동일한 환경에 앉아서 커뮤니케이션 장벅 엾이 일하는 것이 가장 좋다.

Whole Team

  • 크로스 펑셔녈 그룹은 단일 팀으로 형태로 제품을 위한 필요한 롤을 함께 하는 것이다.
  • 이 의미는 사람들이 자신의 영역에서 뿐만 아니라 관계된 다른 영역의 일도 함께 잘 수 행해 나가는 것을 말한다.
  • 이를 위해서는 매일 특정 산출물의 수행을 완료한 것을 통해서 함께 일하는 것이 필요하다.

Informative Workspace

  • 함께 얼굴을 마주보고 커뮤니케이션을 수행하기를 촉진하기 위한 팀의 공간을 만드는 것이다.
  • 이는 사람들이 필요할 때 프라이버시를 가질 수 있도록 하고, 팀의 작업을 서로에게 그리고 팀 외부의 이해 관계자에게 투명하게 만듭니다.
  • Utilize Information Radiators 는 매일 업데이트되는 사항을 통해 커뮤니케이션 하게 해준다.

Energized Work

  • 소프트웨어 개발에서 그리고 모든 지식작업을 수행할때 가장 효과적인 방법은 집중하고, 방해로 부터 해방될때 가능하다.
  • 활력이 넘치는 작업이란 물리적으로 정신적으로 집중한 상태에 들어갈 수 있도록 조취를 취하는 것을 말한다.
  • 이 의미는 스스로 오버워크 하지 않는 것이고 또한 남이 당신에게 오버워크 하지 않도록 하는 것이다.
  • 이는 또한 건강하게, 그리고 당신의 팀메이트들이 건강한 상태를 유지할 수 있도록 존중을 보여주는 것이다.

Pair Programming

  • 페어 프로그래밍은 모든 소프트웨어 제품이 2명의 개발자가 동일한 머신에서 함께 개발하는 것을 말한다.
  • 이 아이디어는 두 브레인, 4개의 눈들을 활용하여 하나의 뇌와 2개의 눈보다 더 효과적으로 일하는 것이다.
  • 이는 지속적인 코드 리뷰와 문제에 대해서 잔소리를 통해서 더 빠르게 응답하는 것이다.
  • 팀들은 페어 프로그래밍을 사용하여, 퀄리티가 향상되고, 자신의 작업이 문제로 인해서 두 번 작업하지 않도록 해 주었으며 그리고 작업에 더 집중할 수 있도록 해준다는 것을 발견했다.
  • 그러므로 더 작은 코드로 동일한 작업을 수행할 수 있도록 해주는 효과가 있다.

Stories

  • 스토리는 사용자와 고객에게 더욱 의미있는 제품이 되도록 설명하는 것이다.
  • 이러한 스토리들은 자신의 제품을 사용자가 원하는 것을 더욱 잘 설명하도록 짧게 기술한다.
  • 이를 통해서 플래닝에 이용할 수 있고, 더욱 상세한 대화를 통해 이를 만들어 갈 수 있도록 해준다.

Weekly Cycle

  • 주간 사이클은 iteration 과 유사하다.
  • XP에서 팀은 주의 첫번째 날에 만나서 현재까지의 일을 검토하고, 고객이 그 주에 전달하고 싶은 이야기를 선택하고, 팀은 이러한 이야기에 접근하는 방법을 결정한다.
  • 주의 끝에는 기능 테스트를 수행하며, 선택된 스토리를 현실화 하는 작업을 한다.
  • 제한된 박스의 전달 기간동안에는 고객에게 피드백을 받기 위해서 시연을 할 수 있도록 제품을 만들어 낸다.

Quarterly Cycle

  • Quarterly Cycle 은 릴리즈와 유사하다.
  • 각 위클리 사이클의 상세한 작업들을 전체 작업에 맞게 일하도록 하는 것이다.