Skip to content

Commit e0767a3

Browse files
docs: update documentation and fix some typo
1 parent 097a085 commit e0767a3

File tree

7 files changed

+28
-24
lines changed

7 files changed

+28
-24
lines changed

docs/03-devops/buildAutomation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ Per automatizzare le attività di compilazione del codice sorgente, la gestione
1515
</div>
1616
Al fine di garantire il principio DRY e gestire in modo organizzato, centralizzato e chiaro le dipendenze presenti nei microservizi, si è scelto di utilizzare il *Gradle Version Catalog* in formato *TOML*.
1717

18-
Inoltre, è stato configurato il sistema di reporting *[Gradle build scans](https://scans.gradle.com/)* al fine di pubblicare un report ogniqualvolta vi sia un fallimento nel processo di build. Questo ci ha aiutati ad ispezionare ed analizzare i servizi in caso di fallimenti.
18+
Inoltre, è stato configurato il sistema di reporting *[Gradle build scans](https://scans.gradle.com/)* al fine di pubblicare un report ogniqualvolta vi sia un fallimento nel processo di build. Questo ci ha aiutati ad ispezionare ed analizzare i microservizi in caso di fallimenti.
1919

docs/03-devops/continuousIntegration.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Il primo *workflow* è stato sviluppato a supporto dei microservizi dell'*Applic
2020
Il *workflow* viene eseguito ogniqualvolta viene effettuato un *push* o una *pull request*.
2121
I *job* che vengono eseguiti sono i seguenti:
2222

23-
1. *validation*: per prima cosa viene validato il *wrapper* di *Gradle* al fine di verificare che esso sia un *wrapper* valido e riconosciuto e non parte di un qualche attacco di *supply chain*.
23+
1. *validation*: per prima cosa viene validato il *wrapper* di *Gradle* al fine di verificare che esso sia valido, riconosciuto e non parte di un qualche attacco di *supply chain*.
2424
2. *build*: dopo che il *job* *validation* è passato, viene eseguita la *build* del microservizio. Essa consiste nell'esecuzione dei test e dei controlli di qualità del codice su tutte le combinazioni di diversi sistemi operativi e diverse versioni del linguaggio utilizzato al fine di assicurare il corretto funzionamento sulle piattaforme d'interesse.
2525
Infine viene caricata la coverage, calcolata tramite *JaCoCo* come anticipato, sul tool cloud-based *[Codecov](https://about.codecov.io/)*.
2626
3. *release-and-delivery*: dopo che la *build* viene completata con successo, se il *workflow* ha accesso ai segreti (quindi solo nel caso di *push* sulla *repository* originale) viene eseguita la *release* su *GitHub Release* e il *delivery* su *GitHub Packages* del microservizio stesso. Questo viene effettuato sfruttando la *GitHub Action* **release-and-delivery-action** sviluppata dal team e descritta in seguito.
@@ -48,7 +48,7 @@ I *job* che vengono eseguiti sono i seguenti:
4848
## Digital Twins
4949

5050
Il terzo *workflow* è stato sviluppato a supporto dei modelli *Digital Twins* modellati tramite il linguaggio *Digital Twins Definition Language* (*DTDL*).
51-
In questo *workflow* è presente un singolo *job* - *validate* -, eseguito ogniqualvolta viene eseguito il *push* o una *pull request*, il quale, tramite l'ausilio della *GitHub Action* **dtdl-validator-action**, sviluppata dal team, verifica la validità dei modelli *DTDL* sviluppati.
51+
In questo *workflow* è presente un singolo *job* *validate*, eseguito ogniqualvolta viene effettuato il *push* o una *pull request*, il quale tramite l'ausilio della *GitHub Action* **dtdl-validator-action** sviluppata dal team verifica la validità dei modelli *DTDL* sviluppati.
5252

5353
## Azure Function
5454

@@ -68,25 +68,27 @@ I *job* che vengono eseguiti sono i seguenti:
6868

6969
### release-and-delivery-action
7070

71-
La *GitHub Action* [`release-and-delivery-action`](https://github.com/SmartOperatingBlock/release-and-delivery-action) è stata sviluppata con lo scopo di agevolare la gestione del processo di release e di delivery di un progetto. Dapprima, l'azione si occupa di effettuare la *release* attraverso l'esecuzione dei comandi definiti in input, successivamente, se la release è stata effettuata, costruisce l'*immagine Docker* con la stessa versione della *release* appena effettuata. Infine ne effettua il delivery su un *Container Registry* fornito in input. Al fine di permettere un utilizzo generico è possibile escludere il processo di *release* ed effettuare solamente la costruzione e il *delivery* dell'*immagine* del container o viceversa.
71+
La *GitHub Action* [`release-and-delivery-action`](https://github.com/SmartOperatingBlock/release-and-delivery-action) è stata sviluppata con lo scopo di agevolare la gestione del processo di release e di delivery di un progetto. Dapprima, l'azione si occupa di effettuare la *release* attraverso l'esecuzione dei comandi definiti in input, successivamente, se essa è stata effettuata, costruisce l'*immagine Docker* con la stessa versione della *release* appena effettuata. Infine ne effettua il delivery su un *Container Registry* fornito in input.
72+
73+
Al fine di permettere un utilizzo generico è possibile escludere il processo di *release* ed effettuare solamente la costruzione e il *delivery* dell'*immagine* del container o viceversa.
7274

7375
### documentation-ghp-action
7476

7577
La *GitHub Action* [`documentation-ghp-action`](https://github.com/SmartOperatingBlock/documentation-ghp-action) è stata sviluppata con lo scopo di agevolare la generazione e la pubblicazione della documentazione dei microservizi. In particolare, vengono messi a disposizione per l'utilizzatore tre tipi di documentazione:
7678

77-
- *Documentazione del codice sorgente*: per quanto riguarda la documentazione del codice sorgente, al fine di supportare qualsiasi linguaggio e qualsiasi *documentation engine,* i comandi di generazione vengono specificati in input da parte dell'utilizzatore.
79+
- *Documentazione del codice sorgente*: al fine di supportare qualsiasi linguaggio e qualsiasi *documentation engine*, i comandi di generazione vengono specificati in input da parte dell'utilizzatore.
7880
- *Documentazione delle API REST*: per quanto riguarda la documentazione delle *API REST* si richiede l'adozione della specifica [*OpenAPI*](https://swagger.io/resources/open-api/). In particolare viene richiesto all'utilizzatore di fornire in input il *path* del file in formato *yaml* contenente la documentazione.
7981
- *Documentazione degli eventi*: per quanto riguarda la documentazione degli eventi si richiede l'adozione della specifica [*AsyncAPI*](https://www.asyncapi.com/). In particolare viene richiesto all'utilizzatore di fornire in input il *path* del file in formato *yaml* contenente la documentazione.
8082

8183
Le documentazioni generate vengono pubblicate su un sito web associato alla *repository* tramite il servizio di hosting *GitHub Pages*. Al fine di permettere un utilizzo generico è possibile selezionare quali documentazioni generare.
8284

8385
### dtdl-validator-action
8486

85-
La *GitHub Action* [`dtdl-validator-action`](https://github.com/SmartOperatingBlock/dtdl-validator-action) è stata sviluppata con lo scopo di permettere la validazione dei modelli dei Digital Twins scritti in *DTDL*. In particolare, essa sfrutta il validatore [*DTDL Validator*](https://github.com/Azure-Samples/DTDL-Validator) sviluppato da *Microsoft*, adattandolo ad un utilizzo in pipeline di Continuous Integration.
87+
La *GitHub Action* [`dtdl-validator-action`](https://github.com/SmartOperatingBlock/dtdl-validator-action) è stata sviluppata con lo scopo di permettere la validazione dei modelli dei Digital Twins scritti in *DTDL*. In particolare, essa sfrutta il validatore [*DTDL Validator*](https://github.com/Azure-Samples/DTDL-Validator) sviluppato da *Microsoft*, adattandolo ad un utilizzo in pipeline di *Continuous Integration*.
8688

8789
## Automatic Dependency Update
8890

8991
Al fine di automatizzare l'aggiornamento delle dipendenze dei software sviluppati sono stati utilizzati i seguenti bot:
9092

91-
- [*Renovate*](https://www.mend.io/renovate/): configurato per creare una *pull request* su un branch ad-hoc ogniqualvolta è presente una nuova versione di una dipendenza utilizzata nel progetto. Al fine di permettere il *DRY* delle configurazioni è stata creata una *repository* [`renovate-config`](https://github.com/AndreaGiulianelli/renovate-config) contenente tutte le configurazioni utilizzate.
93+
- [*Renovate*](https://www.mend.io/renovate/): configurato per creare una *pull request* su un branch ad-hoc ogniqualvolta sia presente una nuova versione di una dipendenza utilizzata nel progetto. Al fine di permettere il *DRY* delle configurazioni è stata creata una *repository* [`renovate-config`](https://github.com/AndreaGiulianelli/renovate-config) contenente tutte le configurazioni utilizzate.
9294
- [*Mergify*](https://mergify.com/): utilizzato per velocizzare ed automatizzare i merge delle *pull request* nel branch di sviluppo principale. Come *merging strategy* è stato impiegato il *rebase*.

docs/03-devops/licence.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ Di seguito una tabella che elenca i permessi, le limitazioni e le condizioni che
1818
| ✅ Distribuzione | | |
1919
| ✅ Uso privato | | |
2020

21-
Tramite le funzionalità offerte da *Intellij-IDEA* e *VSCode*, utilizzati per lo sviluppo, abbiamo applicato il corrispettivo *Copyright Notice Header* in ogni file sorgente.
21+
Tramite le funzionalità offerte da *Intellij-IDEA* e *VSCode*, utilizzati per lo sviluppo, abbiamo applicato il corrispettivo *Copyright Notice Header* in ogni file sorgente.
22+
23+
Di seguito vengono descritte le licenze delle principali librerie e framework utilizzati.
2224

2325
| Strumento / Libreria / Framework | Licenza |
2426
| -------------------------------- | ---------------------------------------------- |

docs/03-devops/qualityAssurance.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@ has_children: false
99
# Quality Assurance
1010

1111
Una buona pratica della Build Automation e in generale del DevOps è l'utilizzo di tools per la validazione della qualità del codice prodotto.
12+
1213
Per i microservizi basati su Kotlin:
1314

1415
+ **Static Code Analysis**: [*Detekt*](https://github.com/detekt/detekt), [*Cpd*](https://pmd.github.io/pmd/pmd_userdocs_cpd.html)
1516
+ **Style Checking**: [*Ktlint*](https://github.com/pinterest/ktlint)
1617

1718
Per i microservizi basati su Java:
1819

19-
+ **Static Code Analysis**: [*PMD*](https://pmd.github.io/), [*Cpd*](https://pmd.github.io/pmd/pmd_userdocs_cpd.html) , [*SpotBugs*](https://spotbugs.github.io/)
20+
+ **Static Code Analysis**: [*PMD*](https://pmd.github.io/), [*Cpd*](https://pmd.github.io/pmd/pmd_userdocs_cpd.html), [*SpotBugs*](https://spotbugs.github.io/)
2021
+ **Style Checking**: [*CheckStyle*](https://checkstyle.org/)
2122

2223
Per agevolare la configurazione di entrambi gli stack si è fatto uso di due plugin *Gradle*, rispettivamente [`gradle-kotlin-qa`](https://github.com/DanySK/gradle-kotlin-qa) e [`gradle-java-qa`](https://github.com/DanySK/gradle-java-qa).
2324
L'esecuzione di questi controlli avviene anche prima di ciascun commit effettuato tramite l'*hook pre-commit* descritto precedentemente.
2425

25-
Al fine di supportare ulteriormente il processo di Quality Assurance tramite ad esempio l'analisi e il rilevamento di code smell, problemi di sicurezza, debito tecnico e duplicazione di codice si è fatto uso dei servizi cloud-based [*SonarCloud*](https://www.sonarsource.com/products/sonarcloud/) e [*GitGuardian*](https://www.gitguardian.com/).
26+
Al fine di supportare ulteriormente il processo di *Quality Assurance* tramite ad esempio l'analisi e il rilevamento di *code smell*, problemi di sicurezza, debito tecnico e duplicazione di codice si è fatto uso dei servizi cloud-based [*SonarCloud*](https://www.sonarsource.com/products/sonarcloud/) e [*GitGuardian*](https://www.gitguardian.com/).

docs/03-devops/workflowOrganization.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,22 @@ I branch utilizzati dal workflow sono i seguenti:
2929
Inoltre, al fine di esplicitare maggiormente il significato dei commit si è scelto di utilizzare la specifica *[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)*, che ha semplificato l'utilizzo di tool automatici per il versionamento dell'applicazione. I tipi di commit adottati sono i seguenti:
3030

3131
- `build`: riguardano cambiamenti che interessano il build system oppure dipendenze esterne
32-
- `chore`: riguardano cambiamenti generici, indica l'aggiunta o la modifica di codice correlato a attività di manutenzione generale, come la gestione dei file o altre attività che non introducono nuove funzionalità o risolvono bug.
32+
- `chore`: riguardano cambiamenti generici, indica l'aggiunta o la modifica di codice correlato a attività di manutenzione generale come la gestione dei file o altre attività che non introducono nuove funzionalità o risolvono bug
3333
- `ci`: riguardano cambiamenti nella configurazione dei file e negli script di *Continuous Integration*
3434
- `docs`: riguardano cambiamenti alla documentazione di progetto
3535
- `feat`: riguardano l'aggiunta di una nuova feature
3636
- `fix`: riguardano la risoluzione di un bug
3737
- `perf`: riguardano un cambiamento del codice per il miglioramento delle performance del sistema
38-
- `refactor`: riguardano un cambiamento del codice che non risolve un bug e non aggiunge nessuna feature, quindi un'attività di refactoring.
38+
- `refactor`: riguardano un cambiamento del codice che non risolve un bug e non aggiunge nessuna feature, quindi un'attività di refactoring
3939
- `style`: riguardano modifiche allo stile del codice che non impattano le funzionalità
40-
- `revert`: riguardano l'annullamento di modifiche portate da commit precedenti.
40+
- `revert`: riguardano l'annullamento di modifiche portate da commit precedenti
4141
- `test`: riguardano l'aggiunta o la modifica di test
4242

4343
Al fine di controllare il corretto utilizzo della specifica *Conventional Commits* ed il rispetto degli standard di qualità sul codice prodotto sono stati utilizzati i seguenti *hook* per *Git*:
4444

45-
- *Pre commit*: si verifica il rispetto degli standard di qualità sul codice mediante l'utilizzo dei task *Gradle* forniti dalle suite di *Quality Assurance* descritte nel seguito
46-
- *Commit msg*: si verifica il rispetto della specifica *Conventional Commit*
47-
- *Post commit*: si verifica che il commit prodotto sia *signed*. In caso di mancata firma del commit verrà visualizzato un warning utile per lo sviluppatore, ma non verrà fatto fallire
45+
- *pre-commit*: verifica il rispetto degli standard di qualità sul codice mediante l'utilizzo dei task *Gradle* forniti dalle suite di *Quality Assurance* descritte in seguito
46+
- *commit-msg*: verifica il rispetto della specifica *Conventional Commit*
47+
- *post-commit*: verifica che il commit prodotto sia *signed*. In caso di mancata firma del commit verrà visualizzato un warning utile per lo sviluppatore, ma non verrà fatto fallire
4848

4949
Essi sono stati configurati attraverso il plugin *Gradle* [`gradle-pre-commit-git-hooks`](https://github.com/DanySK/gradle-pre-commit-git-hooks).
5050

docs/04-implementation/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
---
22
title: Implementazione
33
layout: default
4-
has_children: true
4+
has_children: false
55
nav_order: 5
66
---
77
# Implementazione
88

99
Considerando l'obbiettivo della relazione, in questa sezione verranno presentati i principali linguaggi e le principali tecnologie utilizzate senza entrare nei dettagli implementativi.
1010

11-
## Phisical Layer
11+
## Physical Layer
1212

1313
La *Centralina di zona* è stata sviluppata utilizzando il linguaggio *C++* sfruttando il framework *Wiring* mentre il *Gateway di blocco* è stato sviluppato utilizzando [*Node-RED*](https://nodered.org/).
1414

1515
## Digital Twins Layer
1616

17-
Per la modellazione dei Digital Twins si è sfruttato il linguaggio *Digital Twins Definition Language* (DTDL) mentre per lo sviluppo della *Azure Function* si è utilizzato *C#*.
17+
Per la modellazione dei *Digital Twins* si è sfruttato il linguaggio *Digital Twins Definition Language* (DTDL) mentre per lo sviluppo della *Azure Function* si è utilizzato *C#*.
1818

1919
## Application Layer
2020

2121
Considerando che ogni microservizio, seguendo i principi dello stile architetturale, può essere implementato utilizzando lo stack tecnologico più adeguato, si è fatto uso del linguaggio *Java* per il microservizio *Automation Management* e di *Kotlin* per i restanti.
2222
Le principali librerie e framework utilizzati sono stati:
2323

2424
+ **Kafka Clients**, per l'interazione con l'event broker
25-
+ **Ktor**, per la realizzazione delle API Rest
25+
+ **Ktor**, per la realizzazione delle API REST
2626
+ **Kmongo**, per l'interazione con MongoDB
2727
+ **JaCaMo**, per lo sviluppo del sistema multi-agente presente nel microservizio *Automation Management*
2828
+ **Vert.X**, per lo sviluppo del microservizio *API Gateway*

docs/05-conclusion/index.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ nav_order: 6
66
---
77
# Conclusioni
88

9-
L'impiego delle tecniche di *Domain-Driven Design* ha permesso di comprendere in modo approfondito un dominio complesso come quello sanitario. In particolare, grazie alle tecniche di *knowledge crunching* utilizzate nei primi meeting, è stato possibile comprendere il funzionamento attuale e il funzionamento atteso del sistema, oltre che i processi, le responsabilità e il linguaggio tecnico. L'utilizzo di un sito di progetto su *Confluence* e di strumenti come *Miro* e *Figma* ha permesso da un lato di simulare un contesto reale, mentre dall'altro ha semplificato la collaborazione e permesso una condivisione della conoscenza tra i componenti del team.
9+
L'impiego delle tecniche di ***Domain-Driven Design*** ha permesso di comprendere in modo approfondito un dominio complesso come quello sanitario. In particolare, grazie alle tecniche di *Knowledge Crunching* utilizzate nei primi meeting, è stato possibile comprendere il funzionamento attuale e il funzionamento atteso del sistema oltre che i processi, le responsabilità e il linguaggio tecnico. L'utilizzo di un sito di progetto su *Confluence* e di strumenti come *Miro* e *Figma* ha permesso da un lato di simulare un contesto reale, mentre dall'altro ha semplificato la collaborazione e permesso una condivisione della conoscenza tra i componenti del team.
1010

11-
Inoltre, l'utilizzo degli elementi del design strategico del DDD, in particolare l'identificazione dei sottodomini e la progettazione dei *bounded context* con le relative relazioni espresse nella *context map*, ha permesso una migliore gestione della complessità evitando al tempo stesso di inserire ambiguità nella conoscenza e nella progettazione.
12-
13-
Infine, l'utilizzo di pratiche di *DevOps* e la progettazione di pipeline di *Continuous Integration* hanno evitato la ripetizione di attività manuali, in particolare l'analisi statica del codice, l'esecuzione di test di regressione, il rilascio e il delivery del software, automatizzando i processi ed aumentando la qualità e la produttività.
11+
Inoltre, l'utilizzo degli elementi del design strategico del DDD, in particolare l'identificazione dei sottodomini e la progettazione dei *bounded context* con le relative relazioni espresse nella *Context Map*, ha permesso una migliore gestione della complessità evitando al tempo stesso di inserire ambiguità nella conoscenza e nella progettazione.
1412

13+
Infine, l'utilizzo di pratiche di ***DevOps*** e la progettazione di pipeline di *Continuous Integration* hanno evitato la ripetizione di attività manuali come l'analisi statica del codice, l'esecuzione di test di regressione ed il rilascio e delivery del software, automatizzando così i processi ed aumentando la qualità e la produttività.

0 commit comments

Comments
 (0)