• Sonuç bulunamadı

5. DENEYSEL ÇALIŞMALAR

5.3. Uyum Hesaplama Yazılımı

Tez kapsamında, mevcut uyum ölçütleri ile ROC için uyum değerlerinin hesaplanmasında kullanılacak, bir uyum ölçüm yazılımı geliştirilmiştir. Uyum hesaplama yazılımı C# uygulamaları için geliştirilmiştir. Bu yazılım, Microsoft Windows XP Servis Paketi 2 platformunda, Microsoft Visual Studio 2005 geliştirme ortamı ile C# programlama dili yardımı ile geliştirilmiştir. Oldukça basit bir arayüze sahiptir. Temel ihtiyaç olunan tüm bilgileri listeleyebilmektedir.

Şekil 5.3’de uyum ölçüm aracının bir görüntüsü yer almaktadır. Uyumun

hesaplanabilmesi için kaynak kodun yer aldığı "cs" uzantılı dosyanın adı “Dosya Adı” kutucuğa yazılmalıdır. Takiben “Calistir” düğmesine basıldığında hesaplama süreci başlatılmış olacaktır. Hesaplama esnasında düz yazı dosyasından okunan sınıf üzerinde bazı katar işleme fonksiyonları ile ayrıştırma yapılmaktadır. Elde edilen sonuçlar konsol üzerine ve ekranda yer alan liste kutusuna aktarılmaktadır. Uyum ölçüm yazılımı, öznitelik listesini, metot listesini, özniteliği kullanan metotların listesini, metotların birbirlerine çağrımlarının listesini, erişim sayı listesini ve erişim tipi listesini içermektedir. Bu bilgiler yanında elde edilen metot ağırlıkları, öznitelik ağırlıkları, yardımcı metot uyumu ve nihai olarak sınıf uyumu yer almaktadır.

yönelik programlama dilinde de gerçeklenebilir durumdadır. Sunulan ölçüt yanında, literatürde kabul görmüş olan bazı ölçütler proje kapsamında gerçeklenmiştir. Bu ölçütler şunlardır: LCOM1, LCOM2, LCOM3, LCOM4, LCOM5, Co, Coh ve TCC- LCC.

Yazılan program basit bir arayüz içermektedir. Model bileşeni içerisinde sınıfın alınması, temizlenmesi ve ayrıştırılması gibi işlevler yerine getirilmektedir. Diğer temel bileşenler Sınıf, Metot, Öznitelik ve Etkileşim sınıflarıdır. Bunlar ayrıştırma sonucu oluşan ve ölçüt için gerekli parametreleri sağlayan birimlerdir. Asıl hesaplama işlemlerini gerçekleyen birim ROCDomain sınıfıdır. Sunulan ölçüt ve diğer ölçütler bu sınıf kapsamında elde edilen ayrıştırma verileri yardımı ile hesaplanmaktadır. Şekil 5.4’de yer alan UML diyagramı anlatılan bu genel görünüşü yansıtmaktadır. Tablo 5.3’te yer alan kod alıntısı ise ROCDomain kapsamında sınıfların ROC uyum değer hesabını yapan sözde kodu göstermektedir:

Tablo 5.3: Uyum hesaplama sözde kodu

public double ROCHesaplayici() { double WMler=0; double WAlar=0; double IMAlar=0; ArrayList liste; ArrayList IMADegerleri; //WM’leri hesapla liste=sinif.MetotListesiGetir(); for (int k=0;k<liste.Count;k++) {

WMler += WMHesapla((Metot)liste[k]); }

//WA’ları hesapla

liste=sinif.OznitelikListesiGetir(); for (int k=0;k<liste.Count;k++) {

WAlar += WAHesapla((Oznitelik)liste[k]); }

Tablo 5.3 (Devam): Uyum hesaplama sözde kodu

//IMA’ları hesapla

IMAlar = IMAHesapla(); //CCD’ yi hesapla double CCD=CCDHesapla(WMler,WAlar,IMAlar); sinif.CCDDegerAyarla(CCD); //MCC’leri hesapla liste=sinif.MetotListesiGetir(); for (int k=0;k<liste.Count;k++) {

MCCHesapla((Metot)liste[k]); }

//BCOM’ları hesapla

