Środowisko wspomagające testowanie oprogramowania obiektowego

Podobne dokumenty
Programowanie obiektowe - 1.

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

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

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

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

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

Testowanie oprogramowania. Piotr Ciskowski

Podstawy Programowania Obiektowego

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

UML w Visual Studio. Michał Ciećwierz

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Maciej Oleksy Zenon Matuszyk

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

Spis treúci. 1. Wprowadzenie... 13

Szablony funkcji i klas (templates)

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Programowanie współbieżne i rozproszone

Wykład 1 Inżynieria Oprogramowania

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

Wprowadzenie do metodologii modelowania systemów informacyjnych. Strategia (1) Strategia (2) Etapy Ŝycia systemu informacyjnego

Projektowanie oprogramowania

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


Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Tom 6 Opis oprogramowania

Programowanie obiektowe. Wprowadzenie

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania

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

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Programowanie obiektowe zastosowanie języka Java SE

Dokument Detaliczny Projektu

Testowanie I. Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego.

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

PRZEWODNIK PO PRZEDMIOCIE

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Szablony funkcji i szablony klas

Podstawy programowania III WYKŁAD 4

Egzamin / zaliczenie na ocenę*

Języki i metodyka programowania

Technologie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dokument Detaliczny Projektu

Zaawansowane programowanie w C++ (PCP)

Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: Aukcjomat

Programowanie obiektowe

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

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

Tworzenie przypadków testowych

Programowanie obiektowe

Programowanie obiektowe

Projektowanie oprogramowania

Diagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Semantyka i Weryfikacja Programów - Laboratorium 3

Podstawy testowania oprogramowania obiektowego 1)

Wzorce projektowe i refaktoryzacja

Podstawy programowania obiektowego

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

PRZEWODNIK PO PRZEDMIOCIE

Źródło: S. Wrycza, B. Marcinkowski, K. Wyrzykowski Język UML 2.0 w modelowaniu systemów informatycznych Helion DIAGRAMY INTERAKCJI

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 5 Ćwiczenia w narzędziu CASE diagram przypadków uŝycia. Materiały dla nauczyciela

Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik

Projektowanie oprogramowania

Tom 6 Opis oprogramowania

Technologie i usługi internetowe cz. 2

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Podstawy modelowania programów Kod przedmiotu

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Zawód tester, czyli na czym polega testowanie. Katarzyna Łabinska Justyna Sacha - Gawlik

PRZEWODNIK PO PRZEDMIOCIE

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Diagramy obiegu dokumentów a UML w modelowaniu procesów biznesowych. Stanisław Niepostyn, Ilona Bluemke Instytut Informatyki, Politechnika Warszawska

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Przewodnik użytkownika (instrukcja) AutoMagicTest

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

Metody Kompilacji Wykład 1 Wstęp

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Programowanie obiektowe

Projekt przejściowy 2015/2016 BARTOSZ JABŁOŃSKI, TOMASZ JANICZEK

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE SYSTEMOWE

Specyfikowanie wymagań przypadki użycia

Programowanie obiektowe

Programowanie 2. Język C++. Wykład 3.

Materiały do zajęć VII

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Michał Adamczyk. Język UML

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Laboratorium 5 - Projektowanie programów zorientowanych obiektowo. Indywidualny projekt programistyczny

KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Transkrypt:

Środowisko wspomagające testowanie oprogramowania obiektowego Sebastian Nowak e-mail: snowak1@ii.pw.edu.pl Ilona Bluemke e-mail: I.Bluemke@ii.pw.edu.pl Instytut Informatyki, Politechnika Warszawska Nowowiejska 15/19, 00-665 Warszawa Streszczenie W pracy przedstawiono środowisko wspomagające testowanie programów obiektowych zaprojektowanych w jednym z dwóch narzędzi CASE Paradigm Plus i Select Enterprise v 6. Środowisko może być użyte do testowania klas napisanych w językach C++ oraz Java. Zaimplementowane metody testowania oparte są na specyfikacji zachowania klasy w postaci diagramu zmian stanów. 1. Wprowadzenie Testowanie oprogramowania jest jednym ze środków pozwalających zapewnić wysoką jakość oprogramowania. Celem testowania jest wykrycie jak największej liczby błędów wykonania programu przy minimalnym koszcie. Właściwy test powinien wykrywać błędne zachowanie programu niepoprawne wyniki, czy zachowanie niezgodnie z oczekiwaniami użytkownika. Zaproponowano następujące podejścia do testowania ukierunkowanego na wyszukiwanie defektów: 1. Funkcjonalne (ang. black box) testy są wyprowadzane ze specyfikacji oprogramowania. Jednostka testowana jest traktowana jako czarna

