Ship It: Bölüm 2

Tools and Infrastructure

Kitap ikinci bölümün ilk başında güzel bir hikaye anlatmış. Hikayede iki arkadaşın ev yapma hikayesi anlatılıyor. Kısaca isimleri değiştirerek bende anlatayım. Mehmet ve Cihat(kim acaba :) ) adında iki arkadaş aynı anda ev yapmaya başlıyorlar. Mehmet çekicini ve tornavidasını alarak hemen evi yapmaya başlıyor. Fakat Cihat iş için kompresör ,çivi çakma makinası.. gibi işini çok kolaylaştıracak modern araçları alıyor ve bunları öğrenmeye başlıyor. Tabi Mehmet’in evi yavaş yavaş ortaya çıkarken Cihat daha araçları öğrenmeyle uğraşıyor. Cihat araçları kullanmayı öğrendikten sonra onların verdiği avantajla çok hızlı bir şekilde evini bitirip Mehmet’i geçiyor.Cihat Mehmet evini yapmakla uğraşırken o araçları öğrenmeyle kaybettiği vaktini kolayca geri kazanıyor. Tabi bundan sonraki yaptıkları evlerde Cihat doğal olarak öğrenmiş olduğu araçları kullanarak çok hızlı sağlam evler yaparken Mehmet hala eski tekniklerle Cihat’a yetişmeye uğraşıyor.

Sizinde anladığınız gibi yazar yukarıdaki hikayeden yola çıkarak yazılım araçların ve altyapısının geliştirme için eski ilkel yöntemlere göre nasıl avantaj sağladığını,nasıl hızlı ve kaliteli ürünler ortaya çıkardığını anlatıyor.

Develop In A Sandbox

Bu kısımda özellikle yazılım geliştiricilerin dış etkilerden izole edilmiş bir ortamda çalışmalarını gerektiğini anlatıyor.Özellikle Versiyon Kontrol Sistemi ile herkesin kendi bilgisayarlarında diğerlerini etkilemeyecek şekilde çalışmaları gektiğini,her yazılımcının bilgisayarında diğerlerini etkilememek için Veritabanı,Web servisleri.. gibi yazılımların kurulu olması gerektiğini anlatıyor. Eğer geliştiriciler veritabanı lisansları gibi konular yüzünden tek veritabanı üzerinde çalışıyorlarsa bunun riskinide göze almaları gerektiğini söylüyor.

Manage Assets

Bu kısımda yazılımcının en değerli varlığının sadece kod ya da diğer dosyalar olduğunu bununda en iyi şekilde yönetmesi gerektiğini anlatıyor.Bunun versiyon kontrol sistemi ile sağlandığını ve faydalarını anlatıyor.Özellikle yazılım geliştirmek için tüm gerekli kütüphaneler grafik dosyaları xml dosyaları kısacası geliştirme ortamında kullanılan herşeyin Versiyon kontrol sisteminde olması gerektiğini anlatıyor.

Bunu daha önceden tecrübe ettiğim için iyi biliyorum. Herşeyi Versiyon kontrol sistemine atmadığınız zaman kodu sistemden çektiğinizde sürekli eksik dosyalar eksik kütüphaneler… ile uğraşmak zorunda kalıyorsunuz. Özellikle aklınızda bulunsun geliştirme ortamınızda kullanacağınız herşeyi ama herşeyi Versiyon kontrol sistemine atın.

Script Your Build

Bu bölümde geliştirdiğiniz programın çalışabilir hale getirmek için el ile yaptığınız adımları otomatik build scriptlerini kullanarak yapmanızı öneriyor. Özellikle çoğu kullanıcının Build denince kullandığı IDE nin build işlemi aklına geliyor. Fakat burada tamamen IDE den bağımsız o olmadan komut satırından çalıştırılacak bir komut,yada bir buton ile (ant build,make all.. gibi) yazılımın çalıştırılabilir bir sürümünün çıkarılma işlemini otomatikleştirmeyi anlatıyor.Yazarda benim yaşadığım aynı tecrübeleri kitaba aktarmış.

IDE kullanılarak yapılan Build işlemini anlatmış.IDE ile yapılan build işlemini hepiniz bilirsiniz. Önce kodu derleriz ardından başka bi dizine kopyalarız ardından biryerden bazı kütüphaneleri unutmuş oluruz onları kopyalarız. O dizinden çalıştırıp problem olmadığından emin oluruz… diye devam eden bir süreç. Otomatik build script ile sadece tek tuşla bunların hepsini yapmayı sağlayabiliriz. Kendim bizzat acısını çekerek otomatik build işlemine geçtiğimde daha önceden bu eziyeti neden çekiyormuşum kendime hayret etmiştim.

Burada yazarın en önemli vurgusu şu. Herhangi bir makina yazılımı hatasız build edebilmelidir. IDE ile build işlemi yapıldığında en çok karşılaşılan hatalardan biri build işlemini yapan developer ın makinasında çalışıp diğer makinalarda çalışmamasıdır(It works on my machine). Sebebide gelende developer makinasında olan kütüpane ayar gibi şeylerin diğer makinalarda olmaması eksik olması bu işlemlerin en ile yapılması hatanın asıl sebebidir malesef.Otomatik build scriptleri ile bunun önüne kolaylıkla geçebilirsiniz.

Build Automaticly

