Gdzieś między Polską a Niemcami, a szczególnie w NRD

Czas nieutracony (5) – Metamodel

Jak napisałem w poprzednim odcinku, na początku nie doceniłem stopnia komplikacji metamodelu AUTOSARa. A było to tak:

  • Metamodel definiuje mnóstwo klas obiektów i relacje między nimi (parent-child i asocjacje), To jeszcze nie jest nic specjalnego, mimo że obiektów jest mnóstwo.
  • Metamodel jest dystrybuowany jako projekt w EA. Można go sobie wyeksportować w formacie XMI, czyli wariancie XMLu. Jest też w formacie Ecore.
  • Parsowanie XMLa nie jest żadnym problemem, wygenerowanie wczytanej informacji tak, jak potrzebuję to też trywiał.

No i ta trywialność mnie zmyliła. Przeoczyłem jedną, bardzo istotną rzecz: Typowy projekt w automotive musi obsługiwać warianty. O co chodzi? Po prostu ten sam kod jest używany na przykład w różnych modelach samochodów, z różnym wyposażeniem. Albo może współpracować na przykład z wyświetlaczami od różnych dostawców. To są właśnie te warianty. Typowo wariant wybiera się przy kompilacji przez ustawienia jakichś #define (pre-build) albo w jakiś sposób wybiera konfigurację przy wykonaniu programu (post-build), ale AUTOSAR usystematyzował to. Technicznie (i w uproszczeniu) wygląda to tak, że do wielu obiektów można podczepić obiekt klasy VariationPoint, w którym jest zapisane (jako logical expression), dla jakich wariantów dany obiekt obowiązuje, i kiedy najpóźniej ma nastąpić wybór wariantu.

No i w czym problem?

  • Metamodel nie zawiera obsługi wariantów wprost - obiekty które mogą mieć warianty są tylko oznaczone odpowiednim stereotypem.
  • Żeby metamodel dał się używać w praktyce, trzeba go przetransformować do takiego z wariantami. Transformacje modyfikują strukturę metamodelu i dodają nowe obiekty.
  • Jest w opisie standardu dokument opisujący te transformacje, ale:
    • To jest skomplikowane jak jasna cholera.
    • W paru miejscach transformacje są niedospecyfikowane.
    • W innych miejscach dokument ma oczywiste błędy. Drobne, ale trzeba je znaleźć.
    • W praktyce trzeba zajrzeć do rzeczywistych plików zrobionych w działających narzędziach, żeby zobaczyć jak naprawdę ma być (a przynajmniej mieć tam takie same błędy jak wszyscy 🙂 - to się nazywa "kompatybilność").
  • No i oprócz tego same metamodele mają trochę błędów, zwłaszcza we wczesnych wersjach, i trzeba co nieco skorygować ręcznie.

No dobrze, powiecie, ale przecież ktoś już to musiał zrobić, inaczej nie istniałyby jakiekolwiek narzędzia do tego AUTOSARa?

Tak, zrobiło to konsorcjum, w Javie, jako plugin do Eclipse. Znaczy to jest wygenerowany handler do plików ARXML i do zarządzania tymi obiektami. Nazywa się to Artop, i jest dostępne po rejestracji. Wszyscy (chyba z wyjątkiem IBMa, który raczej zrobił wszystko ręcznie, i LieberLiebera, który na pewno zrobił ręcznie) używają tego Artopa. Wyjaśnia to, dlaczego wszystkie toole do AUTOSARa bazowane są na Eclipse - po prostu nikt inny nie przebrnął przez ten problem i nie zrobił swojego handlera.

Logo Artop

Logo Artop

Jak możecie się domyślać, nikt poza mną. To była druga najbardziej skomplikowana rzecz, jaką w życiu robiłem, dwa miesiące mi zajęło żeby doprowadzić to do działania, żeby móc importować i eksportować pliki AUTOSARowe zgodnie z metamodelem dla danej wersji. I jeszcze jak potem intensywnie rzecz testowałem, poznajdowałem i poprawiłem trochę błędów i problemów, co też dobry tydzień zajęło. Ale działa - jako jedyny na świecie niezależny taki handler. Nie wrzucam kodu transformera na żadną chmurę, githuba, ani nic podobnego - tylko na moje serwery niedostępne z zewnątrz, nie mogę ryzykować, że wycieknie.

Moje podejście jest inne, niż w Artopie - oni na podstawie metamodelu generują kod w Javie, ja generuje pliki z danymi metamodelu, interpretowane przez mój kod napisany ręcznie. Moje podejście jest elastyczniejsze - generuję raz, i używam do dowolnych celów, oni dla nowego celu muszą modyfikować generator i generować ponownie. Oprócz tego oni mają - według mnie - błędną koncepcję obsługi plików wygenerowanych według różnych wersji specyfikacji - używają najnowszej znanej wersji i bazują na kompatybilności wstecznej, a to może robić problemy. Ja obsługuję każdy plik w jego indywidualnej wersji, również jak są wczytane jednocześnie.

W następnym odcinku parę generalnych uwag na temat MDD.

-----------------------------------------------------------------------------------------------------------------------

Dotyczy:

Kategorie:Programowanie

Sledz donosy: RSS 2.0

Wasz znak: trackback

-----------------------------------------------------------------------------------------------------------------------


Skomentuj i Ty

Komentowanie tylko dla zarejestrowanych i zalogowanych użytkowników. Podziękowania proszę kierować do spamerów