Yazılım

Feb 04, 2025

Yazılım Kalite Güvencesi: Kaliteli Yazılımın Temelleri ve Nesneye Dayalı Tasarım

Yazılım Kalite Güvencesi: Kaliteli Yazılımın Temelleri ve Nesneye Dayalı Tasarım
— aşağı kaydır — daha fazla

Yazılım Kalite Güvencesi: Kaliteli Yazılımın Temelleri ve Nesneye Dayalı Tasarım

Yazılım Kalite Güvencesi

Yazılım Kalitesine Giriş

1960’lardan itibaren yazılıma artan talepler karşısında değişik çözümler uygulandıysa da yeterli üretim kapasitesine ulaşılamadı. Bu yetersizlik, “Yazılım Krizi” söylemiyle dünya literatüründe yerini aldı. Aynı zamanda yazılım projelerinde başarısızlık bu krizi destekler nitelikte devam etti.

Büyük yazılımlara mühendislik yaklaşımı zorunlu hale geldi. Mühendislik süreçleri yapılan iş için ölçme, değerlendirmeye ihtiyacı vardır.

Yazılım ürünü oluşturulurken yapılarına ölçmeler yapılabilir.

  • Proje yönetimi; zamanlama, gereksinimleri karşılama,
  • Hız, hata oranı, güvenirlik
  • Esneklik, tekrar kullanılabilirlik, bakım kolaylığı

Aynı zamanda yazılım test edilmesi ile yazılım kalitesi farklı konulardır. Yazılım yaşam döngüsünde kalite ile test farklı yerlerde kullanılır.

Yazılım mühendisliği diğer mühendisliklerden farklıdır:

  • Oluşturulan ürün sanaldır.
  • Test edilmesi zordur, ortama göre değişiklik gösterebilir.
  • Seri üretim maliyeti yok gibidir.
  • Ürünün maliyeti geliştirme aşamasındadır.
  • Kopyalanması kolaydır.

Yazılımın Ölçülmesi Neden Gerekli

Yazılım firmaları, gereksinimleri karşılamak ve pazar payına sahip olabilmek için kaliteye gerek duyar.

Yazılımın müşterileri, ihtiyaç duyduğu yazılımı almak istediği zaman kaliteye ölçmeye ihtiyaç duyar karşılaştırma yapabilmek için.

Kaliteli Yazılımın Özellikleri

  • Kabullenebilir hata
  • Gereksinimleri karşılayan
  • Zamanında tamamlanmış
  • Standartlara uyumlu
  • Bakım uygulanabilen

Yazılım Kalitesizliğin Sorunları

  • Müşteri tarafındaki sorunlar:
    • İstenilen gereksinimlerin yerine getirilmemesi
    • Kolay anlaşılabilir olmaması
    • Bakım yetersizliği
    • Eğitim desteğinin eksik olması
  • Yazılım firmasındaki sorunlar:
    • Zamanında bitirilmeyen projeler
    • Çalışan mutsuzluğu
    • Maliyetin artırılması

Kaliteyi baştan sağlamanın maliyeti sonradan sağlama çalışılmasının maliyetinden daha azdır.

Tasarım Kalitesinin Önemi

Yazılım projesinin toplam maliyetinin %10 gibi bir oranı tasarımın uygulanmasına gitmektedir. Tasarım aşamasında yapılan hataların bakım aşamasında giderilmesi projenin maliyetinin %80 gibi bir oranını oluşturmaktadır.

Nesneye Dayalı Tasarım

Nesneye dayalı tasarım kullanılarak hedeflenen sonuçlar: Esneklik, kolay genişletibilme, anlaşılırlık,bakım

Nesneye dayalı ürünler yapılsada bu yukarıda bahsedilen sonuçlardan çok uzaktalar burada düşük kaliteli ürünler ortaya çıkmaktadır.

Kaliteli bir yazılım çıkarmak için nesneye dayaları tasarımın prensiplerini baz alarak ve onları uygulayarak bir çalışma sergilemek gerekir. Bu prensipler ve kaliteye odaklı çalışmalara yapıldıkça sorunlar en aza inecektir.

Temel Kavramlar

Soyutlama (Data Abstraction)

