Java Günlüğüm
Yazılım, Java, BT, azıcık felsefe, biraz mizah...
  • Udemy Eğitimleri
  • Temiz Kod
  • Tasarım Kalıpları
  • Hakkımda
  • Arşiv
RSS
01 Mart 2015

Kod Bozulur mu?

Akin Yazılım Kalitesi ve Test, Yazılım Modelleme, Yazılım Mühendisliği

Daha önce yazılımda teknik borç üzerine yazmış ve bu kavramın yazılım projelerinde nasıl hayat bulduğundan ve nihayetinde de yazılım yöneticilerinin tavırlarından bahsetmiştik. Bu yazıda biraz daha özele girerek kod seviyesindeki kalitenin değişimini, düşmesini etkileyen etmenlerden bahsedelim.

Kod bozulur mu? Ya da İngilizce olarak sorarsak “does code decay?” Evet kod bozulur, yazılım mühendisliğinde en fazla ve sık bozulan şey muhtemelen koddur. Kodun bozulmasından kasıt, ne diğer mühendisliklerde olduğu gibi fiziksel aşınma ve bozulmadır ne de evlerdeki yemeklerimizin bozulması gibi kimyasal değişimlerdir. Kodun bozulmasından kasıt, kodun değişmeler yoluyla kalitesinin düşmesidir.

Beni yazılım projelerinde en fazla şaşırtan şeylerden birisi de, yazılımı yönetenlerin, yazılımın boyutunun bir problem olduğunu kesinlikle göz önüne almayan yaklaşımları olmuştur. Yani yazılımın büyüdükçe karmaşıklaştığı ve bunun da ciddi problemlere ve kalitede düşmeye sebep olduğunu genelde gözden kaçırıyoruz.  Benzer şekilde proje koduna önüne gelenin el atması ve değişiklikler yapması nihayetinde kod kalitesini düşürmektedir.

Bir yazılım geliştirme projesinde yazılımın ilk aylarında yani daha üç-beş bin satır iken, sahip olduğu özellikleri ve kaliteyi, aradan bir-iki sene geçtikten sonra yani yazılımın boyutu bir kaç yüzbin hatta bir kaç milyon satıra çıktığında da, tabi olarak taşımaya devam edeceğini düşünmek çok yaygın bir durum. Çünkü yazılımı yönetenlerin, yazılım büyürken, büyümenin getirdiği karmaşıklığı yönetmekle ilgili hiç bir şey yapmadıklarını çok sıklıkla gözlemliyorum. Aslen bu durumun öyle ya da böyle düşünmekle bir ilgisi yok, bu konuda bir farkındalığa sahip olmamakla bir ilgisi var. Hatta yazılım yöneticilerinin ciddi bir kısmının sahip olduğu bu aymazlığın, taa okullarındaki Fortran, C ya da Pascal gibi programlama dilleriyle yazdıkları programlara ve ödevlere dayandığını düşünüyorum. Çünkü “yaptığınız iki for bir if” ve buna benzeri, yazılım projesini basite alan, sözleri ben bir kaç defa duydum.

Aslen bu durum sadece yazılımı yönetenlere de has bir şey değil. Teknik pozisyonlarda olan pek çok kişinin de benzer şekilde yazılımın küçüğüyle büyük halinin arasında kalite açısından bir fark olmayacağını düşündüklerini biliyorum. Teknik pozisyonlarda ciddi zaman geçirdiği halde yazılım geliştirme faaliyetini hala program yazma seviyesinde ele alan kişilerin, yazılımın mimari özelliklerinin olduğunu ve büyüdükçe bu özelliklerinin bozulma riskine sahip olduğunu düşünememeleri normaldir.

