Jarosław Kuchta Projektowanie Aplikacji Internetowych Wprowadzenie
Zagadnienia Rola projektowania w procesie wytwarzania aplikacji internetowych (podejście klasyczne, podejście zwinne) Modele analityczne a modele projektowe Projektowanie wielowarstwowe podział kompetencji deweloperów Współczesne podejścia do projektowania aplikacji: RAD, modelowanie w IDE, frameworki i wzorce projektowe Szczególne problemy w aplikacjach internetowych: przenośność, wydajność, skalowalność, ochrona, bezpieczeństwo, użyteczność i globalizacja Projektowanie Aplikacji Internetowych Wprowadzenie 2
Miejsce projektowania w klasycznym procesie wytwarzania aplikacji Analiza dziedziny problemu Analiza statyczna Analiza funkcjonalna Analiza dynamiczna Modele Analiza behawioralna SWS Projektowanie systemowe Projektowanie szczegółowe Projektowanie architektury systemu Projektowanie logiki aplikacji Projekty Projektowanie interfejsu użytkownika Projektowanie struktury danych Implementacja Utworzenie struktury kodu Implementacja logiki aplikacji Implementacja interfejsu użytkownika Implementacja struktury danych Projektowanie Aplikacji Internetowych Wprowadzenie 3
Analiza projektowanie implementacja (podejście klasyczne) Cel Analiza Projektowanie Implementacja Zrozumienie oczekiwań klienta przez zespół projektowy Opracowanie koncepcji rozwiązania Realizacja opracowanej koncepcji Pytania Co? Po co? Co? Jak? Jak? Źródła Specyfikacja wymagań, publikacje dziedzinowe, dokumentacja od klienta Specyfikacja wymagań, modele analityczne, wzorce projektowe, dokumentacja z innych projektów dokumentacja projektowa, specyfikacja wymagań, dokumentacja frameworków Środki Rozmowy z klientem, modelowanie w UML Analiza wymagań, opracowywanie projektów Analiza projektów, kodowanie, uruchamianie, debugowanie Efekt Specyfikacja wymagań, model przypadków użycia, model klas, Projekt architektury systemu, projekt logiki aplikacji, projekt interfejsu użytkownika projekt struktury danych Oprogramowanie wdrożone, kod źródłowy, dokumentacja kodu Projektowanie Aplikacji Internetowych Wprowadzenie 4
Aspekty analityczne i projektowe Analityczne Projektowe Projekt architektury systemu Projekt logiki aplikacji Projekt interfejsu użytkownika Projekt struktury danych Statyczny Komponenty systemowe Klasy, właściwości Schemat interfejsu, formularze Schemat bazy danych, tabele Funkcjonalny Funkcjonalności, uprawnienia Interfejsy, interakcje Menu, komendy, nawigacja Kwerendy, procedury wbudowane Behawioralny Zdarzenia, stany Zdarzenia, akcje, aktywności Obsługa zdarzeń, obsługa błędów Walidacja danych, kopie zapasowe Dynamiczny Wydajność, dostępność Przetwarzanie asynchroniczne Responsywność, logika u klienta Synchronizacja, migracje b.d. Projektowanie Aplikacji Internetowych Wprowadzenie 5
Rozróżnienie pojęć Aspekt wyodrębniony zbiór cech systemu, które są rozważane przy pominięciu innych jego cech Model opis rzeczywiście istniejącego lub projektowanego systemu pokazujący jego wybrany aspekt Diagram graficzne przedstawienie modelu w postaci rysunku, którego elementy mają określone znaczenie Elementy diagramu mają odwzorowanie w elementy modelu. Diagram to nie model: Nie wszystkie elementy modelu są przedstawiane na diagramie. Mogą być inne przedstawienia modelu (np. CRC dla modelu klas). Jeden model może być przedstawiony na kilku diagramach. Elementy modelu mają odwzorowanie w elementy systemu. Model to nie system: Model opisuje system tylko w wybranym aspekcie. Nie wszystkie elementy systemu są modelowane. Gdyby model opisywał w pełni wszystkie elementy systemu, to byłby równoważny systemowi. Projektowanie Aplikacji Internetowych Wprowadzenie 6
Modele a diagramy Model Diagram Aspekt Analiza Projektowanie Model przypadków użycia Diagram przypadków użycia, diagram klas Funkcjonalny Modelowanie możliwości systemu Modelowanie możliwości (uprawnień) użytkowników Model obiektowy Diagram klas, diagram obiektów Statyczny Modelowanie pojęć biznesowych i ich relacji Modelowanie struktury obiektowej kodu Model interakcji Diagram interakcji, diagram aktywności, diagram komunikacji (kolaboracji) Funkcjonalny Modelowanie współdziałania systemu z otoczeniem Modelowanie współdziałania komponentów systemowych Model stanów Diagram przejść stanów Behawioralny Modelowanie reakcji systemu na zdarzenia Modelowanie reakcji komponentów systemowych Model czasowy Diagram sekwencji diagram timingu Dynamiczny Modelowanie scenariuszy zdarzeń Modelowanie zależności czasowych zdarzeń i procesów Model architektury systemu Diagram komponentów, diagram wdrożenia Statyczny nie stosowany Modelowanie struktury sprzętowej i programowej systemu Model struktury kodu Diagram pakietów, diagram obiektów Statyczny nie stosowany Modelowanie struktury fizycznej kodu Model struktury danych Diagram ERD, diagram klas Statyczny nie stosowany Modelowanie schematu bazy danych Model nawigacji Diagram WND, storyboard Funkcjonalny nie stosowany Modelowanie przejść między komponentami interfejsu Projektowanie Aplikacji Internetowych Wprowadzenie 7
Projektowanie aplikacji za i przeciw Za Szybsze zrozumienie potrzeb klienta Szybsze wykrycie potencjalnych problemów technicznych Możliwość wyboru optymalnego rozwiązania Możliwość zrozumienia złożonej struktury aplikacji Oszczędność na modyfikacji kodu Ułatwienie późniejszej pielęgnacji i rozwoju Przeciw Trudność w zastosowaniu przy niedookreślonych wymaganiach Późniejsze dostarczenie działającej aplikacji do klienta Zagrożenie nierealnością projektu (oderwanie od możliwości implementacji) Koszty opracowania dokumentacji projektowej Późniejszy zwrot kosztów opracowania Projektowanie Aplikacji Internetowych Wprowadzenie 8
Współczesne podejścia do projektowania aplikacji (1) RAD Rapid Application Development wytwarzanie bez wcześniejszego projektowania design = development zaleta efektywność wada uzależnienie od IDE (Integrated Development Environment) brak przenośności projektu Modelowanie w IDE Wykorzystanie narzędzi modelowania dołączonych do IDE ograniczone możliwości modelowania zalety: łatwość przełożenia projektu na kod, łatwość utworzenia projektu z działającego kodu wada - uzależnienie od IDE brak przenośności projektu Projektowanie Aplikacji Internetowych Wprowadzenie 9
Współczesne podejścia do projektowania aplikacji (2) Wykorzystanie wzorców projektowych wzorzec projektowy sprawdzone rozwiązanie projektowe samodzielna implementacja zaleta uniwersalność zastosowania wada: duży narzut na kodowanie Wykorzystanie frameworków framework zaimplementowany wzorzec projektowy + recepta na sprawdzone rozwiązanie implementacyjne zaleta duży wybór, efektywność w typowych zastosowaniach zagrożenia: niekompatybilność różnych frameworków, brak dostatecznej wiedzy, niedojrzałość rozwiązań wady: brak elastyczności zastosowania, zagrożenie niedotrzymania harmonogramu Wnioski: Stosowanie frameworków jest efektywne, ale i bardzo ryzykowne. Warto wykorzystywać wzorce projektowe, gdy frameworki nie są wystarczające. Projektowanie Aplikacji Internetowych Wprowadzenie 10
Projektowanie w metodykach zwinnych? Extreme programming, SCRUM planowanie iteracji (a nie projektowanie) Test Driven Development projektowanie testów Feature Driven Development projektowanie funkcjonalności Projektowanie Aplikacji Internetowych Wprowadzenie 11
Prototyp projekt SCRUM W większych projektach informatycznych: Idea Prototyp Projekt Product Backlog Sprint Backlog SPRINT Działający soft Rewizja Projektowanie Aplikacji Internetowych Wprowadzenie 12
Design Thinking Wniosek: Projektowanie towarzyszy wytwarzaniu nawet jeśli nie jest uwidocznione jawnie z: Jumpstarting Scrum with Design Thinking Christophe Vetterli et. al. http://www.researchgate.net/publication/255710860 Projektowanie Aplikacji Internetowych Wprowadzenie 13
Projektowanie wielowarstwowe podział kompetencji deweloperów Projekt interfejsu użytkownika HTML5 CSS3 JavaScript Front-end developer C# PHP Java Szanse: Zrównoleglenie pracy Podział kompetencji Wykorzystanie kompetencji Projekt architektury systemu Projekt logiki aplikacji Projekt struktury danych Programista SQL proxy MVC Back-end developer Zagrożenia: Brak koordynacji Nieporozumienia Niespójność projektu Projektowanie Aplikacji Internetowych Wprowadzenie 14
Szczególne problemy projektowania aplikacji internetowych W specyfikacji wymagań trzeba dookreślić: Wymagania co do architektury systemu (mogą wynikać z organizacji przedsiębiorstwa) Wymagania co do przenośności Wymagania co do wydajności (trudne do określenia oszacować) i skalowalności Wymagania co do ochrony i bezpieczeństwa uświadomić klientowi Wymagania co do dostępności i globalizacji (np. języki interfejsu użytkownika) Projektowanie Aplikacji Internetowych Wprowadzenie 15
Problemy przenośności Użytkownicy mogą dysponować rozmaitym sprzętem, również starszym (mniej wydajnym). jakie będą minimalne wymagania sprzętowe? Klienci mogą działać w różnych systemach operacyjnych. na jakich systemach ma działać aplikacja? Część aplikacji może być przeznaczona dla urządzeń mobilnych (responsywność dopasowanie interfejsu do możliwości urządzenia). jak zapewnić responsywność aplikacji? Projektowanie Aplikacji Internetowych Wprowadzenie 16
Problemy wydajności Dane muszą być przekazywane na odległość przez łącza o różnej przepustowości jak zminimalizować ilość przesyłanych danych? Serwer musi obsłużyć często wielu klientów. czy i jak podzielić przetwarzanie między serwer a klientów? czy i jak podzielić funkcjonalność na wiele serwerów? Serwer musi zapewnić szybką reakcję na żądania użytkowników. czy i jak przechowywać wyniki obliczeń dla powtórnego użycia? czy i jak podzielić funkcjonalność na wiele serwerów? Projektowanie Aplikacji Internetowych Wprowadzenie 17
Problemy skalowalności Trudno jest przewidzieć rzeczywiste obciążenie serwera. jak podzielić funkcjonalność na wiele serwerów? jak umożliwić dołączanie serwerów w miarę potrzeby? jak zabezpieczyć się przez przeciążeniem? Ilość przechowywanych danych może być ogromna. jaki silnik bazy danych użyć? jak umożliwić zwiększenie pojemności serwera danych? czy zastosować rozproszenie bazy danych? Projektowanie Aplikacji Internetowych Wprowadzenie 18
Problemy ochrony Serwer internetowy jest widoczny z zewnątrz. w jaki sposób zapewnić uwierzytelnienie użytkowników? jakie role użytkowników zaplanować i jakie im przydzielić uprawnienia? czy ograniczyć dostęp z zewnątrz do serwera? Dane klientów z reguły są poufne. jak chronić dane osobowe? do jakich danych ma mieć dostęp administrator? jak uniemożliwić dostęp użytkowników do nieswoich danych? czy i jak zapewnić bezpieczną komunikację? Serwer internetowy może stać się obiektem ataku hakerów. jak zabezpieczyć się przed skanowaniem portów serwera? jak zabezpieczyć się przed włamaniem? jak ograniczyć potencjalne możliwości ataku? Projektowanie Aplikacji Internetowych Wprowadzenie 19
Problemy bezpieczeństwa Serwery mogą ulec awarii. czy zapewnić serwery zapasowe? Dane klientów mogą ulec zniszczeniu. jak i kiedy robić kopie zapasowe? gdzie przechowywać kopie zapasowe? komu dać uprawnienia do odzyskiwania danych? Łącza internetowe mogą ulec awarii lub okazać się niewystarczające. czy i jak zapewnić zapasowe łącza internetowe? Projektowanie Aplikacji Internetowych Wprowadzenie 20
Problemy dostępności i globalizacji Serwis internetowy może mieć użytkowników o różnych możliwościach i preferencjach. dla jakiej grupy użytkowników jest przeznaczony ten serwis? jak zapewnić czytelność i zrozumiałość treści dla grupy docelowej użytkowników? jak zapewnić czytelność dla użytkowników nierozróżniających kolorów? czy konieczne jest zapewnienie wersji dla niedowidzących? Serwis internetowy może być dostępny z całego świata. czy konieczna jest dostępność 7/24? kiedy i jak robić konserwację serwera? Serwis internetowy może być dostępny dla ludzi z różnych kultur. jakie wersje językowe zaimplementować? jakie standardy wymiany danych zapewnić? czy i jak dopasowywać się do różnej wrażliwości kulturowej? Projektowanie Aplikacji Internetowych Wprowadzenie 21
Literatura Pressman R.S.: Software Engineering, A Practitioner s Approach. 7th Ed., McGraw-Hill, USA, 2010 Booch G., Rumbaugh J., Jacobson I.: UML. Przewodnik użytkownika. WNT, Warszawa, 2006 Projektowanie Aplikacji Internetowych Wprowadzenie 22