Gerçek yapıların soyut modelleri oluşturulur. Bu gerçek varlıkların yazılımda soyutlanan kısımda kullanılan özellikler ve yapacağı işlemler belirtilir.

Kapsülleme (Encapsulation)

Gerçek dünyadan soyutladığımız soyut modeller kendi için barındıran özelliklerini kendine ait birimin içine konulur diğer birimleri ilgilendiren kısımları ise açık (public) olarak tanımlanırken özelliğin iç yapısı dış kısımlara açılmaz.

Kalıtım (Inheritance)

Sınıflar arasında genel ilişki oluşturur. Alt-üst ilişki oluşturulduktan sonra sınıflar içinde üstte bulunanın özelliklerini ortak olarak kullanmayı amaçlamaktadır.

Çok Biçimlilik (Polymorphism)

Aynı arayüze sahip nesneler yazılımın çalışması için birbirlerinin yerine geçebilme imkanı vardır. İhtiyaç olan durumda uygun olan nesne harekete geçer ve ilgili hizmetin yerine geçer. Hizmeti alan bunun farkında olmak zorunda değildir.

Nesneye Dayalı Yazılımların Kalite Nitelikleri

  • Anlaşılırlık (Understandability): Değişimler yeni gelenlerin adapte olabilmesi ve tasarımı çabuk kavraması
  • Modülerlik (Modularity): Bağımsızi sınanabilen işlemlerin olması
  • Tekrar Kullanabilirlik (Reusability)
  • Sınama Kolaylığı (Testability)
  • Güvenilirlik (Reliability): Hataya açık olmaması, tasarım aşamasında hataların bulunması
  • Bakım Kolaylığı (Maintainability): Hata çıktığı zaman kolay bir şekilde hatanın giderilmesi
  • Esneklik (Flexibility): Gereksinimlerin değiştiği sürece kolay bir şekilde sağlanması

Nesne dayalı yazılımın kalitesi sezgiseldir somut kuralları yoktur. Yıllar geçtikçe deneyimle sabit prensipler geliştirilmiştir. Bundan dolayı kaliteli bir nesneye dayaları tasarımın özellikleri:

  • Gevşek Bağımlılık (Low Coupling)
  • İyi Uyum (High Cohesion)
  • Yönetibilir Karmaşıklık (Managable Complexity)
  • Uygun Soyutlama (Proper Data Abstraction)

Az Bağımlılık (Low Coupling)

Bir sınıftaki değişiklik diğer kısımları etkilememeli. Bu sınıflar birbirinden bağımsız olarak iletişim kurabilmeli. Bağımlılık modülerlik, anlaşırlık, sınama kolaylığı gibi nitelikleri etkilemektedir.

İyi Uyum (High Cohesion)

Sınıf belirli bir amaç için oluşturulmalı hedefe uygun olarak tasarlanmalı. Burada oluşturulan özellikler birbirleri ile uyumlu alakalı olmalı. Burada uyumun etkilediği nitelikler ise tekrar kullanılabilirlik, modülerlik, anlaşırlık gibi niteliklerdir.

Bir sınıf gerçek dünyada tek bir gerçek nesneyi karşılamalı farklı anlamı olmamalı. Bir metot bir iş yapmalı ve davranışlar aynı yerde olmalı.

Yönetibilir Karmaşıklık (Managable Complexity)

Burada diğer niteliklere göre oluşturulursa karmaşıklık en aza inmiş olur. Karmaşıklığı etkilediği nitelikler ise anlaşırlık, bakım kolaylığı, güvenirlik, sınama kolaylığı gibi niteliklerdir.

Uygun Soyutlama (Proper Data Abstraction)

Gerçek dünyaya uygun bir şekilde tasarlanmalı. Soyutlama yaparken gerçek dünyadaki nesne uygun sınıflar içinde bölünmeli. Sınıflar arasında ilişkiler hizmet alışverişi alakalı olmalı. Sınıflar arası kalıtım hiyerarşisi uygun olmalıdır.

Nesneye dayalı tasarımın bazı kalıpları:

  • Separation of concerns
  • The Law of Demeter (Don’t Talk to Strangers Principle)
  • Adapter (GoF)
  • Factory
  • Strategy
  • Composite (GoF)
  • Decorator (GoF)
  • Bridge (GoF)

Bu gönderİyİ paylaş