Peki kod neden bozulur? Bu konuda tartışmayı, IEEE’nin Transaction os Software Engineering isimli yayınının Ocak 2001 sayısında “Does code decay? Assessing the evidence from change management data” başlıklı makale üzerinden yapmak istiyorum. Makale, Stephen G. Eick ve dört arkadaşı tarafından yazılmış olup içinde hem teorik tartışmalara hem de deneysel çalışmalara yer verilmiştir. Bu makaleyi, erişiminiz varsa hem IEEE hem de ACM üzerinden elde edebilirsiniz. İsterseniz makaleye buradan da ulaşabilirsiniz.

Makale, “kodun değiştirilmesinin olması gerektiğinden daha zor olması”nın (“harder to change than it should be”), kodun bozulmasına en temel işaret olduğu ifade ediliyor. Bu cümledeki zorluktan kasıt makaleye göre şu üç şeyde olabilir: Maliyette yani değişikliği yapanların maliyetinde, değişikliği yapmanın süresi ve değişiklik yapılan yazılım sisteminin kalitesini tutturmada.

Bunlar yanında makaleye göre şunlara dikkat etmek gerekli:

  • Kodun bozulması, zamansaldır, zamanla ortaya çıkar.
  • Kodun değiştirilmesindeki zorluk sadece kodun kalitesinin düşük olmasından kaynaklanmaz. Yazılımın, kalitesi aynı seviyede kalsa bile büyümesi, değiştirilmesini zorlaştıracağı açıktır.
  • Kodun kalitesinin düşmesi, kodun yanlış olduğu ve müşteri ihtiyaçlarını yerine getirmediği anlamına gelmez. Yani kod hala müşteri ihtiyaçlarını giderme açısından son derece iyi bir noktada olmasına karşın, değişmesi son gittikçe zorlaşıyor olabilir.
  • Kalitesi gittikçe düşen koda rağmen, bu koda sahip yazılımın değeri gittikçe yükseliyor olabilir.
  • Kodun kalitesinin düşmesi sonuçta zaman içerisinde yapılan ilk değişiklikten sonuncusuna kadarki süreç içerisinde olmaktadır. Dolayısıyla bu süreçte kod kalitesini düşürmeyecek önlemler alınabileceği gibi, zaten düşmüş olan kalitenin tekrardan yükseltilmesi de mümkündür. Bu anlamda “değişiklik yoksa kodun kalitesi düşmez” şeklinde bir iddia ancak yüksek seviyede desteklenebilir.  Çünkü, yazılımın bir parçasında yapılan bir değişikliğin tamamen başka bir parçanın kalitesini düşürmesi mümkündür.
  • Makale “değiştirilmesinin olması gerektiğinden daha zor olmasının (“harder to change than it should be”)”  tanımının zaten ölçülmesi zor olan bir şey olduğunu da ekliyor. Çünkü bazı kodlar hakikatten değiştirilmesi zor olan kodlardır ve nihayetinde kodu değiştirenler programcılardır.

Peki kod neden bozulur? Makaleye göre kodun bozulmasının sebepleri şunlardır:

  • En başta kurgulanan mimarinin zaten değişimi kolaylaştıracak kurgu ve soyutlamalara sahip olmaması.
  • İlk başta konan ve uygulanan prensiplerin zamanla bırakılması ve uygulanmamamsı.
  • Belirsizlik taşıyan, muğlak ihtiyaçların koda çok fazla değişiklik gerektirmesi.
  • Zaman baskısı.
  • Uygun olmayan programlama araçları.
  • Organizasyonal çevre. Ortamdaki moral ve enerji gibi şeylerdeki düşmeler, kodun bozulmasına sebep olabilir.
  • Programcılardaki yetkinlik farklılıkları.
  • Uygun olmayan değişiklik süreci.
  • Kötü proje yönetimi.

