Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Szoftverparadigmák és metrikák Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk.

Hasonló előadás


Az előadások a következő témára: "Szoftverparadigmák és metrikák Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk."— Előadás másolata:

1 Szoftverparadigmák és metrikák Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk.

2 2007. május 16.Szoftvertechnológiai Fórum2 Az előadás vázlata Paradigmák és metrikák Új paradigmák Hogyan és miért csalnak a metrikák? Egy paradigma-független metrika

3 2007. május 16.Szoftvertechnológiai Fórum3 Köszönet ELTE Informatikai Kooperációs Kutatási és Oktatási Központ (IKKK) –dr. Balla Katalin –dr. Kovács Attila Doktoranduszok –Pataki Norbert –Sipos Ádám –… és mások

4 2007. május 16.Szoftvertechnológiai Fórum4 Szoftver metrikák A fejlesztési folyamat mérése (process) A termék mérése (product) –Külső mértékek Megbízhatóság, funkcionalitás, teljesítmény, … –Belső mértékek Méret Stílus Bonyolultság …

5 2007. május 16.Szoftvertechnológiai Fórum5 Paradigma Absztrakció –Általános kiemelése –Specifikus elhagyása Paradigma –Útmutató az absztrakciók létrehozásához –Szabályok és konvenciók –Eszközök Folyamatos evolúció

6 2007. május 16.Szoftvertechnológiai Fórum6 Assembly Gépi kód automatikus generálása Mesterséges redundancia Fordítóprogram (1952, Mark I. Autocoder) 1:1 leképezés gépi kódra Gyengének bizonyult a kód és a programozó hordozhatósága szempontjából

7 2007. május 16.Szoftvertechnológiai Fórum7 Méret metrikák Forrásfájlok Modulok Alprogramok Sorok (LOC, eLOC) Utasítások Szavak Bájtok

8 2007. május 16.Szoftvertechnológiai Fórum8 Automatikus programozás Számítások automatikus elvégzése A = B + C * D Gépfüggetlen magasszintű nyelv Gépfüggő kód automatikus generálása Hatékony fordítás (FORTRAN, 9:10) Gyengének bizonyult a kód megbízhatósága és karbantarthatósága szempontjából

9 2007. május 16.Szoftvertechnológiai Fórum9 Strukturális bonyolultság Thomas J. McCabe FORTRAN programok tesztelési költsége Modularizáció támogatása IBM javaslat: –Max 50 sor –25 IF THEN utasítás 33.5 független végrehajtási ágat jelentene

10 2007. május 16.Szoftvertechnológiai Fórum10 McCabe ciklomatikus szám Független vezérlési utak száma Vezérlési gráf G = (E,N) |E|=e |N|=n V(G) = e – n + 2k (k komponens esetén) Erősen összefüggő gráfban a lineárisan független körök száma V(G) Összefüggő gráfokra V(G) = p + 1, p a predikátumok száma

11 2007. május 16.Szoftvertechnológiai Fórum11 Példa V(G) = e – n + 2k = 9 – = p + 1 = = 5 a b e c d f

12 2007. május 16.Szoftvertechnológiai Fórum12 McCabe ajánlásai Kódhossz helyett V(G) mérése Legyen V(G) < 10 Kivéve –esetszétválasztás Megfigyelés: –jó programozók 3..7 között –Hibás kódok bonyolultsága gyakran Strukturált programozás, GOTO esetenként megengedhető (Knuth)

13 2007. május 16.Szoftvertechnológiai Fórum13 Strukturált programozás Szekvenciából, elágazásból és ciklusból felépülő (goto mentes) eljárások Paraméterátadással és globális változókkal kommunikálnak egymással Adekvát algoritmusok meghatározása Magasszintű függvénykönyvtárak Gyengének bizonyult az adatstruktúrák létrehozásában és kompozíciójában

