„4. OO metrikák (2012)” változatai közötti eltérés
Ugrás a navigációhoz
Ugrás a kereséshez
(10 közbenső módosítás, amit egy másik szerkesztő végzett, nincs mutatva) | |||
35. sor: | 35. sor: | ||
===Egyéb=== | ===Egyéb=== | ||
* CC = Cyclomatic Complexity: metódus bonyolultsága | * CC = Cyclomatic Complexity: metódus bonyolultsága | ||
− | * WMC = Weighted methods per class = | + | * WMC = Weighted methods per class = CC (minden metódusra) |
* RFC = Response for a class: metódusok száma | * RFC = Response for a class: metódusok száma | ||
* RMA = Abstractness: absztrakt / nem absztrakt (package) | * RMA = Abstractness: absztrakt / nem absztrakt (package) | ||
==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 | + | * 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
Tartalomjegyzék
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)