Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Zdzisław Sroczyński Politechnika Śląska Instytut Matematyki Inżynieria programowania.

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Język C/C++ Funkcje.
Rodzaje testów oprogramowania
Wzorce.
Wprowadzenie do C++ Zajęcia 2.
PROGRAMOWANIE STRUKTURALNE
BUDOWA MODELU EKONOMETRYCZNEGO
Informatyka Stosowana
Testowanie oprogramowania
Inżynieria Oprogramowania 8. Weryfikacja i zatwierdzanie
Inżynieria Oprogramowania 9. Testowanie oprogramowania
Projektowanie Aplikacji Komputerowych
P O D S T A W Y P R O G R A M O W A N I A
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Kurs Pascala – spis treści
Cykle życia oprogramowania
Tablice.
Wykład 2 struktura programu elementy języka typy zmienne
Podstawy Inżynierii Oprogramowania
Projektowanie i programowanie obiektowe II - Wykład IV
Wstęp do interpretacji algorytmów
Dalsze elementy metodologii projektowania. Naszym celem jest...
Wykład 7 Projektowanie kodu oprogramowania
Wykład 2 Cykl życia systemu informacyjnego
Projekt i implementacja aplikacji wspomagającej testowanie
TESTOWANIE OPROGRAMOWANIA
Adam Gabryś , v1.1,
Podstawy programowania
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Systemy operacyjne.
Microsoft Solution Framework
SYSTEM DYNAMICZNEJ ANALIZY JAKOŚCI SCENARIUSZY BIZNESOWYCH Łukasz Budnik.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Maszyna wirtualna ang. virtual machine, VM.
Algorytmy.
POŚREDNIK Jak reprezentowana jest informacja w komputerze? liczby – komputer został wymyślony jako zaawansowane urządzenie służące do wykonywania.
Podstawy informatyki 2013/2014
TESTOWANIE OPROGRAMOWANIA
Wykład 7 Synchronizacja procesów i wątków
Podstawy języka Instrukcje - wprowadzenie
Podstawy programowania
Algorytmika.
C++.
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Dokumentacja techniczna
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Dokumentacja obsługi programów Kamil Smużyński Piotr Kościński.
Wybrane aspekty programowania w C++ (i nie tylko)
Podstawy programowania
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wstęp do interpretacji algorytmów
Pętle – instrukcje powtórzeń
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Temat 3: Podstawy programowania Algorytmy – 2 z 2 _________________________________________________________________________________________________________________.
Dokumentacja programu komputerowego i etapy tworzenia programów.
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
T ESTY JEDNOSTKOWE W C# Alicja Majka, A GENDA Wprowadzenie do środowiska Czym są testy jednostkowe i po co je stosować? XUnit, NUnit Pokrycie.
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Z. SroczyńskiInżynieria programowania Modele cyklu życia oprogramowania Zdzisław Sroczyński
Inżynieria systemów informacyjnych
Inżynieria oprogramowania
Budowa i integracja systemów informacyjnych
Weryfikacja i zatwierdzanie
Podstawy programowania
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Zdzisław Sroczyński Politechnika Śląska Instytut Matematyki Inżynieria programowania Uruchamianie i testowanie programów Uruchamianie (debugging) Testowanie: – Atestowanie (validation) kontrola zgodności działania systemu z faktycznymi wymaganiami użytkownika – Weryfikacja (verification) kontrola zgodności systemu ze zdefiniowanymi wymaganiami Cele testowania: – Wykrycie i usunięcie błędów w systemie – uzyskanie poprawnego programu, tj. dającego poprawne wyniki – Ocena niezawodności systemu

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testowanie – cele i metody Program uruchomiony nie zawiera błędów składniowych sygnalizowanych przez translator i generuje wyniki Testowanie pozwala zapewnić, aby otrzymywane wyniki były zgodne z oczekiwaniami (specyfikacją) (?) Organizacja testowania: – Sprowokowanie/odnalezienie błędów – Dokumentacja testowania – Liczba/czasochłonność testów (testowanie gruntowne) – Intuicja i doświadczenie

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Uruchamianie Uruchamianie to proces wyszukiwania i usuwania błędów. Fazy testowania i uruchamiania przeplatają się - testowanie stwierdza jedynie istnienie błędów Cykl testowania i uruchamiania: – testowanie (znaleziono błędy) – zlokalizuj błąd – zaplanuj naprawę – napraw błąd – testowanie powrotne (redundantne), jeżeli były błędy to przejdź do

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Kodowanie i uruchamianie – zasady przejrzysta implementacja: zasada KISS (ang.: Keep It Simple Stupid) pol.: BUZI (Bez Udziwnień Zapisuj Idioto) narzędzia wspomagające - debuggery kod wspomagający uruchamianie — mechanizmy nadzorujące poprawność wykonywania programu (np. kontrola indeksów tablic, asercje) informacje diagnostyczne ślad sterowania, ślad zmiennych zrzuty stanu programu (post mortem dump)

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Usterki w stylu programowania używanie niewłaściwie dobranych struktur pamięciowych używanie niewłaściwie dobranych struktur sterujących wykonaniem programu (pętli) bazowanie na niestandardowych, nieprzenośnych właściwościach kompilatora, efektach ubocznych niepotrzebne implementowanie czynności wykonywanych przez standardową bibliotekę zaniedbywanie zaleceń o przejrzystym formatowaniu, komentowaniu kodu, używaniu znaczących nazw

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Błędy kodowania - syntaktyczne Błędy syntaktyczne - nieprzestrzeganie zasad składni języka programowania: – brak średnika, nawiasu, innego znaku interpunkcyjnego lub wymaganego słowa kluczowego – nieprawidłowy lub nieprawidłowo umieszczony symbol, nawias, znak – nieprawidłowa postać identyfikatora lub stałej liczbowej lub tekstowej Wykrywane przez kompilator

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Błędy kodowania - semantyczne Błędy semantyczne - niezgodność zapisu z zasadami semantyki - reguł opisujących znaczenie programu: – brak deklaracji – niezgodność typów w wyrażeniu – przekroczenie zakresu typu w deklaracji (np. int n= ; ) – niedozwolona wartość argumentu operacji (np. ujemny argument logarytmu) Wykrywane przez translator (statyczne) i nie wykrywane przez translator (dynamiczne)

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Błędy kodowania - logiczne błędy logiczne - kod napisany prawidłowo składniowo i semantycznie, lecz czynności niezgodne z intencją programisty: – użycie nieodpowiedniej konstrukcji (repeat zamiast while), procedury bibliotecznej – użycie nieodpowiedniego wzoru lub algorytmu – brak nadania wartości początkowych zmiennym – niewłaściwe indeksowanie pętli; – zamiana dróg po rozgałęzieniu w programie Literówki – do jakiej kategorii zaliczyć?

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Błąd a błędne wykonanie Błąd (fault, error) – niepoprawna konstrukcja w programie Błędne wykonanie (failure) [awaria] – niepoprawne działanie programu w trakcie pracy – efekt lub zachowanie niedopuszczalne w warunkach normalnych (np. powolne przetwarzanie dla pewnej klasy danych) Błąd może prowadzić do wielu błędnych wykonań, takie same błędne wykonania mogą być spowodowane różnymi błędami

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Klasyfikacja błędów - inaczej błędy kompilacji (uruchamianie) błędy wykona nia (ang. run-time errors) – niedozwolona operacja arytmetyczna (dzielenie przez zero, nadmiar arytmetyczny, przekroczenie zakresu) – niedozwolona operacja wejścia-wyjścia (otwieranie nieistniejącego pliku) – naruszenie mechanizmów ochrony pamięci – przekroczenie przyznanego czasu procesora błędne wyniki

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Podziały testów Testy statystyczne – wykrycie przyczyn błędnych wykonań i ocena niezawodności systemu Wykrywanie błędów – wykrycie jak największej liczby błędów Testy dynamiczne – wykonanie kodu i porównanie wyników ze wzorcem Testy statyczne – analiza kodu Testy modułów/systemu/akceptacyjne

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy statystyczne i niezawodność programu Losowa konstrukcja danych wejściowych/ automatyzacja Rozkład prawdopodobieństwa danych wejściowych zbliżony do rzeczywistego Miary niezawodności: – Prawdopodobieństwo błędnego wykonania (systemy transakcyjne) – Częstotliwość występowania błędnych wykonań (0,3/h) (systemy interakcyjne) – Średni czas między błędnymi wykonaniami (MTBF np. 200tys.h ->4,38% -> 1/23) – Dostępność (system zdatny do użytku)

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Oszacowanie niezawodności Dla testów statystycznych – dążenie do modelu liniowego Określenie zasobów potrzebnych do serwisowania (call- center, dział wdrożeń) Przewidywanie czasu zakończenia testów (osiągnięcia pożądanej jakości) N = Ns * exp(-C*t) – N – niezawodność – Ns – niezawodność początkowa – t – liczba testów – C – stała charakterystyczna

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy dynamiczne - wykrywanie błędów Testy funkcjonalne/względem specyfikacji zewnętrznej (black-box) – zakładamy znajomość jedynie wymagań (tester nie może znać implementacji!) Testy strukturalne/względem kodu/struktury wewnętrznej (white/glass-box) – zakładamy znajomość implementacji testowanych funkcji

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy funkcjonalne Podział danych wejściowych na klasy, dla których działanie powinno być analogiczne Heurystyczny dobór danych/klas Przykład: – przelew powyżej kwoty 10tys. zł powinien być zatwierdzony kodem jednorazowym – łączny dzienny limit przelewów dla konta wynosi 30tys. zł

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy funkcjonalne - zasady Objęcie testami wszystkich/możliwie wielu kombinacji warunków opisanych w specyfikacji Możliwość wykonania ważniejsza niż jakość (np. Błędne odświeżanie podglądu) Funkcjonalność poprzedniej wersji ważniejsza niż nowe możliwości Sytuacje typowe ważniejsze niż wyjątkowe

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy strukturalne Dane wejściowe na podstawie analizy struktury kodu programu Pokrycie wszystkich instrukcji (nie gwarantuje pokrycia dziedziny danych) Pokrycie instrukcji warunkowych (warunek spełniony/nie spełniony/wartości graniczne) Kryterium pokrycia ścieżek w grafie przepływu programu Pętle: minimalna/przeciętna/maksymalna liczba iteracji

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy strukturalne - przykład int a,b,w; //dowolne wartosci a i b<>0 //gwarantuja pelne pokrycie kodu if(b!=0) a = 2*b; //... w = (b-a)/a; //ale tylko b==0 pozwala //znalezc blad dzielenia dla a==0!

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy strukturalne - DPS DPS – diagram przepływu sterowania

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów DPS Macierz gałęzi 1,2,3 – nr zestawu testowego Na przecięciu oznaczenie decyzji dla danego zestawu

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów DPS Zbiór zestawów danych testowych

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testy statyczne Dowody poprawności Metody nieformalne: – Analiza przebiegu sterowania w programie ● (w umyśle programisty) – Poszukiwanie typowych błędów ● inicjalizacja zmiennych ● porównania wartości zmiennoprzecinkowych ● indeksy przekraczające tablice ● operacje na wskaźnikach ● warunki ● zapętlenia ● wartości graniczne przedziałów (< <=) ● nawiasy, kolejność wykonywania działań ● kontrola poprawności danych wejściowych

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Konserwacja oprogramowania – liczba błędów Liczba błędów ma bezpośredni wpływ na koszty konserwacji oprogramowania – szacunkowa liczba błędów w programie – średni % błędów zgłaszanych przez użytkownika – średni koszt usunięcia błędu Szacowanie liczby błędów - posiewanie błędów (błędy podobne do występujących): – N – liczba wprowadzonych błędów, – M – liczba wszystkich wykrytych błędów, – X – l. wprowadzonych błędów, które zostały wykryte S = (M-X) * N/X X/N – efektywność prowadzonych testów

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Etapy testowania Testowanie specyfikacji/projektu Dyrektywy kompilacji warunkowej – przygotowanie do testów Testowanie modułów (procedur, funkcji, fragmentów o określonej funkcjonalności) Testowanie integracyjne – test scalania Testowanie funkcjonalne Testowanie systemu – środowisko sztuczne Testowanie akceptacyjne – środowisko rzeczywiste (przykład: mysz a programy Insert) Testowanie instalacyjne

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Modele testowania Testowanie wstępujące: – Najpierw testowanie pojedynczych modułów – Późna detekcja błędów systemu jako całości Testowanie zstępujące: – Najpierw testowanie systemu (szkielet/zaślepka dla modułu) – Brak wpływu na dane przekazywane do modułów Zmodyfikowane testowanie zstępujące: – Najpierw moduły metodą wstępującą Testowanie mieszane – duże aplikacje, systemy operacyjne itp. Testowanie BigBang

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Testowanie systemu - uwagi Testy pod obciążeniem (stress testing): – systemy wielodostępne i wieloprocesorowe – Wydajności/dostępność/ciągłość Testy odporności (robustness testing) – działanie systemu pomimo zajścia zdarzeń niepożądanych (zanik zasilania, awaria sprzętu, niepoprawne dane, błędna sekwencja poleceń) Bezpieczeństwo systemów IT Programowanie defensywne Testowanie programów wielowątkowych Testowanie aplikacji webowych/ na urządzenia mobilne

Z. SroczyńskiInżynieria programowania Uruchamianie i testowanie programów Dziękuję za uwagę Następny temat: automatyzacja testów, testowanie GUI