Kodun bozulmasının işaretleri neler olabilir? Makale şunları listeliyor:

  • Olması gerekenden daha karmaşık hale gelmiş olmak, kodun bozulmasının en temel işaretidir. Bunu anlamanın yolu ise, o kod parçasının tekrardan yazılması durumunda daha basit olacağı öngörülüyorsa o kod parçası bozulmuş demektir.
  • Yapılan değişikliklerin sıklığı da kodun kalitesinin düştüğünü gösterebililir. Çünkü çok sık değişiklik, önceki değişikliklerin sıkıntılı olduğunu gösterebilir. Zira hızlıca yapılan değişiklikler zaten risklidir.
  • Hata giderme (bug fix) çalışmalarının yeteri kalitede olmaması.
  • Değişikliklerin geniş alanlara yayılması, bir bölgeye munhasır kalmaması, kodun mpdulerleştirilmesinde zaten bir problem olduğunu göstermektedir.
  • Özellikle hata gidermede programcıların çok sıklıkla hızlı, günü kurtaran çözümler ya da İngilizcedeki karşılığıyla “workaround”lar bulmaları.
  • Kodun arayüzlerinin sayısı zamanla artması da kodun bozulmasının işaretlerindendir.

Peki makaleye göre kodun kalitesinde düşmeye sebep olacak en temel risk faktörleri nelerdir?

  • Büyüklük tabi ki en baş etken. Büyüklük derken en temelde NCSL (non-commenting source lines) yani yorumsuz kaynak koddaki satır sayısıdır.
  • Kodun yaşı.
  • Kodun yapısındaki tabi zorluklar. Örneğin bazı algoritmik yapılar kodun tabi haliyle zor kılabilir.
  • Organizasyonel değişiklikler. Örneğin sisteme giren-çıkan kişilerin sayısı.
  • Başka dillerden çevrilen kodlar.
  • Aşırı çok ve detaylı ihtiyaçlar da kodları fonksiyonel bir yüke maruz kılacak ve kalitesinde düşmeye sebep olacaktır.
  • Tecrübesiz programcılar.

Makale nihayetinde yaptığı çalışmadan sonra kod kalitesinin düşmesinin şu dört noktada kendini gösterdiğini ifade ediyor:

  • Zaman geçtikçe değişiklikler yayılma eğiliminde olur. Yani yapılacak değişiklikler artık daha çok kod parçasını etkiler.
  • Modüler yapı gittikçe bozulur.
  • Her yeni değişiklik yeni hatalara (bug) sebep olur.
  • Ve yeni değişikliklerin maliyetini tahmin etmek gittikçe zorlaşır.

Ülkemiz açısından değerlendirildiğinde, yukarıda bahsettiğim “zorluk” kavramının ortaya çıktığı maliyet, zaman ve kalite faktörlerinden kalitenin zaten bilinçli ya da bilinçsiz olarak söz konusu olmaktan çıkarıldığı ve geriye maliyet ve zamanın kaldığını söyleyebiliriz. Bu da nihayetinde fasit bir daireye sebep olmaktadır: Sadece maliyet ve süreye odaklı olan yazılım projelerimizde değişiklik yapmanın maliyeti ve süresi gittikçe düşecektir. Çünkü çoğu zaman ya baştan yazılım kalitesi anlayışına sahip olarak projelerimize girişmiyoruz ya da girişsek bile kalite, en ufak bir tansiyon yükselmesinde ilk başta terkettiğimiz şey oluyor. Düzgün bir ihtiyaç analizi, bunlar üzerine yapılması gereken analitik çalışmalar, tasarımlar, ar-ge deneme yanılmaları, etkin kod yazma, best-practicelere uyma, iç ve dış dokümantasyon ve birim testleri ile her türlü proje, risk vb. yönetim çalışmaları, maliyet ve zaman baskısı altında en hızlı bir  şekilde terk ettiğimiz disiplinlerdendir.

Bu konuyla ilgili olarak sanırım aklımızda tutmamız gereken, iyice öğrenmemiz gereken bir kaç konu var. Genel anlamda yazılım kalitesi ile mimari ve kod kalitesi üzerinde öğreneceğimiz şeylerin başındadır. Yazılımın büyümesi, kodların değişmesinin aslen ekleyerek değil de çıkararak yapılması gerektiği ve bunun da “refactoring” çalışmasının içinde ele alınması gerektiği de açıktır. Bu konudaki bu yazıma da bakabilirsiniz.