14 2007. május 16.Szoftvertechnológiai Fórum14 Információ-áramlás Sallie Henry, Dennis Kafura Információ útja: –A hívja B-t (paraméterátadással) –B visszatér értékkel, amit A felhasznál –B output változót használ fan-in = belépő információ + érintett adat fan-out = kilépő információ + érintett adat C = méret * (fan-in + fan-out) 2

15 2007. május 16.Szoftvertechnológiai Fórum15 Halstead mérték Maurice Halsted Software–science metrics N1 operátorok összes száma N2 operandusok összes száma n1 egyedi operátorok száma n2 egyedi operandusok száma

16 2007. május 16.Szoftvertechnológiai Fórum16 Halstead mérték 2. Programszótár n = n1 + n2 Programhossz N = N1 + N2 = n1 log 2 n1 + n2 log 2 n2 Program tárhely mérete (volume) V = N log 2 n Absztrakciós szint V* = LV = konstans L = V*/V Szükséges erőfeszítés (effort) E = V/L = V 2 /V*

17 2007. május 16.Szoftvertechnológiai Fórum17 Strukturált programok Blokkszerkezet, beágyazási mélység James W. Howatt, Albert L. Baker Predikátum csomópont hatóköre Utasítás predikáló halmaza ND(G) = a gráf beágyazási mélysége SN(G) = N + ND(G) Nem csak strukturált programokra definiált

18 2007. május 16.Szoftvertechnológiai Fórum18 Moduláris programozás Niklaus Wirth: Algoritmusok+Adatstruktúrák = Programok Adatszerkezetek: Pascal Modul, típus fogalom: Modula-2, Oberon Adatelrejtés, interfész és implementáció szétválasztása Gyengének bizonyult a kód újrafelhasználásának szempontjából

19 2007. május 16.Szoftvertechnológiai Fórum19 80-as évek eleje Nagy team-ek, >10 6 kódsor Nehézkes a kommunikáció az eljárások között Adatszerkezetek és eljárások elszakadnak Felülről lefelé építkezik, nehezen újrafelhasználható a kód Megjelennek a „garázscégek” –Kis fejlesztőkapacitás –Azonnali produkciós kényszer Kód újrafelhasználás, komponensek igénye Alulról felfelé építkezés

20 2007. május 16.Szoftvertechnológiai Fórum20 Objektum-orientált programozás Osztályok = újrafelhasználható modulok Öröklés Polimorfizmus Új nyelvek –Simula 67 –Smalltalk –C++ = Algol68 + Simula67 –Eiffel, Java, C#, …

21 2007. május 16.Szoftvertechnológiai Fórum21 OO metrikák Shyam R. Chidamber, Chris F. Kemerer Metódusok súlyozott bonyolultsága –McCabe Öröklési hierarchia mélysége –Nehezebb a viselkedés jóslása Közvetlen leszármazottak száma –Rossz absztrakció Válasz egy üzenetre –Nehezebb tesztelhetőség

22 2007. május 16.Szoftvertechnológiai Fórum22 OO metrikák 2. Osztályok közötti összefonódás –Rossz absztrakció –Sérülékeny szerkezet Kohézió hiánya osztályon belül –Rossz absztrakció eLOC –Smalltalk: 8 eLOC/func –C++ 24 eLOC/func

23 2007. május 16.Szoftvertechnológiai Fórum23 Problémák McCabe érték alacsonyabb, mint strukturált programok esetében –Függvény túlterhelés –Virtuális függvények Set/get függvények torzítanak Öröklési hierarchia –Absztrakt osztályok, interfészek –Konvenciók

24 2007. május 16.Szoftvertechnológiai Fórum24 Problémák 2. Operátor-túlterhelés torzít Kivételkezelés torzít String EvaluateSalaryAndReturnName( Employee e ) { if( e.Title() == "CEO" || e.Salary() > ) { cout << e.First() << " " << e.Last() << " is overpaid" << endl; } return e.First() + " " + e.Last(); } 23 végrehajtási ág!