liste=sinif.MetotListesiGetir(); for (int k=0;k<liste.Count;k++) { BCOMHesapla((Metot)liste[k]); } //BCOM*’ları hesapla liste=sinif.MetotListesiGetir(); Metot metodHesap; Oznitelik oznitelikHesap; Etkilesim etkilesimHesap;

//yukarıdaki yer alan süreç her bir ayrık grup için tekrarlanmalı for (int l=1;l<=sinif.MaxGrupNoDegerGetir();l++)

{

//eğer ayrık grup yok ise bu bölümü işleme

int grupElemanSayisi=sinif.GrupElemanSayisi(l); if (grupElemanSayisi==0) { continue; } WMler=0; WAlar=0; IMAlar=0; CCD=0; liste=sinif.MetotListesiGetir();

Tablo 5.3 (Devam): Uyum hesaplama sözde kodu

metodHesap=(Metot)liste[p]; //eğer metot ilgili ayrık grupta ise

if (metodHesap.GrupNoDegerGetir()==l) { WMler+=metodHesap.WMDegerGetir(); } } liste=sinif.OznitelikListesiGetir(); for (int p=0;p<liste.Count;p++) {

oznitelikHesap=(Oznitelik)liste[p]; //eğer öznitelik ilgili ayrık grupta ise

if (oznitelikHesap.GrupNoDegerGetir()==l) { WAlar+=oznitelikHesap.WADegerGetir(); } } liste=sinif.EtkilesimListesiGetir(); for (int p=0;p<liste.Count;p++) {

etkilesimHesap=(Etkilesim)liste[p]; //eğer etkileşim ilgili ayrık grupta ise

if (etkilesimHesap.GrupNoDegerGetir()==l) { IMAlar+=etkilesimHesap.IMADegerGetir(); } } CCD=CCDHesapla(WMler,WAlar,IMAlar); liste=sinif.MetotListesiGetir();

for (int p=0;p<liste.Count;p++) {

metodHesap=(Metot)liste[p]; //eğer metot ilgili ayrık grupta ise

if (metodHesap.GrupNoDegerGetir()==l) {

BCOMAyrikGrupHesapla((Metot)liste[p],CCD); }

Tablo 5.3 (Devam): Uyum hesaplama sözde kodu

}

//BCOM ları hesapla

liste=sinif.MetotListesiGetir(); for (int k=0;k<liste.Count;k++) { COMHesapla((Metot)liste[k]); } //ROC hesapla double ROC=0; liste=sinif.MetotListesiGetir(); for (int k=0;k<liste.Count;k++) {

ROC+=ROCHesapla((Metot)liste[k]); }

return ROC; }

class COC

«struct» Tasiyici + m et1: Metot + m et2: Metot

+ T asi yi ci (M etot, M etot)

COCDomain - si ni f: Si ni f

+ BCOMAyri kGrupHesapl a(M etot, doubl e) : voi d + BCOMHesapl a(Metot) : voi d

+ CCDHesapl a(doubl e, doubl e, doubl e) : doubl e + COCDomai n(Si ni f)

+ COCDomai n() + COCHesapl a(M etot) : doubl e + CoHesapl ayi ci () : doubl e + COMHesapl a(M etot) : voi d + Hesapl ayi ci () : doubl e + IMAHesapl a() : doubl e + LCOM1Hesapl ayi ci () : doubl e + LCOM2Hesapl ayi ci () : doubl e + LCOM3Hesapl ayi ci () : doubl e + LCOM4Hesapl ayi ci () : doubl e + LCOM5Hesapl ayi ci () : stri ng

- Li stedeVarm i (ArrayLi st, Metot, Metot) : bool + MCCHesapl a(M etot) : voi d

+ Si ni fAyarl a(Si ni f) : voi d + T CCLCCHesapl ayi ci () : stri ng + WAHesapl a(Ozni tel i k) : doubl e + WM Hesapl a(Metot) : doubl e

System.Wi ndow s.Forms.Form COCForm

- cm dCal i sti r: System.Wi ndows.Forms.Button - components: System .ComponentModel .Contai ner = nul l - l bl DosyaAdi : System .Wi ndows.Form s.Label + l stOzel l i kl er: System .Wi ndows.Forms.Li stVi ew - txtDosyaAdi : System .Wi ndows.Form s.T extBox

- cm dCal i sti r_Cl i ck(obj ect, System .EventArgs) : voi d + COCForm ()

- COCForm _Load(obj ect, System.EventArgs) : voi d # Di spose(bool ) : voi d

