Extreme Programming

XP

XP(Extreme Programming) 은 사회적 변화에 대한 것이다.

성공하려면 기술이 있어야할 뿐 아니라, 좋은 인간관계도 맺어야 한다. XP 는 두 가지를 모두 다룬다. XP 는 이전에 상상도 못했던 일을 성취할 수 있게 해주는 프로그래밍 기법과, 명확한 의사소통, 팀워크를 탁월하게 적용하는 것에 집중하는 소프트웨어 개발의 한 양식이다.

  • 의사소통, 피드백, 단순성, 용기, 존중 같은 가치들에 바탕을 둔 소프트웨어 개발 철학
  • 고객 만족을 강조
  • 팀워크를 강조
  • 고객, 관리자, 프로그래머 각각의 역할에 초점을 맞춰 각 역할에 적절한 권리와 의무를 부여

Extreme

성공을 준비하라. 성공에서 한 발짝 뒤로 물러나 자신을 보호하지 말라. 최선을 다한 다음 결과에 대처하라. 이것이 극단(Extreme) 이다.

XP(Extreme Programming)는 주로 Kent Beck 이 개발한 소프트웨어 개발 방법론이다.

Kent 는 XP를 원칙을 통해 광범위하고 추상적인 가치에서 구체적인 실천으로 아이디어의 발전으로 설명한다. 지속적인 통합 , 리팩토링 , TestDrivenDevelopment 및 애자일 계획을 포함하여 소프트웨어 개발에 널리 사용된 많은 사례를 대중화 했다.

특징

XP 가 여타 방법론과 다른 점은 다음과 같다.

  • 짧은 개발 주기
  • 점진적 계획 접근 방법
  • 기능 구현 일정을 유연하게 세워 자주 바뀌는 비지니스 쪽의 요구에 대응할 수 있는 능력
  • 자동화된 테스트에 의존하는 점
  • 구두 전달, 테스트, 소스 코드에 의존하여 시스템 구조와 시스템의 의도를 전달하는 점
  • 시스템이 존재하는 마지막 순간까지 끝나지 않은 진화적인 설계 절차에 의존하는 점
  • 재능은 평범하더라도 열심히 참여하는 개인들 사이의 긴밀한 협력에 의존하는 점
  • 팀 구성원들의 단기적 본능과 프로젝트의 장기적 이해관계 둘 다에 함께 적용될 수 있는 실천방법들에 의존하는 점

철학

Sue Bender, "Plain and Simple: A Woman's Journey to the Amish". Harper-Collins, 1989; ISBN 0062501860

단순함과 명쾌함의 가치를 고찰한다.

Leonard Coren, "Wabi-Sabi1: For Artists, Designers, Poets, and Philosophers". Stone Bridge Press, 1994; ISBN 1880656124

와비사비는 소박하고 실용적인 미의식이다.

Richard Coyne, "Designing Information Technology in the Postmodern Age: From Method to Metaphor" MIT Press, 1995; ISBN 0262032287

메타포의 중요성에 대한 탁월한 논의를 포함하여, 모더니스트와 포스트 모더니스트의 사고 차이를 논한다.

Philip B. Crosby, "Quality Is Free: The Art of Making Quality Certain", Mentor Books, 1992; ISBN 0451625854

시간, 범위, 비용, 품질 등 네 가지 변수의 제로섬 모델에서 벗어난다. 품질을 낮춘다고 해서 소프트웨어를 더 빨리 내놓을 수 있는게 아니다. 그 대신, 품질을 향상하여 소프트웨어를 더 빨리 내놓을 수 있다.

George Lakoff and Mark Johnson, "Philosophy in the Flesh: The Embodied Mind and Its Challenge to Western Thought", Basic Books, 1998; ISBN 0465056733

메타포와 사고에 대한 훌륭한 논의가 더 있다. 또한, 메타포들이 서로 어떻게 섞이는지 설명한다. 토목공학, 수학 등등에서 끌어온 오래된 소프트웨어 메타포는 유례없는 소프트웨어 공학 메타포로 서서히 바뀌어 가고 있다.

Bill Mollison and Rena Mia Slay, "Introduction to Permaculture", Ten Speed Press, 1997; ISBN 0908228082

서구 세계에서 고강도 사용이라는 것은 일반적으로 착취, 고갈과 연결되어 왔다. 퍼머컬처(permaculture)는 사려 깊은 농사 규범인데, 이것의 목표는 간단한 실행방법들의 상승효과를 통해 땅을 지속 가능하면서도 고강도로 이용하는 것이다. 여기에는 XP 와 유사점이 있다. 이를테면 대부분의 성장은 요소들의 상호작요에서 일어난다는 것. 퍼머컬처는 사이심기의 나선 이랑과, 가장자리가 매우 불규칙적인 연못들로 상호작용을 극대화한다. XP 는 현장 고객과 짝 프로그래밍으로 상호작용을 극대화 한다.

Knowledge Sharing in XP

실천방법

함께 앉기

개발 작업은 팀 전체(whole team)가 들어가기 충분할 정도로 크고 열린 공간에서 하라.

