Sprintler arasında çalışan bir yapıya sahip olmaktan başka çevik uygulamaların avantajları var mı?


9

Son zamanlarda yazılım geliştirmedeki çevik uygulamalarla ilgilenmeye başladım ve o zamandan bu yana bu uygulamaların genel maliyetlerin azalmasına izin verdiğine işaret eden birçok makale gördüm.

Bunun arkasındaki mantık genellikle şu şekilde olur: gereksinimleriniz değişirse, bu değişikliği bir sonraki sprint birikimine yansıtabilirsiniz ve bu, maliyetin azalmasına neden olacaktır, çünkü yeni özelliği tasarlamak ve uygulamak zaman açısından birbirine yakındır, bu nedenle ünlü kurala göre maliyet azalır, daha sonra gereksinimlerinizde bir değişiklik yapmanız gerektiğinde, bu gereksinimi karşılamak daha pahalı olacaktır.

Ancak orta ila büyük yazılım projeleri karmaşıktır. Gereksinimlerdeki ani bir değişiklik, bu gereksinimi karşılamak için sisteminizin diğer bölümlerine dokunmanız gerekmeyeceği anlamına gelmez. Çoğu durumda mimarinin çok önemli ölçüde değiştirilmesi gerekecektir, bu da eski mimariye dayanan tüm özellikleri yeniden uygulamanız gerektiği anlamına gelir. Dolayısıyla, azaltılmış maliyetlerin bütün noktası burada ortadan kalkar. Tabii ki, yeni bir gereksinim sistemin yeni bir bağımsız parçasını gerektiriyorsa, bu bir sorun değil, eski mimari büyüyor, yeniden düşünülmesi ve yeniden uygulanması gerekmiyor.

Ve tam tersi. Şelale kullanıyorsanız ve birdenbire yeni bir gereksinimin ortaya çıkması gerektiğini fark ederseniz, tasarımınızı değiştirebilir ve değiştirebilirsiniz. Mevcut mimarinin değiştirilmesini gerektiriyorsa, yeniden tasarlarsınız. Gerçekten onunla uğraşmazsa, ancak sistemin yeni bir parçasını tanıtırsa, o zaman gidip tüm işi yaparsınız, burada sorun yok.

Bununla birlikte, bana çevik gelişimin sahip olduğu tek avantajı, sprintler arasında eksiksiz yapıların çalışması gibi görünüyor ve birçok insan ve öneri için bu kritik değil. Buna ek olarak, çeviklik genel olarak kötü yazılım mimarisi ile sonuçlanıyor gibi görünüyor, çünkü özellikler birbiri üzerine tokatlanır, çevik ekipler bir özelliğin nasıl çalıştığına değil, yalnızca bir özelliğin çalışmasına önem verir. Bu, sistemler zamanla karmaşık bir şekilde büyüdüğünde, çevik geliştirme uygulamaları aslında genel ürün mimarisinde kaosu arttırır, bu nedenle sonunda daha yüksek maliyetlerle sonuçlanır, çünkü şelale, mimarinizi mükemmelleştirmenize izin verir. bir şey bırakmadan önce.

Birisi beni burada yanlış yaptığım yere işaret edebilir mi, çünkü belli ki birçok insan üretim ortamlarında çevik kullanıyor, bu yüzden bir yerlerde yanılmalıyım.


