Państwowa Wyższa Szkoła Zawodowa w Tarnowie Zakład Informatyki Laboratorium 6 Programowanie zespołowe Prowadzący: Kierunek: Semestr: Rok: Informatyka Zimowy 2
Programowanie zespołowe Wymagania wstępne Proszę dobrać się w dwuosobowe zespoły oraz podzielić się obowiązkami (pierwszy programista odpowiedzialny będzie za część serwerową, drugi programista będzie odpowiedzialny za część kliencką). Programiści powinni pracować na oddzielnych maszynach! Pierwszy programista pobiera (lub klonuje) aplikację PdfGenerator Drugi programista pobiera aplikację PdfGeneratorExampleClient Komunikacja pomiędzy klientem a serwerem Programista odpowiedzialny za część serwerową ma za zadanie uruchomić projekt (uruchomienie projektu opartego o spring-boot opisane zostało na poprzednich laboratoriach) oraz powinien dowiedzieć się jaki adres IP posiada jego maszyna. Po uzyskaniu adresu IP pierwszy programista podaje tą informację koledze z zespołu. Drugi programista będzie musiał zmodyfikować kod w aplikacji klienckiej (wystarczy podmienić lokalny adres IP czyli 127.0.0.1 na adres, który poda kolega z zespołu). Wskazówka! Jak odczytać adres IP maszyny? Polecenie w konsoli windows: ipconfig Polecenie w terminali linux: ifconfig Po dokonaniu modyfikacji należy uruchomić serwer. Po pomyślnym uruchomieniu serwera, uruchamiamy aplikację kliencką i obserwujemy logi. Klient testuje dwie usługi serwera. Na początku 1
wysyła żądanie typu POST w celu wygenerowania pliku PDF, a następnie wywoływane jest żądanie typu GET w celu pobrania listy plików. Współdziałanie klienta z serwerem widoczne jest w logach serwerowych oraz na konsoli klienckiej. UWAGA! Aby komunikacja się powiodła obie maszyny muszą być podłączone do tej samej sieci! Projektowanie własnego API Zadanie: Na podstawie wzoru funkcji kwadratowej proszę wyznaczyć miejsca zerowe funkcji. Wzór funkcji kwadratowej powinien być wprowadzany w aplikacji klienckiej, a serwer powinien wyliczać miejsca zerowe na podstawie współczynników a, b, c. Należy obsłużyć przypadki dla sytuacji gdy: Istnieje 1 miejsce zerowe, 2 miejsca zerowe oraz gdy miejsca zerowe nie istnieją. Zespół powinien ustalić: Sposób komunikacji klienta z serwerem, W jaki sposób przekazać parametry do serwera (w linku?, jako JSON?, w parametrach?), Jak będzie wyglądała struktura JSONa zwracanego przez serwer? Wszystkie ustalenia powinny być spisane i każda ze stron powinna rozpocząć implementację własnej części aplikacji (jeden programista implementuje aplikację kliencką, a drugi serwerową na podstawie ustalonych przez siebie założeń projektowych). 2
Rozwiązywanie konfliktów Podczas pracy w zespole mogą wystąpić konflikty. Jeśli wystąpią należy je rozwiązać, a zintegrowane środowisko programistyczne ułatwi nam tą operację. Jeśli zdarzy się, że ten sam fragment kodu, który modyfikujemy lokalnie został już zmieniony i wypchnięty do zdalnego repozytorium przez innego programistę to możemy narazić się na konflikt. Postaramy się zasymulować konflikt... Proszę utworzyć nowy projekt ConflictTest (aplikacja konsolowa). Następnie proszę skopiować poniższy kod i wypchnąć dane do zdalnego repozytorium (należy wcześniej utworzyć nowe repozytorium na platformie Bitbucket). public class Main { private int counter; } public static void main(string[] args) { // write your code here } Następnie zmieniamy typ pola counter na Long w systemie Bitbucket (w menu Source proszę kliknąć na liście plików w Main.java a następnie Edit. Po dokonaniu zmian klikamy Commit. W kolejnym kroku należy przełączyć się na zintegrowanie środowisko programistyczne IntelliJ IDEA. Zmieniamy typ pola counter na Integer. Proszę wykonać commit do lokalnego repozytorium. Proszę pobrać zmiany z zdalnego repozytorium w celu symulacji konfliktu. Z menu nawigacyjnego wybieramy VCS Git Pull... Zostaniemy poinformowani o wystąpieniu konfliktu... 3
Wybieramy plik, w którym występują konflikty i klikamy Merge... Lewa kolumna przedstawia lokalne zmiany, prawa kolumna przedstawia zmiany z zdalnego repozytorium. Programista decyduje, które zmiany przyjąć (klikając» lub «) lub odrzucić (klikając x). Środkowa kolumna jest rezultatem decyzji programisty. Po skończonych działaniach klikamy Apply. Jeśli rozwiązywanie konfliktów dobiegło końca to wykonujemy pusha do zdalnego repozytorium. 4