Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/opp Organizacja Przedsięwzięć Programistycznych Wykład 7, 27.II.03 Podsumowanie Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/opp
Plan wykładu Struktura pracy inżynierskiej Ocena wykładów Uwagi i pytania do wykładów Testowanie oprogramowania
Struktura pracy inżynierskiej Plan wykładu Struktura pracy inżynierskiej Ocena wykładów Uwagi i pytania do wykładów Testowanie oprogramowania
Struktura pracy inżynierskiej (cd.) 4. Specyfikacja wymagań 4.1. Problemy i wizje klienta 4.2. Wymagania funkcjonalne 4.3. Wymagania pozafunkcjonalne 4.4. Interfejs użytkownika 4.5. Testy akceptacyjne 5. Projekt systemu 5.1. Architektura systemu diagramy obiektów, komponentów, rozmieszczenia 5.2. Komunikacja między elementami systemu diagramy współpracy, stanów, sekwencji, czynności 5.3. Budowa systemu diagramy klas, komponentów, rozmieszczenia
Struktura pracy inżynierskiej (cd.) 6. Implementacja systemu 6.1. Moduł A 6.1.1. Opis interfesju 6.1.2. Testy jednostkowe 6.1.3. Algorytmy i struktury danych 6.2. Moduł B 7. Zebrane doświadczenia 8. Plan oceny przedsięwzięcia 9. Zakończenie (pomiary produktu, co dalej z produktem) Literatura Dodatki A. Słownik terminów i skrótów B. Opinia przedstawiciela klienta C. Standard kodowania D. Kod źródłowy systemu
Ocena wykładów Plan wykładu Struktura pracy inżynierskiej Uwagi i pytania do wykładów Testowanie oprogramowania
Ocena wykładów „Wszystko zawsze można zrobić lepiej niż się to robi obecnie.” (-) Henry Ford
Ocena wykładów
Oceny wykładów’02
Uwagi i pytania do wykładów Plan wykładu Struktura pracy inżynierskiej Ocena wykładów Uwagi i pytania do wykładów Testowanie oprogramowania
Programowanie Ekstremalne (4,91) Dlaczego ten przedmiot nie jest realizowany od razu po przedmiocie „Inżynieria oprogramowania”? Stary program studiów na to nie pozwalał. W nowym programie zagadnienia te będą prezentowane na „Inż. oprogramowania” II. Bardzo ciekawa organizacja przedmiotu jako krótkiego kursu. Nie było to łatwe, ale trzeba eksperymentować z nowymi sposobami kształcenia. Przez dwa semestry uczyłem się rzeczy niepotrzebnych Mogą się jeszcze okazać potrzebne! (przynajmniej niektóre)
Programowanie Ekstremalne (4,91) Przedmiot ten powinien być ogólny dla całego roku. Będzie obowiązkowy od przyszłego roku, chociaż jestem zwolennikiem przedmiotów obieralnych. Zasady skutecznego działania
Programowanie Ekstremalne (4,91) Dlaczego metodykę XP uznaje się za najlepszą, przedmiot ‘kultu’ (tak sądzę z wykładu). Tom DeMarco "XP is the most important movement in our field today." Małe przedsięwzięcia programistyczne (do 10 osób). Podstawowe czynniki ryzyka: brak dokumentacji – pielęgnacja produktu, problemy z dostępnością klienta, tylko 1 przedstawiciel klienta.
Zasady skutecznego działania (5,07) Szkoda, że na początku lub na końcu nie ma literatury. Stephen R. Covey, „7 nawyków skutecznego działania”, Diogenes, Warszawa, 2001. Lothar J. Seiwert, Zarządzanie czasem, Placet, Warszawa 1998. Joseph Murphy, Potęga podświadomości, Świat Książki, Warszawa, 1997. Jose Silva, Philip Miele, Samokontrola umysłu metodą Silvy, Ravi, Łódź, 1996. Daniel Gross i inni, Forbes o największych sukcesach w świecie biznesu, WNT, Warszawa, 1999.
Zarządzanie zmianami (4,10) Jak często w praktyce dokonuje się zmian? Zmiany swobodne – Baseline – Zmiany kontrolowane Zmiana wymagań Zmiana interfejsu Zmiana implementacji Podstawowy problem: aktualizacja artefaktów Specyfikacja wymagań Projekt Kod Przypadki testowe Dokumentacja użytkownika
Testowanie oprogramowania Plan wykładu Struktura pracy inżynierskiej Ocena wykładów Uwagi i pytania do wykładów Testowanie oprogramowania
Testowanie oprogramowania (4,15) Może trochę bardziej szczegółowo o planowaniu testów, przygotowywaniu przypadków, przykłady użycia narzędzi. Przykłady użycia narzędzi były na ćw. laboratoryjnych. Omówić narzędzia do testowania oprogramowania. Trochę więcej!
Wprowadzenie do testowania Cele testowania Testowanie = wykonanie programu celem znalezienia błędu. Jakość przypadku testowego: prawdopodobieństwo znalezienia jeszcze nie wykrytego błędu. Udany test to taki, który wykrywa jeszcze nie wykryty błąd. -- Glen Myers’79
Wprowadzenie do testowania Powiedzenie Dijkstry Testowaniem nie można wykazać braku błędów, można w ten sposób jedynie wykazać ich obecność. -- E.W. ............... Dijkstra
Wprowadzenie do testowania Zasady testowania Testowanie należy planować na długo przed jego rozpoczęciem. W przypadku testowania obowiązuje zasada Pareto (80 /20). Testowanie należy przeprowadzać “od dołu do góry”.
Wprowadzenie do testowania 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
Testowanie białej skrzynki Graf przepływu Liczba niezależnych ścieżek (złożoność cyklomatyczna - McCabe’76): V(G) = P: liczba węzłów decyzyjnych P + 1 Utwórz zbiór podstawowy niezależnych ścieżek Przygotuj przypadki testowe: każdą ścieżkę ze zbioru podstawowego należy przejść przynajmniej raz.
Testowanie białej skrzynki 1 2 3 void PrintGraph(int n){ int r, c; for(r=0; r<n; r++){ printf("\n%d:", r); for(c=0; c<n; c++) if(Connected(r, c)) printf(" %d", c); } printf("\n"); 0: 1 2 3 1: 0 2: 0 3: 0
Testowanie białej skrzynki if r>=n goto .. void PrintGraph(int n){ int r, c; for(r=0; r<n; r++){ printf("\n%d:", r); for(c=0; c<n; c++) if(Connected(r, c)) printf(" %d", c); } printf("\n"); printf(“”, r); c=0; if c>=n goto .. if not Connected goto .. printf(“”, c) c++; r++; printf(“\n”);
Testowanie białej skrzynki if r>=n goto .. void PrintGraph(int n){ int r, c; for(r=0; r<n; r++){ printf("\n%d:", r); for(c=0; c<n; c++) if(Connected(r, c)) printf(" %d", c); } printf("\n"); printf(“”, r); c=0; if c>=n goto .. if not Connected goto .. printf(“”, c) c++; r++; V(G) = 3 + 1 = 4 printf(“\n”);
Testowanie białej skrzynki if r>=n goto .. A A - G printf(“”, r); c=0; if c>=n goto .. B if !Connected goto.. C printf(“”, c) D c++; E r++; F printf(“\n”); G
Testowanie białej skrzynki if r>=n goto .. A A - G printf(“”, r); c=0; if c>=n goto .. B A - B - F - A - G if !Connected goto.. C printf(“”, c) D c++; E r++; F printf(“\n”); G
Testowanie białej skrzynki if r>=n goto .. A A - G printf(“”, r); c=0; if c>=n goto .. B A - B - F - A - G A - B - C - E - B - F - A - G if !Connected goto.. C printf(“”, c) D c++; E r++; F printf(“\n”); G
Testowanie białej skrzynki if r>=n goto .. A A - G printf(“”, r); c=0; if c>=n goto .. B A - B - F - A - G A - B - C - E - B - F - A - G if !Connected goto.. C A - B - C - D - E - B - F - A - G printf(“”, c) D c++; E r++; F printf(“\n”); G
Testowanie białej skrzynki if r>=n goto .. A A - G printf(“”, r); c=0; if c>=n goto .. B n = 0 if !Connected goto.. C printf(“”, c) D c++; E r++; F printf(“\n”); G
Testowanie białej skrzynki if r>=n goto .. A printf(“”, r); c=0; if c>=n goto .. B A - B - F - A - G 0 < n and 0 >= n if !Connected goto.. C printf(“”, c) D c++; E r++; F printf(“\n”); G
Testowanie białej skrzynki if r>=n goto .. A Test dla: printf(“”, r); c=0; if c>=n goto .. B A - B - F - A - G if !Connected goto.. C 1 n = 2 printf(“”, c) D c++; E r++; F A-B-C-E-B-C-D-E-B-F-A-..-A-G printf(“\n”); G
Testowanie czarnej skrzynki Cele Niepoprawne lub brakujące funkcje Błędy interfesju Błędy w strukturach danych Błędy dotyczące wydajności Błędy inicjowania i kończenia Testowanie w oparciu o wymagania Analiza wartości granicznych
Testowanie czarnej skrzynki void PrintGraph( int n ) n = 1 1 n = 2 1 n = 2 n = 3 1 2 n = 3 1 2 n = 3 1 2 n = 3 1 2
Testowanie czarnej skrzynki Zupełność McCabe’a r=0; if r>=n goto .. A n = 1 1 n = 2 printf(“”, r); c=0; if c>=n goto .. B 1 n = 2 n = 3 1 2 if !Connected goto.. C printf(“”, c) D n = 3 1 2 c++; E n = 3 1 2 r++; F n = 3 1 2 printf(“\n”); G
Rational TestStudio Rational Robot nagrywanie i odtwarzanie przypadków testowych; raporty o wykrytych awariach Rational TestFactory Generacja skryptów dla przypadków testowych (maksymalizacja ilości wykonanego kodu i minimalizacja liczby kroków). TestRobot wykonuje skrypty TestFactory. Rational PureCoverage Rational LoadTest
Nareszcie! Podsumowanie Zasady skutecznego działania Programowanie Ekstremalne Testowanie Zarządzanie zmianami Projektowanie oprogramowania Aplikacje internetowe Struktura pracy inżynierskiej Nareszcie!
Sprawdzian - plany 19.III.03 Sala 208 11:45 grupy I1 + I2 12:30 grupy I3 + I4 Szczegóły na stronie: www.cs.put.poznan.pl/jnawrocki/opp
Prośba Adres e-mailowy całego roku?
Pytania? ?
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ć?