Słowa kluczowe: wytwarzanie oprogramowania w oparciu o model, model oprogramowania, generowanie kodu, model V wytwarzania oprogramowania

Podobne dokumenty
Szybkie prototypowanie w projektowaniu mechatronicznym

1.Wstęp. 2.Generowanie systemu w EDK

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wykład 1

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

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Szablony funkcji i szablony klas

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

Aplikacje WWW - laboratorium

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

Co to jest system wbudowany?

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Kontrola spójności modeli UML za pomocą modelu. Stanisław Jerzy Niepostyn, Ilona Bluemke Instytut Informatyki, Politechnika Warszawska

TESTOWANIE OPROGRAMOWANIA

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Sieciowa komunikacja procesów - XDR i RPC

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Programowanie obiektowe

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

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

Tworzenie aplikacji w języku Java

Projektowanie klas c.d. Projektowanie klas przykład

Signals + Threads: Qt vs. Boost

Język ludzki kod maszynowy

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Informatyka I : Tworzenie projektu

Wprowadzenie do programowania i programowanie obiektowe

Organizacja procesu projektowania, rozwoju i serwisowania systemu wspomagającego zarzadzanie uczelnią

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

Komputery przemysłowe i systemy wbudowane

AUREA BPM HP Software. TECNA Sp. z o.o. Strona 1 z 7

Pobieranie argumentów wiersza polecenia

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Weryfikacja i walidacja. Metody testowania systemów informatycznych

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Realizacja bezpiecznego programowalnego sterownika logicznego z wykorzystaniem języków HDL

Bloki anonimowe w PL/SQL

Programowanie obiektowe

REFERAT PRACY DYPLOMOWEJ

Adam Wójs <adam[shift+2]wojs.pl> git --wprowadzenie

I - Microsoft Visual Studio C++

Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

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

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Qt sygnały i designer

Materiały dodatkowe. Raspberry Pi

Wstęp do programowania

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

UML w Visual Studio. Michał Ciećwierz

Programowanie Systemów Czasu Rzeczywistego

Programowanie Systemów Wbudowanych. Specjalność uzupełniająca Systemy wbudowane

Tom 6 Opis oprogramowania

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Programowanie obiektowe

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Podstawy programowania w języku C

UML cz. III. UML cz. III 1/36

ALGORYTMY I STRUKTURY DANYCH

Programowanie w środowiskach RAD Qt i C++

Tworzenie przypadków testowych

Maciej Oleksy Zenon Matuszyk

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

1 Podstawy c++ w pigułce.

XIII International PhD Workshop OWD 2011, October 2011 METODA REEINGINEERINGU ORGANIZACJI Z WYKORZYSTANIEM SYMULATORA PROCESÓW BIZNESOWYCH

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

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

Szablony funkcji i klas (templates)

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Technologie cyfrowe semestr letni 2018/2019

Część 4 życie programu

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

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Microsoft Foundation Classes

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Projektowanie baz danych za pomocą narzędzi CASE

Transkrypt:

Marek BRYKCZYŃSKI 1 Opiekun naukowy: Marcin SIDZINA 2 GENEROWANIE KODU Z MODELU OPROGRAMOWANIA Streszczenie: Przegląd i analiza wybranych narzędzi do rozwoju oprogramowania, które posiadają możliwość generowania kodu w wysokopoziomowych językach programowania. Zastosowanie techniki generowania kodu z modelu w modelu V wytwarzania oprogramowania w celu dwukierunkowego śledzenia wymagań dotyczących funkcjonalności oraz przyśpieszenia procesu wytwarzania oprogramowania. Słowa kluczowe: wytwarzanie oprogramowania w oparciu o model, model oprogramowania, generowanie kodu, model V wytwarzania oprogramowania GENERATING CODE FROM A SOFTWARE MODEL Summary: Review and analysis of selected software development tools that have the ability to generate code in high-level programming languages. Application of the code generation technique from the model in the V model of software development for the purpose of bidirectional tracking of functionality requirements and acceleration of the software development process. Keywords: model of software, code generation, model V of software development, model driven development 1. Model V wytwarzania oprogramowania W przemyśle motoryzacyjnym oprogramowanie wbudowane dla mikroprocesorowych układów sterujących systemami w samochodach; przykładowo takich jak: komputer pokładowy, układ wspomagania kierownicy, układ poduszek powietrznych i inne; wytwarzane jest w oparciu o model V wytwarzania oprogramowania. Zastosowanie tego modelu wynika z standardów wytwarzania produktów docelowych, których częścią jest oprogramowanie. Standardami tymi są ISO 26262, który dotyczy bezpieczeństwa funkcjonalnego oraz ASPICE bazujący na 1 Akademia Techniczno-Humanistyczna w Bielsku-Białej, Wydział Budowy Maszyn i Informatyki, Budowa i Eksploatacja Maszyn, marek.brykczynski@gmail.com 2 dr inż., Akademia Techniczno-Humanistyczna w Bielsku-Białej, Wydział Budowy Maszyn i Informatyki, msidzina@ath.bielsko.pl

