YAZILIM MIMARISI

Kod Kalitesini Neler Kötü Etkiler ?

Bu yazıda geliştirdiğimiz yazılımlarda kod kalitesini kötü yönde etkileyen faktörlerden bahsedeceğim.

--

Bana göre kodun kalitesi sadece yazılımcının elinde belirlenen bir kavram değildir. Bu kodun kalitesi bakıldığı perspektif ve zaman aralığına göre değişiklik gösterir. Örneğin;

  • Çalışan bir uygulamada son kullanıcının karşısına kritik bir hata çıktığında kodu çok kötü yazmışlar denir.
  • Geliştirme aşamasında veya bakım aşamasında kodu başka arkadaşlara teslim ettiğimizde kod anlaşılmıyorsa, kodu devralan arkadaşlardan veryansın veya küfürler geliyorsa.
  • Proje geliştirme aşamasında Müşteri bazı mantıklı ek gereksinimler istedi ve bunların yapılma maliyetleri çok yüksek çıktığı ve kodun değişemeyeceğini söylüyorsak
  • Kod geliştirme süresi proje takvimine ve planına uymuyorsa
  • Bunun benzeri örnekler arttırılabilir..

1. Yönetimsel Başarısızlıklar

  • Projenin Gereksinimlerini veya Teknik Risk Alanlarının Doğru Belirlenememesi
  • Proje Ekibinin doğru belirlenmemesi (Çok genç yeni mezun — bilgi birikimi az, Herkes çok deneyimli — Çatışma ve Ego, Hem deneyime mimari kararlar alabilmeye, hem geri bildirime , hemde daha hızlı kod geliştirebilecek gençlere ihtiyaç var)
  • Yanlış Zaman Planlaması ve Doğru Kaynakların Kullanılmaması buda İletişim Eksikliğinden ortaya çıkar (Analistler, Yazılım Mimari ve Geliştiriciler, İnsan Kaynakları, Muhasebe, Müşteri, Alan Uzmanı,
    Sistem Mühendisleri ile iletişimi doğru zamanda ve doğru şekilde yapılmaması)
  • İşin maliyetine göre bütçe Azlığı ve kaynakların Azlığı (Çalışanlar burnout olur, donanım veya 3rdParty kütüphaneler veya SaaS ile daha basit ve daha kaliteli yapılacak işler yapılamaz)

2. Süreçsel Problemler

  • Proje’de doğru Yazılım Geliştirme Modelinin kullanılmaması (Spiral yerine Agile yapmaya çalışmak, belki Warterfall en doğrusu)
  • Yazılım geliştirme modelinin Fazlarının neler içerdiğini ve nasıl işletilmesi gerektiğini bilmeyip, bu fazların içerisini doğru şekilde dolduramamak. (Planlama, Analiz, Tasarım ve Gerçekleştirim vb… Geliştirme Modeli içerisinde nasıl olgunlaştırılacağını bilmemek)
  • Fazların kalitesini arttıran yazılım geliştirme Prensiplerinden bir haber olmak (Conway, OOP, TDD, BDD, Min-Value Product, Jobs To Be Done, Reactive Programing, 12 Factor Apps, SOLID, KISS, YAGNI vb..)

3. Mimari Problemler

  • Yazılım sisteminizin hangi sistem bileşenlerinden oluşacağını, hangi donanım altyapıları üzerinde koşacağını düzgün şekilde belirleyemezseniz.
  • Bu sistem bileşenlerinin, kendi iç bileşenleri ve dış sistemler ile etkileşimlerinin nasıl olacağını belirleyemezseniz. (Mimari ve Entegrasyon Örüntüler)
  • Düzgün bir CI/CD Pipeline sahip olmamanız durumunda. Github (branch yapıları) araçlarına hakimiyet, Code Review, otomatik build alma, bu süreçte testlerin otomatik çalıştırılması, Test Covarage çıkarılması, Sonar gibi araçların kod kalitesindeki eksiklikleri çıkarması eksikse.
  • Hangi deneyimdeki kişiler yazılım sistemini kullanacak ve destek sağlayacak belirleyemez (eğitim, UI,Güvenlik, Operasyon vb eksik)

4. Geliştirici Ekip

  • Test Test Test … yazmamak, veya yazıyormuş gibi gözükmek
  • Code Review yapmamak
  • Sonar vb Code syntax Check ve Kontrol Araçlarını kullanmamak
  • OO Geliştirme Prensiplerini BilMemek (Abstraction, Encapsulation,
    High Cohesion, Low Coupling, Dependency Injection, SOLID, KISS, YAGNI, DRY)
  • Tasarım Örüntülerini BilMemek (Singleton, Command, vb… )

5. Teknolojik Gelişim ve Baskı

  • Trendler/Hype veya yeni teknolojiler her zaman sizin sorununuzu çözen
    Silver Bullet değildir. (Hype: Machine Learning, BigData …)
  • Yönetimden, Müşterilerden, Çevrenizdeki yeni teknolojileri kullan baskısı olacaktır.
  • Teknolojileri her şeyin çözümü olarak gören yöneticilerin gazı ile ilerlemek
  • Teknolojik gelişmelerin artısı eksisi, projeye etkisini iyi şekilde değerlendirip ona göre kullanmayı bilmek Bulut Teknolojileri (Lambda), Frontend Teknolojileri (React), İletişim Teknolojileri (GraphQL, WebHook)

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--