25 2007. május 16.Szoftvertechnológiai Fórum25 Objektumelvű paradigma kritikája Minden objektum? Hatékonyság vs. „elvszerűség” Pozitív és negatív változások Kifejezés probléma –Egy osztályhierarchia nehezen bővíthető egyszerre új adatszerkezetekkel és új metódusokkal (Visitor pattern)

26 2007. május 16.Szoftvertechnológiai Fórum26 Új paradigmák Funkcionális programozás újraéledése Aspektusorientált programozás Generikus programozás (Template) metaprogramozás Szándékelvű programozás Multiparadigma elvű rendszerek Az új paradigmák beépítik a korábbi paradigmák tapasztalatait és eszközeit

27 2007. május 16.Szoftvertechnológiai Fórum27 Funkcionális programozás LISP (1957) Kompozicionalitás elve, függvénykiértékelés Lambda kalkulus, gráfátíró rendszerek Magasabbrendű függvények, típusok Hivatkozási helyfüggetlenség Optimalizáció, párhuzamos végrehajtás Scheme, ML, sML, Miranda, OCaml, Haskell, Clean

28 2007. május 16.Szoftvertechnológiai Fórum28 Funkcionális - Hogyan mérjük? Nincsen utasítás Nincsen vezérlőszerkezet Rekurziós mélység – futási időben derül ki Fastruktúra –Végtelen adattípusok –Lusta kiértékelés

29 2007. május 16.Szoftvertechnológiai Fórum29 Aspektus-orientált programozás Motiváció: rossz modularitás OOP-ban Szétszórt kódrészletek nehéz karbantartása Program = Osztályok+Aspektusok+Csatolási pontok AspectJ

30 2007. május 16.Szoftvertechnológiai Fórum30

31 2007. május 16.Szoftvertechnológiai Fórum31

32 2007. május 16.Szoftvertechnológiai Fórum32

33 2007. május 16.Szoftvertechnológiai Fórum33

34 2007. május 16.Szoftvertechnológiai Fórum34

35 2007. május 16.Szoftvertechnológiai Fórum35

36 2007. május 16.Szoftvertechnológiai Fórum36 AOP – Hogyan mérjük? AOP = OO + csatolási pontok Példa: void f(int) throws IOException ( void || int f(*) ) throws (A || B) * *(*) throws * Additív vagy multiplikatív?

37 2007. május 16.Szoftvertechnológiai Fórum37 Generikus programozás Adatszerkezetek + általános algoritmusok Fordítási idejű típusellenőrzés Parametrikus polimorfizmus Functorok = algoritmusok, mint osztályok Példa: C++ Standard Template Library Kiindulunk egy konkrét kódból és a hatékonyság elvesztése nélkül általánosítunk

38 2007. május 16.Szoftvertechnológiai Fórum38 int *find( int *beg, int *end, int x) { while ( beg != end ) { if ( *beg == x ) return beg; ++beg; } return 0; } int t[10] = { 2, 5, 6, …, 88 }; int *p = find( t, t+10, 99);

39 2007. május 16.Szoftvertechnológiai Fórum39 template T *find( T *beg, T *end, T x) { while ( beg != end ) { if ( *beg == x ) return beg; ++beg; } return 0; } const double t[10] = {2.1,5.3,6.1, …,88.2}; const double *p = find( t, t+10, 99.9);

40 2007. május 16.Szoftvertechnológiai Fórum40 template It find( It beg, It end, T x) { while ( beg != end ) { if ( *beg == x ) return beg; ++beg; } return end; } vector vd; vd.push_back(3.14); vector ::const_iterator vdi = find( vd.begin(), vd.end(), 99.9);

41 2007. május 16.Szoftvertechnológiai Fórum41 template It find_if( It beg, It end, P p) { while ( beg != end ) { if ( p(*beg) ) return beg; ++beg; } return end; } vector vi; vi.push_back(3); … bool div3(int i) { return i%3 == 0; } vector ::const_iterator vci = find( vi.begin(), vi.end(), div3);

