zalozenia-projektu-t..

Transkrypt

zalozenia-projektu-t..
TEMIDA to projekt badawczo-rozwojowy w zakresie inżynierii oprogramowania,
którego głównym celem jest budowa narzędzi architektonicznych automatyzujących
metody inspekcji artefaktów projektowych takich jak kod i model projektowy.
MOTIVATION STORY:
Załóżmy sporej wielkości przedsięwzięcie informatyczne z jawnie zdefiniowaną rolą
architekta oprogramowania (czy też project leadera), którego zadaniem jest szczęśliwe
zakończenie projektu w wyznaczonych ramach czasowo-osobowo-finansowych. W
ramach powyższego zadania można zidentyfikować dwie istotne czynności architekta:
1. zbudowanie szkieletu systemu (kernela) rozwiązującego wszystkie problemy
technologiczne, minimalizującego ryzyko porażki technicznej projektu oraz
umożliwiającego przyszłą rozbudowę systemu,
2. dopilnowanie, żeby pozostali członkowie zespołu uzupełniając szkielet o niezbędną
funkcjonalność nie zepsuli tego, co zostało stworzone w punkcie 1.
Dla zaspokojenia punktów 1 i 2 architekt czyni szereg założeń i wprowadza wiele
ograniczeń, które zapisuje w formie wytycznych architektonicznych (guidelines) i
przekazuje pozostałym uczestnikom projektu (projektantom i programistom
poszczególnych modułów systemu). Przykładem wytycznych architektonicznych jest np.
zakaz bezpośredniego dziedziczenia po pewnej klasie kernela, nakaz wywołania funkcji
X przed każdym wywołaniem funkcji Y, obowiązek obsługi błędu A w określonych
sytuacjach, stosowanie wzorca projektowego D przy realizacji zagadnienia typu S itp.
Przy każdej zmianie kernela (dyktowanej zazwyczaj kwestiami wydajnościowymi lub
rozwojowymi oprogramowania) architekt stara się poruszać w wyznaczonych przez siebie
granicach. Zakłada przy tym, że programiści pisząc dotychczasowy kod zachowali
zgodność z wytycznymi architektonicznymi. Niestety założenie to w porażającej ilości
przypadków okazuje się błędne a system nawet po drobnej zmianie architektonicznej nie
daje się zbildować (skąd to znamy?). Zaczyna się żmudna praca całego zespołu
polegająca na poszukiwaniu buga w kodzie....
O ile inaczej toczyłaby się opisana wyżej historyjka gdyby architektowi, projektantom i
programistom dostarczyć narzędzie weryfikujące zgodność kodu/projektu z wytycznymi
architektonicznymi. A o ile piękniejszy byłby świat, gdyby wykryte błędy automatycznie
niwelować! WARTO wspomnieć że nie znalazłam (na razie) narzędzia realizującego
podobną funkcjonalność.
ZAŁOŻENIA TEMIDY:
1. Architekt jest leniuchem (inaczej nie byłby architektem) dlatego nie skorzysta z
narzędzia, które wymaga od dodatkowego nakładu pracy ponad to co zwykł robić
(czyli picia piwa, kawy i popalania papieroów). Z tych względów należy
maksymalnie wykorzystać wszystkie dostępne środki minimalizując równocześnie
wszelką dodatkową aktywność architekta. Krytyczną kwestią w tym miejscu staje
się forma zapisu wytycznych architektonicznych, które zazwyczaj (jeśli w ogóle)
stanowią dokument tekstowy w ojczystym języku architekta.
2. Programiści i projektanci są przyzwyczajeni do narzędzi z którymi obcują na co
dzień i niechętnie będą używać innych narzędzi na boku tylko dlatego, że
architektowi się tak podoba. Stąd narzędzie weryfikujące (oraz refaktoryzujące)
powinno być zintegrowane z popularnymi środowiskami programistycznymi i
projektowymi. TEMIDA może więc stanowić plug-in (add-ins) do wybranych
środowisk programistycznych i projektowych.
ROZPASANA WIZJA TEMIDY
Najodważniejsza wizja otrzymana w pewnym zwidzie zakłada, że TEMIDA sama
domyśla się co architekt chce powiedzieć po czym sama (nieprzymuszona) sprawdza czy
programiści realizują wytyczne architekta. W przypadku wykrycia błędu automatycznie
dostosowuje kod do wytycznych i obcina premię programisty przenosząc ją na konto
architekta. Ponieważ sztuczna inteligencja nie dorosła do podanej wizji i póki co nie ma
co marzyć o AI_Kappo, dlatego należy ograniczyć zakres TEMIDY do tego co
(przynajmniej w teorii) wydaje się technologicznie osiągalne. Poniżej zobrazowany
całokształt pomysłu:
dane wejsciowe: dokument
architektoniczny (guideli ne)
dane wyjsciowe: szablon wytycznych
dane wejsciowe: szablon wytycznych; wybrane
elementy model u
dane wyjsciowe: instancj e wytycznych
NL PARSER
GENERAT OR INST ANCJI
WYT YCZNYCH
dane wejsciowe: model UML
dane wyjsciowe: wybrane
elementy modelu (l ista?)
PREZENTACJA
dane wejsciowe: instancje
wytycznych
dane wyjsciowe: wyni k anali zy
XMI
PARSER
ANALIZATOR
MODELU
ANALIZATOR
KODU
MODEL UML 1.4
dane wejsciowe: pli k XMI
dane wyjksciowe: model
UML
REFAKT OR
MODELU
WYNIK ANALIZY
REFAKTOR
KODU
dane wejsciowe: wynik anali zy
dane wyjsciowe: nowa instancja
model u UML
dane wejsciowe: wynik
anal izy
dane wyjsciowe: null
KOD
WYSWIETLACZ
BLEDOW
dane wejsciowe: wyni k anali zy
dane wyjsciowe: nowa
instancj a kodu
INNA BARDZIEJ PRZYZIEMNA KONCEPCJA
Zgoda – przesadziłam – analizator semantyczny języka naturalnego też nie jest rzeczą
trywialną. Poniżej to, co w pewnej dalekiej ale dającej się przewidzieć przyszłości można
spróbować zrobić z TEMIDĄ:
dane wejsciowe: bezp. od programisty
/projektanta
dane wyjsciowe: szablon wytycznych
dane wejsciowe: szablon wytycznych; wybrane
elementy modelu
dane wyjsciowe: instancje wytycznych
MODELER
WY TY CZNYCH
GENERATOR INSTANCJI
WYTYCZNYCH
dane wejsciowe: model UML
dane wyjsciowe: wybrane
elementy modelu (lista?)
PREZENTACJA
dane wejsciowe: instancje
wytycznych
dane wyjsciowe: wynik analizy
XMI
PARSER
ANALIZATOR
MODELU
ANALIZATOR
KODU
MODEL UML
dane wejsciowe: plik XMI
dane wyjksciowe: model
UML
REFAKTOR
MODELU
REFAKTOR
KODU
WYNIK ANALIZY
dane wejsciowe: wynik analizy
dane wyjsciowe: nowa instancja
modelu UML
dane wejsciowe: wynik
analizy
dane wyjsciowe: null
KOD
WYSWIETLACZ
BLEDOW
dane wejsciowe: wynik analizy
dane wyjsciowe: nowa
instancja kodu
TO CO ZROBIMY
Ponieważ nie da się wszystkiego zbudować od razu (ale to odkrywcze) to proponuję kilka
iteracji, w których małymi kroczkami przy niewielkiej liczbie strat osobowych w zespole
można spróbować zaimplementować TEMIDĘ:
dane wejsciowe: instancje
wytycznych, kod
dane wyjsciowe: wynik analizy
dane wejsciowe: wynik
analizy
dane wyjsciowe: null
ANALIZATOR
KODU
KOD
WYSWIETLACZ
BLEDOW
WYNIK ANALIZY
ITERACJA „0”: TEMIDA jako add-ins do .NET’a
Analizator kodu dla jednego języka programowania (? C# ?) lub wszystkich języków
programowania dostępnych na platformie .NET (wykorzystanie CLR – pomysł Dominika
Chrzanowskiego). Konkretne (zinstancjonowane) wytyczne architektoniczne podajemy
do TEMIDY ręcznie w stosownym formacie.
dane wejsciowe: bezp. od programisty
/projekta...
dane wejsciowe: szablon wytycznych; wybrane
elementy mod...
MODELER
WYT YCZNYCH
GENERATOR INSTANCJI
WYT YCZNYCH
dane wejsciowe: model UML
dane wyjsci owe: wybrane
elementy model u (l ista?)
PREZENTACJA
dane wejsciowe: instancje
wytycznych, kod
dane wyjsci owe: wyni k analizy
XMI
PARSER
ANALIZATOR
KODU
MODEL UML 1.4
dane wejsciowe: pli k XM I
dane wyjksciowe: m odel
UML
WYNIK ANALIZY
dane wejsciowe: wyni k
analizy
dane wyjsciowe: null
WYSWIET LACZ
BLEDOW
KOD
ITERACJA 1: Szablonowanie wytycznych architektonicznych
Implementujemy modeler wytycznych, moduł parsowania dokumentów XMI i moduł
prezentacji diagramów UML (POWIĄZANIE Z PROJEKTEM CHORS) oraz generator
instancji wytycznych. Warto nadmienić, że swego czasu popełniłam parser XMI dla UML
1.4 (niestety lub stety w C#.NET).
ITERACJA 2: Refaktoryzator kodu
//to do
ITERACJA 3: Refaktoryzator modelu
//to do
ITERACJA 4: Meta-wizja meta-TEMIDY
//przenosimy analizator na meta-poziom umożliwiając zunifikowaną weryfikację kodu
napisanego w dowolnym języku programowania. Budujemy plug-in do Eclipse celem
sprawdzenia proof-of-concept (POWIĄZANIE Z PROJEKTEM META_META).
JAK SIĘ POŁĄCZYĆ Z CHORSEM?
Programista wykorzystując TEMIDĘ potrzebuje na początek wygenerować instancje
wytycznych architektonicznych na podstawie szablonu wytycznych. W tym celu musi w
modelu UML wskazać pewne elementy, które zastąpią zmienną z szablonu. Póki co nie
mamy implementacji modułów dla parsowania i prezentacji modeli UML 2.0. O czym
jednak warto pamiętać – mamy parser XMI dla UML 1.4 z brakującą warstwą prezentacji
i wizualizacji diagramów.
Z kolei CHORS to projekt narzędzia modelowania (ala Rational Rose dla Linux), który
ma pracować na UML 2.0. CHORS nie został jeszcze zaimplementowany ale został
całkiem przyjemnie zamodelowany. Warto zewrzeć więc szeregi i spróbować znaleźć
sposób na wspólną implementację meta-modelu UML 2.0, parsera XMI 2.0 oraz warstwy
prezentacji diagramów UML.
PROBLEM 1: nasz model UML 1.4 i parser XMI są napisane w C#.NET; piszemy add-in
do Visual Studio .NET;
PROBLEM 2: podobno Mono (.NET pod Linux) nie jest jeszcze dopracowany, więc
prawdopodobnie koledzy z CHORS nie będą skłonni pisać w C#(dajcie znać, gdyby się
coś zmieniło);
PROBLEM 3: UML 2.0 prawdopodobnie nie jest ostatnim zdaniem, jakie OMG ma
zamiar wypowiedzieć w zakresie modelowania systemów informatycznych;
PROBLEM 4: z dużym prawdopodobieństwem można powiedzieć, że nie da się
bezboleśnie wykorzystywać otrzymanych z zewnątrz struktur C++’owych (ich
wykorzystanie wymagałoby zaimplementowania w ramach TEMIDY całego metamodelu UML czyli masło maślane);
Dwa rozwiązania ad hoc (autorstwa Krzysia Śmiechowicza):
//Krzysztof, daj znać, gdyby coś było nie tak zamodelowane.
GUI
KOMUNIKACJA
dane wejsciowe:
diagram
eleme...
PREZENTACJA
dane wejsciowe: model UML
dane wyjsciowe: graf
diagramu UML 1.4
MODEL
INT EGRAT OR
MODEL UML 2.0
XMI
PARSER
dane wejsciowe: plik XMI dla UML
2.0
dane wyjksciowe: model UML 2.0
MODEL UML 1.4
XMI
PARSER
dane wejsciowe: plik XMI dla UML
1.4
dane wyjksciowe: model UML 1.4
XMI
WRIT ER
dane wejksciowe: model UML
1.4
dane wyjsciowe: plik XM I dla
UML 1.4
GUI
dane wejsciowe: model UM L
dane wyjsciowe: graf
diagramu UML 2.0
KOMUNIKA
CJA
PREZENT ACJ
A
MODEL UML 2.0
XMI
PARSER
dane wej sciowe: plik XMI
dla UML 2.0
dane wyjksciowe: mod...
dane wej sciowe:
diagram
eleme...
PREZENT ACJ
A
dane wej sciowe: model UM L
dane wyjsciowe: graf
diagramu UML 1.4
MODEL UML
XMI
PARSER
dane wejsciowe: plik XMI
dla UML 1.4
dane wyjksciowe: mod...
XMI
WRIT ER
dane wejksciowe: model
UML 1.4
dane wyjsciowe: plik X...

Podobne dokumenty