Velkommen Design af genbrugeligt objektorienteret software Evaluering af software ved hjælp af statiske mål. 24 februar 2004 Specialeforsvar af: Søren Gaardbo Jensen Design af genbrugeligt objektorienteret software p. 1/38
Motivation og baggrund Hvad er problemet? Design af genbrugeligt objektorienteret software p. 2/38
Motivation og baggrund Hvad er problemet? Hvad karakteriserer det gode design i forhold til genbrug og vedligeholdelse, og kan vi automatisk evaluere software så problematiske dele identificeres? Design af genbrugeligt objektorienteret software p. 2/38
Motivation og baggrund Hvad er problemet? Hvad karakteriserer det gode design i forhold til genbrug og vedligeholdelse, og kan vi automatisk evaluere software så problematiske dele identificeres? Reusability/Maintainability Profiler. Genbrug? - Vedligeholdelse? Design af genbrugeligt objektorienteret software p. 2/38
Strategi Strategi. Eksisterende softwaremål. Designprincipper og sammenhæng med softwaremålene. Tilstrækkelighed i mål. Eksperimenter. Design af genbrugeligt objektorienteret software p. 3/38
Afgrænsning Objektorienterede paradigme Java. Design af genbrugeligt objektorienteret software p. 4/38
Afgrænsning Objektorienterede paradigme Java. Ingen metadata. Design af genbrugeligt objektorienteret software p. 4/38
Afgrænsning Objektorienterede paradigme Java. Ingen metadata. Statiske mål. public class Receipt { private Sale sale; public Receipt(Sale _sale) { sale = _sale; } public String gettext() { float total=0; String receipt; receipt = sale.getcustomer().getname() + "\n"; receipt += sale.getcustomer().getaddress() + "\n\n"; SalesItems salesitems = sale.getsalesitems(); Product[] p = salesitems.getproducts(); } } for(int i=0; i<salesitems.getproductcount();i++) { receipt += p[i].getname() + "\t" + p[i].getpriceinclvat() +"\n"; total += p[i].getpriceinclvat(); } receipt += "\ntotal:\t\t" + total + "\n"; return receipt; Softwaremål CBO = 5 LOC = 18 Design af genbrugeligt objektorienteret software p. 4/38
Resultat Plug-in til Eclipse blev udviklet. Sammenhæng mellem nogle mål og principper. Nye mål blev konstrueret: Abstraktionsfaktorer. Kendskab. Design af genbrugeligt objektorienteret software p. 5/38
Konklusion Målene kan i nogen grad identificere potentielt problematisk kode. Kan ikke bruges helt uden metadata. Abstraktionsfaktorene ser lovende ud. Skal undersøges nærmere. Design af genbrugeligt objektorienteret software p. 6/38
Disposition Eksisterende softwaremål. Designprincipper og sammenhæng med softwaremålene. Tilstrækkelighed i mål. Eksperimenter. Konklusion. Design af genbrugeligt objektorienteret software p. 7/38
Softwaremål Strukturerede paradigme. Objektorienterede paradigme. To gennemgående begreber: Kobling. Kohæsion. Design af genbrugeligt objektorienteret software p. 8/38
Kobling & Kohæsion Kobling. Design af genbrugeligt objektorienteret software p. 9/38
Kobling & Kohæsion Kobling. Client +getyearssince(int year) MySystem +getcurrentyear() return MySystem.getCurrentYear() - year; // return years: yy Design af genbrugeligt objektorienteret software p. 9/38
Kobling & Kohæsion Kobling. Client +getyearssince(int year) MySystem +getcurrentyear() return MySystem.getCurrentYear() - year; // return years: yy Kobling fra client til MySystem. Design af genbrugeligt objektorienteret software p. 9/38
Kobling Ændringer i et modul kan kræve ændringer i koblede moduler. Svært at isolere til genbrugelige moduler. Svært at overskue: Kræver kendskab til koblede dele. Design af genbrugeligt objektorienteret software p. 10/38
Kohæsion Kohæsion. Design af genbrugeligt objektorienteret software p. 11/38
Kohæsion Kohæsion. +method(...) ClientF2C Converter +convert(int type, int value):int +method(...) ClientI2C Converter.convert( FAHRENHEIT_2_CELSIUS, 100) Converter.convert( INCHES_2_CM, 100) public int convert(int type, int value) { int result = 0; switch(type) { case FAHRENHEIT_2_CELSIUS: result = (int) ((value - 32) / 1.8); break; case INCHES_2_CM: result = (int) (value * 2.54); break; } return result; } Design af genbrugeligt objektorienteret software p. 11/38
Kohæsion Lettere at vedligeholde. Mindre fejlbehæftet [McConnell] Lav kohæsion er udtryk for uhensigtsmæssigt design. Design af genbrugeligt objektorienteret software p. 12/38
Måling af kobling Fan in/fan out. Coupling Between Object classes: CBO Coupling Factor: COF. Globale data Fan out (opdatering) Fan in (hentning) Fan in (Kald fra andre moduler) Modul Fan out (Kald til andre moduler) Design af genbrugeligt objektorienteret software p. 13/38
Måling af kohæsion Kan ikke måles! Design af genbrugeligt objektorienteret software p. 14/38
Måling af kohæsion Kan ikke måles! Lack of COhesion in Methods: LCOM. Flere versioner. Design af genbrugeligt objektorienteret software p. 14/38
Disposition Eksisterende softwaremål. Designprincipper og sammenhæng med softwaremålene. Tilstrækkelighed i mål. Eksperimenter. Konklusion. Design af genbrugeligt objektorienteret software p. 15/38
Designprincipper Der findes mange principper. Mange egenskaber kan ikke måles. Udvalgt fire principper: Information Expert. Polymorphism. Law of Demeter. Design mod et interface. Design af genbrugeligt objektorienteret software p. 16/38
Designprincipper Information Expert. Mindre kommunikation mellem klasser. Højere kohæsion i klassen. DataClass attributes 1..m OperationClass +operation 1..n Design af genbrugeligt objektorienteret software p. 17/38
Designprincipper Information Expert. Mindre kommunikation mellem klasser. Højere kohæsion i klassen. Ikke problemfrit. DataClass attributes 1..m OperationClass +operation 1..n Design af genbrugeligt objektorienteret software p. 17/38
Polymorphism Polymorphism. Bruges til udvidelser og erstatninger. Hvis princippet erstatter switch i kode, redureres koblingen. Receipt 1 1 Sale <<uses>> <<interface>> PrintDeviceInterface +print(string):void +setitalics(boolean):void +setboldface(boolean):void 1 1 PrintDeviceFactory ScreenPrintDevice <<creates>> Design af genbrugeligt objektorienteret software p. 18/38
Law of Demeter Law of Demeter. Receipt Sale Customer String +print() +getcustomer() +getname() -sale:sale -customer:customer -name:string customer.getname() return name; sale.getcustomer().getname() Sale Receipt Customer Design af genbrugeligt objektorienteret software p. 19/38
Law of Demeter - 2 Receipt Sale Customer String +print() +getcustomername() +getname() -sale:sale -customer:customer -name:string return customer.getname() return name; sale.getcustomername() Sale Receipt Customer Reducerer koblinger i systemet. Design af genbrugeligt objektorienteret software p. 20/38
Design mod et interface Design mod et interface. Generelt princip. Sikrer information hiding. Polymorphism afhænger af dette. Design af genbrugeligt objektorienteret software p. 21/38
Disposition Eksisterende softwaremål. Designprincipper og sammenhæng med softwaremålene. Tilstrækkelighed i mål. Eksperimenter. Konklusion. Design af genbrugeligt objektorienteret software p. 22/38
Tilstrækkelighed Ingen mål afslører brud på Design mod et interface. Design af genbrugeligt objektorienteret software p. 23/38
Tilstrækkelighed Ingen mål afslører brud på Design mod et interface. Abstraktionsfaktorer. Design af genbrugeligt objektorienteret software p. 23/38
Tilstrækkelighed Ingen mål afslører brud på Design mod et interface. Abstraktionsfaktorer. KoblingsAbstraktionsFaktor baseret på CBO. Design af genbrugeligt objektorienteret software p. 23/38
Abstraktionsfaktorerne Koblingsbaseret abstraktion er ikke altid tilstrækkelig. Design af genbrugeligt objektorienteret software p. 24/38
Abstraktionsfaktorerne Koblingsbaseret abstraktion er ikke altid tilstrækkelig. Design af genbrugeligt objektorienteret software p. 24/38
Kendskab Kendskab. Tæller samtlige typer der er kendskab til. Supermængde til CBO. Grænseklasser medtages i målet. Design af genbrugeligt objektorienteret software p. 25/38
Abstraktionsfaktorerne Forholdet mellem interface koblinger i forhold til samtlige koblinger. Forholdet mellem interface kendskaber i forhold til samtlige kendskaber. Design af genbrugeligt objektorienteret software p. 26/38
Disposition Eksisterende softwaremål. Designprincipper og sammenhæng med softwaremålene. Tilstrækkelighed i mål. Eksperimenter. Konklusion. Design af genbrugeligt objektorienteret software p. 27/38
Eksperimenter To forskellige eksperimenter. Tre softwaremål LCOM. CBO. Kendskabet. Design mod et interface. Abstraktionsfaktorene. Design af genbrugeligt objektorienteret software p. 28/38
Eksperimenter Information Expert. Kobling er reduceret. Kohæsion er forbedret (småt system). Kendskab er reduceret. Design af genbrugeligt objektorienteret software p. 29/38
Eksperimenter Polymorphism. Koblingen er bedre pga. omfordeling af koblingerne. Kohæsionen er uændret (småt system). Kendskab er reduceret. Design af genbrugeligt objektorienteret software p. 30/38
Eksperimenter Law of Demeter. Kobling er bedre pga. omfordeling af koblingerne. Kohæsionen er uændret (småt system). Kendskab er lidt reduceret uden parm. og lidt forøget med parm. Design af genbrugeligt objektorienteret software p. 31/38
Eksperimenter Svært at sige noget om kohæsionen pga. systemets størrelse. Generelt bliver koblinger reduceret. Generelt bliver kendskabet reduceret. Koblingsmålet kan måske bruges til identifikation af problematiske klasser. Design af genbrugeligt objektorienteret software p. 32/38
Eksperimenter - Abstraktionsfaktorene Interfaceprincippet i Eclipse & POS. To versioner: Kendskab & kobling. Forventet at Eclipse er mere abstrakt end POS. Design af genbrugeligt objektorienteret software p. 33/38
Kendskab Kendskab. Kendskab i Eclipse og Pos 80 70 60 50 40 30 20 10 0 x = 0 0<x<10 10 <= x < 20 20 <= x < 30 30 <= x < 40 40 <= x < 50 50 <= x < 60 60 <= x < 70 70 <= x < 80 % af klasser 80 <= x < 90 90 <= x < 100 100 <= x Kendskab Eclipse Pos 35 30 25 20 15 10 5 0 Kendskab (0 < kendskab <= 20) i Eclipse og Pos Eclipse Pos 0 < x <= 2 2 < x <= 4 4 < x <= 6 6 < x <= 8 8 < x <= 10 10 < x <= 12 12 < x <= 14 14 < x <= 16 16 < x <=18 18 < x <=20 Kendskab Design af genbrugeligt objektorienteret software p. 34/38 % af klasser
Kobling Kobling. Kobling (CBO) i Eclipse og Pos 70 60 50 40 30 20 10 0 x = 0 0<x<10 10 <= x < 20 20 <= x < 30 30 <= x < 40 40 <= x < 50 50 <= x < 60 60 <= x < 70 70 <= x < 80 % af klasser 80 <= x < 90 90 <= x < 100 CBO Eclipse Pos 20 18 16 14 12 10 8 6 4 2 0 Kobling (CBO) i Eclipse og Pos (0 < CBO <=20) Eclipse Pos 0 < x <= 2 2 < x <= 4 4 < x <= 6 6 < x <= 8 8 < x <= 10 10 < x <= 12 12 < x <= 14 14 < x <= 16 16 < x <=18 18 < x <=20 CBO Design af genbrugeligt objektorienteret software p. 35/38 % af klasser
Abstraktionsfaktorerne Abstraktionsfaktorerne. Kendskabsabstraktionsfaktoren (KAF) i Eclipse og Pos 70.00 60.00 50.00 40.00 30.00 20.00 10.00 - x = 0 0 < x < 0.1 0.1 <= x < 0.2 0.2 <= x < 0.3 0.3 <= x < 0.4 0.4 <= x < 0.5 0.5 <= x < 0.6 0.6 <= x < 0.7 0.7 <= x < 0.8 0.8 <= x < 0.9 0.9 <= x < 1 x = 1 % af klasser og interfaces KAF Eclipse Pos 80.00 70.00 60.00 50.00 40.00 30.00 20.00 10.00 - Koblingsabstraktionsfaktoren (CAF) i Eclipse og Pos Eclipse Pos x = 0 0 < x < 0.1 0.1 <= x < 0.2 0.2 <= x < 0.3 0.3 <= x < 0.4 0.4 <= x < 0.5 0.5 <= x < 0.6 0.6 <= x < 0.7 0.7 <= x < 0.8 0.8 <= x < 0.9 0.9 <= x < 1 x = 1 CAF Design af genbrugeligt objektorienteret software p. 36/38 % af klasser
Disposition Eksisterende softwaremål. Designprincipper og sammenhæng med softwaremålene. Tilstrækkelighed i mål. Eksperimenter. Konklusion. Design af genbrugeligt objektorienteret software p. 37/38
Konklusion Der er en sammenhæng mellem designprincipper og mål. En automatisk identifikation af potentielt problematiske områder er mulig men... Design af genbrugeligt objektorienteret software p. 38/38
Konklusion Der er en sammenhæng mellem designprincipper og mål. En automatisk identifikation af potentielt problematiske områder er mulig men......der er brug for metadata for at kunne anvende resultaterne. Design af genbrugeligt objektorienteret software p. 38/38
Konklusion Der er en sammenhæng mellem designprincipper og mål. En automatisk identifikation af potentielt problematiske områder er mulig men......der er brug for metadata for at kunne anvende resultaterne. Eksperimenterne var for små til at sige noget om målet LCOM. Design af genbrugeligt objektorienteret software p. 38/38
Konklusion Der er en sammenhæng mellem designprincipper og mål. En automatisk identifikation af potentielt problematiske områder er mulig men......der er brug for metadata for at kunne anvende resultaterne. Eksperimenterne var for små til at sige noget om målet LCOM. Abstraktionsmålene forventes at sige noget om systemets generelle fleksibilitet, men skal undersøges nærmere. Design af genbrugeligt objektorienteret software p. 38/38