16 lipca 2007

Moje pomysły na udoskonalenie narzędzi CASE

Większość programistów pracuje wykorzysując te narzędzia, inni ich nie używają z różnych przyczyn, ale wiedzą o co chodzi. Tym, którzy nie wiedzą podaję krótką i strawną definicję, żeby wiedzieli o czym jest ten artykuł i ewentualnie przestali go czytać :-)

Narzędzia CASE (czyli Computer Aided Software Engineering lub Computer Aided System Engineering) to systemy komputerowe, przeznaczone do wspomagania rutynowych czynności procesu tworzenia oprogramowania. Dzięki nim projekty tworzy się dokładniej, a praca nad diagramami, sprawdzanie ich poprawności oraz śledzenie wykonanych testów jest prostsze i szybsze.

Prolog
Wiele CASE'ów, szczególnie tych darmowych, ma słabą funkcjonalność. Inne – zazwyczaj te komercyjne – zbyt dużą jak na przeciętnego programistę. Niektóre systemy ograniczają się do tworzenia diagramów UML, modelowania baz danych, czy też prostego generowania szablonu kodu i schematycznych dokumentacji. Reverse engineering jest rzadkością, chociaż np. StarUML sobie z tym radzi. W innych „systemach” widzimy przerost formy nad treścią, chociażby taki Visio, który z założenia miał być dla nas czymś w rodzaju CASE (chociaż de facto nim nie jest). Czy można stworzyć idealne rozwiązanie dla wszystkich? Teoretycznie nie, ale czemu nie spróbować?

Prawdziwa modułowość
Sporą popularnością wśród młodych informatyków cieszą się programy, które można dostosowywać do swoich potrzeb. Dla informatycznych laików jest to spory minus, gdyż często liczba opcji takiego programu przekracza możliwości opanowania przez takiego śmiertelnika. Jednak dla zapaleńca, który chce dopieścić program do granic, jest to rozwiązanie idealne. Bardzo dobrym przykładem takiego podejścia jest komunikator internetowy Miranda. Samo jądro Mirandy w głównej mierze służy do obsługi plug-inów oraz zapewnia podstawowe metody do obsługi komunikatora, z których korzystają developerzy piszący wtyczki. Dzięki temu użytkownik ma do wyboru kilkaset wtyczek, które wzbogacają komunikator o konkretne funkcje. Z takiego rozwiązania korzysta się coraz częściej, lecz zazwyczaj w ograniczonym stopniu. Wtyczki do zwykłych programów poprawiają jego funkcjonalność w niewielkim stopniu. W tym przypadku każda funkcja jest oddzielnym plug-inem. Oddzielnie mamy okienko rozmowy, oddzielnie listę kontaktów, oddzielnie historię. Każda z tych wtyczek ma zazwyczaj sporo opcji do samodzielnego ustawienia i dostosowania. Na podobnej zasadzie działa odtwarzacz muzyczny Foobar. I chociaż wtyczki do niego są nieco bardziej ograniczone, to możliwość własnej konfiguracji jest ogromna.

Dlaczego by nie zastosować podobnego rozwiązania w przypadku systemów CASE? Przecież nie każdy programista musi korzystać ze wszelkich modułów standardowego CASE'a. Poza tym podczas tworzenia pewnego projektu, różne osoby mają różne zadania do wykonania. Po co im więc ten sam zestaw funkcji w CASE'ie? Można taki system rozbić na duże, niezależne moduły, które obsługują jedną poważną funkcjonalność, a do każdego z tych modułów moglibyśmy dodawać pomniejsze udogodnienia. Przykładowo – jeden z najważniejszych (w tym wypadku) modułów to Moduł Importu/Eksportu. Jest szczególnie ważny, gdyż dzięki niemu możliwa jest wymiana danych między różnymi programami, a nawet między osobami pracującymi na naszym idealnym CASE'ie, tylko różnie skonfigurowanym. Do tego modułu możemy dodawać obsługę kolejnych formatów przesyłania danych, a także różną obsługę wymiany danych (np. za pomocą ustalonego protokołu sieciowego). Inny przykład – tworzenie diagramów w różnych standardach. Jeśli osoba A potrzebuje do pracy tylko pewnego niewielkiego zestawu diagramów – po co mu cała reszta? Skoro jest od wielu lat tendencja do jak najwęższej specjalizacji, to wielkie kombajny „do wszystkiego” są zbędne. W dodatku zajmują niebagatelną ilość zasobów systemu.

Cechy i funkcje idealne
Dla mnie, jako studenta informatyki, ważną cechą dotyczącą jakiegokolwiek programu jest jego darmowość i otwartość. Otwartość jest szczególnie ważna przy założeniu, że każdy bardziej zaawansowany programista mógłby do takiego CASE'a napisać swój własny moduł czy plug-in.

Z otwartością wiąże się także wieloplatformowość takiego programu. Chciałbym mieć możliwość pracy na nim zarówno pod Windowsem, jak i Linuksem (a może nawet MacOS'em?).

Intuicyjność obsługi jest również ważna. Poprawia z pewnością ergonomię, a zatem także szybkość pracy. Wszelkie menu, klawiszologia i inne paski narzędziowe powinny być w 100% konfigurowalne przez użytkownika.

Wielostandardowość. Jest to ważne, gdyż różni ludzie mają różne przyzwyczajenia i własne oznaczenia w diagramach. Każdy użytkownik naszego CASE'a powinien mieć możliwość dostosowania standardów do siebie, a jednocześnie powinien mieć możliwość konwersji tych diagramów do postaci wygodnej dla współpracowników. Taka konwersja powinna przebiegać automatycznie podczas wymiany danych z innymi pracownikami przy danym projekcie.

Dla nowych użytkowników CASE'a przydałby się rozbudowany i „inteligentny” help. Z jednej strony coś na kształt podręcznika użytkownika (jeśli ktoś lubi tego typu publikacje), a z drugiej strony – podpowiedzi w czasie rzeczywistym. Oczywiście w pełni konfigurowalne i zaimplementowane jako osobny plug-in do danego modułu. Zaawansowany użytkownik może go więc wyłączyć i nie obciążać niepotrzebnie zasobów systemu.

Generator kodu i środowisko programistyczne. Wiele środowisk programistycznych (np. Eclipse) ma możliwość rozbudowy o elementy obsługi UMLa czy też innych składników standardowego CASE'a. Można więc zrobić odwrotnie. Jednym z modułów naszego CASE'a byłoby właśnie środowisko programistyczne (IDE) dla konkretnego języka programowania. Wtedy generator kodu byłby dopasowany idealnie do tego środowiska, a co za tym idzie – uniknęlibyśmy dziwnej nadmiarowości kodu i problemów związanych z brakiem konkretnych nagłówków czy innych wymaganych deklaracji w programie.

Epilog
Są różni programiści, z różnymi pomysłami i przyzwyczajeniami. Obecne narzędzia CASE w pewnym stopniu narzucają nam własny sposób obsługi. Bardzo często wpływa to negatywnie na nastawienie pracownika, a co za tym idzie – na jakość i szybkość jego pracy. Tworząc CASE'a zgodnego z powyższymi pomysłami, mamy możliwość przynajmniej częściowego wyeliminowania tego problemu.

Brak komentarzy: