/ EXITEM, 정처기

익스트림 프로그래밍

익스트림 프로그래밍 Extreme Programming, XP

애자일 소프트웨어 개발 방법론 중 하나로, 소규모 개발 팀이 빠르게 변화하는 요구사항에 대응하기 위해 고안된 방법론입니다.

개발자에게 장점

  • 효과적으로 협력
  • 빠르게 소프트웨어를 개발

목표

고품질의 소프트웨어를 지속적으로 제공

핵심가치

의사소통

팀 내외의 모든 구성원들이 활발하게 의사소통하고, 지식과 정보를 공유합니다.
이를 위해 팀원들은 자주 모이고, 대화하며, 직접적인 의사소통 수단을 선호합니다.

단순성

최대한 간단한 방식으로 소프트웨어을 개발합니다.
불필요한 기능이나 복잡성을 줄이고, 간결하고 이해하기 쉬운 코드를 작성합니다.

피드백

지속적으로 피드백을 받고, 이를 기반으로 개선합니다.
고객, 사용자, 팀원 등과의 소통을 통해 요구사항을 이행하고, 개발한 소프트웨어에 대한 피드백을 수렴합니다.

용기

적극적으로 도전하고 실패를 인정하며, 개선을 위해 노력합니다.
개발자들은 더 나은 방법을 시도하고, 기존의 관행에 논리적으로 의문을 제기합니다.

실천 방법

짧은 반복주기

짧은 개발 주기를 가지고 작업을 진행합니다.
주로 1-2주 정도의 시간을 갖고, 작은 기능 단위로 개발을 완료하고 배포합니다.

계획조정

주기적으로 계획을 조정하고 우선순위를 결정합니다.
변경사항에 유연하게 대응하기 위해, 요구사항을 작은 단위로 쪼개고, 짧은 주기마다 우선순위를 조정합니다.

테스트주도개발(Test-Driven Development, TOD)

테스트 주도 개발은 XP의 핵심적인 실험 방법 중 하나입니다.
TOD는 개발자가 먼저 테스트 코드를 작성하고, 그에 맞춰 소프트웨어를 개발하는 방법입니다.
아래(실패하는 테스트 작성, 테스트 통과를 위한 최소한의 코드 작성, 코드 리팩토링) 사이클을 반복하면서 점진적으로 기능을 구현하고, 테스트 커버리지를 높이며, 코드의 품질을 유지하고 개선할 수 있습니다.

실패하는 테스트 작성

개발자는 먼저 새로운 기능 또는 변경사항에 대한 테스트를 작성합니다.
이 테스트는 현재 작업하려는 코드에 대해 예상한 동작을 검증하는 목적을 가지며, 당연히 실패해야 합니다.

테스트 통과를 위한 최소한의 코드 작성

테스트가 실패했으므로, 개발자는 최소하의 코드를 작성하여 테스트를 통과시키려고 합니다.
이 단계에서는 코드가 간단하고 테스트를 통과하는 것에만 초점을 둡니다.

코드 리팩토링

작성한 코드를 리팩토딩하여 중복 코드를 제거하고, 설계를 개선하며, 가독성을 높이는 등의 작업을 수행합니다.
리팩토링은 테스트를 통과하는 상태에서 수행되어야 합니다.

공동 소유권

XP에서는 개발 팀 내의 구성원들이 코드와 기능에 대한 공동 소유권을 가집니다.
개발자들은 서로의 코드를 이해하고 유지보수할 수 있으며, 효과적인 협업을 위해 지식을 공유하고 도움을 주고받을 수 있습니다.

지속적인 통합

팀 내의 개발자들이 작성한 코드를 지속적으로 통합하는 것을 의미합니다.
통합 단계에서는 코드의 충돌을 해결하고, 빌드 및 자동화된 테스트를 실행하여 오류를 신속하게 감지하고 해결합니다.
이를 통해 팀 전체의 코드 품질을 유지하고 소프트웨어를 안정적으로 구축합니다.

계획 기술

XP에서는 고객과 개발자가 함께 계획을 수립하는 계획 기술을 사용합니다.
고객은 요구사항을 우선순위에 따라 명시하고, 개발자는 작업의 복잡성과 필요한 시간 등을 추정합니다.
이러한 계획 과정을 통해 팀은 실질적인 목표와 일정을 설정하고 조정할 수 있습니다.

쌍끌이 프로그래밍(Pair Programming)

두 명의 개발자가 하나의 컴퓨터에서 함께 작업하는 방식입니다.
한 명은 코드를 작성하고, 다른 한 명은 코드를 검토하며 지속적인 피드백을 제공합니다.
이를 통해 코드 품질과 지식 공유를 강화하고 오류를 빠르게 발견할 수 있습니다.

기능 단위 릴리즈(Small Realeases)

개발된 기능을 가능한 빨리 릴리즈하는 것을 지향합니다.
작은 기능 단위로 릴리즈를 수행하여 고객에게는 실질적인 가치를 제공하고 피드백을 수렴합니다.
이를 통해 고객의 요구에 신속하게 대응하고 소프트웨어를 점진적으로 개선할 수 있습니다.