Yüksek kaliteli yazılımlar geliştirme umuduyla.

Toplam görüntülenme sayısı: 1016

8 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
28 Şubat 2015

Öğrenciler İçin Online Java Eğitimi

Akin Eğitim ve Seminer, Java Dersleri

Online eğitimleri açtığımdan bu yana öğrencilerden özellike Java eğitimleriyle ilgili talepler gelmekte ama ücreti konusunda her zamanki gibi itirazlar yükselmekteydi. Nihayetinde ben de öğrenci oldum hatta hala öğrenciyim, bir yerlerde öğrenmeye devam ediyorum. Öğrenci arkadaşların Java öğrenme konusundaki arzuları yanında çoğu kez rehbersiz kalmaları da çok sıklıkla gözlemlediğim durumlardan. Bu amaçla online olarak, sadece öğrencilere yönelik bir içerikle, “Öğrenciler İçin Java ile Nesne-Merkezli Programlamaya Giriş” ismiyle bir eğitim açıyorum. Bu eğitim 30 saat sürecek ve sadece üniversitede ön lisans ve lisans eğitimi alan öğrencilere açık olacak.

Online olarak açılan “Öğrenciler İçin Java ile Nesne-Merkezli Programlamaya Giriş” eğitimi için GoToTraining alt yapısı kullanılacaktır. Eğitimin sayfasında ücret dahil her türlü bilgi ve gereklilik belirtilmiştir.

İyi eğitimler 🙂

Toplam görüntülenme sayısı: 1927

6 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
22 Şubat 2015

Online Seminerler

Akin Eğitim ve Seminer

Bir müddettir hem tanışmak hem de sosyal sorumluluk çerçevesinde yazılımcılarla bir araya gelip seminerler veriyordum. Farklı konularda ve olabildiğince eğlenceli içeriğe sahip olacak şekilde verdiğim bu seminerleri şimdi web ortamına taşıdım. Artık bu seminerler ve yenileri, webden mutad olarak açılacak ve sizler de kayıt olarak katılabileceksiniz.

Açılan seminerlerle ilgili en geniş bilgiye bu blogun Seminerler sayfasından ulaşabilirsiniz. İlk etapta üç seminer açılmıştır:

  • Java Nedir?
  • Clean Code
  • Analist Kim Değildir?

Şu anda açılan seminerlerin planı şöyledir:

GoToTraining alt yapısı, son derece etkileşimli bir sanal eğitim ortamı sunmaktadır. Mikrofonu ve kamerası olan bir makinayla, sadece tarayıcınız üzerinden sanal eğitim ortamlarına ulaşabilirsiniz. Seminer ortamında katılımcıların mikrofonları ile sınıf ortamına katkı yapmaları ve soru sormaları mümkün olacaktır. Ortamlarda yapılacak seminerler kayıt altına alınacak ve sonradan seminer sayfasından erişime açılacaktır.

İleride açılması beklenen seminerler için sıklıkla seminer kataloğunu kontrol etmenizi tavsiye ederim.

Bekleriz efendim 🙂

Toplam görüntülenme sayısı: 746

5 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
21 Şubat 2015

Online Eğitimler

Akin Eğitim ve Seminer

JavaTürk Online Eğitimleri

JavaTürk olarak uzun süredir kurumsal olarak vermekte olduğum eğitimleri daha geniş bir alanda sunmak amacıyla online eğitimler başlattım. Çalışanlar olsun, öğrenciler olsun, gündüzleri eğitimde harcamak her zaman yapılabilecek bir şey değil. Bu amaçla GoToTraining alt yapısını kullanarak, sanal sınıf (virtual class) ortamlarında, hem görüntülü, hem sesli, hem de yazılı araçları kullanarak, sadece zaman birliği prensibine bağlı kalarak yapılacak olan online eğitimler, sınıf içi eğitimleri sağladığı faydayı sağlamaktan geri kalmayacaktır.