Haklısın. 'Şelale' teriminin 1 evrensel tanımı olmadığını (BT'deki diğer birçok terim gibi) belirtmek isterim. Çoğu kişi, 2000 sayfalık gereksinimlerin tamamı yazılmadıkça ve imzalanmadığı sürece kodlamaya izin verilmediğini düşünür. Bu hiç de böyle olmak zorunda değil.
NoChance

Evet, "şelale" derken (en temelde) fonksiyonel özelliklerin -> tasarım -> kodların dönüm noktaları arasındaki doğrusal bir süreci, sprintleri değil. Ve elbette, 2000 sayfalık gereklilikler ve teknik özellikler bir zorunluluk değildir, sınıfların temel sorumlulukları ve birbirleriyle olan ilişkileri genellikle üst düzey bir tasarım olarak yeterlidir.
tux91

3
@EmmadKareem: Aslında, Şelaleye uygun olarak, durum tam olarak bu. Tasarımın her detayı bitene kadar kodlamaya başlamıyorsunuz. Neyse ki, gerçek Şelale yazılım geliştirmede nadiren uygulanır - çoğunlukla çalışmadığı için.
tdammers

1
@tdammers, yorumunuz için teşekkürler. Bu birkaç kez oldu. Şelale yönteminin sahibi yoktur ve farklı şekilde uygulanabilir ve yorumlanabilir. Sana kadar kodlama demeyen bir kural değil ... yoksa başka bir şey ... Bunun nedeni bir metodoloji olmaması. İyi bir metodolojiye sarıldığında, kullanıcıların bir sistemden neye ihtiyaç duyduklarının özünü bildikleri projelerde özellikle mantıklı olduğunu düşünüyorum.
NoChance

@Emmad Kareem: Sana katılıyorum. Çevik yöntemlerin, gereksinimlerin net olmadığı projeler için daha uygun olduğunu ve son gereksinimleri elde etmek için çok fazla prototip ve kullanıcı geri bildirimi gerektiğini düşünüyorum. Öte yandan, çekirdek gereksinimlerin en baştan net olduğu durumlar vardır. Bu durumlarda, çevik bir yönteme kıyasla şelaleye (yol boyunca düzeltmeler için bir miktar yer) benzer bir geliştirme yöntemi benimseyeceğim. Bence bu gerçekten üzerinde çalıştığınız proje türüne bağlı.
Giorgio

Yanıtlar:


7

Öncelikle, "şelale" modeli her zaman bir yazılım geliştirme projesinin nasıl yürütülmeyeceğini açıklayan saman bir adamdı. Baksana.

Her neyse, çoğu "şelale" SDLC projesi, insanlar şartnamelere yazılan varsayımların artık geçerli olmadığını keşfettiklerinde (ve bu her zaman büyük karmaşık projelerde gerçekleşir) bir "Değişim Yönetimi" sürecini gerektirir. Ne yazık ki, değişiklik yönetimi süreci bir istisna işleme önlemi olarak inşa edilmiştir ve aptalca pahalıdır, yani proje geç ya da düşük kalitede sonuçlanacaktır.

Çevik metodolojilerin arkasındaki fikir, değişikliğin bir veridir - gerçekleşecektir. Bu nedenle, özel durum işleme yerine "değişiklik yönetimi" standart işlemini yapmanız gerekir. Bu kolay değil, ancak millet, çok iyi tasarım uygulamaları kullanırsanız, bunu yapabileceğinizi keşfetti.

Önden yüklenen tasarımla ilgili bir başka önemli sorun da (çoğunlukla) ihtiyaç toplama ve tasarım, geliştirme ve test sürelerinin acı çekmesi için çok fazla zaman harcanmasıdır. Ayrıca, test son aşama ise ve ciddi bir sorun keşfedilirse, zaman çerçevenizde düzeltilmesi pek olası değildir.

Çevik bir yaklaşımın belki de en iyi özelliklerinden biri, çözümü geliştiren ekip ile buna ihtiyaç duyan müşteri arasında sürekli etkileşim (yani gerçek iletişim) gerektirmesidir. Öncelikler yapılır, böylece en yüksek öncelikli öğeler önce yapılır (ve zaman tükenirse, kesilen düşük öncelikli öğelerdir). Geri bildirim hızlı bir şekilde gelir.

Dramatik değişiklikler sorununa geri dönersek, gerçekten değişiklikleri hafifleten yöntemler kullanmanız gerekir. İyi SOLID OO prensipleri, yazılımınızın regresyon testini yapabilmeniz için katı otomatik test paketleri oluşturmak gibi, bunun iyi bir bölümünü oynayabilir. Metodolojinizden bağımsız olarak bunları yapmalısınız, ancak çevik olmaya çalışıyorsanız gerçekten gerekli hale gelirler.


Çok teşekkürler. Tasarımın çevik olarak nasıl çalıştığı ve neden bu kadar da kötü olmadığı konusunu okumak isteyen herkes için: http://jamesshore.com/Agile-Book/incremental_design.html
tux91

8

Birkaç avantajı var. Birincisi, müşterilerin spesifik belgeleri okumamasıdır. Hiç. Şelale, herkesin başlangıçta bir spesifikasyonu güzel bir şekilde kabul edeceğini ve daha sonra yazılım bir yıl sonra spesifikasyonla eşleşen müşteriye teslim edildiğinde mutlu olacaklarını varsayar. Uygulamada, müşteriler yazılımın kendisi ile aktif olarak oynadıklarında gerçekten ihtiyaç duydukları, gerçekten ihtiyaç duymadıkları ve gerçekten farklı bir şey olmaları gereken şeyleri keşfederler. Agile müşterilerin elinde çalışan bir prototip alır, bu nedenle bu bağlantı kesilmeleri hemen yakalanır. Çevik sadece değişen gereksinimlere yanıt vermekle ilgili değildir. Aynı zamanda, bu değişen gereksinimlerin, değişim maliyeti yüksek olduğunda değil, değişim maliyeti düşük olduğunda, erken gerçekleşmesi ile ilgilidir.

İkinci bir avantaj, Agile'ın sık sık görünür çıktılara sahip olması nedeniyle, projelerin raylardan çıkma olasılığının düşük olmasıdır. Büyük bir Şelale projesi ile farkına bile varmadan geri dönmek çok kolay. Şelale, projenin sonunda çok aylık ölüm yürüyüşleri üretiyor. Agile ile müşterilere her iki haftada bir teslim ettiğiniz için herkes projenin tam olarak nerede olduğunu bilir ve fişlerin hızlı bir şekilde yakalandığını (ve ayarlandığını). Deneyimlerime göre, Şelale sonunda haftalar ya da 100 saat haftalar aylar üretir. Çevik, sprint sonunda 12 saat birkaç gün koymak zorunda kalacağınız anlamına gelir.

Üçüncü bir avantaj, Agile projelerinin daha motive edici olma eğilimindedir. İnsanların bir yıl sürecek bir projede her türlü sürüş hissine sahip olması çok zordur. Son tarih çok uzak görünüyor ve bu dolaysızlık, insanların erteleme, aşırı cilalama eğilimi olduğu ve aksi halde çok verimli çalışmadığı anlamına geliyor. Bu özellikle doğrudur, çünkü ilk aylar insanların yapmak istemedikleri şeylere (spesifik belgeler gibi) harcanmaktadır. Agile çok yakın gelecekte her zaman çok somut ve somut bir son teslim tarihine sahip olduğundan, insanlar daha fazla motive olma eğilimindedir. Önümüzdeki hafta yapılacak sabit görevler için somut bir son tarihle ertelemek çok daha zor.


İlk argüman, tam çevik izlenim altında olduğum şey budur. Sürekli değişen gereksinimlerle başa çıkmak. Ayrıca, gereksinimleri erken değiştirmeyle ilgili olarak, bu hala eldeki mimari ile uğraşmak için büyük bir olasılık var ve bu da mevcut kodların çoğunun yeniden uygulanmasına yol açıyor. İkinci argüman, şelale projelerinin neden ölüm yürüyüşlerine neden olduğunu açıklayabilir misiniz? Özgün teknik özelliklerin birleştiği küçük bir disiplin burada harikalar yaratabilir. Üçüncü argüman, aşağıdan yukarıya bir şelale projesi oluşturma ve arada bir inşa edebilme problemi nedir?
tux91

2
Şelale projeleriyle ilgili deneyimlerim, planlanan sürenin ilk% 90'ında her zaman zamanında olmaları, bu noktada aniden aylarca geride kalmaları. Agile'nin her sprint'te demolarda ısrar etme modeli bunu daha az olası kılar. İnsanlar bir buçuk hafta içinde hesap verebileceklerini bildiğinde, dokuz ay içinde hesap verilecekleri zaman genellikle daha iyi motive olurlar. Sadece insan psikolojisi.
Robotu Gort,

1
Deneyimimi biraz farklı olmasına rağmen, el kodlamasında iyi bir tasarıma sahip olan yol boyunca pek çok sıkıntı yok ve tahminler de oldukça iyi görünüyordu. Yine de şelale kullanılıyorsa ortaya çıkan mimarinin daha sağlam olacağını düşünüyorum.
tux91

2
Çoğunlukla güvenlik tehlikesi taşıyan olanlar, örneğin demiryolu sinyalizasyon, aviyonik - - müşteriler birkaç alanları vardır yapmak çok dikkatli özellikleri okumak. Oldukça nadirdirler ve yine de çok farklı geliştirme yöntemlerine yol açma eğilimindedirler.
Donal Üyeleri

4

Agile karşıtı rakiplerin temel bir yanılgısı olan sorudan alıntıya yanıt olarak

“... oysa şelale bir şey bırakmadan önce mimarinizi mükemmelleştirmenize izin veriyor .” bir yanılgıdır, senin için düzeltmeme izin ver; “... oysa şelale mimarinizi mükemmelleştirmenize izin verir , böylece hiçbir şey bırakmazsınız.

Şelalenin daha yüksek kalitede mimari nasıl sağladığını ima etmek temelde yanlıştır ve ampirik tarihsel kanıtlarla tamamen çürütülmüştür.

Facebook, 500 milyon kullanıcısıyla sert ve hızlı bir gereksinim olarak bir şelale tarzında tasarlanmış ve mükemmel bir şekilde desteklenecek bir mimariye kadar yayınlanmamışsa , bugün kimse bunu duymazdı.

YouTube, Twitter ve sayısız şirketle aynı.

Müşterinin dokunabileceği ve çalışmaya yanıt verebileceği bir şey aldılar ve mümkün olduğunca çabuk serbest bıraktılar. Geri bildirim aldılar, iyileştirdiler ve tekrar yayınladılar; yinelerler. Bu üç örnekte, yalnızca müşterilerin kabul ettiği ve istediği ve müşterilerin çok az değer bulduğu veya hiç bulmadığı şeyler için mümkün olduğunca az zaman harcadığı özelliklerle yanıt verirler.

Önemli bir yazılım geliştirme deneyimine sahip olan herkes, mükemmel bir mimari diye bir şey olmadığını kabul edecektir . Entropi ve büyük çamur topundan diğer alternatiflerden daha fazla başlayan bir tanesi. Agile bunu kabul eder ve dikkate alır. Sürecin içine inşa etmek, bu teknik borç, hızlı yeniden önceliklendirme ve yeniden düzenleme.


3
"Hiçbir zaman" kelimesini kullanarak, şelale kullanılarak yapılan herhangi bir yazılım ürünü olmadığını mı söylüyorsunuz? Ayrıca, başarıyla uyguladığınız belirli bir kilometre taşı için bir dizi gereksiniminiz varsa neden hiçbir şeyi "asla" bırakmayın?
tux91

1
@ tux91 benim için ne demek istediğimi anlatacaksın; tasarımlar kağıda koyulduktan hemen sonra ihtiyaçların değişmesi ve tek bir kod satırı yazılmadan önce kullanılmaması nedeniyle hiçbir şey mükemmel olmayacaktır . Böylece alıntıladığım ifade yanlıştır, asla bir mimariyi mükemmelleştiremezsiniz ve böylece hiçbir şey bırakmazsınız.

1
@ tux91 hala kavrayış için okudum, dedim ki, kaymakam mimarisi yoktur ve alıntıda olduğu kadar serbest bırakmazsanız, hiçbir şey serbest bırakılmaz. Ne iddia ettiğinizi söylemedim, nokta, bu kafanızda ve yorumunuzda. Söylediklerim şelalenin bir şekilde daha kaliteli mimari sağladığı iddiası bir yanlışlık ve temelde kusurlu. Ve NASA ve şelale ve neyin olmadığı hakkındaki bu argümanlar; programcılarla alakasız olmasının yanı sıra , bu konuda zeminde 3 astronot öldürdü, parlak bir başarı hikayesi değil.

1
@ tux91 "asla" kullanımı wrt, ben burada Jarrod ile duyuyorum: Soru diyor "şelale yapmanıza olanak verir mükemmel ..." - kelime "asla" (bu gerçekçi olmayan "mükemmel" bağlam içinde) tamamen uygun olan hangi o sayaçlar. Oy kullanmamanın tek nedeni, yapıcı olmayan soruların cevaplarına oy vermekten kaçınmaya çalışmaktır
gnat

1
@gnat evet sanırım mükemmel kelimesini kullandığımda düşünmedim , bu aslında demek istediğim değil
tux91

3

Scrum tek başına herhangi bir teknik uygulama reçete etmez, çünkü genel bir çerçevedir.

Çevik yazılım geliştirme ekibi için teknik mükemmellik gerektirir. Bu , XP'nin aşağıdaki teknik uygulamalarından gelir (aşırı programlama). Örneğin, yeniden düzenleme, tdd, tüm ekip, çift programlama, artımlı tasarım, ci, işbirliği vb. Hakkında bilgi edinmelisiniz.

Bunu yapmak, değişimi hızlı ve güvenli bir şekilde ele almayı mümkün kılar, bu da ilk etapta çevik gelişimi kullanmanın birincil nedenidir.

Önemli olan bir çeviklik ölçümü, düzenli olarak (haftalık, iki haftada bir) müşterinize değerli, çalışan yazılımlar yayınlamayı başarabilmenizdir. Bunu yapabilir misin? O zaman kitabımda çeviksin.


Elimde olmayan bu, şelaleye dayalı bir projenin değiştirilmesinin daha zor olduğu anlamına geldiğinden, "değişimi hızlı ve güvenli bir şekilde ele almak mümkün". Neden? Bu sadece bir kod tabanı. Neyi değiştirmek istediğinizi belirtin, bunu tasarlayın ve mevcut mimariye, koda, sınamaya ve salıvermeye nasıl uyduğunu belirleyin. Sadece ona sürat deme, yerine kilometre taşı deyin. Çevik olmaktan daha uzun zaman alacak veya daha fazla zorluk çekecek gibi görünmüyor. Aradaki fark daha dikkatli planlama yapmanız, ancak XP işlerini bu kadar titizlikle yapmanıza gerek olmamasıdır.
tux91

@ tux91 Cevabımı güncelledim. Mimariye gelince, bunu okumanızı veya bunu 26:20'de "artımlı tasarım" dediğimiz şeyle izlemenizi tavsiye ederim .
Martin Wickman

2

Benim için çevikliğin ana yararı, projedeki riski azaltmaktır.

Yinelemeli olarak teslim ederek ve kullanıcı tabanınızdan çok sayıda geri bildirim alarak, gerçekten istedikleri bir şeyi teslim etme şansınızı artırırsınız ve bunu mümkün olan en erken zamanda pragmatik bir şekilde sunarak yaparsınız. Teorik olarak, bu daha iyi tahminler ve planlama ile yapılacaktır. Bu, iş açısından bakıldığında çok çekici - sadece serbest bırakılabilir yapıdan çok daha fazlası.

Bu sürekli değişimin sisteminizi tehlikeye attığını ve kaliteyi düşürdüğünü iddia edebilirsiniz, ancak iki şey söyleyebilirim. 1) Bu değişiklik her halükarda daha geleneksel yazılım dağıtım projelerinde gerçekleşir - sadece hesaba katılmaz ve daha sonra belirtildiği gibi, daha önce belirttiğiniz gibi, şeylerin değiştirilmesi daha zor ve daha pahalıdır. 2) Agile, bu değişiklikle başa çıkmada deneyimli motive kişileri ve TDD, eşleştirme ve kod incelemeleri gibi uygulamaları kullanma konusunda söyleyecek çok şey var. Zihniyette kalite ve sürekli iyileştirmeye doğru bu değişim olmadan, çevikliğin ima ettiği sık sık değişikliğin sorunlara neden olabileceğini kabul ediyorum.


