Specyfikacja Platformy Developerskiej

by AdminSept 8th, 2017

Przedmiotem zrealizowanych prac badawczo-rozwojowych było opracowanie specyfikacji funkcjonalnej platformy developerskiej wraz z repozytoriami, wspomagającej budowę systemów informatycznych opartych na zastosowaniu technologii Java przy wykorzystaniu zwinnych metodyk wytwarzania oprogramowania.

Przygotowanie specyfikacji funkcjonalnej platformy zostało poprzedzone:

  • określeniem wykonalności funkcjonalnej i technologicznej koncepcji polegającej na opracowaniu rozwiązania informatycznego wspierającego proces zarządzania wytwarzaniem oprogramowania z wykorzystaniem metodyk zwinnych w rozumieniu Manifestu Programowania Zwinnego w połączeniu z usprawnieniem komunikacji pomiędzy zamawiającym i wykonawcą w warunkach pracy rozproszonych geograficznie zespołów roboczych
  • określeniem zbioru wymagań dla platformy developerskiej, pozwalających na implementację zwinnych metodyk wytwarzania oprogramowania w ramach wdrożonego środowiska programistycznego oraz na optymalizację procesu wytwarzania oprogramowania, w tym w ramach komunikacji pomiędzy poszczególnymi stronami zaangażowanymi w ten proces
  • określeniem zakresu komponentów programistycznych, które powinny zostać udostępnione w zintegrowanej platformie developerskiej, przy uwzględnieniu głównego obszaru jej zastosowania, tj. wykorzystania technologii Java do budowy
    wieloplatformowych aplikacji oraz interfejsów do systemów biznesowych ze
    szczególnym uwzględnieniem możliwości uruchamiania systemu na urządzeniach
    mobilnych, a także wytwarzania systemów informatycznych na potrzeby Internet of Things, w tym tzw. systemów wbudowanych (ang. embedded system).

W ramach przygotowań do realizacji zasadniczego zakresu prac badawczych dokonano wstępnych analiz obejmujących:

  1. Przygotowanie szczegółowej analizy założeń zwinnych metodyk zarządzania i związanych z nimi ogólnych uwarunkowań dla procesu wytwarzania oprogramowania przy wykorzystaniu tych metodyk.
  2. Wyznaczenie podstawowych wymagań, koniecznych do uwzględnienia w projekcie platformy developerskiej, wynikających z założeń metodyk zwinnych. Zidentyfikowane wymagania obejmują:
    1. elastyczność w podejściu do wymagań klienta/wymagań strony biznesowej. Zwinne metodyki wytwarzania oprogramowania z góry zakładają, że:
      1. wymagania ulegają zmianie w toku prac nad wytworzeniem oprogramowania
      2. wymagania są sukcesywnie uzupełniane, tzn. na danym etapie prac określany jest jedynie zakres wymagań niezbędny dla realizacji kolejnego zakresu prac (sekwencyjne „wyciąganie wymagań” w opozycji do „wypychania wymagań” w metodykach tradycyjnych). W danym przedziale czasu pozyskiwana jest jedynie niezbędna ilość wymagań, pozwalająca na kontynuację prac nad wytworzeniem oprogramowania
      3. elastyczność wymagań oznacza, że w momencie rozpoczęcia prac nad oprogramowaniem zwykle nie jest możliwa ostateczna wycena całokształtu prac
      4. konieczne jest przy tym takie sterowanie wymaganiami, aby zmaksymalizować szanse sukcesu projektu (tj. powinno dążyć się do unikania zmiany wymagań prowadzących do znacznych kosztów, nie przynoszących wymiernych efektów biznesowych itp.). Zakłada się aktywne zaangażowanie użytkownika w proces wytwarzania oprogramowania, co wiąże się z możliwością wprowadzania zmian (szczególnie w zakresie wymagań), jednak należy uwzględnić w tym procesie cel maksymalizowania wartości biznesowej wynikającej z realizowania projektu. Oznacza to, że wymagania i ich zmiany powinny uwzględniać relację spodziewanych efektów biznesowych do związanych z nimi nakładów.
    2. zwinne metodyki uwzględniają, że klient nie posiada wiedzy w zakresie technologii, pozwalającej mu racjonalnie formułować wszystkie wymagania i potrzebuje wsparcia w tym zakresie
    3. zwinne metodyki zakładają iteracyjne tworzenie oprogramowania. Dążą do bieżącej weryfikacji postępu prac przez klienta poprzez prezentowanie mu kolejnych gotowych funkcjonalności (działających partii kodu). Zgodnie z dostępną literaturą stosowanie iteracji pozwala także na zmniejszenie ryzyka związanego z niezgodnym z oczekiwaniami sposobem działania wykorzystywanych narzędzi oraz przewidywanych do zastosowania zewnętrznych komponentów oprogramowania. Narzędzia i komponenty mogą bowiem zostać przetestowane w ramach początkowych iteracji, a to przyczyni się do wyeliminowania związanych z nimi problemów. W ten sposób, dzięki działaniu w ramach iteracji, większość niepożądanych czynników ryzyka może zostać odpowiednio wcześniej wykrytych i zneutralizowanych.
    4. zwinne metodyki uwzględniają aktywny udział klienta na wszystkich etapach wytwarzania oprogramowania (co jest pochodną wcześniejszych założeń). Istotna jest przy tym empiryczna kontrola procesu, zakładająca, że realizacja projektów odbywa się z zachowaniem przejrzystości, inspekcji postępu prac i możliwości adaptacyjnych. Przejrzystość oznacza możliwość monitorowania oraz czytelność poszczególnych aspektów oraz etapów procesu dla osób odpowiedzialnych za osiągane rezultaty.