전체 팀

프로젝트가 성공하기 위해 필요한 기술과 시야를 지닌 사람들을 전부 팀에 포함시켜라.

  • 우리는 소속되어 있다.
  • 우리는 이 안에 함께 있다.
  • 우리는 서로의 작업, 성장, 배움을 돕는다.

정보를 제공하는 작업 공간

작업 공간을 작업에 대한 것들로 채워라. 프로젝트에 관심이 있는 관찰자라면 누구든지 팀이 사용하는 공간에 들어와서 15초 안에 프로젝트가 어떻게 진행되는지 대략 감을 잡을 수 있어야 한다. 그리고 더 자세히 관찰할 경우, 지금 있는 문제와 앞으로 생길지도 모르는 문제에 대해서 더 많은 정보를 얻을 수도 있어야 한다.

활기찬 작업

여러분이 생산적으로 일할 수 있는 정도의 시간만, 그리고 일의 활력을 유지할 수 있는 정도의 시간만 일해라.

짝 프로그래밍

제품으로 출시할 모든 프로그램을 두 사람이 컴퓨터 한대에 앉아 작성해라.

짝 프로그래머들은,

  • 서로의 일에 집중하도록 해준다.
  • 시스템을 더 좋게 다듬기 위해 무엇을 할 수 있을지 브레인스토밍한다.
  • 떠오른 생각을 명료하게 다듬어 준다.
  • 한 사람이 막힐 때 주도권을 다른 사람에게 넘김으로써, 짜증을 덜 나게 해준다.
  • 팀에서 지키기로 한 실천방법을 서로 책임지고 지키도록 한다.

스토리

고객이 볼 수 있는 기능을 단위로 해서 계획을 짜라.

사용자 스토리에 대해 생각하는 편리한 방법은 3C’s; card, conversation, and confirmation 이다. XP 의 초기에는 이야기가 3×5 또는 4×6의 실제 메모 카드에 기록되었다. 카드를 테이블에 놓을 수 있고, 정렬 및 우선 순위를 지정할 수 있으며, 회의에서 전달하고 논의할 수도 있다. 이야기에 대한 구체적인 세부 사항을 팀에 상기시키기 위해 토론하는 동안 메모가 카드에 기록된다.

일주일별 주기

한 번에 일주일 분량의 일을 계획하라.

분기별 주기

한 번에 한 분기 분량의 일을 계획하라. 분기마다 한 번씩은 팀, 프로젝트, 프로젝트의 진행 정도, 더 높은 목표와 지금 프로젝트의 방향 일치 여부 등을 놓고 숙고해 보도록 한다. 한 분기 계획에서는 다음과 같은 일을 한다.

  • 병목, 특히 팀의 힘이 미치지 않는 외부에서 생기는 병목을 찾아본다.
  • 수선(repair) 작업을 시작한다.
  • 이번 분기의 주제(theme)를 계획한다.
  • 그 주제들을 다룰 한 분기 분량의 스토리들을 고른다.
  • 프로젝트가 조직에서 차지하는 위치라는 큰 그림에 초점을 맞춘다.

여유

어떤 계획이든, 일정에 뒤쳐질 경우 포기할 수 있는 비교적 덜 중요한 과업들을 포함시켜라.

10분 빌드

10분 만에 자동으로 전체 시스템을 빌드하고 모든 테스트를 돌려라.

지속적 통합

변경한 것은 두세 시간 만에 통합하고 테스트해라. 팀 프로그래밍은 분할 정복(divide and conquer) 성질의 문제가 아니다.

테스트 우선 프로그래밍

코드를 한 줄이라도 변경하기 전에, 일단 실패하는 자동화된 테스트를 먼저 작성하라. TDD 는 여러 문제를 동시에 해결해 준다.

  • 슬금슬금 늘어나는 범위
    • 프로그래밍할 때는 삼천포로 빠져서 '혹시 모르니까' 코드들을 작성하기 쉽다.
  • 결합도와 응집성
    • 테스트가 작성하기 쉽지 않다면, 그것은 설계에 문제가 있다는 신호다. 결합도가 낮고 응집성이 높은 코드는 테스트하기 쉽다.
  • 신뢰
    • 작동하지 않는 코드를 작성한 사람은 신뢰하기 어렵다.
  • 리듬
    • 코딩하다가 몇 시간씩 무엇을 해야 할지 길을 잃고 헤매는 일이 잘 일어난다. TDD 를 하면 다음에 무슨 일을 해야할지가 명확해진다.

점진적 설계

시스템의 설계에 매일 투자하라. 시스템의 설계가 바로 그날 그 시스템이 필요로 하는 것에 훌륭하게 들어맞게 되도록 애써라.

References

  • Extreme Programming / Kent Beck / 인사이트
  • Extreme Programming Installed / Ron Jeffries, Ann Anderson, Chet Handrickson 공저 / 인사이트

주석

  1. 와비사비는 일본의 미의식을 가리키는 말로, 청정하고 한적함을 중시한다.