De product API verzorgt het bijhouden van alle product informatie. De API is geschreven in Node.js met het ORM (object-relational mapping) framework Sequelize. In de achtergrond is een MySQL database gekoppeld.
Repository:
Voor de front-end moet je in semester 3 een framework kiezen. Hiervoor heb ik React.js gekozen. De (simpele) applicatie bestaat uit een producten overzicht, het aanmaken/bijwerken van producten en het verwijderen hiervan.
Repository:
Het inlog/registratie systeem laat ik afhandelen door Auth0. Zelf is het lastig om een veilig login/registratie systeem te bouwen. Momenteel zijn producten nog niet gekoppeld aan gebruikers, maar dit kan later zeer eenvoudig toegevoegd worden.
Repository:
2. You use software tooling and methodology that continuously monitors and improve the software quality during software development.
Testen zijn erg belangrijk, deze helpen bij het voorkomen van bugs in een applicatie. Voor mijn tests gebruik ik Supertest. De testen zijn gebaseerd op user stories. Ik maak gebruik van een test database omdat dit aangereden/ondersteund is door Sequelize. Op het begin van dit semester gebruikte ik hiervoor een MySQL database, maar omdat deze veel opstart tijd heeft, ben ik later overgeschakeld naar een SQLite database. De onderstaande testen zijn integratie testen, unit testen zijn in mijn geval overbodig omdat ik hiermee alleen het ORM zou testen, als het goed is test Sequelize dit zelf.
De bovenstaande integratie testen worden automatisch uitgevoerd op een pull request naar de master branch.
Hiervoor gebruik ik GitHub actions met de onderstaande workflow. Verder zit hier ook een code analyse in via SonarCloud, deze checkt verschillende dingen zoals de code coverage (testen), code smells, bugs, vulnerabilities & duplications.
name: Build, SonarCloud & Docker
on:
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
env:
DB_HOST: ${{ secrets.DB_HOST }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_DATABASE: ${{ secrets.DB_DATABASE }}
DB_PORT: ${{ secrets.DB_PORT }}
DB_DIALECT: mysql
PORT: ${{ secrets.PORT }}
DB_DIALECT_TEST: ${{ secrets.DB_DIALECT_TEST }}
strategy:
fail-fast: false
matrix:
node-version: [14.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm install
- run: npm run build --if-present
sonarcloud:
runs-on: ubuntu-latest
env:
DB_DIALECT_TEST: ${{ secrets.DB_DIALECT_TEST }}
steps:
- name: Check Out Repo
uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Run Tests
run: npm run test
- name: SonarCloud Scan
uses: sonarsource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
Repository:
Aan @StijnSchellekens heb ik gevraagd mijn README.md
te reviewen.
Hij gaf hierop goede feedback dat het momenteel niet duidelijk is waar/hoe testen aan te maken.
Hierop heb ik mijn README.md
bijgewerkt in de Biddify-main repository.
Voor mijn project heb ik momenteel 4 Docker containers draaien, front-end React.js, product Node.js, product MySQL, product MySQL admin.
Onder Docker in de README.md
van de Biddify-main repository staat een uitleg hoe alle containers op te starten.
Nadat de Build
en SonarCloud
GitHub actions succesvol zijn uitgevoerd, draait automatisch het aanmaken van de Docker image, als deze is aangemaakt stuurt hij deze door naar mijn DockerHub account.
docker:
needs: [build, sonarcloud]
runs-on: ubuntu-latest
steps:
- name: Check Out Repo
uses: actions/checkout@v2
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: ./
file: ./Dockerfile
push: true
tags: robfontys/biddify-product-node.js:latest
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
Voor Biddify heb ik twee project dashboarden gemaakt. De eerste is voor de user stories en de status (ToDo, In Progress & Done) hiervan. In de omschrijving van elke issue staat een lijstje met dingen die gedaan moeten worden voordat deze gesloten kan worden. Het andere dashboard is voor bugs. In de omschrijving staat een uitleg van het probleem. En wat er eventueel al onderzocht is.
Om ervoor te zorgen dat mensen makkelijk kunnen instappen in Biddify staat in de Biddify-main repository een README.md
voor hun klaar.
Deze moet alles uitleggen hoe binnen de repositories gewerkt wordt. De README.md
bevat de volgende onderwerpen:
- Getting started
- Planning
- Docker
- API Documentation
- Coding Conventions
- C4 Model
- Branch
- Pull Request
Mijn research heb ik geschreven over Bcrypt.
De hoofdvraag was "Is het veilig om met Bcrypt wachtwoorden op te slaan?".
Met de volgende deelvragen:
- Wat is Bcrypt?
- Hoe werkt Bcrypt?
- Waarom is Bcrypt veilig?
- Hoe implementeer je Bcrypt?
Alles is terug te lezen in de Biddify-main repository in Password-encryption-algorithm-research.md
.
1. You choose and implement the most suitable agile software development method for your software project.
Voor deze leeruitkomst heb ik een verslag geschreven over agile en hoe wij dit in ons project hebben geïmplementeerd. Op de eerste pagina staat uitgelegd wat agile is, welke agile methodes er zijn & welke het meeste gebruikt worden. De tweede pagina bestaat uit hoe Scrum en Kanban werken. Op de laatste pagina heb ik omschreven hoe wij agile (Scrum) in ons project laten terug komen.
Bron:
- 21 11 29 RR Leeruitkomsten groepsproject aantonen.docx
Op de eerste pagina van het verslag hieronder staat uitgelegd wat een business process is. Daarna welk probleem er momenteel bij ISAAC is, en hoe dit het beste opgelost kan worden. Op de tweede pagina staat een BPMN-model, deze moet ervoor zorgen dat de workflow van applicatie goed te begrijpen is.
Bron:
- 21 11 29 RR Leeruitkomsten groepsproject aantonen.docx
3. You analyze (non-functional) requirements, elaborate (architectural) designs and validate them using multiple types of test techniques.
Voor het project van ISAAC hebben we een project plan geschreven. Eerst zonder template, daarna met. Om de overview van de applicatie te verduidelijken hebben we een C4 model level 2 gemaakt voor de applicatie. Op het begin van het project hebben we een brainstorm sessie gehouden, waarin iedereen zijn ideeën/ervaringen kon delen!
Bron:
- annotated-Project Plan ISAAC S3 DB-01 group 3.docx
- ISAAC-Application overview.drawio.png
- Project Document ISAAC.docx
4. You recognize and take into account cultural differences between project stakeholders and ethical aspects in software development.
Voor deze leeruitkomst heb ik een verslag geschreven over cultuur. Hiervoor heb ik het Hofstede framework gebruikt. Deze heb ik vergeleken met de Nederlandse cultuur en die van mijzelf. Op de tweede pagina staat een verslag over de ethiek in software development.
Bron:
- 21 11 29 RR Leeruitkomsten groepsproject aantonen.docx
Voor elke sprint oplevering met ISAAC was er een Powerpoint presentatie. Tijdens het project heb ik verschillende keren (16 stuks) emails gestuurd over de MQTT-server. Elke ochtend op project dagen was er een start-up meeting. Hierin vertelde iedereen wat hij de dag ervoor gedaan had en wat hij die dag ging doen.
Bron:
- sprint 3 delivery.pptx
- office 365 (outlook)
Voor ISAAC hebben wij een IOT-dashboard gemaakt. Waarin een medewerker de actuele temperatuur en luchtvochtigheid binnen het gebouw kan bekijken. Via een heatmap met (live) data van alle sensoren kan een medewerker zien waar hij het beste kan gaan zitten of moet gaan zitten. Losse sensoren kunnen worden in/uit geschakeld. Wij hebben al onze services uitgesplitst. De back-end maakt gebruik van Node.js, de front-end van React.js. Beiden zijn Javascript frameworks. De databases gebruiken MySQL. Alle code staat in onze GitHub organisatie s3-db01.
Bron:
- s3-db01 GitHub
- https://lit-beyond-41227.herokuapp.com/
Terugkijkende op semester 3 heb ik het erg naar mijn zin gehad.
Werken in de projectgroep was gezellig, en we hebben een mooi eindproduct opgeleverd aan ISAAC.
Op het begin was het even wennen/lastig om Engels te spreken binnen de groep. Gesprekken verliepen stroef en er werd alleen formeel gecommuniceerd.
Later ging dit stukken beter.
Voor mijn persoonlijk project heb ik als eerste dit semester Node.js geleerd, als ORM gebruikte ik Sequelize.
Uiteindelijk was dit soms best lastig, dingen werkten niet zoals verwacht. Maar nu meer ervaring met Sequelize heb, kan ik het goed gebruiken, en zelfs aanraden als je er de tijd in wilt stoppen om het (goed) te leren.
Hierna ben ik begonnen met onderzoek doen hoe Docker werkt. Na een YouTube video van 4 uur wist ik hoe het basis concept werkt, met het aanmaken van Docker images/containers. En het gebruik van een docker-compose.yml
file.
Als front-end framework heb ik gekozen voor React.js. Ook hiervan heb ik een tutorial gekeken op YouTube.
Tijdens het groepsproject heb ik veel samen gewerkt met Jules. Samen hebben we onderzocht hoe je automatisch unit testen uit moet voeren voor Node.js in Github actions. Zelf heb ik SonarCloud toegevoegd aan de GitHub actions van mijn persoonlijk project. Na (weer) wat vechten met Sequelize werden de unit testen uiteindelijk ook gecheckt op code coverage.
Er zijn zeker dingen die ik anders had aangepakt. Zo was het bijvoorbeeld niet handig om zo snel in het semester al Docker te leren. En was het op het begin van het semester onduidelijk dat programmeren niet het belangrijkste was. Het hebben van overzichtelijke repositories wel.