- Gri dIl kl e() : voi d - Ini ti al i zeCom ponent() : voi d - M ai n() : voi d «struct» EtkilesimDetay + hedefeEri si m Sayi si : i nt + hedefeEri si m T uru: i nt + hedefeYazm aDurum u: i nt

+ Etki l esi m Detay(i nt, i nt, i nt)

Etkilesim + aci kl ama: stri ng - grupNo: i nt - hedef: Uye - hedefeEri si m Sayi si : i nt - hedefeEri si m T uru: i nt - hedefeYazm aDurum u: i nt - IMA: doubl e - kaynak: Uye

+ Etki l esi m (Uye, Uye, i nt, i nt, i nt) + Etki l esi m DetayGeti r() : Etki l esi m Detay + GrupNoDegerAyarl a(i nt) : voi d + GrupNoDegerGeti r() : i nt + HedefeEri si m T urunuAyarl a(i nt) : voi d + hedefeYazm aDurum uAyarl a(i nt) : voi d + HedefUyeGeti r() : Uye

+ IMADegerAyarl a(doubl e) : voi d + IMADegerGeti r() : doubl e + KaynakUyeGeti r() : Uye

M etot - BCOM: doubl e - BCOMAyri kGrup: doubl e - COM: doubl e - grupNo: i nt - MCC: doubl e - metotLi stesi : ArrayLi st - overl oadEdi l m i s: bool - ozel MetotM u: bool - ozni tel i kLi stesi : ArrayLi st - parametreLi stesi : ArrayLi st - sati rSayi si : i nt - WM : doubl e

+ BCOMAyri kGrupDegerAyarl a(doubl e) : voi d + BCOMAyri kGrupDegerGeti r() : doubl e + BCOMDegerAyarl a(doubl e) : voi d + BCOMDegerGeti r() : doubl e + COMDegerAyarl a(doubl e) : voi d + COMDegerGeti r() : doubl e + GrupNoDegerAyarl a(i nt) : voi d + GrupNoDegerGeti r() : i nt

+ Isi m denOzni tel i kRefGeti r(stri ng) : Ozni tel i k + MCCDegerAyarl a(doubl e) : voi d + MCCDegerGeti r() : doubl e + Metot(stri ng) + Metot(M etot)

+ MetotLi stesi Geti r() : ArrayLi st + MetotLi stesi neEkl e(Metot) : voi d + Overl oadEdi l m i sAyarl a(bool ) : voi d + Overl oadEdi l m i sGeti r() : bool + Ozel MetotM uDegerAyarl a(bool ) : voi d + Ozel MetotM uDegerGeti r() : bool + Ozni tel i kLi stesi Geti r() : ArrayLi st + Ozni tel i kLi stesi neEkl e(Ozni tel i k) : voi d + ParametreLi stesi ndeVarMi (stri ng) : bool + ParametreLi stesi neEkl e(ArrayLi st) : voi d + ParametreLi stesi ni Geti r() : ArrayLi st + Sati rSayi si Ayarl a(i nt) : voi d + Sati rSayi si Geti r() : i nt + WM DegerAyarl a(doubl e) : voi d + WM DegerGeti r() : doubl e «struct» KarakterYer + karakter: stri ng + yer: i nt + KarakterYer(i nt, Stri ng) Model - cal i sm aKatari : stri ng - dosyaAdi : stri ng - m etot: M etot - si ni f: Si ni f - si ni fLi stesi : ArrayLi st - sonLi ste: ArrayLi st - temel Li ste: ArrayLi st

- Cal i sm aKatari T em i zl e() : voi d - DosyadanOku() : bool

- Isl emYap(Isl emT ype, i nt, i nt, i nt) : voi d - Li steOl ustur() : voi d

- Li steyeYerl esti r(stri ng) : voi d - Li steyi Si ral a() : voi d - Li steyi SonDurumaGeti r() : voi d - M etotIsmi Bul (stri ng) : stri ng - M etotParametreBul (stri ng) : ArrayLi st - M etotUyel eri ni Bel i rl e() : voi d + M odel (stri ng)

- Ozni tel i kIsmi Bul (stri ng) : ArrayLi st - Si ni fIsmi Bul (stri ng) : stri ng - Si ni fUyel eri ni Bel i rl e() : voi d + T emel Li steUret(COCForm ) : voi d