Açılan eğitimlerle ilgili en geniş bilgiye bu blogun Eğitimler sayfasından ulaşabilirsiniz. İlk etapta aşağıdaki eğitimler açılmıştır:

  • Java ile Nesne-Merkezli Programlamaya Giriş
  • Java ile Nesne-Merkezli ve Fonksiyonel Programlama
  • Tasarım Kalıpları (Design Patterns)
  • Clean Code (Temiz Kod)

Bu ve açılacak diğer eğitimler belli aralıklarla tekrar edecektir.

Her eğitimin ücret detayları eğitim sayfasında bulunmaktadır. Eğitim menüsündeki bağlantılardan eğitim detay sayfalarına ulaşabilirsiniz.

Şu anda açılan eğitimlerin planı şu şekildedir:

GoToTraining alt yapısı, son derece etkileşimli bir sanal eğitim ortamı sunmaktadır. Mikrofonu ve kamerası olan bir makinayla, sadece tarayıcınız üzerinden sanal eğitim ortamlarına ulaşabilirsiniz. Eğitim ortamında katılımcıların gerek yazı ile gerek ise mikrofonları ile sınıf ortamına katkı yapmaları, soru sormaları hatta ekranlarını paylaşarak makinalarındaki çalışmalarını katılımcılarla paylaşmaları mümkün olacaktır. Ortamlarda yapılacak eğitimler kayıt altına alınacak ve sonradan eğitim sayfasından erişime açılacaktır.

Ücret:

Java ile Nesne-Merkezli Programlamaya Giriş ve Java ile Nesne-Merkezli ve Fonksiyonel Programlama eğitimleri için:

  • Kurumsal katılımcılar için 1,250 TL + KDV (Kurumsal katılımcılara istemeleri halinde fatura verilecektir.)
  • Bireysel katılımcılar için 1,000 TL + KDV
  • Öğrenci katılımcılar için 750 TL + KDV

Tasarım Kalıpları eğitimi için:

  • Kurumsal katılımcılar için 1,250 TL + KDV (Kurumsal katılımcılara istemeleri halinde fatura verilecektir.)
  • Bireysel katılımcılar için 1,000 TL + KDV

Clean Code eğitimi için:

  • Kurumsal katılımcılar için 500 TL + KDV (Kurumsal katılımcılara istemeleri halinde fatura verilecektir.)
  • Bireysel katılımcılar için 350 TL + KDV
  • Öğrenci katılımcılar için 250 TL + KDV

(Öğrenciden kasıt çalışmayan üniversite öğrencileridir. Öğrencilerinin bu indirimden faydalanabilmeleri için, öğrencilik bilgilerini, öğrenci email adresini kullanarak egitim@javaturk.org adresine göndermeleri gereklidir.)

İki kişi aynı anda kayıt yaptırması durumunda, iki kişiye de %20 indirim uygulanacaktır. Bu durum kurumsal katılımcılar için geçerli değildir.

Java ile Nesne-Merkezli Programlamaya Giriş, Java ile Nesne-Merkezli ve Fonksiyonel Programlama ya da Tasarım Kalıpları eğitimlerinden birini alana bu eğitim %50 indirim ile sağlanacaktır. Bu üç eğitimden birini alan katılımcı, Clean Code’un açılan ya da ileride açılacak eğitiminlerinden herhangi birine kayıt olabilir.

Erken kayıt halinde, peşin ödeme (havale ve EFT) yapılırsa %10 indirim uygulanacaktır. Erken kayıt 6 Mart Cuma günü saat 17:00’da bitecektir. Erken kayıttan faydalanmak isteyenlerin bu vakite kadar ödemelerini yapmaları gerekmektedir.

  • Birden fazla indirim aynı anda kullanılamaz.
  • PayPal yoluyla yapılacak ödemelerde indirim uygulanmayacaktır.