Bu kısımda otomatik build scriptlerinin bir sonraki adımı olan sürüm otomasyonu ve sürekli bütünleştirmeden(Continuous Integration) bahsediyor. Continuous Integration’ın temel felsefesi ayrı bir build server’da versiyon kontrol sistemindeki her kod değişikliğinden sonra bütün build işleminin tekrar yapılması ardından sonuçlarının çeşitli şekillerde geliştiricilere kullanıcılara sunulmasıdır. Bunun sağladığı en büyük fayda farklı makinalarda geliştirililen yazılımın entegre edilmesi sırasında bir sürü hata ortaya çıkması ve bu işlemin uzun süre almadı. Continuous Integration ile sürekli entegrasyon yapıldığı için hatalar anında yakalanabiliyor. Böylelikle geliştiriciler hatalı bir commit sonucunun build işleminde probleme yol açtığını kodu gönderdikten hemen sonra anlayabiliyor. Ayrıca bu sisteme testlerinde çalıştırılmasını eklediğinizde hataların ne kadar azaldığını düşünün.

Burada Continuous Integration aracı olarak meşhur open source CruiseControl’dan bahsetmiş. Bu kategoride birçok araç bulabilirsiniz ama unutmayın araçlar önemli değil önemli olan yapılış şekli herhangi bir aracıda kullanabilirsiniz.

Track Issues

Bu kısımda geliştirdiğiniz yazılım için hataların isteklerin takibi için Issue Trackler sisteminin bulunmasının önemini anlatıyor.Bu sistemde hatanın içeriği tüm detaylarıyla sisteme kayıt ediliyor.  Yazarın dediği Biz yazılım geliştiriciler unutkan insanlarız o yüzden yapmamız düzeltmemiz gereken önemli bug ve istekleri bu tarz bir sistemle veritabanında tutmazsak birgün mutlaka unutacağız. Ayrıca bununla alakalı yaşadığı bir anıyı anlatıyor. Müşterinin yapılmasını istediği önemli bir özellik yapılmayınca müşteri doğal olarak pek memnun olmuyor. Bu özelliği yapması gereken yazılımcı ise böyle bir istediğin gelmediğini söylüyor.Bu  Bir gün ofiste kağıda yazılı çok önemli unutma notunda o özelliğin açıklamasını yerde buluyorlar. Buda bu tarz bir sistemin gerekliliğini anlatıyor.

Bu tarz bir sistem sayesinde ayrıca yazılımcı neleri yapması gerektiğini sürekli görebiliyor. Yazılımda neler eksik hangi hatalar mevcut sürekli şeffaf izlenilebilir bir yapıda olduğu için önünüzü çok daha kolay görebiliyorsunuz.

Track Features

Bu kısımda da hataların izlenildiği gibi yazılıma eklenmesi gereken özelliklerin ya da özellik isteklerininde bu tarz bir sistemde tutulması gerektiğini anlatıyor. Gelen isteklerin önceliklerinin,sürelerinin belirlenip sisteme kayıt edilmesi önünüzde bir yapılacaklar listesi oluşturup sizin önünüzü görmenizi sağlıyor.

Use a Testing Harness

Evet en sevdiğim kısıma geldik.  Yazarın benimleaynı fikirleri paylaştığı için çok memnunum :). Bu kısımda test yazmanın faydaları ve en önemlisi bunun otomatik olarak yapılmasının önemi anlatılıyor. El ile yapılan testler çok zaman aldığı ve hataya daha açık oldukları için zamanda faydadan çok zarar getirmeye başlarlar. Bu yüzden iyi bir test otomasyon sistemi(JUnit,NUnit,EasyMock….)otomatikleştirilmesi anlatılıyor. Çeşitli test türlerinden de ayrıca bahsetmiş. Unit Test,Integration Test,Smoke Test,Functional Test, Acceptance Test leri kısaca anlatmış.

On Choosing Tools

Burada geliştirdiğimiz yazılımda araçların seçiminin önemi anlatılmış. Dikkat edin araçları kendiniz yazın demiyor :) Genelde yazılım dünyasına yeni atılanların en büyük heveslerinden biride herşeyi kendilerinin yazmak istemeleridir(itiraf ediyorum benimde öyleydi). Başkasının yazdığı aracı mümkünse kullanmayayım kendim baştan yazayım tarzı bir felsefe vardır. Burada bu bakımdan araçları ve  araçların seçiminin önemini anlatmış.Özellikle sizi illa kendisini kullanmaya zorlayan araçları kullanırken iki kere düşünmenizi tavsiye etmiş.Bencede tamamen haklı.

When Not to Experiment

Bu kısımda da araçları seçerken dikkatli olmamızı ve bunları sırf havalı yeni teknolojileri öğrenmek için değil gerçekten işe yaradığının kanıtlanıp ondan sonra kullanılmasını tavsiye ediyor.

Kitabın ikinci kısmı bu şekilde. Gördüğünüz gibi kısa kısa bahsettim aslında herbiri kendi başlığı altında ayrı bir kitap oluşturucak kadar detaylı konular. Genel başlıkları ile en iyi pratikleri vermeye çalışmış.Dikkat ederseniz zaten yukarıdaki yöntemler modern yazılım geliştirme tekniklerinin bel kemiğini oluşturuyor. Bu bakımdan başarılı bir proje için herkesin bu maddeleri gözden geçirmesi bence iyi olur. Bu arada kitabı bitireli baya oldu ama vakit ayırıp ancak yazabildim. Gerçekten çok güzel bir kitap.Sıraca 3. bölüm var onuda fırsat bulduğum vakit yazacağım….