„4. OO metrikák (2012)” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
 
(9 közbenső módosítás, amit egy másik szerkesztő végzett, nincs mutatva)
40. sor: 40. sor:
  
 
==Cocomo==
 
==Cocomo==
===Effort===
+
===Célcsoportok===
 +
* Application composition (1. fázis)
 +
* Alkalmazás generálás
 +
* Rendszerintegráció
 +
* Infrastruktúra
 +
(Utolsó alkotja a 3 fázisú modellt)
 +
===Fázisok===
 +
* Application Composition (prototípus), Object Points-ból indul
 +
* Early Desing (architektúra változatok), Funcation Pointból és SLOC-ból indul
 +
* Post-Architecture (megoldás ismeret), Function Pointból és SLOC-ból indul
 +
===Effort (munka mennyisége)===
 
* Effort = 2.94 * EAF * (KSLOC)<sup>E</sup>
 
* Effort = 2.94 * EAF * (KSLOC)<sup>E</sup>
 
* Effort (PersonMonth, PM)
 
* Effort (PersonMonth, PM)
* EAF = Effort Adjustment Factor
+
* EAF = Effort Adjustment Factor, hangolási tényezök határozzák meg (termék, platform, stáb, projekt), (7,17)
 
* KSLOC = kilo source LOC
 
* KSLOC = kilo source LOC
* E = exponens
+
* E = exponens, skaláris tényezök határozzák meg (procedens, fejlesztés rugalmassága, kockázatkezelés, csoport kohézió, process érettsége)
===Duration===
+
 
 +
===Duration (fejlesztési idö)===
 
* Duration = 3,67 * (Effort)<sup>SE</sup>
 
* Duration = 3,67 * (Effort)<sup>SE</sup>
 
* Duration - (PM-ben)
 
* Duration - (PM-ben)
52. sor: 63. sor:
 
* SE = schedule equation exponent
 
* SE = schedule equation exponent
  
==CDP==
+
==CDP minták==
 
=== Locking minták===
 
=== Locking minták===
 
====Lock====
 
====Lock====
81. sor: 92. sor:
 
====Proactor====
 
====Proactor====
 
* mint a Reactor, csak itt esemény
 
* mint a Reactor, csak itt esemény
* mo: mint a Reactor (szinkron események demultiplexelése)
+
* mo: mint a Reactor, csak itt aszinkron események demultiplexelése jön létre
 +
 
 
====Csatlakozó (acceptor-connector)====
 
====Csatlakozó (acceptor-connector)====
 
* összefonódik a kapcsolódás és kommunikáció
 
* összefonódik a kapcsolódás és kommunikáció
87. sor: 99. sor:
  
 
==Visitor Combinator==
 
==Visitor Combinator==
 +
 +
=== Alap visitor combinatorok ===
 +
* Identity: semmit sem csinál (non-iterating default visitor)
 +
* Sequence(v1, v2): szekvenciálisan végrehajtja v1-et majd v2-t
 +
* Fail: Raise exception
 +
* Choice(v1, v2): megpróbálja v1-et, ha nem sikerül, akkor megpróbálja v2-t
 +
* All(v): engedélyezi visitor v-t szekvenciálisan minden azonnali részfára
 +
* One(v): engedélyezi visitor v-t szekvenciálisan az azonnali részfára amíg sikeres
 +
 +
Forrás: http://homepages.cwi.nl/~markvdb/courses/SoftwareConstruction/JJTraveler.pdf
 +
 +
=== Kombinátor algebra ===
 
* Sequence(Identity, v) = v
 
* Sequence(Identity, v) = v
 
* Sequence(v, Identity) = v
 
* Sequence(v, Identity) = v
96. sor: 120. sor:
 
* Try(v) = Choice(v, Identity)
 
* Try(v) = Choice(v, Identity)
 
* IfZeroAddOne = Try(Sequence(IsZero, AddOne))
 
* IfZeroAddOne = Try(Sequence(IsZero, AddOne))
 +
 +
=== Bejáró kombinátorok ===
 +
 +
==== Mindegyik közvetlen gyermekre ====
 +
<pre>
 +
class All implements Visitor {
 +
      Visitor v;
 +
      public All(Visitor _v){ v = _v; }
 +
      public void visit_Leaf(Leaf leaf) throws VF { }
 +
      public void visit_Fork(Fork fork) throws VF {
 +
            fork.left.accept(v);
 +
            fork.right.accept(v);
 +
      }
 +
}
 +
