Académique Documents
Professionnel Documents
Culture Documents
Sujet :
Je dédie ce travaille
A ma mère Zahra, ma raison d’être, la lanterne qui éclaire mon chemin
et m’illumine d’affection et d’amour.
…CHAACHAI Youssef
Je désire aussi remercier toute l’équipe Adria B&T, pour leur accueil
chaleureux, leur confiance, leur disponibilité malgré la charge du
travail et pour l’intérêt qu’ils ont porté à mon travail.
PJ Pièce Jointe
XHR XMLHttpRequest
Figure 3.1 : Diagramme de cas d’utilisation pour l’agent souscripteur si l’OCR est activée…………………….33
Figure 3.2 : Diagramme de cas d’utilisation pour l’agent souscripteur si l’OCR est désactivée……………….34
Figure 5.4 : Formulaire de souscription après récupération des informations par OCR………………………….52
Ce présent document est la synthèse de mon travail dans le cadre du stage de fin d'études, qui s’intitule
« Développement et restructuration des modules frontend dans le domaine de la banque digitale »,
pour l’obtention du diplôme d’ingénieur d’Etat en Réseaux et Systèmes d’Information (IRSI) à la Faculté
des Sciences et Techniques (FSTG) de Marrakech, Université Cadi Ayyad.
Ce stage a été effectué au sein de la société Adria Business & Technology en tant que développeur
Frontend sur une durée de quatre mois.
Le projet de stage consiste à développer des modules dans le projet Adria Standard côté Frontend, et
aussi à reconstruire certains modules et fonctionnalités qui ne répondent plus aux exigences actuelles du
marché bancaire, et cela en intégrant de nouvelles technologies comme l’OCR par exemple
(Reconnaissance Optique de Caractères). La reconstruction des modules du projet implique également la
révision et l'amélioration de l'ancien code dans le but de renforcer sa qualité.
Pour réaliser ce projet, j’ai travaillé avec une équipe de Frontend qui implémente la méthode agile de
gestion de projets Scrum, nous avons travaillé avec diverses technologies notamment la librairie ReactJS
du langage de programmation JavaScript.
Ce rapport vise donc à décrire de manière détaillée les différentes étapes qui ont permis la réalisation de
ce projet.
This document presents the result of the work carried out within the end-of-studies internship project,
which is entitled "Development and restructuring of front-end modules in the field of digital banking",
to obtain the engineering diploma in Networks and Information Systems (IRSI) at the Faculty of Sciences
and Technologies (FSTG) of Marrakech, Cadi Ayyad University.
The internship was carried out within the company Adria Business & Technology as a Frontend developer
over a period of four months.
The project consists of developing modules in the Adria Standard project on the Frontend side, and also
reconstructing certain modules and functionalities that no longer meet the current requirements of the
banking market, and this by integrating new technologies such as OCR for example (Optical character
recognition). The reconstruction of the project modules also involves the revision and improvement of
the old code in order to strengthen its quality.
To realize this project, I have worked with a Frontend team that implements the agile method of project
management SCRUM, and we used various technologies including the ReactJS library of the JavaScript
programming language.
The aim of this report is therefore to describe in details the various stages that allowed us to realize this
project.
يهدف المشروع إلى تطوير وحدات في الواجهة األمامية من المشروع ،Adria Standardوكذلك إلعادة بناء بعض الوحدات والوظائف
التي لم تعد تلبي المتطلبات الحالية للسوق المصرفي ،وذلك من خالل إدماج تقنيات جديدة مثل OCRعلى سبيل المثال (التعرف البصري
على األحرف) .تتضمن إعادة بناء وحدات المشروع أيضًا مراجعة وتحسين الكود القديم من أجل تعزيز جودته.
لتحقيق هذا المشروع ،عملت مع فريق مطوري الواجهة األمامية الذي يعتمد المنهجية المرنة SCRUMإلدارة المشروع ،استخدمنا تقنيات
مختلفة بما في ذلك مكتبة ReactJSللغة برمجة .JavaScript
الغرض إذا من هذا التقرير هو الوصف التفصيلي لمختلف المراحل التي مكنتنا من تنفيذ هذا المشروع.
الكلمات الداللية :إعادة البناء ،الخدمات المصرفية الرقمية ،جودة الكود.OCR ،
Dans ce contexte, la société Adria Business & Technology offre à ses clients un large éventail de
fonctionnalités par le biais de ses application web et mobiles. Et pour préserver la progression
technologique de ses logiciels, l'entreprise cherche à adapter des solutions innovantes non seulement
pour asseoir ses spécificités, mais aussi pour se bâtir une identité propre.
L’amélioration des solutions logicielles est l'un des principaux objectifs d'Adria, par conséquent, mon
projet de stage consistait à mettre en œuvre de nouvelles idées qui feraient la différence et amélioreraient
le produit.
Ce présent rapport est composé de 5 chapitres, dans lesquels je présenterai en détail les différentes
tâches réalisées pour atteindre l'objectif du projet :
✓ Premier chapitre intitulé « Contexte général du projet » où je vais présenter l’entreprise d’accueil
et le déroulement général du projet.
✓ Deuxième chapitre intitulé « Analyse et spécification des besoins » où j’analyse les spécifications
avec une étude et critique de l’existant tout en proposant des solutions.
✓ Quatrième chapitre intitulé « Etude technique du projet » où je parle des outils techniques
utilisées pour le développement du projet.
✓ Cinquième chapitre intitulé « Mise en œuvre » où je présente des captures d’écran des interfaces
graphiques accompagné d’explications.
✓ Introduction
✓ Organisme d’accueil
✓ Rappel du sujet
✓ Conduite de projet
✓ Conclusion
2. Organisme d’accueil
2.1 Entreprise
Avec une profonde compréhension du secteur bancaire, Adria crée des produits bien conçus pour aider
les banques à établir leur stratégie numérique au sein d’une structure de coûts définie et adaptée à
chaque cas d’utilisation.
E-mail contact@adria-bt.com
Adria a pour principal objectif, assurer la qualité et l’aptitude des produits et services qu’elle offre à ses
clients, afin de satisfaire amplement les besoins exprimés ou potentiels des consommateurs. Elle expose
une variété de produits et services couvrant tous types de canaux de communication, à savoir le web et
le mobile.
o Adria banque directe Cross Canal : Il s’agit d’un produit modulaire qui se positionne sur
l’ensemble de la trajectoire commerciale et présente un espace en ligne intégré de la relation
avec le client disposant ainsi de fonctionnalités de marketing, de vente dématérialisée et
complètement en ligne, de services transactionnels, et de communication avec le client.
o Adria Mobile Branch Banking : Elle permet d’équiper les agences mobiles et les agents nomades
d’une solution qui couvre toutes les fonctionnalités d’entrée en relation, de souscription de
produits, de gestion de comptes et des services transactionnels....
Grâce à son potentiel inestimable, la société ADRIA a pu monopoliser 90% du marché bancaire au Maroc.
La figure ci-dessous illustre les principales références d’Adria B&T :
En raison de ses services de qualités, Adria a pu créer une base clientèle qui regroupe toutes les grandes
sociétés bancaires soit au Maroc ou à l’étranger. Le potentiel d'Adria l'a transformé d'une entreprise locale
à une société visant l'internationale.
ADRIA a pu acquérir la confiance de clients à l'international. Ainsi, elle a pu rapprocher ses services au
niveau Africain et Européen.
• Automatisation des tests et amélioration de la qualité de code Frontend : Adria utilise l’outil
SonarQube pour générer un rapport indiquant la qualité du code de l’application sous différents
aspects (Couverture des test unitaires, les duplications et les faiblesses du code…). L’objectif c’est
donc, d’améliorer les métriques du rapport de SonarQube en augmentant le nombre des tests
unitaires et en éliminant les faiblesses qui apparaissent dans le code.
• Mise en œuvre d’un mode démo de l’application web Adria Banking : l’objectif est d’implémenter
une solution pour simuler toutes les fonctionnalités de l’application web Adria Standard. Ce mode
sera utilisé aussi pour tester l’application coté frontend.
• Intégration d’un système de saisie automatique des informations client : l’objectif est de mettre en
œuvre un système paramétrable qui, lorsqu'il est activé, permettra à l'agent souscripteur d'utiliser la
fonctionnalité de scan CIN dans le parcours de l’entrée en relation dans le but d’automatiser
l’acquisition des informations personnelles des nouveaux clients inscrits, tout en minimisant le risque
d’erreur et le risque de rejets.
4. Conduite du projet
La conduite de projet est une démarche qui vise à structurer et optimiser le déroulement d’un projet.
Dans ce sens, nous avons choisi comme méthodes de développement les « Méthodes Agiles ».
Les méthodes de développement dites « méthodes agiles » offrent une approche révolutive à la façon
dont le client et l’équipe de production communiquent entre eux. Elles visent principalement à impliquer
le client dans la production du début à la fin du projet, et cela en adoptant un processus itératif et
incrémental basé sur une écoute du client, et de l’implémentation de tests tout au long du cycle de
développement.
Scrum est une « méthode agile » de gestion de projet, généralement pour le développement de logiciels.
Cette méthode de gestion, ou plutôt Framework de management de projet, a pour objectif d’améliorer la
productivité de son équipe.
Cette méthode introduit des temps de travails commun qui ont pour objets d’améliorer la motivation des
participants, de synchroniser les tâches entre les membres d’équipes, de débloquer les situations difficiles
et d’accroitre le partage connaissance.
Le choix de la méthode SCRUM comme méthode de travail est des plus logique vu son importance et sa
popularité.
La méthode SCRUM nous permet de découper le projet en sprint de 2 à 4 semaines. Chaque sprint
commence par une estimation suivie d’une planification opérationnelle et se termine par un produit
livrable et une démonstration de ce qui a été achevé. Avant de démarrer un nouveau sprint, on réalise
une rétrospective durant une petite réunion de l’équipe.
Rôles Description
Product Owner - Définit les spécifications fonctionnelles.
Scrum Master - S’assure que les principes et les valeurs de Scrum sont respectés.
Dans notre cas, nous nous sommes limités à trois réunions que nous pensions nécessaires :
- Planification du Sprint : lors de la réunion de planification de Sprint, nous déterminons les tâches
à accomplir pendant le sprint. Cette réunion avait lieu au début de chaque mois et durait une
heure.
- La mêlé quotidienne : nous avons organisé des réunions quotidiennes de durée ne dépassant pas
15 minutes. La réunion avait lieu tous les matins au cours de laquelle nous répondions à trois
questions avant de commencer à travailler, Qu'est-ce qu'on a réalisé la veille, Qu'est-ce qu'on va
accomplir aujourd'hui et quels sont les obstacles qui nous retardent.
5. Conclusion :
Dans ce chapitre j’ai présenté l’organisme d’accueil, rappelé le sujet de stage et expliqué les méthodes
choisies pour le bon déroulement du projet. Sur la base de cette étude, je pourrais élaborer une analyse
et une spécification des besoins du projet dans le chapitre suivant.
✓ Introduction
✓ Présentation générale du projet de stage
✓ Description et critique de l’existant
✓ Spécification des besoins
✓ Conclusion
Première partie : L’automatisation des tests et amélioration de la qualité de code Frontend, pour réaliser
cette tâche, j’ai travaillé avec une équipe composée de trois développeurs frontend, notre objectif était
d'écrire les tests unitaires pour augmenter le pourcentage de couverture du rapport SonarQube et
d’éliminer les faiblesses et les anomalies du code pour diminuer le nombre des "Code Smells".
Cette première partie était tellement importante pour moi, peut-être la plus importante, car elle m'a
permis d'intégrer l'équipe pour la première fois, et aussi elle m'a permis de découvrir la structure du projet
et les technologies de développement utilisées.
Deuxième partie : La mise en œuvre d’un mode démo de l’application web Adria Standard, dans cette
partie, nous avons essayé de créer un espace dans lequel les utilisateurs pourront découvrir la plateforme
sans avoir besoin d’un compte utilisateur. L'espace sera également utile pour l'équipe frontend afin de
tester les interfaces graphiques sans aucune interaction directe avec le serveur Backend, puisque celui-ci
prend plus de temps pour répondre.
Comme je l'ai dit à propos de la première tâche, cette partie m'a aussi permis d'en découvrir plus sur la
structure du projet et surtout la forme des réponses qui viennent des serveurs backend.
Troisième partie : Intégration d’un système de saisie automatique des informations client, cette tâche a
comme objectif de remplacer tous les formulaires d'informations personnelles des utilisateurs par un
système qui prend en entrée une carte d'identité (Carte nationale, passeport, …) et renvoie les
informations requises pour remplir automatiquement les champs du formulaire. Ce système doit être
paramétrable, c'est-à-dire que le propriétaire de l'application aura la possibilité d'activer/désactiver la
fonctionnalité OCR et de revenir à la manière classique (Saisie manuelle).
Le système qu’on vise à intégrer concerne principalement les applications de portefeuille bancaire où il y
a un agent chargé de créer des portefeuilles pour les clients de la banque, cet agent est notre seul acteur
ici.
Pour le cas d’Adria, l’équipe de développement frontend a intégré l'analyse de la qualité du code dans
leurs flux de travail, car de nombreux clients exigent un rapport sur la qualité du code pour s'assurer que
le produit est propre. Pour cela, Adria utilise SonarQube comme outil de gestion de la qualité du code.
La figure 2.1 illustre un ensemble des métriques relatives à la qualité du code de projet Adria Standard.
Ces métriques ont été enregistrées au moment où j'ai commencé le stage, et c'était à nous (l'équipe
Frontend) de les améliorer. Mais que nous disent exactement tous ces chiffres ?
Bugs : ce sont des erreurs de codage dans le programme. Le processus de recherche de bugs s'appelle le
débogage, ça commence après la première écriture du code et se poursuit par étapes successives à
mesure que le code soit combiné avec d'autres unités du programme.
Security Hotspot : ce sont des morceaux de code sensibles à la sécurité qui doivent être examinés
manuellement. Après examen, on constate qu'il n'y a pas de menace ou qu'il y a du code vulnérable qui
doit être corrigé.
Debt : ou dette technique, c’est une mesure de compromis dans la qualité du code pour compenser les
délais de livraison rapides. Comme la livraison rapide de prototypes ou de mises à jour est parfois
prioritaire sur l'optimisation du code et des performances, il est important de suivre dans quelle mesure
la qualité du code a été affectée après chaque livraison et de compenser ces compromis plus tard.
Code Smells : ils indiquent des faiblesses dans la conception qui peuvent ralentir le développement ou
augmenter le risque de bugs ou d'échecs à l'avenir.
Coverage : c’est le pourcentage de code qui est couvert par des tests automatisés.
Duplicated Blocks : c’est le nombre de blocs de code dupliqués. Un morceau de code est considéré comme
dupliqué dès qu'il y a la même séquence de 10 instructions successives quel que soit le nombre de lignes.
b- Problématique
Le problème du mauvais code est toujours difficile à résoudre dans toute organisation. La pression
incessante pour livrer plus de fonctionnalités à un rythme rapide oblige les développeurs à prendre des
raccourcis, ce qui rend le code plutôt difficile à maintenir et à étendre. Cette approche a des conséquences
graves et des coûts élevés qui seront probablement supportés par quelqu'un à l'avenir.
Pour ces raisons, les clients d’Adria ont des exigences spécifiques sur les métriques de qualité du code,
c'est ce qu'on appelle dans SonarQube "Quality Gates".
Quality Gates peuvent être définies comme un ensemble de mesures de seuil définies sur le projet, et
pour passer ces mesures, le projet doit franchir chacun des seuils définis.
Tableau 4 : comparaison des valeurs de métriques requises avec les valeurs actuelles
c- Solutions envisagées
• Écrire des tests unitaires pour tous les blocs de code et tester les différents cas d'utilisation des
interfaces graphiques afin d'améliorer le pourcentage de couverture (dépasser 80%).
• Optimiser les lignes de code dupliquées en créant des abstractions pour le code qui se répète afin
de diminuer le pourcentage de code dupliqué (moins de 3%).
• Éliminer les bugs de code pour améliorer la cote de fiabilité.
• Renforcer le code en éliminant les variables non utilisées et les traitements inutiles.
Dans le scénario de développement où le frontend et le backend sont séparés, il y a des avantages d'un
faible couplage et d'un développement indépendant. Cela offre beaucoup plus de flexibilité en étant
capable de déployer uniquement le frontend en production ou en utilisant le même backend pour un
frontend différent avec une pile technologique totalement différente, et c’est le cas pour le projet
standard d’Adria, le frontend est totalement isolé du backend, et les développeurs utilisent des serveurs
sur lesquels le backend est hébergé pour tester les interfaces graphiques.
b- Problématique
Généralement, les serveurs de test utilisés dans Adria ne sont pas assez performants, par conséquent, les
développeurs frontend doivent parfois attendre si longtemps une réponse du backend afin de tester une
seule interface graphique, ce qui pose un réel problème dans le temps d'avancement du projet.
Dans le développement, il y a différentes personnes qui travaillent sur le frontend et sur le backend.
L'équipe backend doit s'assurer que le contenu fourni par l'API est sain, alors que l’équipe frontend ne se
soucie pas du contenu, ils ont juste besoin des données factices dans la bonne structure.
Ces équipes n'ont donc qu'à discuter et se mettre d'accord sur les structures JSON des réponses avant de
pouvoir travailler de manière indépendante de leur côté.
Le principal avantage de travailler avec des données factices ici est l'indépendance dans laquelle l'équipe
frontend peut travailler. Peu importe si le développement du backend reste bloqué pour une raison
quelconque.
Le processus de création d'un portefeuille bancaire comprend le remplissage manuel d'un formulaire, les
informations utilisées pour remplir le formulaire sont copiées d’une carte d'identité fournie par le client
à l'agent en charge de la souscription.
Après avoir rempli le formulaire avec les informations nécessaires, l'agent devra scanner la carte d'identité
et la joindre à la demande afin de prouver l’identité du client.
b- Critique de l’existant
Généralement, dans les agences bancaires, les clients sont tenus de soumettre certains documents qui
pourraient être utilisés pour vérifier leur identité et obtenir des détails pertinents. Ce processus est
généralement fastidieux et prend du temps, car il se fait manuellement. Le client doit soumettre une copie
numérique des documents qu'un réviseur va examiner manuellement, identifier s'il s'agit d'une fausse
identité, extraire des informations telles que le nom, l'adresse, date de naissance etc. et les saisir dans un
formulaire de souscription.
c- Solutions envisagées
Au cours des dernières années, nous avons assisté à une augmentation importante des outils et des
technologies qui étaient principalement conçus pour gagner du temps et minimiser les taux d'erreur.
Parmi ces technologies, il y a l'OCR.
OCR signifie "Reconnaissance optique de caractères". C’est une technologie qui reconnaît le texte dans
une image numérique. Il est couramment utilisé pour reconnaître le texte dans les documents numérisés,
mais il sert également à de nombreuses autres utilisations.
L’OCR est la solution idéale pour notre cas puisque nous scannons la carte d'identité pour la joindre quand
même au formulaire, alors pourquoi ne pas utiliser l'image numérisée pour extraire les informations
requises et gagner du temps ?
Dans cette partie je vais identifier les besoins de mon projet. Je vais mettre l’accent sur les besoins
fonctionnels ainsi que les besoins non fonctionnels.
Avant de parler du fonctionnement proprement dit du système, il est nécessaire de définir dans un
premier temps les fonctionnalités qui seront implémentées au sein du système. De ce fait nous pouvons
dire que l’agent souscripteur doit être capable de :
• Choisir le type de Wallet souhaité par le client (Plafond 200 DH, 5 000 DH, 20 000 DH).
• Remplir le formulaire manuellement avec les informations demandées (nom, prénom, …).
• Joindre les pièces justificatives demandés, y compris la carte d'identité recto/verso.
• Vérifier informations saisies et soumettre la demande.
• Consulter la liste des demandes de souscription rejeté de la part de l’agent chargé de la révision.
• Mettre à jour les demandes qui ont été rejetées et les soumettre à nouveau.
Il s’agit des besoins qui caractérisent le système. Ce sont des besoins en matière de performance, de type
de matériel ou le type de conception. Ces besoins peuvent concerner les contraintes d’implémentation
(langage de programmation, système d’Exploitation...)
• Il devrait être facile à étendre et extensible, c’est-à-dire qu’il pourra y avoir une possibilité
d’ajouter ou de modifier de nouvelles fonctionnalités et services.
• Il doit fournir une interface conviviale et intuitive.
• Il doit garantir un accès rapide à l’information.
• Il faudra aussi noter que l’application devra être hautement sécurisée car les informations ne
devront pas être accessibles à tout le monde.
• Il doit montrer une certaine résistance aux attaques externes et internes.
• Il doit être compatible avec n’importe quel système d’exploitation et format (web, tablette et
mobile).
✓ Introduction
✓ Présentation de l’UML
✓ Diagramme de cas d’utilisation
✓ Diagramme de séquence
✓ Diagramme d’activité
✓ Conclusion
La plupart des langages sont orientés objets. Le passage de la programmation fonctionnelle à l’orienté
objet n’est pas facile. L’un de souci était d’avoir une idée globale en avance de ce qu’on doit programmer.
L'algorithmique utilisé dans la programmation fonctionnelle ne pouvait pas suffire à lui seul. Le besoin
d'avoir des méthodes ou langages pour la modélisation des langages orientés objet est nécessaire. Ainsi
plusieurs méthodes ou langages ont vu le jour. En occurrence UML qui nous a permis de faire la conception
de notre système.
De nos jours, UML2 possède treize diagrammes qui sont classés en deux catégories (dynamique et
statique). Dans ce chapitre, je vais commencer par les diagrammes de cas d'utilisation qui permettent de
donner une vue globale du système, pas seulement pour un client non avisé qui aura l'idée de sa future
application mais aussi pour le développeur qui s'en sert pour le développement des interfaces.
Puis, je vais affiner la conception en présentant la chronologie des opérations par les diagrammes des
séquences et d’activité.
2. Présentation de l’UML
En informatique UML (de l'anglais Unified Modeling Language), ou Langage de modélisation
unifié, est un langage de modélisation graphique à base de pictogrammes. Il est utilisé en
développement logiciel, et en conception orientée objet. UML est couramment utilisé dans
les projets logiciels.
UML est l'accomplissement de la fusion de précédents langages de modélisation objet : Booch, OMT,
OOSE. Principalement issu des travaux de Grady Booch, James Rumbaugh et Ivar Jacobson, UML est à
présent un standard défini par l'Object Management Group (OMG). La version actuelle du langage de
modélisation unifié est UML 2.5.1, publiée par l’OMG en décembre 2017.
• Chaque usage effectué par les acteurs est représenté par un cas d'utilisation.
• Chaque cas d'utilisation symbolise une fonctionnalité qui leur est offerte afin d’engendrer
le résultat attendu.
• Le diagramme de cas d'utilisation décrit l'interaction entre le système et l'acteur en
déterminant les besoins de l'utilisateur et tout ce que doit faire le système pour l'acteur.
Un acteur est une personne, un matériel ou un logiciel qui interagit avec le système. L’analyse du présent
projet commence par une identification des acteurs agissants sur les différentes parties du système.
Les acteurs qui interagissent avec le système de reconnaissance optique de caractères sont :
• Administrateur du système ;
• Agent souscripteur ;
Le processus de souscription admet deux scénarios possibles, soit la fonctionnalité de l’OCR est activée
ou désactivée par l’administrateur de l’agence, alors pour bien clarifier les diagrammes, je vais représenter
les deux cas dans deux diagrammes séparés.
La figure 3.1 représente le digramme de cas d’utilisation si le paramètre d’OCR est activé :
Figure 3.1 : Diagramme de cas d’utilisation pour l’agent souscripteur si l’OCR est activée
Figure 3.2 : Diagramme de cas d’utilisation pour l’agent souscripteur si l’OCR est désactivée
En analysant les deux diagrammes, on constate que l’agent souscripteur effectue la demande de
souscription en fournissant un ensemble des informations qu’il récupère depuis la carte d’identité du
client, ainsi, il choisit le type de portefeuille souhaité par le client (plafond 200 DH, 5 000 DH ou 20 000
DH), puis, si la fonctionnalité de l’OCR est activé il n’a que scanner la carte d’identité pour remplir le
formulaire avec les informations de base (nom, prénom, date de naissance, …) et en même temps la carte
scannée sera attaché directement avec les pièce jointes. Sinon il devra remplir manuellement les champs
du formulaire, joindre les pièces justificatives demandées et soumettre la demande.
La figure 3.3 représente le digramme de cas d’utilisation pour les fonctionnalités de l’administrateur :
D’après le diagramme (figure 3.3), on constate que parmi les fonctionnalités de l’administrateur, il y a
l’activation et la désactivation du paramètre de l’OCR, et la révision des demandes de souscription.
Remarque : ce diagramme montre juste les fonctionnalités de l’administrateur qui ont une relation avec
la souscription, il y a d’autres fonctionnalités qu’on ne va pas traiter car ils sont au-delà de mes tâches.
4. Diagramme de séquence :
La description textuelle présente des inconvénients puisqu’il est difficile de montrer comment les
traitements se succèdent. Il est donc recommandé de compléter la description textuelle par un ou
plusieurs diagrammes dynamiques UML. Dans ce qui suit on va présenter les principaux diagrammes de
séquences élaborés.
Le diagramme de séquence illustré dans la figure 3.4, montre le scenario de la préparation d’une demande
de souscription avant la soumission en utilisant la fonctionnalité OCR. (J’ai divisé les scenarios pour la
lisibilité des diagrammes).
En analysant ce diagramme, on constate qu’il y a une interaction entre l’agent souscripteur et le serveur
OCR SDK par l’intermédiaire qui est l’interface homme machine (formulaire de souscription). Ainsi, après
le scan de la carte d’identité du client, l’image résultante passe par un traitement qui compris le recadrage
pour éliminer les parties vides, puis la compression afin de minimiser sa taille pour éviter la consommation
de la bande passante.
Apres la soumission des deux images (le recto et le verso de la carte), le SDK devra vérifier tout d’abord
l’existence d’une photo dans la carte, et par la suite, il va vérifier si la carte est lisible et les informations
sont claires, si toutes les conditions sont remplies, il va repérer les données et les renvoyer sous format
JSON.
Le diagramme de séquence illustré dans la figure 3.5, montre le scenario de la préparation d’une demande
de souscription avant la soumission sans la fonctionnalité OCR.
Le diagramme de séquence illustré dans la figure 3.6, montre le scenario de la soumission d’une demande
de souscription.
En effet, après la préparation de la demande, en passant par l’étape précédente, la demande est soumise
en 2 requêtes séparées, la première requête contient les documents justificatifs attaché, ainsi, ils seront
persistés dans la base de données en premier lieu pour récupérer leur clé primaire, cette dernière va être
retournée pour qu’elle soit utilisée dans la persistance de la souscription.
Après avoir enregistré la demande, une interface contenant un récapitulatif s'affiche pour la confirmation,
pour confirmer la demande, l’agent reçoit en SMS un code qu’il doit saisir afin de terminer l’opération.
5. Diagramme d’activité :
Ce diagramme permet de modéliser un processus interactif, global ou partiel pour un système donné
(logiciel, système d'information). Il est recommandable pour exprimer une dimension temporelle sur une
partie du modèle, à partir de diagrammes de classes ou de cas d'utilisation.
La figure 3.7 illustre un diagramme d’activité résumant le processus de la création d’une demande de
souscription par l’agent souscripteur.
OCR désactivé
Scanner la deuxième
face de la CIN
Soumettre les
deux images
Erreur du serveur
CIN illisible
Succès
Soumettre la
demande
Erreur du serveur
Succès
Final
✓ Introduction
✓ Besoins techniques
✓ Présentation de l'architecture du projet Frontend
✓ Langages et technologies de programmation
✓ Outils et technologies utilisés pour la qualité de code
✓ Outils et technologies utilisés pour la solution OCR
✓ Outils et environnement de travail
✓ Conclusion
- Les langages de programmation web qui permettent de créer des applications sur navigateur.
- Langage de balisage pour garantir une bonne présentation visuelle.
- Un environnement de développement (IDE) dédié à la programmation web.
- Langage de programmation coté serveur pour la création d’une interface de communication avec
ce dernier.
- Les systèmes de gestion de base de données qui répondent aux différentes opérations de
stockage et de traitement des données.
L’objectif de ce chapitre est de présenter les différents outils et technologies qu’on a utilisés lors de la
réalisation des tâches du projet.
2. Besoins techniques
La capture des besoins techniques liste les spécifications auxquelles le système doit supporter, en faisant
abstraction des besoins fonctionnels présenté précédemment.
Le système doit être conforme avec des exigences techniques présentées dans le tableau suivant :
Exigence Description
Facile à connecter L’application doit être facile à relier avec une instance client, en requittant
le logo, et les données relatives à cette instance.
Sécurisée L’accès aux données doit être sécurisé à l’aide d’un mot de passe pour les
instances fermées.
Indépendante L’application ne doit pas dépendre des technologies utilisées dans le back
end.
Dans cette section, je vais présenter brièvement l'architecture du projet frontend (figure 4.1), et par la
suite, je vais définir en détails chaque outil et technologie utilisée.
La figure ci-dessus représente les différentes parties qui composent le projet Frontend, chacune joue un
rôle très spécifique. Les services, les actions les réducteurs et les sélecteurs appartiennent à "Redux". Les
Template et les composants appartiennent à "React". Le conteneur est une pièce qui leur permet d'être
librement couplés ensemble. Cela permet au "Redux Store" et à la vue de pouvoir changer et grandir
indépendamment l'un de l'autre.
• Components : il s'agit d'un modèle, c'est un ensemble de code qui utilise des propriétés et peut
appeler d'autres composants et leur donner des propriétés (Props).
• Redux Store : c’est l'endroit où Redux stocke les données, les données sont mappées aux "Props"
que React affiche via les composants. Il s’agit d’un conteneur d'état qui contient l'état de
l'application.
Avec HTML et CSS, JavaScript est l'une des technologies de base du World Wide Web. Plus de 97% des
sites Web l'utilisent côté client pour le comportement des pages Web, incorporant souvent des
bibliothèques tierces. Tous les principaux navigateurs Web disposent d'un moteur JavaScript dédié pour
exécuter le code sur l'appareil de l'utilisateur.
En tant que langage multi-paradigmes, JavaScript prend en charge les styles de programmation
événementiels, fonctionnels et impératifs. Il dispose d'interfaces de programmation d'applications (API)
pour travailler avec du texte, des dates, des expressions régulières, des structures de données standard
et le modèle objet de document (DOM).
ReactJS : React (également connu sous le nom de React.js ou ReactJS) est une
bibliothèque JavaScript Frontend open source permettant de créer des interfaces
utilisateur ou des composants d'interface utilisateur. Il est maintenu par Facebook et une
communauté de développeurs individuels et d'entreprises. React peut servir de base au
Redux : c’est une bibliothèque JavaScript open source pour la gestion de l'état de l'application.
Il est le plus souvent utilisé avec des bibliothèques telles que React ou Angular pour créer des
interfaces utilisateur. Semblable à (et inspiré par) l'architecture Flux de Facebook, il a été créé
par Dan Abramov et Andrew Clark.
Webpack : c’est un bundler de modules JavaScript open source. Il est principalement conçu
pour JavaScript, mais il peut transformer des actifs Frontend tels que HTML, CSS et des images
si les chargeurs correspondants sont inclus. Webpack prend des modules avec des
dépendances et génère des actifs statiques représentant ces modules.
Webpack prend les dépendances et génère un graphe de dépendances permettant aux développeurs Web
d'utiliser une approche modulaire à des fins de développement d'applications Web. Il peut être utilisé à
partir de la ligne de commande ou peut être configuré à l'aide d'un fichier de configuration nommé
webpack.config.js. Ce fichier est utilisé pour définir des règles, des plugins, etc., pour un projet. (Webpack
est hautement extensible via des règles qui permettent aux développeurs d'écrire des tâches
personnalisées qu'ils souhaitent effectuer lors du regroupement de fichiers.)
Les développeurs peuvent utiliser les nouvelles fonctionnalités du langage JavaScript en utilisant Babel
pour convertir leur code source en versions de JavaScript que les navigateurs Web sont capables de
traiter.
Babel fournit des polyfills pour prendre en charge les fonctionnalités qui sont totalement absentes des
environnements JavaScript. Par exemple, les méthodes statiques comme Array.from et intégrées comme
Promise ne sont disponibles que dans ES6+, mais elles peuvent être utilisées dans des environnements
plus anciens si un polyfill Babel est utilisé.
i18next fournit :
SonarQube : (anciennement Sonar) est une plate-forme open source développée par
SonarSource pour une inspection continue de la qualité du code afin d'effectuer des
examens automatiques avec analyse statique du code afin de détecter les bugs, les
"Code Smells" et les failles de sécurité sur plus de 20 langages de programmation.
SonarQube propose des rapports sur le code dupliqué, les normes de codage, les tests unitaires, la
couverture du code, la complexité du code, les commentaires, les bugs et les vulnérabilités de sécurité.
SonarQube peut enregistrer l'historique des métriques et fournit des graphiques d'évolution. SonarQube
fournit une analyse et une intégration entièrement automatisées avec Maven, Ant, Gradle, MSBuild et
des outils d'intégration continue (Atlassian Bamboo, Jenkins, Hudson, etc.).
Jest : c’est un Framework de test JavaScript maintenu par Facebook, conçu et construit par
Christoph Nakazawa en mettant l'accent sur la simplicité et la prise en charge des grandes
applications Web. Il fonctionne avec des projets utilisant Babel, TypeScript, Node.js, React,
Angular, Vue.js et Svelte. Jest ne nécessite pas beaucoup de configuration pour les nouveaux
utilisateurs d'un Framework de test.
ESLint : c’est un outil d'analyse de code statique pour identifier les modèles
problématiques trouvés dans le code JavaScript. Il a été créé par Nicholas C. Zakas en 2013.
Les règles dans ESLint sont configurables et des règles personnalisées peuvent être
définies et chargées. ESLint couvre à la fois les problèmes de qualité du code et de style
de codage. ESLint prend en charge les normes actuelles d'ECMAScript et la syntaxe expérimentale des
projets de normes futures. Le code utilisant JSX ou TypeScript peut également être traité lorsqu'un plugin
ou un transpiler est utilisé.
Nous avons utilisé cet outil pour récupérer l’image scannée depuis le matériel (implémente) et l’utiliser
dans la solution OCR.
IntelliJ IDEA : c’est un environnement de développement intégré (IDE) écrit en Java pour le
développement de logiciels informatiques. Il est développé par JetBrains (anciennement
connu sous le nom d'IntelliJ) et est disponible sous forme d'édition communautaire sous
licence Apache 2 et dans une édition commerciale propriétaire. Les deux peuvent être utilisés
pour le développement commercial.
Git : c’est un logiciel de suivi des modifications dans n'importe quel ensemble de fichiers,
généralement utilisé pour coordonner le travail entre les programmeurs développant en
collaboration le code source pendant le développement logiciel. Ses objectifs incluent la
vitesse, l'intégrité des données et la prise en charge des flux de travail distribués et non
linéaires (des milliers de branches parallèles s'exécutant sur différents systèmes).
Git a été créé par Linus Torvalds en 2005 pour le développement du noyau Linux, avec d'autres
développeurs de noyau contribuant à son développement initial. Depuis 2005, Junio Hamano est le
mainteneur principal. Comme avec la plupart des autres systèmes de contrôle de version distribués, et
contrairement à la plupart des systèmes client-serveur, chaque répertoire Git sur chaque ordinateur est
un référentiel à part entière avec un historique complet et des capacités complètes de suivi des versions,
indépendant de l'accès au réseau ou d'un serveur central. Git est un logiciel libre et open source distribué
sous la licence publique générale GNU version 2.
Bitbucket est un service de gestion de référentiel Git spécialement développée pour les
équipes professionnelles. Le hub central pour gérer tous les référentiels de git collabore sur
le code source et guide tout au long du cycle de développement logiciel. C'est une section
de la famille Atlassian avec des outils tels que Confluence, Jira et d'autres pour aider les
équipes techniques à explorer tout le potentiel. Le déploiement de Bitbucket se fait en trois options
différentes. Il s'agit du cloud Bitbucket, du centre de données Bitbucket et du serveur Bitbucket.
8. Conclusion
Ce chapitre a été consacré à la présentation de l'environnement de travail de notre projet. Nous avons
présenté les différentes technologies que nous avons mises en place pour réaliser notre application. Dans
le chapitre suivant, nous présentons la partie implémentation du système.
✓ Introduction
✓ Rapport de la qualité de code
✓ Aperçu des interfaces graphiques du système OCR
✓ Conclusion
Afin de scanner la carte, l’agent devra positionner la carte nationale dans le scanner de la même manière
démontrée dans le GIF au centre de l’interface, puis il clique sur le bouton "Lancer scan". L’image
s’affichera par la suite dans le cadre à la droite. L’agent devra répeter cet action pour le verso de la carte
aussi.
La figure 5.3 montre la vue de la même interface après avoir scanné les deux côtés de la carte nationale :
Après avoir prévisualisé le résultat de l'analyse, l'agent le soumet pour récupérer les informations de la
CIN dans le formulaire (figure 5.4).
Figure 5.4 : Formulaire de souscription après récupération des informations par OCR.
Remarque : tant que la fonctionnalité de l’OCR est activée, l’ajout d’autres PJ devra passer par le
processus du scan aussi.
Nous avons aussi ajouté la possibilité d’agrandir les images pour la vérification, avec possibilité de les
télécharger. (Figure 5.6).
La figure 5.8 illustre une liste des demandes rejetées par l’agent chargé de la révision des demandes, ces
demandes devront être modifié par l’agent souscripteur selon les remarques données, et les soumettre
à nouveau.
La deuxième mission que j’avais pour le stage consistait à mettre en œuvre une solution démo de
l’application web d’Adria, cette solution permettrait aux développeurs Frontend de travailler sans
dépendre du serveur Backend, ce qui leur fera gagner du temps car les serveurs sont parfois en panne ou
très lents à répondre.
Pour réaliser cette solution, j'ai dû travailler avec des fichiers JSON et le stockage local du navigateur où
j'ai stocké les réponses moquées du serveur, donc lorsqu'une demande est faite à partir du projet frontal,
la réponse sera chargée à partir du fichier correspondant.
Bien que je n’aie pas travaillé avec de nouvelles technologies dans cette tâche, c'était très important pour
m'aider à comprendre la structure du projet et la forme des réponses Backend.
La troisième mission du stage a été la plus intéressante pour moi, car là où j'ai commencé à développer
de vrais modules dans le projet, la mission consistait à implémenter la technologie de reconnaissance
optique de caractères pour récupérer les informations personnelles des clients depuis la carte d’identité
nationale, et les utiliser pour créer une demande de souscription. Pour réaliser cette tâche j’ai travaillé
avec l’outil Scanner JS afin de récupérer l’image issue du scan, et OpenCV pour recadrer l’image afin de
minimiser sa taille.
2. Perspectives :
Dans chaque projet, il doit y avoir des parties qui n'ont pas été faites, soit à cause du temps,
l’indisponibilité des moyens de travail, ou pour toute autre raison possible. Mon projet n'est pas une
exception, en fait, il y a des objectifs que nous n'avons pas encore pu atteindre, mais qui seront traités
dans les plus brefs délais soit par moi, ou par quelqu'un d'autre de l'équipe Frontend.
• Le rapport sur la qualité du code n'a pas été complètement amélioré comme nous le souhaitions,
car il y a toujours du nouveau code écrit, ce qui signifie qu'il y aura toujours de nouvelles
duplications, bugs et vulnérabilités. De plus, certains modules n'ont pas été terminés, ce qui rend
très difficile l'amélioration à moins qu'ils ne soient terminés, et c'est pourquoi il restait des
problèmes dans le rapport (figure 5.1) jusqu'à présent.
• La solution de démonstration que nous avons implémentée ne couvre pas tous les modules du
projet, c'est pour la même raison que j'ai mentionnée précédemment, il y a toujours de nouveaux
modules et un nouveau code ajouté.
• https://docs.sonarqube.org/latest/user-guide/concepts/
• https://www.omg.org/spec/UML/About-UML/
• https://en.wikipedia.org/wiki/React_(JavaScript_library)
• https://reactjs.org/docs/getting-started.html
• https://en.wikipedia.org/wiki/Redux_(JavaScript_library)
• https://redux.js.org/introduction/getting-started
• https://en.wikipedia.org/wiki/Babel_(transcompiler)
• https://en.wikipedia.org/wiki/Sass_(stylesheet_language)
• https://en.wikipedia.org/wiki/JavaScript
• https://en.wikipedia.org/wiki/SonarQube
• https://enzymejs.github.io/enzyme/
• https://en.wikipedia.org/wiki/Jest_(JavaScript_framework)
• https://en.wikipedia.org/wiki/ESLint
• https://en.wikipedia.org/wiki/IntelliJ_IDEA
• https://en.wikipedia.org/wiki/Git
• https://www.educba.com/what-is-bitbucket/
• https://github.com/i18next/i18next
• https://en.wikipedia.org/wiki/OpenCV
• https://asprise.com/document-scan-upload-image-browser/direct-to-server-php-asp.net-overview.html