Evet, şelalenin tek avantajı bu. Yine de, geliştirme aşamasındayken ürününüzü kimseye göstermek istemediğiniz zamanlar vardır, çünkü henüz hazır değildir, henüz satış noktalarına sahip değildir. Ya da sonunda neyi inşa etmek istediğiniz konusunda oldukça sağlam bir fikriniz varsa. Testler, çift programlama ve kod incelemeleri, iyi bir genel ürün mimarisiyle sonuçlanacağınızı garanti etmez, ancak yalnızca yeni özelliklerin düzgün çalışmasını garanti etmek için yapılır.
tux91

1

Birçok durumda mimarinin çok önemli ölçüde değiştirilmesi gerekecektir, bu da eski mimariye dayanan tüm özellikleri yeniden uygulamanız gerektiği anlamına gelir.

Gereksinim değişikliği nedeniyle mimarinizin önemli ölçüde değiştirilmesi gerekiyorsa, kötü mimariye veya kötü gereksinimlere sahipsiniz. İyi mimari, mümkün olduğunca çok sayıda kararı ertelemenizi ve sisteminizin bileşenlerini ayırmanızı sağlar. İyi (kullanıcı) gereksinimleri "farklı bir veritabanı kullan" gibi şeyler değildir.

İyi bir çalışma mimarisine sahip olduğumuz varsayımı altında çalışalım. Bu durumda, çevik geliştirme metodolojileri bu "yıkamayı" önden tasarım metodolojileri ile kaybeder. Sonuçta, çevik geliştirme metodolojilerinin temel bir özelliği, TDD gibi, kodda gevşek bağlantıyı teşvik eden ve projenin başlangıca yakın ya da çok olgun olsun yüksek hızda devam etmesini sağlayan uygulamalardır.


0

Birçok durumda mimarinin çok önemli ölçüde değiştirilmesi gerekecektir, bu da eski mimariye dayanan tüm özellikleri yeniden uygulamanız gerektiği anlamına gelir. Dolayısıyla, azaltılmış maliyetlerin bütün noktası burada ortadan kalkar.

Çevik bir süreci takiben, çok fazla yazılım geliştirilmeden önce bu gereksinimi yakalama şansı daha yüksektir (Ve değiştirilmesi gerekir.). Müşteriyle çalışmadan ve onlara bakmak için bir şey vermeden birkaç ay geçtiğinizde, bu önemli mimari problemleri ancak teslim etmeye hazır olduğunuzu "düşündükten" sonra yakalarsınız.

Bu değişiklikleri bile derleme değil büyük bir kod yığını daha test kapsamı olan bir çalışan uygulamada uygulamayı denemek istiyorum. Teknik desteğin başı olurken, aylarca süren geliştirme aşamasında olan bir uygulamanın CD'sini aldım ve yüklemeyecekti bile. Biz ilk hafta bu sorunu bulmuş olabilir, ama bunun yerine uzun bir gece olduğu için akşam sipariş zaman oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.