skrzynka, której zachowanie może być określone na podstawie wejść i odpowiadających im wyjść. Celem testowania jest określenie, czy program spełnia funkcjonalne i niefunkcjonalne (np. wydajnościowe) wymagania. 2. Strukturalne (ang. white box) testy są wyprowadzane na podstawie znajomości struktury testowanej jednostki. Cechą charakterystyczną tego podejścia jest sprawdzanie pokrycia programu np. sprawdzenie, czy wykonano wszystkie instrukcje, skoki, ścieżki przepływu danych. Powyższe podejścia zostały zaproponowane dla oprogramowania strukturalnego i są także wykorzystywane podczas testowania oprogramowania obiektowego. Jednak od końca lat osiemdziesiątych prowadzone są prace nad metodami testowania dostosowanymi do testowania programów napisanych w językach obiektowych, wiele informacji na ten temat można znaleźć w pracach [1, 2, 3]. Koszty testowania to 40% do 80 % kosztów produkcji oprogramowania stąd redukcja tych kosztów i poprawa jakości testowania są ważnym problemem od lat przyciągającym uwagę informatyków. Powstało szereg narzędzi wspomagających testowanie oprogramowania obiektowego. Przegląd narzędzi można znaleźć w [4]. W większości narzędzi stosowane jest strukturalne podejście do testowania, badane jest np. pokrycie gałęzi w grafie przepływu sterowania. Narzędzia do testowania są samodzielnymi systemami dostosowanymi do testowania programów napisanych w konkretnym języku programowania np. w C++ czy Javie. Spośród komercyjnych narzędzi do testowania jedynie Test Studio firmy Rational współpracuje z narzędziem do projektowania obiektowego o nazwie Rose (tej samej firmy). Ceny narzędzi wspomagających testowanie są bardzo wysokie i, o ile wiadomo autorom, tego typu narzędzia nie są stosowane ani w dydaktyce ani w pracach własnych na polskich uczelniach. W Instytucie Informatyki Politechniki Warszawskiej powstało narzędzie (o nazwie TOSTER - The Object-oriented Software Testing EnviRonment) służące do testowanie oprogramowania obiektowego napisanego w C++ lub w Javie. Narzędzie to pobiera informacje z repozytoriów dwóch komercyjnych narzędzi do projektowania obiektowego tj. Paradigm Plus oraz Select Enterprise. Jednostką poddawaną testowaniu jest klasa. Testowanie może odbywać się dwoma metodami działającymi w oparciu o diagram zmian stanów klasy. W rozdziale 2 przedstawiono zarys działania narzędzia TOSTER, pełen opis można znaleźć w [4]. W rozdziale 3 omówiono jedną ze zrealizowanych metod testowania metodę wektora stanu (także opisaną w [3]). Przykład testowania z zastosowaniem środowiska TOSTER zamieszczono w rozdziale 4. Znane autorom komercyjne narzędzia wspomagające testowanie nie stosują metod opartych na diagramach zmian stanów. Jedynie narzędzie Tootsie (Total Object Oriented Testing Support Environment) opisane w [1] korzysta z diagramów zmian stanów jednak w inny sposób niż TOSTER. System obiektowy jest zbiorem współdziałających obiektów. Zachowanie całego systemu jest wynikiem interakcji i zachowań indywidualnych obiektów. Wiarygodny system obiektowy wymaga, by każdy z komponentów zachowywał się właściwie, by sumaryczne zachowanie było właściwe oraz, by nie było

