Rapport de stage en entreprise (Amcor Flexible SPS ) 2010/2011 par Alexis BISSON 3e5.
Rapport de Stage Techsia 2010
-
Upload
jtremesaygues -
Category
Documents
-
view
75 -
download
1
Transcript of Rapport de Stage Techsia 2010
1
Rapport de stage
Effectué à :
Du 8 février 2010 au 23 avril 2010
TECHSIA 340 rue Louis Pasteur 34790 Grabels
Par Jonathan Tremesaygues
Directeur de stage de l'entreprise : Directeur de stage de l'université : Ronan MENEU Geneviève SIMONET
Amélioration
du TestServer
Confidentiel
2
Remerciements Avant de commencer ce rapport, je tiens tout d’abord à remercier l'ensemble des personnes qui ont
rendu mon stage possible et qui ont contribué à son bon déroulement.
Ronan Meneu, mon maître de stage et Aurélien Billard pour m’avoir intégré dans l’équipe TechData,
pour leur disponibilité, leur soutien, leurs conseils et pour m’avoir apporté un suivi régulier dans mon
travail.
L’équipe TechData pour m’avoir encadré avec attention.
L'ensemble des développeurs pour leur implication, l’intérêt qu’ils m’ont apporté et le temps qu’ils
m’ont accordé.
Je remercie également toutes les personnes que j’ai pu côtoyer dans l’entreprise pour leur accueil et
leur sympathie.
3
Table des matières Remerciements ....................................................................................................................................... 2
Introduction ............................................................................................................................................. 5
Connaissance de l'entreprise .................................................................................................................. 6
Contexte .............................................................................................................................................. 6
La société Schlumberger ..................................................................................................................... 6
La société Techsia ................................................................................................................................ 7
Présentation et situation géographique ......................................................................................... 7
Secteurs d'activité et positionnement ............................................................................................ 9
Savoir-faire ...................................................................................................................................... 9
Organisation interne ....................................................................................................................... 9
Les produits ................................................................................................................................... 11
La prestation de services ............................................................................................................... 11
Les logiciels .................................................................................................................................... 11
Outils et TestServer ............................................................................................................................... 14
Outils utilisés ..................................................................................................................................... 14
Komodo Edit .................................................................................................................................. 14
WampServer .................................................................................................................................. 15
SQLyog Community ....................................................................................................................... 15
Tortoise SVN .................................................................................................................................. 16
TestServer .......................................................................................................................................... 17
Qu’est-ce que le TestServer ? ........................................................................................................ 17
A quoi sert-il ?................................................................................................................................ 17
Comment fonctionne-t-il ? ............................................................................................................ 17
Présentation détaillée ................................................................................................................... 17
Travail effectué ...................................................................................................................................... 22
Optimisation des performances ........................................................................................................ 22
Au début était SQLite… .................................................................................................................. 22
…Puis vînt MySQL .......................................................................................................................... 22
Résultat .......................................................................................................................................... 22
Ajout de fonctionnalités .................................................................................................................... 23
Global Result.................................................................................................................................. 23
Summary........................................................................................................................................ 23
Dynamic Result .............................................................................................................................. 23
4
Test description ............................................................................................................................. 24
Keywords ....................................................................................................................................... 25
Graphiques ........................................................................................................................................ 25
Travail demandé ............................................................................................................................ 25
Choix de la technologie ................................................................................................................. 25
Réalisation ..................................................................................................................................... 26
Conclusion ............................................................................................................................................. 27
Annexe ................................................................................................................................................... 28
Script de migration de SQLite à MySQL ............................................................................................. 28
Script de mise à jour des descriptions des tests ............................................................................... 30
5
Introduction
Afin de valider la dernière année de mon DUT Informatique, j’ai effectué un stage d’une durée de 11 semaines dans la société Techsia implantée à Grabels, située proche de Montpellier. Lors de ma recherche de stage, mon objectif était de trouver un stage en informatique et plus particulièrement un sujet me permettant de faire du développement WEB. Je voulais profiter de ce stage pour accroître rapidement mes compétences avant d’arriver sur le marché de l’emploi. Parmi les différentes offres de stage, j’ai accepté l’offre que proposait la société Techsia car durant l’entretien j’ai compris que ce stage me permettrait de réaliser un travail varié, intéressant et utile au sein de l’entreprise. Le premier objectif de ce stage était de mettre en pratique les connaissances techniques que j’avais pu acquérir au cours de ma formation. En effet, j’ai suivi beaucoup de cours théoriques que je n’avais pas encore pu appliquer à des situations concrètes. Le second objectif était de me confronter au monde de l’entreprise et à son mode de fonctionnement afin de préparer mon insertion dans le monde professionnel. La première phase du stage fût de me familiariser avec le personnel de l’entreprise et avec les outils utilisés. La seconde fût d’améliorer les performances du TestServer. J’ai ensuite travaillé sur l’ajout de nouvelles fonctionnalités au TestServer. Enfin, j’ai réalisé un système de reporting*. Dans ce rapport, je vais commencer par présenter l’entreprise puis le travail que j’ai effectué et enfin mon bilan personnel.
6
Connaissance de l'entreprise
Contexte
Avant de se lancer dans l'exploitation d'un champ pétrolifère, les compagnies pétrolières ont besoin
de caractériser précisément le sous-sol et les fluides contenus dans le gisement. Les enjeux sont
considérables car des moyens techniques et financiers de grande envergure doivent être déployés en
cas de découverte d’un gisement. La société Techsia est née du besoin accru des compagnies
pétrolières en matière de précision et de quantification en vue d'une prise de décision optimale.
La société Schlumberger
La société Schlumberger a racheté au mois de juin 2009 l'intégralité des actions de Techsia SA qui
deviendra le « Schlumberger Petrophysics Software Center of Excellence ». Schlumberger est la plus
grande société multinationale de services pétroliers. En effet elle compte plus de 80 000 employés de
140 nationalités dans plus de 80 pays à travers le monde. Elle fut fondée en 1926 par les frères
Conrad et Marcel Schlumberger dans le nord de la France grâce à leurs idées innovantes pour
détecter différents types de roches par conductivité électrique. La société est désormais installée aux
Antilles néerlandaises, mais ses principaux bureaux sont situés à Houston, Paris et La Haye, avec un
centre de Recherche & Développement à Clamart. Le groupe dispose de partenariats avec diverses
universités et a créé plusieurs centres de formation interne accueillant 1200 personnes par jour. En
2008, hors forage, environ 10% de l'effectif sont consacrés aux géosciences (géologues,
géophysiciens et ingénieurs de réservoirs).
La société Schlumberger est cotée à la Bourse de Paris et à la Bourse de New York. Schlumberger a
pâti en 2009 de la crise économique et de la baisse des cours du brut. Le groupe accuse une baisse de
16% de son chiffre d’affaires sur l'ensemble de l’année dernière, à 22,70 milliards de dollars, et un
repli encore plus important de son bénéfice net, (-41%) à 3,16 milliards.
La société est dirigée par Andrew Gould et elle se décompose en plusieurs services et produits.
Techsia est intégrée dans le service Schlumberger Information Solutions (SIS) qui est une unité
opérationnelle fournissant des logiciels, la gestion de l'information, l'infra- structure et les services
pour résoudre les problèmes des sociétés gazières et pétrolières.
7
La société Techsia
Présentation et situation géographique
Techsia est une société qui fut créée le 25 octobre 2000. Stéphanie Gottlib-Zeh, Docteur en
Géophysique et Présidente Directrice Générale de la société, est à l'origine de cette création. C'est au
cours de sa thèse réalisée à TotalFina Elf qu'elle ressent le besoin, pour les domaines des
Géosciences, d'une entreprise comme Techsia. Le projet initial a ainsi été lauréat, deux années
consécutives (1999 et 2000), du concours national d'aide à la création d'entreprise de technologies
innovantes. Le siège social de Techsia est situé sur la colline de Grabels, dans le parc Euromédecine,
aux portes de Montpellier. Techsia possède également deux filiales, une à Houston aux Etats Unis et
l'autre au Sultanat d'Oman. La société est leader technique et bientôt commerciale sur le logiciel
Techlog. L'effectif de la société est de cinquante salariés pour une moyenne d'âge de 31 ans. Pour sa
première année d'activité (2001), Techsia a réalisé un chiffre d'affaires de 323 000 euros. En 2008, il
s'élève à près de 9,06 millions d'euros et son capital est de 579 947,06 d’euros. Le détail du
personnel ainsi que le poste de chaque personne est représenté dans l'organigramme de la page
suivante.
9
Secteurs d'activité et positionnement
L'activité de Techsia se positionne dans les domaines des technologies innovantes, et plus
précisément dans la chaîne du traitement et de l'analyse des données acquises dans les puits de
forage. Techsia est à la fois éditeur de logiciels et prestataire de services (études). Ses méthodes
s'appliquent au traitement de données volumineuses et/ou hétérogènes, dans le domaine des
géosciences (géophysique, géologie, gisement) en général, et de l'interprétation des données de
forage/sondage (géologiques, pétro-physiques, diagraphiques* et géophysiques) en particulier. Elle
travaille également dans le domaine des procédés (analyse multiple de fluides complexes :
thermodynamique appliquée GC/MS).
Savoir-faire
Le savoir-faire de Techsia découle de 9 années de recherche et développement qui lui ont permis de
mettre au point des méthodes et des outils innovants destinés à améliorer l'interprétation de
données géologiques. A ce jour plusieurs compagnies pétrolières internationales exploitent ces
méthodes dans le but de mieux caractériser leurs réservoirs pétroliers. Techsia possède donc trois
métiers principaux :
- La pétro-physique : traitement et interprétation des données (diagraphiques* et carottes)
acquises au puits.
- La géophysique : traitement et interprétation des données sismiques.
- Les procédés : analyse des fluides complexes.
Ces trois métiers reposent essentiellement sur un apport informatique considérable grâce aux
compétences de Techsia dans le développement de logiciels performants et adaptés aux besoins de
ses clients.
Organisation interne
Outre son aspect technique, Techsia fait également preuve d'une organisation innovante en
regroupant en interne trois pôles de compétences complémentaires en interaction permanente:
10
Compétences Métiers
Techsia regroupe des ingénieurs « métiers » dans les domaines des Géosciences (géophysique, pétro-
physique, sédimentologie, thermodynamique et analyse physico- chimique). Ces compétences «
métiers » leur permettent d'appréhender au plus juste les besoins du client. Leur expertise repose à
la fois sur leur haut niveau de qualification et sur leur culture du monde industriel, développée
pendant leur parcours. Autour de ces compétences métiers s'articulent les compétences statistiques
et informatiques.
Compétences Statistiques et Numériques
Le savoir-faire de Techsia repose sur les méthodes statistiques et numériques les plus récentes, telles
que les réseaux de neurones, l'optimisation paramétrique de systèmes complexes non linéaires, les
plans d'expériences ou les méthodes de Monte-Carlo.
Ces compétences sont entièrement dédiées à la résolution de problématiques "métiers".
Compétences Informatiques
L'équipe d'informaticiens de Techsia assure l'optimisation des algorithmes et la mise au point de
logiciels scientifiques précis et performants adaptés aux besoins de ses clients. Ces trois
compétences se regroupent dans une organisation structurelle originale, schématisée sur la figure
suivante.
Figure 2 : ORGANISATION STRUCTURELLE
Ce type d'organisation offre un double avantage :
- La garantie de produits de qualité,
- La rapidité et la facilité de communication entre les compétences.
11
Les produits
Deux activités principales caractérisent Techsia : - La prestation de services et la conception, - Le développement de logiciels issus de travaux de recherches et de développements
internes.
La prestation de services
Techsia propose une prestation de services qui se traduit par des études utiles pour les géosciences. Ces études sont de deux types :
- Des études traditionnelles classiques réalisées en pétro-physique.
Des études de recherches et de développements visant à optimiser les méthodes de calcul et d'interprétation Deux activités principales caractérisent Techsia :
- La prestation de services et la conception, - Le développement de logiciels issus de travaux de recherches et de développements
internes.
Techsia propose une prestation de services qui se traduit par des études utiles pour les géosciences. Ces études sont de deux types :
- Des études traditionnelles classiques réalisées en pétro-physique. - Des études de recherches et de développements visant à optimiser les méthodes de calcul et
d'interprétation - du client dans ses domaines d'activités.
Ces études sont principalement réalisées pour le compte de plusieurs clients tels que TotalFina Elf, Gaz de France et l'Andra, mais aussi des clients anglo-saxons tels qu'Amerada Hess (USA), BHP Billiton (AUSTRALIE), Burlington Resources (Canada), British Petroleum (UK), Marathon Oil, Phillips. . .
Les logiciels
Techlog
Techlog est un logiciel de géosciences pour l'interprétation géologique des diagraphies*. C'est un
outil qui permet une exploitation différente et optimisée des informations contenues dans les
enregistrements diagraphiques*, c'est à dire des signaux captés par les sondes généralement
descendues dans les forages pétroliers, afin de déterminer à distance, via des paramètres physiques,
la nature du sous-sol. Le calibrage de ces données est effectué par l'étude des carottes échantillons
de roches prélevées (à grands frais) dans les parties des réservoirs des couches géologiques
traversées, dont on corrèle la description géologique avec les réponses électriques des diagraphies*.
Techlog constitue une aide à la modélisation et s'utilise en parallèle avec les logiciels classiques
d'interprétations géologiques. Une panoplie complète d'outils statistiques intégrés (utilisés dans une
chaîne logique optimisée) permet une amélioration de la séquence de travail.
12
Il optimise le lien entre le modèle géologique statique (vision interprétée de l'architecture du sous-
sol : œuvre du géologue) et le modèle réservoir dynamique (vision déduite de l'écoulement des
fluides dans les couches productives des réservoirs d'hydrocarbures, estimation de la production :
œuvre de l'ingénieur réservoir).
Grâce à l'utilisation intégrée de plusieurs modules, le géologue peut fournir des informations
quantifiées à l'ingénieur réservoir qui peut évaluer plus précisément la production pétrolière :
- TechCore : Solution ultime pour l'interprétation et l'intégration des données « carottes ». - Qcfield : Module dédié au traitement et à l'édition d'une grande quantité de données puits. - Quanti : Alternative intelligente à l'interprétation conventionnelle des diagraphies* (multi-
puits, multizones). - Quanti.min : Résolution de problèmes inverses. - K.mod : Reconstruction objective de données manquantes. - Ipsom : Classification des électro-faciès et prédiction des faciès lithologiques. - BHI : Application d'imagerie dédiée au traitement et à l'interprétation de la résistivité, de
l'acoustique et de la densité dans les puits. - Geophi : Solution combinant des données pétro-physique et géologique. - CoreDB : Base de données pour un stockage et une gestion efficace de tous les types de
données carottes. Tous ces modules reposent sur un noyau que l'on peut diviser en 3 parties :
- Techplot : Large panel d'outils interactifs appliqués à l'affichage de diagraphies* et de données carottes.
- Techdata : o Traitement et transmission des données o Base de données simple et efficace o Importation et exportation des données o Edition des données
- Techstat : o Outils statistiques classiques o Série d'applications statistiques multi-variables*
Le groupe chargé du développement de Techlog est divisé en plusieurs équipes que l'on retrouve dans l'organigramme page 4 :
- R&D : Responsable de la partie recherche et développement au sein de Techlog. - TechPetro : Responsable de la partie métier au sein de Techlog. - TechPlot : Responsable de la partie visualisation (2D et 3D) au sein de Techlog. - TechData : Responsable de la partie donnée au sein de Techlog.
13
Figure 3 : Aperçu du logiciel Techlog
Malcom
Malcom est un logiciel qui propose des solutions innovantes pour répondre à des problèmes
critiques du monde pétrolier actuel, tant dans la maîtrise des procédés que dans la prospection. Un
enjeu important de la prospection pétrolière est de déterminer la connectivité des réservoirs de
pétrole. C'est-à-dire de déterminer dans quelle mesure la réserve de pétrole à un endroit donné est
scindée en réservoirs distincts. Plus la connectivité des réservoirs seront importante, plus l'extraction
sera aisée et efficace. En effet, moins il y a de réservoirs distincts, moins le nombre de forages
nécessaires est important. La connectivité peut être déduite grâce à la comparaison de la
composition chimique de plusieurs fluides extraits dans un périmètre restreint. Il est évident que plus
la composition de deux fluides sera proche, plus leur chance d'appartenir à un réservoir unique est
grande. Le principal but de Malcom est donc d'aider à la détermination de la composition chimique
des fluides complexes (dont fait partie le pétrole). Pour cela, il utilise la Chromatographie en phase
Gazeuses. Mais ces résultats, bien trop complexes, ne sont pas directement exploitables. Il faut donc
analyser ces données pour en retirer l'information pertinente.
14
Outils et TestServer
Outils utilisés
Pendant toute la durée du stage, j'ai eu à disposition toutes sortes d'outils qui m'ont permis de
mener à bien les tâches qui m'ont été confiées. Voici une brève description des principaux outils que
j'ai utilisés.
Komodo Edit
Komodo Edit est un éditeur de texte multiplateformes* et open source basé sur Active State
Komodo IDE. Il est dédié aux langages interprétés tels que PHP, Python, Ruby et aux langages
orientés « web » tels que JavaScript, html, css. Il supporte en outre de manière native de nombreuses
librairies AJAX (JQuery, Prototype, dolo…), et possède une très bonne auto-complétion.
Figure 4 : Capture d'écran de Komodo Edit
15
WampServer
WampServer est une plateforme de développement Web de type WAMP, permettant de faire
fonctionner localement des scripts PHP. WampServer n'est pas en soi un logiciel, mais un
environnement comprenant deux serveurs (Apache et MySQL), un interpréteur de script (PHP), ainsi
qu'une administration pour les deux bases SQL PhpMyAdmin et SQLiteManager.
Il dispose d'une interface d'administration permettant de gérer et d'administrer ses serveurs au
travers d'un tray icon (icône près de l'horloge de Windows).
SQLyog Community
SQLyog est un programme permettant de gérer une base de données MySQL. Il dispose d’outils
permettant de synchroniser des données manuellement ou automatiquement et d’avoir un aperçu
des documents. Il permet de naviguer entre les données et d’effectuer de multiples requêtes. Avec
ce logiciel, il est possible de gérer une ou plusieurs bases de données à la fois et de personnaliser les
tables et les champs de la base de données selon ses besoins. Il autorise également à importer des
données ODBC et de gérer l’hôte MySQL à sa guise. SQLyog donne la possibilité d’exporter des
données au format CSV, XML, HTML ou Excel.
Figure 5 : Capture d'écran de SQLyog Community
16
Tortoise SVN
Afin de gérer des projets en commun de manière à ce que chaque utilisateur puisse travailler sur une
copie du projet à partir de son poste de travail, nous utilisons SVN. SVN est un outil de versionning
open source. Il permet de tracer les modifications des développeurs et la date de leur réalisation, et
permet ainsi de revenir en arrière en cas de problème. Il permet également de fusionner des
fonctionnalités entre plusieurs développeurs. Comme CVS, SVN est l'outil le plus utilisé lors des
développements collaboratifs. Il permet d'éviter les conflits entre différentes versions d'un même
fichier. En étant sûr d'avoir une version compilée qui fonctionne sans erreur à l'exécution, le
développeur peut faire une mise à jour du projet par rapport à la version se trouvant sur le réseau.
De plus, lorsqu'une modification est incomprise par un membre de l'équipe il sait à qui demander
une explication.
17
TestServer
Qu’est-ce que le TestServer ?
Le TestServer est un système développé et utilisé en interne par Techsia. Il est composé d’un site internet et d’un client* écrit en Python*.
A quoi sert-il ?
Malcom et Techlog sont de gros logiciel, où une erreur de programmation peut facilement se glisser
et avoir des conséquences dramatiques tel qu’un crash du logiciel ou une erreur de calcul, qui pour
cette dernière peut avoir des répercussions sur l’analyse des données, et entrainer de mauvaises
décisions pour les entreprises qui les utilisent. Le TestServer permet de tester automatiquement les
logiciels afin de détecter leurs erreurs ou faire des tests de performance pour vérifier que les
nouvelles versions n’entrainent pas de régressions. Il dispose aussi de fonctionnalités permettant de
visionner les résultats des tests, d’un système de reporting* sous forme de graphiques…
Comment fonctionne-t-il ?
L’opérateur ajoute tout d’abord la nouvelle version du logiciel dans le TestServer, puis choisit les
tests à exécuter. A partir de là, les ordinateurs de tests vont automatiquement récupérer la version
concernée du logiciel, l’installer, récupérer la liste de tests, les exécuter et enfin poster les résultats
sur le TestServer.
Présentation détaillée
Global Result
C’est la page principale du TestServer. Elle affiche les résultats des tests pour les versions
sélectionnées. Elle possède 2 modes d’affichages, le premier dit « Normal » permet de visualiser les
erreurs selon le code couleur suivant :
- Vert (Ok) : réussite du test
- Orange (Fail) : le test à correctement était exécuté, mais a retourné une valeur incorrecte
- Rouge (Error) : le test ne n’est pas arrivé jusqu’à la fin
- Jaune : combinaison de vert et d’orange et/ou de rouge : le test a été correctement exécuté
sur certains ordinateurs mais a échoué sur d’autre
- Bleu (Perffail) : le test a été correctement exécuté, mais a été inhabituellement long
18
Figure 6 : Page "Global Result" en mode « Normal »
Le second mode appelé « Perf Color » permet de comparer visuellement les performances d’un test : plus le temps d’exécution du test s’éloigne de son meilleur temps, plus son pourcentage augmente
(selon la formule
), et donc plus la couleur s’obscurcie. Les tests trop courts
(moins de 2 secondes) ne sont pas comptabilisés.
Figure 7 : Page "Global Result" en mode "Perf Color"
19
Summary
La page « Summary » permet de visualiser toutes les erreurs d’une version. Cette page est surtout utilisée en début de journée, après une nuit de tests pour réaliser le planning de la journée.
Figure 8 : La page "Summary"
Result
La page Result permet de voir les derniers résultats des tests postés.
Figure 9 : La page Result
20
Test Pipe
La page « Test Pipe » permet de voir quel sont les prochains tests à être jouer, et modifier leurs
ordres.
Figure 10 : La page "Test Pipe"
Add Test
La page « Add Test » permet d’ajouter des tests dans le pipe (la file d’attente des tests).
Figure 11 : page Add Test
21
Graphiques
La page graphique permet d’accéder à divers graphiques sur les performances des tests ou sur les
statistiques du TestServer.
Figure 12 : Page Graphiques, graphiques sur l'ajout de tests et sur leur consommation de temps
Administration
La partie Administration contient des outils pour administrer le TestServer. On peut entre autre y
insérer des tests, y ajouter des produits, gérer les ordinateurs de tests…
Figure 13 : Page d'administration des ordinateurs
22
Travail effectué
Optimisation des performances
Au début était SQLite…
L’une de mes premières tâches fût d’optimiser les performances du TestServer.
Originellement, il était basé sur le système de gestion de base de données (SGBD) SQLite qui
présente l’avantage de ne pas utiliser de serveur : la base de données est enregistrée dans un fichier,
ce qui permet de faciliter certaine des tâches de maintenance tel que la sauvegarde : il suffit de
copier le fichier ailleurs. Mais au cours du temps énormément de données ont été ajoutés à la base
de données, atteignant une taille de presque 1Go (l’équivalent de 830 disquettes !), et plus de 4
millions d’enregistrement pour la table de résultat des tests. L'ampleur des données additionnés aux
nombreux accès concurrents à la base de données qui assurent le postage ou le visionnage de
résultats occasionnaient de nombreux ralentissement, voir même des "times-out"(la base ne
répondais plus aux requêtes).
…Puis vînt MySQL
La solution choisit afin de palier à ce défaut fût de migrer à MySQL, un SGBD Open Source des plus
utilisés, autant par le grand publique (essentiellement pour des applications web) que par les
professionnels (tel que Facebook et Skyrock, deux ténors des réseaux sociaux occasionnant plusieurs
millions de visiteurs par jours).
La migration du site web
La migration du site web fut relativement aisée, car le TestServer utilise PDO, une bibliothèque du
langage PHP qui permet d’offrir une couche d’abstraction aux bases de données : il suffit
théoriquement de remplacer la ligne de connexion pour que cela fasse effet. Le passage de la théorie
à la pratique n’est jamais sans soucis, et ce n’est pas cette fois qui en sera l’exception… En effet,
SQLite et MySQL n’utilise pas exactement la même syntaxe du langage SQL*, un nombre conséquent
de requêtes durent être corrigées voir même entièrement réécrites. Mais ce travail fût moins
laborieux que si le TestServer avait été écrit en utilisant la bibliothèque native de SQLite : dans ce
cas-là, tous les appels à des fonctions de SQLite auraient dû être réécrits.
La migration des données
La seconde étape fut de migrer les données de SQLite vers MySQL. Le principal problème venant du
fait qu’il n’existait aucune solution gratuite permettant de transférer un tel volume de données de
manière automatique et satisfaisante. Pour répondre à cette problématique, j’ai écrit un petit script
en langage Python que vous trouverez en annexe. Son fonctionnement est assez simple : selon les
paramètres renseignés, il génère des requêtes de sélections, SQLite les exécutes, récupère les
données, crées les requêtes d’insertions MySQL et les exécutent. Grâce à ce script, la migration du
TestServer « SQLite » au TestServer « MySQL » a pu se faire avec une interruption de service de
l’ordre de la demi-heure. L’interruption était nécessaire pour garder la cohérence du système.
Résultat
Comme le montre le tableau suivant, la migration de SQLite à MySQL à permit un gain notable dans
la réactivité du TestServer, les pages se chargent plus rapidement. La disparition des
23
«times outs » et autres files d’attentes à la base de données, a beaucoup amélioré le passage des
tests. En effet les ordinateurs de tests attendent moins longtemps pour recevoir leur prochain test,
et il n’y plus d’erreur lors du postage des résultats. Le gain de temps est d’autant plus considérable
qu’il permet ainsi d’éviter de rejouer certains tests inutilement, sachant que certain mettent
plusieurs heures à s’exécuter.
Page/action Temps d’affichage SQLite Temps d’affichage MySQL Gain de temps
GlobalResult 2min 49s 15s 1min 34s (96%)
Static Result 2.5s 1.1s 1.4s (56%)
Remonter 4 tests dans le pipe
> 5min 7s
Figure 14 : Résultat benchmark
Note : les valeurs proviennent de mon ordinateur de test, les temps d’exécution ne reflètent pas la
réalité, par exemple, la page Global Result en MySQL prend en réalité moins de 5s pour s’afficher.
Ajout de fonctionnalités
A la demande des utilisateurs, de nombreuses fonctionnalités ont été ajoutées au TestServer. Je vous
propose d’en résumer quelques une ici.
Global Result
Le plus gros travail sur cette page fut d’ajouter le mode « Perf Color » qui permet de visualiser les
performances des tests. De plus il a eu une refonte de la page dans le but d’améliorer son
ergonomie.
Summary
Cette page fut ma première tâche sur le TestServer. En effet, malgré les nombreux outils présents, il
n’existait pas de moyen simple pour avoir une vision globale de toutes les erreurs d’une version.
Dynamic Result
Cette page a été créée dans le but de remplacer la page « Static Result », qui se contentait de lister
les 1000 derniers résultats. La nouvelle page permet d’interagir avec les données, permettant de
faire des tris et des filtres. J’ai utilisé la fonctionnalité « LiveGrid » bibliothèque JavaScript OpenRico
et j’ai modifié cette dernière dans le but d’ajouter des fonctionnalités manquantes, telle que la
possibilité de surligner de diverses couleurs des lignes répondant à certains critères. J’ai fait part de
mes modifications à l’auteur de la bibliothèque, qui les intégrera peut-être dans une future version.
24
Figure 15 : Affichage des erreurs pour le testcase "TechlogBHITestCase"
Test description
Un système permettant de voir la description des tests a été ajouté. Il est composé d’une note de
javascript pour l’affichage de la description.
Figure 16 : Une description de test
La description des tests est présente dans les tests. Un script python s’occupe d’insérer
automatiquement la nouvelle description des tests dans la base de données lors de la modification
de ceux-ci. Vous trouverez ce script en annexe.
25
Keywords
Il s’agit de l’ajout d’un système permettant de trier les tests par un système de keyword.
Figure 17 : sélecteur de keywords dans la page « Global Result »
Graphiques
Travail demandé
Le développement de cette partie était le plus attendu par l’entreprise, mais malheureusement après
les nombreuses tâches que j’ai dû effectuer au préalable, ce ne fut que vers la fin de mon stage que
je pus m’y mettre. Par la suite le temps manquant désespérément, je ne pus finir mon travail avant
de terminer le stage.
Il m’a donc été demandé de faire une série de graphiques permettant de se faire une idée visuelle de
diverses informations telles que l’évolution du nombre de tests au cours du temps, l’influence de la
configuration matérielle ou logicielle de l’ordinateur sur les performances du logiciel, ou même
encore l’évolution des performances au sein d’un même produit.
Choix de la technologie
J’ai dû peser le pour et le contre entre 4 technologies de génération de graphiques qui avaient
retenus mon attention : Artichow, pChart, Google Chart et Open Flash Chart.
Artichow
Artichow est une bibliothèque PHP pour générer des graphiques. Elle possède l’avantage d’être
simple à utiliser et d’être rapide. Mais elle ne fut pas retenue pour diverses raisons dont un rendu un
peu trop « scientifique » des graphiques et une mauvaise gestion des légendes.
pChart
pChart est une bibliothèque PHP pour générer des graphiques. Elle possède l’avantage de générer de
jolies graphiques, mais demande une lourde configuration un peu trop rigide en ressource.
26
Google Chart
Google Chart est un service offert par le moteur de recherche Google pour générer facilement divers
graphiques facilement personnalisable, ayant un rendu relevant de celui de « Google » (simple et
sobre), permettant de faire des graphiques animés et interactifs. Cette solution ne fut pas retenue
pour des raisons de confidentialité : en effet, elle nécessite d’envoyer les données du graphique à
Google qui retourne l’image finale.
Open Flash Chart
Open Flash Chart est un outil écrit en langage Flash qui permet de générer facilement des graphiques
animés et hautement personnalisable. Ce fut cette solution qui fut finalement retenue.
Réalisation
Par manque de temps, seulement quelques graphiques ont pu être réalisés. Mais les bases d’un
moteur de génération de graphiques ont été réalisées permettant de réaliser une multitude de
graphiques en peu de ligne de codes.
Figure 18 : Graphiques montrant l'évolution du nombre de tests ajoutés, et leurs consommation en temps
27
Conclusion
Ce stage fut une excellente expérience tant sur le plan de la technique que sur le plan de la communication et de la connaissance de l’entreprise. J’ai été traité comme un employé et non comme un stagiaire. De ce fait, j’ai réellement progressé dans plusieurs domaines. C’était un stage difficile, techniquement parlant, que j’ai réalisé pendant trois mois. La difficulté relevait d’un environnement de développement inconnu et d’un manque d’expérience dans certains domaines. Mais tous les problèmes rencontrés m’ont permis d'accroître considérablement mes connaissances et mon savoir-faire. En ce qui concerne l’aspect technique, j’ai acquis de nouvelles connaissances sur les technologies web que ce soit la programmation coté serveur avec le langage PHP, la programmation coté client avec le langage JavaScript ou même les bases de données au travers de SQLite et MySQL. De plus, l’utilisation de Python pour faire divers scripts d’administrations m’a permis non seulement de progresser dans ce langage mais aussi de me rendre compte de l’utilité de connaître un langage de script permettant de réaliser des actions qui ne sont pas forcément compliquées à la main, mais souvent longues et retentissantes. Avec les différentes tâches diverses et variées que j’ai effectué, je suis maintenant capable de comprendre du code qui m’est inconnu et de trouver rapidement un disfonctionnement. A mes yeux, le plus important est de savoir architecturer correctement un projet. En outre, savoir produire un code clair et réutilisable, même si il est parfois plus long à élaborer, permet de gagner un temps précieux. Ce stage qui constitue ma première expérience en entreprise m’a permis de vérifier mes connaissances de l’entreprise. J’ai pu constater à quel point la communication au sein d’une équipe et même entre les équipes est importante. Il est parfois inutile de chercher des heures une solution à un problème quand quelqu’un de plus compétent que vous, sur un domaine, pourrait vous expliquer très rapidement quelle est la source du problème. De plus, le fait de dialoguer et d’échanger des idées sur un problème permet bien souvent de stimuler l’esprit et de trouver soit même une solution. J’ai vécu dans l’entreprise différentes périodes, qui ont été plus ou moins calmes. Une entreprise telle que Techsia est rythmée par les périodes de développement. La charge de travail n’est bien sûr pas la même en début de développement qu’à la fin. Quand la date limite de livraison se rapproche, tout le personnel est très actif et pour les développeurs cela se traduit par beaucoup de bugs à corriger rapidement. Pour conclure ce rapport, je suis très content d’avoir choisi ce stage car j’ai pu apprendre et travailler sur des projets intéressants tout en ayant pu observer le fonctionnement de l’entreprise. Je ne pouvais pas mieux espérer pour connaître mon futur environnement de travail.
28
Annexe
Script de migration de SQLite à MySQL #!/usr/bin/env python
#-*- encoding: utf-8 -*-
import MySQLdb as MySQL
import _mysql_exceptions
import sqlite3
# -----------------
# --- CONSTANTS ---
# -----------------
MYSQL_HOST = '127.0.0.1'
MYSQL_DB = 'testserver'
MYSQL_USER = 'testserver'
MYSQL_PASSWD = 'testserver'
SQLITE_DB = 'd:\\project\\testserver\\website\\db\\testserver.db'
# Exemple :
# TABLES = [
# {
# 'table':<table's name>,
# 'sqlite':<select part>,
# 'mysql':<insert part>
# },
# {
# 'table':<table's name>,
# 'sqlite':<select part>,
# 'mysql':<insert part>
# }
# ]
TABLES = [
{
'table':'pc',
'sqlite':'rowid,hostname,lastconnectiondate,workpc,comment,architecture,active,pctime,action',
'mysql':'id,hostname,lastconnectiondate,workpc,comment,architecture,active,pctime,action'
},
{
'table':'product',
'sqlite':'rowid,name,date,istestable,reference',
'mysql':'id,name,date,istestable,reference'
},
{
'table':'productref',
'sqlite':'rowid,productid',
'mysql':'id,productid'
},
{
'table':'testproject',
'sqlite':'rowid,name',
'mysql':'id,name'
},
{
'table':'test',
'sqlite':'rowid,testcase,testfunction,CASE WHEN productmin=\'\' OR productmin=\'0\'
THEN 1 ELSE productmin END,testprojectid',
'mysql':'id,testcase,testfunction,productmin,testprojectid'
},
{
'table':'testsynchro',
'sqlite':'rowid,testlist',
'mysql':'id,testlist'
},
{
'table':'testinwork',
'sqlite':'rowid,testid,pcid,productid,startdate,CASE WHEN synchro=0 THEN NULL ELSE
synchro END,testparameterid,architecture',
'mysql':'id,testid,pcid,productid,startdate,synchro,testparameterid,architecture'
},
{
'table':'testparameter',
29
'sqlite':'rowid,name',
'mysql':'id,name'
},
{
'table':'testpipe',
'sqlite':'rowid,testid,productid,alwaysplayed,CASE WHEN pcid=0 THEN NULL ELSE pcid
END,testparameterid,architecture',
'mysql':'id,testid,productid,alwaysplayed,pcid,testparameterid,architecture'
},
{
'table':'teststats',
'sqlite':'rowid,pcid,testid,totaltime,numbertestok,avg,bestvalue,worstvalue,bestproduct',
'mysql':'id,pcid,testid,totaltime,numbertestok,avg,bestvalue,worstvalue,bestproduct'
},
{
'table':'testresult',
'sqlite':'rowid,testid,pcid,productid,startdate,stopdate,nbok,nberror,nbfail,detail,duration,t
wrowid,errorcode,testparameterid,architecture,CASE WHEN synchro=0 THEN NULL ELSE synchro END',
'mysql':'id,testid,pcid,productid,startdate,stopdate,nbok,nberror,nbfail,detail,duration,twrow
id,errorcode,testparameterid,architecture,synchro'
}
]
# -----------------
# --- FUNCTIONS ---
# -----------------
def create_select_query(table, structure):
return "SELECT %s FROM %s;" % (structure, table)
def create_insert_query(table, structure, row):
query = ["INSERT INTO %s(%s) VALUES (" % (table, structure)]
for cell in row:
if (cell == None):
query.append("NULL")
elif (isinstance(cell, (str, unicode))):
query.append("'%s'" % cell)
else:
query.append("%s" % cell)
query.append(',')
query.pop()
query.append(");")
return ''.join(query)
# -------------
# --- BEGIN ---
# -------------
print "--------------------------------------"
print "--- SQLite2MySQL Database Migrator ---"
print "--------------------------------------"
print "Copyright 2010, Jonathan Tremesaygues <[email protected]>"
# Connection
print "---CONNECTION---"
print " (1/2) Connect to MySQL...",
mysql_connection = MySQL.connect(host=MYSQL_HOST, user=MYSQL_USER,
passwd=MYSQL_PASSWD, db=MYSQL_DB)
mysql_cursor = mysql_connection.cursor()
print "Done !"
print " (2/2) Connect to SQLite...",
sqlite_connection = sqlite3.connect(SQLITE_DB)
sqlite_cursor = sqlite_connection.cursor()
print "Done !"
# Cleaning
print "---CLEANING---"
for i in xrange(len(TABLES)-1, -1, -1):
table = TABLES[i]['table']
print " (%i/%i) Clean table %s... " % (len(TABLES)-i, len(TABLES), table),
mysql_cursor.execute('TRUNCATE TABLE %s;' % table)
30
print "Done !"
INTEGRITY_ERRORS = []
# Next,Process
print "---TRANSFERING---"
for i in xrange(0, len(TABLES)):
table = TABLES[i]['table']
sqlite_structure = TABLES[i]['sqlite']
mysql_structure = TABLES[i]['mysql']
print " (%i/%i) Transfer table %s... " % (i+1, len(TABLES), table),
# Create SELECT query
select_query = create_select_query(table, sqlite_structure)
# Execute SELECT query
sqlite_cursor.execute(select_query)
# Processing...
for row in sqlite_cursor:
#Create INSERT query
insert_query = create_insert_query(table, mysql_structure, row)
try:
mysql_cursor.execute(insert_query)
except _mysql_exceptions.IntegrityError: # Integrity Error (foreign key sux)
INTEGRITY_ERRORS.append(insert_query)
print "Transfert done ! ",
mysql_connection.commit()
print "Commit done !"
# Deconnection
mysql_cursor.close()
sqlite_cursor.close()
# Display errors
#for error in INTEGRITY_ERRORS:
# print error
Script de mise à jour des descriptions des tests #!/usr/bin/env python
#-*- coding: utf-8 -*-
import ConfigParser
import MySQLdb
import sys
import imp
import unittest
# Importation de la configuration
config = ConfigParser.ConfigParser()
config.read('testDescriptionUpdater.conf')
MYSQL_HOST = config.get('mysql', 'host')
MYSQL_DB = config.get('mysql', 'database')
MYSQL_USER = config.get('mysql', 'user')
MYSQL_PASSWD = config.get('mysql', 'password')
TESTS_PATH = config.get('tests', 'path')
# Connection à la base de données
mysql_connection = MySQLdb.connect(host=MYSQL_HOST, user=MYSQL_USER,
passwd=MYSQL_PASSWD, db=MYSQL_DB)
mysql_cursor = mysql_connection.cursor()
# Récupère tous les testcases/tesfunctions
testcases = {}
query = "SELECT testcase, testfunction FROM test"
mysql_cursor.execute(query)
for row in mysql_cursor:
testcase = row[0]
testfunction = row[1]
if not testcase in testcases:
31
testcases[testcase] = []
testcases[testcase].append(testfunction)
# On ajoute le path des tests à la variable pythonpath
sys.path.append(TESTS_PATH)
query = ""
for testcase in testcases:
try:
file, pathname, description = imp.find_module(testcase)
mon_module = imp.load_module(testcase, file, pathname, description)
sys.modules[testcase] = mon_module
except ImportError, p:
pass
#print "Unsuccefull import of %s : %s" % (testcase, p)
except NameError, p:
pass
#print "Unsuccefull import of %s : %s" % (testcase, p)
else:
#print "Succefull import of %s" % testcase
if (eval("%s.%s.__doc__" % (testcase, testcase), sys.modules) is not None):
testcase_description = eval("%s.%s.__doc__" % (testcase, testcase), sys.modules)
else:
testcase_description = ""
#print "%s : %s" % (testcase, testcase_description)
for testfunction in testcases[testcase]:
if (eval("%s.%s.%s.__doc__" % (testcase, testcase, testfunction), sys.modules) is
not None):
testfunction_description = eval("%s.%s.%s.__doc__" % (testcase, testcase,
testfunction), sys.modules)
else:
testfunction_description = ""
#print "\t%s : %s" % (testfunction, testfunction_description)
query = "UPDATE test SET testcase_description=\"%s\",
testfunction_description=\"%s\" WHERE testcase='%s' AND testfunction='%s';\n" %
(testcase_description, testfunction_description, testcase, testfunction)
mysql_cursor.execute(query)
mysql_connection.commit()
mysql_cursor.close()