36 Marek BRYKCZYŃSKI ISO/IEC 15504 (ang. Automotive Software Process Improvement and Capability Determination) tj. usprawnianie procesu wytwarzania oprogramowania w przemyśle motoryzacyjnym oraz wyznaczanie jego zdolności. 1.1. Charakterystyka modelu V wytwarzania oprogramowania Przedstawiony na rysunku 1 model V odwołuje się poprzez znaczniki ENG.X bezpośrednio do standardu ASPICE w wersji PAM 2.5. Strzałki będące liniami ciągłymi przedstawiają kierunek przepływu danych wejściowych dla danego poziomu, strzałki kreskowane przedstawiają referencje, które są podstawą walidacji danego poziomu. Przykładowo testowanie oprogramowania waliduje czy przenalizowane i wyspecyfikowane wymagania oprogramowania są spełnione. Rysunek 1. Model V wytwarzania oprogramowania na podstawie ASPICE PAM 3 2.5 1.2. Umiejscowienie generowania kodu w modelu V Na podstawionego przedstawionego powyżej modelu V wytwarzania oprogramowania, model definiowany jest na poziomie projektowania architektury oprogramowania. Następnym etapem jest poziom konstrukcji oprogramowania tj. wytwarzanie i testowanie jednostkowe algorytmów napisanych przez programistę na podstawie modelu. Generując kod eliminuje się etap manualnego wytwarzania kodu 3 Automotive Software Process Improvement and Capability Determination Process Assessment Model

Generowanie kodu z modelu oprogramowania 37 oraz dodatkowo zapewnia się automatycznie dwukierunkowe śledzenie między modelem a oprogramowaniem. Rysunek 2. Generowanie kodu w modelu V 2. Algorytm i architektura programu do sterowania poziomem w zbiorniku W opracowaniu tym przedstawiony zostanie uproszczony projekt architektury oprogramowania i algorytmu regulującego poziom cieczy w zbiorniku buforowym o niekontrolowanym odpływie. Architektura oprogramowania zostanie zaprojektowana w programie ArgoUML. Prosty algorytm regulacyjny zamodelowany zostanie w środowisku Matlab/Simulink. Z obydwu wspomnianych programów wygenerowany zostanie kod w języku wysokopoziomowym C++, który następnie zostanie zintegrowany i zbudowany. Docelowa aplikacja powstanie w środowisku Visual Studio jako plik wykonywalny z możliwością uruchomienia z linii komend. ArgoUML *.cpp, *.h Visual Studio *.exe Matlab/Simulink Rysunek 3. Przejście: model wygenerowany kod aplikacja

38 Marek BRYKCZYŃSKI Obiektem automatycznej regulacji, który został wybrany do zaprojektowania architektury oraz algorytmu regulacji jest zbiornik buforowy. Do zbiornika podłączone są dwa zawory, przy czym projektowany regulator będzie posiadał możliwość sterowania tylko zaworem doprowadzającym ciecz roboczą. Zawór opróżniający sterowany jest poprzez inny regulator, nieujęty w tym opracowaniu. Rysunek 4. Model fizycznego obiektu regulacji 2.1. Architektura w UML Rysunek 5. Diagram klas obiektów w układzie regulacji poziomem w zbiorniku Wygenerowany kod pliku nagłówkowego klasy Tank (ang. zbiornik).