możliwości powstania nieprawidłowego zachowania. Testowanie oprogramowania obiektowego powinno opierać się na modelu, który ułatwi generowanie przypadków testowych i pozwoli wykryć najbardziej prawdopodobne błędy. Zachowanie klasy jest modelowane (we wszystkich metodach obiektowych) za pomocą diagramu zmian stanów. Wydaje się naturalnym użycie diagramów zmian stanów w procesie testowania zachowania klasy. 2. Architektura środowiska TOSTER TOSTER jest otwartym środowiskiem wspomagającym testowanie oprogramowania zorientowanego obiektowo. Środowisko integruje model oprogramowania wykonany w narzędziu CASE z kodem źródłowym oprogramowania oraz udostępnia zestaw narzędzi ułatwiających testowanie. Proces testowania realizowany jest przez moduły, zwane dalej metodami testowania. Metody testowania korzystając z danych oraz narzędzi udostępnianych przez środowisko TOSTER, modyfikują kod źródłowy, uruchamiają testy oraz interpretują oraz prezentują wyniki testowania (rys. 1). kompilator, interpreter,... pliki źródłowe oryginalny kod źródłowy narzędzia CASE Select Enterprice 6 T O S T E R model oprogramowania struktura zawartości plików źródłowych C++ JAVA inne... roboczy kod źródłowy Paradigm Plus inne... metody testowania Rysunek 1. Architektura środowiska TOSTER Otwartość środowiska polega na możliwości: implementacji dowolnych metod testowania, przystosowania do współpracy z niemalże dowolnym obiektowym językiem programowania, przystosowania do współpracy z różnymi narzędziami CASE.

Aktualnie w środowisku zaimplementowano dwie metody testowania: metodę wektora stanu, opisana w rozdziale 3, oraz metodę specyfikacji sekwencji [3,4,5]. TOSTER pozwala na testowanie klas napisanych w językach JAVA lub C++. Wraz ze środowiskiem dostępne jest oprogramowanie pozwalające na korzystanie z modeli w notacji UML utworzonych w narzędziach Select Enterprise 6 oraz Paradigm Plus. Współpraca z narzędziami CASE odbywa się poprzez plik wymiany w formacie XML, co pozwala na stosunkowe łatwe przystosowanie innych narzędzi do współpracy ze środowiskiem TOSTER. Metody testowania działające w środowisku TOSTER w zależności od swoich potrzeb mogą korzystać z następujących struktur danych oraz narzędzi: struktury opisujące model testowanego programu pobrany z narzędzia CASE, struktury danych opisujące zawartość plików źródłowych testowanego programu, odwzorowanie modelu na zawartość plików źródłowych (wykonane automatycznie oraz interakcyjnie przez użytkownika), funkcje służące do modyfikacji zawartości plików źródłowych, funkcje wspierające technikę Design For Testability pozwalającą na umieszczanie informacji dotyczących testowania w modelu, funkcje wspomagające uruchamianie kompilacji oraz uruchamianie testowanego programu, funkcje pozwalające na rejestrowanie przebiegu wykonywania testu. Środowisko TOSTER zostało zaimplementowane w języku JAVA z wykorzystaniem biblioteki SWING, pełny opis znajduje się w [4]. 3. Testowanie w środowisku TOSTER W środowisku TOSTER zaimplementowano dwie metody testowania: 1. metodę wektora stanu oraz 2. metodę specyfikacji sekwencji. Obie metody służą do testowania zgodności implementacji ze specyfikacją wykonaną w postaci diagramów stanów w notacji UML. Są to metody, które trudno jednoznacznie zakwalifikować do metod funkcjonalnych czy strukturalnych. Ze względu na to, iż korzysta się w nich ze specyfikacji zachowania klasy, można by zaliczyć je do metod funkcjonalnych. Specyfikacja w postaci diagramu zmian stanów określa w pewien sposób wnętrze klasy, a ze znajomości struktury wewnętrznej korzystają metody strukturalne. Poniżej przedstawiono metodę wektora stanów (metoda specyfikacji sekwencji opisana jest w [3,4,5]), oraz opis procesu testowania.

