avancisation sur le rapport

master
Érina Point 3 years ago
parent 9eeda93fd2
commit 773f10b6ad

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

@ -1,5 +1,6 @@
% Préambule
\documentclass{article}
\documentclass[12pt]{article}
\title{Rapport de stage Point}
\author{Point}
@ -8,6 +9,8 @@
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{float}
\usepackage[a4paper]{geometry}
\geometry{verbose,tmargin=2cm,bmargin=2cm,lmargin=2.5cm,rmargin=2cm}
\graphicspath { {./images/} }
@ -32,10 +35,15 @@
\paragraph{}
ISTerre est un laboratoire universitaire à Grenoble dont le but est l'étude de le sismologie. Il y a aussi un service informatique dont l'objectif est de développer et maintenir le centre de donnée RÉSIF. Le centre de donnée se doit de désservir les données sismologiques récoltées par les noeuds A du réseau RÉSIF, à qui le demande grace à différents web services gérés par le centre de donnée RÉSIF (noeud B).
\paragraph{}
L'objectif de mon stage était donc de construir des tests comportementaux sur plusieurs de ces web services, à savoir les services \href{https://ws.resif.fr/fdsnws/station/1}{'station'}, \href{https://ws.resif.fr/fdsnws/dataselect/1}{'dataselect'} et \href{https://ws.resif.fr/fdsnws/availability/1}{'availability'}. En effet, dans le cadre de l'optimisation de ces services, les tests que j'ai implémenté auront pour untilité de comparrer les performances entre les nouvelles et anciennnes version de ces web services. La problematique de ce stage est donc comment trouver tout les scénarios possibles et comment les implémenter pour que l'identification de bugs soit facile et que l'écriture de nouveau tests soit rapide. \textbf{ANNONCE DU PLAN}
J'ai donc pu éffectuer mon stage dans ce contexte dans le cadre d'une optimisation des \textit{web services} RÉSIF.
\paragraph{}
L'objectif de mon stage était donc de construir des tests comportementaux sur plusieurs de ces web services, à savoir les services \href{https://ws.resif.fr/fdsnws/station/1}{'station'}, \href{https://ws.resif.fr/fdsnws/dataselect/1}{'dataselect'} et \href{https://ws.resif.fr/fdsnws/availability/1}{'availability'}. En effet, les tests que j'ai implémenté auront pour untilité de comparrer les performances entre les nouvelles et anciennnes version de ces web services. La problematique de ce stage est donc comment réaliser des tests exaustif qui permettent de mettre en lumière les problemes des web services de résif.
\paragraph{}
Dans ce rapport, j'éxposrai d'abord les structures qui m'ont acceuillit et entouré lors de la réalisation de mon stage. En suite, je décrirai le contexte dans le quelle j'ai baigné pendant 10 semainses. C'est après cela que je détaillrai le déroluement de ce stage, depuis la gestion de projet jusqu'a réalisation finale en passant par les problèmes rencontés. Enfin, je ferai un bilan sur ce que j'ai pu réaliser avant de conclure.
\newpage{}
\section{Mon stage}
\subsection{Présentation de la structure d'accueil}
\section{Les structures d'acceuil}
\subsection{Présentation des structures d'accueil}
\paragraph{}
RÉSIF-DC est géré par différents organismes chapauté par le CNRS. Quand j'ai signé ma convention, je l'ai fait avec l'Unitée Mixte de Recherche ISTERRE. En effet, le bureau dans le quel je travail se situ dans les locaux de cet UMR. Toute fois, le personel travaillant dans l'équipe RÉSIF-DC est sous la diréction de l'OSUG et de RÉSIF. Ainsi, j'ai été amené à integrer une équipe d'ingénieurs OSUG.
\begin{figure}[H]
@ -44,7 +52,9 @@
\end{figure}
\subsection{L'OSUG}
\paragraph{}
L'Observatoir des Sciences de l'Univers de Grenoble fédére des ingénieurs pour permetre à la recherche dans les sciences de l'Univers, de la Terre et de l'environement. Ainsi, l'OSUG permet au insititut d'avoir du personel qualifié pour pouvoir assurer une mission d'observation.
L'Observatoir des Sciences de l'Univers de Grenoble fédére des laboratoires pour permetre à la recherche dans les sciences de l'Univers, de la Terre et de l'environement, une communication plus facile, une répartition des tâches éfficace et une collaboration favorisée.
\paragraph{}
Ainsi, l'OSUG permet aux insitituts d'avoir du personel qualifié pour pouvoir assurer une mission d'observation.
\subsection{ISTerre}
\paragraph{}
ISTerre (Instutut des Sciences de ta Terre) est un laboratoire créer en 2011 dont lobjectif scientifique est létude physique et chimique de notre planette. Le laboratoire est diviser en 2 sections, une à Chambery et lautre à Grenoble, toutes deux fédéré par l'OSUG. Le nombre de personne travaillant pour ce laboratoir est assez important : près de 300 personnes en additionant les 2 sites dont la pluparts sont scientifiques (\~20 \% du personel sont des technicien·ne·s). Pour donner une idée du pourvoir dacction du laboratoire, celui ci a un budget annuel denvirion 15 millions deuros.
@ -57,7 +67,17 @@
\end{enumerate}
\subsection{RÉSIF}
\paragraph{}
Le réseau sismologique et géodésique français (RÉSIF) est un ensmble de capteurs géophysiques implentés partout en France qui permettent dalimenter, en partie, linfrastructure EPOS (European Plate Observing System). Ainsi les données colléctées par RÉSIF sont disponible via plusieurs webservices qui sont standardiser par plusieurs organismes tel que EIDA, FDSN et RÉSIF même. RÉSIF c'est aussi un organisme regroupant des chercheur\textperiodcentered euse\textperiodcentered s qui étudient les données récoltées.
Le réseau sismologique et géodésique français (RÉSIF) est un ensmble de capteurs géophysiques implentés partout en France qui permettent dalimenter, en partie, linfrastructure EPOS (European Plate Observing System). C'est l'organisme majeur qui contibut à cette alimentation en France. Ainsi les données colléctées par RÉSIF sont disponible via plusieurs webservices qui sont standardiser par plusieurs organismes tel que EIDA, FDSN et RÉSIF même. RÉSIF c'est aussi une infrastructure de recherche (IR) regroupant des chercheur\textperiodcentered euse\textperiodcentered s qui étudient les données récoltées pour comprendre la dynamique et les aléas de l'interieur de notre planète ainsi que les interactions atmosphère/océan.
\paragraph{}
L'infrastructure est né d'un besoin de prévention dans le cadre de secousses sysmique. Historiquement, c'est le séisme de Teil (2019), près de Castres, qui a confirmé la vulnérabilitée de la France faces au aléas sismiques par son impacte social et éconimique.
\paragraph{}
Ainsi, RÉSIF contribut
à l'évaluation des aléas et des risques liès à une acctivitée sysmique,
à l'évaluation rapide des dégâts,
à la gestion de crises,
aux normes de construction des bâtiments,
à l'établissement d'un lien entre les dégâts sur un immeuble et la sismicité,
les secousses induite par lactivité humaine, etcetera.
\section{Présetation du stage}
\subsection{Gestion de projet}
@ -79,33 +99,64 @@
\subsection{Environement}
\paragraph{}
Le laboratore est pricipallement constitué de chercheurs dans diférrents dommaines ce qui donne un environement très riche où les interaction entre les membre des different services sont assez riches.
Cependant, durant mon stage, j'étais la pluspars du temps dans un bureau avec une équipe de 4 personnes dont un CDD. L'équipe se composait d'un chef de projet, un developpeur logiciel, un administrateur systeme et un data enginier.
Le laboratore est pricipallement constitué de chercheur\textperiodcentered euse\textperiodcentered s dans diférrents dommaines, ce qui donne un environement très riche où les interactions entre les membre des different services sont assez édifantes.
Cependant, durant mon stage, j'étais la pluspars du temps dans un bureau avec une équipe de 4 personnes. L'équipe se composait d'un chef de projet, un developpeur logiciel, un administrateur systeme et un data enginier.
\subsection{L'existant}
\paragraph{}
Quand je suis arrivé, les differents web services que j'avais à tester était terminés et déployés. Il exister déja une suite de tests développée par Catherine Lecompte mais les tests etait effectués sans bibliothèque de test, ce qui rendait difficile son maintient.
\paragraph{}
L'équipe RESIF-DC, dans la quelle je me trouvé, avait déja effectuer quelques test avec la bibliothèque \textit{behave} pour dessider quelle bibliothèque utiliser.
L'équipe RESIF-DC, dans la quelle je me trouvais, avait déja effectué quelques tests avec la bibliothèque \textit{behave} pour decider quelle bibliothèque utiliser pour le stage.
Cependant, pour ne pas brider ma créativité, il a était déssidé que je parte de 0 et que selement une fois que j'aurai finit d'écrir mes scénarios, je regarde les différents scénarios définit par l'équipe.
\subsection{L'objectif}
\subsection{Les objectifs}
\paragraph{}
Les objectif de mon stages était multiples. En effet, je devais développer une suite de tests cappable de verifier le comportement des web services dans des cas de mise en difficulté ainsi que de verifier le simple fonctionement de ces derniers.
Les objectif de mon stages était multiples. En effet, je devais développer une suite de tests cappable de verifier le comportement des web services dans des cas de mise en difficulté ainsi que de verifier le simple fonctionement de ces derniers. Un des effet de bord de cela est que j'ai pu détécter des bugs des \textit{web setvices}.
\paragraph{}
Ainsi, lors d'une nouvelle implémentation d'un web service, les résultats des requettes peuvent être comparés. Aussi lors d'un changement d'infrastructure, qui peuvent ammener une migration des serveurs, le test du fonctionement des web services peuvent être réalisé rappidement.
\newpage{}
\section{Le développement des tests}
\subsection{La prise en main du context}
\paragraph{}
Lors de ma première semaine de stage, mon principal objectif était de prendre en main le context dans le quel j'allais travailler. En effet, j'ai principalement lu de la documentation sur les thermes téchniques (glossaire), sur la sismologie, sur les standard fdsn, \dots
\paragraph{}
Ensuite, j'ai pu commencer à prendre en main l'outil behave et me rafraichir la mémoire au niveau du langage python. Après ca, j'ai pu commencer à réfléchir à des scénarios de tests. C'est ce que j'ai principalement fait pendant 3 jours. En paralele de ca, j'ai pu prendre en main d'autre bibliothèque tel que lxml.
\subsubsection{La FDSN}
\paragraph{}
La \textit{Federation of Digital Seismograph Networks} (FDSN) est une organisation qui fedère des laboratoire de sismologie dont le but est d'installer et maintenire des station sismologiques ausibien nationalement qu'internationalement. La FDSN a notament normaliser la diffusion de données et métadonnées par des format tel que le \textit{MiniSEED} ou le \textit{StationXML}.
\subsection{Les outils utilisés}
\subsubsection{Python}
\paragraph{}
Python est un langage de programation orienté objet qui est accèssible à un large publique. Cette accessibilité apportent certaine contraites, notament au niveau objet. En effet, des notion importantes du paradigme objet ne sont pas présentes, ce qui peut géner lors de la conception du logiciel.
\subsubsection{Pipenv}
\paragraph{}
\textit{Pipenv} est un outil de gestion d'environement virtuel. Un environement virtuel est un ensemble de programe qui viennent s'ajouter ou remplacer une version du même programe. En python, cela sert principalement a importer le verssion de python avec le quelle a été implémenter le code et les bibliothèques utilisé par celui-ci. Ainsi, \textit{pipenv} permet d'ajouter des bibliotheque et framework a un environement virtuel. Ainsi, lors du déploiment du projet, il n'y aura pas de conflit de version ou de bibliothèques manquantes grâce à l'environement virtuel. Autrement dit, c'est comme si la machine qui éxécute le projet avais la même configuration que la machine qui servit a developper.
\subsubsection{Behave}
\paragraph{}
\textit{Behave} est l'implementation en python de \textit{cucumber}, un framework de test comportemental. Cela permet de tester le comportement d'un logiciel sans rentrer dans le code, contrairement à d'autre types de tests tel que les tests unitaire ou les tests fonctionels. Cela possède son lot d'aventages et d'inconveignant. Pour ce qui est des aventages, je n'ai pas eu besoin d'entrer dans le détail des web services, d'autant plus que ces codes sont dificiles à comprendre car ils n'ont pas été codés dans un langage de programation mais en SQL. Un des inconveignant de ce type de test est qu'il est plus difficile de reperer le morceau de code qui provoque un bug détécté par les tests comportementeaux.
\paragraph{}
Le fontionement du framework est assez simple. Il faut faire des fichier de \textit{feature} écris en langage naturel (français, anglais, mandarin, \dots). Ensuite, chaque ligne est assochier à un morceau de code qui vas faire les tests. Par example, une ligne "Étant donné le parametre network égale à FR" est associer à un bout de code qui vas dire au contexte du test que le réseau utiliser est FR.
\subsubsection{Git}
\paragraph{}
Git est un outil de verssionage, principalement utilisé dans le développement. Il permet de pouvoir revenir à tout moment sur une verssion précédente du code produit pour pouvoir ainsi revenir en arrière en cas de déviation trop important entre le code et ce qui est attendut. Git permet aussi de diviser un projet en branches, c'est à dire que plusieurs personnes peuvent colaborer sans ce gener si ces personnes se situe sur des branche différentes. Quand le travail sur deux branche est terminé, il est possible de les fusioner (\textit{merge}) pour que le projet continu avec la production des colaborateur\textperiodcentered ice\textperiodcentered s des branches fusionées.
\paragraph{}
Une extention de git, nommé \textit{git flow} est faite pour avoir une arboréssance git optimal pour la colaboration (cf. Figure~\ref{fig:gitflow}). Elle divise le projet en deux branche: \textit{main} et \textit{develop}. La branche \textit{main} coresspond au code fonctionel, pret à être utilisé et stable. C'est la branche à utiliser pour un\textperiodcentered e utilisateur\textperiodcentered ice\textperiodcentered s lambda. La branche \textit{develop} coresspond à la verssion instable du projet, celle qui tend à être stable. C'est la brache dans la quelle les devloppeur\textperiodcentered{}euse\textperiodcentered s fusionent (\textit{merge}) leur travail. Ce travail est produit dans des branches spécifiques appeler \textit{feature} qui coresspond à une fonctinalité du programe. Ainsi, les bugs du à la progression du code de la fonctinalité n'affecte pas les autres colaborateur\textperiodcentered ice\textperiodcentered s qui travaillent sur autre chose.
\begin{figure}[H]
\centering
\caption{Schéma du fonctionement de git flow}
\includegraphics[scale=0.4]{gitflow}
\label{fig:gitflow}
\end{figure}
\subsubsection{Gitlab}
\paragraph{}
Gitlab est un logiciel de type serveur permetant de stoquer un dêpot git et de le redistrubuer ensuite. Il permet la centralisation du code ce qui aboutil à une collaboration plus éfficace. En effet, Ce qu'apport gitlab par rapport à un simple serveur de partage de fichiers comme \textit{nfs} ou \textit{ftp}, c'est de pouvoir avoir une version sur sa propre machine, coder sur cette verssion local et soumettre ces moddification au dêpot distant (gitlab) avec une gestion intéligente des conflits (quand plusieurs personnes modifie un même fichier au même endoit).
\paragraph{}
Gitlab possède aussi une interface web qui permet de faire de la gestion de projet grâce à la séction \textit{issue} et \textit{tableau}(cf. Figure~\ref{fig:gitlabBoard}). En effet, pour une tâche donnée, il fallait faire une \textit{issue} qui y corréspondait. On peut voir une \textit{issue} comme un \textit{post it} qui peut être détaillé et commenté. Alors, chaque \textit{issue} était labbelisé par un ou plusieurs tags qui permette d'identifier les différente categories à la quelle corréspondait la tâche. Parmis ces tags, on peu retrouver les tags: \textit{TODO}, \textit{IN PROGRESS} et \textit{DONE}. C'est la que la séction tableau de gitlab intervient. En effet, cet outil permet de visualiser les \textit{issues} par tags. Si l'on met les 3 tags précédants en collone du tableau, alors, on simuler un tableau \textit{scrum} et suivre cette methode de travail.
\begin{figure}[H]
\centering
\caption{Capture d'écran du tableau de gitlab}
\includegraphics[width=\textwidth]{gitlabBoard}
\label{fig:gitlabBoard}
\end{figure}
\subsection{Les données}
\paragraph{}
Les données sont réparties en plusieurs entités: le réseau, la station et le cannal. Elle sont répartit de la manière suivante:
@ -132,6 +183,7 @@
Comme on peut le voir sur la Figure~\ref{fig:parcourDonnée}, la donnée récoltée par les stations RÉSIF est diréctement envoyée au \textit{noeud A} qui s'occupe de la valider. Une fois ce travail terminé, Cette donnée est transmise au \textit{noeud B} qui à pour mission de la distribuer aux utilisateur\textperiodcentered ice\textperiodcentered s, notament le Commissariat à lÉnergie Atomique (CEA) qui peux lancer des alerte au population en cas de données montrant un séisme dangereux. Pour palier à cette mission, le noeud B met a dispositions plusieus \textit{web services} à la disposition de tout\textperiodcentered se\textperiodcentered s.
\subsection{Les differents web services}
\subsubsection{Comment utiliser un web service}
\label{txt:explicationURL}
Durant mon stage, j'ai du travailler sur différants web services.
Chaque web service est requetable par URL. L'URL est composé en différentes partie
@ -140,11 +192,13 @@
\item \textit{le chemin vers le web service}: /fdsnws/station/1/query. Ce chemain permet d'identifié le web service que l'on veut requeter. Il est composer en 4 parties: la norme(fdsnws), web service(station), la version(1), et le mode d'inerogation(query).
\item \textit{les parametres}: ?net=FR\&sta=CFF\&level=channel. Le début de la liste de parametre doit commancer par un ?. Ensuite, chaque parametre doit être séparé par un \&. Enfin, la forme que prend la définition d'un parametre est $<$parametre$>$=$<$valeur$>$
\end{itemize}
Ainsi une URL possible peut être \href{https://ws.resif.fr/fdsnws/station/1/query?net=FR&sta=CFF&level=channel}{ws.resif.fr/fdsnws/station/1/query?net=FR\&sta=CFF\&level=channel}
Voici les differents web services que j'ai testé.
Ainsi une URL possible peut être \\
\href{https://ws.resif.fr/fdsnws/station/1/query?net=FR&sta=CFF&level=channel}{ws.resif.fr/fdsnws/station/1/query?net=FR\&sta=CFF\&level=channel}
\paragraph{}
Pour acceder au données, il faut interoger le bon \textit{web service} avec une URL structurée. Voici les differents web services que j'ai testé.
\subsubsection{Station}
\paragraph{}
Le web service \textit{\href{https://ws.resif.fr/fdsnws/station/1}{station}} permet de récuperer les méta données des stations de mesure. C'est à dire, leur nom, leurs positions, les cannaux disponible, etcetera. Bien qu'il soit possible de récuperer ces méta données sous forme de text, le principal format pour ce genre de requette est le StationXML, un dérivé du XML. Ce format permet un traitement numerique plus facile ainsi qu'une plus grande capacité à contenir des informations qu'un format texte habituel. Voici deux exemples de requettes, \href{https://ws.resif.fr/fdsnws/station/1/query?net=FR&sta=CFF&cha=HHZ&level=channel&format=xml}{une sous le format XML} et \href{https://ws.resif.fr/fdsnws/station/1/query?net=FR&sta=CFF&cha=HHZ&level=channel&format=text}{la meme requete sous le format text}.
Le web service \textit{\href{https://ws.resif.fr/fdsnws/station/1}{station}} permet de récuperer les méta données des stations de mesure. C'est à dire, leur nom, leurs positions, les cannaux disponible, etcetera. Bien qu'il soit possible de récuperer ces méta données sous forme de text, le principal format pour ce genre de requette est le StationXML, un dérivé du XML. Ce format permet un traitement numerique plus facile ainsi qu'une plus grande capacité à contenir des informations qu'un format texte habituel. Voici deux exemples de requettes, \href{https://ws.resif.fr/fdsnws/station/1/query?net=FR&sta=CFF&cha=HHZ&level=channel&format=xml}{une sous le format XML} et \href{https://ws.resif.fr/fdsnws/station/1/query?net=FR&sta=CFF&cha=HHZ&level=channel&format=text}{la meme requete sous le format text} (lien cliquable).
\begin{figure}[H]
\caption{Exemple d'une requete \textit{station} demandant du StationXLM pour la station FR.CFF }
\includegraphics[width=\textwidth]{StationXMLExemple}
@ -231,12 +285,25 @@
\paragraph{}
Une des principales dificultés que j'ai pu rencontré lors de ce stage est le comportement de \textit{behave}. En effet, quand on execute un scenario, behave va le faire échouer seulement si une exception est levée, c'est à dire, qu'une erreur a été rencontré ou qu'un test de nature spécifique (assertion) n'est pas passé. Aussi, certains tests peuvent passer sans que le web service ce soit comporté comme souhaité.
\paragraph{}
Par exemple, si je veux tester un code de retour HTTP égale à 400 en voulant tester un paramètre, ce code peut être renvoyer à cause d'un autre paramètre déféctueu. Ainsi, le test passra mais n'aura pas valider le comportement attendu. Un autre exemple est quand par exemple je devais tester que le format texte était cohérant avec le format XML. Ici, j'avais un problème de code qui faisait que les deux requettes que je faisait était identique et donc, le résultat était lui aussi identique (tout les 2 au format XML).
Par exemple, si je veux tester un code de retour HTTP égale à 400 en voulant tester un paramètre, ce code peut être renvoyer à cause d'un autre paramètre déféctueu. Ainsi, le test passra mais n'aura pas valider le comportement attendu. Un autre exemple est quand par exemple je devais tester que le format texte était cohérant avec le format XML. Ici, j'avais un problème de code qui faisait que les deux requettes que je faisait était identique et donc, le résultat était lui aussi identique (tout les 2 au format XML) et je ne l'ai remarqué que lorce que je l'ai vu dans le code par hasard car \textit{behave} ne s'en rendais pas compte (cf. Figure~\ref{fig:behaveOK}).
\paragraph{}
Pour palier à ce problème, à la fin de chaque implémentation, je verifiais à la main que le test passé coraissponde bien au comportement souhaité.
Pour palier à ce problème, à la fin de chaque implémentation, je verifiais à la main que le test passé coraissponde bien au comportement souhaité grâce à l'argument no-capture (cf. Figure~\ref{fig:behaveNoCapture}). Mais la limite de cette methode est que si il y a une régréssion dans le code, les tests qui fonctinait coréctement avant peuvent ne plus fonctioner après.
\begin{figure}[H]
\centering
\caption{Capture d'écrand du test d'équivalance entre le format XML et texte}
\includegraphics[width=\textwidth]{behaveOK}
\label{fig:behaveOK}
\end{figure}
\begin{figure}[H]
\centering
\caption{Capture d'écrand du test d'équivalance entre le format XML et texte avec l'argument no-capture}
\includegraphics[width=\textwidth]{behaveNC}
\label{fig:behaveNoCapture}
\end{figure}
\subsection{Au delà du stage}
\paragraph{}
Tout au long de mon stage, je devais avoir à l'espris que mon code sera repris et que le logiciel produit devra être utiliser le plus simplement possible. Ainsi, J'ai pu pensé à des amélioration tel que la mise en cache de certaines requettes pour accélérer les test, l'écriture d'un script qui permet de simplifier le lancement des tests, un model de classes qui permet une genericité maxiamle. Certaines de ces idées ont dût être écarter par manque de temps. C'est donc un piste pour continuer l'implémentation des tests.
Tout au long de mon stage, je devais avoir à l'espris que mon code sera repris et que le logiciel produit devra être utiliser le plus simplement possible. Ainsi, J'ai pu pensé à des amélioration tel que la mise en cache de certaines requettes pour accélérer les test, l'écriture d'un script qui permet de simplifier le lancement des tests, un model de classes qui permet une genericité maxiamle. Certaines de ces idées ont dût être écartées par manque de temps et du fait de le trop grand complexité par rapport au contexte. C'est donc un piste pour continuer l'implémentation des tests.
\section{Bilan}
\paragraph{}
À la fin de mon stage, j'ai pu réaliser toute une panoplie de tests sur six web services differents:

Loading…
Cancel
Save