Generowanie kodu z modelu oprogramowania 39 #ifndef Tank_h #define Tank_h #include "Container.h" #include "Valve.h" class Tank : public Container { public: Tank(Integer _level_mm = 0); virtual void setcurrentlevel(integer _currlev_mm); virtual void setrequiredlevel(integer _setlev_mm, Integer delta_mm); public: Integer currentlevel_mm; Integer levelmin_mm; Integer levelmax_mm; public: /** * @element-type Valve */ Valve myvalve[ 2]; ; #endif Tank_h 2.2. Model algorytmu regulacyjnego w programie Matlab/Simulink Rysunek 6. Model symulacyjny układu regulacji

40 Marek BRYKCZYŃSKI Rysunek 7. Diagram maszyny stanu realizujący algorytm regulacji Wygenerowany kod maszyny stanu: File: controllevel.cpp Code generated for Simulink model 'levelcontroller'. Model version : 1.9 Simulink Coder version : 8.13 (R2017b) 24-Jul-2017 C/C++ source code generated on : Wed Oct 31 19:44:42 2018 Target selection: ert.tlc Embedded hardware selection: Intel->x86-64 (Windows64) Code generation objectives: 1. Execution efficiency 2. RAM efficiency Validation result: Not run #include "controllevel.h" Include model header file for global data #include "levelcontroller.h" #include "levelcontroller_private.h" Named constants for Chart: '<Root>/controlLevel' #define IN_CLOSE ((uint8_t)1u) #define IN_INITIALIZATION ((uint8_t)2u) #define IN_OPEN ((uint8_t)3u) Output and update for atomic system: '<Root>/controlLevel' void levelcontrollermodelclass::controllevel()