3.1. Metoda wektora stanów Metoda wektora stanu powstała na bazie metody stanów i podstanów zaproponowanej przez C.D. Turner a and D.J. Robson a w [6]. Metoda pozwala na wyspecyfikowanie każdego ze stanów diagramu zmian stanów, jako wektora składającego się z odpowiednio zdefiniowanych wartości atrybutów klasy. Metoda wektora stanów kwalifikuje każdy komunikat wysłany do obiektu testowanej klasy w zależności od jego wpływu na stan obiektu. Pozwala to wykryć błędy polegające na: wywołaniu metod niedozwolonych dla obiektu w danym stanie, wywołaniu metod wprowadzających obiekt do stanu niezdefiniowanego, wywołaniu metod powodujących niepoprawną zmianę stanu obiektu. Pierwszy typ błędów wynika z niepoprawnego użycia obiektu testowanej klasy, zaś pozostałe dwa mogą być wynikiem błędów w implementacji metod. Metoda wektora stanu polega na zdefiniowaniu każdego stanu poprzez odpowiednie wartości atrybutów klasy. Każdy stan może być zdefiniowany przy użyciu dowolnego podzbioru wszystkich atrybutów (włącznie z atrybutami odziedziczonymi z nadklasy). Wartości atrybutów zostały podzielone na trzy rodzaje w zależności od sposobu ich określania na wartości szczegółowe, wartości ogólne oraz wartości dynamiczne. Dla każdego atrybutu specyfikuje się wartości, które może on przyjmować. Wartości te służą do definiowania wektorów stanów. W przypadku, gdy stany zawierają podstany, wektory stanów powinny być zdefiniowane w ten sposób, by definicja podstanu zawierała się w definicji nadstanu. Po zdefiniowaniu stanów dla każdej metody testowanej klasy, tworzone są zbiory stanów wejściowych (stan obiektu w momencie wywołania metody) oraz wyjściowych (stan obiektu po wykonaniu metody). Zbiory te tworzone są na podstawie specyfikacji klasy, a w szczególności w sposób automatyczny na podstawie diagramów stanów. Zbiory metod wejściowych oraz wyjściowych zostaną użyte do określenia poprawności przejść stanów. Efektywność testowania metodą wektora stanu zależy od specyfiki samej klasy. Dla takich klas jak: klasy kontrolujące pliki, analizatory leksykalne i składniowe oraz abstrakcyjne typy danych (np. listy) testowanie takie może wykryć wiele błędów niewykrywalnych przez inne metody. Stopień efektywności zależy od ilości atrybutów kontroli przepływu w danej klasie.

3.2. Proces testowania Testowanie oprogramowania przy użyciu środowiska TOSTER składa się z następujących faz: 1. pobranie modelu oprogramowania z narzędzia CASE, 2. wskazanie plików źródłowych testowanego programu, 3. uzupełnienie informacji dotyczącej odwzorowania modelu CASE na zawartość plików źródłowych, 4. wprowadzenie dodatkowych informacji dotyczących między innymi sposobu kompilacji oraz uruchamiania testowanego programu, 5. wprowadzenie informacji dotyczącej sposobu oraz przebiegu testowania specyficznych dla danej metody testowania, 6. przygotowanie przypadków testowych, 7. uruchomienie testu (poprzedzone automatyczną modyfikacją oraz kompilacją kodu źródłowego), 8. przeglądanie/zapisanie wyników testowania. Model przygotowany w narzędziu CASE (a wykonany w fazie analizy oraz projektowania) prezentuje zazwyczaj ogólną koncepcję działania i z tego powodu często wymaga uzupełnienia oraz modyfikacji. Proces testowania wymaga bowiem, aby diagramy zmian stanów w sposób spójny oraz sformalizowany opisywały zachowanie obiektów klas. Przeniesienie modelu odbywa się w sposób automatyczny poprzez plik wymiany. Model testów przeniesiony z narzędzia CASE do środowiska TOSTER wymaga wprowadzenia dodatkowych informacji w zależności od metody testowania. W przypadku metody wektora stanu wymagane jest określenie wartości atrybutów oraz wektorów stanów. Środowisko TOSTER nie wspomaga tworzenia przypadków testowych dla testowanych klas. Zbiory przypadków testowych projektuje użytkownik. W zależności od specyfiki testowanej klasy oraz programu w którym jest ona użyta, testy dla przygotowanych przypadków testowych mogą być wykonywane w dwojaki sposób: testy wykonuje specjalnie przygotowany przez użytkownika program (kontroler testów), testy wykonywane są ręcznie przez użytkownika z wykorzystaniem interfejsu użytkownika W obu przypadkach wymagany jest udział użytkownika. Uruchamianie testowanego programu odbywa się ze środowiska TOSTER, gdyż tekst programu musi zostać zmodyfikowany, tak by możliwe było testowanie przy użyciu wybranej metody testowania. Modyfikacje wprowadzane do testowanego programu zależą od metody testowania i dla metody wektora stanu obejmują między innymi :

