Skip to content

Commit 82cc255

Browse files
authored
wip: chapter miscellaneous (#18)
* wip: chapter miscellaneous * wip: chapter miscellaneous * wip: docker * wip: docker * wip: docker * wip: docker * wip: docker * wip: lowercase frontend / backend terms in thesis * wip: github actions * wip: fix issue with not displayed labels * wip: Antidote 10 karcher * wip: end chapter
1 parent 76bfb56 commit 82cc255

File tree

12 files changed

+156
-18
lines changed

12 files changed

+156
-18
lines changed

glossary.tex

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
\newglossaryentry{frontend}
4747
{
4848
name={Frontend},
49+
text={frontend},
4950
description={
5051
Il s'agit de la partie "émergée" de l'application (comparable à un iceberg). C'est l'interface graphique avec laquelle les utilisateurs finaux interagissent.
5152
}
@@ -54,6 +55,7 @@
5455
\newglossaryentry{backend}
5556
{
5657
name={Backend},
58+
text={backend},
5759
description={
5860
Il s'agit de la partie "immergée" de l'application (comparable à un iceberg) : notre \Gls{api}.
5961
}
@@ -172,4 +174,33 @@
172174
description={
173175
Ce terme désigne, comme expliqué par Wikipédia\cite{envvarDef}, "une variables dynamique utilisée par les différents processus d’un système d’exploitation".
174176
}
177+
}
178+
179+
\newglossaryentry{deploiement}
180+
{
181+
name={Déploiement},
182+
text={déploiement},
183+
description={
184+
Ensemble d'activités permettant la mise en service du logiciel afin qu'il soit pret à être utilisé.
185+
}
186+
}
187+
188+
\newglossaryentry{maintenance}
189+
{
190+
name={Maintenance},
191+
text={maintenance},
192+
description={
193+
Ensemble d'activités permettant d'assurer le bon fonctionnement du logiciel.
194+
}
195+
}
196+
197+
\newglossaryentry{ci_cd}
198+
{
199+
name={CI/CD},
200+
description={
201+
Abréviation anglophone pour "Continuous integration / Continuous Delivery", ce qui peut se traduire comme intégration continue / \gls{deploiement} continu.
202+
Il s'agit donc de l'association de ces 2 concepts.
203+
L'intégration continue consistant à vérifier que chaque modification du code source n'engendre pas de défauts, notamment par l'usage de tests.
204+
Le \gls{deploiement} continu consistant à réaliser le \gls{deploiement} à chaque modification du code source, par le billet d'un système automatisé.
205+
}
175206
}

images/serveur/CLI.jpg

173 KB
Loading

images/serveur/dockerHub.PNG

26.6 KB
Loading

images/serveur/dockerTaxonomy.png

199 KB
Loading
63.6 KB
Loading
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
\includepdf[pages=1,pagecommand=\chapter{Analyse Bibliographique}, offset=0 -1cm, scale=0.8]{sections/annexes/analyseBibliographique/Analyse_Bibliographique.pdf}
2-
\label{annexe:AnalyseBiblio}
1+
\includepdf[pages=1,pagecommand=\chapter{Analyse Bibliographique}\label{annexe:AnalyseBiblio}, offset=0 -1cm, scale=0.8]{sections/annexes/analyseBibliographique/Analyse_Bibliographique.pdf}
32
\includepdf[pages=2-,pagecommand={},width=1.2\textwidth]{sections/annexes/analyseBibliographique/Analyse_Bibliographique.pdf}

sections/annexes/extraitCodesAnnexes/index.tex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ \chapter{Extraits de codes}
66
%\lstinputlisting[label={}]{src/to/code.js}
77
\lstinputlisting[
88
style=ES6,
9-
caption={Point d'entrée d'une application, sur base de Yargs}
9+
caption={Point d'entrée d'une application, sur base de Yargs},
10+
label={code:mainYargs}
1011
]{codes/mainCLI.js}
1112

1213
\lstinputlisting[
1314
style=ES6,
14-
caption={Exemple d'une implémentation d'une commande "Yargs"}
15+
caption={Exemple d'une implémentation d'une commande "Yargs"},
16+
label={code:crawlerYargs}
1517
]{codes/crawler.js}
1618

1719
\lstinputlisting[

sections/chapters/analyseCritique/index.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ \subsection{Code coverage}
194194

195195
Avec 48 tests, nous avons pu atteindre une couverture maximale (100\%), car chaque méthode a été testée extensivement avec le \textit{branch coverage}.\\
196196

197-
Vous pouvez d'ailleurs consulter les résultats depuis \url{https://codecov.io/gh/SourceCodeOER/sourcecode_api/list/master/}.
197+
Vous pouvez d'ailleurs consulter les résultats depuis \url{https://codecov.io/gh/SourceCodeOER/sourcecode_api/branch/master}.
198198

199199

200200

sections/chapters/approche/index.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ \subsection*{Conception et implémentation}
130130
Contrairement à l'analyse, la conception et l'implémentation ont été réalisées en fonction du domaine spécifique de chacun :
131131

132132
\begin{description}
133-
\item[Jacques] : responsable du \Gls{backend} et du \Gls{cli} : base de données, extraction et nettoyage des données, gestion de la performance et la sécurité.
134-
\item[Alexandre] : responsable du \Gls{frontend} : prototypage de l'application, interface graphique.
133+
\item[Jacques] : responsable du \gls{backend} et du \Gls{cli} : base de données, extraction et nettoyage des données, gestion de la performance et la sécurité.
134+
\item[Alexandre] : responsable du \gls{frontend} : prototypage de l'application, interface graphique.
135135
\end{description}
136136

137137
Le principal problème avec cette approche est la "compartimentation" qui favorise une connaissance limitée de la totalité des technologies utilisées. Ceci risque de provoquer un arrêt qui, temporairement ou non, nuit à la bonne réalisation de nos objectifs dans les délais fixés si un membre de notre équipe se retrouve dans l'incapacité sa part de travail pour l'une ou l'autre raison. \\

sections/chapters/solution/api/index.tex

Lines changed: 111 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,23 @@ \subsection{Structure du projet}
1818
\end{figure}
1919

2020
Cette structure ne vous est peut-être pas inconnue, car il s'agit de la structure officielle de Sequelize\footnote{
21-
\url{https://github.com/sequelize/cli} - command "sequelize init"
21+
\url{https://github.com/sequelize/cli} - commande "sequelize init"
2222
}, sur laquelle nous avons ajouté quelques dossiers :
2323

2424
% A voir s'il faut minimiser l'itemize
2525
% nosep,noitemsep,topsep=0pt,partopsep=0pt,after=\vspace*{2pt}
2626
\begin{itemize}
2727
\item openapi : nos fichiers \Gls{oas}, utilisés par openapi-enforcer (cf. figure \ref{fig:OASEnforcer})
2828
\item controllers : nos fichiers chargés de répondre aux requêtes \textbf{HTTP}, utilisés par openapi-enforcer (cf. figure \ref{fig:OASEnforcer})
29-
\item tests : nos tests pour valider l'implémentation (cf. chap TODO)
29+
\item tests : nos tests pour valider l'implémentation (cf. section \ref{section:validation})
3030
\item docs : la documentation de l'\Gls{api} en \textbf{HTML}\footnote{
3131
Celle-ci est automatiquement publiée sur
3232
\href{https://sourcecodeoer.github.io/sourcecode\_api/}{https://sourcecodeoer.github.io/sourcecode\_api/}.
3333
Pour la générer en local, cela se fait via la commande :
3434
npx redoc-cli bundle api.yml -o docs/index.html
3535
} (cf. figure \ref{fig:exampleDoc} pour un exemple)
3636
\item upload / files : resp. lieu de stockage des fichiers importés / stockés
37-
\item .github : nos scripts d'automatisation (cf. section TODO)
37+
\item .github : nos scripts d'automatisation de type Github Actions (cf. section \ref{section:GithubActions})
3838
\item bin : du code n'entrant dans aucun autre dossier
3939
\end{itemize}
4040

@@ -46,7 +46,7 @@ \subsubsection{Paramétrisation de l'\Gls{api}}
4646
Comme révélé en section \ref{section:AnalyseNonFonctionnelle}, il convient d'accorder un certain contrôle aux utilisateurs finaux.
4747
Une manière de configurer une telle application est d'utiliser des \glspl{envvar},
4848
qui permettent, contrairement à d'autres approches (comme les fichiers de configuration \textbf{JSON}, \textbf{YAML}, ...),
49-
de changer de valeur directement, sans éteindre/rédémarrer l'application par exemple. \\
49+
de changer de valeur directement, sans éteindre/redémarrer l'application par exemple. \\
5050

5151
Nous avons accordé les possibilités suivantes (la liste détaillée des \glspl{envvar} est disponible dans le fichier README.MD) :
5252

@@ -84,7 +84,7 @@ \subsubsection{Documentation de l'\Gls{api}}
8484
\pagebreak
8585
\subsubsection{\Glspl{middleware}}
8686

87-
Pour rappel (cf section \ref{section:choixTechnologiques}), Express a été le "squelette" sur lequel nous avons construit notre application.
87+
Pour rappel (cf. section \ref{section:choixTechnologiques}), Express a été le "squelette" sur lequel nous avons construit notre application.
8888
Une de ses particularités est l'usage de \glspl{middleware}\footnote{
8989
Par exemple, ceux en section \ref{section:choixTechnologiques} : Passport.js et OpenAPI-enforcer
9090
} dont nous pouvons expliquer le fonctionnement général par le biais de cette illustration :
@@ -145,7 +145,113 @@ \subsubsection{Recherche par \glspl{tag}}
145145
\section{Divers}
146146
\label{chapter:solutionDivers}
147147

148+
Dans cette section, nous aborderons quelques éléments secondaires de \texttt{SourceCode}.
149+
En effet, en dehors du développement, il existe bien d'autres facettes importantes du cycle de vie\footnote{
150+
En anglais, ce terme est connu sous le nom de "software lifecycle". (\url{https://web.maths.unsw.edu.au/~lafaye/CCM/genie-logiciel/cycle-de-vie.htm})
151+
} d'un logiciel : le \gls{deploiement} / la \gls{maintenance} ...
152+
148153
\subsection{\texorpdfstring{\Gls{cli}}{CLI}}
154+
155+
Comme nous l'évoquions précédemment (cf. annexe \ref{annexe:AnalyseBiblio}), il convient de disposer d'outils pour indexer / mettre en ligne un nombre conséquent de
156+
\glspl{resinfo}, provenant de diverses sources, en un minimum de temps. C'est pour répondre à ce besoin que nous avons développé un \Gls{cli}, sur base du framework Yargs
157+
(cf. section \ref{section:choixTechnologiques})\footnote{
158+
Comme le montre le point d'entrée du \Gls{cli}, à savoir "index.js" (que nous avons inclus dans l'annexe \ref{code:mainYargs}), il sera aisé d'ajouter de nouvelles commandes à l'avenir.
159+
}.
160+
161+
\begin{figure}[H]
162+
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{images/serveur/CLI.jpg}
163+
\centering
164+
\caption{\Gls{cli} - inventaire des commandes disponibles}
165+
\label{fig:cliCommands}
166+
\end{figure}
167+
168+
Chaque commande disposant naturellement de ses propres règles en matière d'arguments et/ou d'options.
169+
Fort heureusement, Yargs possède un éventail de fonctionnalités très diversifié, que nous allons illustrer un échantillon représentatif sur la commande "crawler" (cf. annexe \ref{code:crawlerYargs}) :
170+
\begin{itemize}[nosep,noitemsep,topsep=0pt,partopsep=0pt,after=\vspace*{2pt}]
171+
\item La possibilité d'indiquer si une option est nécessaire ou non (ligne 28)
172+
\item La possibilité de restreindre un choix uniquement à certaines valeurs (ligne 16)
173+
\item La possibilité d'identifier quels options et arguments ont été donnés à la commande (lignes 59-62)
174+
\item La possibilité de charger un fichier de configuration (lignes 39-40), permettant ainsi de ne pas devoir réécrire l'entièreté de la ligne de commande pour l'invoquer.
175+
\end{itemize}
176+
Veuillez noter que nous avons appliqué le "principe ouvert/fermé"\footnote{
177+
La lettre \textbf{O} dans l'anagramme \textbf{SOLID} (\url{https://fr.wikipedia.org/wiki/SOLID\_(informatique)}), qui présente quelques principes pour la programmation orientée objet
178+
} dans cette commande : en effet, il est possible d'utiliser des stratégies d'indexation déjà implémentées ou non (ex: "inginious-git" qui s'occupe de \glspl{resinfo} au format INGInious\footnote{
179+
\url{https://inginious.info.ucl.ac.be/}
180+
}, disponibles via Git\footnote{
181+
\url{https://git-scm.com/}
182+
}), tout en conservant le même comportement, quelque soit la situation.
183+
184+
Par respect de la norme que nous avons crée (cf. annexe \ref{annexe:AnalyseBiblio}), nous avons également adopté le \textbf{JSON} et les mêmes conventions d'écriture
185+
pour les fichiers d'entrée / de sortie des différentes commandes, à quelques exceptions près que nous avons détaillé dans le fichier README.MD.
186+
187+
\pagebreak
149188
\subsection{Docker}
189+
\label{section:docker}
190+
191+
Comme expliqué par son site officiel\footnote{
192+
\url{https://www.docker.com/why-docker}
193+
}, il s'agit d'une plateforme de conteneurisation permettant de paqueter une application.
194+
Dans un conteneur sont contenus une application ainsi que tous les éléments dont elle a besoin pour fonctionner (code source, \glspl{library}, ...).
195+
Le \gls{deploiement} pouvant être réalisé sur n'importe quelle machine, tout en restant plus léger que des alternatives existantes
196+
\footnote{
197+
Des explications sont disponibles sur \url{https://www.docker.com/resources/what-container}
198+
}.
199+
Voici un récapitulatif des concepts clés :
200+
201+
\begin{figure}[H]
202+
\includegraphics[width=\textwidth,height=0.38\textheight,keepaspectratio]{images/serveur/dockerTaxonomy.png}
203+
\centering
204+
\caption[Taxonomie des termes et concepts Docker]{Taxonomie des termes et concepts Docker \footnotemark}
205+
\label{fig:dockerTaxonomy}
206+
\end{figure}
207+
\footnotetext{
208+
\url{https://docs.microsoft.com/fr-fr/dotnet/architecture/microservices/container-docker-introduction/docker-containers-images-registries}
209+
}
210+
211+
Nous avons ainsi découpé notre application en 3 images\footnote{
212+
Elles sont disponibles sur Dockerhub (\url{https://hub.docker.com/})
213+
et générées sur base de fichiers Dockerfile, présents dans chaque repository Github.
214+
Notons enfin la présence dans le repository miscellaneous de fichiers docker-compose-***.yml pour déployer automatiquement l'entièreté de \texttt{SourceCode} avec Docker Compose, en fonction de l'environnement souhaité (plus d'informations dans le README.MD).
215+
} :
216+
217+
\begin{itemize}[nosep,noitemsep,topsep=0pt,partopsep=0pt,after=\vspace*{2pt}]
218+
\item sourcecode-front : le \gls{frontend} de \texttt{SourceCode}
219+
\item sourcecode\_api : le \gls{backend} de \texttt{SourceCode}
220+
\item sourcecode-postgres : une base de données en Postgresql, contenant des données extraites par le \Gls{cli}, pour la démonstration de notre solution (cf. section \ref{section:validation})
221+
\end{itemize}
222+
223+
\begin{figure}[H]
224+
\includegraphics[width=\textwidth,height=0.13\textheight]{images/serveur/dockerHub.PNG}
225+
\centering
226+
\caption{Docker - des images prêtes à l'emploi}
227+
\label{fig:dockerImages}
228+
\end{figure}
229+
230+
\pagebreak
150231
\subsection{Github Actions}
232+
\label{section:GithubActions}
151233

234+
Vous avez peut-être noté la présence d'un dossier \textit{.github} dans chacun des repositories composant notre solution.
235+
Pour rappel (cf. section \ref{chapter:api}), ce dossier contient des scripts permettant d'automatiser un ensemble de tâches récurrentes, par le biais de Github Actions.
236+
Comme expliqué par Github\footnote{
237+
\url{https://github.com/features/actions}
238+
}, Github Actions est une fonctionnalité permettant d'automatiser nos workflows\footnote{
239+
Si ce terme vous êtes inconnu, nous vous invitons à le découvrir sur \url{https://fr.wikipedia.org/wiki/Workflow}
240+
}
241+
directement sur base du code hébergé chez Github (dont notamment du \gls{ci_cd}).
242+
Ceci nous permettant de maintenir constantamment un niveau de qualité, via les quelques workflows que nous avons conçus :
243+
244+
\begin{itemize}[nosep,noitemsep,topsep=0pt,partopsep=0pt,after=\vspace*{2pt}]
245+
\item Créer une nouvelle image Docker, à chaque modification du code source (cf. section \ref{section:docker})
246+
\item Tester le bon fonctionnement de l'\Gls{api}, à chaque modification du code source, par le biais de tests (cf. chapitre \ref{section:validation})
247+
\item Vérifier la validité de la documentation en \Gls{oas}, à chaque modification du code source
248+
\item Générer la documentation en \textbf{HTML} (cf. figure \ref{fig:exampleDoc})
249+
\item Détecter et identifier les changements de l'\Gls{api} suggestibles d'impacter les clients l'utilisant, dont notamment le \gls{frontend}
250+
\end{itemize}
251+
252+
\begin{figure}[H]
253+
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{images/serveur/workflowGithubActions.PNG}
254+
\centering
255+
\caption{Github Actions - exemple de workflows}
256+
\label{fig:GithubActionsExample}
257+
\end{figure}

0 commit comments

Comments
 (0)