====== Software Engineering Guidelines ======
==== Unit Tests ====
In case of a handover, unit tests should be run at least(!) twice a day:\\
(1) when you start your day to check that nothing is broken and you can continue with your tasks\\
(2) with a buffer before you end your day, to ensure that your changes did not break anything\\
Separate API tests for ordinary unit tests because API tests require a running container. The idea is to use pytest ./tests fully automated and the other tests 'staged' to ensure the container is running.
==== Skeletons ====
Whenever you copy & paste code / files from other (git) projects check that the headers and doc strings are correct and also check for unused imports.
==== Repositories ====
Always provide a
.dockerignore
and a
.gitignore
file to avoid that either unused data is sent to the docker daemon and/or that unwanted files in the repo are marked as untracked.
And always provide a requirements.txt
==== Scripts ====
Should use argparse to avoid magic constants and fixed paths. Furthermore, there should be at least one summary print statement what happened and likely where.
==== FastAPI ====
Each endpoint should minimal logging to summarize the results. Additionally a timing information is likely useful for debugging, but also to evaluate the performance of expensive calls.
==== Classes ====
Instantiated objects that live for a long time, like the ones in app_startup for FastAPI, should have a log message in //init// to summarize the state. And log messages in member functions allow easier debugging.
==== Code ====
Use TODO / {{/dokuwiki/lib/images/smileys/fixme.gif|FIXME}} / XXX to indicate code that needs to be changed. TODO has a lower priority. Those 'flags' are marked by most IDEs / Editors.
==== Monitoring ====
A new service should be added to the 'v5 slack alerts' by using the /health endpoint.