28 Aralık 2016 Çarşamba

Yazılım mühendisliğinin olgunlaşması ve inşaat örneklemi


Yazılım geliştirme süreçlerinin anlaşılması için pek çok yazılı ve resimleştirme yöntemiyle anlatım yapılmıştır. Bunlardan en ünlüsü muhtemelen aşağıdakidir: (İnternette "What customers want" olarak aratınca gelen resim önerileri.)

What custemers want.

Yandaki anlatımda müşteri, proje lideri, mühendis, yazılım mühendisi ve danışmanın rolleri de resmedilmiş oluyor.
Yazılım geliştirme süreçlerindeki ve sonrasında beklenen ürün başarısının neden ortaya koyulamadığını anlatmanın muhtemelen en iyi yolu inşaat mühendisliğinden örnek vermek olsa gerek. Ne de olsa hepimizin ortak en iyi bildiği konu.


Örneklerle gidersek;
30 katlı bir inşaat için proje planı hazırlayan firma 24 ay süre verdiğinde müşteri karşı teklif olarak fiyat ve diğer maliyet konularında tüm pazarlıkları yaptıktan sonra projenin 12 ayda teslimini talep eder.
Genelde de 13 veya 14 ay için anlaşılır.

Bazı yazılım şirketleri atanmış kaynak ayırdığını söylesede aynı kaynağı birden fazla projede kullanma hesabı yaptığı için biraz daha uzun tarih de verebiliyor.

Genelde projelere başlandıktan sonra şu şekilde devam eder:

13. ayın sonunda proje müşteriye eksikleriyle beraber teslim edilir ve bir kaç ay müşteriden ses çıkmaz. Yada 9. ayın sonunda biz hemen satış yapıp katları kullanmak istiyoruz dendiği için proje 10. kat inşa helindeyken kullanıma açılır.

Sonra da örneğin 3. kat'ta düğün salonu yapmak için kolon kesme istekleri gelir.

Sonrasında yeni farkına varılan yada değişen ihtiyaçların projeye eklenmesi istendiğinde artık yukarı çıkılamadığı için ana binanın yanına gece kondular yerleştirilmeye başlanır.

Yukarı çıkılabilen fakat hayal edilenden farklı sonuç için örnek sanatsal çalışma: (Kowloon Walled City'den esinlenilmiştir.)


Image by Nivanh Chanthara

Şehir "anarşi şehri" olarak anılınıyor ve güneş görmeyecek şekilde yapılaşması en belirgin özelliği. Bu özelliğiyle de yazılım projelerinin gün yüzü göremeyecek geleceklerine benzetilebilir.

Kowloon Walled City'den diğer ilham alınabilecek sanatsal çalışmalar.

Mühendislik tekniklerinin olgunluğu

Bazı kaynaklarda yazılım projelerindeki hatalar inşaat projeleri ile örneklendiriliyor. Bunun nedeni yüksek ihtimal inşaat mühendisliğinin 100 yıldan fazla * bir geçmişi olmasına rağmen yazılım mühendisliğinin daha olgunlaşmamış bir 50 yıl ? ** kadar geçmişi vardır.

Bir diğer konuda yazılım projelerinin 1/3'ü batak projedir.***  Yani inşaat projesi olsaydılar yıkılmışlardı. Yada en azından çatlamış ve korkuyla içinde oturulur durumda olurlardı.

Aşağdaki ilgili linkte*** kabaca projelerin ne kadarının başarılı olduğunun yanında projenin kimin gözünde ne kadar başarılı olduğu istatistikleri veriliyor. Burda belkide başarı oranlarından daha önemli olan başarı algısındaki farklılıklar.

Yine yukarıdaki inşaat örneğinden gidecek olursak 30 katlı inşaatı zamanında bitiriyorsunuz ama konut olarak geliştirdiğiniz projede evlerin içinde banyo yapmayı unutuyorsunuz. Bunu başarısızlık olarak kabul etmeyip her kata birer kabin yerleştirerek probleme çözüm önerebiliyorsunuz.
Uygulanabilirliğinin kanıtı olarak da Sovyetler döneminde uygulandığını ve herkesin evi olduğu için çok mutlu olduğunu öne sürebilirsiniz.

İnşaat projeleri yazılım geliştirme projesindeki teknik konuları anlayamayanlar için referans olarak alınabilir. Burada unutulmaması gereken problemdeki her bir gereksinim birer teknik konudur.


* History of construction
** History of software engineering
*** Software development success rates

2 Aralık 2016 Cuma

Sql Server notları

Genel olarak karşılaşılan problemler ve var olan çözümlerde yapılabilecek iyileştirmeler için tutulan notlar.

Connection string için öneriler

http://ardalis.com/3-tips-to-improve-your-connection-strings

Pek çok veri yapısı problemine çözüm önerileri

http://www.databaseanswers.org/data_models/

Çok tablolu bir db de PK tanımlı olmayan tabloların lsitesini almak için:


Amazon DynamoDb notları


DynamoDb ile çalışmaya ihtiyaç duyulma nedeni Berkeley Db ile çalışmanın zorluğundan kaynaklandı.
Berkeley Db dosyalarını taşıma ve erişim sıkıntısından dolayı gerekli olan veriler Json formatında çıktı alındı ve DynamoDb'ye giriş yapılması denendi.

Sonuç olarak bir kaç milyon kaydı maliyet ve makul sürede giriş yapılmasındaki zorluk nedeniyle ertelendi.
Amazon DataPipeline ile tekrar denenecek.

AWS SDK ile DynamoDb erişimi

AWS cli kurulumu: Installing the AWS Command Line Interface
http://docs.aws.amazon.com/cli/latest/userguide/installing.html

Client credential oluşturulması ve geliştirme ortamında tanımlanması:

Get Your AWS Access Key ID and Secret Key
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.BeforeYouBegin.html#SampleData.BeforeYouBegin.SetupCLI
Set up AWS Credentials for Development
http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
Configuring the AWS Command Line Interface
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html


DynamoDb'ye Bulk veri girişi