42 2007. május 16.Szoftvertechnológiai Fórum42 struct divNthX { divNthX(int n,int x):N(n),X(x),cnt(0) {} bool operator()(int i) { if ( i%X == 0) ++cnt; return N == cnt; } int cnt, int N, int X; }; vector vi; vi.push_back(3); … vector ::const_iterator vci = find(vi.begin(),vi.end(),divNthX(i,j));

43 2007. május 16.Szoftvertechnológiai Fórum43 GP – Hogyan mérjük? Méret metrika? McCabe? int main() { string s1, s2; ifstream f1("file1.txt"); ifstream f2("file2.txt"); f1 >> s1; f2 >> s2; while (f1 || f2) { if (f1 && ((s1 <= s2) || !f2)) { cout << s1 << endl; f1 >> s1; } if (f2 && ((s1 >= s2) || !f1)) { cout << s2 << endl; f2 >> s2; } int main() { ifstream if1("file1.txt"); ifstream if2("file2.txt"); merge( istream_iterator (if1), istream_iterator (), istream_iterator (if2), istream_iterator (), ostream_iterator (cout,"\n") ); }

44 2007. május 16.Szoftvertechnológiai Fórum44 GP – Hogyan mérjük? 2. Információ-áramlás? find_if( v.begin(),v.end(),pred()); sort( v.begin(),v.end(),greater ());

45 2007. május 16.Szoftvertechnológiai Fórum45 C++ template metaprogramozás 1994, template-ek szabványosítása unruh.cpp 30: conversion from enum to D requested Fordítási időben Turing-teljes

46 2007. május 16.Szoftvertechnológiai Fórum46 int factorial( int n) { return (n==0) ? 1 : n*factorial(n-1); return (n==0) ? 1 : n*factorial(n-1);} int main() { cout << factorial(5) << endl; cout << factorial(5) << endl; return 0; return 0;} template struct Factorial { enum { value = N * Factorial ::value }; enum { value = N * Factorial ::value };}; template <> struct Factorial { enum { value = 1 }; enum { value = 1 };}; int main() { const int fact5 = Factorial ::value; const int fact5 = Factorial ::value; std::cout << fact5 << endl; std::cout << fact5 << endl;}

47 2007. május 16.Szoftvertechnológiai Fórum47 Template metaprogramozás 2. Fordítási idejű optimalizálások Aktív könyvtárak Döntések elhalasztása Futási idejű hibák elkerülése Típusrendszer kiterjesztése Hogyan mérjük?

48 2007. május 16.Szoftvertechnológiai Fórum48 Szándékalapú programozás Charles Simonyi –XEROX Palo Alto Bravo –MicrosoftWord, Excel –Intentional Software

49 2007. május 16.Szoftvertechnológiai Fórum49 Jelenlegi helyzet Feladat-specifikus tudás ProgramozóForráskódFuttatás 200 oldal oldal oldal Szoftverfejlesztői tudás? ?

50 2007. május 16.Szoftvertechnológiai Fórum50 Szándékalapú programozás 2. Feladat-specifikus tudás Domain kódForráskódFuttatás 200 oldal oldal Generátor oldal Programozó Hogyan mérjük?

51 2007. május 16.Szoftvertechnológiai Fórum51 Paradigma-független metrika Strukturális bonyolultságon kell alapulnia Nem használhat paradigmafüggő fogalmakat Figyelembe veszi: –A fordítási idejű döntéseket –A végrehajtás bonyolultságát –Az adatok (típusok) bonyolultságát

52 2007. május 16.Szoftvertechnológiai Fórum52 Egy paradigma-független metrika s main P1P1 t main b P4P4 a c d1d1 d3d3 d4d4 d2d2 data node output node input node

53 2007. május 16.Szoftvertechnológiai Fórum53 Függvény létrehozása s main P1P1 t main b P4P4 a c d1d1 d3d3 d4d4 d2d2 s main P1P1 t main b e c d1d1 d3d3 P4P4 a d4d4 d2d2 sese tete

54 2007. május 16.Szoftvertechnológiai Fórum54 Osztály bonyolultsága s set_next_month P1P1 t snm b ac s set_next_day P2P2 t snm e P3P3 gf P4P4 d1d1 d3d3 d2d2

55 2007. május 16.Szoftvertechnológiai Fórum55 Összefoglalás A paradigmák evolúcióját tapasztaljuk A metrikák fejlődése ezt késve követi Paradigmafüggő metrikák erősen torzítanak más paradigmájú programon Egyre többször használunk több paradigmát együtt, ezért Igény van paradigma-független metrikákra

56 2007. május 16.Szoftvertechnológiai Fórum56 Irodalom Cardelli, L., Wegner, P.: On Understanding Types, Data Abstraction, and Polymorphism, ACM Computing Surveys 17(4), pp , 1985 Chidamber S.R., Kemerer, C.F., A metrics suit for object oriented design, IEEE Trans. Software Engeneering, vol.20, pp , (1994). Figueiredo, E., Garcia, A., Sant' Anna, C., Kulesza, U., Lucena, C.: Assessing Aspect-Oriented Artifactsd: Towards a Tool-Supported Quantitative Method, QAOOSE Workshop, ECOOP, Glasgow, pp , 2005 Guyomarc'h, J-Y., Gu\'eh\'eneuc, Y-G.: On the Impact of Aspect-Oriented Programming on Object-Oriented Metrics, QAOOSE Workshop, ECOOP, Glasgow, pp , 2005 Harrison, W.A., Magel, K.I., A Complexity Measure Based on Nesting Level, ACM Sigplan Notices,16(3), pp.6 Howatt, J.W., Baker, A.L.: Rigorous Definition and Analysis of Program Complexity Measures: An Example Using Nesting, The Journal of Systems and Software 10, pp , 1989 Kiczales, G., Hilsdale, E., Hugunin, J., Kersten, M., Palm, J., Griswold, W.G.: An Overview of AspectJ, LNCS vol. 2072, pp , 2001 Kiczales G., Henneman, J.: Design Pattern Implementation in Java and AspectJ,OOPSLA, pp , 2002 Kiczales, G.: Aspect-Oriented Programming, AOP Computing surveys 28(es), 154-p, 1996 McCabe, T.J., A Complexity Measure, IEEE Trans. Software Engineering, SE-2(4), pp , 1976 Piwowarski, R.E.: A Nesting Level Complexity Measure, ACM Sigplan Notices, 17(9), pp.44-50, 1982 Porkolab, Z., Sillye, A.: Comparison of Object-Oriented and Paradigm Independent Software Complexity Metrics, ICAI'04, Eger, 2004 Porkolab, Z., Sillye, A.: Towards a multiparadigm complexity measure, QAOOSE Workshop, ECOOP, Glasgow, pp , 2005 Power, J. F., Malloy, B. A.: A metrics suite for grammar-based software. Journal of Software Maintenance 16(6): (2004) Schmidmeier, A., Hanenberg S., Unland, R.: Implementing Known Concepts in AspectJ, 2003 Seront, G., Lopez, M., Paulus, V., Habra, N.: On the Relationship between Cyclomatic Complexity and the Degree of Object Orientation, QAOOSE Workshop, ECOOP, Glasgow, pp Wadler, P.: The expression problem, Posted on the Java Genericity mailing list, 1998 Weyuker, E.J.: Evaluating software complexity measures, IEEE Trans. Software Engineering, vol.14, pp , 1988

57 2007. május 16.Szoftvertechnológiai Fórum57 Köszönöm a figyelmet! Kérdések? Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk.


Letölteni ppt "Szoftverparadigmák és metrikák Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk."

Hasonló előadás


Google Hirdetések