06 Ocak 2012

Yazılım Ürün Metrikleri

(Software Product Metrics-Using them to quantify design and code quality adlı makalenin özetidir.)

Yazılım metrikleri yazılımın ölçüsüdür. Öncelikli kullanımları yazılım geliştirmede planlama ve tahminde bize yardımcı olmalarıdır. Eğer yazılımı ölçebilirsek, yazılım kalitesini daha iyi kontrol edebiliriz. Bu, geliştirmenin erken sahnelerinde özellikle geçerlidir.

Genel olarak yazılım metrikleri iki sınıfa ayrılır, bunlar; yazılım ürün metriği, yazılım süreç metriğidir. Yazılım ürün metriği ürünün kaynak kodunun ve tasarım belgelerinin ölçüsüdür. Süreç metriği ise sürecin ölçüsüdür. Örneğin sistem tasarımı için gerekli çaba bir süreç metriğidir. Bu makalede yalnızca yazılım ürün metriklerinden bahsedilmiştir.

Modüllerin tasarımı ve bir araya getirilme şekilleri kaliteyi etkileyeceğinden, eğer tasarım yapısını ölçebilirsek, yazılım ürününün kalitesini de daha iyi kontrol edebiliriz. Yazılımın tasarım yapısı, programlama dili paradigmasına bağlıdır. İki popüler programlama paradigması (yapısal ve nesneye yönelik programlama) yazılım endüstrisinde yaygın kullanılır. Örneğin C, Pascal gibi diller yapısal paradigmayı desteklerken, Java, SmallTalk gibi diller nesneye yöneliktir. Yazılım metriği de bu iki paradigma için farklılık gösterir. Yapısal paradigmada metrikler fonksiyonları ve onların birbirleriyle olan etkileşimini ölçer. Sınıflar ve sınıfların birbiri ile etkileşimi ise nesneye yönelik paradigmada ölçülür.

Yapısal paradigmada yazılım yapısının iki yönü vardır. İlki, her fonksiyon veya prosedürlerin içindeki kontrol akışıdır. İkincisi fonksiyonlar arasında etkileşimdir. Yapısal paradigmadaki metrikler; fonksiyonun büyüklüğünü, bir fonk. içindeki kontrol akış karmaşıklığını ve bilgi akış karmaşıklığını içerir.

Bir fonksiyonun büyüklüğü tartışmalı bir konudur ama yaygın kullanılan bir metriktir. İhtilaflı bir konu olmasının sebebi herkesin üstünde anlaşma sağladığı mükemmel bir büyüklük ölçüsünün olmamasıdır. Buna rağmen çeşitli büyüklük ölçümleri mevcuttur ve büyüklüğün genel tanımı kod satır sayısıdır( Lines of Code-LOC). LOC toplam satır sayısının parantezler ve yorum satırlarıyla ya da bunlar olmadan hesaplanmasıdır. Parantezlerin ve yorum satırlarının hesaplanıp hesaplanmaması ise pratisyene bağlıdır.

Akış karmaşıklığı giriş ve çıkış yelpazelerine dayanır. Bu metrik bir fonksiyonun çevresinde kaç etkileşimi olduğunu ölçer. Giriş yelpazesi başka bir fonksiyondan doğrudan çağrı olabilir. Dolaylı akış bir fonksiyonun bir fonksiyonu çağırması ve çağrılan fonksiyonun döndürdüğü değerin başka bir fonksiyonu çağırmak için kullanılmasıyla ortaya çıkabilir. Çıkış yelpazesi bir fonksiyona doğrudan çağrı ya da global değişken olabilir.

Nesne yönelimli(OO) sistemler yapısal sistemlere göre farklı yapılara sahiptir. Bu yüzden OO sistemlerde kullanılan metrikler de farklılık gösterir. Chidamber and Kemerer OO tasarım yapılarını ölçmek için 6 farklı metrik önerir. Bunlar;
  •  Kalıtım ağacının derinliği
  •  Çocuk sayısı
  •  Bir sınıfın ağırlıklı methodu
  •  Bir sınıf için tepki
  •  Nesneler arası bağlamaMetotların kaynaşması eksikliği
Fakat daha sonra Li tarafından bu metrikler revize edilmiştir. Bunlar;
  •  OO tasarımda her sınıf bir kalıtım hiyerarşisinde mevcuttur. Böylece kalıtım ağacının derinliği ne kadar ata sınıfın olduğu ölçüsüdür.(Ata sınıf sayısı metriği)
  •  Decedent sınıf sayısı
  •  Yerel methodların sayısı metriği, sınıfın yerel arayüzünün ne kadar geniş olduğunu gösterir.
  •  Sınıf method karmaşıklığı(Class Method Complexity) sınıftaki bütün yerel methodların birleşik karmaşıklığını ölçer.
  •  Mesaj iletimle eşleşme metriği
Kaynak:  Software Product Metrics-Using them to quantify design and code quality 
             Wei Li

0 yorum:

Yorum Gönder