QMOOD (Nesne Yönelimli Tasarım için Kalite Modeli)

QMOOD (Quality Model for Object Oriented Design)

Ayseleynavuz
4 min readJan 10, 2023

Dört katmandan oluşur ve bu katmanlar arasındaki ilişkileri değerlendiren hiyerarşik yapılı bir tasarım kalite modeli benimsenmiştir. Bu model nesneye dayalı yazılım metriklerini kullanarak yazılım kalite niteliklerinin değerlerini hesaplar.

QMOOD ,İki yazılımı birbiriyle kıyaslamak ya da bir yazılımın farklı versiyonları arasında kalite değişimini görmek için kullanılır.

Hiyerarşik (Katmanlı) Yapı

  • (L1)Tasarım Kalitesi Nitelikleri
  • (L2)Tasarım Kalitesi Özellikleri
  • (L3)Tasarım Kalitesi Metrikleri
  • (L4)Tasarım Kalitesi Bileşenleri

L1: Tasarım Kalitesi Nitelikleri (Design Quality Attributes), en üst düzey nitelikler.

L2: Nesneye Dayalı Tasarım Özellikleri (Object Oriented Design Properties)

L3: Nesneye Dayalı Tasarım Metrikleri (Object Oriented Design Metrics)

L4: Nesneye Dayalı Tasarım Bileşenleri (Object Oriented Design Components)

L1 Düzeyi:

işlevsellik (Functionality): Bir tasarımın sınıflarına atanan sorumlulukları ifade etmektedir.

Etkinlik (Effectiveness): Bir tasarımın nesneye yönelik tasarım kavramları ve tekniklerini kullanarak istenen işlevselliği ve davranışı elde etme yeteneğini ifade eder.

Anlaşılırlık (Understandability): Tasarımın öğrenilmesini ve anlaşılmasını sağlayan özellikleridir. Tasarım yapısının karmaşıklığıyla ilgilidir.

Genişletilebilirlik (Extendibility): Tasarıma yeni gereksinimlerin dahil edilmesine izin veren mevcut tasarımdaki özelliklerin varlığı ve kullanımı anlamına gelir.

Tekrar kullanılabilirlik (Reusability): Bir tasarımın yeni bir soruna yeniden uygulanmasına izin veren nesneye dayalı tasarım özelliklerinin varlığını yansıtır.

Esneklik (Flexibility): Bir tasarımın işlevsel olarak yeni gereksinimlere hizmet saglamak için uyarlanabilme özelliğidir.

L2 DÜZEYİ:

Tasarım özellikleri; bir yazılımdaki tasarım birimlerinin (sınıflar,metotlar vb.) iç niteliklerini, işlevlerini ve aralarındaki ilişkileri ele alarak doğrudan değerlendirilebilecek somut kavramlardır.

QMOOD’taki tasarım özellikleri: Bu özellikler bir veya daha fazla tasarım metriği ile değerlendirilebilecek şekilde seçilmiştir.

Design Size: Bir tasarımda kullanılan sınıfların ölçüsüdür.

Hierarchies: Bir tasarımdaki farklı genel/özel kavramları temsil etmek için kullanılır. Bir tasarımda çocukları olan (türetilmemiş ) sınıfların sayısıdır.

Abstraction: Tasarımın genelleme/özelleme yönlerinin bir ölçüsüdür. Bir tasarımdaki bir veya daha fazla nesli olan sınıflar, bu özelliği sergiler.

Encapsulation: Oznitelik bildirimlerine erişimi özel(private) olarak tanımlayarak engeller ve böylece nesnelerin iç özelliklerini korur.

Coupling: Bir tasarımdaki bir nesnenin diger nesnelere bağımlılığını tanımlar.

Cohesion: Bir sınıftaki yöntemlerin ve özelliklerin uyumunu degerlendirir.

Composition: Tasarımdaki sınıflar arasında sahip olma ilişkisini temsil eder.

Inheritance: Tasarımda sınıflar arasında kalıtsal ilişkileri temsil eder.

Polymorphism: Bir nesnede çalışma zamanında dinamik olarak belirlenen hizmetlerin bir ölçüsüdür.

Messaging: Bir sınıftan başka bir sınıfa hizmet sağlayan açık(public) servislerin bir ölçüsüdür.

Complexity: Sınıfların iç ve dış yapısının ve bunları anlamadaki zorluk derecesinin bir ölçüsüdür.

L3 DÜZEYİ:

Tasarım metrikleri yazılımın tasarım aşamasında elde edilebilirler. Bu metrikler tasarım özelliklerinin değerlendirilmesinde doğrudan kullanılırlar.

DSC (Design Size in Classes): Tasarımdaki toplam sınıf sayısıdır.

NOH (Number of Hierarchies): Tasarımdaki sınıf hiyerarşilerinin sayısıdır.

ANA (Average Number of Ancestors): Bir sınıfın bilgi devraldığı ortalama sınıf sayısını belirtir.

DAM (Data Access Metric): Private ve Protected özellik sayısının tüm özellik sayısına oranıdır. [0,1] aralığında değerler alır ve yüksek olması tercih edilir.

