standarder

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