Testowanie oprogramowania dla automatów stanów

Wiele rodzajów testowania oprogramowania zyskało na popularności, ponieważ programiści poszukują sposobów na poprawę jakości i dotrzymywanie terminów realizacji projektów – przegląd kodu, testy jednostkowe, testy regresyjne, testy beta, programowanie testami (test-driven development) i inne. Niezależnie od celów projektu i języka programowania używanego, powszechnie uznaje się, że im wcześniej wykryty zostanie błąd, tym łatwiej, taniej i szybciej można go naprawić. Generowanie kodu z Diagramy maszyn stanów UML, nowa funkcja, która została wprowadzona w Altova UModel 2011 Wersja 2 może być wykorzystana do wczesnej weryfikacji logiki koncepcyjnej na etapie rozwoju projektu.

Projektowanie w oparciu o rzeczywiste zastosowania, przedstawione w diagramie maszyny stanów

Przykład dołączony do UModel zawiera prosty i realistyczny diagram maszyny stanów, wraz z małą aplikacją testową, którą można uruchomić, aby samodzielnie przekonać się, jak łatwo można przetestować logikę danego projektu. Diagram maszyny stanów w projekcie AirCondition.ump, znajdującym się w folderze z przykładami UModel 2011, opisuje działanie typowego systemu ogrzewania i klimatyzacji.

System zawiera przycisk zasilania, znajdujący się po lewej stronie i przełączający urządzenie z trybu wyłączonego, funkcję wyboru trybu pracy (ogrzewanie lub chłodzenie), funkcję wyboru prędkości wentylatora oraz przycisk trybu czuwania, który umieszcza system w trybie czuwania, jak pokazano po prawej stronie. Przykładowy folder projektu zawiera cały kod wygenerowany przez UModel dla diagramu, w językach Java, C# i Visual Basic. Aby przetestować wersję Java, wystarczy użyć polecenia javac STMTester.java do skompilowania kodu i java STMTester do jego uruchomienia. Aplikacja testowa wyświetla symulowany panel sterowania z oknami informacyjnymi dotyczącymi urządzenia grzewczego i klimatyzacyjnego. Przyciski sterujące znajdują się u góry, aktualny stan jest opisany w pierwszym oknie, a komunikaty wyjściowe generowane przez zmiany w systemie pojawiają się w drugim oknie.

Jak pokazano powyżej, system uruchamia się w stanie wyłączonym, tryb jest ustawiony na ogrzewanie, a wentylator jest wyłączony. Przed rozpoczęciem pracy z systemem, warto zmienić rozmiar panelu sterowania i diagramu stanów, aby śledzić działanie aplikacji testowej, jak pokazano na poniższym obrazie o zmniejszonym rozmiarze.

Obsługa automatu stanów

Po kliknięciu przycisku zasilania, okno wyświetlające aktualny stan jest aktualizowane, a szczegółowy opis wykonanych operacji jest wyświetlany jako "Zdarzenie 1" w oknie komunikatów debugowania.

Jeśli jest upalny dzień, możemy zmienić tryb na chłodzenie i zwiększyć prędkość wentylatora. Możemy to zrobić, klikając przyciski "wybierz tryb" i "wybierz prędkość". Okienko "stan aktualny" aktualizuje się przy każdym kliknięciu, a wiadomości "zdarzenie 2" i "zdarzenie 3" są dodawane do okienka z komunikatami.

Teraz możemy zobaczyć, jak aplikacja testująca pozwala nam w pełni przetestować logikę naszego diagramu maszyny stanów, klikając każdą możliwą sekwencję wyborów przycisków, aby sprawdzić, czy dają one oczekiwane rezultaty. Na przykład, jeśli umieścimy urządzenie w trybie czuwania (zdarzenie 4 poniżej), a następnie naciśniemy przycisk "speedSelect", w komunikatach wyjściowych dla zdarzenia 5 widzimy, że nie następuje żadna zmiana stanu w podstanie o nazwie "RegionSpeed". Porównajmy zdarzenie 5 ze zdarzeniem 3 w oknie komunikatów wyjściowych, jak pokazano poniżej.

Teraz, gdy system jest w trybie czuwania i nie potrzebujemy ogrzewania ani chłodzenia, oszczędzajmy energię, wyłączając go za pomocą przycisku zasilania.

Poczekajcie chwilę – wygląda na to, że nic się nie stało. W zdarzeniu 6 nie nastąpiła żadna zmiana, a aktualny stan w oknie u góry nadal wskazuje "Gotowość"! Sprawdzając diagram automatu stanów, widzimy, że jedynym sposobem na wyjście z trybu gotowości jest ponowne naciśnięcie przycisku "Gotowość". Czy to naprawdę jest zachowanie, którego można oczekiwać od przeciętnego użytkownika, że przycisk zasilania nie wyłączy systemu z trybu gotowości?

Wyobraźcie sobie, jak kosztowna mogłaby być naprawa tego problemu, gdyby został on wykryty znacznie później, na etapie testowania prototypu przez organ regulacyjny! Oto wyzwanie, które stawiamy naszym czytelnikom: jak zaprojektowalibyście inny, bardziej bezpośredni sposób przejścia ze stanu czuwania do stanu wyłączenia?

Testowanie własnych automatów stanów

Można wykorzystać przykładowe projekty generowania kodu dla maszyn stanów UModel jako szablony do tworzenia aplikacji testowych dla własnych projektów. Warto skorzystać z funkcji UModel, która automatycznie tworzy operacje w klasie w miarę dodawania nazw operacji do przejść w maszynie stanów.

Ponadto, system pomocy UModel zawiera szczegółowe informacje na temat generowania kodu z diagramów stanów, a także wykorzystuje plik projektu AirCondition.ump jako przykład.

Sprawdź samodzielnie, jak możesz usprawnić proces tworzenia projektów, testując logikę własnych diagramów automatów stanów za pomocą programu Altova UModel – pobierz bezpłatną 30-dniową wersję próbną już dziś!