«enum erati on» IslemType IT _Cl assT ani m IT _UyeT ani m IT _MetotT ani m IT _Ozni tel i kT ani m

Oznitelik - grupNo: i nt - ozni tel i kLi stesi : ArrayLi st - WA: doubl e

+ GrupNoDegerAyarl a(i nt) : voi d + GrupNoDegerGeti r() : i nt + Ozni tel i k(stri ng)

+ Ozni tel i kIsmi Ayarl a(stri ng) : voi d + Ozni tel i kLi stesi Geti r() : ArrayLi st + Ozni tel i kLi stesi neEkl e(Ozni tel i k) : voi d + WADegerAyarl a(doubl e) : voi d + WADegerGeti r() : doubl e

Sinif - CCD: doubl e - etki l esi mLi stesi : ArrayLi st - i si m : stri ng - maxGrupNo: i nt - metotLi stesi : ArrayLi st - ozni tel i kLi stesi : ArrayLi st

+ Bagi m l i Ozni tel i kSayi si (stri ng) : i nt + CCDDegerAyarl a(doubl e) : voi d + CCDDegerGeti r() : doubl e

+ DogrudanCagi ranM etotl ari Bul (Metot) : ArrayLi st + DogrudanEri senM etotLi stesi (stri ng) : ArrayLi st + DogrudanEri si l enOzel l i kLi stesi (Metot) : ArrayLi st + DogrudanOkuyanM etotLi stesi (stri ng) : ArrayLi st + DogrudanYazi l anOzel l i kLi stesi (Metot) : ArrayLi st + Dol ayl i Eri si l enOzel l i kLi stesi (M etot) : ArrayLi st - Dol ayl i Etki l esi mBul (M etot, Metot, i nt) : bool + Dol ayl i OkunanOzel l i kLi stesi (M etot) : ArrayLi st + Dol ayl i OkuyanMetotLi stesi (stri ng) : ArrayLi st + Dol ayl i Yazi l anOzel l i kLi stesi (M etot) : ArrayLi st + Eri si m Yol uMetotSayi si (stri ng, stri ng) : i nt + Etki l esi mDondur(M etot, Ozni tel i k) : Etki l esi m + Etki l esi mDondur(M etot, M etot) : Etki l esi m + Etki l esi mLi stesi Geti r() : ArrayLi st + Etki l esi mLi stesi neEkl e(Etki l esi m) : voi d + Etki l esi mSayi si Dondur(Metot) : i nt + Etki l esi mSayi si Dondur(stri ng, stri ng) : i nt + GrupEl em anSayi si (i nt) : i nt + IndextenM etotRefGeti r(i nt) : M etot + Isi m denMetotRefGeti r(stri ng) : Metot + MaxGrupNoDegerAyarl a(i nt) : voi d + MaxGrupNoDegerGeti r() : i nt + MetotDol ayl i Etki l esi m l eri Bul () : bool + MetotLi stesi Geti r() : ArrayLi st + MetotLi stesi neEkl e(Metot) : voi d + Ozel M etotl ari Duzenl e() : voi d + Ozni tel i kLi stesi Geti r() : ArrayLi st + Ozni tel i kLi stesi neEkl e(Ozni tel i k) : voi d + Ozni tel i kWAGeti r(stri ng) : doubl e + Si ni f(stri ng)

+ Si ni f(Si ni f) + Si ni fIsmi Geti r() : stri ng

+ UyeGrupAyarl a(ArrayLi st, Metot, i nt) : voi d + UyeGrupl ari ni Bel i rl e() : voi d + Yapi ci Metotl ari Etki l esi ml eri ni Si l () : voi d + Yapi ci Metotl ari Si l () : voi d

IComparer SiralamaSinifi

- Com pare(Obj ect, Obj ect) : i nt

Uye # i si m: stri ng

+ Isi mGeti r() : stri ng + Uye(stri ng) -si ni f -metot -kaynak-hedef -si ni f +met2 +met1 -özni tel i k l i stesi

-m etot l i stesi

-özni tel i k l i stesi

«use» «use»

«use»

«use»

«use»

Şekil 5.4: UML diyagramı

Aşağıda, uyum ölçüm yazılımı ile elde edilen bir çıktı gösterilmektedir. Çıktı Log4Net sisteminden bir sınıfa dair bilgileri göstermektedir. Bu sistem üzerindeki