Generowanie kodu z modelu oprogramowania 41 { Chart: '<Root>/controlLevel' incorporates: Outport: '<Root>/y' if (rtdw.is_active_c3_levelcontroller == 0U) { rtdw.is_active_c3_levelcontroller = 1U; rtdw.is_c3_levelcontroller = IN_INITIALIZATION; rty.y.valvestate = 0; else { switch (rtdw.is_c3_levelcontroller) { case IN_CLOSE: if (rtdw.busconversion_insertedfor_contr.level < rtdw.busconversion_insertedfor_contr.min) { rtdw.is_c3_levelcontroller = IN_OPEN; rty.y.valvestate = 1; break; case IN_INITIALIZATION: if (rtdw.busconversion_insertedfor_contr.level < rtdw.busconversion_insertedfor_contr.min) { rtdw.is_c3_levelcontroller = IN_OPEN; rty.y.valvestate = 1; else { if (rtdw.busconversion_insertedfor_contr.level > rtdw.busconversion_insertedfor_contr.max) { rtdw.is_c3_levelcontroller = IN_CLOSE; rty.y.valvestate = 0; break; default: if (rtdw.busconversion_insertedfor_contr.level > rtdw.busconversion_insertedfor_contr.max) { rtdw.is_c3_levelcontroller = IN_CLOSE; rty.y.valvestate = 0; break; End of Chart: '<Root>/controlLevel' File trailer for generated code. [EOF]

42 Marek BRYKCZYŃSKI 3. Integracja aplikacji regulatora Finalny program tj. aplikacja regulująca poziom cieczy w zbiorniku zintegrowana została w środowisku Visual Studio. W tym celu stworzony został projekt, do którego podłączone zostały wygenerowane pliki źródłowe i nagłówkowe. 3.1. Funkcja main aplikacji int main(int argc, char* argv[]) { Integer measuredlevel_mm = 0; Integer valveposition = 0; bool testresult = true; Tank t; levelcontrollermodelclass regulator; t.setrequiredlevel(preset_level_mm, DELTA_LEVEL_MM); input vector std::fstream finput(argv[1], std::fstream::in); regulation simulation while (!finput.eof()) { finput >> measuredlevel_mm; finput >> valveposition; if (finput.eof()) break; t.setcurrentlevel(measuredlevel_mm); regulator.rtu.u.level = t.currentlevel_mm; regulator.rtu.u.min = t.levelmin_mm; regulator.rtu.u.max = t.levelmax_mm; regulator.step(); t.myvalve[0].state = regulator.rty.y.valvestate; if (t.myvalve[0].state!= valveposition) { testresult = false; checktestresult(testresult, argv[1]); finput.close();

Generowanie kodu z modelu oprogramowania 43 3.2. Testowanie jednostkowe zintegrowanego algorytmu Funkcja main aplikacji zaprojektowana została w sposób pozwalający wywołać ją z linii komend wiersza poleceń lub poprzez plik wsadowy. Głównym zadaniem funkcji main jest doprowadzenie wejściowego wektora testowego do regulatora i sprawdzenie czy wynik działania programu jest dokładnie taki sam jak w wektorze wejściowym. Walidacja poprawności działania algorytmu sterującego przeprowadzona została poprzez wykonanie programu z parametrami wejściowymi przedstawionymi poniżej. levelcontrol.exe testcase1.txt levelcontrol.exe testcase2.txt Rysunek 8. Wykres graficzny danych dla wektora przypadku testowego 2 W wyniku uruchomienia programu uzyskano dokładnie taki sam przebieg sygnału sterującego otwarciem i zamknięciem zaworu. 4. Podsumowanie i wnioski Stosując generowanie kodu z modelów architektury i algorytmów sterujących zapewnia się dwukierunkowe śledzenie pomiędzy modelem a kodem co jest pewnego rodzaju dokumentacją kodu, która pozwala osobom bez znajomości języków programowania przeanalizować działanie programu. Kolejną zaletą tego podejścia jest redukcja zapotrzebowania na ręczne wytwarzanie kodu, który realizuje daną funkcjonalność. Niewątpliwym zyskiem w tym przypadku jest redukcja czasu

44 Marek BRYKCZYŃSKI potrzebnego na wytworzenie i przetestowanie oprogramowania przed dostarczeniem go do odbiorcy. Zmniejszeniu ulega również ryzyko wystąpienia błędów funkcjonalnych związanych z niezgodnością kodu względem modelu. Niestety generowanie kodu ma również swoje wady. Jedną z tych wad, w porównaniu do kodu wytworzonego manualnie i nierzadko zoptymalizowanego względem modelu, jest większe zapotrzebowanie na zasoby maszyny wykonującej daną aplikację; takich jak: pamięć swobodnego dostępu, pamięć nieulotna oraz czas procesora. Kolejną wadą kodu generowanego jest jego czytelność, która bardzo silnie zależy od ustawień danego programu generującego kod. Dodatkowym wyzwaniem stawianym przed modelami oprogramowania przeznaczonymi do wytworzenia kodu generowanego jest spełnienie reguł wytwarzania bezpiecznego oprogramowania. W przypadku kodu wytwarzanego ręcznie jest to MISRA 4. W przypadku modeli przeznaczonych go generowania kodu są to reguły MISRA AGC 5 i MAAB 6. LITERATURA 1. Serwis internetowy Automotive SPICE Process Reference Model v4.5 : http:www.automotivespice.com/fileadmin/softwaredownload/automotivesig_prm_v45.pdf, 23.10.2018 2. Serwis internetowy Object Management Group UML 1.4 : https:www.omg.org/spec/uml/1.4/, 31.10.2018 3. Serwis internetowy ArgoUML Documentation : http:argouml.tigris.org/documentation/, 31.10.2018 4. Serwis internetowy Mathworks Embedded Code Generation : https:www.mathworks.com/solutions/embedded-code-generation.html, 31.10.2018 4 Motor Industry Software Reliability Association 5 Motor Industry Software Reliability Association Auto Generated Code 6 Mathworks Automotive Advisory Board