Yazılım mühendisliğinde maliyet hesabı her zaman problem olmuştur. "Bu iş kaç Adam/Gün tutar?" sorusuyla sıkça karşılaşıyoruz. Adam/gün veya Adam/ay ölçütleri bir kaynağın/kişinin belirtilen zaman dilimindeki iş gücü anlamına gelir. Tabi bu noktada yine kafa karışıklıkları başlar. 6 A/G'lik bir işi hızlandıralım diye 2 kişi ile yapmaya çalışsak ve kaynak/kod, modül, altyapı, insan vb. her bir şeyi bir kenara bıraksak, matematiksel basit formülle 6/2=3 A/G'de biter? Gerçek hayat böyle değil, öncelikle bunu anlamamız lazım. Hep şu örnek verilir; "Aynı bebeği 2 kadın birlikte daha kısa sürede doğurur mu?" Eğer bunun cevabı "Evet" ise (veya bir gün böyle bir durum ortaya çıkarsa), yazımı değiştirmem gerekecek:)
Mevzu gerçekten derin...Maliyet hesabı; bulunduğunuz firmanın yazılım süreçlerini hangi methodlarla uyguladığına, ilgili işin o dönemdeki aciliyetine, (şirket yönetiminin baskısına:)) vb. bir çok duruma bağlı olabilir.
Örneğin; bizim firmada eğer bir planın tam ortasındaysak, 1-2 saatlik kodlama işi olsa bile, planda tamponumuz varsa, 1 A/G'den daha az A/G verilmemesi gerekir. Neden mi?;
- Bu iş için öncelikle ihtiyaç analizi girilecek, uniVIP (Univera Versiyon ve İstek Planlama Programı) kaydı oluşturulacak,
- Maliyet çalışması yapılacak,
- uhiSYS'de (Univera Hata ve İş Yönetim/Analiz Sistemi) iş kaydı açılıp, konu developer arkadaşa gönderilecek,
- Developer arkadaş tamamlayacak ve teste delege edecek,
- Test, ilgili relase'i üretip, set çıkartıp, test edecek, işi kapatacak,
- Destek departmanı dağıtımı yapacak.
Neyse ki kendi bünyemizde XP(eXtereme Programming) ve yarı TDD (Test Driven Development) içeren bir süreç işletmeye çalışıyoruz. Ekipler birbirine yakın ve süreç hızlı işliyor.
Yine başka bir örnekte; ürünün/projenin teslim aşamasında, pilotta (beta test) olduğumuzu varsayalım. Bir takım süreçsel eksikliklerden dolayı, iş kritik olduğu için gece-gündüz geliştirme yaptığımız da çok olmuştur. O anda kimseye süreç anlatamazsınız (sakın denemeyin). Hedef odaklı işi bitirmek ve projeyi tamamlamak zorundasınız. Fakat şirkete dönüldüğünde bu ekstra maliyet plana mutlaka yansıtılmalıdır. En azından biz yanısıtıyoruz.
Yazılım maliyet tahminleme ile ilgili literatürde bir çok yönteme rastlarsınız. Bunlardan sıkça duyulanı COCOMO (COnstructive COst MOdel) yaklaşımıdır. Ben de kendi şirketimdeyken ve daha geçnken:) bu yöntemlerin türevlerini uygulama gafletinde bulunmuştum:) Gerçek bir senaryonun örneği aşağıda;
Şimdi bu yönteme bakıyorum, o zamanki "beni" anlamaya çalışıyorum. Sanırım tecrübesizliği, teknik olarak alt etmenin bir arayışı (Yazılım dünyasında böyle tiplere rastlamak mümkün). Sakın yanlış anlaşılmasın, yazılım yaşam döngüsündeki süreçleri ve methodları sonuna kadar savunurum, ancak hangi firmada olursanız olun, "hayatın da bir gerçeği var".
Edindiğim tecrübeler şunu gösteriyor, iyi bir yazılım maliyet tahminlemesi için aşağıdaki adımlar temel alınmalı;- Öncelikle yazılım iş ihtiyacı/kapsamı net şekilde ortaya konulmalıdır.
- Tahmini yapacak kişinin sistemin altyapısını ve tasarımını bilmesi gerekmektedir (Tecrübesi ve sorumluluğu kapsamında).
- Tahmini yapacak kişinin kaynakları iyi tanıması gerekmektedir (Tecrübesi ve sorumluluğu kapsamında).
- Mutlaka risk hesabının işin içine katılarak, maliyete eklenmesi gerekmektedir (Özellikle başka sistemler ile entegrasyon varsa, %25-30 risk koyduğumu bilirim).
- Yapılan maliyet çalışması; Analiz, Kodlama/Tasarım, Test, Dokümantasyon, Dağıtım (Duruma göre eklenir) safhaları için ayrıca detaylandırılmalıdır (İşin büyüklüğüne göre proje yönetimi gerekebilir).
Bu durumda dahi mutlaka sapmalar olacaktır. Lakin, zamanla edinilen tecrübelerle ve süreçlerin iyileştirilmesiyle, gerçeğe yakın yazılım maliyet tahminlemeleri yapılabilir.
Deniz KILINÇ
Zaten COCOMO dan elde edilen bilgi genellikle sembolik kalıyor ve gerçek hayatla denk geldiğine ben hiç şahit olamadım.Bilgilendirme için teşekkür ederim.takipteyim yazılarınızın devamını sabırsızlıkla bekliyorum..
YanıtlaSilBakalım belki bir gün farklı bir efor tahminleme uygularız, sayılarla kandırmanın en güzel yolu bu formüller:)
YanıtlaSilBen,kendi başıma şöyle hesaplıyorum.
YanıtlaSilGün/Adam ekipli projelerde,Tek başıma yaptıgım projelerde ise,Saat te,50 liraya çalışıyorum.
Proje maliyeti = 50 * ProjeSaati
Hoşcakalın.
Paylaşımınız için teşekkürler Serdar Bey.
YanıtlaSilmerhaba
YanıtlaSilpaylaşımınız için teşekkürler
endüstri mühendisliği son sınıf öğrencisiyim
oyun motoru yazmakta olan bir firmada gönüllü staj yapmaktayım ve zaman, maliyet gibi tahminlerde bulunmalıyım; elimde geçmişe ait veri yok. Açıkçası hangi modeli kullanmam gerektiğini de bilmiyorum. Nesne yönelimli yazılımlarda bahsettiğiniz Cocomo modeli işimize yaramayacak gibi görünüyor.
yardımcı olup yol gösterirseniz mutlu edersiniz.
ilginize şimdiden teşekkürler
nurten keleş
nurtenkeles88@gmail.com
Merhaba Nurten, içinde bulunduğun durum kolay değil:) Eğer daha önce yazılım maliyet tahminleme ve ilgili işin teknik tarafında tecrüben yoksa herhangi bir tahminleme tekniği üzerinden gitmen seni zorlar, yanlış tahmine yol açar. Burada yapabileceğin en iyi yöntem elindeki işi küçük parçalara, safhalara ayırmak olacaktır. Örneğin, basitçe; analiz, tasarım, kodlama, test, eğitim, dokümantasyon başlıklarından yola çıkıp. Her başlığın altında ana görevler tanımlayıp, bunlar tahmini ne kadar sürer diye ilgililerden bilgi toplayarak ilerleyebilirsin. En son hepsini alt alta toplarsın. Dediğim gibi bu noktada tecrübe önemli. Umarım yardımcı olmuşumdur. Detaylı görüşmek istersen. deniz.kilinc[at]univera.com.tr adresinden bana yazabilirsin.
YanıtlaSilbu kadar çabuk dönmeniz şaşırttı beni=)
YanıtlaSililginize tekrar çok teşekkür ederim...