“Unit Testing” Sunumu

EFT Software’de çalışırken, “unit test” yazma konusundaki deneyimlerimizi geliştirme takımının geri kalanıyla paylaşmak için hazırladığımız “Unit Testing & Spring Test Framework – Testing Software From Developers’ Point-of-View” başlıklı sunuma aşağıdaki bağlantıdan erişebilirsiniz:

http://slides.com/ufukuzun/unit-testing-extended

Screen Shot 2017-04-19 at 00.30.54

 

Reklamlar

“Systems Thinking”, yine mi sen!

Son aylarda katıldığım yada internetten izlediğim sunumlarda sıkça rastlamaya başladım “Systems Thinking” (Sistem Düşüncesi) kavramına. Biri “Hangi Agile?”, biri “Strategic Growth Hacking”, bir diğeri “One Hacker Way” başlıklı sunumlarda, hiç beklemediğim anda bu kavram çıkıverdi karşıma.

İlki Erik Meijer’in “One Hacker Way” sunumuydu:

Erik Meijer sunumunda bir noktadan itibaren matematiğin öneminden konuya girip Computer Science ve “Systems Thinking” (Control Theory) ilişkisini anlatmaya başlıyor, ve üniversitelerin Computer Science bölümlerinde neden “Systems Thinking” konusunun anlatılmadığından yakınıyor. Özetle; yazılımların geri bildirim döngüleri (feedback loops) ışığında geliştirilirlerse başarılı olabileceklerini söylüyor.

Sonraki, İTÜ Çekirdek’te katıldığım “Strategic Growth Hacking” sunumuydu. Kılıçhan Kaynak uzun yıllar Amerika’da yaşamış, girişimler kurmuş ve batırmış (kendi ifadesiyle) birisi. Sonra oturup düşündüğünde ve araştırdığında aradığı cevabı “Systems Thinking” yaklaşımında bulmuş. Sonra bu birikimini “The Spaghetti Startup: A Tale of Startup Survival or How to Achieve Radical Growth with Systems & Design Thinking” adlı kitabı yazarak ve girişimcilere/girişimci adaylarına sunumlar yaparak paylaşmak istemiş.

(Sunum sırasında İTÜ Çekirdek tarafından kayıt yapılıyordu ancak videosunu maalesef bulamadım.)

Son sunum ise dün akşam izlediğim “Hangi Agile?” başlıklı sunum oldu. Abdulkadir Yaman sunumun hemen başlarında “Neden Agile yapıyoruz?”u anlamak için “Systems Thinking” bilmemiz gerekir diyince bu bloğu yazmam şart oldu diye düşündüm. :)

(Sunumu organize eden Istanbul Coders grubuna teşekkürü borç bilirim.)

Konuşmacıların ortak söylemleri şöyle:

  • Her şeyi sistem olarak değerlendirebiliriz. Her şeye, mesela evliliğe bile sistem olarak yaklaşırsanız, daha mutlu olursunuz. :)
  • Sistemlerdeki geri bildirim döngülerini iyi anlamalıyız. Örneğin TDD (Test Driven Development) yazılımcının yazdığı kodun çalışıp çalışmadığıyla ilgili en hızlı şekilde geri bildirim almasını sağlayan bir geri bildirim döngüsü barındırır.
  • Sistem bileşenleri arasında bilgi akışı (information flow) sağlanmalı.

Dün akşam izlediğim sunumdan sonra artık “Systems Thinking” üzerine okumalar yapmaya başlamanın zamanı geldi de geçiyor diye düşündüm. Ve buna Kılıçhan Kaynak’ın “The Spaghetti Startup…” kitabıyla başlayacağım gibi görünüyor: http://lasagnac.com/

Agile Neydi? Agile Emekti.

Agile. Sözlükteki Türkçe karşılığı “Çevik”.

