6. OO metrikák

A VIK Wikiből
(OotOOMetrikak szócikkből átirányítva)

6.1. Tervezési elvek

Csatolás

  • függőségek minimalizálása
  • package, osztály, objektum
  • D(ARP)C = Direct (Attribute, Reference, Parameter) Based Coupling

Azon különbözo osztályok száma, amelyeknek attribútumát, metódusát paraméterként érjük el

  • DCC = Direct Class Coupling

Azon osztályok száma, amikhez egy A osztály attributum deklaracioin keresztul, vagy az A metodusainak parameterlistain keresztul csatolva van.

  • CBO = Coupling Between Objects

A csatolt osztalyok szamat veszi, ahol a vizsgalt osztaly akkor szamit csatolt osztalynak egy masik osztalyhoz, ha hasznalja annak attributumat, VAGY metodusat.

  • Instability (RMI) = kimenő_csatolás / (bejövő_csatolás + kimenő_csatolás)

Osztály csatolás

  • NUCD = Number of used classes by dependency relation
  • TNUCD = Total number of evidences for Used classes by dependency relation
  • RNUCD = NUCD / TNUCD
  • öröklés: mélysége, gyerekek száma
  • asszociáció: NAC = Number of associated classes with a class
  • TACU = Total associated class Usages

Kohézió

  • Egy egységbe (modul, osztály, blokk) tartozó elemek közötti kapcsolat erőssége.
  • Modulokban: információs, funkcionális, kommunikációs, procedurális, időbeli, logikai, eseti

információs:
funkcionális: A modul egyetlen jól definiált célt szolgál. Ideális. pl:sqrt();
kommunikációs: A modulhoz tartozó műveletek azonos adatokkal dolgoznak. "Ha már lekérdeztük az adatot akkor ellenőrizzük rajta ... is" - filozófia
procedurális: A modul által végrehajtott műveletek egymás után következnek. "Nyomtató beállítása, nyomtatás..."
temporális: A modul által végrehajtott műveletek egyszerre elvégezhetőek. "Fájl lezárás, hiba-log írás, hiba képernyőre írás" - téma azonos, sorrend mindegy.
logikai: A modul műveletei között csak logikai kapcsolat van.
eseti:

  • |P|| = {(Ai,Aj) Ai metszet Aj = 0} függvények száma, nincs közös attribútum,
  • |Q|| = {(Ai,Aj) Ai metszet Aj <> 0} függvények száma, közös attribútummal
  • LCOM = |P|| - ||Q (ha az eredmény pozitív), különben 0.

Egyéb

  • CC = Cyclomatic Complexity: metódus bonyolultsága
  • WMC = Weighted methods per class = \x{2211} CC (minden metódusra)
  • RFC = Response for a class: metódusok száma
  • RMA = Abstractness: absztrakt / nem absztrakt (package)

6.2. Cocomo

Effort

  • Effort = 2.94 * EAF * (KSLOC)E
  • Effort (PersonMonth, PM)
  • EAF = Effort Adjustment Factor
  • KSLOC = kilo source LOC
  • E = exponens

Duration

  • Duration = 3,67 * (Effort)SE
  • Duration - (PM-ben)
  • Effort (PersonMonth, PM)
  • SE = schedule equation exponent

6.3. CDP

6.3.1. Locking minták

Lock

  • probléma: biztonságos lock felszabadítás
  • megoldás: saját guard osztály

Double check

  • egymásba ágyazott dupla ellenőrzés
  • prob: vagy nem tudunk singletont impl, vagy nem hatékony, vagy compiler nem tudja kioptimalizálni

Thread-safe lock

  • prob: komponensen belülről és kívülről is egyaránt használható legyen. Cél:holtpont elkerülése, hatékonyság
  • mo: két interfész: külső ellenőriz, belső (privát) elfogad

Bedrótozott lock

  • mo: run-time szinkronizáció

6.3.2. Konkurencia minták

Monitor objektum

  • több kliens esetén
  • mo: minden objektumnak van monitora + várakozási sora (lásd Objektum): synchronized blokk

Aktív objektum

  • metódushívás nem blokkolhat
  • mo: hívás és végrehajtás szétcsatolása, végrehajtás saját szálon (kell valami üzenetsor)

Reactor

  • 1 szerver, több kliens
  • mo: szinkron események demultiplexelése

Vezető-követő

  • események konkurrensen
  • mo: szálcsokor, szinkron események demultiplexelése

6.3.3. Esemény minták

Proactor

  • mint a Reactor, csak itt esemény
  • mo: mint a Reactor (szinkron események demultiplexelése)

Csatlakozó (acceptor-connector)

  • összefonódik a kapcsolódás és kommunikáció
  • mo: külön szedni (szinkron vagy aszinkron kapcsolódás)

6.4. Visitor Combinator

  • Sequence(Identity, v) = v
  • Sequence(v, Identity) = v
  • Sequence(Fail, v) = Fail
  • Sequence(v, Fail) = Fail //ha v -nek nincs mellékhetása
  • Choice(Fail, v) = v
  • Choice(v, Fail) = v
  • Choice(Identity, v) = Identity
  • Try(v) = Choice(v, Identity)
  • IfZeroAddOne = Try(Sequence(IsZero, AddOne))

-- MeszegetoBalazsIstvan - 2008.05.27.

-- Velias - 2009.05.27.

-- Ciana - 2010.05.31

-- Csádám - 2010.05.31.