Kumulowanie się defektów jest możliwe - analiza i potwierdzenie tezy

Podobne dokumenty
Priorytetyzacja przypadków testowych za pomocą macierzy

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Odwrotna analiza wartości brzegowych przy zaokrąglaniu wartości

O pewnych problemach analizy wartości brzegowych

Zastosowanie logiki matematycznej w procesie weryfikacji wymagań oprogramowania

Testowanie elementów programowalnych w systemie informatycznym

Programowanie obiektowe

Ocena ryzyka awarii systemu za pomocą analizy drzewa usterek (FTA)

Programowanie obiektowe

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

Język Java część 2 (przykładowa aplikacja)

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Aproksymacja funkcji a regresja symboliczna

Management Systems in Production Engineering No 3(23), 2016

Wzorce projektowe. dr inż. Marcin Pietroo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Szkolenie: Zawód Tester

Programowanie obiektowe - 1.

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Wprowadzenie do projektu QualitySpy

PROJEKTOWANIE. kodowanie implementacja. PROJEKT most pomiędzy specyfikowaniem a kodowaniem

SCENARIUSZ LEKCJI. Autorzy scenariusza: Krzysztof Sauter (informatyka), Marzena Wierzchowska (matematyka)

ECDL Podstawy programowania Sylabus - wersja 1.0

Modelowanie i Programowanie Obiektowe

Brzegi w testowaniu oprogramowania

Podstawy Programowania Obiektowego

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Poprawność semantyczna

Mechanizm dziedziczenia

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Język Java część 2 (przykładowa aplikacja)

Klasy abstrakcyjne i interfejsy

Wykład 1. Projektowanie efektywnych algorytmów przetwarzania danych w sieciowych systemach usług, rzeczy i multimediów.

wagi cyfry pozycje

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

KONSPEKT FUNKCJE cz. 1.

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Definicje. Algorytm to:

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

W naukach technicznych większość rozpatrywanych wielkości możemy zapisać w jednej z trzech postaci: skalara, wektora oraz tensora.

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

TEMAT : KLASY DZIEDZICZENIE

Podstawy Programowania Programowanie Obiektowe

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

Programowanie obiektowe

Wykład 7. Informatyka Stosowana. 21 listopada Informatyka Stosowana Wykład 7 21 listopada / 27

Metody numeryczne. Postać zmiennoprzecinkowa liczby. dr Artur Woike. Arytmetyka zmiennoprzecinkowa. Uwarunkowanie zadania.

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

10. Programowanie obiektowe w PHP5

Liczbowe funkcje rekurencyjne wielu zmiennych uczymy się na błędach

Programowanie obiektowe

Programowanie dynamiczne

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik

Certyfikowane szkolenia testerzy.pl to uznana ścieżka szkoleniowa ISTQB dla testerów.

Zad. 6: Sterowanie robotem mobilnym

INFORMATYKA. PLAN STUDIÓW NIESTACJONARNYCH INŻYNIERSKICH 1-go STOPNIA STUDIA ROZPOCZYNAJĄCE SIĘ W ROKU AKADEMICKIM 2018/19.

Charakterystyka oprogramowania obiektowego

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Backend Administratora

Ciąg Fibonacciego jako szczególny przykład ciągu określonego rekurencyjnie. Przykłady rekurencji w informatyce

Notatki z Analizy Matematycznej 2. Jacek M. Jędrzejewski

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

<Nazwa firmy> <Nazwa projektu> Specyfikacja wymagań projektu. Wersja <1.0>

Język ludzki kod maszynowy

Zajęcia nr. 3 notatki

INFORMATYKA. PLAN STUDIÓW STACJONARNYCH INŻYNIERSKICH 1-go STOPNIA STUDIA ROZPOCZYNAJĄCE SIĘ W ROKU AKADEMICKIM 2018/19.

Zad. 5: Sterowanie robotem mobilnym

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Szablony funkcji i klas (templates)

Modelowanie i obliczenia techniczne. dr inż. Paweł Pełczyński

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Projektowanie obiektowe Wzorce projektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

Wydział Informtyki i Nauki o Materiałach Kierunek Informatyka. kod kierunku (dodaj kod przedmiotu)

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

Podstawy inżynierii oprogramowania

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

problem w określonym kontekście siły istotę jego rozwiązania

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE SYSTEMOWE

Programowanie obiektowe

1 Podstawowe oznaczenia

Wydział Informtyki i Nauki o Materiałach Kierunek Informatyka. kod kierunku (dodaj kod przedmiotu)

Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI

Mechatronika i inteligentne systemy produkcyjne. Modelowanie systemów mechatronicznych Platformy przetwarzania danych

SZTUCZNA INTELIGENCJA

Transkrypt:

