Yazılım

Feb 05, 2025

Yazılım Metrikleri ve CK Metrik Kümesi: Yazılım Kalitesini Ölçme Yöntemleri

Yazılım Metrikleri ve CK Metrik Kümesi: Yazılım Kalitesini Ölçme Yöntemleri
— aşağı kaydır — daha fazla

Yazılım Metrikleri ve CK Metrik Kümesi: Yazılım Kalitesini Ölçme Yöntemleri

Yazılım Metrikleri

Yazılımların ölçülebilen özellikleri ve bu özelliklerin sayıları dönüştürülmesidir. Bu bağlamda, nesneye dayalı tasarıma sahip yazılımların iç özelliklerini ölçen metrikler ele alınacaktır.

Metriklerin kullanılmasındaki genel amaç yazılımın kalitesini ölçebilmek ve yazılımın gelecekteki durumu hakkında tahminde bulunabilmektir.

Yazılım tasarım metrikleri elde edildikleri ortama göre ikiye ayrılır:

Program çalıştırılmadan kaynak koddan ya da modelden elde edilen statik metriklerdir. Program çalışırken toplanan metriklere ise dinamik metrikler denir.

Chidamber - Kemerer (CK) Metrik Kümesi

Nesneye dayalı yazılım için geliştirelen ilk metrik CK metrik kümesidir. Daha önceki metrikler işlevsel programlar içindir.

Identification: Sınıfların varlıklarının bulunması işlemidir.

Semantics: Sınıfların anlamlarını belirlenmesidir.

Relationships: Sınıflar arasındaki ilişkilerin belirlenmesidir.

Implementation: Sınıfların gerçeklenmesi.

Nesneye dayalı tasarımın temeli sınıflardır. CK metrik kümesi de sınıfların karmaşıklığını ölçebilecek metrikler ele alınmıştır.

Bu metrikler yazılımın statik yapısı ile ilgilenir.

Programı çalıştırmadan da elde edilebilir.

Sınıf Başına Ağırlıklı Metotlar (WMC)

C sınıfının n adet metodu varsa bu methodların karmaşıklıkları ise WMC ile aşağıdaki gibi hesaplanır.

Yazılım Metrikleri Formul.png

Tüm metotların karmaşıklıkları 1 kabul edillirse WMC = n olur.

WMC değeri o sınıfın geliştirilmesi için gereken zamanı iş yükünü gösterir. Metot sayısının fazlalılığı alt sınıflarında karmaşıklılığını artırır.

Bu değerin küçük olması tercih edilir.

Kalıtım Ağacının Derinliği (DIT)

İncelenen sınıfın kalıtım ağacından köke olan uzaklığıdır. Çoklu kalıtım olan programlardan en uzak yol kabul edilir.

Bir sınıf ağaçta ne kadar derine iniyorsa o kadar çok özelliği davranışının ölçmek zorlaşır. Derinliği fazla olan ağaçlar tasarım karmaşıklığıma sebep olabilir.

Türetilen Sınıfların Sayısı (NOC)

Çok sayıda sınıfın türetilmesi bir çok niteliğin tekrar kullanıldığı anlamına gelebilir. NOC, bir sınıfın tasarım üzerindeki etkisini gösterir.

Çok sayıda alt sınıf, tekrar kullanıldığı ve bir çok sınıfı barındırdığı için dikkat ile test edilmelidir.

Bağımlı Olunan Sınıfların Sayısı (CBO)

Burada bağımlılık bir sınıfın diğer sınıfa erişimine metodlarının çağırması, özelliklerine erişimi olarak tanımlanmıştır.

Sınıflar arası bağımlılığın yüksek olması modüler programlama prensiplerine aykırı bir durumdur. Sınıfın tekrar kullanılabilirliliğini azaltır.

Bağımlılığı yüksek olan sınıf değişeme olan duyarlılığı kapalıdır ve bakımı zorlaştırır.

Çağırılan Metotların Sayısı (RFC)

Bir sınıfın yanıt kümesi (RS), o sınıfa bir cevap geldiğinde etkileşmesi mümkün olan metotlar kümesidir.

RFC’nin yüksek olması sınıfın karmaşık olduğunu gösterir. RFC değeri yüksek olan sınıfın test edilmesi ve bakımı daha zordur.

Metotlarda Uyum Eksikliği (LCOM)

Sınıfın uyumsuzluğu hakkında bilgi verir. Metotların uyumlu olmaları tercih edilir. Uyumsuzluk değerinin yüksek olması o sınıfın parçalara ayırılması gerektiğini belirtir. Değerinin yüksek olması yazılımının tasarımında sorun olduğunu belirtir.

Metriklerin Değerlendirilmesi

Metriklerin Geçerliliği

Metriklerin çıktı olarak oluşturduğu değerlerin gerçek dünyaya hitap edip etmediği tartışılmalıdır.

Gerçek dünyada yapılan işlemler insan etkileşimini gerek kılar. Bu zaman alır ve maliyetlidir.

Metriklerin doğru bir sonuç gerçek dünyaya hitap etmesi için 9 özellik belirtilmiştir. Nesneye dayalı yazılımlar hedef alınmamıştır.

Non-Coarseness: Tüm sınıflar aynı metrik değerini üretmemeli

Non-Uniqueness: Bazı sınıflar aynı sonucu üretebilir.

Permutation: Bir yazılımda satırların oluşturulan kodların yerlerini bile değiştirmek karışıklığa artırabilir. Sınıflar için uygulanabilir olmadığından dolayı bu özellik C-K metriği tarafından kullanılmamıştır.

Implementation: Tasarımın gerçeklemesi önemlidir. İki sınıf aynı işi yapıp tasarımları farklı olursa kabul edilebilir.

Monotonicity: Bir sınıfa ekleme yapmak onun karmaşıklığını artırır.

Non-equivalence of Interaction: Etkileşimin eşit olmamasını veya dengesiz olmasını ifade eder.

Interaction Increases Complexity: Farklı iki sınıfın veya öğe türünün bir araya getirilmesinin, genellikle daha karmaşık bir sistem veya süreç oluşturduğunu ifade eder.

Finiteness: Sadece sonlu sayıda yazılım aynı metrik değerini üretmelidir. Bu koşul otomatik olarak sağlanabildiği için C-K metriği tarafından kullanılmamıştır.

Renaming Principle: Bir sınıfın adı değiştirilmesi metrik değerini değiştirmez.


Bu gönderİyİ paylaş