Tahmin ediliyor
Mitch Lacey tarafından. Sahip, çevik ve sağlam uyarlamalar ve geliştirmeler konusunda uzman bir danışmanlık firması olan Mitch Lacey & Associates, Inc'dir.
Ocak 2012
Mitch Lacey, yazılım proje tahmini konusundaki zorlukları anlatmakta ve proje tahmininde kullanılacak iki çevik yazılım tahmin tekniğine ilişkin ipuçları ve püf noktaları sağlamaktadır.
Uygulama alanı:
Uygulama Yaşam Döngüsü Yönetimi; Team Foundation Server
İçindekiler
Giriş
Tahmin Neden Zordur
Tahmin Teknikleri
Ölçü Birimi Olarak Hikaye Noktaları
Poker Planlaması.
Duvar Tahmini
Tahmin
Önceliklendirme
Sonuç
Yaratıcı ve öngörülemeyen işi tahmin etmek zordur. Bunu yapmak için bir yol seçmek eşit derecede külfetli olabilir. Bunu en iyi Fred Brooks dile getirir: "Hiçbir nicelik yöntemle yapılmamış, az veri tarafından desteklenen ve büyük oranda yöneticilerin içgüdüleriyle onaylanmış bir tahmine güçlü, makul ve işi riske atan bir savunma yapmak çok zordur"
Yazılım projelerimiz için önceden ve erken olarak tahminler de vermemiz istenir ve bu tahminlerin yaklaşık olduğunu yönetime tüm hatırlatma çabalarımıza rağmen umulandan çok fazla başlangıç tahminlerimiz taahhütlere dönüşür.
Bu makalede, size projeleri önceden tahmin etmenin neden zorlayıcı olduğunu, çevik yazılım tahmini tekniklerinin nasıl yardımcı olduğunu ve planlama pokeri ve hikaye noktaları kullanılarak ürün biriktirme listenizi nasıl tahmin edebileceğinizi göstereceğim.
Tahmin Neden Zordur
Çoğu projede önceden tahmin etmemiz istenir. Neden böyle bir sorun olduğunu anlamak için, Barry Boehm'in 1981'de bize sunduğu ve Steve McConnell'in 1997'de Software Project Survival Guide adlı kitabında yeniden sunduğu Belirsizlik Konisini incelememiz gerekir.
Koni, herhangi bir projenin başlangıcında en fazla belirsizlikle karşı karşıya olduğumuzu gösterir (aralıkta 4x ila 0,25x fark). Bu fark, bir yıl süreceğini varsaydığımız bir projenin aslında 3 - 48 ay sürebileceği anlamına gelir. Bir proje başlangıcı, projeyle ilgili en düşük net bilgiye sahip olduğumuz, ancak yine de çok kesin tahminler sunmamızın istendiği zamandır.
En kısa süre içerisinde belirsizlikten kesinliğe geçmeye çalışıyoruz. Bu, sistemle ve sistemin nasıl tasarlanması gerektiğiyle ilgili erken bilgi sahibi olmayı maksimuma çıkararak elde edilir. Biz bunu yapmak için, sistem boyunca tek bir yol, eksiksiz ve çalışan bir hikaye oluştururuz. Kesinliğe çok daha hızlı ve güvenli bir şekilde ulaşmamızı sağlaması için bu temizleme ve tasarım gereksinimlerini erken kullanıyoruz.
Tahmin Teknikleri
Sayım, uzman kararı (bireysel veya grup), ayrışım, analoji, proxy tahmini, poker planlaması ve duvar tahmini dahil olmak üzere çok sayıda geçerli tahmin tekniği vardır. Cocomo II gibi araçları da kullanabiliriz. Bu tekniklerin tamamı bir tahmin birimini — saatler, günler, haftalar, aylar, ideal günler, tişört boyutlandırma, noktalar — veya tamamını seçmemizi gerektirir. Birimi anlamıyorsanız, tahmini değer hiçbir şey ifade etmez. Bütün bunlar göz önünde bulundurulduğunda, tahmin konusunda neden çabaladığımız anlaşılıyor.
Çevik takımların ürün biriktirme listesini (öykü noktaları ve planlama pokeri) tahmin etmek için belli türde bir tahmin birimi ve tekniklerine doğru meyletmelerine rağmen, hangi yöntem gereksinimleri en iyi karşılıyorsa takımınız onu kullanmakta kendini özgür hissetmelidir. Deneyimlerime göre, planlama pokeri ya da duvar tahmini özelliklerini kullanarak hikaye noktalarından tahminler yapmak en iyi sonuçları verir. Aşağıdaki paragraflarda, bir ölçü birimi olarak hikaye noktalarını ve tercih ettiğim iki tahmin tekniğini öğreneceksiniz: planlama pokeri ve duvar tahmini.
Ölçü Birimi Olarak Hikaye Noktaları
Mike Cohn Öykü hikayenin ana noktaların en iyi şekilde özetliyor: "Hikayenin ana noktaları bir kullanıcı hikayesinin, özelliğinin veya çalışmasının tüm boyutunu ifade etmek için kullanılacak bir ölçü birimidir. "Öykü anafikirleri, gerek boyut gerek karmaşıklık yönünden, diğerleriyle karşılaştırıldığında ne kadar büyük bir öykü olduğunu bize gösteriyor. Mike ekiplerin göreli boyutlandırma kavramını anlamaları için sıklıkla "köpek noktaları" kavramına başvurur. 2-point (küçük) köpek bir "chihuahua" olurdu. 13-point (büyük) köpek bir "Great Dane" olurdu. Bu iki kılavuzu akılda tutarak, Chihuahua veya Great Dane cinslerine göre diğer köpek cinslerini boyutlandırmak oldukça kolaydır. Yaklaşık "Chihuahua"nın iki katı büyük bir "Beagle" 5 olabilir. Beagle'dan büyük fakat Great Dane'den küçük bir Labrador 8 olabilir.
Öykü noktalarını kullanmayı öğrenmeye ilk başladığınız zaman, ekibinizin kendi sabit karşılaştırma noktalarını oluşturmanız gerekecektir. Bunu yapmak için, ürün biriktirme listenizden herkesin küçük (boyut veya karmaşıklık açısından) olduğunu kabul ettiği bir hikaye ve hepinizin büyük olduğunu kabul ettiği bir hikaye seçin. Küçük öykümün iki noktalı bir öykü olmasını seviyorum çünkü daha da küçültmem gerekirse (oyuncak bir Şivava bulduğumu varsayalım), bunu yapabilirim. Bilinen en küçük öykümü tek noktalı bir öykü olarak sınırlandırırsam ve daha da küçültmem gerekirse sorun yaşarım. Böylece, diğer hikayeler bunlara göre boyutlandırılabilir.
Bu boyutları temsil etmek için numaralar seçme zamanı geldiğinde, Fibonacci sekansının en iyisi olduğunu düşünüyorum. Fibonacci önceki iki sayının toplamıdır. 1 ve 2, sonraki de 3. 3 ve 2, sonraki 5'tir. 5 ve 3, sonraki 8'dir, ve benzeri. T-shirt boyutlandırma ya da katlanarak büyümektense (4/8/16/32/64/128/256, vs.) Fibonacci'yi tercih ederim çünkü insanlar on kökünde iyidir. Bu aralığın dışına çıktığımızda, xs, s, m, l, xl ile bile olsak, kafa karıştırıcı hale gelebilir. Fibonacci sayıları basittir, kolay anlaşılır ve bizi amaca ulaştırmak için göreli tahmin sağlamada yeterli doğruluk sağlarlar. Farklı bir sayılar kümesi seçebilirsiniz ancak unutmayın önemli olan tutarlı olmaktır.
Hikaye noktaları, sabit değil, göreli değerlerdir. Saatler ve noktalar arasında hiçbir doğrudan ilişki yoktur. Örneğin, iki noktalı bir öykünün 12.2 saate eşit olduğunu kesin bir şekilde söyleyemeyiz çünkü iki nokta aralığındaki öykülerin tamamlanması için gerçekte gereken zaman büyük ölçüde değişmektedir. Benzer şekilde, bir ekibin hikaye noktalarını, herhangi bir kesinlik derecesi ile başka birisinin hikaye noktalarıyla karşılaştıramazsınız. Hikaye noktaları, onları tahmin eden ekip tarafından oluşturulur ve o ekibe özeldir; büyük ihtimalle yalnızca ekip tarafından anlaşılan bir karmaşıklık derecesi içerir ve eski değildir.
Poker Planlaması.
Ölçü biriminizi seçtikten ve ölçeğinizi kurduktan sonra, tahmin etme zamanı gelmiştir. En Çevik ekipler öykülerin göreli boyutunu tahmin etmek için planlama pokeri kullanır. Bu Agile ekiplerinde popülerdir, çünkü analoji ve uzman muhakemesi de dâhil birkaç öznel tahmin tekniği içeren nesnel bir ölçüttür. Planlama pokerinin temelinde katılım yatar. Ekipteki herkesin katılması gerekir; evet, herkesin. İşlevsel sınayıcılar geliştirme görevlerini tahmin edebilir, bunun tam tersi de geçerlidir. İşlevsel proje yöneticileri de geliştirme görevlerini tahmin edebilir. Bunu yapmak amaç numaralarınızın mümkün olduğunca çok öznel tahmin içermesini sağlar.
Bir planlama poker kartları kümesiyle başlayın. Dizin kartlarıyla kolayca poker kartlarının planlaması yapılabilir, oyun kartları kullanılarak hile yapılabilir veya Visual Studio satın alınabilir. Her kartta seçilen öykü puanı aralığınızdaki numaralardan biri yer alır (1, 2, 5, 8, 13, vs.). Her katılımcıya, mevcut öykü noktalarının tamamını içeren bir "el" dağıtılır.
Kartlar dağıtıldıktan sonra oyun başlar.
Scrum Yöneticisi, ürün biriktirme listesinin en üstündeki öğeyi ekibe tanıtır.
Ekip, hikayenin ne olduğunu tartışır.
ürün sahibi; soruları, varsayımları, bilinmeyenleri ve kabul ölçütlerini açıklar.
Her ekip üyesi özel olarak öykünün bir referans öyküye, bir referans öykü dizisine ya da ürün biriktirmedeki tüm öykülere göre ne kadar büyük olduğuna karar verir.
Üç dendiğinde, herkes seçtiği kartı aynı anda gösterir.
Herkes aynı kartı oynarsa, ekip tahmini kaydedebilir ve bir sonraki öyküye geçebilir.
Büyük bir değişken varsa (örneğin, görüntülenen rakamlar bir ila sekiz aralığında ise), ekip hikayeyi tartışmaya zaman ayırır. Tartışmaya odaklamak için, düşük fiyatı veren tedarikçinin ve yüksek fiyatı veren tedarikçinin kendi tahminleri için açıklama vermesini sağlayın. Burada öğrenme gerçekleştiğinden ve tüm varsayımlar ortaya çıktığından, burada sayılar değil, görüşme değerlidir. 30 sn. ve 1 dak. arası sürecek kısa bir tartışmadan sonra, takım 4 ve 5 numaralı adımları yineler. Bu, ekip hikaye için bir tahmin üzerinde anlaşmaya varıncaya kadar devam eder.
Bu nispeten basit görünür, ancak bazı temel kuralların anlaşılması önemlidir. İlk olarak, ekip herhangi bir anlaşmaya varmazsa, devam etmemelisiniz. Örneğin, ekipteki bir kişinin sekiz oynadığını ancak diğer herkesin beşi seçtiğini varsayalım. Toplantı yöneticisi "Yeteri kadar yakın." derse Bunda beşi seçeceğiz, devam edelim," sekizi olan kişi ne yapacak? Deneyimlerime dayanarak, o kişi takım ne karar verirse ona uyacak fakat tam katılım olduğunda duracaktır. Planlama bu şekilde daha hızlı ilerleyebilir, ancak değerli bir şeyleri kaybetmiş olursunuz. Yalnızca bu kişi çalışma anlayışını kaybetmekle kalmaz, ekip de bir üyenin girişini ve bakış açısını kaybetmiş olur. Ayrıca, katılmayabilirsiniz. En iyi anlama, bir kişinin neden diğerlerinden daha yüksek bir sayı seçtiğine dair tartışmalardan elde edilir. Kendinizi bir çıkmazda bulursanız, kolaylaştırıcının “Fist to Five” tekniğini denemesini sağlayın. Katılımcıların hiçbirini yabancılaştırmadan toplantıları harekete geçirmek için harikalar yaratır.
Poker planlama, tahminleri noktalar cinsinden ifade ettiğinden ideal olarak ürün biriktirme listesi tahmini için uygundur. Ancak, sprint biriktirme listesi saat cinsinden tahmin edilmelidir. Bununla birlikte planlama pokeri, sprint biriktirme listelerini tahmin etmek için kullanılabilir ve bu amaçla başarıyla kullanılmaktadır; ancak karttaki sayılar nokta yerine saat olur. Kural basittir;
Ürün biriktirme listesi tahminleri, noktalar şeklindedir.
Sprint biriktirme listesi tahminleri, saat olarak verilmiştir.
Her projenin başında ve kendi yaşam döngüsü içinde yeni bilgiler geldikçe, öncelikler değiştikçe ve netlik ortaya çıktıkça planlama pokeri kullanabilirsiniz.
Duvar Tahmini
Poker planlama, kullanıcı hikayelerinin tahmin edilmesi için fantastik bir araçtır, ancak poker planlama kullanılarak yüzlerce hikayenin birer birer tahmin edilmesi gereğinden fazla zaman alacaktır. Tahmin edilmemiş veya öncelik verilmemiş yüzlerce hikayeyle dolu bir ham biriktirme listeniz varsa, tahminde bulunmak için daha hızlı bir yola ihtiyacınız vardır.
Duvar Tahminleri ekiplerin 2 - 3 ve 5 - 8 arasındaki tartışmalarını ortadan kaldırmak ve bunun yerine grup süreç içerisinde, ya da en azından başında, ilgili bir şekilde düşünür. Ayrıca, paydaşların büyük bir öykü grubunu bir öykünün diğerine göre biraz daha önemli olup olmadığına takılmadan genel olarak öncelendirmelerine imkan tanır.
Duvar Tahmini yapmak için önce kullanıcı hikayelerinizi kartlara yazdırmanız gerekir. Ardından, ekibinizi ve hissedarları boş büyük bir duvarı olan (yaklaşık 14 fit uzunluğunda, 8-10 fit yüksekliğinde) bir odada toplayın. Duvarla ilgili şu iki şeyi göz önünde bulundurun:
Yükseklik önceliği belirler. En üstteki hikayeler daha yüksek; en alttaki hikayeler daha düşüktür. Hikayenin önceliği ROI, iş değeri veya "önemli ama neden bilmiyorum" kadar basit bir temel üzerine kurulmalı.
Genişlik boyut için ayrılmıştır. Soldaki hikayeler daha küçük, sağdaki hikayeler daha büyüktür. (Diyelim ki Japonya'dasınız, bunu tersine çevirebilir ve sağdan sola taşıyabilirsiniz, ve bu daha mantıklıdır.) Önemli olan, biri yatay biri de dikey olarak uzanan iki çizgiyi göz önünde bulundurmaktır. Ekip üyeleri ve proje katılımcıları kendilerine diğer hikayelere göreli olarak bunun bulunacağı yeri kendilerine sormalıdır.
Ekip, tüm hikayeleri boyutlandırmak için duvarı kullanır. Hissedarlar, duvarı kullanarak hikayeleri önceliklendirecektir. Poker planlamada olduğu gibi karşılaştırma için duvarın sabit hale geldiği iki başvurulu öyküleri kullanmak yerine göreli boyutlandırmayı kullanıyoruz. Küçük hikaye mi? Sola taşıyın. Büyük öykü? Sağa taşıyın. Önemli hikaye? Yükseğe yerleştirin. Şimdi, kendisi olmaksızın da yaşayabileceğimiz bir hikaye mi? Alçağa yerleştirin.
Öykülerin tahmin edilirken hissedarların orada bulunmak zorunda olmamalarına rağmen, öykülere öncelik verilirken takımın odada bulunması gerekmez. Scrum Yöneticisi ve ürün sahibi, hem tahmin hem de önceliklendirme etkinliklerine katılmalıdır.
Şimdi, tahmini bir biriktirme listeniz zaten varsa, bu alıştırmanın yalnızca önceliklendirme bölümünü yapabilirsiniz. Ürün sahipleri ve hissedarlar size öncelikli biriktirme listesi verdiyse, bu alıştırmanın yalnızca tahmin bölümünü yapabilirsiniz. (Ürün sahibiniz tahminler bittikten sonra öncelik belirlemesini büyük olasılıkla tekrar ziyaret etmek isteyecektir. Herşeyden önce, maliyet öncelik üzerinde büyük bir etki sahibidir.) Ekibin rolü ile başlayarak, bunun nasıl çalıştığına ayrıntılı şekilde bakalım.
Tahmin
Ekibe ham ürün biriktirimini verin ve tahmine başlayın. Ekibe sayılardan bağımsız olarak duvarın en solunda en küçük olası öykülerin, en sağında ise en büyük olası öykülerin bulunması talimatını verin. Ekip bu iki uca dayalı olarak hikayeleri duvarda bir yerlere koyar. Bu şekilde yapmanın avantajı, iki noktalı veya üç noktalı bir hikayenin önceden algılanan bir fikrinin olmaması, duvarın büyüklüğüne bağlı olarak gerçek anlamda göreli olmasıdır; gerçekten büyük duvarların kullanışlı olmasının nedeni de budur.
Ekibiniz bunu gerçekleştirmekte zorlanırsa, 1 ila 8 nokta arasında değişen ek referans hikayeler sağlayarak duvara daha fazla yapı verebilirsiniz. Daha büyük bir referans hikaye oluşturma konusunda endişelenmeyin; büyük olan her şey öncelik alanında yükselirken bozulur. Takım 5 öyküyü belirledikten sonra onları duvarda boyutlarıyla bağlantılı bir konuma yerleştirin (yeniden soldan sağa hareket ettirerek), Sekiz noktadan büyük katlar için duvarın sağ kenarında biraz yer bırakın. Bu hikayeleri duvara yerleştirin ve daha küçük hikayelerin sola, daha büyük hikayelerin sağa geleceğini dikkate alarak, ekibe, kalan hikayeleri bu başvuru hikayelerine göre duvara yerleştirmesini söyleyin.
Duvardaki öyküler ile, öykü boyutları arasındaki mantıksal kesmeleri takımın tanımlamasını sağlar. Bu bölünmeleri göstermek için hikaye grupları arasına bir dikey çizgi çekin. Yakında burada gösterilen duvara benzer şekilde görünen bir duvarınız olacaktır. İlk gruptaki her şey 2 olabilir; ikincideki her şey 3 olabilir; üçüncü gruptaki her şey 5 olabilir; son gruptaki her şey de 8 olabilir. Sayılar, tüm hikayelerin birbirine göre tahmin edilmesinden önemli değildir.
Hikayelerinizi tahmin ettiğinize göre, hikayelere bir öncelik atayabilmeniz için proje katılımcılarınızı dahil etmeniz gerekir.
Önceliklendirme
Müşterilerinizin ve hissedarlarınızın ne büyüklükte bir öykünün öncelikleri belirlemelerine yardımcı olacağını bilmek istemelerine rağmen, onlarla ilişkili öyküleri bulmaya ve o öykülerin gerçekleştiğinden emin olmaya daha fazla odaklanacaklardır. Hissedarların öncelik konusunda anlaşmaması olasıdır, ürün sahibiniz bu bilgiyi ilk önceliğe karar vermede kullanacaktır.
Hissedarlara duvarı açıklayın. Onlara duvardaki kartların, nihai üründe görmek istedikleri tüm özellikleri yansıttığını söyleyin. Ekibin her öyküyü tahmin ettiğini ve duvardaki hangi sütunda durduğuna göre bir öykünün nokta tahminine karar verebildiklerini açıklayın. Ekip üyelerinin önceliklendirmede etkin katılımcılar olmadığını herkese hatırların. Davranışlarla, etkileşimlerle ve bazı hikayelerin öncelik bakımından yükselmesinin ya da alçalmasının nedenleriyle ilgili gözlem yapmak ve not tutmak için bulunurlar. Ayrıca, gerekirse hissedarların tüm sorularını yanıtlarlar. Belirli bir hissedardan yanıtlar gerekli olduğu için ekip bir ya da daha fazla öyküyü boyutlandıramadıysa, ekip zaman yettikçe bu öyküler hakkında sorular da sorabilir.
Hissedarlardan bantlanmış sütunların içinde öyküleri aşağı yukarı taşıyarak bunların göreli öncelik sırasını belirlemede yardımcı olmalarını isteyin. Bir hikaye duvarda ne kadar yüksek olursa, iş açısından önceliğinin de o kadar yüksek olduğunu onlara hatırlatın. Aşağıdaki kuralları ayarlayın:
Bir hikayeyi en üste yerleştirirseniz, bu yerleştirmeyi doğrulamanız gerekir.
Hikayelerin birinin diğerine göre neden daha önemli olduğunu birbirinize sorabilirsiniz. Birbirinize "Bunu aşağı (veya yukarı) kim taşıdı?" diye sormaktan ya da yüksek sesle "Bence bunun yerinin değişmesi gerekli." demekten çekinmeyin. Kim katılmamak istiyor?" Bu kolaylaştırma olmadan ilgili taraflar arasında görüşme sağlar.
Hikayeyi duvar üzerinde bir başkasının taşıdığından daha aşağıya taşırsanız, bizi uyarmak için onu renkli bir nokta işareti ile işaretleyin.
Grup olarak önceliklendirmenin en büyük avantajı, tüm proje katılımcılarının çeşitli hikayelerin önceliklerini daha iyi anlayabilmesidir. Bir tartışma çözüme ulaşmadan çok uzun sürerse, ürün sahibi kartı almalı, anlaşamayan iki hissedarı belirlemeli ve onlarla daha sonra görüşmek üzere not almalıdır.
Alıştırma, hikayelerin ve hissedarların sayısına dayalı olarak 2 ila 6 saat sürebilir. İşiniz bittiğinde, duvar resmi aşağıda gösterildiği gibi görünecektir.
Duvarınız kabaca dört parçaya ayrılır. Sol üst taraftaki hikayeler, yüksek öncelikli ve küçük oldukları için sonuç olarak ürün biriktirme listesinin en üstünde yer alırlar. Sağ üst taraftaki hikayeler yüksek öncelikli, ancak büyüktür. Bu hikayeler, gelecekteki sprint'lere alınabilmeleri için kısa zamanda bölümlere ayrılmalıdır.
Sol alttaki dörtte birlik kısım, öncelik bakımından aşağıda bulunan küçük hikayelerden oluşur. Muhtemelen biriktirme listesinde alta düşeceklerdir. Sağ alttaki dörtte birlik kısım da öncelik bakımından aşağıda bulunan büyük hikayelerle doldurulur. Bu hikayeler, sizin epik veya temalarınızdır. Öncelik bakımından yükselmeleri durumunda bunların daha küçük, daha yönetilebilir hikayelere bölünmeleri gerekecektir.
Bir süre grup ile bir bütün olarak duvara bakın. Bir öykü yanlış dörtgen içerisindeyse, taşıyın. Yüksek öncelikli bir öykü bölünmeliyse ve yeterli zaman varsa, bunu herkes odadayken yapın.
Duvar tahmini sonunda, bir sürüm planının başlangıcına sahip olacaksınız. Ekibin geçmiş hızını biliyorsanız, sol üstteki çeyrek daire üzerindeki hangi öykülerin tamamlanacağına yönelik tahmini bir aralık belirleyebilirsiniz.
Bir projenin başlangıcında çok fazla belirsizlik olduğundan tahmin zordur. Ürün Sahipleri ve çevik proje yöneticileri, ürün sahipleri ve proje katılımcılarıyla görüşmeler yaparak, çalışma yazılımı üreterek ve yayınlanabilir bir duruma ulaşmak için ilgili yazılım hakkında geribildirimleri tümleştirerek erken dönemde öğrenmeyi en üst düzeye çıkarmaya çalışır. Ancak hızlı projeler bile bir özellikler kümesinin yayınının ne zaman hazır olacağı konusunda tahmin sağlamalıdır.
Önerdiğim iki tahmin tekniği poker planlaması (küçük hikaye kümeleri için uygun) ya da duvar tahmini (büyük ham ürün biriktirme listelerini yönetmeye uygun). Tahminin esas amacı olan plana başlamak için ihtiyacınız olan veriyi size verecektir.
Ayrıca bkz.
Kavramlar
Ürün Biriktirme Listesi Oluşturma veya Ekleme
Isındırma ve Biriktirmeyi Tahmin Etme
Mike Cohn, "Agile Estimating and Planning", sayfa 36