Académique Documents
Professionnel Documents
Culture Documents
1
Table des matières
Notations et abréviations: ........................................................................................................................ 3
Introduction : ........................................................................................................................................... 5
Présentation de l’entreprise : ................................................................................................................... 6
Présentation des tâches : .......................................................................................................................... 6
Contexte : ............................................................................................................................................ 7
Tâches à réaliser : ................................................................................................................................ 7
Contraintes : ........................................................................................................................................ 7
Facteurs clé de succès : ....................................................................................................................... 7
Réalisations : ........................................................................................................................................... 8
Installation de poste :........................................................................................................................... 8
Organisation : ...................................................................................................................................... 8
Méthode de travail :........................................................................................................................... 11
Réalisations Techniques : ...................................................................................................................... 13
Première mission : calcul et affichage de l’âge ................................................................................. 13
Seconde mission : calcul et affichage de la clé DRT ........................................................................ 16
Intérêt du résultat pour l’entreprise : ................................................................................................. 19
Retour par rapport au travail effectué :.............................................................................................. 19
Expérience humaine : ............................................................................................................................ 20
Ce que j’ai appris :............................................................................................................................. 20
Mon ressenti : .................................................................................................................................... 20
Conclusion :........................................................................................................................................... 20
2
Notations et abréviations :
[5] JSP : Type de fichier similaire aux fichiers HTML mais pouvant exécuter du Java
[8] Gitlab : Application qui permet de travailler en équipe sur des projets informatiques
[15] Debug : Mode d’exécution du code qui permet de s’arrêter sur des lignes choisies
[18] Fonction : Représente un ensemble de codes qui une fois exécuté effectue, comme son nom
l’indique, une fonction précise.
[20] Bouchon : Pratique qui permet de forcer l’utilisation de certaines données, souvent utilisé pour
effectuer des tests
3
[26] Modulo : Opération dont le résultat est le reste d’une division euclidienne
[27] Boucle : Répétition d’une même action qui peut être paramétrée avec des conditions
4
Introduction :
Mon stage de fin de première année de Bachelor Numérique
a été un des temps fort de l’année, en effet c’était pour moi la première occasion de découvrir
le domaine d’activité dans lequel je souhaitais m’orienter depuis le collège. Celui-ci a eu lieu
du 12 mai au 8 juillet 2022.
Après avoir eu une attirance dans les sociétés évoluant dans le domaine de mes passions, j’ai
orienté mes recherches vers de grandes structures angevines, en effet ce choix me permettait de
ne pas subir d’éventuelles restrictions dans le cadre de la crise COVID mais aussi de pouvoir
poursuivre l’exercice de mon emploi étudiant débuté à la rentrée 2021/2022.
Je souhaitais également dans le cadre de ce premier stage évoluer dans un service informatique
conséquent me permettant de découvrir de nombreuses fonctions, mais surtout de pouvoir me
voir confier des missions qui me seraient propres dans le développement web ; dont les résultats
seraient vérifiables avant la fin de mon stage. Je voulais ainsi me confronter à l’utilité ou non
de mes connaissances et savoir-faire dans une entreprise.
J’ai donc réalisé mon stage au sein du service informatique de la société CNP[1] Assurances, je
connaissais déjà cette entreprise pour y avoir réalisé mon stage de classe de 3ème ; au cours
duquel j’avais navigué dans différents services. L’accueil qui m’y avait été réservé au service
informatique avait été révélateur et confirmait mon souhait de poursuivre dans l’informatique
et le numérique.
My internship of first year’s ending of Numeric Bachelor was a key moment from this year, in
fact, that was the first occasion to discover my domain of activity in which I oriented my course
choice since high school.
After researched an internship in enterprise who works in my hobby’s domain, I redirected my
research to big enterprises located in Angers indeed, that choice of research permitted myself
to take care of possible COVID restriction but also to continue my student job.
I also wished for my first internship to progress in a consequent computer science department
to be able to discover many new aspects of that kind of job. I also wanted to be able to realize
task that the enterprise gave me, in the web development domain of which I can see the results.
I wanted to confront my knowledges and skills in an enterprise.
I realized this internship in the society CNP[1] Assurances, I already knew this enterprise because
I already did my Year 9 internship here. During this past internship, I had the opportunity to
navigate and discover all kind of services and that was the discovering of the computer science
department that marked myself and gave me the desire to work in this domain.
5
Présentation de l’entreprise :
Le groupe CNP[1] Assurances est un acteur de référence de
l’assurance de personnes en France, en Europe et au Brésil. Assurances vie, retraite emprunteur,
prévoyance, santé services … CNP[1] Assurances répond aux multiples changements qui
affectent la vie de ses clients.
L’entreprise CNP[1] Assurances voit le jour en 1959 et est la fusion de 2 branches de la Caisse
des Dépôts et Consignation reprenant les activités d’assurances en cas de décès ou d’accident,
c’est en 1992 que l’historique CNP[1] devient société anonyme privée et change de nom.
Elle est actuellement le leader en assurances emprunteur et la deuxième assurances vie en
France. C’est le septième assureur européen et se développe actuellement au Brésil où elle
occupe la troisième place.
Les produits de CNP[1] Assurances sont distribués par deux partenaires : La Banque Postale et
le Groupe BPCE (Banque Populaire et Caisse d’Épargne). 78 % des actions de CNP[1]
Assurances sont détenues par la Banque Postale qui devient ainsi l’actionnaire principal.
CNP[1] Assurances emploie 5 156 employés dont un peu plus de 2200 à l’international, en
France il y a trois sites situés à Angers, Arcueil et Paris.
J’ai réalisé mon stage au sein de l’équipe de développement du service informatique de CNP[1]
Assurances, ce service a une fonction primordiale au sein de l’entreprise ; son efficacité et sa
proactivité sont indispensables pour le bon fonctionnement de l’entreprise interconnectée au
quotidien avec ces différents partenaires. Mais gérant surtout de la donnée sensible en lien
notamment avec la santé ainsi que des supports monétisés (ex : bon au porteur).
L’équipe de développement, elle, au quotidien assure les parties innovation, maintenance et
optimisation des différentes applications mises à disposition des gestionnaires.
6
Présentation des tâches :
Contexte :
Au cours de mon stage j’ai travaillé exclusivement sur
l’application YVOIRE, celle-ci est pilotée par CNP[1] Assurances mais également par des
prestataires venant de chez SOPRA STERIA.
YVOIRE est une application web qui permet de visualiser, modifier et traiter les « affaires »
liées aux contrats d’assurances. Cette application possède de nombreuses fonctionnalités telles
que : la possibilité de filtrer les affaires, faire des recherches, visualiser les documents liés à
l’affaire...
YVOIRE est principalement codé en Java[2] qui représente 90% du code constituant
l’application, on retrouve aussi un peu de JavaScript[3] (représente 7% du code) ainsi que des
bribes de Perl[4]. Le rendu final sur le navigateur est assuré par des fichiers .jsp[5].
Tâches à réaliser :
A l’issue de mes entretiens d’embauche, j’avais déjà pu
échanger avec mon maître de stage sur les missions qui me serait confiées, elles ont été
définies en fonction des besoins de l’entreprise mais aussi en adéquation avec mon niveau de
connaissances en fin de première année pour que je puisse les gérer en autonomie.
Ainsi j’ai démarré mon stage en connaissant mon programme, à l’origine deux tâches m’ont
été confiées. La première consistait à afficher l’âge de l’assuré à un endroit précis d’une page,
la seconde à calculer la clé DRT[6] puis l’afficher sur même page.
Ayant terminé ces deux tâches plus tôt que prévu il m’a ensuite demandé de placer le bloc
d’informations utilisé en haut de cette page avec une animation. Je reviendrai plus en détails
sur ces tâches plus tard.
Contraintes :
Les tâches m’ayant été confiées consistaient à mettre à jour
l’application YVOIRE en y apportant de nouvelles fonctionnalités, je me devais donc d’utiliser
le même langage que celui de l’application web, à savoir le Java[2].
Il était impératif que les 2 missions initiales soient en production à la fin de mon stage, d’une
part car cet engagement correspondait au cahier des charges défini ; mais aussi me permettant
à titre personnel d’être challengé sur un timing à tenir ; je devais ainsi donner régulièrement
mon état d’avancement.
7
Le second facteur de réussite était l’approbation des fonctionnalités ajoutées à l’application
web par mon maître de stage et par les utilisateurs ayant demandé l’ajout de ces
fonctionnalités.
Réalisations :
Installation de poste :
Lors de mon intégration après avoir réalisé des modalités
liées à la sécurité, et avoir eu la présentation de l’équipe ; une station de travail m’a été
confiée. J’ai donc installé mon poste (PC Portable), en créant ma session Windows et en
configurant mes mots de passe pour Windows ou le bitlocker[7].
Ensuite j’ai commencé la configuration de mon poste, pour cela j’ai suivi un wiki qui était
présent sur le Gitlab[8] de l’équipe dans laquelle je me trouvais. Cela consistait en
l’installation des ressources Java[2] ainsi que la création de répertoires.
Une fois les ressources nécessaires installées je suis passé à la configuration de mon IDE[9].
Pour cela j’ai importé le projet de l’application web YVOIRE, établit un lien entre Eclipse[10]
qui est l’IDE[9] sur lequel j’ai travaillé et mon compte Gitlab[8]. Puis j’ai configuré un serveur
local et paramétré le formateur[11] d’Eclipse[10].
Organisation :
L’équipe au sein de laquelle j’ai évolué pendant mon stage
travaillait sur la méthode Agile . C’est-à-dire qu’au sein de cette équipe, le travail s’effectue
[12]
par sprint[13] de deux semaines. Cette méthode de travail a pour avantages de pouvoir changer
le planning plus rapidement et faire face aux imprévus.
Par rapport à une méthode plus conventionnelle, de légères mises à jour vont être effectuées sur
YVOIRE toutes les deux semaines au lieu d’une conséquente tous les trois mois ; ainsi les
fonctionnalités sont dans un premier temps que peu développées mais bien présentes puis sont
améliorées au fil des sprints[13]. Cela permet de minimiser la présence de bugs et la correction
de ceux-ci. Je vais maintenant détailler le déroulement d’un sprint[13] au sein de l’équipe :
Chaque matin une petite réunion nommée « Stand-Up », d’une durée de quinze minutes se tient,
chaque développeur décrit les tâches effectuées la veille ainsi que les informations importantes
qu’il a à communiquer et les problèmes rencontrés, il demande le soutien de l’équipe s’il en a
besoin.
Le lundi, après le Stand-Up, une instruction des dossiers est faite avec tous les développeurs.
Toutes les requêtes sélectionnées par le product owner (mon maître de stage) faites par les
utilisateurs d’YVOIRE sont pris en compte, que ce soit l’ajout de fonctionnalités ou bien la
correction de bugs puis elles sont pesées[14]. C’est-à-dire que les développeurs évaluent la
complexité ainsi que la durée de réalisation d’une requête. Une fois cette étape passée, la requête
est ajoutée au sprint[13] et attribuée à un développeur sur Jira, un outil qui permet de créer des
requêtes, de les peser et de suivre leur avancement durant le sprint[13].
8
Les captures d’écrans suivantes vous donnent un aperçu de l’application Jira :
Vu globale d’un sprint[13] sur Jira, à droite dans le rond gris est affiché le poids de la tâche.
9
Il est important de mettre à jour l’état d’avancement de sa tâche sur Jira afin que l’avancé du
sprint[13] ne soit pas biaisé. Pour cela une tâche passe par plusieurs étapes :
- A faire : la tâche n’est pas encore commencée
- En cours : la tâche est en cours de réalisation
- En attente : la tâche est au point mort
- A Démontrer : la tâche est en attente de la Démo de fin de sprint[13]
- Merge request : la tâche est en attente d’éventuelle correction et de deux approbations
- Terminé : la tâche est finie et va être intégrée à l’application web.
Le sprint[13] se conclu par deux événements, la démo fonctionnelle et la démo technique. La
première démo a pour but de présenter les nouveaux ajouts, fonctionnalités, modifications et
corrections d’éventuels bugs sur YVOIRE ; aux représentants des utilisateurs de l’application
web.
Cette première démo, au-delà de présenter le fonctionnement des nouveautés permet surtout
d’avoir des retours par rapport au travail effectué. Durant cette démo des idées d’ajouts de
fonctionnalités sont aussi évoquées.
La seconde démo, elle, n’est destinée qu’aux développeurs. Elle permet de faire le point sur la
correction de bugs mineurs, les modifications sur les bases de données etc... Cette seconde démo
permet aussi de faire un bilan sur le sprint[13] passé.
10
Méthode de travail :
La première chose à faire avant de commencer à coder est de
mettre à jour le statut de la tâche que l’on effectue sur Jira, l’étape suivante est de créer une
nouvelle branche dans Eclipse[10].
Création d’une nouvelle branche, IDD-2423 et IDD-2602 sont des branches créées pour deux
tâches distinctes.
Créer une nouvelle branche permet de toujours avoir le code source inchangé à disposition et
facilite l’envoi de modifications de code sur Gitlab[8]. Cela permet également de mieux
s’organiser, en effet pour chaque tâche une branche est créée ; ainsi aucune confusion n’est
possible dans les tâches et dans le code.
Dès que la branche est créée, on peut commencer à coder ; on visualise le rendu de notre code
sur notre navigateur grâce au serveur local que l’on peut par ailleurs démarrer en mode
debug[15] ce qui est très utile.
Une fois le code fini, il faut créer une merge request[16], dans un premier temps il faut envoyer
les fichiers modifiés sur Gitlab[8], pour cela Eclipse[10] a des outils intégrés tel qu’un
comparateur de fichiers, grâce à celui-ci on peut distinguer les modifications apportées à un
fichier et ainsi supprimer des imports inutiles ou bien encore visualiser des erreurs
d’indentation ou des espaces inutiles.
11
Une fois que l’on a vérifié les fichiers, il ne reste plus qu’à envoyer les fichiers souhaités sur
Gitlab[8]. Pour cela il faut dans un premier temps « commit » ces fichiers, c’est-à-dire que l’on
donne l’information que se sont ces fichiers que je souhaite modifier puis « push, » c’est-à-
dire les envoyer sur Gitlab[8], Eclipse[10] permet de faire les deux en même temps.
Au moment de l’envoi, Eclipse[10] demandera si on souhaite envoyer les fichiers directement
dans une merge request[16] préalablement créée, mais on peut aussi juste « push » les fichiers
et ensuite créer la merge request[16].
Pour créer une merge request[16], il faut d’abord sélectionner la branche source, celle depuis
laquelle on a codé puis la branche visée, celle que l’on veut modifier qui est dans la plupart
des cas la branche master, car c’est la branche de l’application web.
12
Réalisations Techniques :
Première mission : calcul et affichage de l’âge
A gauche l’affichage du bloc d’informations sur le serveur local, à droite sur la version live
J’ai donc commencé par coder une fonction[18] calculant l’âge en dehors du code de
l’application web. Puis avec l’outil de développement intégré au navigateur j’ai recherché le
nom de la div[21] contenant le bloc d’informations sur mon serveur local, c’est à cette étape
que je me suis rendu compte que les données n’étaient pas disponible, j’ai donc refait la même
manipulation sur la version live.
13
Une fois le nom de la div[21] trouvé j’ai effectué une recherche de celle-ci dans Eclipse[10]. J’ai
alors trouvé le fichier .jsp[5] contenant le bloc d’informations, la variable attribuée à la date de
naissance ; et c’est à partir de celle-ci que j’ai retrouvé les fichiers où la date de naissance
était définie.
Ma fonction[18] getAge fonctionne ainsi : je récupère la date de naissance de l’assuré puis je la
compare à la date actuelle grâce à la méthode[22] between de la classe[19] Period que j’ai
importé puis je renvoie le résultat. Entre temps je convertis la date de naissance contenue dans
la variable temp en type LocalDate afin de rendre la comparaison possible.
J’ai ensuite crée une seconde fonction[18] setAge qui permet de faire passer l’âge en paramètre
d’une variable. J’ai réecris ces fonctions[18] dans un autre fichier pour pouvoir ensuite les
utiliser avec deux objets différents, seule la fonction[18] getAge est modifiée.
Après avoir écrit mes fonctions[18] je les utilise à l’aide de l’objet[23] BlocClient et de la
classe[19] PersonnePhysique. Personne est un objet[23] représentant l’assuré et BlocClient
représente le bloc où les informations de l’assuré apparaissent.
14
Enfin je crée une balise span[24] dans le bloc d’informations de l’assuré ou j’affiche l’âge, j’ai
uniquement modifié la taille de la police dans la partie CSS[25] du fichier .jsp[5].
15
Seconde mission : calcul et affichage de la clé DRT
Ensuite une transcodification des trois premières lettres est effectuée, chaque lettre équivault à
un chiffre, une fois la transcodification faite on multiplie la valeur des lettres par leurs
positions et on fait de même pour les chiffres.
La dernière étape consiste à faire la somme des résultats des multiplications valeurs/positions,
puis de faire un modulo[26] 23 de cette nouvelle somme. Si le nombre est inférieur à 10 il faut
rajouter un 0 devant.
Comme pour l’affichage de l’âge j’ai recherché sur YVOIRE à l’aide de l’outil de
développement la div[21] ou était affiché le numéro de DRT[6], puis exactement comme pour
l’âge j’ai ensuite recherché le nom de la variable contenant le numéro de DRT[6].
Cependant la tâche était ici bien plus ardue que pour l’âge, en effet le bloc d’informations
dans lequel est affiché cette donnée contient beaucoup d’informations. Tous les codes et
numéros dont celui de DRT[6] sont affichés grâce à une seule et même variable nommée
reference.
Donc trouver le nom de la variable ne suffisait pas il fallait également que je trouve la
fonction[18] qui génère ce bloc d’informations et plus particulièrement l’affichage du numéro
de DRT[6]. Pour ce faire je me suis beaucoup aidé de l’outil de recherche d’Eclipse[10] ainsi
que du mode debug[15].
16
La fonction[18] que j’ai écrite pour calculer la clé DRT[6] prend en entrée un argument, celui-ci
est le numéro de DRT[6]. Je crée ensuite une variable drt qui stocke le numéro de DRT[6] puis
grâce à la fonction[18] transformeReferenceAlphanumeriqueEnNumerique qui avait déjà
été codé, j’effectue la transcodification lettre/chiffre en mettant en argument le numéro de
DRT[6] et une table de transcodification qui elle aussi avait déjà été codée.
17
Juste avant ma fonction[18] j’ai placé un @override de manière à créer une surcharge[28] pour
pouvoir l’utiliser plus simplement dans le futur. Cette fonction[18] est aussi présente dans un
autre fichier là aussi pour des raisons de simplicité quant à l’appel de la fonction[18].
Une fois que j’ai écrit ma fonction[18], je dois gérer l’appel de celle-ci afin de pouvoir afficher
la clé DRT[6]. Pour cela j’ai modifié une fonction[18] déjà existante nommée
recupererRefeference et qui comme son nom l’indique récupère les références afin de
pouvoir les afficher correctement.
J’ai simplement rajouté une condition qui fait en sorte que si la référence est égale à une
demande de rachat alors j’exécute ma fonction[18], et la référence sera égale au résultat de
l’exécution de celle-ci. Etant donné que ma fonction[18] retourne directement la clé DRT[6]
ainsi que son numéro, je n’ai pas eu besoin de modifier le fichier .jsp[5] associé au bloc
d’informations où s’affiche le numéro de DRT[6].
18
Intérêt du résultat pour l’entreprise :
L’ajout de l’âge a reçu de bons retours, je ne m’y attendais pas étant donné la simplicité de
l’information affichée, néanmoins les utilisateurs ont vraiment apprécié cet ajout. Du côté de
mon code, j’avais oublié de supprimer un appel de fonction que je n’utilisais pas ce que j’ai
corrigé par la suite avant de merge[17] mon code.
L’affichage de la clé DRT, a aussi satisfait les utilisateurs d’YVOIRE ; bien qu’elle serve moins
que l’âge. Au niveau de mon code, j’avais codé un dictionnaire servant à faire la
transcodification lettre/chiffre ainsi qu’une boucle l’utilisant pour rien. Une fonction et une
table de transcodification que je n’avais pas remarqué existait déjà dans un autre fichier
spécialisé dans le calcul. J’ai donc suite au retour de mes pairs réécris ma fonction dans ce
fichier et utilisant ces outils avant de merge[17] mon code.
19
Expérience humaine :
Mon ressenti :
Les premières semaines ont été complexes, j’avais
l’impression de travailler au ralenti, mais au fil des semaines j’ai gagné en rapidité. Je pense
que mes difficultés des premières semaines étaient dû à la découverte d’un nouvel IDE[9],
d’un nouveau langage mais aussi du code de l’application WEB.
D’un point de vue humain, l’équipe a toujours été dans l’accompagnement et l’encouragement
me permettant de prendre confiance et de m’intégrer pleinement dans celle-ci et je les en
remercie tout comme l’a été M. HUBERT qui a su répondre à mes questions durant ce stage.
Conclusion :
Ce premier stage de fin d’année m’a permis de prendre
conscience de la dimension professionnalisante de ma formation. C’est réellement
l’aboutissement d’une année riche en enseignements, elle permet de se positionner de mesurer
ses forces et ses axes d’amélioration.
Au cours de ses 8 semaines ce n’est pas seulement des savoir-faire (nouveaux outils, nouveau
langage de programmation) que j’ai acquis mais bel et bien de nouvelles méthodes de travail
qui me seront très utiles dans la suite de mon cursus, à titre d’exemple je sous estimais jusque-
là les capacités de l’outil de debug[15] ; qui m’a été indispensable tout au long de ce projet.
20
Ce stage au-delà de m’avoir donnée une première expérience professionnelle dans le monde
de l’informatique, m’a conforté dans mon choix d’orientation ; le développement est de
manière affirmée la branche dans laquelle je souhaite progresser et évoluer ; les connaissances
acquises vont me permettre de progresser et de travailler d’une manière plus efficace et
différente qu’avant.
This first end year internship permitted myself to be aware of the professionalization aspect of
the numeric Bachelor. This is really the completion of a rich year of learning, this first
professional experience was the opportunity to position myself, and look at my strength and
weakness.
During these 8 weeks, I do not only learn skills (new tools, new programming language) I
also learn new works method that will be very useful in the future. For example, I
underestimate the utility and the power of the debug[15] tool which was essential during my
internship.
This internship beyond the fact that it gave me a first professional experience in computer
science, comforted myself in my course choose, indeed, computer science is the branch where
I want to progress et improve, all the knowledge that I acquired along this internship will
permit myself to be more efficient.
21