Share via


Kod ölçümleri - Sınıf bağlantısı

Sınıf bağlaması, ilk olarak CK94 tarafından tanımlandığı gibi Nesneler Arasında Bağlantı (CBO) adıyla da geçer. Temel olarak, sınıf bağlama, tek bir sınıfın kaç sınıf kullandığını gösteren bir ölçüdür. Bu ölçümde yüksek bir sayı kötüdür ve düşük bir sayı genellikle iyidir. Sınıf eşleştirmesinin yazılım hatasının doğru bir tahmincisi olduğu gösterilmiştir ve son yapılan çalışmalar 9 üst sınır değerinin en verimli S2010 olduğunu göstermiştir.

Microsoft belgelerine göre, sınıf birleştirme "parametreler, yerel değişkenler, dönüş türleri, yöntem çağrıları, genel veya şablon örneklemeleri, temel sınıflar, arabirim uygulamaları, dış türler üzerinde tanımlanan alanlar ve öznitelik dekorasyonu aracılığıyla benzersiz sınıflarla eşleştirmeyi ölçer. İyi yazılım tasarımı, türlerin ve yöntemlerin yüksek uyum ve düşük kavramaya sahip olması gerektiğini belirtir. Yüksek kavrama, diğer türlerdeki birçok bağımlılık nedeniyle yeniden kullanılması ve bakımı zor olan bir tasarımı belirtir."

Kavrama ve uyum kavramları açıkça ilişkilidir. Bu tartışmayı konu başlığı altında tutmak için, KKLS2000 kısa bir tanım vermek dışında bir uyum konusuna girmeyeceğiz:

"Modül uyumu Yourdon ve Constantine tarafından 'bir modülün iç öğelerinin birbirine ne kadar sıkı bağlı veya ilişkili olduğu' olarak tanıtıldı YC79. Bir modülün tam olarak bir görevi [...] temsil ediyorsa güçlü bir uyumu vardır ve tüm öğeleri bu tek göreve katkıda bulunur. Uyumu kod yerine bir tasarım özniteliği ve yeniden kullanılabilirlik, bakım ve değiştirilebilirliği tahmin etmek için kullanılabilecek bir öznitelik olarak tanımlarlar."

Sınıf Bağlama Örneği

Şimdi sınıf bağlantısına bir bakalım. İlk olarak, yeni bir konsol uygulaması oluşturun ve içinde bazı özelliklere sahip Kişi adlı yeni bir sınıf oluşturun ve ardından kod ölçümlerini hemen hesaplayın:

Sınıf bağlama örneği 1

Bu sınıf başka sınıf kullanmadığından sınıf bağlamasının 0 olduğuna dikkat edin. Şimdi Person örneği oluşturan ve özellik değerlerini ayarlayan bir yöntemle PersonStuff adlı başka bir sınıf oluşturun. Kod ölçümlerini yeniden hesaplayın:

Sınıf bağlama örneği 2

Sınıf bağlama değerinin nasıl yukarı gittiğini görüyor musunuz? Ayrıca, kaç özellik ayarlarsanız ayarlayın, sınıf bağlama değerinin başka bir değerle değil 1'e kadar gittiğine dikkat edin. Sınıf eşleştirmesi, ne kadar kullanıldığına bakılmaksızın bu ölçüm için her sınıfı yalnızca bir kez ölçer. Buna ek olarak, 1 değerinin olduğunu DoSomething() ancak oluşturucunun PersonStuff()değeri için 0 olduğunu görebiliyor musunuz? Şu anda oluşturucuda başka bir sınıf kullanan bir kod yoktur.

Başka bir sınıf kullanan oluşturucuya kod koyarsanız ne olur? Şunları elde edersiniz:

Sınıf bağlama örneği 3

