BM526 – YAZILIM PROJE YÖNETİMİ
Yrd.Doç.Dr.Hacer KARACAN
Temel Kavramlar
Yazılım
Yazılım mühendisleri tarafından tasarlanır ve geliştirilir
Toplumdaki herkes tarafından kullanılabilir
Ticaret, kültür ve günlük yaşantılarımızda yaygın olarak kullanılmaktadır
Yazılım mühendisleri
İnsanlara zarar vermeyen yazılımlar geliştirme zorunlulukları vardır
Yazılım kullanıcıları
Sadece yazılım ürünlerinin ihtiyaçlarını karşılamaları ve görevlerini kolaylaştırmaları ile ilgilenirler
Yazılım Mühendisleri için Önemli Sorular
3
Yazılımların bitmesi neden bu kadar uzun sürüyor?
Geliştirme maliyetleri neden çok yüksek?
Yazılımı müşteriye vermeden önce neden tüm hataları bulamıyoruz?
Var olan programları sürdürebilmek için neden çok fazla çaba harcamamız gerekiyor?
Yazılım geliştirilirken ilerlemenin ölçülmesinde neden zorluk yaşıyoruz?
Yazılım –Bilgisayarların ilk yılları
Oldukça küçük programlar
Tek kişinin yazdığı programlar
Sadece alan uzmanlarının geliştirip yine kendilerinin kullandığı programlar
Bazı programlama dillerinde bilinen algoritmaların kullanım eğilimi
Yazılım - Günümüz
5
Programlar
Oldukça büyük ve karmaşık
Uzun süreler zarfında birbirleriyle işbirliği içinde çalışan takımlar tarafından geliştiriliyorlar
Geliştiriciler artık geliştirilen yazılımın son kullanıcısı değiller Sistemin asıl kullanıcıların alanla ilgili uzman bilgileri yok
Bilgisayar Programı nedir?
7
Bilgisayarların veri işlemek, bir işlemi gerçekleştirme ya da mantıksal bir problemi çözmek için takip ettikleri; bir
programlama dilinde (C, C++, Java,…) yazılmış komutlar grubu
Yazılım nedir?
Bilgisayar programları
Bu programları kurmak için kullanılan yapılandırma (configuration) dosyaları
Programın nasıl kullanılacağını anlatan kullanıcı dokümanları
Destek hizmetleri
Yazılımın yapısını anlatan sistem dokümanları
Bilgisayar Programları
(bazen birden fazla farklı program) +
İlgili dokümanlar +
Yapılandırma dosyaları
Yazılım Çeşitleri
9
Genel
Pek çok farklı müşteriye satılmak üzere üretilmiş hazır ticari ürünler (Commercial Off The Shelf – COTS)
Ismarlama/İsteğe özelleştirilmiş
Tek bir müşteri için onun belirtimleri (ihtiyaçları) doğrultusunda hazırlanmış
Yazılım Mühendisliği Nedir?
Yazılım mühendisliği yazılım üretimi ile ilgili tüm durumlarla ilgilenen bir mühendislik bilim dalıdır.
Yazılım mühendisleri
İşlerinde sistematik ve organize yaklaşımlar benimsemelidirler.
Çözmek istedikleri probleme, geliştirme kısıtlamalarına ve de mevcut kaynaklara uygun araç ve teknikleri kullanmalıdırlar.
Yazılım Mühendisliği gerçekten önemli mi?
11
TÜM gelişmiş ulusların ekonomiler günümüzde yazılıma dayanmaktadır.
Gün geçtikçe yazılım ile kontrol edilen sistemler artış göstermektedir
Yazılım mühendisliği harcamaları ülkelerin gayri safi milli hasılalarının kayda değer bir bölümünü oluşturmaktadır.
Yazılım Mühendisliği gerçekten önemli mi?
Yazılım maliyetleri sistem maliyetlerinin büyük kısmını oluşturmakta.
Bilgisayar üzerinde çalışacak yazılımın maliyeti donanımın maliyetinden genellikle daha fazla
Yazılımın sürdürülebilirlik maliyeti geliştirme maliyetinden daha fazla.
Uzun süreli kullanılacak sistemler için, sürdürülebilirlik maliyetleri geliştirme maliyetlerinin birkaç katı olabilir
Yazılım mühendisliği maliyet-etkin yazılımlar geliştirmekle ilgilidir.
Korku Hikayeleri
13
Denver Havaalanı otomatik bagaj sistemi
Hava Trafik Kontrol (FAA in modernizasyonu)
Açılış 2 yıl gecikti
27 milyon $ maliyet aşımı
360 milyon $ geç hizmete girme maliyeti
8 yıl gecikme
5.6 milyon $ maliyet aşımı
4 sistemden 2’si ve isterlerin % 48’ i iptal edildi.
Korku Hikayeleri
Amerikan Donanma Finans Sistemi
Comanche Helikopterleri
9 yıl sonunda iptal edildi
230 milyon $ maliyet aşımı
10 yıl gecikme
34.4 milyon $ maliyet aşımı
İsterlerin % 74’ü iptal edildi.
Korku Hikayeleri
15
2004 yılında gerçekleştirilen 9236 geliştirme projesinin sonuçları
KAYNAK: F. Hayes “Chaos is back” Computerworld, www.computerworld.com http://www.computerworld.com/s/article/97283/Chaos_Is_Back
Nedenleri?
Para ya da teknoloji esikliğinden değil pek çoğu başarısız proje yönetimine dayanıyor
Günümüzde büyük ölçekli yazlım geliştirme işleri daha çok;
karmaşık ve dağıtık ortamlarda gerçekleştiriliyor.
Uygulamalar, kullanıcılar, müşteri istekleri, kanunlar, iç politikalar, bütçe, kurum bağımlılıkları sabit olarak değişmekte
Yazılım Proje Yönetimi
17
Yazılım proje yönetimi diğer proje yönetimlerinden şu sebeplerle ayrılır:
Ürünün fiziksel varlığı yoktur
Proje yöneticisi ilerlemeyi görebilmek için diğerlerinin ürettiği belgelendirmeye ihtiyaç duyar
Yazılım geliştirme süreci standart değildir
Yazılım süreçleri kurumdan kurumdan farklılık gösterir
Çoğu yazılım projesi bir defalık projedir
Projelerin kendilerine has özellikleri vardır
Hızlı teknolojik değişiklikler proje yöneticisinin deneyimi geçersiz kılar
Yazılım Proje Yönetimi
Yazılım geliştirme süreci, diğer tüm üretim süreçleri gibi, planlama ve programlama gerektiren ve yönetsel olarak kendine has unsurlar içeren bir süreçtir.
Konu yazılım projesi olunca, proje yöneticisinin personel yönetimi ya da klasik yönetim unsurları dışında da yeterlilikleri olması gerekir.
Yazılım Proje Yönetimi
19
Proje yöneticisi
yazılım işini tanımlamak,
maliyet ve süre kestirimi yapmak,
en önemli aşamaları belirlemek,
karmaşıklık ölçütlerini kullanarak işleri uygun kişilere paylaştırabilmek,
etkin kontrol yöntemleri uygulayabilmek,
ya da tüm bunları çok çabuk öğrenebilmek zorundadır.
Tüm paydaşlarla (müşteri, geliştirici, destek personeli) iyi ilişkiler kurması gereklidir.
Yazılım geliştirmede kullanılabilecek standartları mümkün olduğunca bilmeli ya da erişip öğrenmeye çalışmalıdır.
Yazılım Mitleri _1
Yöneticiler ya da teknik kişiler için ciddi problemler oluşturan yanıltıcı yaklaşımlar
Yönetici Mitleri
Yazılım geliştirme ile ilgili pek çok standart ve prosedür içeren kılavuzlarımız var. Bu takımıma gerekli her şeyi sağlamıyor mu?
Eğer planda geri kalırsak, yetişmek için daha fazla programcı ekleyebiliriz
Eğer işi başkasına yaptıracaksam (outsource), rahat edip diğer şirketin yapmasını beklerim
Yazılım Mitleri _2
21
Müşteri Mitleri
Programı yazmayı başlamak için hedefleri belirleyen gelen bir tanım yapmak yeterli olacaktır
Yazılım gereksinimleri sürekli değişir ama yazılımlar
esnek olduğundan bu değişikliği yapmak kolay olacaktır.
Yazılım Mitleri _2
Geliştirici Mitleri
Programı yazıp çalışmasını sağladıktan sonra işimiz biter
Programın çalışmasını sağlayana kadar kalitesini değerlendirme için bir şey yapamayız
Başarılı bir proje için tek teslim edilebilir iş ürünü çalışan programdır
Yazılım mühendisliği bizi yavaşlatan fazla ve gereksiz belgelendirme yapmamıza yol açar.
Ne Yapılmalı?
23
En son bilgisayar teknolojisinin kullanılması yazılım geliştirme için en gerekli unsur değildir.
Böyle olması işlerin en yüksek kalitede yapılacağı anlamına gelmez.
Projenin gecikmesi durumunda personel sayısını arttırmak projeyi hızlandırmaz.
Aksine, bireyler arası iletişim zorlukları, öğrenme ve sürece adapte olabilme gereksinimi, vb. sebeplerle süreyi daha da uzatır.
Ne Yapılmalı?
Müşterinin istediği yazılımın tanımını iyi yapması gereklidir.
Müşteri yazılımın esnek olduğu düşüncesi ile isteklerini süreç boyunca değiştirme eğiliminde olabilir.
Esnek yazılımlar geliştirmek hedeftir ancak bu isteklerin ne zaman geldiğine göre uygulanabilirlikleri ya da gerçekleştirilmeleri zor olabilir.
Eğer gelen yeni istek tüm tasarımı etkiliyorsa yeni baştan tasarım ve gerçekleştirim bile gerekebilir.
Ne Yapılmalı?
25
Uygulayıcılar (programcılar) yazılımın bir sanat olduğu varsayımından uzaklaşmalıdır
Uygulama geliştirici ekip çalışanları bir yazılım birimini bir an önce kodlayıp çalıştırınca işlerinin biteceğini düşünebilirler.
O nedenle olabildiğince erken kodlamaya başlamak isterler.
Bu da ancak nitelik kalite yönünden eksik – müşterinin isteklerini ihtiyaçlarını tam olarak karşılayamayan - ürünler çıkmasına neden olabilir
Ne Yapılmalı?
‘eğer proje çalışıyorsa başarılıdır’ ???
Ürünün çalışmasının yanında;
doğru çalışması,
ileride yapılacak bakımla işlemleri için yeterli belgelendirmenin yapılmış olması gerekmektedir
Yazılım Özellikleri
27
1. Yazılım geliştirilir (developed), klasik anlamda imal (manufactured) edilmez.
Yazılım Özellikleri
1. Yazılım geliştirilir (developed), klasik anlamda imal (manufactured) edilmez.
Yazılım Özellikleri
29
2. Yazılım aşınmaz / yıpranmaz, fakat yapılan değişiklikler nedeniyle geriler.
Pek çok değişiklikten sonra baştan tasarlanması gerekebilir
DONANIM YAZILIM
Yazılım Özellikleri
3. Endüstri bileşen tabanlı geliştirmeye yönelmiş olsa bile, halen yazılımlar özel geliştirilmektedir.
Yazılım Ölçütleri
31
Bir sistemin/altsistemin verilen bir özelliğinin nicel ölçüm derecesi “ölçüt” olarak tanımlanabilir.
Yazılım ölçütleri şunları ölçmek için kullanılan birimlerdir:
Ürünler kaynak kodu, tasarım, prototip, test sonuçları, vb.
Süreçler analiz, tasarım aktiviteleri, kodlama, vb.
Kişiler test mühendisi verimi, kod geliştirici üretkenliği, vb.
Yazılım Ölçütleri
Yazılım soyut bir ürün olmasından dolayı, somut ürünlere göre, daha net ve kapsamlı ölçütlere gereksinim duyar.
Günümüzde en çok kullanılan yazılım ölçütleri şunlardır:
Kaynak kodda bulunan satır sayısı (LOC)
Satır sayısı başına düşen hata sayısı
Sınıf ve arayüz sayısı
Program dosya sayısı
Bir sınıfta yazılan ortalama metod sayısı
Kalıtım ağacındaki en büyük derinlik
Sııflar arası bağımlılık
Uygulamada ayrışan parçaların büyüklükleri
Yazılım Ölçütleri
33
Bu ölçütleri kullanmanın temel amacı ürünün büyüklüğünü ve karmaşıklığını somut verilerle ortaya koymaktır.
Ayrıntılı tasarım yapıldığında geliştirilecek olan yazılımın ne kadar büyük olduğunu tahmin etmek çok zordur.
Yazılım ölçütleri bu noktadaki tahmin uzayını küçültmek konusunda yardımcı olabilir.
Yazılım Ölçütleri
Yetenek olgunluk modeli (CMM – Capability Maturity Model) gibi yazılım gelitirme yönetim
metodolojileri daha çok süreç ölçütleri üzerine eğilmişler ve yazılım geliştirme sürecini izleme hedefine ulaşmaya çalışmışlardır.
En çok kullanılan süreç ölçütleri şu şekilde sıralanabilir:
Gereksinimlere göre yapılan değişiklik sayısı
Harcanan her saat başına düşen hata sayısı
Programın ortalama beklenmedik kapanma (crash) sayısı
Yazılım Ölçütleri
35
Ölçütlerin kullanımı ile performans değerlendirmesi
yaparken dengelenmiş ölçütlerin optimum seviyede önem verilerek kullanılması akıllıca bir yaklaşımdır.
Birbirini dengeleyici ölçütler sayesinde görev alan kişilerin davranışlarını ve süreci kontrol altına almak kolaylaşacaktır.
Bu noktada kullanımı en çok önerilen ölçütler şunlardır:
Zaman / Programlama
Risk
Maliyet
Kalite
Yazılım Ölçütleri
Müşteri ve/veya geliştirici ekip kısıtları doğrultusunda belli ölçütlere daha fazla değer verilmesi genelde söz konusu olan bir durumdur.
Ancak, verim artımı sağlanabilmesi için tüm bu ölçütlere eşit oranda değer verilmesi önerilir.
İyi yazılımın özellikleri
37
Yazılım kullanıcısına istenen işlevleri ve performansı sunmalı ve buna ek olarak:
Sürdürülebilirlik (maintainable)
Yazılım değişen ihtiyaçlara göre gelişebilmelidir.
Güvenilebilirlik (dependable)
Yazılım güvenilir olmalıdır
Verimlilik (efficiency)
Yazılım sistem kaynaklarını boşa harcamamalıdır.
Kullanılabilirlik (usability)
Sistem tasarlandığı kullanıcıları için kolay kullanılabilir olmalıdır.
Çözüm nedir?
Yazılım geliştirmede tek bir “ideal” yaklaşım yoktur.
Farklı türde sistemler
Farklı türde organizasyonlar
Fakat pek çok organizasyon ve sisteme uyabilecek pek çok temel teknik vardır.
Proje Aktivitelerinin Organizasyonu
39
Projedeki aktiviteler yönetime ilerleyiş ile ilgili karar vermelerinde yardımcı olacak elle dokunur çıktılar sağlayacak şekilde organize edilmelidir.
Dönüm Noktaları (milestones) Yazılım süreç aktivitesinin gözle görülür sonudur.
Rapor, vb. bir çıktısı olan belirgin ve mantıksal bir proje aşamasıdır.
Teslim edilir ürün (deliverables) Müşteriye teslim edilen proje sonuçlarıdır (Örn. Belirtim, tasarım).
Teslim edilir ürünler dönüm noktalarıdır ancak dönüm noktaları her zaman teslim edilir ürün değildir
Proje Aktivitelerinin Organizasyonu
Örn. gereksinim sürecinde gerçekleştirilen aktiviteler ve bunlara yönelik dönüm noktaları şu şekilde düşünülebilir:
Karşılaşılan ana zorluklar
41
Eskiden kalan sistemler, artan çeşitlilik ve azalan teslimat süreleri ile başa çıkmak
Heterojenlik zorluğu
Sistemler artık günümüzde dağıtık ve aynı zamanda farklı donanım ve yazılım öğelerinden oluşmaktadır.
Teslimat zorluğu
Yazılımların daha kısa sürelerde teslim edilmesi yönünde baskı vardır.
Güven zorluğu
Yazılım hayatımızın her alanına girmiş bulunmakta. Bu nedenle yazılımlara güvenmek isteriz.
Genel yazılım süreci çerçevesi
İletişim
müşteri işbirliği ve gereksinim toplama
Planlama
Mühendislik iş planını oluşturur, teknik riskleri tanımlar, gerekli kaynakları listeler, iş ürünleri üretilir ve iş zaman planı tanımlanır
Modelleme
Geliştirici ve müşterilerin yazılım gerekleri ve yazılım tasarımını anlamasına yardımcı olacak modellerin oluşturulması
Yapım
Kod oluşturma ve test
Kurulum
Müşteriye yazılımın değerlendirme ve geri bildirim için teslimatı
Yazılım Geliştirme Koruyucu Aktiviteleri
43
Yazılım proje izleme ve kontrol
Takımların ilerlemeyi değerlendirmeleri ve zaman planını sağlayabilmek için gerekli düzeltici etkinlikleri almaları
Risk yönetimi
Proje sonuçları veya kalitesini etkileyebilecek riskleri değerlendirme
Yazılım kalite güvencesi
Yazılım kalitesini sağlama için gerekli aktiviteler
Teknik gözden geçirmeler
İş ürünlerindeki hataları bir sonraki aktiviteye yayılmadan önce bulmak ve gidermek için değerlendirme
Yazılım Geliştirme Koruyucu Aktiviteleri
Ölçme
Müşteri ihtiyacını karşılayacak yazılımı teslim etmede geliştirme takımını destekleyecek süreç, proje ve ürün ölçümlerini
tanımlama ve toplama
Yazılım konfigürasyon yönetimi
Değişikliklerin etkilerini yönetme
Yeniden kullanılabilirlik yönetimi
İş ürünü yeniden kullanımı için kriterleri oluşturma ve bileşen yeniden kullanımı için mekanizmaları oluşturma
İş ürünü hazırlama ve üretimi
Modellerin, belgelerin oluşturulması için gerekli aktiviteler
Yazılım Süreci
45
Görevler arasındaki genel akış ve bağımlılık seviyeleri
Problemi anlama (iletişim ve analiz)
Çözüm planlama (yazılım tasarımı)
Planı yürütme (kod üretme)
Doğruluk için sonuçları inceleme (test ve kalite güvencesi)
Problemi anla
Paydaşlar kimler?
Bu problemi çözmek için hangi fonksiyon ve özellikler gerekli?
Anlaşılması daha kolay daha küçük problemler yaratmak mümkün mü?
Grafiksel bir çözümleme modeli oluşturulabilir mi?
Çözümü planla
47
Daha önce benzer problemler gördün mü?
Daha önce benzer bir problem çözdün mü?
Halihazırda çözülebilir alt-problemler tanımlanabilir mi?
Tasarım modeli oluşturulabilir mi?
Planı yürüt
Çözüm plana uygun mu?
Her çözüm bileşeni kanıtlanabilir şekilde doğru mu?
Sonucu incele
49
Çözümün her bir bileşen parçasını test etmek mümkün mü?
Üretilen çözüm veri, fonksiyonlar ve gerekli özelliklere uygun sonuçlar üretiyor mu?
Yazılımda pratik prensipler
Yazılım kullanıcılarını değer sağlamak için vardır
Keep it simple stupid (KISS)
Açık bir vizyon herhangi bir yazılım projesi için gereklidir
Her zaman başka birinin işlerini ona göre yürüteceğiniz düşünerek tanımla, tasarla ve uygula
Gelecekteki değişikliklere açık ol
Önceden yeniden kullanım için planlamak maliyeti düşürür ve
yeniden kullanılan bileşenlerin ve onu gerektiren sistemin değerini artırır