1 / 57

Szoftverparadigmák és metrikák

Szoftverparadigmák és metrikák. Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk. http://gsd.web.elte.hu. 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. Köszönet.

aulani
Download Presentation

Szoftverparadigmák és metrikák

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Szoftverparadigmák és metrikák Porkoláb Zoltán ELTE IK Programozási Nyelvek és Fordítóprogramok tszk. http://gsd.web.elte.hu

  2. 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 Szoftvertechnológiai Fórum

  3. 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 Szoftvertechnológiai Fórum

  4. 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 • … Szoftvertechnológiai Fórum

  5. 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ó Szoftvertechnológiai Fórum

  6. 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 Szoftvertechnológiai Fórum

  7. Méret metrikák • Forrásfájlok • Modulok • Alprogramok • Sorok (LOC, eLOC) • Utasítások • Szavak • Bájtok 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 Szoftvertechnológiai Fórum

  9. Strukturális bonyolultság • Thomas J. McCabe 1976. • 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 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 Szoftvertechnológiai Fórum

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

  12. 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 30..50 • Strukturált programozás, GOTO esetenként megengedhető (Knuth) 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 Szoftvertechnológiai Fórum

  14. 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 Szoftvertechnológiai Fórum

  15. 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 Szoftvertechnológiai Fórum

  16. 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* 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 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 Szoftvertechnológiai Fórum

  19. 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 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#, … Szoftvertechnológiai Fórum

  21. 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 Szoftvertechnológiai Fórum

  22. 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 Szoftvertechnológiai Fórum

  23. 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 Szoftvertechnológiai Fórum

  24. 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() > 100000 ) { cout << e.First() << " " << e.Last() << " is overpaid" << endl; } return e.First() + " " + e.Last(); } 23 végrehajtási ág! 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) 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 Szoftvertechnológiai Fórum

  27. 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 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 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 Szoftvertechnológiai Fórum

  30. Szoftvertechnológiai Fórum

  31. Szoftvertechnológiai Fórum

  32. Szoftvertechnológiai Fórum

  33. Szoftvertechnológiai Fórum

  34. Szoftvertechnológiai Fórum

  35. Szoftvertechnológiai Fórum

  36. 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? 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 Szoftvertechnológiai Fórum

  38. 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); Szoftvertechnológiai Fórum

  39. 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); Szoftvertechnológiai Fórum

  40. 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); Szoftvertechnológiai Fórum

  41. 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); Szoftvertechnológiai Fórum

  42. 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)); Szoftvertechnológiai Fórum

  43. 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; f1 >> s1; } if (f2 && ((s1 >= s2) || !f1)) { cout << s2 << endl; f2 >> s2; } } } • 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") ); } Szoftvertechnológiai Fórum

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

  46. 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 }; }; int main() { const int fact5 = Factorial<5>::value; std::cout << fact5 << endl; } 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? Szoftvertechnológiai Fórum

  48. Szándékalapú programozás • Charles Simonyi • XEROX Palo Alto Bravo • Microsoft Word, Excel • Intentional Software http://www.intentsoft.hu Szoftvertechnológiai Fórum

  49. Jelenlegi helyzet Feladat-specifikus tudás Programozó Forráskód Futtatás ? 20 000 oldal 200 oldal 19 800 oldal Szoftverfejlesztői tudás? 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 20 000 oldal Generátor Programozó 10 000 oldal Hogyan mérjük? Szoftvertechnológiai Fórum

More Related