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

Hasonló előadás


Az előadások a következő témára: "Szoftverparadigmák és metrikák"— 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 Szoftvertechnológiai Fórum
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 2007. május 16. Szoftvertechnológiai Fórum

3 Szoftvertechnológiai Fórum
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 2007. május 16. Szoftvertechnológiai Fórum

4 Szoftvertechnológiai Fórum
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 2007. május 16. Szoftvertechnológiai Fórum

5 Szoftvertechnológiai Fórum
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ó 2007. május 16. Szoftvertechnológiai Fórum

6 Szoftvertechnológiai Fórum
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 2007. május 16. Szoftvertechnológiai Fórum

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

8 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 2007. május 16. Szoftvertechnológiai Fórum

9 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 2007. május 16. Szoftvertechnológiai Fórum

10 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 2007. május 16. Szoftvertechnológiai Fórum

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

12 Szoftvertechnológiai Fórum
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) 2007. május 16. Szoftvertechnológiai Fórum

13 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 2007. május 16. Szoftvertechnológiai Fórum

14 Szoftvertechnológiai Fórum
Információ-áramlás Sallie Henry, Dennis Kafura 1981. 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 2007. május 16. Szoftvertechnológiai Fórum

15 Szoftvertechnológiai Fórum
Halstead mérték Maurice Halsted 1982. 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 2007. május 16. Szoftvertechnológiai Fórum

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

17 Strukturált programok
Blokkszerkezet, beágyazási mélység James W. Howatt, Albert L. Baker 1989. 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 2007. május 16. Szoftvertechnológiai Fórum

18 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 2007. május 16. Szoftvertechnológiai Fórum

19 Szoftvertechnológiai Fórum
80-as évek eleje Nagy team-ek, >106 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 2007. május 16. Szoftvertechnológiai Fórum

20 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#, … 2007. május 16. Szoftvertechnológiai Fórum

21 Szoftvertechnológiai Fórum
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 2007. május 16. Szoftvertechnológiai Fórum

22 Szoftvertechnológiai Fórum
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 eLOC Smalltalk: 8 eLOC/func C eLOC/func 2007. május 16. Szoftvertechnológiai Fórum

23 Szoftvertechnológiai Fórum
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 2007. május 16. Szoftvertechnológiai Fórum

24 Szoftvertechnológiai Fórum
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! 2007. május 16. Szoftvertechnológiai Fórum

25 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) 2007. május 16. Szoftvertechnológiai Fórum

26 Ú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 2007. május 16. Szoftvertechnológiai Fórum

27 Funkcionális programozás
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 2007. május 16. Szoftvertechnológiai Fórum

28 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 2007. május 16. Szoftvertechnológiai Fórum

29 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 2007. május 16. Szoftvertechnológiai Fórum

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

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

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

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

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

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

36 Szoftvertechnológiai Fórum
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? 2007. május 16. Szoftvertechnológiai Fórum

37 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 2007. május 16. Szoftvertechnológiai Fórum

38 Szoftvertechnológiai Fórum
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); 2007. május 16. Szoftvertechnológiai Fórum

39 Szoftvertechnológiai Fórum
template <typename T> 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); 2007. május 16. Szoftvertechnológiai Fórum

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

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

42 Szoftvertechnológiai Fórum
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<int> vi; vi.push_back(3); … vector<int>::const_iterator vci = find(vi.begin(),vi.end(),divNthX(i,j)); 2007. május 16. Szoftvertechnológiai Fórum

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

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

45 C++ template metaprogramozás
1994, template-ek szabványosítása unruh.cpp 30: conversion from enum to D<2> requested unruh.cpp 30: conversion from enum to D<3> requested unruh.cpp 30: conversion from enum to D<5> requested unruh.cpp 30: conversion from enum to D<7> requested unruh.cpp 30: conversion from enum to D<11> requested unruh.cpp 30: conversion from enum to D<13> requested unruh.cpp 30: conversion from enum to D<17> requested unruh.cpp 30: conversion from enum to D<19> requested Fordítási időben Turing-teljes 2007. május 16. Szoftvertechnológiai Fórum

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

47 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? 2007. május 16. Szoftvertechnológiai Fórum

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

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

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

51 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 2007. május 16. Szoftvertechnológiai Fórum

52 Egy paradigma-független metrika
smain P1 tmain b P4 a c d1 d3 d4 d2 data node output node input node 2007. május 16. Szoftvertechnológiai Fórum

53 Szoftvertechnológiai Fórum
Függvény létrehozása smain P1 tmain b P4 a c d1 d3 d4 d2 smain P1 tmain b e c d1 d3 P4 a d4 d2 se te 2007. május 16. Szoftvertechnológiai Fórum

54 Osztály bonyolultsága
sset_next_month P1 tsnm b a c sset_next_day P2 e P3 g f P4 d1 d3 d2 2007. május 16. Szoftvertechnológiai Fórum

55 Szoftvertechnológiai Fórum
Ö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 2007. május 16. Szoftvertechnológiai Fórum

56 Szoftvertechnológiai Fórum
Irodalom 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 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. 58-69, 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 , 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 2007. május 16. Szoftvertechnológiai Fórum

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


Letölteni ppt "Szoftverparadigmák és metrikák"

Hasonló előadás


Google Hirdetések