Voilà, le projet SPIRIT est terminé. Nous avons présenté le résultat ce lundi 7 mars et je vais vous résumer ce projet en différentes parties :
- Rappel du projet
- Les difficultés du projet
- Ce qui a fonctionné
- Bilan
- Remerciement
Rappel du projet
L’acronyme SPIRIT signifie Système Prototype d’Interrogation et de Recherche d’Images par Téléphone. Le but était donc de créer un logiciel prototype montrant la possibilité de reconnaitre automatiquement un monument/bâtiment connu sur une image et d’en fournir une documentation. Ceci devait être possible via un navigateur web ou un smartphone. Ce projet permettait donc également de juger des connexions possibles entre les smartphones et les services WebLab.
Pour plus de détails, je vous renvoie vers les anciens articles : Cliquez ici
Pour ceux qui désirent voir le cahier des charges : Cliquez ici
Les difficultés du projet
Durant ce projet, nous avons subit tout un ensemble de difficultés plus ou moins importantes et handicapantes. Cette analyse des difficultés du projet n’engage que moi. Certains points de cette analyse ne sont peut-être pas partagés par les autres membres du projet.
Comprendre les besoins
Ce problème est typiquement un problème de communication. Le projet était organisé en 3 niveaux :
- La maitrise d’ouvrage (MOA) représenté par M. Giroux (professeur de gestion de projet et cadre dirigeant de Cassidian)
- La maitrise d’œuvre (MOE) représenté par mon équipe
- Les équipes de développement, c’est à dire les autres équipes des M2GIL
Il faut donc une communication solide pour un tel projet. Or, il y a justement eu des failles de communication entre la MOE et la MOA, puis entre la MOE et les équipes de développement. Par manque d’expérience dans ce domaine, nous avons eu des difficultés à formaliser les besoins de la MOA, mais avec les révisions qui se sont succédées, les spécifications du besoin ont pu prendre une forme convenable et être validées par la MOA, malgré que cette validation soit arrivée assez tard.
Ce retard de formalisation a également été gênante pour les équipes de développement qui ont donc eu des difficultés à comprendre le travail qu’ils devaient accomplir. Les révisions des spécifications ont eu comme conséquence des changements des composants développés. Cela a donc provoqué des retards et des tensions entre les équipes de développement et la MOE.
Pour éviter également que des décisions ne soient oubliées par certains, un registre de décisions a été mis en place, permettant une référence en cas de litige.
Méconnaissance technique
Nous avons travaillé quasi-uniquement sur des technologies nouvelles pour nous. En effet, sur les 3 équipes de développement, nous avions une équipe responsable des services web, une autre équipe sur les portlets et une dernière équipe sur l’application Android. Je vais donc vous détailler les difficultés de chacun de ces points.
Services Web
Jusqu’ici, nous n’avions jamais créé de service web. Notre connaissance se limitait à des notions théoriques sur les architectures orientées services et distribuées. De plus, dans le cadre du projet SPRIT, nous devions adapter nos services web au socle WebLab utilisé par Cassidian (Anciennement EADS Defence & Security). Cette contrainte n’était pas une difficulté négligeable puisque nous avions eu beaucoup de mal à nous informer (et donc à comprendre) le fonctionnement et la philosophie de l’architecture de WebLab. Je ne détaillerais pas ici le fonctionnement technique de WebLab, mais nous avons été contraint à modifier plusieurs fois l’architecture de SPIRIT lorsque nous comprenions un point supplémentaire de WebLab. Cela a donc provoquer des retards assez importants.
Le plus gros retard concernant les services web concerne l’appel des services web. Nous savions que nous avions besoin de “WebServiceClient” que nous devions utiliser pour appeler un service web. Nous avons donc généré nos propres “WebServiceClient” via Eclipse et nous l’exportions ensuite en format JAR. Nous avions eu beaucoup de dysfonctionnements avec ces JAR, ce qui était complètement bloquant puisque sans appel de services web, il n’y a aucun traitement et donc le prototype ne fonctionne pas. C’est seulement une semaine plus tard que nous avons appris que WabLab possède un JAR qui permet d’appeler les services web qui implémentent les interfaces WebLab, ce qui est notre cas. Un certain désespoir nous est tombé dessus lorsque nous nous sommes rendu compte que nous avions perdu une semaine du projet sur un total d’un mois… ensuite, un dernier dysfonctionnement a été réglé par les intervenants Cassidian qui sont venu nous aider bénévolement. Ce dysfonctionnement concernait les services web qui implémentent plusieurs interfaces WebLab, ce qui n’était pas très courant dans les projet WebLab et nécessitait une légère modification de la configuration du déploiement des services web.
Après ce dernier point, les services web avançaient sans trop de difficulté.
Portlets
Nos portlets ont utilisé le portail Liferay puisqu’il est également utilisé par les projets WebLab. Au début du projet, les portlets se portaient bien, mais au fur et à mesure des modifications du fonctionnement de l’architecture (et des services web bien sûr), des retards et difficultés techniques sont évidemment apparus. La plus grosse difficulté est liée aux services web puisqu’il s’agit des “WebServiceClient” pour appeler les services web. Ce point a été développé dans le paragraphe précédent, je ne le détaillerai donc pas ici.
Smartphone
Notre application smartphone était prévu pour fonctionner sous Android et devait pouvoir appeler les services web. Cependant, nous avons découvert qu’une application Android ne possède pas tous les outils qu’offre le langage Java et ne permet pas non plus de manipuler les classes WebLab. L’impossibilité de manipuler les objets WebLab nous empêche donc de créer les paramètres envoyés aux services web implémentant les interfaces WebLab. Ceci nous a obligé à ajouter une couche middleware permettant de “pousser” des données sous forme de tableau d’octets que le middleware peut utiliser pour créer les objets WebLab nécessaires aux service web. Lorsque nous avons présenté cette idée à la MOA, nous avons appris que “pousser” les données est justement une des fonctionnalités des ESB, qui font la liaison entre les services web et les applications clients.
L’autre difficulté sur l’application Android est l’appel des services web déployé sur le réseau local. Nous avons du mettre en place un routeur sur le réseau local de l’université qui ne permet pas si facilement d’ajouter ce système. Nous avons donc réussit, très tardivement, à connecter le smartphone sur le réseau local, ce qui a retardé les tests en situations réelles et donc les corrections qui en découlent.
Promiscuité
Nous étions une vingtaine d’étudiants à travailler à temps complet sur ce projet, dans une seule salle. Nous étions donc assez entassés et nous travaillions dans un bruit constant puisque ce travail implique qu’il y ait constamment des discussions dans la salle commune. Un travail correct et une bonne ambiance nécessite d’avoir un lieu de travail pour chaque équipe. Ces conditions ont donc provoquées certaines tensions entre les équipes.
Ce qui a fonctionné
Durant la présentation final du prototype, nous avons pu montrer les fonctionnalités réussies de SPIRIT. Voici la liste de ces fonctionnalités :
- Collecte automatique (via GoogleImage et FlickR) et manuelle (depuis un zip) d’images de monuments/bâtiments.
- Collecte automatique (via DBpedia) et manuelle (via un formulaire) de fiches descriptives sur un monument/bâtiment.
- Liaison image/fiche descriptive permettant de retrouver la documentation d’un monument d’une photographie.
- Indexation des images afin de pouvoir être utilisées lors des prochaines recherches d’images par le contenu. Cependant, l’indexation ne s’effectue bizarrement que sur la moitié des photographies, il faut donc effectuer log2(n) indexation, avec n le nombre d’images disponibles à indexer.
- Lancer une recherche depuis un navigateur internet via un portlet.
- Lancer une recherche depuis un smartphone via l’application Android.
- Lancer une recherche depuis un smartphone via une application mail. (Cette fonctionnalité n’a pas pu être présenté lors de la démonstration finale puisque le smartphone ne permettait pas d’envoyer de mail sur le réseau local. Cependant, si le service mail était déployé sur internet, le smartphone pourrait appeler ce service mail.)
Bilan
Ce bilan ne concerne que la maitrise d’œuvre, les membres de chaque équipe de développement ont fait leurs propres bilan et leurs propres conclusions.
Nouveaux postes pour les membres de la MOE
Chaque membre de la MOE a découvert un nouveau poste et ses responsabilités durant le projet SPIRIT. Je rappel la composition de l’équipe et les rôles :
- Audrey SACARABANY (Responsable qualité) a découvert la formalisation des spécifications techniques du besoin.
- Vincent ETIENNE (Architecte principale) a reçu la tâche de créer une architecture et d’en déduire des workpackages pour une sous-traitance de développement.
- Hisham ENNAJIH (Responsable intégration) devait intégrer les composants et effectuer des tests afin de valider la conformité du projet par rapport au spécification du responsable qualité.
- Rachid BEN HAMMOU (Responsable évaluation) a reçu la responsabilité d’évaluer l’efficacité de la recherche d’images par le contenue via un protocole scientifique précis qu’il a défini.
- Moi-même, Jonathan GERMOND (Maitre d’œuvre), mon travail était d’organiser les réunions, de définir le planning général et de m’occuper du suivi du projet.
La découverte de ces postes, et les erreurs qui en découlent, ont donc provoquer un ensemble de trous dans le déroulement du projet, impliquant un effet passoire par laquelle s’est échapper la réussite total du projet.
En revanche, ceci nous a permis d’avoir une meilleur connaissance de soi-même, en nous apportant des précisions sur les capacités et les possibilités de carrière de chacun.
Dans mon propre cas, j’ai eu la confirmation d’un fait que je soupçonnais : J’ai bien plus de chance de réussir une carrière technique (Architecte logiciel, par exemple) qu’une carrière de gestion de projet. Cette confirmation vient du fait que j’ai régulièrement vu des défauts d’architectures et que mon aide était apprécié. De plus, ma gestion du projet a régulièrement été critiquée, donc soit ma gestion du projet était effectivement insuffisante, soit les personnes se plaignent toujours!
Cependant, j’ai effectivement eu l’impression que les autres étudiants me demandais l’efficacité d’un chef de projet confirmé (en particulier à propos des prises de décisions), ce qui est évidement pas mon cas. Je ne risquait donc pas de les satisfaire sur le point.
Je verrais bien si la suite de ma carrière confirme (ou pas) ma préférence du monde technique par rapport à la gestion de projet.
Attente de composants prêt à l’intégration
La MOA nous a fourni plusieurs services web pour le projet SPIRIT. Nous nous attendions à des services tout prêt à être intégrés qu’il suffisait d’appeler simplement, ce qui n’était pas du tout le cas puisque les services web fournis nécessitaient un ensemble de configurations et d’adaptation pour pouvoir être intégrés au projet SPIRIT. Il y a donc eu une incompréhension entre la MOE et la MOA.
Nous avons donc appris à avoir une certaine réserve vis-à-vis du client afin que nos espérances ne soient pas considérées comme dû, ce qui provoque des imprévus et donc du retard.
Dans notre cas, nos espérances étaient la présence de schéma pré-post pour chaque méthode des services web fournis. Ce manque nous a obligé à mettre en place des séances de rétro-ingénierie qui n’étaient pas prévu initialement. Nous avons donc appris à prévoir ces séances.
Méconnaissances techniques
Les méconnaissances techniques décrites précédemment ont provoqué des retards sur la rédaction des spécifications technique du besoin et de l’architecture. Par conséquence, nous avons pu observer l’importance d’une conception propre avant la phase de développement. Il est très dangereux de commencer le développement d’un projet avant d’avoir terminer la rédaction des spécifications technique du besoin et la définition de l’architecture car cela provoque des modifications sur ce qui est déjà développé, ce qui indique donc un gâchis de ressources humaines et du temps perdu qui ne sera pas rattrapé.
Nous avons donc maintenant connaissance de ce qu’est un projet en difficulté avec l’organisation qui va avec : Développement en urgence, réunion de crise, risque de non-conformité, …
Différences d’implications personnelles
Régulièrement, pendant le développement du projet, certains étudiants se sont limités strictement à leurs responsabilités sans se soucier de la réussite du travail des autres équipes. Typiquement, les phrases suivantes ont régulièrement été dites : “Ce n’est pas mon travail”, “J’ai fait ma partie, après, ce n’est plus mon problème”.
Environ une semaine avant la fin du projet, le professeur de gestion de projet est intervenu en indiquant que tout le monde était concerné et que si le projet coule, tout le monde coule, même les équipes qui ont réussies leurs parties. C’est à ce moment qu’on a pu voir une bien meilleurs implication de la part d’une bonne partie des étudiants. Il y a eu des prêts de membres entre les équipes, et cette entraide à largement accéléré l’avancé du projet. Nous pouvons donc facilement déduire l’importance de la solidarité et de la fédération inter et intra-équipe.
Dans l’idéal, chaque membre doit porter un intérêt envers le résultat final du projet, car la passion apporte les plus grande réussite, logiciel ou non. Nous aurions peut-être dû faire un effort sur ce point afin que chacun porte plus d’intérêt envers ce projet, au lieu de faire ce travail simplement parce qu’il doit être fait…
Un petit exemple cinématographique, Spielberg et Burton sont des passionnés et vous connaissez sûrement le résultat de leurs œuvres
Remerciement
Voila ce projet est maintenant terminé. Je tiens à remercier un ensemble de personnes pour ce projet :
- A M. Giroux qui a effectué le double rôle de MOA et de professeur de gestion de projet.
- Aux deux intervenants Cassidian qui sont venus bénévolement nous aider plusieurs fois :
- M. Emilien BONDU
- M. Nicolas MARTIN
- A la communauté WebLab qui nous a répondu sur le forum de WebLab.
- Aux équipes de développement qui ont fait un bon travail de développement
Merci de m’avoir lu jusqu’au bout. J’espère que cet article sera utile à d’autres membres d’un projet similaire.