Aşağıdaki çıktı da ROC uyum değerinin gösterildiği satırın altında her bir metot için (özel metotlar dışındaki) metot uyumu değerleri yer almaktadır. Bu değerlerin elde edilmesinde kullanılan öznitelikler ve onlara ait hesaplanmış veriler ise metotların altında listelenmişlerdir. Aşağıda kullanılmış olan kısaltmaların anlamları aşağıda verilmiştir.

WM: Metot Ağırlığı

BCOM: Temel Metot Uyumu COM: Nihai Metot Uyumu WA: Öznitelik Ağırlığı ES: Erişim Sayısı

ET: Erişim Türü (0: Doğrudan, 1: Dolaylı)

YD: Yazma Durumu (1: Yazma, 2: Okuma 3: Okuma/Yazma)

LCOM1: 26 LCOM2: 7 LCOM3: 4 LCOM5: 0,827160493827161 Coh: 0,255555555555556 LCOM4: 3 Co: 0,333333333333333

***Özel metotlar haricindeki metotların çağrım listesi başlangıç*** ActivateOptions - SendBuffer ActivateOptions - InitializeDatabaseCommand OnClose - SendBuffer OnClose - SendBuffer OnClose - InitializeDatabaseConnection OnClose - InitializeDatabaseCommand SendBuffer - SendBuffer SendBuffer - InitializeDatabaseConnection

AddParameter - InitializeDatabaseCommand SendBuffer - InitializeDatabaseConnection SendBuffer - InitializeDatabaseCommand InitializeDatabaseConnection - InitializeDatabaseCommand ActivateOptions - InitializeDatabaseConnection SendBuffer - GetLogStatement

***Özel metotlar haricindeki metotların çağrım listesi son*** TCC: 0,388888888888889

LCC: 0,444444444444444 ROC: 0,0443004448109466

ActivateOptions WM:10 BCOM:0,099815157116451 COM:0,0127363385734602 m_usePreparedCommand WA:2

ES:2 ET:0 YD:3

m_commandText WA:3 ES:2 ET:0 YD:1

m_dbConnection WA:6 ES:1 ET:1 YD:3

m_connectionString WA:2 ES:1 ET:1 YD:1

m_dbCommand WA:3 ES:1 ET:1 YD:3

m_commandType WA:2 ES:1 ET:1 YD:1

m_parameters WA:3 ES:1 ET:1 YD:1

OnClose WM:9,5 BCOM:0,0720887245841035 COM:0,00664333709541597 m_dbConnection WA:6

ES:3 ET:0 YD:3 m_dbCommand WA:3 ES:3 ET:0 YD:3

SendBuffer WM:3,5 BCOM:0,0299445471349353 COM:0,00114627047161142 m_dbConnection WA:6

m_useTransactions WA:1 ES:1 ET:0 YD:1

m_dbCommand WA:3 ES:1 ET:1 YD:1

m_usePreparedCommand WA:2 ES:1 ET:1 YD:1

m_parameters WA:3 ES:1 ET:1 YD:1

AddParameter WM:4 BCOM:0,011090573012939 COM:0,000157238747820496 m_parameters WA:3

ES:1 ET:0 YD:2

SendBuffer WM:4 BCOM:0,0325323475046211 COM:0,00135295207013547 m_dbConnection WA:6

ES:1 ET:0 YD:1 m_dbCommand WA:3 ES:4 ET:0 YD:1

m_usePreparedCommand WA:2 ES:1 ET:0 YD:1

m_parameters WA:3 ES:1 ET:0 YD:1

GetLogStatement WM:0 BCOM:0 COM:0

InitializeDatabaseConnection WM:6,5 BCOM:0,0451016635859519

COM:0,00260037946951141 m_dbConnection WA:6 ES:3 ET:0 YD:3

m_connectionString WA:2 ES:2 ET:0 YD:1

ResolveConnectionType WM:1 BCOM:0,0022181146025878

COM:0,0022181146025878 m_connectionType WA:1 ES:2 ET:0 YD:1

m_dbConnection WA:6 ES:1 ET:0 YD:1 m_dbCommand WA:3 ES:14 ET:0 YD:3 m_commandText WA:3 ES:3 ET:0 YD:1

m_commandType WA:2 ES:1 ET:0 YD:1

m_parameters WA:3 ES:1 ET:0 YD:1

Benzer Belgeler