Oluşturucunun açıkça başka bir sınıf kullanan kodu vardır ve sınıf bağlama ölçümü bu gerçeği gösterir. Yine, için genel sınıf bağlamasının PersonStuff() 1 olduğunu ve aynı zamanda 1 olduğunu görebilir ve DoSomething() bunu kullanan iç kodunuz ne kadar olursa olsun yalnızca bir dış sınıfın kullanıldığını gösterebilirsiniz.

Ardından başka bir yeni sınıf oluşturun. Bu sınıfa bir ad verin ve içinde bazı özellikler oluşturun:

Sınıf bağlama örneği - yeni sınıf ekleme

Şimdi sınıfı içindeki yöntemimizde DoSomething() sınıfını tüketin PersonStuff ve kod ölçümlerini yeniden hesaplayın:

Sınıf bağlama örneği 4

Gördüğünüz gibi, PersonStuff sınıfı için sınıf bağlaması 2'ye kadar çıkar ve sınıfın detayına giderseniz, yöntemin içinde en fazla bağlamaya sahip olduğunu DoSomething() ancak oluşturucunun hala yalnızca 1 sınıf tükettiği görebilirsiniz. Bu ölçümleri kullanarak, belirli bir sınıf için genel maksimum sayıyı görebilir ve üye başına ayrıntılarda detaya gidebilirsiniz.

Sihirli Sayı

Döngüsel karmaşıklıkta olduğu gibi, tüm kuruluşlara uyan bir sınır yoktur. Ancak S2010, 9 sınırının en uygun olduğunu gösterir:

"Bu nedenle eşik değerlerini göz önünde bulunduracağız [...] en etkili olarak. Bu eşik değerleri (tek bir üye için) CBO = 9[...]." (vurgu eklendi)

Kod Çözümleme

Kod analizi, Bakım kuralları kategorisini içerir. Daha fazla bilgi için bkz . Bakım kuralları. Eski kod analizi kullanılırken Genişletilmiş Tasarım Kılavuzu kural kümesi bir bakım alanı içerir:

Sınıf eşleştirme Genişletilmiş Tasarım Kılavuzu kuralları

Bakım alanının içinde sınıf bağlama için bir kural vardır:

Sınıf bağlama kuralı

Bu kural, sınıf bağlantısı aşırı olduğunda bir uyarı oluşturur. Daha fazla bilgi için bkz . CA1506: Aşırı sınıf bağlantısından kaçının.

Alıntı

CK94

^ Chidamber, S. R. & Kemerer, C. F. (1994). Nesne Odaklı Tasarım için Ölçüm Paketi (Yazılım Mühendisliğinde IEEE İşlemleri, Cilt 20, No. 6). Pittsburgh Üniversitesi web sitesinden 14 Mayıs 2011'de alındı: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

KKLS2000

Kabaili, H., Keller, R., Lustman, F., and Saint-Denis, G. (2000). Sınıf Uyumu Yeniden Ziyaret Edildi: Endüstriyel Sistemler Üzerine Ampirik Bir Çalışma (Nesne Odaklı Yazılım Mühendisliğinde Nicel Yaklaşımlar ÇalıştayıNın Bildirileri). 20 Mayıs 2011'de, Université de Montréal web sitesinden alındı http://www.iro.umontreal.ca/~sahraouh/qaoose/papers/Kabaili.pdf

SK2003

Subramanyam, R. & Krishnan, M. S. (2003). Nesne Odaklı Tasarım Karmaşıklığı için CK Ölçümlerinin Ampirik Analizi: Yazılım Hatalarının Etkileri (Yazılım Mühendisliğinde IEEE İşlemleri, Cilt 29, No. 4).

S2010

^ Shatnawi, R. (2010). Açık Kaynak Sistemlerde Nesne Odaklı Ölçümlerin Kabul Edilebilir Risk Düzeylerinin Nicel Araştırması (Yazılım Mühendisliğinde IEEE İşlemleri, Cilt 36, No. 2).

YC79

Edward Yourdon ve Larry L. Constantine. Yapılandırılmış Tasarım. Prentice Hall, Englewood Cliffs, N.J., 1979.