Top Banner
Başarılı Yazılım Projelerinin Sırrı: Değişimi Kucaklamak http://enveraltin.com/ - [email protected] 3 Mart 2007 – Bilgi Üniversitesi Özgür Yazılım ve Açık Kaynak Günleri
40

Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

Aug 08, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

Başarılı Yazılım Projelerinin Sırrı:Değişimi Kucaklamak

http://enveraltin.com/ - [email protected]

3 Mart 2007 – Bilgi Üniversitesi Özgür Yazılım ve Açık Kaynak Günleri

Page 2: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 2

Doğru yok!✔ Bu sunumda mutlak doğru herhangi bir bilgi

yok, bu dahil. Beni sorumlu tutmayın!✔ Evde deneyebilirsiniz.✔ Kötü örneklerden edinilen tecrübe...✔ Başarı ne demek?✔ Bu konudaki ilk sunum denemem :-)

Page 3: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 3

Sunum kimler için?

✔ Yazılım geliştiriciler✔ Proje yöneticileri✔ Yazılım geliştiricilerin işverenleri✔ Yazılım projelerinin müşterileri

Page 4: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 4

Özet

✔ Biraz psikoloji, biraz tarih, biraz teori✔ Geleneksel yazılım geliştirme süreçleri✔ Canlı yayın kötü örnek: birlikte üretelim✔ Çevik geliştirme süreçleri✔ İletişim ve işbirliği kültürü

Page 5: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 5

Bir yazılımcının psikolojisi

✔ Sanatkâr mı, zanaatkâr mı?✔ Mühendis mi, bilim adamı mı?✔ Bir sonraki zor soruna meydan okumak✔ Çay/kahve/alkol bağımlı, uykuya düşman,

gözlüklü göbekli, insan ilişkilerinde sorunlu✔ Sistem yöneticisinden ne farkı var?✔ İlerleyen yaşlarda memuriyet

Page 6: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 6

Biraz tarih

✔ Yarım asırlık yazılım seceresi✔ NATO Yazılım Mühendisliği Konferansı'nda

“yazılım krizi” tanımı (1968)✔ Yazılım geliştirme süreçlerini mühendislik

disiplinine benzetme çabaları✔ İnsanoğlu entropiye direniyor mu?

Page 7: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 7

Proje planlama

✔ Yeni bir terim, 2. dünya savaşından bu yana kullanılıyor.

✔ Türkiye'de ilk defa (bugün de en etkin kullanan) 1950'lerde inşaat sektöründe kullanılmış; pek değişmemiş.

✔ Önce plan, plana göre faaliyet.

Page 8: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 8

Geleneksel süreç: Şelale modeli

Planlama Analiz Tasarım Geliştirme Uygulama

Page 9: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 9

Şelale modeli (2)

✔ Projede sürpriz olmayacağından eminsek, işin tamamını biliyorsak, değişme ihtimali yoksa uygulanması makul.

✔ Paralel yürüyen çok fazla proje varsa, personel projeler arasında sürekli yer değiştiriyorsa uygulanması makul.

Page 10: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 10

Spiral model

Sonraki aşamalarıplanla

Hedefleri, alternatifve sınırlamaları belirle

Alternatifleri değerlendir,riskleri belirle ve çöz

Sonraki adımıgeliştir

Prototip

Kavram

Gereksinimler

Tasarım

Geliştirme

Page 11: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 11

Spiral model (2)

✔ 1988'de Barry Boehm tarafından geliştirildi✔ Daha uzun süreli, gereksinimlerin belirli

ölçüde kontrol altında olduğu ve değişikliklerin sınırlı olduğu projeler için

✔ Proje ekibi hedef ürün hakkında bilgi ve tecrübeye sahip değilse makul

✔ İlk yinelemeli geliştirme süreci

Page 12: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 12

Canlı yayın kötü örnek

✔ Bir müşteri bulalım.✔ Hedefleri ve gereksinimleri belirleyelim.✔ Gerçek dünya etkenleri :-)✔ Tuz, biber ekleyelim.✔ Sonuçları değerlendirelim.✔ Aynı hataları tekrarlıyor muyuz?

Page 13: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 13

Gerçek dünya etkenleri

✔ Gereksinimler değişir✔ Müşteri değişir, müşterinin fikirleri değişir✔ Proje ekibi veya ekipteki bireyler değişir✔ Teknoloji ve araçlar değişir

Page 14: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 14

Başarı nedir?

✔ Bir yazılım projesinin başarılı olup olmadığının temelde 2 ölçüsü var:✔ Yönetim başarısı: Ürünü zamanında,

bütçeye uygun maliyetle ve kabul edilebilir kalite ile teslim etmek.

✔ Ürün başarısı: Ürünün müşterinin hedeflerine olan etkisinin beklentileri karşılaması.

Page 15: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 15

Kıvrak (Agile) Süreçler

✔ Bireyler ve etkileşimler, süreçler ve araçlardan;

✔ Çalışan yazılım, kapsamlı belgeden;✔ Müşteri ile işbirliği, sözleşme

