17 Ağustos 2013 Cumartesi

Planlar, Metotlar ve Metodolojiler

Bir aktivite için plan yapılacaksa, çalışma yöntemine ilişkin amaç temel alınmalıdır.

Örneğin; bir yazılımı test etmemiz istendi ve test edilecek yazılım hakkında hiçbir şey bilmiyoruz. Böyle bir durumda bu test işlemini gerçekleştirmek için aşağıdakilere gereksinim duyulmaktadır;
Yazılım gereksinimlerinin analizi,
Her gereksinimin yerine getirilip getirmediğini kontrol edecek test durumlarının yazılması ve düzenlemesi,
Her test durumu için beklenen sonuçlar ve test  kodlarının yaratılması,
Beklenen sonuçlar ile gerçek sonuçların karşılaştırılması ve uyuşmazlıkların belirlenmesi.


Metot genel olarak bir aktivite türü ile ilgilidir, plan ise bu metodu alır ve gerçek aktivitelere dönüştürür. 

Ayrıca her bir aktivite için;
başlangıç ve bitiş tarihi,
kimin gerçekleştireceği,
hangi araç ve materyallere gereksinim duyulacağı belirlenir.

Bir metodun çıktısı, diğer bir metot için girdi olabilir.

Metot grupları veya teknikleri, metodoloji altında toplanmaktadır.
Örn: Nesne-tabanlı tasarım (object-oriented design)

Ayrıca her bir aktivite için;
- Aktivitenin başlangıç ve bitiş tarihi,
- Aktiviteyi kimin gerçekleştireceği,
- Hangi araç ve materyallere gereksinim duyulacağı belirlenir.

Proje Yönetimine Gelecekte Etki Edecek Faktörler 

Mühendislik ve teknoloji ağırlıklı işlerin ağırlığı her 5 yılda bir kendini katlayacaktır.
Bilgisayar teknolojisi her 2 yılda bir kendini katlayacaktır.
Ürün-yaşam çevrimleri kısalacaktır.
Daha kısa ürün geliştirme süresinde yeni ürün talebi artacaktır.
Yönetici ve idareciler daha hızlı stratejik karar almak için daha çok bilgiye ihtiyaç duyacaklardır.
Bir çok yönetici, işten çok insana odaklanacaktır.
Yöneticiler, yıllık 10 milyon $’lık iş hacmini yönetmekten 50 milyon $’lık iş hacimlerini yönetmeye başlayacaklardır.

ISO 12207 Yazılım Geliştirme Yaşam Döngüsü

ISO 12207 Yazılım Geliştirme Yaşam Döngüsü 7 Kısımdan Oluşmaktadır.

Gereksinim Analizi (Requirements Analysis)
Tanımlama (Specification)
Tasarım (Design)
Kodlama (Coding)
Doğrulama ve Sağlama (Verification & Validation)
Kurulum (Installation)
Bakım ve Destek (Maintenance & Support)


Gereksinim Analizi
Gerçekleştirilmesi planlanan projedeki kullanıcı sistem beklentileri tanımlanır. Analiz önce bir fizibilite çalışması gerektirebilir. Yazılımın servisleri, kısıtları ve hedefleri belirlenir. Kullanıcı gereksinimlerinin belirlenmesinde değişik yaklaşımlar kullanılabilir. Örneğin kullanıcıların bütün gereksinimlerini karşılamayan ancak düşük maliyetli bir çözüm ile bütün gereksinimlerin karşılandığı yüksek maliyetli bir çözüm karşılaştırılabilir.

Tanımlama
Gerçekleştirilecek sistemden beklenenlerin detaylı bir şekilde dokümante edilmesi. Yazılım projelerinde projenin amaçları 3 farklı kavram ile tanımlanır: İşlevsel Gereksinimler (Functional Requirements): Projeden elde edilecek son ürünün neler yapması gerektiği tanımlanır. Bu tanımlamalar için çeşitli sistem analizi ve tasarım yöntemleri kullanılır. Kalite Gereksinimleri (Quality Requirements): Sistemin ne yaptığı ile değil, nasıl yaptığı ile ilgili uygulama özellikleri mevcuttur. Bunlar hala kullanıcılara açık olan taraflardır. (Sistemin yanıt verme süresi, kullanım kolaylığı vb.) Kaynak Gereksinimleri (Resource Requirements): Kuruluşun sistem için ne kadar harcama yapmak istediğinin göstergesidir. Bu, sistemin tamamlanma süresi ile ters orantılıdır. 

Tasarım
Tanımlamaları bütünüyle karşılayan bir tasarımın hatları belirlenir. Tasarım iki aşamadır: Uygulamanın dış görünüşü ile ilgili dış tasarım veya kullanıcı arayüz tasarımı. Verilerin ve yazılım modüllerinin içsel olarak yapısallaştırıldığı fiziksel tasarım. 
Kodlama
C, C++, C# veya Java gibi seçilmiş bir programlama dili kullanılarak, uygulamanın kodlamasıdır. Hazır paket yazılımlar kullanılmış olsa bile, bu paket yazılımlarda yeni uygulamanın gerektirdiği değişikliklerin yapılması gerekebilir. 
Doğrulama & Sağlama

