480 likes | 901 Views
Priežiūros matavimas ir kokybės įvertinimas. Prof. Vytautas Š tuikys , v ytautas.stuik ys@ktu.lt Prof. Robertas Damaševičius , robertas.damasevicius@ktu.lt. Turinys. P Į matavimas PĮ kokybė ir standartai PĮ metrikos Dydžio Sudėtingumo Objektinės Paketų Prižiūrimumo. 2. Apibrėžimai.
E N D
Priežiūros matavimas ir kokybės įvertinimas Prof. Vytautas Štuikys,vytautas.stuikys@ktu.lt Prof. Robertas Damaševičius,robertas.damasevicius@ktu.lt
Turinys • PĮ matavimas • PĮ kokybė ir standartai • PĮ metrikos • Dydžio • Sudėtingumo • Objektinės • Paketų • Prižiūrimumo PĮ kokybė ir metrikos 2
Apibrėžimai • PĮ matas • kiekybinė PĮ produkto arba PĮ proceso charakteristika • PĮ metrika • programos arba jos tam tikros dalies savybės matas • PĮ kokybė • PĮ projekto gerumo matas (projekto kokybė) • PĮ atitikties projektui matas (atitikties kokybė) • PĮ kokybės faktorius • Pageidaujamas reikalavimas, kuris pagerina programos kokybę PĮ kokybė ir metrikos 3
PĮ matavimo tikslai • Vertinimas – vertinti skirtingus metodus, programų bibliotekas ar įrankius prieš pasirenkant geriausią užduoties sprendimo būdą. • Valdymas – siekiant valdyti PĮ kitimo (evoliucijos) procesą, kad keitimai būtų vykdomi laiku ir biudžeto rėmuose • Pagerinimas – siekiant pagerinti PĮ sistemos arba proceso charakteristikas (kokybę, našumą) • Prognozavimas – siekiant prognozuoti įvairias PĮ charakteristikas ateityje • Prižiūrimumo palengvinimas – siekiant sumažinti PĮ priežiūros kaštus ateityje PĮ kokybė ir metrikos PĮ kokybė ir metrikos 5
PĮ kokybės charakteristikos • Išorinės charakteristikos • Matomos vartotojui, pvz., sistemos teikiamų paslaugų skaičius • Vidinės charakteristikos • Nematomos vartotojui, pvz., kodo eilučių skaičius PĮ kokybė ir metrikos 6
PĮ kokybės standartai • ISO 9000-3 • ISO/IEC 9126 • ISO/IEC 15504 - Software Process Improvement and Capability Determination • IEEE 730: Software QA Plans • IEEE 982: Dictionary of measures to produce reliable software • IEEE 1061: Software quality metrics methodology • IEEE 1228: Software safety plan • IEEE 1298: Software quality management system (Part 1) • IEEE 1028: Standard for Software Reviews • IEEE 829: Standard for Software Test Documentation • IEEE 1012: Standard for Software Verification and Validation PĮ kokybė ir metrikos 7
ISO 9000 standartai • Bet kokio produkto kokybės planavimas, valdymas, kokybės užtikrinimas ir tobulinimas • ISO 9001 – bet kokio produkto gamybos standartas • ISO 9000-3 Quality Management and quality assurance standards - Part 3: • ISO 9001 standarto taikymo PĮ kūrimui, tiekimui ir priežiūrai metodiniai nurodymai PĮ kokybė ir metrikos 8
IEEE 730: Software QA Plans • Teisiniai kokybės užtikrinimo aspektai • Skirtas ypač svarbiai (kritinei) programinei įrangai • Išplėtimas – IEEE 1228 standartas PĮ kokybė ir metrikos 9
IEEE 1061: Software quality metrics methodology • Kokybės metrikų karkasas • Karkaso taikymo procesas • Kokybės modelio pavyzdys • Pavyzdinių metrikų aprašai • Halstead, COCOMO, McCabe • Metodikos taikymo pavyzdžiai PĮ kokybė ir metrikos 10
ISO/IEC 9126 & 14598 • ISO/IEC 9126 “Software engineering — Product quality” PĮ kokybės vertinimo standartas • kokybės modelis • išorinės metrikos • vidinės metrikos • naudojimo kokybės metrikos • 2005 m. ISO/IEC 9126 pakeitė ISO/IEC 25000: “Software engineering: Software product Quality Requirements and Evaluation (SQuaRE)” standartas PĮ kokybė ir metrikos 11
Kokybės modelis • ISO/IEC 9126-1 standarte apibrėžtas tipinis Kokybės modelis • PĮ charakteristikų ir sąryšių tarp jų aibė naudojama PĮ kokybės vertinimui PĮ kokybė ir metrikos 12
ISO/IEC 9126-1 - Quality Model Quality Characteristics Sub-characteristics • Functionality • Reliability • Usability • Efficiency • Maintainability • Portability Suitability Accuracy Interoperability Security Compliance Compliance Maturity Fault tolerance Recoverability Understandability Learnability Operability Comp Attractiveness Time behavior Resource utilization Compliance Analyzability Changeability Stability Testability Compliance Adaptability Installability Co-existence Replaceability Comp PĮ kokybė ir metrikos 13
Metrikų klasifikacija • Proceso metrikos • Produkto metrikos • Dydis (funkcijų, eilučių, modulių, komponentų, ... skaičius) • Kokybė (Correctness, Maintainability, Reliability, Efficiency, Integrity, Usability, Flexibility, Testability, Portability, Reusability, Availability, Complexity, Understandability, Modifiability) PĮ kokybė ir metrikos 14
Dydžio metrikos • Kodo eilučių skaičius(LOC) - „programos kodo eilučių, išskyrus tuščias eilutes ir komentarus, skaičius“ • Pranašumas: • Lengva suskaičiuoti • Trūkumas • Priklauso nuo programavimo aplinkos • Menkai susijęs su kaštais ir našumu • Priežiūros metu naudojamas LOC variantas, ΔLOC: • Eilučių pakeistų arba pridėtų priežiūros proceso vykdymo metu skaičius PĮ kokybė ir metrikos 15
Sudėtingumo metrikos Complexity External Attributes Computational Psychological Representational Functional Programmer Characteristics Structural Complexity influences Style Module Intermodule (design) Size Internal Attributes Data Structure Coupling Procedural Complexity Semantic complexity Logic Flow influences Semantic Cohesion Internal Cohesion PĮ kokybė ir metrikos 16
McCabe Ciklomatinis sudėtingumas • A program can be represented as a directed graph • program statements are represented by nodes and • the flow of control between the statements is represented by the edges • Nepriklausomų programos vykdymo kelių skaičius • Rodo programos psichologinį sudėtingumą • Jei > 10, programa laikoma sudėtinga • Skaičiuojamas naudojant grafų teorijos elementus • Programos sakiniai – grafo mazgai • Sakinių vykdymas – grafo kraštinės • Tuomet ciklomatinis sudėtingumas: v(F) =e-n+2 Čia: n = mazgų skaičius, e = kraštinių skaičius, PĮ kokybė ir metrikos 17
Ciklomatinis sudėtingumas PĮ priežiūroje • Padeda identifikuoti labai sudėtingas programas, kad būtų galima imtis priežiūros veiksmų siekiant sumažinti jų sudėtingumą • Gali būti naudojamas kaip programos supratimui ir pakeitimui reikalingo laiko įvertis. • Nepriklausomi programos keliai gali būti naudojami testuojant programą PĮ kokybė ir metrikos 19
Halstead metrikos • Halstead’s Software Science: • n1 – skirtingų operatorių skaičius • n2 – skirtingų operandų skaičius • N1 – visų programos operatorių skaičius • N2 – visų programos operandų skaičius • Programos ilgis: N = N1 + N2 • Programos žodynas: n = n1 + n2 • Prognozuojamas programos ilgis: L = n1 log2 n1 + n2 log2 n2 • Close estimate of length for well structured programs PĮ kokybė ir metrikos 20
Halstead metrikos • Tūris (Volume): V = N log2 n • Sunkumas (Difficulty) • Pastangos (Effort): E=D*V • Programos suprantamumo matas PĮ kokybė ir metrikos 21
Halstead metrikų vertinimas • Pranašumai: • Lengva suskaičiuoti • Nereikia analizuoti programos algoritmo • Tinka bet kokiai programavimo kalbai • Empiriniai tyrimai rodo, kad Halstead metrikos gali būti naudojamos programavimo kaštų ir programos klaidų skaičiaus prognozavimui • Empirical evidence that these measures can be used as good predictors of programming effort and number of bugs in a program PĮ kokybė ir metrikos 22
Halstead metrikų vertinimas • Kritika: • Metrikų skaičiavimo taisyklės nėra visiškai aiškios • Kintamųjų paskelbimas ir įvedimo/išvedimo sakiniai nelaikomi unikaliais operatoriais • Remiasi prielaida, kad PĮ = programos • Ignoruojamos aukšto abstrakcijos lygmens konstrukcijos PĮ kokybė ir metrikos 23
Objektinės (C-K)metrikosChidamberand Kemerer - 1994 • Weighted methods per Class (WMC) • Weights assigned to each method based on perceived difficulty in implementing the method • Coupling between Objects (CBO) • Number of other classes to which a given class is coupled • Depth of Inheritance Tree (DIT) • Length of the longest path from a class to the root class in the inheritance hierarchy • Number of Children (NOC) • Number of immediate child classes that inherit from a given class • Response for a Class (RFC) • Number of methods that can be potentially invoked in response to a message received by an object of a class • Lack of Cohesion Methods (LCOM) • Count of number of method-pairs whose similarity is zero minus the count of method pairs whose similarity is not zero PĮ kokybė ir metrikos 24
Weighted Methods per Class (WMC) • WMC klasėje esančių metodų svorių suma • Metodo svoris = sudėtingumas • Kaip sudėtingumas gali būti naudojamas Ciklomatinis sudėtingumas • PĮ priežiūroje naudojama sistemos prižiūrimumui prognozuoti, nes didelis metodų skaičius klasėje reikalauja daugiau pastangų jiems suprasti • Jei WMC didelis, tokias klases sudėtinga prižiūrėti ir pakartotinai panaudoti PĮ kokybė ir metrikos 25
Depth of Inheritance Tree (DIT) • Paveldimumo hierarchijos gylis nuo aukščiausios bazinės klasės iki nagrinėjamos klasės • Jei DIT aukštas, klasės elgseną sunku suprasti ir prognozuoti, tai komplikuoja jos priežiūrą PĮ kokybė ir metrikos 26
Number of Children (NOC) • Number of children (NOC) metrika matuoja tiesioginių klasės palikuonių skaičių • Sunkina priežiūrą, nes jei NOC didelis, yra daugiau paveldėjimo ryšiais susietų klasių PĮ kokybė ir metrikos 27
Coupling Between Object Classes (CBO) • Ryšiais (metodų kvietimu, kintamųjų prieiga, paveldėjimu, tipais, išimtimis) su nagrinėjama klase susijusių klasių skaičius • Ryšiai neišvengiami, kad bet kokia PĮ sistema veiktų, tačiau didelis CBO sunkina programos suvokimą ir priežiūrą PĮ kokybė ir metrikos 28
Response For a Class (RFC) • Response for a class (RFC) matuoja skirtingų metodų, kurie gali būti vykdomi nagrinėjamos klasės objektui gavus pranešimą • Didelis RFC reiškia, kad programą sunku suvokti ir prižiūrėti PĮ kokybė ir metrikos 29
OO metrikų taikymas praktikoje • Jei viršyta tik vienos metrikos rekomenduojama reikšmė – ne problema • Jei daugiau metrikų – rekomenduojama keisti klasės struktūrą • NASA tyrėjai rekomenduoja perdaryti klasę, jei tenkinamos mažiausiai 2 iš nurodytų sąlygų: WMC > 100 CBO > 5 RFC > 100 NOM > 40 RFC > 5 x NOM • Čia NOM: metodų skaičius klasėje PĮ kokybė ir metrikos 30
Paketų metrikos • Paketai yra didesni nei klasės abstrakcijos blokai • Priklausomybių tarp paketų skaičius įtakoja sistemos prižiūrimumą • Metrikos: • Ce – išeinantys ryšiai – paketų, nuo kurių priklauso nagrinėjamas paketas, skaičius • Ca – įeinantys ryšiai – paketų, kurie priklauso nuo nagrinėjamų paketų, skaičius PĮ kokybė ir metrikos 31
Instability metric • Nestabilumo (Instability)metrika • Reikšmės tarp • 0, reiškia labai stabilus paketas • 1, reiškia labai nestabilus paketas • Daugiau priežiūros darbų reikia atlikti su nestabiliais paketais PĮ kokybė ir metrikos 32
Abstraktumo (Abstractness) metrika • Tarkime, pakete yra Nc konkrečių klasių irNa abstrakčių klasių: • Abstraktumas A lygus • Reikšmės tarp 0 ir 1: • 0, pilnai konkretus paketas • 1, pilnai abstraktus paketas • Pageidaujama, kad • Stabilūs paketai būtų abstraktūs • Nestabilūs paketai būtų konkretūs (t.y. lengvai keičiami). PĮ kokybė ir metrikos 33
Eclipse paketų stabilumas ir abstraktumas PĮ kokybė ir metrikos 34
Instability over abstractness for the Eclipse packages • “Pagrindinė seka” – geri prižiūrimumo požiūriu • “Problemų sritis“ – stabilūs ir konkretūs paketai • Sunku modifikuoti • Sunku išplėsti naudojant paveldėjamumą (nes nėra abstraktūs) • “Nenaudingumo sritis“– nestabilūs ir abstraktūs paketai • Programuotojo laiko švaistymas • Daug klasių/funkcijų, kurių niekas nenaudoja • Kad sistema būtų lengvai prižiūrima, reikia vengti stabilių ir konkrečių, o taip pat nestabilių ir abstrakčių paketų PĮ kokybė ir metrikos 35
Ciklinės priklausomybes • „Prižiūrimumo košmaras“ • JDepend (Java) http://www.clarkware.com/software/JDepend.html PĮ kokybė ir metrikos 36
Aukšto lygmens metrikos • Struktūrinio sudėtingumo metrikos • Duomenų sudėtingumo metrikos • Sistemos sudėtingumo metrikos • Card & Glass ’80 metrikos PĮ kokybė ir metrikos 37
Struktūros metrikos • Struktūrinis sudėtingumas S(i) • S(i) = fout2(i) • Fan out – tiesiogiai iškviečiamų kitų modulių skaičius • Duomenų sudėtingumas D(i) • D(i) = v(i)/[fout(i)+1] • v(i) modulio i įėjimų ir išėjimų skaičius • Sistemos sudėtingumas C(i) • C(i) = S(i) + D(i) PĮ kokybė ir metrikos 38
Sistemos sudėtingumo metrika • length(i) * [fin(i) + fout(i)]2 • Length () - ilgis matuojamas kodo eilutėmis • Fan in – skaičius modulių, kurie tiesiogiai iškviečia modulį i PĮ kokybė ir metrikos 39
Triex Indeksas (TI) • Matuoja klasės algoritminį sudėtingumą • O(f) – algoritminis sudėtingumas • C – metodų skaičius klasėje • Jei • TI > n2 – blogai • TI <= n - gerai PĮ kokybė ir metrikos
Prižiūrimumo indeksas • Pasiūlė Oman, P. & Hagemeister(1992) • Apibendrina kitas metrikas • V = Halstead Volume • G = Cyclomatic Complexity • LOC = count of source Lines Of Code (SLOC) • CM = percent of lines of Comment (optional) • MaintainabilityIndex (MI): MI = 171 - 5.2 * ln(V) - 0.23 * (G) - 16.2 * ln(LOC) • Didesnė reikšmė reiškia geresnį prižiūrimumą PĮ kokybė ir metrikos
Prižiūrimumo indeksas • Kiti Maintainability Index (MI) variantai • SEI variantas:MI = 171 - 5.2 * log2(V) - 0.23 * G - 16.2 * log2 (LOC) + 50 * sin (sqrt(2.4 * CM)) • Microsoft Visual Studio (nuo v2008) variantas:MI = MAX(0,(171 - 5.2 * ln(V) - 0.23 * (CC) - 16.2 * ln(LOC))*100 / 171) PĮ kokybė ir metrikos
MI interpretavimas • 0 – 9 labai blogai • 10 – 20 blogai • 20 – 100 gerai PĮ kokybė ir metrikos
Free BSD Spinnelis, Evaluating the Quality of Open Source Software PĮ kokybė ir metrikos
Metrikų apibendrinimas • Gali būti naudojama vėduoklės diagrama PĮ kokybė ir metrikos
Santrauka • Įgijome žinių apie: • Programos matavimo, metrikos ir kokybės sąvokas • PĮ kokybės standartus • PĮ kokybės (įskaitant prižiūrimumo aspektą) metrikas • Dydžio metrikas • Sudėtingumo metrikas • Objektines • Paketines • ir kt. PĮ kokybė ir metrikos
References • D. Spinellis.Code Quality: The Open Source Perspective. Addison Wesley Professional, 2006. • T. Gelb. Software Inspection, 1993, pp. 423-427. PĮ kokybė ir metrikos 47