Download - Kontrola jakości oprogramowania
Copyright © Jerzy R. Nawrocki
Kontrola jakości oprogramowaniaKontrola jakości oprogramowania
[email protected]/jnawrocki/io
Inżynieria oprogramowania IIWykład 3
J.Nawrocki, Kontrola jakości ...
Plan wykładu
•Pojęcie jakości•Testowanie•Przeglądy
•Kontrola jakości•Szacowanie rozmiaru i•Standardy serii ISO 9000•Modele CMM/CMMI•Inżynieria wymagań•Zarządzanie projektami •Personal Software Process•Team Software Process•Zwinne metodyki•Rational Unified Process•Projekty dyplomowe
J.Nawrocki, Kontrola jakości ...
Plan wykładu
•Pojęcie jakości•Testowanie•Przeglądy
•Kontrola jakości•Szacowanie rozmiaru i•Standardy serii ISO 9000•Modele CMM/CMMI•Inżynieria wymagań•Zarządzanie projektami •Personal Software Process•Team Software Process•Zwinne metodyki•Rational Unified Process•Projekty dyplomowe
J.Nawrocki, Kontrola jakości ...
Jakość oprogramowania
Crosby: Jakość = zgodność z wymaganiami
Prewencja > Sprawdzanie
Philip Crosby (1926 – 2001)
J.Nawrocki, Kontrola jakości ...
Koszt naprawy błędu
Względny czas identyfikacji błędu (IBM ): w trakcie przeglądu projektu: 1 w trakcie inspekcji kodu: 20 w trakcie testów maszynowych: 82
J.Nawrocki, Kontrola jakości ...
Zasady skutecznego działania
Bądź proaktywny Bądź proaktywny
Zaczynaj mając koniec na względzieZaczynaj mając koniec na względzie
Aby rzeczy pierwsze były pierwszeAby rzeczy pierwsze były pierwsze
Myśl o obopólnej korzyściMyśl o obopólnej korzyści
Najpierw staraj się zrozumiećNajpierw staraj się zrozumieć
Dbaj o synergięDbaj o synergię
Ostrz piłęOstrz piłę
J.Nawrocki, Kontrola jakości ...
Jakość oprogramowania
Jakość projektu (wymagania a projekt)
Jakość wykonania (projekt a implementacja)
J.Nawrocki, Kontrola jakości ...
Osiem wymiarów jakości
1. Wydajność (szybkość, ..)
2. Niezawodność (częst. błędów)
3. Wytrzymałość (jak długo)
4. Łatwość naprawy
5. Estetyka
6. Cechy funkcjonalne
7. Reputacja
8. Zgodność ze standardami i wymaganiami
D.A. Garvin, Competing in the Eight Dimensions of Quality, Harvard Business Review, Sept.-Oct. 1987.
David A. Garvin
Harvard Business School
J.Nawrocki, Kontrola jakości ...
Refakto
ryzacja
Cztery filary zapewniania jakości
Testo
wan
ie
Zarz. ko
nfig
uracją
Przeg
lądy
Jakość oprogramowania
J.Nawrocki, Kontrola jakości ...
Przetargi dot. kontroli jakości
• SI Platforma Wyborcza: ok. 1 mln zł
• SI GIIF (MF): kilkaset tysięcy złotych
• System Zintegrowanej Taryfy Celnej ISZTAR2: 600 godz. x 300 zł/godz. 200 tys. zł
J.Nawrocki, Kontrola jakości ...
Plan wykładu
•Pojęcie jakości•Testowanie•Przeglądy
•Kontrola jakości•Szacowanie rozmiaru i•Standardy serii ISO 9000•Modele CMM/CMMI•Inżynieria wymagań•Zarządzanie projektami •Personal Software Process•Team Software Process•Zwinne metodyki•Rational Unified Process•Projekty dyplomowe
J.Nawrocki, Kontrola jakości ...
Cele testowania wg Glena Myersa (1979)
Testowanie =
Jakość przypadku testowego:
Udany test :
wykonanie programu celem znalezienia błędu.
prawdopodob. znalezienia jeszcze nie wykrytego błędu.
taki, który wykrywa jeszcze nie wykryty błąd.
J.Nawrocki, Kontrola jakości ...
Pracochłonność testowania
Testowanie: ~ % - % całkowitej pracochłonności.
30 40
Testowanie systemów krytycznych: 70% - 80% całkowitej pracochłonności (!)
-- Roger Pressman’97
Roger S. Pressman
J.Nawrocki, Kontrola jakości ...
Rodzaje testowania
Testy Dane automat.
Dane ręczne
Wykonanie automat.
XP
Wykonanie ręczne
J.Nawrocki, Kontrola jakości ...
Rodzaje testowania
Testy Dane automat.
Dane ręczne
Wykonanie automat.
XP
Wykonanie ręczne
J.Nawrocki, Kontrola jakości ...
Rodzaje testowania
Testy Dane automat.
Dane ręczne
Wykonanie automat.
XP
Wykonanie ręczne
J.Nawrocki, Kontrola jakości ...
Jeden program w dwóch plikach
#include "liczbacy.c"void main() { int X, C; scanf("%d", &X); C= LiczbaCyfr(X); printf("%d ma cyfr: %d \n", X, C); return; }
int LiczbaCyfr(int n) { int C, G; C= 1; G= 10; while (n >= G) { C= C + 1; G= G * 10; } return C; }
liczbacy.c
J.Nawrocki, Kontrola jakości ...
Organizacja plików
Testowana
funkcja
Oprogramowanie korzystające z tej
funkcji
#include ...
Program testujący
#include ...
J.Nawrocki, Kontrola jakości ...
Prosty program testujący#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Prosty program testujący#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
Dane wejściowe
Oczekiwane wyniki
Faktyczne wyniki
J.Nawrocki, Kontrola jakości ...
Prosty program testujący#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
Oczekiwane wyniki
Faktyczne wyniki
J.Nawrocki, Kontrola jakości ...
Prosty program testujący#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Prosty program testujący#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Prosty program testujący#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (fWynik != oWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Wada prostego programu testującego#include "liczbacy.c"void main() { int n, fWynik, oWynik, Blad;
int Blad=0; n=0; oWynik=1; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
n=10; oWynik=2; fWynik= LiczbaCyfr(n); if (oWynik != fWynik){
printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);Blad=1;}
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Testowanie sterowane danymi
Testowana
funkcja
Oprogramowanie Oprogramowanie korzystające z tej korzystające z tej
funkcjifunkcji
#include ...#include ...
Program testujący
#include ...
Danetestowe
J.Nawrocki, Kontrola jakości ...
Testowanie sterowane danymi – Program testujący
#include "liczbacy.c"void main() { int n, fWynik, oWynik; int Blad=0; while (scanf("%d %d", &n, &oWynik)>0){
fWynik= LiczbaCyfr(n); if (oWynik != fWynik){ printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);
Blad=1; } }
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Testowanie sterowane danymi – Program testujący
#include "liczbacy.c"void main() { int n, fWynik, oWynik; int Blad=0; while (scanf("%d %d", &n, &oWynik)>0){
fWynik= LiczbaCyfr(n); if (oWynik != fWynik){ printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);
Blad=1; } }
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
Jest w pliku jeszcze jeden przypadek testowy
J.Nawrocki, Kontrola jakości ...
Testowanie sterowane danymi – Program testujący
#include "liczbacy.c"void main() { int n, fWynik, oWynik; int Blad=0; while (scanf("%d %d", &n, &oWynik)>0){
fWynik= LiczbaCyfr(n); if (oWynik != fWynik){ printf("LiczbaCyfr(%d)=%d a nie %d.\n", n, fWynik, oWynik);
Blad=1; } }
if (Blad == 0) {printf("Wszystko OK. Brawo!\n");}
return; }
J.Nawrocki, Kontrola jakości ...
Wszystko OK. Brawo!
Dane testowe dla LiczbaCyfr
Testowana
funkcja
Program testujący
#include ...
0 1 1 1 2 1 9 1 10 2 11 2 99 2100 3999 3
J.Nawrocki, Kontrola jakości ...
Rodzaje testów
{ n+=NF; }{ n+=NF; }
END { print n; }END { print n; }
Testy systemoweTesty integracyjneTesty jednostkowe
J.Nawrocki, Kontrola jakości ...
Kto testuje?
{ n+=NF; }{ n+=NF; }
END { print n; }END { print n; }
ProgramistaTester dostawcyKlient/użytkownik
J.Nawrocki, Kontrola jakości ...
Zasady testowania
Wszystkie testy powinny być powiązane z wymaganiami użytkownika.
Testowanie należy planować na długo przed jego rozpoczęciem.
W przypadku testowania obowiązuje zasada Pareto (80 /20).
J.Nawrocki, Kontrola jakości ...
Zasady testowania
Testowanie należy przeprowadzać “od dołu do góry”.
Testowanie wyczerpujące nie jest możliwe.Pewne testy powinny być wykonane przez
niezależną trzecią stronę.
J.Nawrocki, Kontrola jakości ...
Słabości testowania
Testowaniem nie można wykazać braku błędów, można w ten sposób jedynie wykazać ich obecność.
-- E.W. ...............
Powiedzenie
Dijkstra
Dijkstry
J.Nawrocki, Kontrola jakości ...
Plan wykładu
•Pojęcie jakości•Testowanie•Przeglądy
•Kontrola jakości•Szacowanie rozmiaru i•Standardy serii ISO 9000•Modele CMM/CMMI•Inżynieria wymagań•Zarządzanie projektami •Personal Software Process•Team Software Process•Zwinne metodyki•Rational Unified Process•Projekty dyplomowe
J.Nawrocki, Kontrola jakości ...
Artefakt
Przegląd
Przegląd (review) = Analiza artefaktu (np.kodu, dokumentu) realizowana przez grupę osób.
Inspekcja (inspection) = Najbardziej sformalizowana postać przeglądu
J.Nawrocki, Kontrola jakości ...
Rola przeglądów
Zapewnianie jakościPrzekazywanie informacji
J.Nawrocki, Kontrola jakości ...
Projek
tant
Projek
tant
Inspekcje Fagana
Implem
entator
Implem
entator
Mod
erat
or
Mod
erat
or Tester
Tester
Sesja
przeglądu
J.Nawrocki, Kontrola jakości ...
Inspekcje Fagana
1. Omówienie (cały zespół)2. Przygot. (indywidualnie)3. Inspekcja (cały zespół)4. Naprawa5. Sprawdzenie
Prokta
nt
Prokta
nt Implem
.
Implem
.
Mod
erat
or
Mod
erat
or Tester
Tester
Reviewsession
J.Nawrocki, Kontrola jakości ...
Inspekcje Fagana
Pro
jekt
Pro
jekt
Kod
Kod
Tes
tT
est
Specyfikacje zewnętrzne (funkcje)
Specyfikacje wewnętrzne (moduł) - I0
Specyfikacje logiki przetw - I1 inspek projek
Kodowanie (logika) - I2 inspek kodu
Testowanie jednostkowe
Cykl życiaCykl życiaCykl życiaCykl życia
Test funkcji (zewn.), składnika, systemu
J.Nawrocki, Kontrola jakości ...
Inspekcje Fagana
DesignDesignDesignDesign CodeCodeCodeCodeUnitUnit
testtestUnitUnit
testtestI1 I2 I3
Oszczędności (godz/KLOC):
I1: 94
I2 : 51
I3 : -20
J.Nawrocki, Kontrola jakości ...
Inspekcje Fagana
Omówienie (zespół) 500 niepotrzebnePrzygotowanie (indyw.) 100 125Inspekcja (zespół) 130 150Naprawa 50 60Sprawdzenie - -
II11 II22
Prędkość (loc/h)Prędkość (loc/h)
Spotkanie inspekcyjne <= 2 godz1 - 2 spotkania na dzień
J.Nawrocki, Kontrola jakości ...
Inspekcje Fagana
Czy wszystkie stałe są zdefiniowane?Czy w trakcie manipulacji kolejką może wystąpić
przerwanie? Jeśli tak, to czy kolejka jest ujęta w rejon krytyczny?
Czy rejestry są odtwarzane przy wyjściu?Czy wszystkie liczniki są odpowiednio inicjowane
(0 lub 1)?Czy są literały numeryczne, które powinny być
zastąpione stałymi symbolicznymi?Czy wszystkie bloki na schemacie są potrzebne
Lista kontrolna dla inspekcji projektuLista kontrolna dla inspekcji projektu
Ex
Ex
Wr
Wr
Mis
sing
Mis
sing
J.Nawrocki, Kontrola jakości ...
Plan wykładu
•Pojęcie jakości•Testowanie•Przeglądy
•Kontrola jakości•Szacowanie rozmiaru i•Standardy serii ISO 9000•Modele CMM/CMMI•Inżynieria wymagań•Zarządzanie projektami •Personal Software Process•Team Software Process•Zwinne metodyki•Rational Unified Process•Projekty dyplomowe
J.Nawrocki, Kontrola jakości ...
Zapewnianie jakości
Pewien dyrektor w SopociePracując w PZJ-cieChcąc robić coś w robocieWymyślał standardy na krocieZa co dostanie w XXXX po robocie.
-- Anonim
Ostrzeżenie
J.Nawrocki, Kontrola jakości ...
Pytania?
J.Nawrocki, Kontrola jakości ...
Ocena wykładu
1. Wrażenie ogólne (1 - 6)2. Za szybko czy za wolno?3. Czy dowiedziałeś się czegoś ważnego?4. Co i jak poprawić?
J.Nawrocki, Kontrola jakości ...
Plan wykładu
•Pojęcie jakości•Testowanie•Przeglądy
•Kontrola jakości•Szacowanie rozmiaru i•Standardy serii ISO 9000•Modele CMM/CMMI•Inżynieria wymagań•Zarządzanie projektami •Personal Software Process•Team Software Process•Zwinne metodyki•Rational Unified Process•Projekty dyplomowe