Kayıt olmak için şu bağlantıları kullanabilirsiniz:

  • Tasarım Kalıpları (Design Patterns)
  • Java ile Nesne-Merkezli Programlamaya Giriş
  • Java ile Nesne-Merkezli ve Fonksiyonel Programlama

İleride açılması beklenen eğitimler için sıklıkla eğitim kataloğunu kontrol etmenizi tavsiye ederim.

Bekleriz efendim 🙂

Toplam görüntülenme sayısı: 1149

2 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 21 22 23 24 25 >»

Günlüğüme Hoşgeldiniz

Bu günlükte, Yazılım Mühendisliği, Bilgi Teknolojileri, Java, kişisel gelişim ve zaman zaman da diğer konulardaki düşüncelerimi sizlerle paylaşacağım. Umarım beğenir ve hoşça vakit geçirirsiniz.

Her türlü düşüncenizi, yorum olsun, beğeni ya da eleştiri olsun, bana iletmenizi rica ediyorum sizden. Ayrıca bana akin@javaturk.org adresinden ya da Twitter'dan ulaşabilirsiniz. Videolarıma da buradan ulaşabilirsiniz.

Teşekkür ederim.

Akın Kaldıroğlu

Rahat Okumak İçin

A Decrease font size. A Reset font size. A Increase font size.

Sosyal Medya

  • Twitter
  • Facebook
  • LinkedIn
  • Youtube

Son Twitlerim

→ Takip Etmek İçin

Abone Olun

Emalinizi girerek yazılardan haberdar olun.
Loading

Son Yazılarım

  • Udemy Eğitimlerim Üzerine
  • (başlıksız)
  • Clean Code / Temiz Kod Eğitimi Udemy’de
  • Java ile Nesne-Merkezli Programlamaya Giriş Eğitimi Udemy’de
  • Selsoft Video Eğitimleri
  • Spring ile Kurumsal Yazılım Geliştirme
  • Corona Günlerinde Design Patterns
  • Corona Günlerinde Java
  • JDK 10 ve “var” Özelliği
  • Onur Özcan
  • Analist ve İş Bilgisi
  • Farklı Dillerin Bakış Açısıyla Nesne-Merkezli Programlama
  • Java Nedir?
  • Bilgi Teknolojilerinde Yetenek Yönetimi – II: Tanımlar ve Eleştiriler – I
  • Alelade Hikayeler – II: Bir Başka Performans Problemi

Yazı Kategorileri

Yazı Takvimi

Mart 2026
P S Ç P C C P
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
« May    

Yazı Arşivi

Blogroll

  • Binnur Kurt'un Günlüğü
  • Ender'in Java Blogu
  • Erdem Seherler
  • Kızımın Günlüğü
  • Kurumsal Java
  • Levent Karagöl
  • Levent'in Java Blogu
  • Mert Can Akkan’s java tips,options, news…
  • Yaşar Safkan
  • Yasin Saygılı
  • Yazı Dünyası

Yazı Etiketleri

analiz Bilmek C Desen design pattern EJB Eğitim Fortran Hibernate Java Java'ya nasil baslarim Java dersleri Java EE Java Persistence API Java SE Java Sertifika Java Öğren Java öğreniyorum Java öğrenmek JPA Kalıp Kurumsal Java nesne nesne-merkezli No Silver Bullet object object-oriented Oracle Java Certifications pattern performans programlama programlama dilleri programlama nedir sertifika singleton tasarım tasarım deseni tasarım desenleri tasarım şablonu yazılım yazılım geliştirme Yazılım Mühendisliği yazılımın doğası yazılımın zorlukları Şablon

↑

© Java Günlüğüm 2026
Powered by WordPress • Themify WordPress Themes
 

Yorumlar Yükleniyor...