Yazılım geliştirme ortamlarındaki karşılığı ise; -müşteriyi memnun etmek için- uzun vadeli katı planlama ve geliştirme süreçleri yerine, değişen koşullara hızla adapte olup (hem değişen koşulların getirdiği riskleri bertaraf etme anlamında hem de değişen koşulların doğurduğu fırsatları yakalayabilme anlamında) çok kısa aralıklarla yeni sürümler çıkarmayı öne çıkaran bir yazılım geliştirme disiplini.

Değişen planların doğuracağı sıkıntıyı minimize etmek için bireyler arası iletişime önem verir ve takımları küçük tutup onların kendi kendilerini organize etmelerini bekler.

Çevik Yazılım Geliştirme Manifestosu (Manifesto of Agile Software Development – http://agilemanifesto.org/iso/tr/)

Bizler daha iyi yazılım geliştirme yollarını

uygulayarak ve başkalarının da uygulamasına yardım ederek ortaya çıkartıyoruz.

Bu çalışmaların sonucunda:

Süreçler ve araçlardan ziyade bireyler ve etkileşimlere

Kapsamlı dokümantasyondan ziyade çalışan yazılıma

Sözleşme pazarlıklarından ziyade müşteri ile iş birliğine

Bir plana bağlı kalmaktan ziyade değişime karşılık vermeye

değer vermeye kanaat getirdik.

Özetle, sol taraftaki maddelerin değerini kabul etmekle birlikte,

sağ taraftaki maddeleri daha değerli bulmaktayız.

Çevik Bildirinin Temelindeki İlkeler (Principles behind the Agile Manifesto – http://agilemanifesto.org/iso/tr/principles.html)

Bizler şu ilkeleri izliyoruz:

  1. En önemli önceliğimiz değerli yazılımın erken ve devamlı teslimini sağlayarak müşterileri memnun etmektir.
  2. Değişen gereksinimler yazılım sürecinin son aşamalarında bile kabul edilmelidir. Çevik süreçler değişimi müşterinin rekabet avantajı için kullanır.
  3. Çalışan yazılım, tercihen kısa zaman aralıkları belirlenerek birkaç haftada ya da birkaç ayda bir düzenli olarak müşteriye sunulmalıdır.
  4. İş süreçlerinin sahipleri ve yazılımcılar proje boyunca her gün birlikte çalışmalıdırlar.
  5. Projelerin temelinde motive olmuş bireyler yer almalıdır. Onlara ihtiyaçları olan ortam ve destek sağlanmalı, işi başaracakları konusunda güven duyulmalıdır.
  6. Bir yazılım takımında bilgi alışverişinin en verimli ve etkin yöntemi yüz yüze iletişimdir.
  7. Çalışan yazılım ilerlemenin birincil ölçüsüdür. Çevik süreçler sürdürülebilir geliştirmeyi teşvik etmektedir.
  8. Sponsorlar, yazılımcılar ve kullanıcılar sabit tempoyu sürekli devam ettirebilmelidir.
  9. Teknik mükemmeliyet ve iyi tasarım konusundaki sürekli özen çevikliği artırır.
  10. Sadelik, yapılmasına gerek olmayan işlerin mümkün olduğunca arttırılması sanatı, olmazsa olmazlardandır.
  11. En iyi mimariler, gereksinimler ve tasarımlar kendi kendini örgütleyen takımlardan ortaya çıkar.
  12. Takım, düzenli aralıklarla nasıl daha etkili ve verimli olabileceğinin üzerinde düşünür ve davranışlarını buna göre ayarlar ve düzenler.

XP (eXtreme Programming) ve Scrum gibi proje yönetim çerçeveleri (framework) bu çevik prensipleri temel almaktadır.

dt071126

http://dilbert.com/strip/2007-11-26

XP ve Scrum gibi çerçeveler uyguladıkları çevik pratikler (Agile Practices – http://guide.agilealliance.org/) yoluyla çevik prensipleri somutlaştırırlar.

Prensiplerinden bazıları gözden kaçırılarak uygulanmaya çalışılmamalıdır.

Evet;

“En önemli önceliğimiz değerli yazılımın erken ve devamlı teslimini sağlayarak müşterileri memnun etmektir.”

Ancak; Okumaya devam et