Back to IF3250 Proyek Perangkat Lunak

Object-Oriented Metrics

Questions/Cues

  • Metrik OO apa saja yang umum dipakai?
  • Apa itu WMC, dan apa viewpoint Chidamber & Kemerer?
  • Bagaimana DIT, NOC, NOO, NOA mengukur hierarki inheritance?
  • Apa rumus PF dan MIF?
  • Bagaimana coupling diukur (RFC, CF, CBO, MPC)?
  • Bagaimana cara menghitung LCOM?

Reference Points

  • Software Quality and Metrics (Halaman 41-50)
  • Software Quality and Metrics (Halaman 51-56)

Daftar Metrik untuk Software Berorientasi Objek

  • WMC (Weighted Methods per Class)
  • CS (Class Size)
  • NoC (Number of Children)
  • PF (Polymorphism Factor)
  • DIT (Depth of Inheritance Tree)
  • NOO (Number of Operations Overridden)
  • NOA (Number of Operations Added)
  • MIF (Method Inheritance Factor)
  • Coupling Metrics: RFC (Response For a Class), CF (Coupling Factor), MPC (Message Passing Coupling), CBO (Coupling Between Objects)
  • LCOM (Lack of Cohesion of Methods)

Weighted Methods per Class (WMC)

di mana = kompleksitas (mis. volume, cyclomatic complexity, dll.) tiap method. Viewpoint (Chidamber & Kemerer):

  • Jumlah & kompleksitas method = indikator berapa banyak waktu & effort untuk mengembangkan dan memelihara objek.
  • Semakin banyak method dalam objek, semakin besar dampak potensial ke children.
  • Objek dengan banyak method cenderung lebih application specific, sehingga membatasi reuse.

Class Size (CS)

CS = total jumlah operations (inherited, private, public) + jumlah attributes (inherited, private, public). Bisa menjadi indikasi terlalu banyak tanggung jawab pada satu class.

Number of Children (NOC)

NOC = jumlah subclass yang langsung subordinate ke sebuah class. Viewpoint:

  • Saat NOC bertambah, reuse meningkat — tetapi abstraksi bisa terdilusi.
  • Depth umumnya lebih baik dari breadth dalam hierarki class karena mendorong reuse method via inheritance.
  • Class lebih tinggi di hierarki seharusnya punya lebih banyak subclass daripada yang lebih bawah.
  • NOC memberi gambaran potensi pengaruh sebuah class pada desain: class dengan banyak children mungkin butuh lebih banyak testing.

Polymorphism Factor (PF)

  • = jumlah method baru (new methods).
  • = jumlah method overriding.
  • = jumlah descendant class dari sebuah base class.
  • Yaitu jumlah method yang me-redefine method warisan, dibagi jumlah maksimum situasi polimorfik distinct yang mungkin.

Depth of Inheritance Tree (DIT)

DIT = panjang maksimum dari sebuah node ke root (base class). Viewpoint:

  • Subclass level rendah mewarisi banyak method → perilaku lebih sulit diprediksi.
  • Tree lebih dalam → kompleksitas desain lebih besar.

NOO dan NOA

  • Number of Operations Overridden (NOO) — NOO besar mengindikasikan kemungkinan masalah desain dan abstraksi buruk pada hierarki inheritance.
  • Number of Operations Added (NOA) — jumlah operation yang ditambahkan sebuah subclass. Saat operation ditambah, ia makin jauh dari super class. Seiring depth bertambah, NOA seharusnya berkurang.

Method Inheritance Factor (MIF)

  • = jumlah method yang diwarisi dan tidak di-override pada .
  • = jumlah method yang dapat dipanggil dengan .
  • = jumlah method yang dideklarasikan di .

Relasi: (“semua yang bisa dipanggil = yang baru/overloaded + yang diwarisi”). MIF ∈ [0,1]: dekat 1 berarti sedikit spesialisasi; dekat 0 berarti perubahan besar.

Coupling Metrics

Response for a Class (RFC) = jumlah method yang bisa dipanggil sebagai respons terhadap pesan ke sebuah class (local + remote). Saat RFC naik: testing effort naik, kompleksitas objek naik, lebih sulit dipahami.

Coupling Factor (CF):

  • jika ada relasi antara client class dan server class; 0 jika tidak.
  • = total jumlah relasi yang mungkin.
  • CF ∈ [0,1] dengan 1 = coupling tinggi.

Coupling Between Objects (CBO) = jumlah kolaborasi antara dua class (fan-out sebuah class C) = jumlah class lain yang direferensikan di C. Viewpoint: saat kolaborasi naik, reuse turun; high fan-out = coupling tinggi (tidak diinginkan); high fan-in = desain objek baik & reuse tinggi; tidak mungkin mempertahankan high fan-in dan low fan-out di seluruh sistem.

Lack of Cohesion in Methods (LCOM)

Untuk class dengan method , dan = himpunan instance variable yang dipakai (ada himpunan ):

  • Jika semua kosong → .
  • jika ; selain itu .

Contoh: class dengan , , , . , .

Penjelasan: LCOM = jumlah intersection kosong dikurangi jumlah intersection tak-kosong — sebuah notion derajat kemiripan method. Jika dua method memakai instance variable yang sama, mereka “mirip”. LCOM = 0 belum tentu maximally cohesive (terjadi saat atau ).

Summary

Metrik OO mengukur dimensi yang tak tertangkap LOC. WMC = jumlah kompleksitas method (effort & dampak ke children). Hierarki inheritance diukur oleh DIT (kedalaman), NOC (jumlah anak), NOO/NOA (override/added), serta MIF dan PF. Coupling diukur oleh RFC, CF, CBO (high fan-out buruk, high fan-in baik). Kohesi diukur oleh LCOM = jika (jumlah pasangan method tanpa instance variable bersama dikurangi yang berbagi). Metrik-metrik ini diturunkan dari tradisi Chidamber & Kemerer dan dapat dihitung otomatis — lihat Software Measurement Tools.