Budapest Agile Meetup - 2011.05.12.
http://www.meetup.com/AgileHungary/events/16772742/
http://agilealliance.hu/
Közhelynek számít, hogy "a jó minõségü szoftver hosszú távon olcsóbb". De meg tudja-e valaki mondani, hogy mennyire jó minöségü szoftvert akarunk és az mennyivel olcsóbb?
Az elöadás röviden össze kívánja foglalni, hogy a minõségnek milyen aspektusai vannak (quality attributes) és ezeket hogyan lehet mérni gyakorlatban (lehet-e egyáltalán).
1. Hogyan mérhető
egy szofver minősége?
Guta Gábor
November 2009
2. Miért is akarunk mérni?
• Tervezhetőség (estimation)
– Szükséges funkcionalitásból
és minőségből megbecsüljük
a fejlesztés idejét/költségét
• Alátámasszuk a döntéseket
– Diagnózis: objektívitás
– Mi az ami elég jó? (good enough)
Megéri-e több időt tölteni tervezéssel?
„Gyors és csúnya“ megoldás és az utána szükséges
hiba javítással együtt is gyors volt-e a megoldás?
3. Mit is értünk minőség alatt?
Minőségi aspektusok (quality attributes)
robusztusság (robustness) funkcionalitás (functionability)
hatékonyság (efficiency) időbeliség (timeliness)
helyesség (correctness) tesztelhetőség (testability)
bővíthetőség (extendability) karbantarthatóság (maintainability)
biztonság (security) könnyű használhatóság (ease of use)
Mértékek (metrics)
CBO WMC DIT NCSS
Ce KLOC
UUCP LCOM Ca
Man/Month FP
Instability Abstractness
4. Minőségi aspektusok
• helyesség (correctness) – a szoftver termék azon képessége,
hogy a kijelölt feladatokat, a specifikációnak megfelelően
végrehajtsa;
• robusztusság (robustness) – a szoftver termék azon
képessége, hogy megfelelően reagáljon abnormális
körülmények között;
• bővíthetőség (extendability) – a szoftver termék könnyű
hozzáigazíthatósága a specifikációs változásokhoz;
• funkcionalitás (functionability) – a szoftver rendszer által
biztosított lehetőségek mértéke;
• időbeliség (timeliness) – a szoftver rendszer azon képessége,
hogy rendelkezésre álljon akkorra vagy az előtt, amikor a
felhasználói szeretnék.
• stb.
*Bertrand Meyer [Meyer97]
5. Minőség mérhetősége
Folyamat (Process) Fix Response Time
BMI (Backlog Management Index) Man/Month
Termék/Külső (Product/External)
UUCP (Unadjusted Use-Case Point)
FP (Function Point) MTTF (Mean Time to Failure)
Customer Satisfaction
Termék/Belső (Product/Internal) DIT (Depth of
CBO (Coupling Between Objects) Inheritance Tree)
WMC (Weighted Methods per Classes)
NCSS (Non-Commenting Source Statements)
7. Folyamat mérés
Erőfeszítés (effort) Munkaidő naplózás
Ember/hónap
Költség (cost)
Költségvetés
Eseménykövető
Időbeliség (timeliness) rendszerek:
Kiadási dátumok (Release dates) JIRA, Red Mine
Feladat végzési időtartamok
Átlagos „feature” fejlesztési/hiba javítási idő
Agile?
SOHA ne használjuk személyes teljesítmény értéklésre, managerek
kezébe csak csapat szinten összesítet adatok kerüljenek
8. Külső termék tulajdonságok mérése
Helyesség (correctness): a legnehezebb mérni,
ezér más metrikából következtünk
Checkstyle, PMD,
FindBugs, JDepend,
• Defekt sűrűség KLOCWork
• Üzenet sűrűség
(fordítási, statikus elemezési, stb.)
• Teszt eset / forrás-kód lefedettség
EMMA, Cobertura, Clover, Google CodePro AnalytiX
9. Külső termék tulajdonságok mérése
Funkcionalitás: specifikációból származtatott
• Function Points - COSMIC, IFPUG, Mark II,
NESMA
• Story Points
• Use-Case Points
10. Belső termék tulajdonságok mérése
Bővíthetőség méret
(extendability)
függöségek
Karbantarthatóság
(maintainability)
komplexitás
Tesztelhetőség
(testability) kohézió
A struktúrális metrikák nem mindig tükrözik a szemantikus tartalmat
11. Méret és Komplexitás
• Számosságok:
– sorok száma (KLOC, NCSS)
– függvények száma
– osztályok száma
• McCabe Cyclomatic Complexity
= különböző végrehajási utak száma
– Komplexitással súlyozott függvények száma
osztályonként
• Blokk beágyazási mélység (Nesting Deep)
12. Függőségek és Kohézió
• Afferent Coupling = osztályok száma a csomagon kívül,
amik függenek a csomagtól
• Efferent Coupling = osztályok száma a csomagban, amik
függenek más csomagoktól
• Instability = [Efferent Couplings]
/ ([Afferent Couplings] + [Efferent Couplings])
• Abstractness = absztrakt osztály / összes osztályok száma
• Distance = [Abstractness] + [Instability] – 1
Eszközök: JDepend, Structure101, SonarJ
• Lack of Cohesion in Methods = osztályon belüli kohézió