Kapittel 24 – Kvalitetssikring og styring Carl-Fredrik Sørensen Innhold • Programvarekvalitet (prosjekt, produkt, organisasjon) • Programvarestandarder (produkt, prosess) • Reviews og inspeksjoner (dokumenter, kode, fremdrift, standarder) • Programvaremålinger og metrikker (eks. #feil, pålitelighet) 2 Kvalitetsstyring av programvare • Forsikre at man oppnår det påkrevde nivå av kvalitet på et programvareprodukt. • Tre viktige områder: – Organisasjonsnivå – etablere et rammeverk av organisatoriske prosesser og standarder som vil lede til høykvalitets programvare. – Prosjektnivå – utførelse av spesifikke kvalitetsprosesser og sjekke om at planlagte prosesser har blitt fulgt. – Prosjektnivå – etablere en kvalitetsplan for et prosjekt. Kvalitetsplanen setter kvalitetsmål for prosjektet og definerer hvilke prosesser og standarder som skal bli benyttet.. 3 Aktiviteter i kvalitetsstyring • Kvalitetsstyring sørger for en uavhengig sjekk av utviklingsprosessen for programvare. • Prosessen for kvalitetsstyring sjekker prosjektleveransene for å forsikre at de er konsistent med organisatoriske standarder og mål. • Kvalitetsteamet bør være uavhengig av utviklingsteamet. Gir større sjanse for objektivitet og mulighet til å rapportere om kvalitet uten påvirkning av problemstillinger i programvareutviklingen. 4 Quality management and software development kvalitetsstyring 5 programvareutvikling 5 Kvalitetsstyring oppsummert • Kvalitetstyringsprosess • Bestemme standarder • Bestemme om bruk av reviews/inspeksjoner • Bestemme om målinger • Bestemme om hvilke komponenter som skal måles • Implementere i prosjekter 6 Kvalitetsplanlegging • En kvalitetsplan beskriver de ønskede produktkvaliteter og hvordan disse blir vurdert, og definerer de mest viktige kvalitetsattributtene. • Kvalitetsplanen bør definere prosessen for kvalitetsvurdering. • Bør beskrive hvilke organisatoriske standarder som skal benyttes og, hvis nødvendig, definere nye. 7 Kvalitetsplan • Struktur: – – – – – Produkt introduksjon; Produkt planer; Prosessbeskrivelse; Kvalitetsmål; Risikoer og risikostyring. • Bør være korte og konsise dokumenter – Ingen leser lange….. 8 Spørsmål til industrien 1. Har du et eksempel på en kvalitetsplan? 2. Hvilke viktige programvarestandarder benytter dere? 3. Utfører dere reviews og/eller inspeksjoner? 4. Hvilke er de viktigste målinger og metrikker benyttet I din organisasjon? 9 A. Generisk (1) • Ingen formell kvalitetsplan, men vi har en public utviklingsprosess http://dev.mysql.com/doc/mysqldevelopment-cycle/en/feature-development.html som nevner hvordan QA / Testing inngår i den overordnede prosessen. When a feature has been implemented, it undergoes a code review. When the code review is done, the feature tree is handed over to QA (quality assurance). QA tests the feature, the implementer fixes bugs, and QA eventually "signs off" the feature. 10 B. Skreddersøm (1) • Kvalitetsplan: Vi har ingen som vi kan dele. I hvert fall ikke på kort varsel. (Vi skriver dem for kunder.) 11 Omfang av kvalitetsstyring • Spesielt viktig for store, komplekse systemer, virksomhetskritiske systemer og systemer som krever høy pålitelighet. Kvalitetsdokumentasjon måler fremdrift og støtter kontinuitet i utviklingen etterhvert som utviklingsteamet endres. • I mindre systemer kreves mindre dokumentasjon og bør heller fokusere på å etablere en kvalitetskultur. 12 Programvarekvalitet • Kvalitet betyr helt enkelt at produktet skal møte sin spesifikasjon. • Problematisk for programvaresystemer – Forskjell/potensiell inkonsistens mellom kvalitetskrav fra kunde (efficiency, reliability, etc.) og kvalitetskrav for utvikler (maintainability, reusability, etc.); – Krav kan være vanskelig å spesifisere presist; – Inkonsistente og ukomplette spesifikasjoner. • Fokus kan være “passende for formålet” i stedet for å være i overenstemmelse med spesifikasjonen. 13 Programvare som er passende for formålet • Har programmings- og dokumentasjonsstandarder blitt fulgt i utviklingsprosessen? • Har programvaren blitt testet ordentlig? • Er programvaren tilstrekkelig pålitelig til å bli tatt i bruk? • Er ytelse akseptabel for normal bruk? • Er programvaren brukbar? • Er programvaren velstrukturert og forståelig? 14 Kvalitetsattributter i programvare Safety Understandability Portability Security Testability Usability Reliability Adaptability Reusability Resilience Modularity Efficiency Robustness Complexity Learnability Foreslått av Bohem i 1978 15 Kvalitetskonflikter • Ikke mulig å optimalisere for alle attributter – f.eks. Forbedret robusthet kan medføre tap i ytelse. • Kvalitetsplanen bør definere de viktigste kvalitetsattributtene for hva som skal utvikles. • Planen bør inneholde en definisjon av vurderingsprosessen, en avstemt måte å måle om kvaliteter er innebygd i produktet (f.eks. vedlikeholdbarhet eller robusthet). 16 Prosess- og produktkvalitet • Kvaliteten på et utviklet produkt er påvirket av kvaliteteten på produkasjonsprosessen. • Viktig i programvareutvikling siden noen produktkvalitetet er vanskelig å vurdere. • Veldig kompleks og dårlig forstått relasjon mellom programvareprosesser og produktkvalitet. – Bruk av individuelle ferdigheter og erfaring er spesielt viktig i programvareutvikling; – Eksterne faktorer som nyhetsverdi (innovasjon) på applikasjonen eller behov for akselerert utvikling kan svekke produktkvaliteten. 17 Prosessbasert kvalitet 18 Kapittel 24 – Kvalitetssikring Standarder Carl-Fredrik Sørensen 4.April 2014 Programvarestandarder • Standarder definerer de påkrevde attributter i et produkt eller prosess. • Standard kan være internasjonale, nasjonale, organisatoriske eller prosjektstandarder. • Produktstandarder definerer karakteristikker som alle programvarekomponentene skal fremvise, f.eks. en felles programmeringsstil. • Prosess-standarder definerer hvordan utviklingsprosessen skal bli gjennomført. 20 Hvorfor er standarder viktige? • Innkapsling av “best practice” – unngå repetisjon av tidligere feil. • Rammeverk for å definere hva kvalitet betyr i en gitt setting, dvs. en organisasjons syn på kvalitet. • Gir mulighet for kontinuitet – nye medarbeidere kan forstå organisasjonen ved å forstå hvilke standarder som benyttes. 21 Produkt- og prosess-standarder Produkt standarder Design review form Requirements document structure Method header format Java programming style Project plan format Change request form 22 Prosess standarder Design review conduct Submission of new code for system building Version release process Project plan approval process Change control process Test recording process Problem med standarder • Blir ikke oppfattet som relevant eller oppdatert. • Involverer for mye byråkrati og skjemaer. • Mye manuelt arbeid med vedlikehold av dokumentasjon assosiert med standardene dersom de ikke er støttet av gode verktøy. 23 Utvikling av standarder • Involvere praktikere i utviklingen. Ingeniører bør forstå den underliggende årsaken til en standard. • Regelmessig revidere standarder og deres bruk for unngå at de blir utdaterte og mister kredibilitet blant praktikerne. • Detaljerte standarder bør ha spesialisert verktøystøtte Urimelig mye kontorarbeid er den viktigste klagen mot standarder. – Web-baserte skjemaer er ikke godt nok! 24 ISO 9001 standardrammeverk • International sett av standarder som kan bli brukt til å utvikle kvalitetssystemer. • ISO 9001, den mest generell av standardene, er rettet mot organisasjoner som designer, utvikler og vedlikeholder produkter, inkludert programvare. • ISO 9001 benyttes for å utvikle standarder rettet mot programvare. – Generelle kvalitetsprinsipper – Generelle kvalitetsprosesser – Beskriver organisatoriske standarder og prosedyrer som bør defineres. Disse dokumenteres i en kvalitetsmanual for organisasjonen. • http://youtu.be/G8x7JgRAsXQ -- Video 4.25 min Quality manual 25 Spørsmål til industrien 1. Har du et eksempel på en kvalitetsplan? 2. Hvilke viktige programvarestandarder benytter dere? 3. Utfører dere reviews og/eller inspeksjoner? 4. Hvilke er de viktigste målinger og metrikker benyttet I din organisasjon? 26 A. Generisk (2) • Standarder: SQL Standard, OpenGIS Standard, Software Engineering Terminology Standard, – http://en.wikipedia.org/wiki/SQL – http://www.opengeospatial.org/standards – http://standards.ieee.org/findstds/standard/610.12-1990.html 27 B. Skreddersøm (2) • Standards: – – – – ISO/IEC 9126 for kvalitetsattributter IEEE 829 for testplaner og testrapporter (Interne “standarder” for hvordan vi kjører forskjellige tester.) (I tillegg til drøssevis av tekniske standarder) http://www.iso.org 28 http://standards.ieee.org/ Kapittel 24 – Kvalitetssikring Reviews/revisjoner og inspeksjoner Carl-Fredrik Sørensen 4.April 2014 Revisjoner og inspeksjoner • En gruppe undersøker grundig deler eller alt i en prosess eller system inkludert dokumentasjon for finne potensielle problemer. – Kode, design, spesifikasjoner, testplaner, standarder, etc., kan all bli revidert. • Programvare eller dokumenter kan bli ‘godkjent’ ved en revisjon. Dette betyr godkjennelse fra ledelse for å flytte til neste steg i utviklingen. • Forskjellige typer revisjoner med forskjellig formål – Inspeksjoner for å fjerne feil (produkt); – Revisjoner for fremdriftsmåling (produkt og prosess); – Kvalitetsrevisjoner (produkt og standarder). 30 The software review process Chapter 24 Quality 31 31 Revisjoner og smidige metoder • Normalt uformell prosess. – Scrum : Reviewmøte etter hver iterasjon/spring med diskusjon om kvalitet. – XP: Par-programmering med konstante undersøkelser av annen person. • XP er avhengig av at enkeltpersoner tar initativet til forbedring og refaktorering av kode. • Smidige fremgangsmåter er normalt ikke standarddrevet, dermed lite fokus på overholdelse. 32 Programinspeksjoner • Fagfellerevisjon med mål om å finne uregelmessigheter og feil. • Krever ikke systemkjøring, kan bli bruk før implementering. • Kan bli gjort på alle artefakter i et prosjekt/system (krav, design, konfigurasjonsdata, testdata, etc.). • En effektiv teknikk for oppdage feil i programmer. 33 Inspeksjon: sjekklister • Sjekklister for vanlige feil bør benyttes for utføring. • Sjekklister for feil er avhengig av programmeringsspråk og reflekterer karakteristiske feil som er vanlige. • Generelt: ‘svakere' typesjekking gir større sjekkliste. • Eksempler: Initialisering, navngivning på konstanter og programelementer, terminering av løkker og rekursive funksjoner, grenser på statiske datastrukturer (tabeller), etc. 34 En inspeksjonssjekkliste (1) Fault class Inspection check Data faults Are all program variables initialized before their values are used? Have all constants been named? Should the upper bound of arrays be equal to the size of the array or Size -1? If character strings are used, is a delimiter explicitly assigned? Is there any possibility of buffer overflow? Control faults For each conditional statement, is the condition correct? Is each loop certain to terminate? Are compound statements correctly bracketed? In case statements, are all possible cases accounted for? If a break is required after each case in case statements, has it been included? Input/output faults Are all input variables used? Are all output variables assigned a value before they are output? Can unexpected inputs cause corruption? 35 En inspeksjonssjekkliste (2) Fault class Inspection check Interface faults Storage management faults Exception management faults 36 Do all function and method calls have the correct number of parameters? Do formal and actual parameter types match? Are the parameters in the right order? If components access shared memory, do they have the same model of the shared memory structure? If a linked structure is modified, have all links been correctly reassigned? If dynamic storage is used, has space been allocated correctly? Is space explicitly deallocated after it is no longer required? Have all possible error conditions been taken into account? Smidige metoder og inspeksjoner • Smidige metoder benytter sjelden formelle revisjonsprosesser. • Baserer seg på samarbeid om kodesjekk og uformelle retningslinjer. F.eks. ‘sjekk før sjekk-inn’, dvs egensjekk av egen kode. • XP-brukere argumenter for at par-programmering er en effektiv erstatning for inspeksjon pga. at inspeksjon skjer kontinuerlig. 37 Spørsmål til industrien 1. Har du et eksempel på en kvalitetsplan? 2. Hvilke viktige programvarestandarder benytter dere? 3. Utfører dere reviews og/eller inspeksjoner? 4. Hvilke er de viktigste målinger og metrikker benyttet I din organisasjon? 38 A. Generisk (3) • Reviews/Inspections: Formal code review (=inspeksjon) 2 personer leser kode linje for linje Stiller spørsmål Sjekker både logikk og standard Forsetter til de er enige Vi bruker http://www.reviewboard.org/ 39 B. Skreddersøm (3) • Reviews/inspeksjon – Ingenting som læreboka vil være enig i at er en formell inspeksjon. – Vi bruker reviews som en integrert del av utviklingsprosessen. – I det ene prosjektet jeg er på nå så reviewer vi først grensesnittet, deretter (når det er ferdig implementert) reviewer vi kildekoden og til slutt testene. 40 Kapittel 24 – Kvalitetssikring Metrikker Carl-Fredrik Sørensen 4.April 2014 Målinger og metrikker i programvare • Målinger benyttes til å utlede en numerisk verdi for et attributt ifht. programvareprodukt eller prosess. • Gir mulighet for objektive sammenligninger mellom teknikker og prosesser. • Noen bedrifter har innført målingsprogrammer, men de fleste gjør ikke systematisk bruk av målinger. • Få etablerte standarder på dette området. 42 Programvaremetrikk • Enhver type måling som relateres til et programvaresystem, prosess eller relatert dokumentasjon – Antall kodelinjer i et program, antall persondager for utvikle en komponent osv. • Muliggjør kvantifisering av programvare og programvareprosesser. • Kan benyttes til prediksjon av produktattributter eller å kontroller programvareprosessen. • Produktmetrikker kan bli brukt for generelle prediksjoner eller for identifisere uregelmessige komponenter. 43 Prediktor og kontrollmålinger 44 Bruk av målinger • For å tilordne verdi til kvalitetsattributter for et system – Kan måle og aggregere karakteristikker på komponenter for å vurdere systemkvalitet, f.eks. vedlikeholdbarhet. • For å identifisere komponenter som har dårlig kvalitet – Finne karakteristikker som avviker fra normalen, f.eks. høyest kompleksitet. – Større sannsynlighet for feil når komplekst. – Hvorfor? 45 Antakelser om metrikker • En programvareegenskap kan bli målt. • Eksisterer en relasjon mellom hva som kan måles og hva man ønsker å vite. Kan bare måle interne attributter, men er ofte mer interessert i eksterne programvareattributter. • Relasjonen har blitt formalisert og validert. • Kan være vanskelig å relatere hva som kan bli målt med ønskede eksterne kvalitetsattributter. 46 Relationships between internal and external software 47 47 Problemer med målinger i industrien • Umulig å kvantifisere avkastning på investering i et metrikkprogram. • Ingen standarder for programvaremetrikk eller standardiserte prosesser for måling og analyse. • Programvareprosesser er ikke standardiserte og ofte dårlig definert og kontrollert. • Mest innsats på kodebaserte metrikker og plandrevne utviklingsprosesser. I dag mye utvikling med konfigurering, f.eks. ERP eller bruk av COTS. • Målinger gir tilleggskostnader til prosesser. 48 Produktmetrikker • En kvalitetsmetrikk bør være en predikor for produktkvalitet. • Klasser av produktmetrikker – Dynamiske metrikker innsamlet gjennom målinger av et kjørende program; – Statiske metrikker innsamlet gjennom målinger gjort fra systemrepresentasjoner; (kode+dokumentasjon) – Dynamiske metrikker hjelper å måle effektivitet og funksjonsstabilitet – Statiske metrikker hjelper å måle kompleksitet, forståbarhet og vedlikeholdbarhet. 49 Dynamiske og statiske metrikker • Dynamiske metrikker er nært relatert til kvalitetsattributter for programvare – Ganske lett å måle responstid (ytelsesattributt) eller antall feilsituasjoner (funksjonsstabilitetsattributt). • Statiske metrikker har en indirekte relasjon med kvalitetsattributter – Må prøve å utlede relasjon mellom slike metrikker og egenskaper som kompleksitet, forståbarhet og vedlikeholdbarhet. 50 Statiske programvare metrikker Software metric Description Fan-in/Fan-out Fan-in is a measure of the number of functions or methods that call another function or method (say X). Fan-out is the number of functions that are called by function X. A high value for fan-in means that X is tightly coupled to the rest of the design and changes to X will have extensive knock-on effects. A high value for fan-out suggests that the overall complexity of X may be high because of the complexity of the control logic needed to coordinate the called components. Length of code This is a measure of the size of a program. Generally, the larger the size of the code of a component, the more complex and error-prone that component is likely to be. Length of code has been shown to be one of the most reliable metrics for predicting error-proneness in components. 51 Statiske programvare metrikker Software metric Description Cyclomatic complexity This is a measure of the control complexity of a program. This control complexity may be related to program understandability. I discuss cyclomatic complexity in Chapter 8. 52 Length of identifiers This is a measure of the average length of identifiers (names for variables, classes, methods, etc.) in a program. The longer the identifiers, the more likely they are to be meaningful and hence the more understandable the program. Depth of conditional nesting This is a measure of the depth of nesting of if-statements in a program. Deeply nested if-statements are hard to understand and potentially error-prone. Fog index This is a measure of the average length of words and sentences in documents. The higher the value of a document’s Fog index, the more difficult the document is to understand. Spørsmål til industrien 1. Har du et eksempel på en kvalitetsplan? 2. Hvilke viktige programvarestandarder benytter dere? 3. Utfører dere reviews og/eller inspeksjoner? 4. Hvilke er de viktigste målinger og metrikker benyttet I din organisasjon? 53 A.Generic (4) • Målinger/metrikker: Antall bugs i ulike former. Test coverage http://c2.com/cgi/wiki?CodeCoverageTools 54 B. Skreddersøm (4) • Målinger/metrikker – Kvalitet: Antall bugs i ulike former, Compliance til kodestandarder, dekning av enhets- og integrasjonstester, dekning av krav, hvor mye av testene som er kjørt, kompleksitet, hvor mange kommentarer det er, hvor mye av koden som er duplikater, ytelse: svartider, throughput. – Organisasjon: Faktureringsgrad, tid gjenstående på prosjektet, ferdigstillelsesgrad, ansatttilfredshet, sykefravær, mange økonomiske, etc., etc. 55 Kapittel 24 – Mer om kvalitetssikring Carl-Fredrik Sørensen 4.April 2014 ISO 9001 core processes 57 ISO 9001 and quality management 58 ISO 9001 certification • Quality standards and procedures should be documented in an organisational quality manual. • An external body may certify that an organisation’s quality manual conforms to ISO 9000 standards. • Some customers require suppliers to be ISO 9000 certified although the need for flexibility here is increasingly recognised. 59 The CK object-oriented metrics suite 60 Object-oriented metric Description Weighted methods per class (WMC) This is the number of methods in each class, weighted by the complexity of each method. Therefore, a simple method may have a complexity of 1, and a large and complex method a much higher value. The larger the value for this metric, the more complex the object class. Complex objects are more likely to be difficult to understand. They may not be logically cohesive, so cannot be reused effectively as superclasses in an inheritance tree. Depth of inheritance tree (DIT) This represents the number of discrete levels in the inheritance tree where subclasses inherit attributes and operations (methods) from superclasses. The deeper the inheritance tree, the more complex the design. Many object classes may have to be understood to understand the object classes at the leaves of the tree. Number of children (NOC) This is a measure of the number of immediate subclasses in a class. It measures the breadth of a class hierarchy, whereas DIT measures its depth. A high value for NOC may indicate greater reuse. It may mean that more effort should be made in validating base classes because of the number of subclasses that depend on them. The CK object-oriented metrics suite 61 Object-oriented metric Description Coupling between object classes (CBO) Classes are coupled when methods in one class use methods or instance variables defined in a different class. CBO is a measure of how much coupling exists. A high value for CBO means that classes are highly dependent, and therefore it is more likely that changing one class will affect other classes in the program. Response for a class (RFC) RFC is a measure of the number of methods that could potentially be executed in response to a message received by an object of that class. Again, RFC is related to complexity. The higher the value for RFC, the more complex a class and hence the more likely it is that it will include errors. Lack of cohesion in methods (LCOM) LCOM is calculated by considering pairs of methods in a class. LCOM is the difference between the number of method pairs without shared attributes and the number of method pairs with shared attributes. The value of this metric has been widely debated and it exists in several variations. It is not clear if it really adds any additional, useful information over and above that provided by other metrics. Analyse av programvarekomponenter • System component can be analyzed separately using a range of metrics. • The values of these metrics may then compared for different components and, perhaps, with historical measurement data collected on previous projects. • Anomalous measurements, which deviate significantly from the norm, may imply that there are problems with the quality of these components. 62 Process for produktmåling 63 Målingsoverraskelser • Reducing the number of faults in a program leads to an increased number of help desk calls – The program is now thought of as more reliable and so has a wider more diverse market. The percentage of users who call the help desk may have decreased but the total may increase; – A more reliable system is used in a different way from a system where users work around the faults. This leads to more help desk calls. 64 Key points • Software quality management is concerned with ensuring that software has a low number of defects and that it reaches the required standards of maintainability, reliability, portability and so on. • SQM includes defining standards for processes and products and establishing processes to check that these standards have been followed. • Software standards are important for quality assurance as they represent an identification of ‘best practice’. • Quality management procedures may be documented in an organizational quality manual, based on the generic model for a quality manual suggested in the ISO 9001 standard. 65 Key points • Reviews of the software process deliverables involve a team of people who check that quality standards are being followed. • In a program inspection or peer review, a small team systematically checks the code. They read the code in detail and look for possible errors and omissions • Software measurement can be used to gather data about software and software processes. • Product quality metrics are particularly useful for highlighting anomalous components that may have quality problems. 66
© Copyright 2024