580 likes | 994 Views
YALIN YAZILIM Geliştirme. Gürcan Banger Sanayi Geliştirme Merkezi – SANGEM Genel Koordinatörü Yrd. Doç. Dr. Gülsüm Çalışır Gümüşhane Üniversitesi İletişim Fakültesi. Yalın Düşünce. “Bütün yeteneklerin en değerlisi, tek bir sözcüğün yeterli olduğu yerde iki sözcük kullanmamaktır.”
E N D
YALIN YAZILIM Geliştirme Gürcan Banger Sanayi Geliştirme Merkezi – SANGEM Genel Koordinatörü Yrd. Doç. Dr. Gülsüm Çalışır Gümüşhane Üniversitesi İletişim Fakültesi
Yalın Düşünce “Bütün yeteneklerin en değerlisi, tek bir sözcüğün yeterli olduğu yerde iki sözcük kullanmamaktır.” Thomas Jefferson (1743-1826) ABD 3. Başkanı Bağımsızlık Bildirisi Yazarı G. Banger - G. Çalışır
Yalın Yazılım Yalın Yazılım Geliştirme Unsurları Yalın Araçlar Yalın İlkeler G. Banger - G. Çalışır
Yalın Düşünce / Üretim • Anahtar niteliğindeki yalın faaliyet; • bir süreci adımlara ayırmak, • değer üreten adımları ve • değer üretmeyen adımları (atık, fire veya israf üreten adımları) ayırt etmektir. • Hedef; atığı (israfı ve fireyi) yok etmek ve değer üreten adımları iyileştirmektir. G. Banger - G. Çalışır
Yalın Düşünce / Üretim Üretim Süreci Değer üretmeyen ATIK adımları Değer üreten adımlar Değer üretmeyen gerekli DESTEK adımları G. Banger - G. Çalışır
Yalın Üretim İlkeleri • Yalın üretim ilkeleri: • Değer: Müşteri ve / veya kullanıcı tarafından tanımlanan değer; • Değer akımı: Ürünü üretmek için değer yaratan adımlar; • Akış: Üretim sürecinin sürekli akacak biçimde tasarlanması; • Çekiş: Ürünün müşteri tarafından istenmesi, sipariş edilmesi; • Mükemmellik: Atığı yok ederek mükemmelliğin sürekli hale getirilmesi. L E A N PRODUCTION G. Banger - G. Çalışır
Yazılımda Yalın İlkeler Yalın yazılım geliştirme ilkeleri: • Atığı / israfı / fireyi yok et, • Öğrenmeyi güçlendir, • Mümkün olduğunca geç karara bağla, • Mümkün olan en kısa sürede üret ve teslim et, • Takımı güçlendir, • Bütünlüğü sağla ve yerleştir, • Bütünü gör. G. Banger - G. Çalışır
Yalın Düşünce “İyimserlik, yazılım geliştirmede mesleki bir tehlikedir.” Kent Beck Yazılım mühendisi ExtremeProgramming geliştiricisi Agile Manifesto (2001) yazarlarından G. Banger - G. Çalışır
Atığı yok et Hibbs, Jewett, Sullivan; The Art of Lean Software Development; 2009 G. Banger - G. Çalışır
Atığı yok et Bilgi kaybı Geleneksel “Çağlayan Geliştirme Modeli” G. Banger - G. Çalışır
Yalın Düşünce “Her şey, olabildiği kadar basit olmalıdır, ama asla daha fazla değil.” Albert Einstein (1879-1955) Alman kökenli ABD’li fizikçi Genel Görelilik Kuramı kurucusu G. Banger - G. Çalışır
Atığı yok et • Bir ürüne, müşteri tarafından algılanabilen DEĞER katmayan şeye ATIK ( muda ) denir. • ATIK kavramı, • gereksiz kod ve işlevleri, • yazılım geliştirmedeki gecikmeleri, • iyi tanımlanmamış ihtiyaçları, • kayıt-kuyut işlerini ve bürokrasiyi, • yavaş iç iletişimi içerir. G. Banger - G. Çalışır
Atığı yok et • Atık / İsraf / Fire türleri: • Hatalar: Kaynakta yok edilmesi gereken sorunlar, • Aşırı üretim: İstenmeyen özelliklerin üretilmesi, eklenmesi, • Taşıma: Gereksiz iş aktarmalar ve taşımalar, • Bekleme: Bir başka işin veya sürecin tamamlanmasını bekleme, • Envanter: Bekleyen kısmen tamamlanmış işler, • Hareket: Kişilerin veya malzemelerin sürecin başarılması açısından gereksiz, amaçsız ve katmayan hareketleri, • Aşırı işleme: Müşteri tarafından ihtiyaç duyulmayan aşırı süreçleme / işleme, • İnsan kaynağının tam olarak değerlendirilememesi. G. Banger - G. Çalışır
Atığı yok et • Örnek 1: Eğer yazılım geliştiriciler, müşterinin ihtiyaçlarını aşan bir kod yazdılarsa bu, bir israf örneğidir. • Örnek 2: Yazılım geliştirmede kodun ve dokümanların biteviye değişik takımlar arasında gidip gelmesi bir başka israf örneğidir. • Örnek 3: Kullanılmamak üzere yarıda bırakılmış kod bir diğer israf örneğidir. G. Banger - G. Çalışır
Atığı yok et • Örnek 4: Müşteriler tarafından kullanılmayan fazladan süreçler ve özellikler, israf olarak kabul edilmelidir. • Örnek 5: Başka faaliyetleri, takımları veya süreçleri beklemek israf sayılır. • Örnek 6: Hatalı ürünler veya düşük kalite, israfa başka örneklerdir. • Örnek 7: Gerçek değer üretmeyen yönetim giderleri (genel giderler) israftır. G. Banger - G. Çalışır
Atığı yok et • Atığı yok edebilmek için tanımlamak ve görmek gerekir. • Atığı ayırt etmek ve tanımlamak için değer akım haritalama tekniği kullanılır. • Bu teknik sayesinde atık kaynakları tespit edilir ve atık, israf veya fire yok edilir. G. Banger - G. Çalışır
Atığı yok et Değer Akım Haritası G. Banger - G. Çalışır
Öğrenmeyi güçlendir • Yazılım geliştirme ortamını iyileştirmede en etkili yaklaşım öğrenmeyi güçlendirmedir. • Yazılım hatalarının birikimi, kodun yazımının hemen ardından sınamaların yapılması ile önlenebilir. • YAZ ve ardından SINA !... G. Banger - G. Çalışır
Öğrenmeyi güçlendir 1 2 3 SINA 1 2 3 G. Banger - G. Çalışır
Öğrenmeyi güçlendir • Aşırı dokümantasyon veya çok ayrıntılı planlama yerine değişik kod yazma ve yazılım inşası yaklaşımları denenebilir. • Müşterinin ihtiyaçlarını öğrenmek ve şartlarını daha hızlı yerine getirmeye yönelik bilgi toplama sürecinde; kullanıcı ekranlarını (arayüzlerini) anında paylaşmak ve geri bildirim almak kolay ve yararlı bir yoldur. G. Banger - G. Çalışır
Öğrenmeyi güçlendir • Öğrenme süreci, kısa ardıştırmalı (iteratif) döngülerle hızlandırılabilir. • İçsel yapıyı değiştiren ama dışsal davranışı değiştirmeyen refactoring ile yazılmış modüllerin bir grup halinde sınandığı integration testing yaklaşımları, bu ardıştırmalı döngülere eklemlenebilir. G. Banger - G. Çalışır
Öğrenmeyi güçlendir 1 2 3 Ardıştırmalı döngüler: Refactoring ve integration testing G. Banger - G. Çalışır
Müşteri ve kullanıcılarla yapılacak sık ve kısa geri bildirim seanslarından elde edilecek bilgiler, geliştirme sürecinin mevcut aşamasını ve gelecek iyileştirme çabalarını kolaylaştırır. Öğrenmeyi güçlendir Yazılımcı Müşteri / Kullanıcı G. Banger - G. Çalışır
Kısa müşteri / kullanıcı ziyaretleri sırasında müşteri temsilcileri ve yazılım geliştiriciler, kaynak sorunları öğrenirler ve yeni geliştirmeler için olası çözümler konusunda bilgilenirler. Öğrenmeyi güçlendir Yazılımcı Müşteri / Kullanıcı G. Banger - G. Çalışır
Bu ziyaretlerde müşteri ve kullanıcılar da yazılım geliştirme çabalarına bağlı olarak kendi ihtiyaçlarını daha iyi kavrarlar. Öğrenmeyi güçlendir Yazılımcı Müşteri / Kullanıcı G. Banger - G. Çalışır
Öğrenmeyi güçlendir • Yazılım geliştirmenin en önemli sorunlarından birisi ürünün geleceğinin (hatta bir sonraki aşamasının) açık ve net olarak görülememesidir. • Bu belirsiz (bulanık) durumun ana kaynağı, geliştirilmekte olan ürünün geleceğine ilişkin bilgi ve deneyimimizdeki boşluklardır. …kod… ? G. Banger - G. Çalışır
Öğrenmeyi güçlendir • Bu boşluklar, geliştirmenin daha sonraki aşamalarında “pahalıya mal olacak” tasarım ve geliştirme geri dönüşlerine neden olur. • Bu durumu aşmanın anahtar faaliyetlerinden birisi müşteri ve kullanıcı ile iletişim ve ilişki içinde olmaktır. …kod… ? G. Banger - G. Çalışır
Öğrenmeyi güçlendir • Burada sözü edilen ilişki ve iletişim, sadece mevcut çözümlere odaklanmaz. • Müşteri ve kullanıcı ile iletişim halinde geleceğe yönelik çözümlerin şart ve kısıtlarını aşacak imkânlar ve kolaylıklar bulmaya çalışır. • Bu yaklaşıma küme tabanlı öğrenme (set-based learning) adı verilir. …kod… ? G. Banger - G. Çalışır
Öğrenmeyi güçlendir Birlikte geliştirebileceğimiz yaklaşımlar, müstakbel ihtiyaçlarınızı tatmin edecek çözümler… Gelecekteki ihtiyaçlarımız, müstakbel sorunlarımız… Küme temelli öğrenme ( Set-based learning ) ortamı Yazılım geliştirici Müşteri / Kullanıcı G. Banger - G. Çalışır
Geç karara bağla • Yazılım geliştirme süreci, birtakım belirsizlikleri içerir. • Bu nedenle başarılı sonuçlar elde etmek için seçenek temelli (seçenekleri değerlendiren) yaklaşımlar kullanılmalıdır. • Yazılım projesini varsayımlar ve öngörüler üzerine kurmak yerine; gerçekler belirleninceye kadar bazı bağlayıcı kararları geciktirmek gerekebilir. Option-based Approach G. Banger - G. Çalışır
Geç karara bağla • Yazılım projesinin karmaşıklık düzeyi arttıkça, projeye daha fazla değişebilme kapasitesi verilmelidir. • Bağlayıcı kararların olabildiğince geciktirilmesi, projenin değişebilme kapasitesini ve yeteneğini artırır. • Az önce sözü edilen ardıştırmalı döngüler yaklaşımı da bu fikri destekler. Kararların Zamanlaması G. Banger - G. Çalışır
Geç karara bağla • Bazı önemli kararların geciktirilmesindeki ana fikir, müşterilerin ve kullanıcıların gerçek ihtiyaçlarının farkına varmaları için zamana ihtiyaç duymalarıdır. • Bazı kararların geç verilebilmesi için bir çevik yazılım geliştirme (agile software development) yaklaşımının yaratılmış olması gerekir. ÇEVİK YAZILIM G. Banger - G. Çalışır
Geç karara bağla • Çevik yazılım geliştirme ortamı (agile software development environmant), müşteri ve kullanıcıların ihtiyaçlarını daha iyi belirlemeleri açısından bağlayıcı kararların geciktirilebilmesine imkan tanır. • Böylece aceleyle alınmış yanlış teknolojik yatırımların da önüne geçilmiş olur. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Hızlı teknoloji evrimleşmesi çağında kalıcı ve sürdürülebilir olan, en hızlı ve çevik olandır. • Bir ürün minimum (önemsiz) hata ile üretilip teslim edilebilirse, hızlı biçimde geri bildirim alınır; ek ihtiyaçlar ve talepler bir sonraki ardıştırma (iterasyon) ile ilişkilendirilebilir. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Hızlı ve çevik olamadan bağlayıcı kararların geciktirilmesi mümkün olmaz. • Hız, müşterinin ve kullanıcının dün ne istediğini değil; bugünkü gerçek ihtiyaçlarını karşılamayı güvence altına alır. • Müşteri, gerçek ihtiyaçlarını açıklıkla öğrenecek ve bilecek; geliştirici, bunlara hızla ve çeviklikle çözüm üretecektir. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Tam Zamanında Üretim (Just In Time) yaklaşımı, yazılım üretiminde de uygulanabilir. • Bu amaçla kendini yönetip denetleyebilen takımlar oluşturmak gerekir. • Bu takımlar, projeyi görev parçaları halinde gerçekleştirirler. G. Banger - G. Çalışır
Hızlı üret ve teslim et Hızlı üretim, tam zamanında teslimat ve israfın azaltılması, değer akım sürecini / süresini kısaltır. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Yalın yazılım geliştirme süreci: • Müşteri, yazılım ürününü belirleyen ihtiyaçlarını iletir. • Geliştirme ekibi, ürünü görev parçalarına ayırır. Her parçanın ayrı bir kart (kanban) üzerine yazıldığını düşünebilirsiniz. • Kart üzerinde işin gerektirdiği girdiler ve zamanlama belirtilmiştir. • Her takıma bir kart (iş) verilir. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Her takım elemanı her sabah ayakta yapılan bir toplantıda bir gün önce yaptıklarını anlatır, o gün ve ertesi gün yapılacak işleri özetler, çalışma arkadaşlarından veya müşteriden sağlanacak girdileri belirtir. • Böylece bir yandan takım içi saydamlık sağlanırken diğer yandan takım içi iletişim geliştirilmiş olur. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Toyota Ürün Geliştirme Sistemi ile yazılım geliştirme (Küme tabanlı tasarım, set-based design): • Her iş parçası (kanban) için en az üç takıma potansiyel çözüm geliştirme görevi verilir. • Böylece her takım problem uzayını öğrenir ve bir potansiyel çözüm geliştirir. • Geçersiz bulunan çözüm(ler) elenir. G. Banger - G. Çalışır
Hızlı üret ve teslim et • Eleme sonrası kalan çözümler karşılaştırılır ve bir tanesi uygun olarak belirlenir. • Uygun çözüm seçeneği üzerinde açık görüşme açılarak iyileştirme önerileri geliştirilir. • Geliştirilen çözüm, bunu geliştirecek takıma verilir. G. Banger - G. Çalışır
Takımı güçlendir • İcranın (yönetimin) başarısı, ayrıntıları doğru elde etmekten geçer. • Doğru ayrıntıları ise en iyi o işi gerçekten yapanlar anlar. • Mükemmeliyete ulaşmak için geliştiricileri teknik kararların ayrıntıları ile ilişkilendirmek temel önemdedir. G. Banger - G. Çalışır
Takımı güçlendir • Geliştirici ekibin (takımların) gerekli uzmanlıkla donatıldığı ve doğru liderlikle yönetildiği durumda; ekip, daha iyi teknik kararlar ve daha iyi süreç kararları verebilir. • Yalın yazılım üretiminde temel yaklaşım, bağlayıcı kararların geç alınması ve üretim ile teslimatın hızlı ve çevik olması nedeniyle tüm işlerin merkezî otorite tarafından yönetilmesi mümkün olmaz. G. Banger - G. Çalışır
Takımı güçlendir • Yalın uygulama; iş planlaması yapmak için çekiş (pull) teknikleri kullanır; çalışanların sonraki adımda ne yapılacağını bilmeleri için yerel sinyal mekanizmalarından yararlanılır. (Kanban sistemi) G. Banger - G. Çalışır
Takımı güçlendir • Yalın yazılım geliştirmede; çekiş mekanizması, çalışan yazılımın iyileştirilmiş sürümlerinin düzenli aralıklarla sunulması konusunda bir anlaşmadır. • Yerel sinyal sistemi; görünür çizelgeler, günlük toplantılar, kısmî ve kapsamlı yazılım sınamaları ile gerçekleştirilir. G. Banger - G. Çalışır
Bütünlüğü sağla, yerleştir • Kullanıcının bir ürün hakkında “Evet; benim istediğim tam da bu…” şeklindeki algılaması durumunda; o sistemin bütünlüğe sahip olduğu söylenir. Buna algılanan bütünlük adı verilir. • Pazar payı, algılanan bütünlüğün kaba bir ölçümüdür. G. Banger - G. Çalışır
Bütünlüğü sağla, yerleştir • Kavramsal bütünlük; sistemin merkezî kavramlarının düzgün ve kaynaşmış bir bütün olarak birlikte çalışmaları anlamına gelir. • Kavramsal bütünlük, algılanan bütünlüğün sağlanmasında kritik önemdedir. G. Banger - G. Çalışır
Bütünlüğü sağla, yerleştir • Yazılım ürünü, bir başka bütünlük düzeyi daha gerektirir. • Yazılım, yararlılığını zamana yaygın olarak sağlamalıdır. • Yazılımın zamana uyum göstererek evrimleşmesi beklenir. • Ölçütler: Kaynaşık mimari, yararlılık, amaca uygunluk, onarılabilme, uyumluluk, genişleyebilirlik… G. Banger - G. Çalışır
Bütünü gör • Geliştirme süreci boyunca küçüklü büyüklü hatalar birikerek yazılım son ürününde tanımı ve çözümü zor sorunlara yol açarlar. • Büyük işlerin küçük parçalara bölünmesi ve farklı geliştirme aşamalarının standartlaştırılması ile hataların kaynak nedenleri bulunabilir ve önlenebilir. G. Banger - G. Çalışır
Bütünü gör Bütünü Gör !... ÖRNEK: Ishikawa ( Kılçık ) Diyagramı G. Banger - G. Çalışır