Przed wami zadanie grupowe. Zostaliście podzieleni na #todo osobowe grupy i przed Wami grupowe zadanie. W ramach jednej grupy współdzielicie jedno repozytorium, do którego każdy dostarcza swoją część zadania.
Zadania zostały opisane skrótowo.
Ostatecznie oczekuje się od zespołu, że dostarczy gotowe rozwiązanie, za co punty będą przydzielane ze zbiorową odpowiedzialnością.
Każde zdanie należy wykonywać na swojej gałęzi, chyba że treść zadania głosi inaczej.
Gałąź jest ruchomym wskaźnikiem do Twoich zmian. Jest wykorzystywany w codziennej pracy w dostarczaniu oprogramowania. Gałęzie pozwalają na:
- oddzielenie kodu na różnej fazie dostarczania
- umożliwia pracę nad różnymi funkcjonalnościami bez ryzyka kolizji
- ułatwia testowanie i wdrażanie
- pracę programistów nad jednym kodem źródłowym w ramach różnych zadań
- śledzenie zmian
- cofanie zmian
- utrzymanie historii zmian
- i wiele wiele więcej.
Zwykle pewne gałęzie dedykowane są specyficznym zadaniom. Zależnie od polityki organizacji gałąź główna main (wcześniej master) zwykle jest dedykowana najnowszej wersji oprogramowania lub jej najbardziej stabilnej wersji. Gałąź production może być gałęzią z kodem produkcyjnym (dedykowana użytkownikowi końcowemu). Gałąż staging / stag może być gałęzią pretendującą w najbliższym czasie (releasie) produkcją. Gałąź testing może służyć testom. Często też wprowadza się numerację lub specjalne oznaczenia. Gałęzie PIO_1234_figures / io_1234 / 1234 mogą oznaczać zadanie o 1234 z Projektu Inżynieria Oprogramowania. Konwencja zależy od organizacji lub od zespołu. Często także od API różnych systemów do zarządzani projektem np. Jira, która udostępnia możliwość automatycznego przypisywania gałęzi do zadań.
Istnieje wiele różnych konwentów nazewnictwa gałęzi, w tym także od imienia programisty: AW_1234 / aw_1234.
Zespół w ramach zajęć na IO wybiera własny sposób nazewnictwa gałęzi.
Każde zadanie ma być zrealizowane na osobnej gałęzi. W ramach zadania można commitować wielokrotnie (min. 2 razy):
git add <pilk>
git commit -m "Treść wiadomości"
Można commitować także z IDE (wedle uznania).
Aby wypchnąć zmiany na repo zdalne pierwszy raz z danej gałęzi, należy wskazać gałąź zdalną.
git push --set-upstream origin <nazwa gałęzi>
Nazwa gałęzi lokalnej i zdalnej może być (a nawet zwykle jest) taka sama.
Zdarza się, że przypisujemy gałąź lokalną do gałęzi zdalnej pod inną nazwą najczęściej,
gdy chcemy poprawić nazwę gałęzi.
origin
oznacza w tym przypadku oryginalne repo zdalne.
Zdarza się, że posiadamy wiele repozytoriów zdalnych tego samego projektu (rozwinięcie na zajęciach).
--set-upstream
to ustawienie strumienia danych.
Kolejne zmiany w ramach istniejącej już gałęzi można wypychać już za pomocą komendy git push
.
Punkty częściowo są przydzielane wspólnie, częściowo indywidualnie. Zadanie 1 jest przeznaczone dla osoby prognącej zaangażować się bardziej w stronę pisania dokumentacji, mniej programowania. Zadania mają tendencję bycia trudniejszymi wraz ze wzrostem numeracji. Zadanie ostatnie jest z dodatkowym punktem za trudność zarówno dla testera, jak i programisty. Programista musi samodzielnie wymyślić sposób rozwiązania zadania. Typy, miejsca po przecinku itd. Następnie opisać to w ramach komentarzy w kodzie, aby było to weryfikowalne ze strony testera. Tester musi ująć założenia programisty w testach. Za wykonanie trudnych zadań będzie można uzyskać więcej pkt.
Na Moodle link do repo wraz z listą osób w zespole wrzuca jedna osoba zgodnie z opisem zadania. Pozostałym osobą punkty zostaną naliczone przez prowadzącego (nie muszą nic robić).
Jeżeli w grupie znajduje się osoba z IOS, należy to zgłosić prowadzącej.
Za wykonanie zadania na zajęciach: max punktowy.
Później, ale przed świętami (tj. 27.03 włącznie): -1 dla każdego.
Później, ale przed zajęciami w 1. tygodniu kwietnia: -2 pkt dla każdego.
Później: 0 pkt.
Za wykonanie zdania do dnia następnego spotkania w ramach IO (włącznie): max punktowy.
Załóż puste prywatne repozytorium na Github. Dodaj wszystkich użytkowników ze swojego zespołu do edycji repo (stworzone repo --> Settings --> Collabolators) oraz prowadzącego zajęcia AW.
Skolonuj stworzone na potrzeby zadania repo: git clone <link do repo>
.
Stwórz dla siebie gałąź zgodnie z konwencją wybraną przez zespół git checkout -b <nazwa brancha>
.
W katalogu głównym repo stwórz plik README.md
.
Za pomocą MarkDown (Przykładowy MD CheetSheat)
zbuduj plik zawierający spis członków zespołu oraz ustalenia dot. nazewnictwa gałęzi.
Dodatkowo opisz, co zawiera repo.
Informacja ta ma w pierwszej kolejności powiedzieć, czego dotyczy sam projekt.
Na samym końcu skonstruuj tabelę, w której wypisz 10 powszechnie znanych książek.
Tabela powinna zawierać kolumny tytuł i autor.
Pomieszaj autorów w stosunku do książek.
Wykorzystaj przynajmniej kilka formatowań za pomocą MarkDown.
Zostaw kilka literówek w tekście, ale nie w członkach zespołów :)
W katalogu głównym repo stwórz katalog area
, następnie w katalogu area
stwórz plik
area_calc.py
.
W pliku zaprogramuj cztery funkcje def
liczące pole powierzchni wybranych przez siebie figur.
Przykład:
# komentarz
def zwracam_zero_niezaleznie_co_przyjme(cokolwiek):
return 0
W jednej z funkcji popełnij błąd w obliczeniach :)
W katalogu głównym repo stwórz katalog circum
, następnie w katalogu circum
stwórz plik
circum_calc.py
.
W pliku zaprogramuj cztery funkcje def
liczące obwód wybranych przez siebie figur.
Przykład:
# komentarz
def zwracam_zero_niezaleznie_co_przyjme(cokolwiek):
return 0
W jednej z funkcji popełnij błąd w obliczeniach :)
W katalogu głównym repo stwórz katalog volume
, następnie w katalogu volume
stwórz plik
volume_calc.py
.
W pliku zaprogramuj trzy funkcje def
liczące objętość wybranych przez siebie brył.
Przykład:
# komentarz
def zwracam_zero_niezaleznie_co_przyjme(cokolwiek):
return 0
W jednej z funkcji popełnij błąd w obliczeniach :)
W katalogu głównym repo stwórz katalog math
, następnie w katalogu math
stwórz plik
math_calc.py
.
W pliku zaprogramuj cztery funkcje def
z listy poniżej wybierz, co mają robić:
- dzielenie
a
przezb
z zaokrągleniem do drugiego miejsca po przecinku - zwracanie reszty z dzielenia
a
przezb
- potęgowanie
- przeliczanie ułamków godziny na minuty: 1h --> 60 min; 1,5h --> 90 min; 1/4h --> 15 min
- przeliczanie cali na cm lub odwrotnie
- przeliczanie km na mile lub odwrotnie
- przeliczanie ile samochód pali na 100km na ile mil wystarczy galon i odwrotnie
Przykład:
# komentarz
def zwracam_zero_niezaleznie_co_przyjme(cokolwiek):
return 0
W jednej z funkcji popełnij błąd w obliczeniach :)
Każde zadanie, poza 1., wymaga sprawdzenia przez inną osobę niż ta, która je wykonywała. W ramach zespołu wymieńcie się zadaniami, ale w taki sposób, aby nie wystąpiła para, która sprawdza zadania sobie nawzajem. Sprawdzenia dokonujemy na gałęzi zadania.
Aby zmienić gałąź można wykorzystać polecenie:
git checkout <nazwa_brancha>
Dla zadania piśmiennego należy sprawdzić literówki oraz treść tabeli.
Dla zadania programistycznego należy:
- utworzyć w danym katalogu pliku
tests.py
- w pliku
tests.py
importować sprawdzane funkcje - napisać testy sprawdzające działanie funkcji
assert zwracam_zero_niezaleznie_co_przyjme(7)==0
- za pomocą testów znaleźć niedziałającą funkcję i ją poprawić.
Poprawki wypchnąć.
Zadaniem zespołu jest doprowadzenie do połączenia zadań na gałęzi main
.
Każde zadanie, które przeszło przez testowanie można uznać za gotowe do złączenia.
Łączenia dokonuje osoba odpowiedzialna za zadnie (nie tester).
Poniżej przedstawiono kroki mające doprowadzić do pożądanego efektu bez kolizji. Istnieje wiele strategi mergowania i kolejne poznamy na następnych zajęciach. Użytkownik może wykorzystać dowolną znaną mu metodę.
Pobranie najnowszego main
git checkout main
git pull
Pobranie najnowszej gałęzi z zadaniem
git checkout <branch_z_zadaniem>
git pull
Złączenie main
do gałęzi zadaniowej
git merge main
Wypchnięcie zmiany
git push
Złączenie gałęzi zadaniowej do main
git checkout main
git merge <branch_z_zadaniem>
Wypchnięcie main
ze zmianami z <branch_z_zadaniem>
git push