pazarlığından;✔ Değişimi karşılamak, bir planı

izlemekten daha değerlidir.

Page 16: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 16

Değişimi kucaklamak

✔ Değişimi kabullenmek ve bununla yaşamaya alışmak önemli.

✔ Bugün için tasarlamak ve geliştirmek.✔ Değişimin sonuçları.✔ Herkes haberdar olmalı.

Page 17: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 17

Değişimle yaşamak

✔ En kolay çözüm: yinelemeli süreçler✔ Kendi içinde analiz, tasarım, geliştirme,

test ve uygulama süreçlerini barındıran daha kısa süreli (1 hafta-1 ay) adımlar

✔ Sıklıkla hazırlanan ve yalnızca tamamlanmış işlevleri içeren sürümler.

✔ Sürekli iletişim ve geri besleme.

Page 18: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 18

Yinelemeli süreçler

Kapsam Plan

Yineleme

Sürüm

Test

Tasarım Geliştirme

Düzeltme

Page 19: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 19

Çevik süreçler: Temel kavramlar✔ Görevleri değil, işlevleri tamamlıyoruz.

✔ Değişimi engellemek yerine ona uyum sağlıyoruz.

✔ Yazılımın çalışması, belgelenmesinden daha önemli.

✔ Yineleme adımlarını kararların zamanında verilmesini ve doğru önceliklendirmeyi sağlamak için kullanıyoruz.

✔ Planlama ve süre tahmini takım işidir, bir proje yöneticisi bu işleri tek başına yapmamalıdır.

✔ Geri besleme projenin gelişimi boyunca sürekli olarak sağlanmalı, projenin sonunda gelen yorumlar yararlı değil!

✔ Hiçbir süreç iyi insanların yerini alamaz.

Page 20: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 20

Extreme Programming✔ Öncelikli olarak yazılım geliştiriciyi hedefleyen tek

çevik geliştirme süreci.✔ Geliştirici odaklı; test bağımlı.✔ Bir XP takımında herkes geliştirici olabilir (müşteri,

analist, test ekibi, yönetici...)✔ İkili/çift programlama.✔ Sürdürülebilir hız.✔ Müdahil müşteri; küçük ve bir arada

çalışan takımlar.

Page 21: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 21

Scrum✔ Yönetim odaklı, belirsiz ve deneysel süreç.✔ Geliştirme sürecinin hedef ürünü etkileyen tüm yönlerini

müşteriye görünür kılıyoruz.✔ Müşterinin ürünü sıklıkla ve düzenli olarak incelemesini

olanaklı kılıyoruz.✔ İncelemelerde kabul edilebilir sınırların dışında bir sapma

bulursak müşterinin veya projenin yeni duruma uyması gerek.

✔ Geliştiricilerin günlük işlerine karışmıyor.✔ Sıklıkla XP ile birlikte kullanılıyor.

Page 22: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 22

Diğer popüler metodolojiler

✔ Crystal/Crystal Clear✔ Feature-Driven Development✔ Adaptive Software Development✔ Lean Software Development✔ Dynamic Systems Development Method

Page 23: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 23

Page 24: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 24

Ne zaman çevik olmalı?

✔ Proje hedefi kritik değilse (insan hayatı)✔ Geliştiriciler tecrübeli ise✔ Gereksinimler sık sık değişiyorsa✔ Takım çok büyük değilse (<20)✔ Kaos altında daha iyiye giden bir kurum

kültürü varsa, düşünmeyin bile!

Page 25: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 25

Ne zaman geleneksel yola gitmeli?✔ Proje hedefi insan hayatını etkiliyorsa✔ Geliştiriciler tecrübeli değilse✔ Gereksinimler büyük ölçüde belliyse ve pek değişmiyorsa✔ Takım büyükse (>20)✔ Kurum kültürü düzen emrediyorsa... geleneksel yoldan

gidiyormuş gibi yapmak uygun olabilir :-)

Page 26: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 26

Nasıl çevik olunur?✔ Kaynak kod yönetim sistemi kullanarak.✔ Yapılacak işleri ortak bir yere kaydederek.✔ Kaynak kodun derlenmesi ve sürüm hazırlanması

işlemlerini otomatik hale getirerek.✔ Yazılımın bir test sistemi üzerine kurulması işlemini

otomatik hale getirerek.✔ Geliştiricilerin çalıştıkları kod parçalarını

düzenli olarak bir araya getirerek.

Page 27: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 27

Nasıl çevik olunur? (2)

✔ Basit tasarım.✔ Düzenli temizlik: refactoring.✔ İkili/çift programlama.✔ Kod tabanına ortaklaşa sahip çıkmak.✔ İşlevler veya işlev grupları için küçük

takımlar oluşturmak.✔ Birim testleri kullanmak.

Page 28: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 28

Test-güdümlü geliştirme

✔ Alışması biraz zor ;-)✔ İşlevleri tasarlamadan önce, nasıl test

edileceklerini belirlemek ve işlevi test edecek kodları yazmak gerek.

