2010-01-26 1 views
13

저는 스크럼을 사용하여 민첩한 프로젝트를 수행하고 있습니다.민첩한 개발에서 스프린트 중심의 사고 방식에서 비롯된 "잘 설계되지 않은"코드를 어떻게 처리합니까?

스프린트가 이미 지나갔고 우리는 성공적으로 이정표를 성취했습니다. 이 시스템은 현재의 고객 요구 사항을 충족시킬만큼 충분히 잘 작동합니다.

그러나 우리는 리팩토링을 심각하게 필요로하는 시스템이 남아 있습니다. 개발의 상당 부분이 미래를 거의 고려하지 않고 수행되었습니다 (대신 초점은 스프린트에 집중).

어떻게 처리해야합니까? 리팩토링 전용 Sprint (s)?

답변

25

네, 때로는 그 중 하나가 때때로 나쁜 것이 아닙니다. 그러나 Scrum을 사용하여 민첩하게한다면 TDD (Test-Driven Development)를 따르려는 것 같습니다. 빨간색 - 녹색뿐만 아니라 시퀀스가 ​​빨간색 - 녹색 - 리팩터임을 기억하는 것이 중요합니다. 품질이 좋지 않은 코드는 애자일 개발의 결과가 아니지만, 이 좋지 않습니다. 애자일 개발.

+0

하나 더 내가 할 수있는 경우 - 그것은 명시 적으로 *을 개선하기 위해 설계 * 때 민첩 TDD와 민첩이 제대로 아키텍처 코드의 담당자를 얻을 때 나를 슬프게 지속적인 개선을 통한 코드 아키텍처. –

+2

TDD는 잘 설계된 시스템을 종종 동일시하지 않습니다. 또한 TDD는 "적절한 경우"접근 방식으로 사용해야합니다. 내가 초록색 굴절 망원경에 동의하는 동안, 나는 많은 사람들이 이것에 매달려서 결과적으로 개발이 크게 지연 될 것이라고 믿습니다. TDD는 앱의 미세 부분에 초점을 맞추기에 좋습니다. 분명히 더 잘 설계된 워크 플로우로 확장되고 성장할 것입니다.하지만 실제로는 항상 좋은 매크로 디자인으로 이어지지는 않습니다. 스프린트 레벨 굴절 기는이를 위해 매우 중요합니다. – Chance

+2

@ Chance : (1) ** 모든 ** 방법론이 잘못 적용되었거나 잘못 적용되면 아키텍처가 제대로 작성되지 않은 시스템이됩니다. (2) TDD는 전반적인 민첩 프로세스 내에서 적용되는 개발 방법론이며, 특히 TDD가 아닌 ** 민첩한 개발 **에 대한 내용을 읽으면 의견을 말하게됩니다. TDD를 사용하여 아키텍처와 같은 상위 수준의 문제를 해결하려고하면 실패합니다. TDD는 오로지 운전 테스트가 오믈렛을 요리하는 능력을 측정하지 못하는 것처럼 잘 설계된 시스템과 동일하지 않습니다 **! 그러나 잘 수행 된 TDD는 ** 상황을 악화시키지 않습니다 **. –

3

내가 일하는 곳에서는 버그 및 technical debt에 전념하는 스프린트가 제공됩니다. 그것은 일을 개선하고 어느 정도 지속적인 개선 정신을 갖는 데 효과적입니다.

고객이 원하지만 요청하지 않은 개선 사항이 있는지 여부도 여기에서 고려해야 할 사항입니다. 고객이 현재 시스템에 진정으로 만족 스럽습니까, 아니면 불만을 제기하고 싶지 않을만큼 효과가 있습니까?

7

전체적인 스프린트를 리펙토링 전용으로 할 필요는 없으며, 태스크 레벨에서도 작동 할 수 있습니다. 털이 많은 조각으로 작업해야하는 이야기가있을 때, 그 이야기에 리팩토링 작업을 포함 시켜서 그 부분으로 의미있는 일을하기위한 일종의 전제 조건으로 포함 시키십시오. 그런 식으로, 당신은 기능들로 진보 할뿐 아니라 점진적으로 수행되는 리팩토링을 얻습니다.

5

저는 보통 리팩토링 스프린트를 대략 3 ~ 4 개월마다 한 번씩 시작합니다. 우리가 2 주 스프린트를 실행한다고 가정하면, 그것은 대략 7 회의 스프린트마다 하나의 리팩토링 스프린트이다.

다른 스프린트와 마찬가지로 리팩토링 스프린트를 엄격하게 2 주간 제한 시간 동안 실행합니다. 때로는 1 주 리팩토링 스프린트 (급한 일이 발생했을 때)를 실행하기도합니다.

리팩토링 달리기 때주의 사항 : 너무 야심하지 않습니다

  1. 는 리팩토링 무한 사이클 실현 : 당신은 항상 일을 할 수있는 더 좋은 방법을 찾을 수 있습니다.
  2. 리펙토링해야하는 것의 10 % 만 리펙토링하면 정상입니다.
  3. 다른 스토리와 마찬가지로 리팩토링을 처리하여 리팩터링 대상을 우선으로하고 리팩토링이 가장 필요한 코드의 위치를 ​​알아야합니다. 유일한 차이점은 스토리를 리팩토링 할 때 개발자가 우선 순위를 설정하게했습니다.
  4. 부분 리팩터는 코드를 리펙터가없는 상태보다 더 나은 상태로 유지합니다. 또한 리팩터링을 쉽게하는 경향이 있습니다.
  5. 리팩토링은 스토리 작업시 리팩터링 스프린트 외부에서도 발생하지만 리팩토링이 스토리 완성을 방해하지 않는 낮은 매달린 과일 인 경우에만 발생합니다.

개인적으로 리팩토링 가이드로 사용합니다. 리팩토링을 관리 할 수있을뿐만 아니라 과도한 작업을 수행 할 때 유용한 지표 역할을합니다.

8

'완료'에 대한 정의가 있습니까?

당신이 코딩을 완료하고 체크인 할 준비가

, 당신은

이 정의는 다른 일들이 충족 포함해야한다 사이에 '완료'의 팀원 정의를 충족해야 당신의 합격 기준/코드 검토/테스트 리뷰 /과 합의 된 코딩 표준을 충족 시켰습니다.

몇 가지 스프린트 후에 코드 기반이 심각한 리팩토링을 필요로하는 경우 검토가 필요하다는 귀하의 정의를 제안하는 것이 좋습니다. 여기

는 정의에 스크럼 얼라이언스에서 기사의 당신의 'definition of done'