Copyright © Jerzy R. Nawrocki Kontrola jakości oprogramowania Inżynieria oprogramowania II Wykład 3
J.Nawrocki, Kontrola jakości... Plan wykładu Pojęcie jakości Pojęcie jakości Testowanie Testowanie Przeglądy 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ść oprogramowaniaCrosby: 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 przeglądu projektu: 1 w trakcie inspekcji kodu: 20 w trakcie inspekcji kodu: 20 w trakcie testów maszynowych: 82 w trakcie testów maszynowych: 82
J.Nawrocki, Kontrola jakości... Zasady skutecznego działania Bądź proaktywny Zaczynaj mając koniec na względzie Aby rzeczy pierwsze były pierwsze Myśl o obopólnej korzyści Najpierw staraj się zrozumieć Dbaj o synergię 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 David A. Garvin Harvard Business School
J.Nawrocki, Kontrola jakości... Refaktoryzacja Cztery filary zapewniania jakości Testowanie Zarz. konfiguracją Przeglą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 Testowanie systemów krytycznych: 70% - 80% całkowitej pracochłonności (!) -- Roger Pressman’97 Roger S. Pressman
J.Nawrocki, Kontrola jakości... Rodzaje testowania Wykonanie ręczne XPWykonanie automat. Dane ręczneDane automat.Testy
J.Nawrocki, Kontrola jakości... Rodzaje testowania Wykonanie ręczne XPWykonanie automat. Dane ręczneDane automat. Testy
J.Nawrocki, Kontrola jakości... Rodzaje testowania Wykonanie ręczne XPWykonanie automat. Dane ręczneDane automat. Testy
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 korzystające z tej funkcji #include... Program testujący #include... Dane testowe
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
J.Nawrocki, Kontrola jakości... Rodzaje testów { n+=NF; } { n+=NF; } END { print n; } Testy systemowe Testy integracyjne Testy jednostkowe
J.Nawrocki, Kontrola jakości... Kto testuje? { n+=NF; } { n+=NF; } END { print n; } Programista Tester dostawcy Klient/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ściPojęcie jakości TestowanieTestowanie Przeglądy 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ści Przekazywanie informacji
J.Nawrocki, Kontrola jakości... Projektant Inspekcje FaganaImplementator Moderator 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. Naprawa 5. Sprawdzenie Proktant Implem. Moderator Tester Review session
J.Nawrocki, Kontrola jakości... Inspekcje FaganaProjekt Kod Test Specyfikacje zewnętrzne (funkcje) Specyfikacje wewnętrzne (moduł) - I 0 Specyfikacje logiki przetw - I 1 inspek projek Kodowanie (logika) - I 2 inspek kodu Testowanie jednostkowe Cykl życia Test funkcji (zewn.), składnika, systemu
J.Nawrocki, Kontrola jakości... Inspekcje FaganaDesignDesignCodeCodeUnittestUnittest I1I1 I2I2 I3I3 Oszczędności (godz/KLOC): I 1 : 94 I 2 : 51 I 3 : -20
J.Nawrocki, Kontrola jakości... Inspekcje Fagana Omówienie (zespół) 500 niepotrzebne Przygotowanie (indyw.) Inspekcja (zespół) Naprawa Sprawdzenie - - I1I1I1I1 I2I2I2I2 Prędkość (loc/h) Spotkanie inspekcyjne <= 2 godz 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 projektu Ex Wr Missing
J.Nawrocki, Kontrola jakości... Plan wykładu Pojęcie jakości Pojęcie jakości Testowanie Testowanie Przeglądy 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 Sopocie Pracując w PZJ-cie Chcąc robić coś w robocie Wymyślał standardy na krocie Za co dostanie w XXXX po robocie. -- Anonim Ostrzeżenie