DCC (Direct Class Coupling): Bir sınıfın doğrudan ilişkili olduğu sınıf sayısıdır.

CAM (Cohesion Among Methods of Class): Bir sınıfın yontemleri arasındaki ilişkiyi hesaplar.

MOA (Measure of Aggregation): Bir sınıfta içerilen kullanıcı tanımlı sınıfların sayısıdır.

MFA (Measure of Fuctional Abstraction): Bir sınıf tarafından miras alınan metot sayısının, sınıfın metotları tarafından erişilebilen toplam metot sayısına oranıdır.

NOP (Number of Polymorphic Methods): Polimorfik davranış sergileyebilen yöntemlerin sayısıdır. Örneğin, C++ dilindeki virtual metodlar gibi.

CIS (Class Interface Size): Bir sınıftaki açık (public) metot sayısıdır.

NOM (Number of Methods): Bir sınıftaki metot sayısıdır.

WEKA Veri Madenciliği Yazılımının Sürümleri Arasındaki Kalite Değişimlerinin QMOOD ile İncelenmesi adlı makaleden alınmıştır.

(L1) Tasarım Kalitesi Nitelikleri ve (L2) İlişkileri

Ağırlıklar toplamları +1.0 ya da −1.0 olacak şekilde seçilmiştir.

a)Tekrar Kullanılabilirlik

•0,5*Design Size-0.25*Coupling+0.25*Cohesion+0.5*Messaging

b)Esneklik

•0,25*Encapsulation-0.25*Coupling+0.5*Composition+0.5*Polymorphism

c)Anlaşılırlık

•-0,33*Design Size-0.33*Abstraction+0.33*Encapsulation

•-0.33*Coupling+0.33*Cohesion-0.33*Polymorphism-0.33*Complexity

d)İşlevsellik

  • 0,22*DesignSize+0.22*Hierarchies+0.12*Cohesion+0.22*Polymorphism+0.22*Messaging

e)Genişletilebilirlik

•0,5*Abstraction-0.5*Coupling+0.5*Inheritance+0.5*Polymorphism

f)Etkinlik

  • 0,2*Abstraction+0.2*Encapsulation+0.2*Composition+0.2*Inheritance+

0.2*Polymorphism

Toplam Kalite Indeksi — Total Quality Index (TQI): Altı kalite niteliğinin değerleri toplanarak o projenin toplam kalitesini gösteren toplam kalite indeksi hesaplanır.

(L3) Tasarım Kalitesi Metrikleri

(DSC) Design Size in Classes

(NOH) Number of Hierarchies

(ANA) Average Number of Ancestors

(DAM) Data Access Metric

(DCC) Direct Class Coupling

(CAM) Cohesion Among Methods in Class

(MOA) Measure of Aggregation

(MFA) Measure of Function Abstraction

(NOP) Number of Polymorphic Methods

(CIS) Class Interface Size

(NOM) Number of Methods

(L2) Tasarım Kaltiesi Özellikleri ve (L3) ilişkileri aşağıdaki tabloda verilmiştir.

Modelin üretmesi beklenen sonuçlar aşağıdaki gibi sıralanmıştır.

Yazılımların sürümleri ile ilgili gözlemlere göre modelin geçerli olabilmesi için aşağıdakilere yakın sonuçlar üretmelidir.

Tekrar kullanılabilirlik (reusability), esneklik (flexibility), işlevsellik (functionality), genişletilebilirlik (extendibility), etkinlik (effectiveness) her sürümdem de belli bir oranda artmalı.

Özellikle işlevsellik (functionality) ve etkinlik (effectiveness) ilk sürümlerde daha fazla artmalı. İlk sürümlerde anlaşılırlık (understandability) değeri düşük gelmelidir. Çünkü bu sürümlerde yazılıma yeni özelikler eklemek için sisteme bir çok sınıf, metot eklenecek. Yazılım olgunlaştıkça anlaşılırlık artmaya başlamalıdır.

Daha fazla bilgi edinmek için aşağıdaki videoya bakabilirsiniz.

DAHA DETAYLI BİLGİ İÇİN BU YAZILARI OKUYABİLİRSİNİZ

Nesne Yönelimli Tasarım Metrikleri ve Kalite Özellikleriyle İlişkisi

Yazılım Kalite Metriklerinin Kıyaslanması Örnek Olay İncelemesi

Nesneye Dayalı Yazılım Metrikleri ve Yazılım Kalitesi

WEKA Veri Madenciliği Yazılımının Sürümleri Arasındaki Kalite Değişimlerinin QMOOD ile İncelenmesi

Yazılım Ürün Ölçütlerinin Uygulamalı İncelenmesi

NESNEYE YÖNELİK YAZILIM PROJELERİNDE ÖNCELİKLİ OLARAK TEST EDİLECEK SINIFLARIN YAZILIM ÖLÇÜTLERİ YARDIMIYLA BELİRLENMESİNE YÖNELİK BİR YÖNTEM

--

--

Ayseleynavuz

Hi, i am software engineer. I write about software development and anything else that comes to mind Full-stack.