Kumulowanie się defektów jest możliwe - analiza i potwierdzenie tezy Marek Żukowicz 14 marca 2018 Streszczenie Celem napisania artykułu jest próba podania konstruktywnego dowodu, który wyjaśnia, że niewielka liczba modułów zwykle zawiera większość usterek znalezionych przed wydaniem lub jest odpowiedzialna za większość awarii na środowisku produkcyjnym. 1 Wstęp Zasada kumulowania się błędów zgodnie z sylabusem ISTQB Foundation Level mówi: Pracochłonność testowania jest dzielona proporcjonalnie do spodziewanej oraz zaobserwowanej gęstości błędów w modułach. Niewielka liczba modułów zwykle zawiera większość usterek znalezionych przed wydaniem lub jest odpowiedzialna za większość awarii na produkcji [1]. W celu wykazania prawdziwości tej zasady przedstawimy testowane funkcjonalności w programie jako zbiór trójek (f, X, Y ), gdzie: f funkcjonalność w oprogramowaniu (prościej mówiąc funkcja), X dziedzina funkcji f (dane wejściowe), Y wartości funkcji f (oczekiwany zbiór zachowań). Defekt, z definicji, to wprowadzona statyczna wada modułu lub systemu [2]. Prościej mówiąc, jest to framgemt kodu powodujący nieprawidłowe działanie. Defekt z kolei wywołuje awarię - dowolny warunek, który odbiega od oczekiwań bazujących na specyfikacji wymagań, dokumentacji projektowej, dokumentacji użytkownika (...)[2]. W celu potwierdzenia tezy, o której mowa w streszczeniu, wprowadzimy następującą definicję: Definicja 1 Jeśli dla funkcji f : X Y istnieje taki argument x X, że f(x) / Y, to mówimy, że funkcja f zawiera defekt. 1

Takie sformułowanie definicji oznacza, że istnieje pewne wejście dla funkcjonalności, które powoduje działanie niepożądane. Inaczej mówiąc, zachowanie po przetworzeniu wejścia nie trafiło do oczekiwanego zbioru zachowań. System informatyczny może być modelowany na wiele sposobów, natomiast w artykule przedstawimy testowany system zgodnie z modelem: cały system to zbiór takich trójek: (f i, X i, Y i ), i {1, 2,...n}, n N, które połączone są relacjami, X i dziedzina funkcji f i (dane wejściowe), Y i wartości funkcji f i (oczekiwany zbiór zachowań). Zgodnie z matematyczną definicją, relacja to dowolny podzbiór iloczynu kartezjańskiego skończonej liczby zbiorów. Definicja ta oddaje intuicję pewnego związku, czy zależności między elementami wspomnianych zbiorów, które pozostają w związku albo łączy je pewna zależność, czy też własność [3]. Niech S będzie systemem informatycznym oraz niech (f 1, X 1, Y 1 ) S, (f 2, X 2, Y 2 ) S. Dla potrzeb artykułu wprowadzimy kolejną definicję: Definicja 2 Mówimy, że pomiędzy f 1 oraz f 2 istnieje relacja, jeśli f 1 (X 1 ) Y 2, albo f 2 (X 2 ) Y 1. Zapis f 1 f 2 będzie oznaczał, że f 1 (X 1 ) Y 2. Wyżej opisaną definicję należy rozumieć w ten sposób, że po dostarczeniu pewnych danych wejściowych do funkcji działającej na pewnym obiekcie (formularzu, stronie, oknie) otrzymamy oczekiwane dane wyjściowe. Takim przykładem może być dokument w programie do obsługi gospodarki magazynowej, który musi przejść przez kilka statusów w aplikacji, np. dokument magazynowy, dokument oferty sprzedaży. Przycisk Dalej lub Next to funkcja, która przekształca dokument o statusie k w dokument o statusie k + 1. Dane wejściowe to dane widocznego ekranu z tłem i dostąpnymi akcjami (X i ). Natomiast dane wyjściowe to kolejny ekran w procesie (Y i ). 2 Zjawisko kumulacji defektów System informatyczny może być modelowany na wiele sposobów. W tym celu pomocne są modele matematyczne podczas wnioskowania na temat jakości [6]. W artykule przedstawimy go zgodnie z taką zasadą, że dostępne funkcjonalności to zbiór takich trójek (f i, X i, Y i ), i {1, 2,...n}, n N, pomiędzy którymi istnieją relacje. 2