✔ Tasarımda basitlik, yeniden kullanılabilir kod tabanı getiriyor.

✔ Özellikle çalışanların sık sıkdeğiştiği takımlarda hayat kurtarabilir.

Page 29: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 29

Page 30: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 30

Çevik olmayan yönetim✔ Şelale yaklaşımında proje oldukça detaylı ve

kapsamlı bir planlama ile başlıyor.✔ Proje yöneticisi plan ve projenin gerçek durumu

arasındaki farkı kapatabilmek için bolca zaman harcar, sonunda vazgeçer.

✔ Plan zıvanadan çıkar, işe yaramaz eski bir döküman haline gelir.

Page 31: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 31

Çevik yönetim✔ Başlarken basit ve üstü kapalı bir plan.✔ İlk sürüm için işaretlenmiş işlev listesi.✔ Her yinelemeden önce takım kendisine bir miktar

iş seçer. Bu seçim sırasında geliştirme hızı hesabı kullanılır.

✔ Projenin yaşam süreci boyunca planlama, değerlendirme ve ölçme faaliyetleri.

✔ Bir işlev ya tamamdır, yada değildir.(“70% bitti” için tebrik yok)

Page 32: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 32

İşlevlerin yönetimi

✔ Tüm işlevler listelenir, 4 seviye (mutlak gerekli, eklenmesi iyi olur, mümkünse yapalım, önemsiz) kullanılarak önceliklendirilir ve sıralanır.

✔ İşlevsel olmayan gereksinimler (teknik ve sanatsal işler) de birer işlev gibi önceliklendirilir ve plana eklenir.

Page 33: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 33

Süre tahmini

✔ Bir iş için süre tahminini mutlaka işi yapacak olan kişi yapmalı.

✔ Süre tahminleri saklanmalı ve işler tamamlandıktan sonra olası sapmalar ölçülmeli.

✔ Ölçme sayesinde projede çalışanlar zamanla daha belirgin tahminler yapabilmeye başlıyorlar.

Page 34: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 34

Bitmiş işin tanımı

✔ Birim testleri olan ve bu testleri geçen✔ Varsa kullanıcı kabul testlerini karşılayan✔ Kurulmaya ve kullanılmaya hazır✔ Mümkünse/gerekliyse belgelenmiş

Page 35: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 35

Bir projeye başlarken

✔ Projenin görevi tanımlanmalı.✔ Proje ürününün sağlayacağı işlevler listesi✔ İlk sürüm planı

İşlev Hedef süre Yineleme SürümGeliştirme ortamı 5 gün 1 1Görev listesi ekranı 2 gün 1 2... ... ... ...

Page 36: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 36

Çevik müşteri✔ İş alanını iyi bilmeli.✔ Geliştirilecek sistemin amacını hem bir kullanıcı olarak,

hem de stratejik ve organizasyonel olarak anlamalı.✔ Proje takımı müşteriye kolaylıkla erişebilmeli, birlikte

çalışabilmeli, yeterince zamanı olmalı.✔ Karar vermekte istekli ve yetkili olmalı, verdiği kararların

sorumluluğunu almalı.✔ Mükemmeliyetçi olmamalı.✔ Bir de politik beceri sahibi olsa harika olur!

Page 37: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 37

İletişim kültürü oluşturmak✔ Kararları fikir birliği ile vermek.✔ Birlikte ve yakın çalışma ortamı.✔ Önemli bilgileri görünür bir yere asmak.✔ Tepeden tırnağa açık fikirlilik.✔ Az konuşup çok dinlemek.✔ Çok konuşup az e-posta göndermek.✔ İnsanlara çalışacak zaman vermek.✔ Günlük veya günaşırı kısa toplantılar (kötü haber, hiç

haber gelmemesinden iyidir).

Page 38: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 38

Belgeleme✔ Gerekliliğini sorgulamak gerek.✔ Mümkün olan en basit çözüm, en iyisidir.✔ Bir kere okunup unutulacaksa eğitim önermek.✔ Kurumsal onay/imza mekanizmaları...✔ Belgeleme işlerini de bir işlev gibi proje planına eklemek.✔ Javadoc veya Wiki?✔ Belgeyi isteyenleri belgeleme işine ortak etmek.✔ Başka birine yaptırmak? Hmm...

Page 39: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 39

Çevik projeler için İK süreci

✔ İletişim ve işbirliği yapabilme becerisi✔ Dürüstlük.✔ Alçakgönüllülük✔ Merak✔ Öğrenme arzusu

Page 40: Başarılı Yazılım Projelerinin Sırrı: Değişimi KucaklamakExtreme Programming Öncelikli olarak yazılım geliştiriciyi hedefleyen tek çevik geliştirme süreci. Geliştirici

03/03/07 Slide 40

Kaynaklar

✔ Integrating Agile Development in the Real World, Peter Schuh.

✔ Agile Software Development, Alistair Cockburn.

✔ Agile Project Management with Scrum, Ken Schwaber.

✔ http://www.agilealliance.org/