Po dokonaniu analiz przystąpiono do realizacji zasadniczego zakresu prac badawczych, które obejmowały:

  1. Opracowanie optymalnego procesu zarządzania projektem wytwarzania aplikacji w oparciu o metodykę zwinną, przy uwzględnieniu wymagań wynikających z zastosowania tej metodyki oraz przy uwzględnieniu, że ma być on realizowany za pośrednictwem systemu informatycznego. Przyjęto przy tym, że proces ma obejmować integrację obszarów definiowania wymagań przez zamawiającego, opracowania prototypu przez programistów, testowania i weryfikacji zgodności prototypu z wymaganiami oraz pracę iteracyjną w celu wypracowania rozwiązania końcowego. Założono, że proces musi obejmować również obszar współdziałania zespołu roboczego w rozproszonym środowisku geograficznym (różne lokalizacje geograficzne członków zespołu roboczego). Proces powinien przy tym obejmować wyłącznie zakres pracy zespołu roboczego bezpośrednio zaangażowanego w określenie wymagań dla oprogramowania oraz wytwarzanie oprogramowania. Docelowe środowisko programistyczne nie ma bowiem dublować funkcjonalności powszechnie dostępnych narzędzi zarządzania projektami. Wypracowany w toku badań optymalny proces zarządzania projektem wytwarzania oprogramowania został ujęty w model możliwy do zaimplementowania w środowisku programistycznym.
  2. Przeprowadzenie analizy zmierzającej do opracowania listy / zestawu niezbędnych (najczęściej wykorzystywanych i/lub najbardziej potrzebnych) komponentów programistycznych, które powinny być udostępnione w zintegrowanej platformie developerskiej. Jako kryteria uwzględnienia danego komponentu w zestawieniu przyjęto:
    1. częste wykorzystywanie danego komponentu przez programistów w ten sam sposób (identyczne procesy biznesowe),
    2. częsty brak wiedzy programistów o specjalistycznym obszarze technologicznym (np. zarządzanie dostępem do baz danych, czy zarządzanie rozproszonym środowiskiem uruchamiania aplikacji).
  3. Dobór gotowych komponentów programistycznych uwzględniał przy tym docelowe przypadki użycia projektowanego środowiska developerskiego. Przeprowadzone analizy wskazały m.in., że jednym z kluczowych obszarów problemowych w procesie wytwarzania oprogramowania w technologii Java jest budowa baz danych. W odpowiedzi na ten problem opracowano założenia dla rozwiązania opartego na mapowaniu obiektowo-relacyjnym, analizującym klasy, typy danych oraz metody i tworzącym automatycznie model bazy danych odwzorowujący rzeczywistość zawartą w kodzie źródłowym.
    1. Wskazanie zestawu niezbędnych modułów dla platformy developerskiej wraz z opracowaniem szczegółowych założeń dla poszczególnych rozwiązań wchodzących w skład modelu zarządzania wytwarzaniem oprogramowania przy wykorzystaniu platformy
    2. Opracowanie specyfikacji wymagań funkcjonalnych dla platformy developerskiej wspierającej wytwarzanie oprogramowania w technologii Java, implementującej optymalny proces zarządzania projektem budowy aplikacji w oparciu o metodykę zwinną, integrującą obszar pracy zamawiającego i wytwórcy oprogramowania (wszystkich członków zespołu roboczego z odpowiednio przypisanymi rolami).
    3. Opracowanie specyfikacji wymagań dla niezbędnych powtarzalnych komponentów programistycznych, które powinny być udostępnione na platformie (zarówno komponentów biznesowych jak i technologicznych)