2010-01-26 35 views
13

'dan kaynaklanan "daha az iyi tasarlanmış" kodla nasıl başa çıkıyorsunuz Scrum kullanarak çevik bir proje üzerinde çalışıyorum.Çevik geliştirmede Sprint-odaklanmış zihniyet

Sprintler geldi ve gitti ve başarıyla kilometre taşları gerçekleştirdik. Sistem mevcut müşteri gereksinimlerini karşılamak için yeterince iyi çalışır. Bununla birlikte, gelişimin büyük bir kısmı geleceğe çok az göz attığından (bunun yerine odakta eldeki sprint) yapıldığı için, ciddi bir yeniden yapılandırmaya ihtiyaç duyan bir sistemle birlikte kaldık.

nasıl iyi bu başa? Sprint (ler) refactoring için ayrılmış?

cevap

25

Evet

, bu arada bir bazen kötü bir şey değildir. Fakat eğer Scrum'ı kullanarak çevik iseniz, muhtemelen Test-Tahrikli Gelişimi (TDD) takip etmeye çalışıyorsunuz ve sadece kırmızı-yeşil değil, dizinin kırmızı-yeşil- refactor olduğunu hatırlamanız önemlidir. Kötü kalite kodu, çevik geliştirmenin çıktısı değildir, ancak zayıf çevik geliştirmeye sahiptir.
+0

1 Daha Elimde olsa - bu explicitely * iyileştirmek için tasarlanmış * olduğunda çevik TDD ile çevik, kötü architected kodun bir temsilcisi aldığında beni üzer sürekli iyileştirme yoluyla kod mimarisi. –

+2

Katılmıyorum, TDD çoğu zaman iyi bir şekilde tasarımlanmış sistemleri eşleştirmiyor. Ayrıca, TDD “uygun olduğunda” bir yaklaşım olarak kullanılmalıdır. Kırmızı-yeşil-refrakter ile aynı fikirdeyim, ben bir sürü insanın buna asıldığını ve bunun bir sonucu olarak gelişimin önemli ölçüde uzandığına inanıyorum. TDD, bir uygulamanın mikro bölümlerine odaklanmak için harikadır. Açıkça, daha iyi tasarlanmış bir iş akışına doğru genişleyecek ve büyüyecektir, ancak bu her zaman iyi bir makro tasarımla sonuçlanmaz. Sprint seviye refraktörleri bunun için kritik öneme sahiptir. – Chance

+2

@Chance: (1) ** Kötü uygulanan veya yanlış uygulanmış herhangi bir ** metodoloji, kötü mimariye ve yazılı bir sisteme yol açacaktır. (2) TDD, genellikle çevik bir süreç içinde uygulanan bir geliştirme metodolojisidir ve eğer okudumsa benim yorumum, özellikle de TDD değil, ** çevik gelişim ** hakkında bilgi verdi. Mimari olanlar gibi üst düzey sorunları çözmek için TDD'yi kullanmaya çalışırsanız, başarısız olursunuz. TDD ** hiç ** iyi mimari sistemlere denk gelmiyor, tıpkı bir sürüş testi omleti pişirebilme becerisini hiç ölçmediği gibi! Fakat iyi yapılmış TDD, ** durumu daha da kötüleştirmiyor. –

3

Çalıştığım yerde, hatalara ve technical debt'a ayrılmış sprintlerimiz olacak. Bir şeyleri geliştirmek ve bir dereceye kadar sürekli iyileştirme ruhuna sahip olmak için iyi çalışır.

Ayrıca burada düşünmek için bir şey, müşterinin istediği ancak istemediği geliştirmelerin olup olmadığıdır. Müşteri mevcut sistemle gerçekten mutlu görünüyor mu, yoksa şikayet etmek istemediği kadar iyi çalışıyor mu?

7

Refactoring için tam bir sprint ayırmak zorunda değilsiniz, aynı zamanda görev seviyesinde de çalışabilir. Kıllı bir kod parçasıyla çalışmayı gerektiren bir hikayeniz olduğunda, o hikayeyle ilgili bir şey elde etmek için bir ön koşul olarak, bu öyküde bir yeniden düzenleme görevi ekleyin. Böylelikle, özelliklerle ilerlemektesiniz, aynı zamanda aşamalı olarak yapılan bazı refactoring'i de elde edersiniz.

5

Ekibim için tipik olarak üç ila dört ayda bir yaklaşık bir kez refactoring sprint başlarım. 2 haftalık sprintler yaptığımız düşünüldüğünde, bu her yedi sprintte bir refraktördür.

Refactoring sprintini diğer sprintler gibi çalıştırıyorum - kesinlikle 2 hafta süre sınırı. Bazen sadece 1 hafta refactoring sprintler çalıştırıyoruz (acil bir şey olduğunda).

üstlenmeden sprints ilgili bir not: çok iddialı olmayın:

  1. o üstlenmeden sonsuz bir döngüdür Realize: Hep şeyler yapmak için daha iyi bir yol bulacaksınız.
  2. Yeniden gözden geçirilmesi gerekenlerin yalnızca% 10'unu yeniden düzenlerseniz Tamam.
  3. Refactoring'i diğer öyküler gibi ele alınız; böylece, neyin yeniden düzenleneceğini ve kodunuzda nerede yer aldığını en iyi şekilde yeniden belgelendirmeye ihtiyaç duyduğunuzu tanımlamanız gerekir. Tek fark, hikayeleri yeniden düzenlemek için geliştiricilerin öncelikleri belirlemesine izin vermem. Kısmi bir refactor, kodunuzu hiç refactor'dan daha iyi durumda bırakmaya devam edecektir. Artı, daha fazla refactoring yapmak için daha kolay.
  4. Refactoring, öyküler üzerinde çalışırken refactoring sprintlerinin dışında bile olur, ancak sadece refactoring tamamlanan öykülere müdahale etmeyen düşük asılı bir meyvedir.

Bu ben şahsen üstlenmeden için bir rehber olarak kullanmak şeydir. Bu sadece yeniden yapılandırmayı yönetilemez yapmakla kalmaz, aynı zamanda aşırıya kaçtığınız zaman için de iyi bir gösterge olarak hizmet eder.

8

'done' tanımınız var mı?

Eğer kodlamayı bitirip teslim etmeye hazır olan

, sen

Bu tanım başka şeyler toplantı içermelidir arasında 'done' senin ekipleri tanımını karşılamıştır gerektiğini sizin kabul kriterleri/kod incelemesi/test yorumu/ve kabul edilen kodlama standartlarını karşılar.

birkaç sprint kodunuzu tabanı ciddi üstlenmeden ihtiyacı olduğunu sonra gözden bitti ihtiyaçlarının sizin tanımını önermek istiyorsanız

. İşte

tanımlama konusunda Scrum Alliance gelen bir makale senin 'definition of done'