- dodanie metody wyznaczającej stan obiektu na podstawie informacji wprowadzonych w środowisku TOSTER; - definiowanie specjalnej klasy zagnieżdżonej wewnątrz testowanej klasy; w konstruktorze oraz w destruktorze tej klasy wywoływana jest metoda wyznaczająca stan obiektów testowanej klasy; - na początku każdej z metod testowanej klasy (lub nadklas), które odpowiadają tranzycjom na diagramie stanów, dodawana jest zmienna lokalna, która jest obiektem zdefiniowanej wcześniej zagnieżdżonej klasy gwarantuje to wyznaczenie oraz zapisanie do pliku wyników testowania stanu obiektów testowanej klasy przed oraz po wykonaniu danej metody. Dodatkowo w przypadku obu metod implementacja testowanej klasy rozszerzana jest o mechanizmy pozwalające identyfikować obiekty klasy. W trakcie wykonywania testu zmodyfikowany program rejestruje przebieg wykonania testu poprzez zapis informacji do pliku wyników testowania. Po zakończeniu wykonywania testu plik ten jest analizowany przez metody testowania w środowisku TOSTER, a w szczególności weryfikowana jest poprawność wykonywania testu w odniesieniu do zdefiniowanego modelu testów. Wyniki prezentowane użytkownikowi przedstawiają przebieg wykonania programu oraz zawierają listę wykrytych błędów. 4. Przykład zastosowania Klasa Stack [4] powstała na potrzeby przedstawienia procesu testowania metodą wektora stanu. Została ona zaimplementowana w języku C++ i realizuje funkcjonalność stosu w tablicy. Deklaracja klasy w języku C++ wygląda następująco: class Stack { public: Stack(int initial_size); // konstruktor ~Stack(); // destruktor void Push(const int value); // położenie elementu na stos int Pop(); // zdjęcie elementu ze stosu protected: int size; //rozmiar tablicy pstack int top; //indeks pierwszego wolnego elementu w pstack int *pstack; //wskaźnik na tablicę zawierającą elementy stosu void Resize(const int new_size); //zmiana rozmiaru stosu }; Diagram stanów opisujący zachowanie klasy przedstawia rysunek 2:

Rysunek 2 Diagram stanów dla klasy Stack Tranzycje first_push, push_next, push_to_full, push_element odpowiadające metodzie push oraz tranzycje pop_next, pop_element, pop_last odpowiadające metodzie pop wymagają ręcznego odwzorowania na metody znajdujące się w plikach źródłowych. Tranzycje Stack, ~Stack oraz resize zostaną automatycznie odwzorowane na odpowiadające im metody. Zgodnie z ogólnym schematem postępowania dla metody wektora stanu, przed przystąpieniem do wykonywania testów konieczne jest określenie wartości dla atrybutów oraz wektorów stanu dla wszystkich stanów. Dla atrybutów klasy Stack zdefiniowano następujące wartości: Atrybut Nazwa wartości Typ wartości Wartość size initialized ogólna size>0 correct value ogólna top>=0 top empty stack szczegółowa 0 full stack dynamiczna top==size not full stack dynamiczna top>0 && top<size pstack initialized ogólna pstack!=null Korzystając z powyższych wartości, dla każdego stanu zdefiniowano następujące wektory stanów (rysunek 3): initialized = [size.initialized, top.correct value, pstack.initialized ], empty = [size.initialized, top.empty stack, pstack.initialized ], full = [size.initialized, top.full_stack, pstack.initialized ], not_full = [size.initialized] top.not_full_stack, pstack.initialized].