Yazılım o andaki uygulama için geliştirilmiş olsun veya olmasın, sistemin gereksinimleri karşılayıp karşılamadığının testi gereklidir. Her safhanın sonunda yapılan test işlemine doğrulama (verification) denir. Projenin sonunda, müşteriye ürünü teslim etmeden önce yapılan test işlemine ise sağlama (validation) denir. 
Kurulum
Bazı sistem geliştiriciler, tasarımdan sonraki bütün proje sürecini gerçekleştirim olarak görmekte, bazıları ise sistem geliştirme bittikten sonraki kurulumu gerçekleştirim olarak görmektedir. İkinci durum, aynı zamanda veri dosyalarının ve sistem parametrelerinin belirlenmesi, kullanıcı kılavuzlarının yazılması ve yeni sistem kullanıcılarının eğitimini de içermektedir.  
Bakım & Destek 

Sistem kurulduktan sonra, oluşmuş hataların düzeltilmesi veya sistemdeki iyileştirmeler veya gelişmeler için devamlı bir bakım söz konusudur. Bakım ve destek aktiviteleri zaman zaman ayrı küçük yazılım projeleri gibi görülmelidir.  Bazı ortamlardaki yazılım geliştirme faaliyeti aslında bir bakım gibi değerlendirilebilir. 







Yazılım Proje Yönetimi Kapsamındaki Faaliyetler

Genellikle yeni bir sistemin geliştirilmesine yönelik olarak üç temel adım vardır:
Fizibilite Çalışması,
Planlama,
Projenin Yürütülmesi.

Fizibilite Çalışması
Proje çalışmasına başlanmasına karar verilen bir ön çalışmadır. Gereksinimler toplanır, geliştirme ve işletim giderleri ile yeni sistemin getirileri belirlenir. Büyük sistemlerdeki fizibilite çalışması ayrı bir proje gibi yürütülür. Yapılan çalışma, yazılım geliştirmenin gereklilik ve önceliklerinin belirlendiği bir stratejik planlama gibidir.  Fizibilite çalışması bir projeye başlamadan önce yapılan bir ön çalışmadır. Proje ile ilgili olarak yapılan bir ön değerlendirme olarak düşünülebilir. Geliştirilecek proje ile ilgili gereksinimler toplanır. Gereksinimleri ortaya çıkarma, başlangıçta karmaşık ve zor olabilir. Kurumsal paydaşlar, proje ile ilgili gerçekleştirmek istedikleri hedefleri biliyor olabilir, ama bunların başarılı olacağı hakkında emin olamayız. Geliştirme ve işletme maliyetleri ile yeni sistemin getirileri hesaplanır. Büyük sistemlerdeki fizibilite çalışması ayrı bir proje gibi yürütülür. Yapılan çalışma, yazılım geliştirmenin gereklilik ve önceliklerinin belirlendiği bir stratejik planlama gibidir. Bazen organizasyonlar, bir çok projeden oluşan bir geliştirme programını da fizibilite çalışması olarak değerlendirirler. 

Planlama
Fizibilite çalışması projenin yapılabilir olduğunu gösteriyorsa planlama çalışmalarına geçilir.Büyük bir proje için detaylı planlama baştan yapılmaz, proje o aşamalara geldikçe detaylı planlama yapılır.Bunun sebebi, proje aşamaları için daha doğru ve detaylı bilgiler ancak başlama aşamasına gelindiğinde elde edilir.

Projenin Yürütülmesi
Planlama aşamasını takiben projenin yürütülmesine geçilir. Projenin yürütülmesi tasarım ve gerçekleştirme alt safhalarını içerir.Planlama ve tasarım arasındaki fark: Planlama ürünler için yürütülmesi gerekli aktiviteleri içerir, tasarım ise kullanıcı arayüzü, iç mimari gibi dıştan görülen yüzünü içerir. Detaylı seviyede tasarım kararları planlama kararlarını etkilediği için bu iki kavram karıştırılmaktadır.

16 Ağustos 2013 Cuma

Sözleşme Yönetimi ve Teknik Proje Yönetimi

Kurum-içi projeler (in-house projects), kurumun ihtiyaçları  doğrultusunda kullanıcılar ile geliştiricilerin ortaklaşa çalışması sonucu ortaya çıkan projelerdir. Kurumlar bu tür projelerde genellikle sözleşmeli programcılardan yararlanırlar. Kurum ile geliştirici yazılım firması arasında sözleşme yapılmaktadır. 

