• Sonuç bulunamadı

BM526 YAZILIM PROJE YÖNETİMİ. Yrd.Doç.Dr.Hacer KARACAN

N/A
N/A
Protected

Academic year: 2022

Share "BM526 YAZILIM PROJE YÖNETİMİ. Yrd.Doç.Dr.Hacer KARACAN"

Copied!
50
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

BM526 – YAZILIM PROJE YÖNETİMİ

Yrd.Doç.Dr.Hacer KARACAN

(2)

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

(3)

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?

(4)

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

(5)

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

(6)
(7)

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

(8)

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ı

(9)

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ış

(10)

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.

(11)

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.

(12)

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.

(13)

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.

(14)

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.

(15)

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

(16)

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

(17)

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

(18)

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.

(19)

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.

(20)

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

(21)

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.

(22)

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.

(23)

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.

(24)

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.

(25)

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

(26)

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

(27)

Yazılım Özellikleri

27

1. Yazılım geliştirilir (developed), klasik anlamda imal (manufactured) edilmez.

(28)

Yazılım Özellikleri

1. Yazılım geliştirilir (developed), klasik anlamda imal (manufactured) edilmez.

(29)

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

(30)

Yazılım Özellikleri

3. Endüstri bileşen tabanlı geliştirmeye yönelmiş olsa bile, halen yazılımlar özel geliştirilmektedir.

(31)

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.

(32)

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

(33)

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.

(34)

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ı

(35)

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

(36)

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.

(37)

İ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.

(38)

Çö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.

(39)

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

(40)

Proje Aktivitelerinin Organizasyonu

Örn. gereksinim sürecinde gerçekleştirilen aktiviteler ve bunlara yönelik dönüm noktaları şu şekilde düşünülebilir:

(41)

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.

(42)

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ı

(43)

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

(44)

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

(45)

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)

(46)

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?

(47)

Çö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?

(48)

Planı yürüt

Çözüm plana uygun mu?

Her çözüm bileşeni kanıtlanabilir şekilde doğru mu?

(49)

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?

(50)

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

Referanslar

Benzer Belgeler

Özellikle belirli alanların sorunlarını daha kolay ve etkin bir şekilde çözebilmek için bazı dillere eklemeler ve uzantılar yapılarak yeni diller türetilmektedir..

Yazılım mühendisliği bir bilim dalı olmasına rağmen henüz diğer alanlar gibi anlaşılabilir değildir. Çünkü sabit temelleri yoktur. Hızlı bir şekilde

Tanımlama için kullanılacak veri akış diyagramlarında gösterim şekli olarak Şekil 6’da verildiği gibi iki tür bilgi akışı yer alır:.

Aslında güvenlik sadece yazılım geliştirme sürecinde değil, ağ kurulumu, veritabanı yönetimi gibi bilgi sistemleri ile ilgili tüm süreçlerde daha en

Aslında güvenlik sadece yazılım geliştirme sürecinde değil, ağ kurulumu, veritabanı yönetimi gibi bilgi sistemleri ile ilgili tüm süreçlerde daha en baştan düşünülmesi

Daha sonra üzerinden çizgi geçmeyen en küçük değer bulunarak üzerinden çizgi geçmeyen (kendisi dahil) tüm değerlerden çıkartılır, çizgilerin kesişim.. Yeni

• Üretim stratejisinin belirlenmesi için öncelikli olarak işletmenin genel stratejisi oluşturulmalıdır. Diğer tüm işlevsel stratejiler bunu temel

• Metot Etüdü: Bir işin yapılmasına yönelik daha kolay, daha etkin ve daha düşük maliyetli yöntemlerin bulunması ve uygulanması amacıyla işin ve bunun