Rendszerfejlesztés gyakorlat - © Fülöp Lajos Minőségmérés
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Minőségmérés Hogyan határozzuk meg egy szoftver minőségét? Mérjük Mit? Mivel? Milyen szempontok alapján? Rendszerfejlesztés gyakorlat - © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Méret metrikák Méret metrikák – a rendszer (elemek) mérete Legismertebbek: LOC (Lines Of Code) – sorok száma lLOC (Logical Lines Of Code) – nem üres, nem komment sorok száma NCL/NST/NUN (Number of CLasses/ STructures/ UNions) NNS (Number of Namespaces) NA/NM (Number of Attributes, Number of Methods) NF (Number of Functions) "Measuring programming progress by lines of code is like measuring aircraft building progress by weight." ~ Bill Gates.Bill Gates
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Öröklődés alapú metrikák A rendszerben található osztályok öröklődési kapcsolatait mérik Nem csak osztályokra, hanem a teljes rendszerre vagy egy namespace-re is lehet értelmezni Specialization és reUse metrikák Egy adott namespace-re vagy a teljes rendszerre értelmezett metrikák [3] A strukturáltságot és az újrafelhasználást méri DIT: Depth of Inheritance – azt mondja meg, hogy hányadik öröklődési szinten található az adott osztály karbantarthatóságot, fejleszthetőséget csökkenti NOC: Number Of Children – gyerekek száma egy adott osztályra NOP: Number Of Parents – szülők száma egy adott osztályra
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Öröklődési indexek ReUse index (U) Az osztályok újrafelhasználási arányát méri Mozilla esetében ez az érték 0.38 Specialization index (S) az ősosztályok mennyire sikeresen emelték ki a rendszer absztrakt tulajdonságait ősosztályok száma összes osztály száma leszármazott osztályok száma ősosztályok száma
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos McCabe komplexitás Alternatív definíciók: McCabe(P) = E – N + P E – gráf éleinek a száma, N – gráfban lévő csúcsok száma P – a gráfban lévő összefüggő komponensek száma McCabe(P) = elágazási pontok száma+1 McCabe(P) = zárt körök száma+1 Befolyásolt aggregált metrikák AggregatesFactorLevel Reusability-high Maintainability-high Functionality+low Reliability+low Efficiency-low
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos WMC komplexitás Weighted Methods per Class Chidamber and Kemerer (C&K) H. Bär [8], Th. Panas [9] Értelmezhető Osztályokra Modulokra Fájlokra A tartalmazott metódusok súlyozott összege A súlyok lehetnek: McCabe komplexitás LOC Utasítások száma (NS) 1 (súlyozatlan WMC) -> Number of Methods (NM)
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Kohéziós metrikák Azt mérik, hogy egy osztály metódusai mennyire szorosan függnek össze egymással Magas kohéziós érték a célszerű, mert, elősegíti az egységbe zárást (encapsulation) Kohéziós érték helyett kohézió hiányáról beszélünk (LCOM – Lack of Cohesion On Methods) LCOM1: Minden metódus párra: Ha használnak közös adattagot, növeljük a P-t 1-gyel Ellenkező esetben növeljük Q-t 1-gyel LCOM1 = Q – P (ha Q>P, 0 különben) Léteznek további LCOM definíciók is
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Csatolás metrikák Mérőszám, hogy ez egyes osztályok mennyire kapcsolódnak másokhoz Metódushívásokon keresztül Adateléréseken keresztül Magas csatolás érték Alacsony egységbezárás Újrahasználhatóság gátlása Hibaszám növekedése (az osztály-interakciók következménye) Alacsony tesztelhetőség Változásra való érzékenység
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Csatolás CBO Coupling Between Object classes Chidamber & Kemerer Azon osztályok száma, amiket az adott osztály használ Egy osztály csatolva van egy másikhoz, ha használja annak attribútumát vagy metódusát, vagy közvetlenül származik belőle RFC Response For a Class Chidamber & Kemerer Azon metódusok számát adja meg, amelyeket egy osztály meg tud hívni válaszul egy kapott üzenetre RFC = NML + NRM NML – lokális metódusok száma NRM – meghívott távoli metódusok száma
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Metrika- csoport Konkrét metrika példák Mire hat? MéretLOC,lLOC,NCL,NST,NF, NA,… újrafelhasználhatóság(-), karbantarthatóság(-), … ÖröklődésDIT, NOP, NOC, …újrafelhasználhatóság(+), karbantarthatóság(+,-),… KomplexitásMcCabe, WMCtesztelhetőség, karbantarthatóság(-),… KohéziósLCOM1, …hatékonyság(-), karbantarthatóság(-),… CsatolásCBO, RFCújrafelhasználhatóság(-), karbantarthatóság(-)…
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Bad Smell A szoftverfejlesztés során a keletkezhetnek nem kívánatos, kevésbé hatékony részek Ezekre több jel is utalhat Ezeket rossz szagú (Bad Smell) helyeknek nevezzük Ha valaki kinyit egy hűtőt, még azelőtt megérzi a romlott étel szagát, mielőtt kivenné Nem mindig jelentenek hibát, csak felhívják a figyelmet olyan pontokra, amelyeket érdemes kivizsgálni Data Class - Adat Osztály Feature Envy - Attribútum Irigység Large Class - Nagy Osztály Lazy Class - Lusta Osztály Long Method - Hosszú eljárás Long Parameter List - Hosszú Paraméterlista Temporary Field – Ideiglenes mező
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Rendszerfejlesztés gyakorlat - © Fülöp Lajos Kódolási minőség metrikák Kódolási szabálysértések, pl. PMD, CheckStyle, Columbus Nyelvfüggő A korábbi metrikák nehézkesen használhatók egyéni teljesítmény mérésére Kódolási szabálysértések lehetséges osztályozása: Bugs and Dangerous Constructs (BDC) Memory Handling Problems (MHP) Object Orientedness Problems (OOP) Complexity Problems (CP) Readability and Consistency problems (RCP) Code Layout Problems (CLP)
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Kódolási minőség metrikák Példák JGN1007=Strings should be compared with equals() instead of == operator JGN1001=Don't refer to null object JGN3005=Element of Collection should not be modified during iteration JGN2005=If a given method invocation is followed by another method invocation in high percentage of the cases, it is suspicious when the second invocation is missing.
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Eclipse plugin A projekt properties-nél be kell kapcsolni Metrics view Hierarchikus nézet Kiurgó értékek, határtúllépés Preferences Safe Ranges - beállítás Rendszerfejlesztés gyakorlat - © Fülöp Lajos