Definicja 3 Ciągiem kroków (ścieżką) w testowanym systemie będziemy nazywali dowolną skończoną relację f 1 f 2... f n, n N, gdzie f 1 (X 1 ) X 2, f 2 (X 2 ) X 3,..., f n 1 (X n 1 ) X n. Wyżej przedstawiona definicja jest niezbędna do wykazania faktu kumulowania się błędów. Przykład 1. Załóżmy, że w oprogramowaniu istnieje defekt, czyli dla pewnej trójki (f i, X i, Y i ) istnieje takie a X i, że f i (a) / Y i. Zjawisko kumulowania się błędów w oprogramowaniu zaczyna się od tego, że użyta jest funkcjonalność f i dla argumentu a w celu wykonania ścieżki. Oczywiście dana funkcjonalność może korzystać z jednego lub kilku modułów, natomiast argument a może posiadać wiele danych składowych przetwarzanych przez jeden lub więcej modułów. Dowolny ciąg kroków nie będzie możliwy do zrealizowania, jeśli użyjemy argumentu a w tym ciągu kroków. Przykładowo mając zaimplementowane ścieżki: 1) f 3... f i... f n 3 2) f 4... f i... f n 1... k) f 7... f i... f n 5 nie zadziała co najmniej k ścieżek w oprogramowaniu, a takie zdarzenia będą wywołane tym samym defektem. Przykład 2. Załóżmy, że wystąpi takie zjawisko dla pewnych funkcjonalności (f i, X i, Y i ), (f j, X j, Y j ), że istnieją a X i, b X j, dla których f i (a) / Y i oraz f j (b) / Y j. Podczas implementowania ścieżek zawierających funkcje f i, f j liczba możliwych awarii będzie dwa razy większa od liczby wymaganych ścieżek, które muszą zadziałać. Z wyżej przedstawionych przykładów wynika, że liczbę możliwych awarii (niedziałających ścieżek) można obliczyć poprzez pomnożenie argumentów powodujących awarię przez ilość wymaganych ścieżek. Z tego wynika, że kilka defektów leżących w niewielkim obszarze może powodować sporo problemów w aplikacji. Wyżej zaprezentowany model funkcjonalności zachowa swoje własności również na poziomie kodu i klas. Przykład 3. Przykładem kumulowania się defektów jest dziedziczenie stosowane w programowaniu obiektowym. Ta cecha polega na umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów pochodnych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy [4]. Jeżeli klasa bazowa zawiera funkcjonalności z defektami, to wszystkie klasy pochodne (specjalistyczne) również bądą zawierały defekty. Liczba wszystkich defektów będzie 3

co najmniej równa iloczynowi defektów w klasie bazowej oraz liczbie klas, które z niej dziedziczą. Przykład 4. Podobnym przykładem do dziedziczenia jest agregacja danych np. kompozycja. Proces ten polega na tym, że tworzy się nową klasę używając klas już istniejących (często nazywa się to tworzeniem obiektu składowego ). Nowa klasa może być zbudowana z dowolnej liczby obiektów (obiekty te mogą być dowolnych typów) i w dowolnej kombinacji, by uzyskać pożądany efekt [5]. Agregacja tworzy nowy typ danych z nowymi funkcjonalnościami. Jeśli klasy, z których powstał nowy typ będą łącznie zawierały k defektów, to liczba defektów powstałych w ten sposób w nowym typie będzie większa lub równa liczbie k. Może również zaistnieć taka sytuacja, że pewna składowa klasa zawiera defekt, czyli dla pewnej trójki (g, X, Y ) istnieje takie a X, że g(a) / Y. Załóżmy, że nowy typ zawiera n nowych funkcjonalności. Mamy takie przypadki: 1. Funkcja g w nowym typie nie jest wywołana w każdej funkcjonalności (nie wszystkie funkcje używają funkcji g jako część składowej), 2. Funkcja g w nowym typie wywoływana jest n razy, 3. Funkcja g w nowym typie wywoływana jest w każdej funkcjonalności co najmniej jeden raz (może być kilka razy). Pierwsze dwa przypadki są proste pod względem liczenia przyszłych awarii. Z ostatniego przypadku wynika, że ilość nowych defektów może być większa niż n. Przykładowo, gdy n = 10, a g będzie wywołane średnio 2 razy w każdej nowej funkcjonalności, to liczba możliwych awarii będzie wynosiła 20 (a powoduje to tylko jeden argument a). Stąd wynika, że defekty są skumulowane tylko w jednym niewielkim obszarze. Przykład 5. Przykładem kumulowania się błędów jest również zastosowanie funkcji rekurencyjnych. Są one implementowane nie tylko na liczbach, ale dla potrzeb artykułu skupimy się tylko na funkcjach liczbowych. Zgodnie z naszą definicją dla trójki (g, X, Y ) z funkcją rekurencyjną g istnieje takie a X, że g(a) / Y. Jeśli funkcja rekurencyjna zawiera defekt, to nie będzie możliwe wyznaczenie wszystkich jej wartości, które wymagają użycia argumentu a - w przypadku funckji liczbowo-liczbowych jeden argument powoduje, że nie zadziała większość przypadków. Literatura [1] Sylabus ISTQB Foundation Level [2] A. Roman, Testowanie i jakość oprogramowania, PWN W-wa 2015 [3] https://pl.wikipedia.org/wiki/relacja (matematyka) 4

[4] https://pl.wikipedia.org/wiki/programowanie obiektowe [5] https://pl.wikipedia.org/wiki/agregacja (programowanie obiektowe) [6] http://testerzy.pl/baza-wiedzy/matematyk-testerem-oprogramowania Autor Marek Żukowicz jest absolwentem matematyki na Uniwersytecie Rzeszowskim. Obecnie pracuje jako tester. Jego zainteresowania skupiają się wokół testowania, matematyki, zastosowania algorytmów ewolucyjnych oraz zastosowania matematyki w procesie testowania. Interesuje się również muzyką, grą na akordeonach oraz na perkusji. Recenzenci: Anna Justyna Rejrat, Radosław Smilgin 5