Repo for bachelor SOI-tool
Forutsetninger
Python 3.7
Pip 20.0
- Windows 10 eller Ubuntu 18.04. Merk at flesteparten av gruppen arbeider på Windows 10
Oppsett med virtual environment
# initialiser virtual environment
python -m venv venv
# aktiver virtual environment (Windows)
./venv/Scripts/activate
# aktiver virtual environment (Ubuntu, ikke testet)
./venv/bin/activate
# sikre at venv har riktige versjoner av kritiske innebygde pakker
# (kanskje unødvendig)
# dette blir gjort fordi default gir pip-18, som gir errormeldinger.
# Se https://bugs.python.org/issue30628
python -m pip install pip=='20.0' setuptools=='45.2' wheel=='0.34'
# installer pakker
pip install -r requirements.txt
# ...jobb med koden...
# for å deaktivere virtual environment
deactivate
Linting
Sjekk av kodekvalitet gjøres med scriptet "CodeQualityCheck" i script-mappa, og er skrevet i Powershell(.ps1) og Bash(.sh). Scriptet kjører Pylint og Flake8 med tilhørende konfigurasjonsfiler, Pydocstyle med numpy-konvensjon og Bandit på Python-filer.
Scriptet godtar kommandolinjeargumenter: .py-fil(er), mappe(r) eller en blanding av disse. Uten argumenter vil scriptet sjekke alle .py-filer.
Terminal kjøres fra root. Sjekk:
-
Alle .py-filer:
.\scripts\CodeQualityCheck.ps1
eller./scripts/CodeQualityCheck.sh
-
Spesifikk(e) .py:
.\scripts\CodeQualityCheck.ps1 filEn.py filTo.py
-
Alle .py i mappe(r):
.\scripts\CodeQualityCheck.ps1 mappeEn mappeTo
-
Blanding:
.\scripts\CodeQualityCheck.ps1 mappeEn mappeTo\fil.py
Testing
Tester er skrevet med unittest
modulen, og ligger i mappen test
.
- For å kjøre alle tester:
python -m unittest
- For å kjøre en enkelt test modul (fil i
test
mappen):python -m unittest test.<navnet_til_modulen>
- For å kjøre en enkelt test metode (fil i
test
mappen):python -m unittest test.<navnet_til_modulen>.<navnet til klassen>.<navnet til metoden>
Generering av kodedokumentasjon
Gjøres med pdoc3:
-
pdoc3 --html --output-dir .\docs .\soitool\main.py
-
Uten kildekode:
pdoc3 --html --config show_source_code=False --output-dir .\docs\ .\soitool\main.py
Autogenerert docs: http://bachelor-paa-bittet.pages.stud.idi.ntnu.no/soitool/
Dockerfile
Om Docker image som brukes i .gitlab-ci.yml
er bygget med filen Dockerfile
og er lastet opp som morkolai/soitool-ci
. Docker image inneholder alle avhengigheter til prosjektet. Følgende prosedyre brukes for å oppdatere image. Dette må gjøres når requirements.txt
endrer seg.
docker build -t morkolai/soitool-ci .
docker login
docker push morkolai/soitool-ci
Arbeidsmetode
git
Bruk av Arbeid skal ikke skje direkte på master
branch. For hver oppgave en vil utføre skal en ny branch lages, og denne må senere merges inn ved hjelp av en "Merge Request". Gjennomgang av dette er lagt fram under:
# ny branch
git branch <branch navn>
# hoppe til eksisterende branch
git checkout <branch navn>
# ..jobb med koden..
git add <...>
git commit -m "..."
# push til gitlab
git push origin <branch navn>
Merging til master skal skje via Merge Requests i GitLab.
Om arbeid utføres på feil branch
git stash
kan brukes for å lagre endringer i et "stash". Deretter kan en hoppe til riktig branch med git checkout <branch navn>
, og kjøre git stash pop
.
Ved feil commit melding
Om det er siste commit som er problemet, og den ikke har blitt pushet opp, kan en gjøre følgende for å endre commit-melding
git commit --amend
Om en vil endre tidligere commits eller endringen har blitt pushet opp: rop om hjelp!
"When in danger or in doubt, rUn in circles, scream and shout"
Hvordan skrive tester
Hver modul burde testes. I praksis vil dette si at hver fil under soitool/
med navn X.py
burde ha en tilsvarende fil under test/
med navn test_X.py
.
Ved GUI-testing av modulære dialoger (dialoger som stopper eksekvering av hovedvindu) foretrekkes fremgangsmåten som demonstreres i test\test_main.py
, hvor testfunksjoner kjøres med singleShot
. Antall millisekunder testen skal vente før testfunksjoner kjøres kan stilles inn for tregere maskiner.
TODO hvordan skrive GUI tester.