başarılı yazılım projelerinin sırrı: değişimi kucaklamakextreme programming Öncelikli...

40
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

Upload: others

Post on 08-Aug-2020

9 views

Category:

Documents


0 download

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/