Ayrıca kurumlar bu tür projeler için, hem yapılan sözleşmeyi denetleyecek hem de proje için teknik kararları alabilecek bir kişiyi “proje yöneticisi” olarak belirlemektedir.
Bu sayede geliştirilen projenin, müşteri gereksinimlerini karşılaması, zamanında ve bütçesinde tamamlanmasına çalışılır. 
Bir yazılım projesi,  geçerli yazılımın sadece yazılması ile ilgili değildir. Aslında, bir yazılım uygulaması hazır paket program olarak satın alınabilinir. 

Satın alınacak bu yazılıma ilişkin aktivitelerin, özelliklerin incelenmesi ve gerekli alt yapı çalışmalarının yapılması süreci de bir yazılım projesi olarak değerlendirilebilir. 

Yazılım Proje Yönetimi ile İlgili İstatistikler

Amerika’da Standish Group tarafından yapılan bir araştırmaya göre yazılım projelerinin:
%33’ü bitmeden iptal edilmekte,
%53’ünde maliyet tahminleri % 189 oranında aşılmakta, 
Proje süre aşımı ortalama olarak % 222 oranında olmaktadır.
Sebepler:
Hedeflerdeki belirsizlikler,
Kötü planlama,
Teknolojideki yenilikler, 
Proje yönetim yöntemi eksikliği,


Proje Yönetiminin Popülerliği ve Diğer Projelerden Farkları

Proje yönetiminin son yıllarda  popülaritesinin artmasının bazı nedenleri: 
Firmalarda çalışan insan kaynağında azalma olmasına rağmen, ortaya çıkarılan işlerin niteliğinde ve kalitesindeki artış (teknolojik  gelişmelerin etkisi),
Projelerin daha kapsamlı olmaya başlaması, 
Küreselleşmenin getirdiği rekabet ortamı, 
İletişimin daha kolaylaşması, 
Pazarın genelini devamlı takip eden ve üreticilerin istekleri doğrultusunda yönlendirilebilen müşterilerin etkisi, 
Çok uluslu iş yapma olanaklarındaki artış, 
Gelişmeleri merkezden düzenli olarak izleyebilme ve gerekirse müdahale edebilme isteği.

Yazılım Projelerinin Diğer Projelerden Farkları 

Yazılım projelerini diğer projelerden ayıran özellikler: 
Görünmezlik (Invisibility): Bina, köprü gibi bir inşaat projesi yapıldığı sırada görünürdür, ancak bir yazılım projesi görünür değildir. Yazılım proje yönetimi, görünürlüğü görünmezlik yapan bir süreç  alarak görülebilir. 
Karmaşıklık (Complexity): Yazılım ürünleri yapılan harcamalar göz önünde bulundurulduğunda, diğer projelere göre daha karmaşıktır. 
Uygunluk (Conformity): Fiziksel sistemler belli malzemeler kullanılarak yapılır, ancak hepsinin sabit belli kuralları vardır. Yazılım projelerinde amaç müşteri istekleri ile uygunluktur. 
Esneklik (Flexibility): Yazılım ürünlerinde kolayca değişiklik yapılabilmesi esneklik sağlar. Güç olarak görünen bir yazılımı değiştirmek kolaydır. 
Genelde proje yönetim tekniklerinin çoğu, aynı zamanda yazılım proje yönetimi için uygulanmaktadır. Ancak 
Fred Brooks yazılım projelerini diğer projelerden ayıran bazı karakteristik özellikler tanımlamıştır. 

Esneklik Özelliğinin Devamı: 

Proje Yönetimi Nedir?

Proje yönetimi, proje hedeflerine ulaşmak için maliyet, zamanlama ve kalite kriterlerinin göz önünde bulundurularak, mühendislik aktivitelerinin doğru olarak planlanması ve denetimi işlemleridir. Her projenin başarılı olabilmesi için ; Zamanında tamamlanması, Kendisi için tanılanan bütçe dahilinde tamamlanması, Başından itibaren şart koşulan performans gereklerini yerine getirmesi gerekmektedir. Proje yönetimi, performans, maliyet ve zaman hedeflerine ulaşabilmek için eldeki kaynakları en verimli bir şekilde programlama ve proje aktivitelerini kontrol etme sürecidir.

Proje Yönetimi ile İlgili İstatistikler
A.B.D. projelere her yıl $2.3 trilyon harcamaktadır.
Tüm dünyada ise yaklaşık $10 trilyon harcanmakta.
Ortalama bir proje yöneticisi yılda $82,000 kazanıyor.
Proje İşletmeciliği Enstitüsü (PMI), 1969 yılında kurulmuştur. 1990 yılına kadar 7.500 üyesi varken 5 yıl sonra 17.000’nin üzerinde üyesi olmuştur. 2001 yılına kadar 86.000 üyeye sahip olup, günümüzde bu rakam 100.000 üyeyi geçmiştir.