Rysunek 3 Okno definicji wektorów stanów Ze względu na specjalny charakter stanów initial oraz final nie są dla nich definiowane wektory stanów. Metoda wektora stanu pozwala dla danej metody na pominięcie procedury ustalania stanu obiektu i określenie stanu odgórnie. Sytuacja ta ma miejsce w przypadku konstruktora oraz destruktora oraz stanów initial oraz final z nimi związanymi. Test wykonany dla przypadku testowego określonego jako {rozmiar początkowy 5; sekwencja komunikatów: push, push, push, push, push, push, pop, pop, pop, pop, pop, pop, pop, pop, pop, pop } spowodował zasygnalizowanie wystąpienia wywołań metod, dla których nie znaleziono odpowiedniego przejścia w diagramie zmian stanów. W oknie rezultatów środowiska TOSTER wywołania błędne zaznaczone są pogrubioną czcionką. Dla dowolnej z metod, które zostały zakwalifikowane jako niepoprawne, system generuje również raport tekstowy: Metoda została wywołana dla niedozwolonego stanu obiektu. Przed wykonaniem metody obiekt znajdował się w następujących stanach: Stack/initialized Stack/initialized/empty Dopuszczalne metody: void Push ( const int value ) ~Stack ( ) 5. Uwagi końcowe Środowisko TOSTER zrealizowane w Instytucie Informatyki PW wspomaga testowanie klas napisanych w językach C++ i Java, a będących częścią

systemów zaprojektowanych w narzędziach Paradigm Plus lub Select Enterprise. Testowanie klas w izolacji nie jest wystarczające [2], konieczne jest testowanie integracyjne klas. Obecnie TOSTER nie ma możliwości testowania grupy współpracujących klas, jednak ze względu na otwartość środowiska dodanie tej możliwości może wkrótce nastąpić. Testowanie w oparciu o diagram zmian stanów opisujący zachowanie w czasie obiektu jest podejściem właściwym (patrz [1]) dla systemów obiektowych, dla klas o złożonym zachowaniu w czasie. Zgodnie z informacjami autorów komercyjne narzędzia wspomagające testowanie nie stosują w chwili obecnej tego typu metod testowania. Ze względu na dość ogólny charakter diagramów stanów realizowanych zazwyczaj w narzędziu CASE, w praktyce okazuje się, iż przed rozpoczęciem procesu testowania konieczna jest ich modyfikacja mająca na celu przekształcenie ich do postaci formalnej specyfikacji. Praktyczna przydatność narzędzia TOSTER oraz metody wektora stanów do testowania klas powinna być zweryfikowana eksperymentalnie. Bibliografia [1]. R. V. Binder: Testing Object-Oriented Systems Addison Wesley 2000 [2]. I. Bluemke: Podstawy testowania oprogramowania obiektowego, Pro Dialog nr 12, 2001 [3]. I. Bluemke, A. Lasota, S. Nowak: Testowanie oprogramowania obiektowego Raport Badawczy nr 01/2001, Instytut Informatyki, Politechnika Warszawska; styczeń 2001. [4]. A. Lasota, S. Nowak Testowanie oprogramowania obiektowego praca magisterska; Instytut Informatyki Politechniki Warszawskiej, marzec 2001 r. [5]. S. Kirami W.T. Tsai: Method sequence specification and verification of classes, J. Object-Oriented Programming, Oct. 1994, pp.28-38 [6]. C.D. Turner and D.J. Robson The state-based testing of object-oriented programs Proc. IEEE Conf. Software Maintenance. 1993. pp. 302-310