</pre>
 +
 +
==== TopDown(v) = Sequence(v, All(TopDown(v)) ====
 +
<pre>
 +
class TopDown extends Sequence {
 +
      public TopDown(Visitor v) {
 +
            super(v, null);
 +
            then = new All(this);
 +
      }
 +
}
 +
</pre>
 +
 +
==== BottomUp(v) = Sequence(All(BottomUp(v)), v) ====
 +
<pre>
 +
class ButtomUp extends Sequece {
 +
      public BottomUp(Visitor v) {
 +
            super(null, v);
 +
            first = new All(this);
 +
      }
 +
}
 +
</pre>
  
 
-- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27.
 
-- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27.

A lap jelenlegi, 2016. április 4., 05:53-kori változata

Tervezési elvek

Csatolás

  • függőségek minimalizálása package, osztály és objektum szinten
  • 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
    • funkcionális: A modul egyetlen jól definiált célt szolgál. Ideális. pl:sqrt() - OK
    • szekvenciális: elfogadott
    • 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", switch a müveletre
    • procedurális: A modul által végrehajtott műveletek egymás után következnek. "Nyomtató beállítása, nyomtatás...", instanceOf
    • 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 = CC (minden metódusra)
  • RFC = Response for a class: metódusok száma
  • RMA = Abstractness: absztrakt / nem absztrakt (package)

Cocomo

Célcsoportok

  • Application composition (1. fázis)
  • Alkalmazás generálás
  • Rendszerintegráció
  • Infrastruktúra

(Utolsó alkotja a 3 fázisú modellt)

Fázisok

  • Application Composition (prototípus), Object Points-ból indul
  • Early Desing (architektúra változatok), Funcation Pointból és SLOC-ból indul
  • Post-Architecture (megoldás ismeret), Function Pointból és SLOC-ból indul

Effort (munka mennyisége)

  • Effort = 2.94 * EAF * (KSLOC)E
  • Effort (PersonMonth, PM)
  • EAF = Effort Adjustment Factor, hangolási tényezök határozzák meg (termék, platform, stáb, projekt), (7,17)
  • KSLOC = kilo source LOC
  • E = exponens, skaláris tényezök határozzák meg (procedens, fejlesztés rugalmassága, kockázatkezelés, csoport kohézió, process érettsége)

Duration (fejlesztési idö)

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

CDP minták

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ó

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

Esemény minták

Proactor

  • mint a Reactor, csak itt esemény
  • mo: mint a Reactor, csak itt aszinkron események demultiplexelése jön létre

Csatlakozó (acceptor-connector)

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

Visitor Combinator

Alap visitor combinatorok

  • Identity: semmit sem csinál (non-iterating default visitor)
  • Sequence(v1, v2): szekvenciálisan végrehajtja v1-et majd v2-t
  • Fail: Raise exception
  • Choice(v1, v2): megpróbálja v1-et, ha nem sikerül, akkor megpróbálja v2-t
  • All(v): engedélyezi visitor v-t szekvenciálisan minden azonnali részfára
  • One(v): engedélyezi visitor v-t szekvenciálisan az azonnali részfára amíg sikeres

Forrás: http://homepages.cwi.nl/~markvdb/courses/SoftwareConstruction/JJTraveler.pdf

Kombinátor algebra

  • 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))

Bejáró kombinátorok

Mindegyik közvetlen gyermekre

class All implements Visitor {
      Visitor v;
      public All(Visitor _v){ v = _v; }
      public void visit_Leaf(Leaf leaf) throws VF { }
      public void visit_Fork(Fork fork) throws VF {
            fork.left.accept(v);
            fork.right.accept(v);
      }
}

TopDown(v) = Sequence(v, All(TopDown(v))

class TopDown extends Sequence {
      public TopDown(Visitor v) {
            super(v, null);
            then = new All(this);
      }
}

BottomUp(v) = Sequence(All(BottomUp(v)), v)

class ButtomUp extends Sequece {
      public BottomUp(Visitor v) {
            super(null, v);
            first = new All(this);
      }
}

-- MeszegetoBalazsIstvan - 2008.05.27.

-- Velias - 2009.05.27.

-- Ciana - 2010.05.31

-- Csádám - 2010.05.31.

--Szabó Csaba (vita) 2012. december 16., 19:54 (CET)