Rapport de stage Développement d un CRM en PHP/JavaScript Philippe ZDZIOBECK STAGE EFFECTUE DU 19 MARS AU 31 AOUT 2012, ENCADRE PAR SEBASTIEN NOIRIE ET SUIVI PAR FRANÇOIS JACQUENET.
Remerciements Mes remerciements s adressent en premier lieu à mon maitre de stage, Sébastien NOIRIE, Directeur Technique de l entreprise Webqam, pour sa confiance et ses conseils, qui m ont permis de progresser sans cesse durant ce stage. En effet, c est grâce aux missions que l on m a confiées que j ai choisi d aborder dans mon rapport de stage ce sujet. Ce stage a nécessité tout au long de sa durée l aide et le soutien de plusieurs personnes. Je tiens ainsi à exprimer tout ma reconnaissance à Vincent GALLOT, gérant de Webqam, pour la confiance qu il m a également accordé et son accueil au sein de son entreprise. Je remercie enfin toutes les personnes de Webqam pour l accueil, la sympathie et la gentillesse à mon égard pendant toute la durée du stage. 2
Synthèse Ce document expose le gros projet qui m a été confié pendant ce stage au sein de l entreprise Webqam. Le projet consiste en la mise en place d un logiciel de gestion de relation client, couramment appelé CRM (Customer Relationship Management). Il est né d un besoin de Webqam de pouvoir stocker et gérer plus efficacement toutes les données relatives aux clients, pour ensuite traiter et comprendre ces informations. Il est important de signaler que le projet n est à l heure actuelle pas terminé, étant donné que la date butoir a été fixée en accord avec la fin de mon stage : le 31 Août 2012. Cependant, après 3 mois de stage, il est quand même possible de décrire le projet, son développement et les premiers résultats. Ainsi, ce document décrit l entreprise Webqam, son domaine d activités et son fonctionnement. Il introduit ensuite le projet et l étude préalable qui a été menée. Ensuite, les différentes étapes de la réalisation sont décrites, sans occulter pour autant les difficultés rencontrées, mais en apportant pour chacune de ces difficultés une solution concrète et efficace. Enfin sont tirées des conclusions à mi projet, puis un bilan personnel de cette expérience chez Webqam. 3
Sommaire Présentation de l entreprise... 5 1. Fiche signalétique... 5 2. Secteur d activité... 6 3. Concurrents - clients... 7 4. Références... 8 5. Organisation... 9 Présentation du projet... 10 1. Contexte... 10 2. Définition d un CRM... 11 3. CRM existants... 12 4. Objectifs / enjeux... 14 Étude préalable... 16 1. Cahier des charges... 16 2. Contraintes... 18 3. Planification... 21 Réalisation... 22 1. Déroulement du projet... 22 2. Outils de contrôle... 23 3. Résultats actuels... 25 Difficultés rencontrées... 26 1. Difficultés techniques et organisationnelles... 26 2. Solutions mises en place... 27 3. Résultats... 29 Conclusion... 31 1. Valeur ajouté du projet... 31 2. Bilan... 32 4
Présentation de l entreprise 1. Fiche signalétique Raison sociale : Webqam Adresse : 10D, rue de la Productique 42000 Saint-Étienne Date de création : 2005 Situation : filiale de YouToYou Effectif : 14 personnes Secteur d activité : Création de sites Internet Développement d'applications Web Webmarketing Création graphique & modélisation 3D Chiffre d affaires : 300 k sur l exercice 2011-2012 5
2. Secteur d activité Initialement spécialisée dans le développement d applications Web, l entreprise a aujourd hui étendu son activité à un large éventail de services : Ces services nécessitent des compétences spécifiques, démontrant la polyvalence et la réactivité de Webqam face à l évolution du secteur informatique : 6
3. Concurrents - clients Le secteur du Web est bien évidemment très concurrentiel, et Webqam doit faire face à de plus ou moins grandes structures. Parmi les agences installées sur le même marché, on peut trouver : - Des agences web locales (Axome, Fehu, Imageurs) - Des agences à échelle nationale (Actweb, Dagobert) - Des groupes internationaux spécialisés dans la création de sites web (Fullsix, Nurun) Cette forte concurrence pousse l entreprise à décrocher de nouveaux marchés en mettant en avant son savoir-faire, sa polyvalence et sa qualité de service. Ainsi, les clients sont des groupes, des associations et des entreprises plus ou moins importants, parmi lesquels : - Des particuliers (Blaise Matuidi) - Des structures locales (AFPI Loire, Idecq, Mission locale) - De grosses entreprises nationales (Banania, Crunch, Tahiti, Sfr) - De grands groupes internationaux (Sony, Samsung, LVMH) La clientèle est ainsi répartie sur tous les secteurs : - Agro-alimentaire - Automobile - Événementiel - Immobilier - Industrie - Ingénierie - Luxe - Médical - Prêt à porter - Services - Transport - Etc. Il faut également préciser que le plus gros client de Webqam n est autre que Youtoyou, à qui elle appartient. L entreprise y réalise plus de la moitié de son chiffre d affaires, même si l objectif à moyen terme est de réduire cette «dépendance». 7
4. Références Webqam ayant travaillé pour des entreprises à forte renommée, nombreuses sont les références, et ce dans tous les secteurs. Voici quelques exemples de réalisations : Site web du Blackberry Torch Site officiel de Blaise Matuidi Chaîne Youtube Fructis - Gonzague Boutique en ligne Annabac Application Facebook Crunch-Norman Site mobile Michelin Application Facebook Samsung 8
5. Organisation Webqam est composé de 14 personnes. L effectif jeune, à l image de l entreprise, lui a permis de conserver son esprit «start-up». En voici l organigramme : 9
Présentation du projet 1. Contexte L entreprise a su, depuis sa création, nouer des liens avec différents partenaires, et installer avec ces derniers des relations de confiance. Les données relatives à tous les acteurs interagissant avec Webqam sont ainsi essentielles. Cependant, on constate qu à l heure actuelle, ces informations sont simplement stockées «en brut» dans des tableurs Excel. Il est donc difficile de synthétiser les données, de les manipuler efficacement pour avoir une vue d ensemble de la relation client. Cette situation a conduit Webqam à réfléchir à un nouveau moyen de pouvoir stocker, ordonner, extraire cet amas d informations. Étant donné que la situation touche d autres entreprises, Webqam a réfléchi au développement et à la commercialisation d un outil qui pourrait répondre efficacement à la problématique suivante : Comment gérer, stocker et utiliser efficacement les données concernant les relations client? Cette réflexion a été à l origine du projet qui m a été confié, à savoir la réalisation d un logiciel de CRM. 10
2. Définition d un CRM La gestion de la relation client (CRM pour Customer Relationship Management) est une méthode complète pour gérer la relation avec clients et prospects, afin de créer des liens commerciaux sur le long terme. Cette démarche englobe également les relations avec d autres acteurs (fournisseurs, partenaires, revendeurs, actionnaires, etc.). Dans ce sens, un logiciel CRM a pour but de collecter les informations lors des interactions avec les différents acteurs, afin d y apporter une vue d ensemble. Cette vision globale permet d installer une confiance et une fidélisation sur le long terme. Voici les caractéristiques principales d un logiciel CRM : Base de données unique, enrichie quotidiennement Outils d analyse des données Historique complet des relations avec l entreprise Informations exhaustives sur les correspondants Augmentation de la productivité des équipes commerciales Gestion d activité : prises de contact, de rendez-vous, des relances, etc. Maîtrise de l activité commerciale Le CRM représente ainsi une source de valeur ajoutée pour tous les services d une entreprise : Ventes et administration des ventes Support et SAV Accueil Finance Prévisions Ressources humaines Fabrication Recherche & développement Logistique Figure 1 - Principaux acteurs d'un CRM 11
3. CRM existants Après avoir émis le besoin de gérer la relation client via un logiciel CRM, il convient de procéder à une étude de l existant, ne serait-ce que pour savoir s il vaut mieux recourir à une solution externe ou alors développer son propre outil. La première composante étant bien évidemment la question du coût du logiciel, il faut savoir que la plupart des CRM payants se facturent par utilisateur et par mois. SalesCloud, le leader sur le marché du CRM, propose ainsi différentes offres : Figure 2 - Offres d'abonnements au CRM de SalesCloud Pour parer à cette question du prix du logiciel, voici une sélection de solutions open source. Elles ont été classées par catégorie pour distinguer : Les «pure-player», qui ont été conçus dès l origine pour ce type de besoins Les ERP (Progiciels de gestion intégrée), qui ont intégré la relation client dans les processus de gestion de l entreprise Les groupware, qui ont fait évoluer les fonctions de carnet d adresses vers une gestion plus complète de la relation client Pure-player Leader Opensource Php/MySQL Dérivé de Sugar Php/MySQL/Ajax Plus complet Java + tout type de base de données Personnalisable Python / MySQL Pour associations Complément de Drupal/Joomla 12
ERP Gestion du marketing et des ventes Java/Javascript/Oracle Gestion des stocks et des contacts Php/MySQL Axé sur le suivi des affaires Php/MySQL Workflow /groupware Version Saas Gestion des ventes Support d appels téléphoniques Groupware Module de la suite de travail collaboratif OBM Sous licence GPL Outils de communication complètement intégrés Pas toutes les fonctionnalités d un «pure-player» Il faut donc constater que l offre est variée, et chaque solution est plus ou moins axée sur un domaine. Cependant, de par sa compétence en développement d applications, ainsi que la possibilité de conquérir un nouveau marché, Webqam a choisi de développer son propre logiciel CRM. 13
4. Objectifs / enjeux Objectifs L objectif principal est la réalisation d un outil de prospection et communication destiné aux PME, associations et troupes artistiques. Pour atteindre cet objectif, la plateforme devra comporter un certain nombre de fonctionnalités. Voici donc le diagramme de cas d utilisation du CRM. Il permet de mettre en évidence les 3 acteurs de la plateforme (Utilisateur/Administrateur/Superadmin) ainsi que leurs droits respectifs. La liste des fonctionnalités n est pas exhaustive mais permet d avoir un aperçu du cahier des charges fonctionnel. Figure 3 - Diagramme de cas d'utilisation 14
Enjeu L enjeu pour l entreprise est énorme, puisqu il représente un marché très lucratif, tant au niveau local que national, car le besoin est énorme (Webqam émet même le besoin de disposer de cette application) et peu d entreprises ont actuellement une solution fiable et convenante. Webqam peut également, à travers ce CRM, véhiculer auprès des clients son image d entreprise rigoureuse, efficace et organisée. Le CRM pourrait donc permettre à Webqam de décrocher de nouveaux contrats, notamment dans son secteur d activité principal, à savoir la création de sites Internet. 15
Étude préalable 1. Cahier des charges Le cahier des charges de ce projet a été réalisé par plusieurs collaborateurs de Webqam. Celui-ci définit clairement tous les points importants du projet. Il faut savoir que ce dernier n est pas définitif et possède encore quelques zones d ombres, mais cela ne pose pas de problème étant donné que les différentes parties de la réalisation sont assez indépendantes, comme nous le verrons par la suite. De plus, le cahier des charges est hiérarchisé (coloration différente dans le document). En effet, la réalisation du CRM se décomposera en 3 étapes : Une première version destinée à Webqam et aux autres PME ayant les mêmes besoins Une version 2, pour les mêmes destinataires, mais avec davantage de fonctionnalités Enfin, la V3 sera destinée aux associations et troupes d artistes Voici donc les axes principaux du cahier des charges : Les objectifs : Objectif global du projet + une liste de sous-objectifs Les contraintes : Seulement les contraintes fonctionnelles Des perspectives d amélioration : Pour chaque version, idées d améliorations futures Principe de fonctionnement : Bref résumé de la souscription et l utilisation du CRM Droits des utilisateurs de l application : Définition des différents acteurs et de leurs droits respectifs Paramétrage de l application : Description très détaillée du scénario et des exigences fonctionnelles, agrémentée de quelques précisions techniques. Cette partie concerne le paramétrage effectué par un nouvel utilisateur de la plateforme. Interface : Spécifications graphiques et ergonomiques des pages de l application, ainsi que des maquettes. 16
En plus des maquettes réalisées dans le document, une maquette globale au format Photoshop m a été fournie. Cette dernière montre explicitement toute la charte graphique, du choix des couleurs/typographies au découpage des différentes sections. Figure 4 - Cahier des charges Figure 5 - Maquette Photoshop La maquette Photoshop permet de visualiser concrètement le résultat désiré et la charte graphique voulue. Cela représente un gros avantage, car les demandes sont de ce fait très explicites et concrètes, et on peut se servir de tous les éléments de la maquette pour composer l interface, et faire en sorte que cette dernière réponde bien à toutes les exigences fonctionnelles du cahier des charges. 17
2. Contraintes Le projet est bien évidemment soumis à plusieurs contraintes, qu elles soient techniques, organisationnelles ou temporelles. Ces contraintes concerne la réalisation du projet, et non pas le projet en lui-même (ces dernières étant répertoriées dans le cahier des charges) Contraintes temporelles Comme je l ai mentionné précédemment, le projet est hiérarchisé en 3 versions. Ainsi, il m a été demandé de terminer la V1 avant la fin de mon stage, à savoir le 31 Août. Cependant, les deux autres versions doivent normalement être réalisées pendant cette période. Contraintes organisationnelles Il faut savoir que Webqam réalise tous ses projets selon un mode de fonctionnement bien précis. Tout d abord, chaque projet peut-être traité par un ou plusieurs développeurs/graphistes. Chaque membre de l équipe projet travaille donc localement sur son poste, puis envoie son travail sur un serveur (détaillé dans les contraintes techniques). L envoi de fichiers doit se dérouler au moins une fois par jour (de préférence en fin de journée), pour parer aux éventuelles défaillances des stations de travail. Contraintes techniques Plusieurs aspects techniques m ont été imposés pour réaliser le CRM. Ce doit être une application Web développée en PHP, et utiliser une base de données MySQL. Il est également possible d ajouter du code JavaScript (en intégrant notamment la bibliothèque jquery). Pour ce faire, un environnement de développement m a été imposé : Zend Framework. 18
Utilisant nativement PHP/MySQL, ce Framework est considéré comme un des plus puissants et les plus sécurisés. Créé en mars 2006, Zend Framework a été développé dans le but de simplifier le développement Web, tout en recommandant les bonnes pratiques et la conception orientée objets en offrant des outils aux développeurs. Il permet également d utiliser le principe de MVC (Modèle-Vue-Contrôleurs). Le MVC est une méthode de conception qui organise l Interface Homme-machine en 3 grandes parties. Comme son nom l indique, il comporte Un modèle (modèle de données) Une vue (présentation, interface utilisateurs) Un contrôleur (logique de contrôle, gestion des événements, synchronisation) Figure 6 - Relations entre les composants du modèle MCV Chacune de ces entités a un rôle précis dans l interface, mais interagissent néanmoins entre eux : Le modèle représente le comportement de l application : traitement des données, interactions avec la base de données, etc. Il en assure la gestion et garantit leur intégrité. Ainsi, dans le cas typique d une base de données, c est dans le modèle qu on répertorie toutes les méthodes pour interagir avec la base. Cependant, le modèle offre des méthodes pour mettre à jour ces données (insertion, suppression, mise à jour). Il offre également des méthodes pour récupérer ces données. La vue correspond à l interface avec laquelle l utilisateur interagit. Son premier rôle est de présenter les résultats renvoyés par le modèle, le second étant de recevoir toutes les actions de l utilisateur (clic de souris, sélection d une entrée, boutons, etc.). Il est également possible d inclure des vues partielles ou complètes dans d autres vues. Cette dernière n affecte donc aucun traitement, elle se contente d afficher les résultats et d interagir avec l utilisateur ; c est pourquoi elle peut être conçue en HTML ou tout autre marquage de présentation (XML/XSLT par exemple). Le contrôleur prend en charge la gestion des événements pour mettre à jour la vue ou le modèle et les synchroniser. Il reçoit ces événements et enclenche les actions à effectuer. Si une action nécessite un changement des données, le contrôleur demande la modification des données au modèle, et ce dernier notifie la vue que les données ont changé pour qu elle se mette à jour. 19
Ce Framework est gratuit en version minimale, incluant seulement une bibliothèque PHP. Cependant, Webqam étant très axé sur Zend (2 collaborateurs passent actuellement une certification Zend, la France en comptant moins de 30), l entreprise a acheté sous licence Zend Studio. Ce dernier, basé sur le célèbre Éclipse, est un environnement de développement spécialement conçu pour intégrer et gérer au mieux Zend Framework. Il contient par exemple des outils de visualisation du modèle MCV, et des fonctions très utiles telles que la complétion de code ou Zend Tool (un puissant outil en ligne de commande servant à créer et manipuler Projets/Modèles/Vues/Contrôleurs). Zend Studio propose également un module nommé Subversion. Celui-ci permet d envoyer et récupérer des fichiers sur un serveur, plus précisément dans un répertoire de ce serveur appelé dépôt. Cet outil permet donc à plusieurs personnes de travailler en même temps sur un projet, car il gère parfaitement les éventuelles collisions qu il pourrait y avoir entre un fichier manipulé par plusieurs personnes, en attribuant à chaque manipulation de fichier un numéro de version. Ainsi, tous les membres de l équipe projet sont à même de : Ajouter des ressources Récupérer localement les ressources Envoyer ses fichiers au serveur Supprimer des fichiers Verrouiller un fichier Déplacer des ressources Mettre à jour la copie locale existante depuis la dernière version disponible sur le dépôt Etc. La dernière contrainte qui m a été imposée est le mot d ordre de chaque réalisation de Webqam : la rigueur. En tant que développeur d applications, cette rigueur absolue doit s appliquer au code : il doit être le plus clair possible, agrémenté de commentaires, et si possible réutilisable à plusieurs endroits. L efficacité et l efficience obtenues grâce à cette rigueur doivent permettre à Webqam de réaliser des applications certes complexes et puissantes, mais néanmoins fluides et propres. 20
3. Planification Voici ci-dessous le diagramme de Gantt du projet, permettant de visualiser dans le temps les différentes tâches et leur enchaînement. Figure 7 - Diagramme de Gantt du projet CRM Ce diagramme permet de tirer plusieurs conclusions : La première étape consiste en la création d une base de données conforme au cahier des charges. Le principe de développement est de correctement afficher les données dans l application, et ensuite de les modifier/supprimer ou d en ajouter. La mise en place d une architecture est la base du développement. En effet, il faut bénéficier de bases solides, comportant une gestion efficace des différentes erreurs (404, 500, etc.), ainsi qu un accès réglementé aux différents modules. Il faut là aussi être extrêmement rigoureux quant à la sécurité de l application. Le projet n est pas totalement commencé de zéro. En effet, un modèle d application m a été fourni. Ce modèle possède une configuration de base et des classes personnalisées, créées par Webqam. Ces classes concernent des événements de l application, tels que l authentification ou l affichage de messages. On distingue les 3 modules à développer, relatifs aux 3 acteurs du projet (Utilisateurs / Administrateurs / Superadmins) Bien que de rigoureuses vérifications soient effectuées en cours de route pour valider chaque partie, une semaine de tests a été prévue en fin de développement. 21
Réalisation 1. Déroulement du projet Actuellement, le projet est toujours en cours de développement et aucun retard n est à constater par rapport au planning. Ainsi, le module de configuration est pratiquement fonctionnel, et le cahier des charges concernant cette partie est pour l instant respecté. Voici ci-dessous un aperçu du module de configuration : Ce module, destiné aux administrateurs, comporte une interface simple et puissante. Il permet à ces derniers de pouvoir gérer à leur aise tous les éléments mis à leur disposition : Figure 8 - Module de configuration Leur domaine Les entreprises en contact et les personnes physiques liées Les différents utilisateurs du domaine Des champs personnalisés, applicables à tous les éléments précédents Etc. Il est également possible d effectuer une recherche rapide, de naviguer dans les modules autorisés, ou de sélectionner la langue désirée, ces fonctionnalités n était pas exclusives aux administrateurs mais disponibles pour tout acteur de la plateforme. 22
2. Outils de contrôle Pour s assurer du bon déroulement du projet, plusieurs outils de contrôle ont été mis à ma disposition. Tout d abord, la proximité des collaborateurs de l entreprise permet une communication constante, s il y a la moindre interrogation, incertitude quant au cahier des charges ou aux tâches à réaliser. Ensuite, l outil Subversion centralise le travail de tous les acteurs possibles du projet (développeurs/graphistes/chefs de projets) dans un répertoire du serveur. Ainsi, le chef de projet peut à tout moment récupérer les fichiers pour effectuer des tests et des vérifications sur son poste de travail, et corriger des éventuelles erreurs pour les envoyer ensuite au serveur. Enfin, un dernier outil a été mis en place pour permettre aux acteurs de gérer efficacement le projet : Redmine. Redmine est une application web de gestion complète de projet développée en Ruby sur la base du Framework du même nom. Elle est sous licence GPL, c est-à-dire que le logiciel est libre. Voici les principales fonctionnalités de Redmine : Gestion multi-projets Gestion des droits utilisateurs, définis par des rôles Gestion de groupes d utilisateurs Rapports de bugs, demandes d évolution Wiki multi-projets Forums multi-projets News en RSS/ATOM Notifications par mail Gestion de feuilles de route, Gantt, Calendrier Historique Intégration de suivis de version, dont Subversion Multilingue Support de plusieurs bases de données : MySQL, PostgreSQL ou SQLite 23
Redmine permet un suivi ultra complet des bugs, anomalies et évolutions. Ce module permet de répertorier précisément toute les retouches à effectuer, en traçant chaque demande, de l annonce à la clôture. Voici le scénario type d une demande : Le chef de projet crée la demande avec le statut Nouveau en n oubliant pas de l assigner à un collaborateur. La personne de la partie technique peut ensuite visualiser les demandes qu il lui reste à traiter. La partie technique termine le travail (développement fini, bug corrigé, maquette terminée), passe la demande à 100% et le statut en Résolu. La demande disparait alors de la section Mes demandes à traiter Le chef de projet retrouve les demandes à valider en cliquant sur Demandes restantes (non fermées) Il passe toutes les demandes terminées à l état Fermé afin de clôturer le cycle de résolution. Voici ci-dessous l aperçu du panel de demandes qui me sont assignées. Figure 9 - Panel de demandes Redmine Depuis le début du projet, une centaine de demandes m ont ainsi été attribuées, et même si les retouches sont quelquefois longues et peuvent remettre en cause une bonne partie du code, cela représentera un gain de temps énorme lors des tests finaux, puisque toutes les évolutions ou anomalies auront déjà été traitées. 24
3. Résultats actuels Jusqu ici, le projet s est déroulé conformément au planning et respecte le cahier des charges. La base de données a été créée, et cette dernière satisfait les contraintes fonctionnelles. Bien qu ayant subi quelques retouches au cours du développement, elle est actuellement fonctionnelle et permet efficacement le stockage et la manipulation de données. Par la suite, l architecture de l application a été mise en place. Cette étape était très importante car de la qualité de cette architecture dépendait la suite du projet. Ainsi, les différents modules ont été créés et leur accès (en fonction du statut de l utilisateur), est parfaitement géré par un plugin ACL (Liste de Contrôle d Accès). Chaque module possède par ailleurs ses propres Modèles, Contrôleurs et Vues, ce qui lui permet de pouvoir être complètement indépendant. Parmi eux, un module nommé Core centralise toutes les fonctionnalités qui sont susceptibles d être utilisées partout dans l application, comme l authentification ou les messages d erreur. Enfin, j ai pu développer le module de configuration. Au jour d aujourd hui, ce dernier est quasiment terminé, les domaines, entreprises, utilisateurs et champs personnalisés étant complètement en place. Il ne reste plus que la gestion des produits, ce qui permet de constater que l avancement du projet s effectue dans les temps. 25
Difficultés rencontrées 1. Difficultés techniques et organisationnelles Malgré la bonne marche actuelle de la réalisation du CRM, ce projet n a pas été et n est pas sans difficultés. Tout d abord, bien qu étant assez à l aise avec le langage PHP, je n avais que très peu d expérience concernant le Framework Zend. Il m a donc fallu apprendre cette nouvelle approche du développement, incluant une architecture complètement différente et un ensemble de méthodes inconnu. De plus, si les outils de développement étaient quasiment nouveaux pour moi, la manière de développer m a encore plus surpris. En effet, chez Webqam, et contrairement à mes expériences antérieures, il y a une rigueur absolue dans le code ; c est-à-dire qu il ne faut pas seulement savoir développer sous un langage défini, mais il faut le faire le plus efficacement possible. Cela peut sembler assez paradoxal, mais plus le code doit être simple et polyvalent, plus il est compliqué à mettre en place. Ensuite, le projet étant destiné aux clients de Webqam, il a fallu faire très attention à des aspects tels que la sécurité ou la gestion d erreurs. Durant mes précédentes expériences en développement PHP, j avais seulement été amené à travailler en interne, pour l entreprise elle-même. Il n y avait donc pas une telle attention portée sur la sécurité et tous les scénarios possibles. Enfin, la demande de polyvalence du code, conjuguée au besoin de pouvoir tout personnaliser dans l Interface Homme-machine, n a pas facilité le développement. Chaque fonction n était pas en soi-même compliquée à développer, mais l interaction entre chacune d entre elles a fini par rendre le module que j ai réalisé assez complexe. Par exemple, l intégration de champs personnalisables pour des formulaires s est avéré être un réel problème. 26
2. Solutions mises en place Plusieurs solutions ont été mises en place pour parer à ces problèmes. Connaissant ma faible expérience avec Zend Framework, mon tuteur m a laissé un peu de temps pour réaliser un tutoriel complet permettant de maîtriser les outils de base de ce puissant outil. De plus, j ai aussi réalisé un mini projet avec Zend Studio. Ce projet a consisté à développer une application web permettant de générer très simplement une page Facebook, avec deux images, l une ou l autre affichée selon que l utilisateur aime la page ou non. Ce mini projet m a permis de me familiariser avec l architecture Modèle-Contrôleur-Vue, et découvrir la puissance du Framework pour ensuite me projeter sur le CRM. Concernant le développement en lui-même, il m a fallu un certain temps d adaptation pour intégrer ces notions de rigueur et de polyvalence. C est pourquoi, dès les premières lignes de code du CRM, nous avons beaucoup échangé avec mon tuteur pour corriger tous les défauts et redondances, et faire que chaque méthode créée soit la plus dynamique possible. Cela pouvait sembler répétitif et inutile au début, quand des petites parties ne méritaient pas forcément d être retravaillées, mais je me suis rapidement aperçu qu au fur et à mesure du projet, il y avait de moins en moins de méthodes à implémenter, car elles étaient déjà mises en place ailleurs, ce qui a rendu la réalisation du projet de plus en plus fluide. Pour ce qui est de la sécurité, j ai mis en place plusieurs systèmes visant à verrouiller et contrôler les actions des utilisateurs. Comme évoqué précédemment, chaque page, à son chargement, fait appel à un plugin de vérification du statut de l utilisateur (en session). Selon ce statut et l endroit où il se trouve, le CRM affiche la page désirée, ou le cas échéant, redirige vers une page autorisée. Par exemple, un utilisateur essayant d atteindre un lien d administrateur se verra automatiquement redirigé vers sa page d accueil. Le contrôle d accès selon le statut n est pas la seule sécurité mise en place sur l application. En effet, les actions entrainant une suppression dans la base de données nécessite automatiquement une confirmation (voir page suivante) : 27
Figure 10 - Fenêtre de confirmation d'une suppression Dans le cas ci-dessus, l interface affiche les différents champs qui seront supprimés et demandent de calculer le résultat d une simple addition. Cela comporte deux avantages : On s assure que l utilisateur est humain (même principe qu une vérification par Captcha, mais plus simple) On évite le piratage (par exemple, un lien de suppression chargé automatiquement dans un mail reçu) en octroyant à l utilisateur un Token, valable uniquement pour la suppression en cours. Enfin, pouvoir évaluer et quantifier les performances du code, j ai mis en place un module spécial : la ZF Debug Toolbar. Ce module comporte, comme son nom l indique, une barre d outils permettant de visualiser plusieurs informations essentielles concernant la page en cours, comme les variables utilisées, les requêtes faites à la base de données, les éventuels avertissements ou erreurs, et surtout le temps de chargement détaillé de la page. Cet outil m a permis d adapter le code pour réduire le nombre de requêtes et de variables, résoudre les erreurs et avertissements, minimiser les temps de chargement, pour ainsi optimiser au maximum chaque page. Figure 11 Aperçu de la ZF Debug Toolbar 28
3. Résultats Les solutions mises en place pour parer aux problèmes rencontrés ont été très efficaces. Le choix de mon tuteur de me faire commencer l apprentissage du Framework Zend sur un petit projet était judicieux, étant donné la taille et la complexité du CRM. Cela pouvait sembler une perte de temps de ne pas commencer ce projet tout de suite, mais étant donné qu une des premières parties du projet était de mettre en place une architecture solide et sécurisée, j aurais très certainement eu beaucoup de mal à remplir cette contrainte si je découvrais juste le modèle MCV. Ensuite, la contrainte de rigueur et d efficacité de développement, qui était un peu nouvelle pour moi, a été rapidement assimilée. Mon tuteur et moi avons certes passé du temps en début de projet pour contrôler et corriger si besoin chaque ligne qui n était pas optimisée, mais ce temps de révision du code a eu tendance à diminuer ; matérialisé par la même baisse des demandes Redmine, comme le montre le graphique ci-dessous. Figure 12 - Analyse des demandes et de leur temps de résolution sur les 5 premières semaines De plus, si les demandes ont considérablement baissé, c est en partie grâce à la qualité et la puissance de l application. D une part, les modules se sont avérés être parfaitement autonomes. Par exemple, le contrôleur 29
de calcul pour valider une suppression (expliqué dans la partie précédente) est situé dans le module Core (module répertoriant les fonctionnalités utilisées partout dans l application). Ainsi, quand on demande une suppression, le formulaire de vérification est appelé, et celui-ci autorise une action, mais sans même savoir ce qui va être effacé. Il remplit seulement son rôle, à savoir délivrer un jeton en cas de bonne addition. D autre part, la rigueur de développement, conjuguée à l exigence de simplicité, a rendu très simples des besoins fonctionnels qui pouvaient sembler être beaucoup plus complexes. Le cahier des charges comportait par exemple une demande assez délicate : les champs personnalisés : un administrateur doit pouvoir rajouter, dans toutes les tables qu il gère, des champs personnalisés (liste déroulante, check box, zone de texte, etc.). Une approche classique aurait consisté à développer, pour chaque table, des fonctions d ajout/modification/suppression, et pour chaque formulaire, de vérifier s il existe un champ personnalisé pour la table concernée. Si cette stratégie est difficile à expliquer, elle l est certainement davantage à développer, que ce soit au niveau des données ou des traitements. Or, la stratégie pour laquelle nous avons opté a consisté à avoir : Un code totalement dynamique (ex : aucun nom de table en «dur») Un schéma de base de données extrêmement simple (une seule table pour tous les champs) Ainsi, la base de données différencie l emplacement du champ personnalisé uniquement par un type enum (liste énumérative). Deux autres tables sont en place : une pour les éventuelles valeurs possibles d une liste déroulante, l autre pour les valeurs de ces champs (en fonction de l utilisateur). Concernant le code, le fait de ne renseigner le nom de la table à aucun endroit m a permis de gérer toutes les possibilités dynamiquement : en fonction des valeurs du champ de type enum, on crée des onglets (voir figure ci-dessous). Figure 13 - Génération d'onglets en fonction des valeurs du champ enum Grace à cette stratégie, je n ai eu à écrire les méthodes de gestion de ces champs une seule fois. Et en ce qui concerne la récupération et l affichage de ces champs, une seule méthode les gère de la même manière dynamique, et un système d héritage de formulaires permet à chacun de ces derniers de pouvoir l appeler. J ai, dans l exemple précédent, effectué 6 fois moins de développement, pour un résultat tout aussi - si ce n est plus - performant. 30
Conclusion 1. Valeur ajouté du projet Le projet étant encore en cours de développement, il m est impossible de m avancer sur la valeur ajoutée qu il représentera pour Webqam. Cependant, il m a personnellement été très bénéfique. En effet, ayant essentiellement travaillé en PHP durant mes anciens stages, je pensais n avoir que très peu de difficultés techniques à réaliser le projet qui m était demandé. Mais j ai pu découvrir, par l intermédiaire du Framework Zend, une autre approche du développement, certes plus complexes mais beaucoup plus puissante. Le fait de connaître et de savoir utiliser un outil de cette envergure représente une compétence que j estime très valorisante. Ensuite, si l outil utilisé pendant ce stage était nouveau, l approche de développement l était tout autant. J ai ainsi pu réaliser l importance d avoir une vision englobant tout le projet, quelle que soit la partie qu on traite. Ainsi, si certaines fonctions m ont semblé compliquées à mettre en place, celles-ci ont été très efficaces, car réutilisées à plusieurs endroits. Enfin, la rigueur appliquée dès les premiers instants de la réalisation a elle aussi paru inopportune, mais même si le projet n est pas encore en phase de tests et débogage, je peux déjà constater que la part du temps consacrée aux retouches de code a considérablement diminué. 31
2. Bilan En conclusion, ce stage est et restera pour moi une expérience très enrichissante. J ai ainsi pu m immiscer dans une structure réduite, mais dynamique, polyvalente et compétente, et découvrir des gens passionnés par le Web et tout ce que ce dernier peut comporter. J ai également découvert de nouvelles technologies, comme le Zend Framework, et une méthode de travail que je n avais jamais appliquée en entreprise auparavant. Ces nouveautés m ont poussé à me remettre en question et à enrichir mes compétences, spécialement sur un langage que je pensais maîtriser. D un autre côté, j ai été en mesure d apporter à l entreprise mes compétences apprises au cours de l année, que ce soit en matière de programmation ou de gestion de projet. De plus, j ai été à même de faire face aux différents problèmes rencontrés, et de les résoudre efficacement en appliquant une méthode rigoureuse et précise, grâce notamment aux moyens de suivi et de résolution dont dispose Webqam. C est pourquoi ce stage, bien qu il ne soit pas encore terminé, représente d ores et déjà pour moi une expérience réussie sur tous les plans, et cela me permet donc d envisager mon futur professionnel avec confiance et sérénité. 32