43
Rapport de stage Mise en place d’un environnement de qualication pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2 e année réalisé au LORIA en vue de la validation de la 2 e année d’études à TELECOM Nancy Maître de stage : Martin Quinson, Gérald Oster Encadrant universitaire : Suzanne Collin

Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Embed Size (px)

Citation preview

Page 1: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Rapport de stage

Mise en place d’un environnement de quali�cation

pour la plateforme PLM

Pierric Grguric

Année 2014–2015

Stage de 2e

année réalisé au LORIA

en vue de la validation de la 2e

année d’études à TELECOM Nancy

Maître de stage : Martin Quinson, Gérald Oster

Encadrant universitaire : Suzanne Collin

Page 2: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année
Page 3: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Déclaration sur l’honneur de non-plagiat

Je soussigné(e),

Nom, prénom : Grguric, Pierric

Élève-ingénieur(e) régulièrement inscrit(e) en 2e année à TELECOM Nancy

Numéro de carte de l’étudiant(e) : 31314760

Année universitaire : 2014–2015

Auteur(e) du document, mémoire, rapport ou code informatique intitulé :

Mise en place d’un environnement de quali�cation pour la

plateforme PLM dediée à l’apprentissage de la programmation

Par la présente, je déclare m’être informé(e) sur les di�érentes formes de plagiat existantes et sur

les techniques et normes de citation et référence.

Je déclare en outre que le travail rendu est un travail original, issu de ma ré�exion personnelle,

et qu’il a été rédigé entièrement par mes soins. J’a�rme n’avoir ni contrefait, ni falsi�é, ni copié

tout ou partie de l’œuvre d’autrui, en particulier texte ou code informatique, dans le but de me

l’accaparer.

Je certi�e donc que toutes formulations, idées, recherches, raisonnements, analyses, programmes,

schémas ou autre créations, �gurant dans le document et empruntés à un tiers, sont clairement

signalés comme tels, selon les usages en vigueur.

Je suis conscient(e) que le fait de ne pas citer une source ou de ne pas la citer clairement et

complètement est constitutif de plagiat, que le plagiat est considéré comme une faute grave au sein

de l’Université, et qu’en cas de manquement aux règles en la matière, j’encourrais des poursuites

non seulement devant la commission de discipline de l’établissement mais également devant les

tribunaux de la République Française.

Fait à Vandoeuvre-lès-Nancy, le 10 septembre 2015

Signature :

i

Page 4: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

ii

Page 5: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Rapport de stage

Mise en place d’un environnement de quali�cation

pour la plateforme PLM

Pierric Grguric

Année 2014–2015

Stage de 2e

année réalisé au LORIA

en vue de la validation de la 2e

année d’études à TELECOM Nancy

Pierric Grguric

8, rue Jacques Callot

54500, Vandoeuvre-lès-Nancy

+33 (0)6 02 36 08 35

[email protected]

TELECOM Nancy

193 avenue Paul Muller,

CS 90172, VILLERS-LÈS-NANCY

+33 (0)3 83 68 26 00

[email protected]

LORIA

Campus scienti�que

54506, Vandoeuvre-lès-Nancy

+33 (0)3 83 59 20 00

Maître de stage : Martin Quinson, Gérald Oster

Encadrant universitaire : Suzanne Collin

iii

Page 6: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

iv

Page 7: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Remerciements

Je tiens à remercier toutes les personnes qui m’ont aidé tout au long de mon stage.

Plus particulièrement, je tiens à remercier mes maîtres de stage MM. Martin Quinson et Gérald

Oster pour l’encadrement et les conseils qu’ils m’ont apporté pendant mon stage.

Je remercie également M. Mathieu Nicolas pour son aide, notamment pour la compréhension du

code existant.

v

Page 8: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

vi

Page 9: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Table des matières

Table des matières vii

1 Introduction 1

2 Présentation 3

2.1 Présentation du LORIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Présentation de la PLM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.1 PLM version lourde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.2 PLM version web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Déroulement du stage 9

3.1 Infrastructure Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2 Tests unitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.3 Tests EndToEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4 Bilan 15

5 Conclusion 17

Bibliographie / Webographie 19

Liste des illustrations 21

Glossaire 23

Annexes 26

A Exemple de test unitaire 27

B Exemple de test Protractor 31

Résumé / Abstract 33

vii

Page 10: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

viii

Page 11: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

1 Introduction

La "Programmer’s Learning Machine" (PLM) est un logiciel d’apprentissage des bases de la pro-

grammation informatique. Il est utilisé tous les ans pour former une centaine d’étudiant à TE-

LECOM Nancy de façon intensive (en deux semaines). Jusqu’à maintenant, il n’existait qu’une

version "locale" de la PLM, ce qui posait un problème en termes de possibilité de di�usion. Pour

remédier à ce problème, la décision a été prise de transformer le logiciel en une application web.

L’un des inconvénients de cette solution est le partage des ressources.

C’est dans le cadre de cette décision que s’inscrit mon stage. Plus particulièrement, j’ai été chargé

de mettre en place un environnement de test pour déterminer la charge que peut supporter cette

nouvelle version de la PLM, ainsi que des tests unitaires a�n de s’assurer qu’une version stable

soit prête pour la rentrée de septembre.

De prime abord, nous verrons plus en détail le contexte du stage, à savoir l’établissement d’ac-

cueil : le LORIA, ainsi que le logiciel PLM et plus particulièrement ses évolutions récentes : sa

version locale et sa version web.

Ensuite, nous verrons le déroulement de mon stage, c’est-à-dire les objectifs et la manière dont je

les aient complétés, ainsi que les problèmes que j’ai rencontrés et la façon dont je les aient résolus

sur les trois parties de mon stage qui sont :

— la mise en place de scripts Docker a�n de faciliter le lancement du serveur de PLM,

— l’implémentation de tests unitaires a�n de véri�er le comportement des nouvelles fonc-

tions,

— et l’écriture de scénarios de tests Protractor a�n de simuler les actions d’un utilisateur sur

l’interface web.

Pour �nir, nous verrons dans quelle mesure mon travail a été intégré à la version actuelle de la

PLM, ainsi que les améliorations qu’il est prévu d’apporter au projet.

1

Page 12: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

2

Page 13: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

2 Présentation

2.1 Présentation du LORIA

Le LORIA (laboratoire lorrain de recherche en informatique et ses applications) est une Unité

Mixte de Recherche (UMR 7503), commune à plusieurs établissements : le CNRS (Centre National

de la Recherche Scienti�que), l’Université de Lorraine et Inria (Institut National de Recherche en

Informatique et Automatique). Depuis sa création en 1977, sa mission est la recherche fondamen-

tale et appliquée en sciences informatiques.

le LORIA emploi 450 personnes réparties en cinq départements (Figure 2.1) [1] :

- Algorithmique, calcul, image et géométrie (6 équipes)

- Méthodes formelles (6 équipes)

- Réseaux, systèmes et services (3 équipes)

- Traitement automatique des langues et des connaissances (8 équipes)

- Systèmes complexes et intelligence arti�cielle (5 équipes)

J’ai été accueilli dans l’équipe VERIDIS dont la mission principale est la conception de systèmes

distribués et la véri�cation des systèmes. Elle fait partie du département Méthodes formelles.

La PLM n’est pas vraiment un projet de l’équipe VERIDIS, mais plutôt de MM. Martin Quinson

et Gérald Oster qui l’ont développé pour l’enseignement à TELECOM Nancy.

3

Page 14: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

30 É

QU

IPES

/ 5

DÉP

ART

EMEN

TS

D

épar

tem

ent

4 :

T

rait

emen

t au

tom

atiq

ue d

es

la

ngue

s et

des

con

nais

sanc

es

R

espo

nsab

le :

Bru

no G

uilla

ume

D

épar

tem

ent

5 :

Sys

tèm

es c

ompl

exes

et

In

telli

genc

e ar

tifi

ciel

le

R

espo

nsab

le :

Ber

nard

Gir

au

D

épar

tem

ent

3 :

Rés

eaux

, sy

stèm

es e

t

s

ervi

ces

R

espo

nsab

le :

Ye-

Qio

ng S

ong

D

épar

tem

ent

2 :

Met

hode

s fo

rmel

les

R

espo

nsab

le :

Dom

iniq

ue M

éry

Dép

arte

men

t 1

:

A

lgor

ithm

ique

, ca

lcul

,

im

age

et g

éom

étri

e

Re

spon

sabl

e :

Sylv

ain

Laza

rd

DIR

ECTI

ON

/ C

OM

ITÉ

DE

DIR

ECTI

ON

Dir

ecte

ur

: J

ean-

Yves

Mar

ion

D

irec

teur

adj

oint

:

Yan

nick

Tou

ssai

nt

Re

spon

sabl

e ad

min

istr

atif

: C

hant

al C

hrét

ien

Ass

ista

nte

de d

irec

tion

:

Jos

iane

Ref

fort

SERV

ICE

DE

GES

TIO

N

LORI

A

Res

pons

able

:

C

hant

al C

hrét

ien

  Ges

tion

du

budg

et :

J

ulie

Buq

uet

Jen

nife

r G

érar

d

S

uivi

et

gest

ion

des

d

épar

tem

ents

:

Ant

oine

tte

Cour

rier

L

aure

nce

Félic

ité

Del

phin

e

Hub

ert

Mar

tine

Kuh

lman

n C

hris

telle

Lev

êque

S

ylvi

e M

usill

i

A

ssis

tant

e de

pr

éven

tion

:

Agn

ès V

idar

d

SERV

ICE

INFO

RMAT

IQU

E CO

MM

UN

 

Res

pons

able

:

J

ean-

Mic

hel

Ant

oine

P

atri

ck A

ubie

r P

atri

ck E

tien

ne

Ant

oine

Fal

cone

N

atha

lie

Pier

re

Thi

erry

Gar

tise

r J

ean-

Clau

de G

iese

L

ione

l Mau

rice

D

avid

Maz

é C

édri

c Vi

lla

Lau

rent

Wei

nhar

d A

ssis

tant

e :

Gw

eanë

lle

Serg

ent

ABC

– Y

.Gue

rmeu

r

ALI

CE –

B.

Lévy

CARA

MEL

– P

. G

audr

y

MA

GRI

T –

M.O

. Be

rger

VEG

AS

– S.

Laz

ard

CART

E –

E. J

eand

el

CASS

IS –

M.

Rusi

now

itch

DED

ALE

– J

.P.

Jacq

uot/

J.

Souq

uiér

es

MO

SEL

– D

. M

éry

VER

IDIS

– S

. M

erz

PARE

O –

P.E

. M

orea

u

TYPE

S –

D.

Gal

mic

he

ALG

ORI

LLE

– M

. Q

uins

on

MA

DYN

ES –

I. C

hris

men

t O

RCH

IDS

AD

AG

IO –

I. D

eble

d-Re

nnes

son

MU

LTIS

PEEC

H –

D.

Jouv

et

MA

IA –

F.

Char

pille

t

QG

AR

– A.

Tabb

one

SEM

AG

RAM

ME

– P.

De

Gro

ote

REA

D –

A.

Bela

id

CORT

EX –

B.

Gir

au

ORP

AIL

LEU

R – A

. N

apol

i

Équi

pes

de

rech

erch

e co

mm

unes

av

ec IN

RIA

Nan

cy

Gra

nd-E

st

ORG

ANIG

RAM

ME

2014

(*

) co

mm

un

avec

INRI

A N

ancy

G

rand

-Est

SYN

ALP

– C

. Ce

risa

ra

NEU

ROSY

S – A

. H

utt

SE

RVIC

E CO

MM

UN

ICAT

ION

O

livia

Bre

nner

KIW

I – A

. Bo

yer

CELL

O –

H.

Van

Dit

mar

sch

COA

ST –

F.

Char

oy

Char

gées

de

mis

sion

- C

yber

sant

é :

M.-

D.

Dev

igne

s - S

écur

ité

: V.

Cor

tier

- S

ystè

mes

cyb

erph

ysiq

ues

: F.

Sim

onot

-Lio

n

Pers

onne

l IN

RIA

en i

tali

que

CA

PSID

- D

. Ri

tchi

e

SM

art

– K.

Sm

aïli

Figure 2.1 – Organigramme du LORIA

4

Page 15: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

2.2 Présentation de la PLM

MM. Martin Quinson et Gérald Oster ont démarré le projet PLM en 2008 dans le but de faciliter

les débuts dans le monde de la programmation aux élèves de TELECOM Nancy. La PLM permet

d’apprendre les bases de la programmation dans plusieurs langages (Java, Python, Scala) à travers

200 exercices allant de la déclaration de variable à l’écriture de fonction récursives en passant par

les algorithmes de tri.[2]

2.2.1 PLM version lourde

Une fois le logiciel PLM lancé, l’utilisateur a accès à di�érents univers regroupant plusieurs exer-

cices, classés de sorte à assurer une progression logique de l’utilisateur. Le premier univers a pour

objectif de faire évoluer des "buggles" (petites bêtes issu du jeu space invaders) dans di�érents

mondes, ce qui a pour e�et d’apporter un coté récréatif aux premiers niveaux, et donc l’utilisateur

ne se sent pas perdu dans du "code pur".

Pour réussir un exercice, l’utilisateur doit écrire un code qui va modi�er le monde de l’exercice

a�n qu’il devienne identique au monde objectif. Sur la Figure 2.2 on peut voir le monde objectif

sur la droite. Il s’agit d’un exercice de l’univers buggle car l’on peut en apercevoir un sur la case en

haut à droite. Le monde de départ correspond à la même grille mais elle n’est pas encore colorié,

elle est entièrement blanche. Le code solution de l’exercice sera donc celui qui donnera au buggle

les instructions nécessaires pour qu’il reproduise les motifs présent sur le monde objectif.

Figure 2.2 – Aperçu de la PLM version lourde.

A�n d’aider l’utilisateur dans l’écriture du bon code, et pour lui apprendre les commandes corres-

pondantes lorsque c’est la première fois qu’il les rencontrent, il y a un texte descriptif de l’exercice

sur la gauche de l’écran. Une fois que l’utilisateur a lu ces instructions, il peut changer d’onglet

a�n que cette partie de l’écran soit remplacé par un éditeur de texte où il va pouvoir y écrire son

5

Page 16: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

code. Une fois que l’utilisateur estime avoir le bon code, il va lancer l’exécution et un message

va apparaître dans la partie basse de l’écran. Ce message peut être de trois types : soit le code

contient une erreur et donc le message décrit cette erreur, soit le code s’exécute correctement

mais ne résout pas l’exercice et donc le message liste les di�érences entre le monde d’arrivée

et le monde objectif, soit le code est solution de l’exercice et donc le texte est un message de

félicitations pour con�rmer à l’utilisateur qu’il a bien réussi l’exercice.

À l’origine, la PLM a été développée en tant qu’application Java avec interface Swing, ce qui

implique que l’utilisateur doit lancer le programme sur son ordinateur, après avoir préalablement

téléchargé l’archive jar de la PLM. L’un des inconvénient est que la progression de l’utilisateur

doit être exportée manuellement lorsque l’on souhaitait changer de machine.

2.2.2 PLM version web

Pour la rentrée scolaire 2015, l’objectif du projet PLM était d’abandonner le client lourd au pro�t

d’une version web, ceci a�n de supprimer l’étape de téléchargement, d’avoir la possibilité de

continuer son code facilement même si l’on change de machine, et de pouvoir di�user la PLM à

une plus large échelle, puisqu’il su�ra d’accéder à une page web pour commencer à utiliser la

PLM.

Cette nouvelle version a entraîné un changement de technologie, puisque le rendu graphique,

auparavant réalisé en Swing, est maintenant assuré par AngularJS[3], ainsi que canvas pour le

rendu des mondes. Un serveur web tournant sous Play Framework a également dû être mis en

place, a�n d’exécuter le code des utilisateurs. La connexion entre les utilisateurs (clients) et le

serveur se fait à l’aide de WebSockets, ce qui permet un échange constant. La version obtenue

n’ayant été testée que par une dizaine d’utilisateurs, il était crucial que des tests certi�ent le bon

fonctionnement de l’application avant la mise en production à la rentrée de septembre.

Figure 2.3 – Aperçu de la PLM version web

Sur la Figure 2.3 on peut voir un aperçu de la PLM dans cette nouvelle version. on y retrouve

l’éditeur de texte sur la droite, et les instructions ainsi que le monde de l’exercice sur la gauche. La

zone de texte donnant le résultat de l’exécution du code est toujours présente en bas de l’écran. On

observe que l’on n’a plus une fenêtre d’application java, mais celle d’un navigateur web puisque

la PLM est maintenant accessible depuis un site web.

6

Page 17: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Le développement de cette version web a été assuré par M. Mathieu Nicolas, un ingénieur diplomé

de TELECOM Nancy qui travaille sur le projet PLM depuis un an. Le projet a été accéléré par la

contribution d’élèves de l’IUT Nancy Charlemagne en stage sur le projet PLM sur la période

mai/juin. C’est durant cette période que l’interface coté client a été développée, mais elle n’avait

pas encore pu être testée complètement.

Durant mon stage, il y avait également trois autres élèves qui e�ectuait leurs stage sur la PLM :

— M. Bühler s’occupait de créer un réseau de neurones a�n de détecter les élèves en di�culté

d’après les codes soumis,

— M. Carpentier avait pour objectif de détecter les erreurs les plus fréquentes a�n de proposer

une aide personnalisée aux utilisateurs qui rencontrent ces erreurs,

— M. Gloaguen était chargé de développer une infrastructure distribuable coté serveur ca-

pable de supporter une centaine d’utilisateurs.

7

Page 18: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

8

Page 19: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

3 Déroulement du stage

C’est dans ce contexte de changement de version que mon stage c’est déroulé. En e�et, les tech-

nologies utilisées n’étant plus les mêmes, il était nécessaire que certaines parties de la PLM soient

recodées dans un autre langage. A�n de s’assurer que ces changements ne modi�ent pas le com-

portement de la PLM, il a été nécessaire de mettre en place deux types de test : des tests de

correction ("Est ce que l’application fonctionne ?") et des tests de performance ("Est ce que X

utilisateurs peuvent utiliser l’application en même temps ?"). C’est là l’objectif de mon stage.

Il s’est découpé en trois grandes parties à savoir :

— établir un script de lancement a�n de déployer rapidement un serveur,

— écrire des tests unitaires a�n de s’assurer que les composantes de la PLM se comportent

comme attendu,

— écrire des tests E2E a�n de simuler le parcours d’un utilisateur.

3.1 Infrastructure Docker

La première partie du stage était d’avoir un script de lancement de la PLM. En e�et, a�n d’ef-

fectuer les tests sur un environnement séparé, il était nécessaire d’avoir un script permettant de

lancer un serveur de la PLM rapidement.

Pour ce faire, j’ai choisi d’utiliser la technologie Docker qui permet de générer une image équi-

valente à une machine virtuelle possédant uniquement les composantes souhaitées. Une image

docker se créée de la façon suivante : on écrit un docker�le qui liste l’ensemble des commandes

nécessaires à l’obtention de l’état dans lequel on souhaite avoir notre image docker. Ainsi la

"compilation" du docker�le génère une image docker qui est dans l’état que l’on souhaite, prête

à l’emploi. L’avantage de cette technologie est qu’une fois une image docker obtenue, elle peut

être utilisée facilement pour déployer l’application.

Un des avantages qui m’a poussé à choisir cette technologie est que l’on peut facilement mettre à

jour les composantes de l’image puisqu’il su�t de recompiler le docker�le. De même, si l’on sou-

haite légèrement changer la con�guration de l’image, la seule modi�cation à faire est de changer

la ligne correspondante du Docker�le. Ensuite on recompile le Docker�le et l’image est mise à

jour.

9

Page 20: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Un autre avantage de la technologie Docker est que les docker�les peuvent hériter d’autres do-

cker�les, ainsi on peut repartir d’une image docker déjà existante et exécuter quelques lignes de

commandes à l’intérieur de cette image a�n de créer une image docker adaptée à nos besoins. J’ai

donc pro�té de cette fonctionnalité en découpant le script en deux parties :

— La première partant d’une image sous ubuntu avec un jdk où je rajoute le package Play

Framework. C’est la partie "stable" du script puisqu’elle n’est pas modi�ée lorsque l’on

change le code de la PLM. Il n’y a donc pas besoin de régénérer l’image correspondante

lors d’une modi�cation de la PLM. J’ai choisi d’utiliser une image sous ubuntu comme

base, car parmi les distributions sur lesquelles Play Framework est stable, c’est l’image de

plus petite taille.

— La deuxième partie repart de cette image docker pour y télécharger la dernière version de

PLM et la lancer. Ainsi en cas de modi�cation de la PLM, il n’y a que la compilation du

deuxième docker�le à relancer.

La raison qui m’a poussé à séparer le script en deux parties est que l’installation de Play Frame-

work requiert le téléchargement de nombreuses petites librairies. Or le téléchargement n’étant

pas "direct" puisque le container est isolé du système d’exploitation de la machine hôte, il arrive

que certaines dépendance soit "perdues" et donc la création de l’image docker échoue une fois sur

trois. Ainsi la séparation en deux Docker�le a permis d’installer Play Framework une fois pour

toutes et par la suite cette image n’a pas était recréée.

Voici le script de la deuxième partie :

FROM p i e r r i c g r g u r i c / docker−play −framework

RUN apt−g e t −y update && apt−g e t −y i n s t a l l g i t

RUN g i t c l o n e h t t p s ://github.com/MatthieuNICOLAS/webPLM.git --depth 1WORKDIR webPLM

RUN a c t i v a t o r compi l e

RUN a c t i v a t o r c l e a n s t a g e

CMD ["./target/universal/stage/bin/web-plm"]

La première ligne correspond à l’héritage : on indique que l’image doit être construite à partir

d’une image préexistante, en l’occurrence celle que j’ai auparavant construite et qui contient donc

un environnement ubuntu, avec une jdk ainsi que le package Play Framework.

Les deux lignes suivantes correspondent à l’installation de git, puis au téléchargement de la der-

nière branche du dépot de PLM.

Ensuite, on se place à l’intérieur du dossier de PLM, puis on compile le projet a�n de créer un

binaire exécutable.

En�n la dernière ligne correspond à la commande qui sera exécutée lors du lancement de l’image

Docker. Elle aura pour e�et de lancer le serveur PLM à l’intérieur du container Docker.

10

Page 21: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

3.2 Tests unitaires

La deuxième partie du stage consistait en l’écriture de tests unitaires, car avec le passage en

version web, les actions e�ectuées sur un monde sont calculées d’après l’exécution du code de

l’utilisateur coté serveur, et sont rejouées coté client. Il était donc important de s’assurer que le

monde visible coté client était identique à celui coté serveur.

L’ensemble des exercices de la PLM est divisé en plusieurs univers : l’univers baseball, l’univers

bat, l’univers buggle, l’univers dutchFlag, l’univers hanoi, l’univers pancake et l’univers sort.

L’univers bat ne nécessite pas de tests car il n’y a pas de "monde", dans cet univers l’utilisateur

doit créer des fonctions qui manipulent des chaînes de caractères, il n’y a donc pas d’image à

a�cher. Les exercices de cet univers sont issus du site codingbat[4].

Il existait déjà des tests sur l’univers buggle. Ces tests sont écrits en JavaScript avec le framework

de test Jasmine[5]. Après une étape de compréhension des tests existants, j’ai donc implémenté

les tests manquant sur cet univers, à savoir véri�er que l’application d’une opération puis son

inversion sur un monde ne change pas le monde en question.

Le framework de test Jasmine permet d’écrire des scénarios de tests de façon structurée. Chaque

test se présente alors en plusieurs parties :

— Une première section appelée "BeforeEach" qui correspond aux actions e�ectuée avant

chaque test (avant chaque bloc "it")

— Une seconde section appelée "AfterEach" qui sera exécutée après chaque test (après chaque

bloc "it")

— Une succession de bloc "it" qui correspondent chacun à un test di�érent. Chaque bloc "it"

est constitué de commandes qui font fonctionner le code à tester et de conditions attendues.

Si toutes les conditions d’un tests sont validées, alors le test est passé correctement. Sinon

si l’une des conditions n’est pas respectée alors le test échoue et l’on passe au bloc "it"

suivant.

Voici un exemple de test unitaire (un bloc "it") qui véri�e que l’application successive des mé-

thodes apply puis reverse ne change pas le monde sur lequel on les applique. Il s’agit de l’opéra-

tion �ipOperation sur un monde de l’univers pancake. Le �chier complet est présenté en annexe.

i t (’should not change currentWorld when applied then reversed’ ,

function ( ) {

var c u r r e n t = {

p a n c a k e S t a c k : cur ren tWor ld . p a n c a k e S t a c k . s l i c e ( ) ,

moveCount : moveCount ,

numberF l ip : numberF l ip

} ;

f l i p O p e r a t i o n . app ly ( cur ren tWor ld ) ;

f l i p O p e r a t i o n . r e v e r s e ( cur ren tWor ld ) ;

e x p e c t ( cur ren tWor ld ) . t o E q u a l ( c u r r e n t ) ;

} ) ;

La première ligne correspond à la déclaration du bloc "it". Elle sert également à décrire ce qui sera

testé, ce sera le message qui sera a�ché lors de l’exécution et qui permettra de repérer quels sont

les tests qui ont échoués.

Ensuite, on créé une copie du monde courant que l’on stocke dans la variable current. En e�et,

l’on souhaite véri�er que le monde n’as pas subit de modi�cation au �nal, il faut donc sauvegarder

son état initial. Le bloc "it" est extrait d’un test du monde des pancakes, le monde contient donc

11

Page 22: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

la pile de pancake et deux entiers correspondant au compteur du nombre d’opération ainsi qu’à

l’indice du dernier pancake retourné.

Ensuite on applique l’opération testée (ici il s’agit de �ipOperation) au monde, puis on l’inverse.

En�n, on véri�e que le monde est identique à sa version originale que l’on avait sauvegardé dans

current.

Ce test en particulier sert à compléter les tests existant puisqu’il existe déjà un bloc "it" pour tester

la fonction apply, et un autre pour la fonction reverse, mais l’utilité des tests étant de détecter des

comportements qui normalement ne devrait pas se produire, il a été décidé d’implémenter ce test

ainsi que le test concernant reverse/apply pour rendre l’ensemble des tests plus exhaustif.

Le but global de ces tests est de s’assurer que les fonctions qui manipulent les di�érents objets

présents à l’intérieur de PLM modi�ent correctement ces objets lorsqu’elles sont appelées. Ces

tests servent également à assurer que lors du lancement en septembre, les élèves ne se retrouve-

ront pas devant une page blanche. L’écriture de ces tests m’a notamment permis de détecter une

erreur d’a�chage dans l’univers des pancakes, que j’ai pu corriger.

12

Page 23: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

3.3 Tests EndToEnd

La troisième et dernière partie du stage était consacrée à l’écriture de tests EndToEnd (E2E). Le but

de ce type de test est de simuler le comportement d’un utilisateur navigant à travers l’application.

Pour cela, il faut envoyer des commandes au navigateur qui correspondent aux action qu’un

utilisateur e�ectuerait (cliquer sur un bouton, écrire du texte dans certaines zones, etc.)

La PLM utilise Angular.js comme librairie principale pour l’interface graphique. Par conséquent,

j’ai décidé d’utiliser Protractor qui est un framework de test E2E pour les applications utilisant

angular.js. L’avantage de Protractor est qu’il se synchronise avec la page actuellement testée, ce

qui fait que l’on n’a en théorie pas besoin de gérer les latences dû au serveur ou au navigateur.

Malheureusement la PLM utilise une websocket pour réaliser les échanges entre le client et le

serveur, ce qui fait que Protractor ne peut plus se synchroniser (à cause des requêtes perma-

nentes). J’ai donc du gérer manuellement la synchronisation entre Protractor et la page web qui

était testée. Pour cela, avant chaque action que je souhaitais e�ectuer sur un élément, j’ai ajouté

un test qui attend que l’élément concerné soit visible. Ceci a�n de m’assurer que la partie de la

page contenant l’élément avec lequel je voulais interagir soit bien chargée.

Protractor n’étant pas parfaitement adapté à la synchronisation manuelle, il en résulte que les

tests sont instable : neuf fois sur dix le test va se passer correctement, et une fois sur dix Pro-

tractor va détecter que l’élément est visible avant qu’il soit complètement chargé, ce qui va poser

problème lorsque l’on va tenter d’exécuter la ligne suivante. Dans le meilleur des cas, la ligne est

ignoré, mais du coup les actions suivantes ne s’e�ectueront pas sur une page dans l’état souhaité

et le test échoue, sinon l’exécution de la ligne renvoie une erreur et le test s’arrête.

Actuellement, les fonctions permettant d’e�ectuer de la synchronisation manuelle sont en cours

d’amélioration, ainsi les tests gagneront peut-être en stabilité lorsque l’optimisation de ces fonc-

tions sera terminé. Une solution alternative au problème est d’ajouter une temporisation entre

chaque action en plus de la synchronisation manuelle, ce qui augmente la stabilité des tests mais

augmente énormément la durée des tests.

Un autre avantage de Protractor est que les tests écrits peuvent facilement être mis à l’échelle.

En e�et, chaque test Protractor utilisant sa propre page du navigateur (chrome par défaut), il est

possible d’en lancer autant que l’on souhaite en parallèle, la seule limitation étant la capacité de

la machine. Ainsi, les tests écrits pourront être réutilisés lors de la conception de tests de charges.

Il était prévu que j’en établisse dans le cadre de mon stage, mais par manque de temps je n’ai pas

pu en implémenter.

13

Page 24: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Voici un exemple de bloc "it" de test Protractor (Le �chier complet est présenté en annexe), il

simule un utilisateur qui réussit un exercice :

i t (’should congrats the user for passing the exercise’ , function ( ) {

browser . e x e c u t e S c r i p t ("window.editor.setValue(\"avance();\");" ) ;//on ecrit le code de l’exercice

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( b u t t o n ) , 5 0 0 0 , "Button unclickable") ;

b u t t o n . c l i c k ( ) ;//on clique sur executerbrowser . wa i t ( u n t i l . v i s i b i l i t y O f ( congratsW ) , 5 0 0 0 , "Congrats pop-up

isn’t here" ) ;

browser . wa i t ( u n t i l . t e x t T o B e P r e s e n t I n E l e m e n t ( c o n g r a t s T i t l e ,’Exercicereussi’ ) , 5 0 0 0 , "Congrats pop-up isn’t here" ) ;

e x p e c t ( c o n g r a t s T i t l e . g e t T e x t ( ) ) . t o E q u a l (’Exercice reussi’ ) ;//on s’attend a ce que la fenetre de validation de l’exerciceapparaisse

c o n g r a t s C r o s s . c l i c k ( ) ;

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( b u t t o n ) , 5 0 0 , "Pop-up still here" ) ;

} ) ;

Protractor utilise également le framework de test Jasmine, j’ai donc pu réutiliser les connais-

sances acquises lors de l’écriture des tests unitaires. On retrouve donc la déclaration du bloc "it"

en première ligne avec la description du test.

Le bloc "BeforeEach" correspondant nous a amené sur la page du première exercice et l’on a déjà

attendu qu’elle soit complètement chargé. Il n’y a donc pas à e�ectuer de synchronisation ma-

nuelle. On peut donc directement e�ectuer la première action qui consiste à écrire le code que

l’on veut soumettre au serveur PLM dans la zone prévue. Le bloc "it" est extrait du test du premier

exercice de la PLM, le code nécessaire pour réussir l’exercice est donc : "avance() ;".

Les lignes commençant par "browser.wait" sont les lignes de synchronisation manuelle. On peut

voir qu’il y en a au minimum une avant chaque action qui attend un élément nécessaire à l’action

suivante. Ces lignes disposent d’une durée au delà de laquelle Protractor considère que la condi-

tion ne sera pas remplie, et donc il passe à la suite en a�chant le message associé.

Ensuite, on clique sur le bouton qui envoie le code au serveur. Si tout se passe bien, le serveur

répond avec une liste d’instructions et le monde de l’exercice est modi�é en conséquence.

La ligne débutant par "expect" correspond à la condition qui va déterminer si le test a été passé

avec succès ou non. En l’occurrence on véri�e qu’il y a bien une pop-up avec écrit "Exercice

reussi" qui apparaît.

En�n, on ferme cette pop-up a�n de retrouver une page "normale" (sans pop-up) pour pouvoir

e�ectuer la suite du test (le bloc "it" suivant).

14

Page 25: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

4 Bilan

Les tests écrits pendant mon stage permettent actuellement d’assurer un déploiement rapide du

serveur, et garantissent une �abilité dans le comportement interne de l’application, ainsi que le

comportement global de la PLM vis à vis de l’utilisateur. Ces tests sont intégrés dans la version

en production a�n de garantir la stabilité de l’application.

L’une des améliorations possibles de la partie test de la PLM est la mise en place de tests pouvant

généré la charge représentant un nombre d’utilisateurs donné. Ainsi, il su�ra de se placer du

coté du serveur de l’application pour déterminer les ressources nécessaires pour supporter tant

d’utilisateurs.

Actuellement, la PLM n’est que très peu utilisée (moins de 200 utilisateurs par an). Le passage

à la version web est une première étape dans la di�usion de la PLM à plus grande échelle, il est

prévu de l’intégrer à un MOOC d’INRIA.

15

Page 26: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

16

Page 27: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

5 Conclusion

Lors de ce stage, j’ai pris conscience de l’importance et de l’ampleur que peuvent avoir les tests.

Avoir à en implémenter sur un projet de l’envergure du projet PLM m’a amené à établir une

méthodologie pour s’assurer de l’exhaustivité des tests.

J’ai aussi pu renforcer mes connaissances sur les scripts et les tests ainsi que découvrir les outils

Docker et Protractor. Ce stage m’a également confronté à la di�culté de plonger dans un projet

déjà existant et de comprendre son fonctionnement a�n de le tester.

Ce stage c’est déroulé dans un laboratoire de recherche, ce qui m’a permis d’avoir un aperçu du

monde de la recherche. J’ai eu l’occasion de contribuer à un projet en cours ce qui a été l’occa-

sion pour moi d’apprendre à travailler en équipe. Ainsi, ce stage fût pour moi une expérience

enrichissante aussi bien sur le plan personnel que professionnel.

Le projet PLM vient de faire un énorme bond en avant dans son développement avec son passage

en version web, car à présent il n’y a plus aucun pré requis à son utilisation, si ce n’est le connaître,

ce qui pourrait amener le projet à être utilisé mondialement.

17

Page 28: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

18

Page 29: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Bibliographie / Webographie

[1] http://www.loria.fr/le-loria-1/organisation/organigramme. 3

[2] http://www.loria.fr/~quinson/Teaching/PLM/. 5

[3] https://angularjs.org/. 6

[4] http://codingbat.com/. 11

[5] http://jasmine.github.io/2.0/introduction.html. 11

19

Page 30: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

20

Page 31: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Liste des illustrations

2.1 Organigramme du LORIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Aperçu de la PLM version lourde. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 Aperçu de la PLM version web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

21

Page 32: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

22

Page 33: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Glossaire

- E2E : EndToEnd

- jdk : java development kit

- LORIA : laboratoire lorrain de recherche en informatique et ses applications

- PLM : Programmer’s Learning Machine

23

Page 34: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

24

Page 35: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Annexes

25

Page 36: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

26

Page 37: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

A Exemple de test unitaire

( function ( ) {

’use strict’ ;

d e s c r i b e (’FlipOperation’ , function ( ) {

var _ F l i p O p e r a t i o n ;

var cur ren tWor ld ;

var f l i p O p e r a t i o n ;

var number ;

var p a n c a k e S t a c k ;

var moveCount ;

var numberF l ip ;

b e f o r e E a c h ( module (’PLMApp’ ) ) ;

b e f o r e E a c h ( i n j e c t ( function ( F l i p O p e r a t i o n ) {

_ F l i p O p e r a t i o n = F l i p O p e r a t i o n ;

} ) ) ;

b e f o r e E a c h ( function ( ) {

var i ;

var nbPancake ;

var memory ;

p a n c a k e S t a c k = [ ] ;

nbPancake = getRandomInt ( 2 0 ) + 2 ;

f o r ( i = 0 ; i < nbPancake ; i ++) {

p a n c a k e S t a c k . push ( { r a d i u s : i , upsideDown : true } ) ;

}

number = getRandomInt ( nbPancake ) ;

moveCount = getRandomInt ( 4 2 ) ;

numberF l ip = getRandomInt ( 4 2 ) ;

cur ren tWor ld = {

p a n c a k e S t a c k : pancakeStack ,

moveCount : moveCount ,

numberF l ip : numberF l ip

} ;

var d a t a O p e r a t i o n = {

27

Page 38: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

number : number ,

oldNumber : numberF l ip

} ;

f l i p O p e r a t i o n = new _ F l i p O p e r a t i o n ( d a t a O p e r a t i o n ) ;

} ) ;

i t (’should be initialized correctly by its constructor’ ,

function ( ) {

e x p e c t ( f l i p O p e r a t i o n . number ) . t o E q u a l ( number ) ;

e x p e c t ( f l i p O p e r a t i o n . oldNumber ) . t o E q u a l ( numberF l ip ) ;

} ) ;

i t (’should flip pancake between number and the end when applied’ , function ( ) {

var l e n g t h = cur ren tWor ld . p a n c a k e S t a c k . l e n g t h ;

f l i p O p e r a t i o n . app ly ( cur ren tWor ld ) ;

f o r ( var i = 1 ; i <=number ; i ++) {

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . r a d i u s ) .

t o E q u a l ( l eng th −number+ i −1) ;

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . upsideDown ) .

t o E q u a l ( f a l s e ) ;

}

f o r ( var i =number + 1 ; i <= l e n g t h ; i ++) {

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . r a d i u s ) .

t o E q u a l ( l eng th − i ) ;

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . upsideDown ) .

t o E q u a l ( true ) ;

}

e x p e c t ( cur ren tWor ld . moveCount ) . t o E q u a l ( moveCount +1 ) ;

e x p e c t ( cur ren tWor ld . numberF l ip ) . t o E q u a l ( number ) ;

} ) ;

i t (’should reflip pancake between number and the end whenreversed’ , function ( ) {

var l e n g t h = cur ren tWor ld . p a n c a k e S t a c k . l e n g t h ;

f l i p O p e r a t i o n . r e v e r s e ( cur ren tWor ld ) ;

f o r ( var i = 1 ; i <=number ; i ++) {

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . r a d i u s ) .

t o E q u a l ( l eng th −number+ i −1) ;

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . upsideDown ) .

t o E q u a l ( f a l s e ) ;

}

f o r ( var i =number + 1 ; i <= l e n g t h ; i ++) {

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . r a d i u s ) .

t o E q u a l ( l eng th − i ) ;

e x p e c t ( cur ren tWor ld . p a n c a k e S t a c k [ l eng th − i ] . upsideDown ) .

t o E q u a l ( true ) ;

}

e x p e c t ( cur ren tWor ld . moveCount ) . t o E q u a l ( moveCount −1) ;

e x p e c t ( cur ren tWor ld . numberF l ip ) . t o E q u a l ( numberF l ip ) ;

} ) ;

28

Page 39: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

i t (’should not change currentWorld when applied then reversed’ ,

function ( ) {

var c u r r e n t = {

p a n c a k e S t a c k : cur ren tWor ld . p a n c a k e S t a c k . s l i c e ( ) ,

moveCount : moveCount ,

numberF l ip : numberF l ip

} ;

f l i p O p e r a t i o n . app ly ( cur ren tWor ld ) ;

f l i p O p e r a t i o n . r e v e r s e ( cur ren tWor ld ) ;

e x p e c t ( cur ren tWor ld ) . t o E q u a l ( c u r r e n t ) ;

} ) ;

i t (’should not change currentWorld when reversed then applied’ ,

function ( ) {

var c u r r e n t = {

p a n c a k e S t a c k : cur ren tWor ld . p a n c a k e S t a c k . s l i c e ( ) ,

moveCount : moveCount ,

numberF l ip : number

} ;

f l i p O p e r a t i o n . r e v e r s e ( cur ren tWor ld ) ;

f l i p O p e r a t i o n . app ly ( cur ren tWor ld ) ;

e x p e c t ( cur ren tWor ld ) . t o E q u a l ( c u r r e n t ) ;

} ) ;

} ) ;

} ) ( ) ;

29

Page 40: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

30

Page 41: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

B Exemple de test Protractor

d e s c r i b e (’Exo1’ , function ( ) {

var u n t i l = p r o t r a c t o r . E x p e c t e d C o n d i t i o n s ;

var c r o s s = e lement ( by . c s s (’.close-reveal-modal[ng-click]’ ) ) ;

var b u t t o n = e lement ( by . c s s (’.button-with-icon’ ) ) ;

var r e d B u t t o n = e lement ( by . c s s (’ul:first-child li .button-with-icon.alert’ ) ) ;

var congratsW = e lement ( by . c s s (’#successModal[style]’ ) ) ;

var c o n g r a t s T i t l e = e lement ( by . c s s (’#successModal h2 span’ ) ) ;

var c o n g r a t s C r o s s = e lement . a l l ( by . c s s (’.close-reveal-modal’ ) ) . g e t

( 2 ) ;

b e f o r e E a c h ( function ( ) {

browser . g e t (’https://plm.telecomnancy.univ-lorraine.fr/#/ui/lessons/welcome/’ ) ;

browser . i g n o r e S y n c h r o n i z a t i o n = true ;

browser . wa i t ( u n t i l . or ( u n t i l . v i s i b i l i t y O f ( c r o s s ) , u n t i l .

v i s i b i l i t y O f ( b u t t o n ) ) , 5 0 0 0 , "Pop-up isn’t here" ) ;

c r o s s . i s D i s p l a y e d ( ) . then ( function ( i s V i s i b l e ) {

i f ( i s V i s i b l e )

browser . a c t i o n s ( ) . c l i c k ( c r o s s ) . per form ( ) ;

} ) ;

} ) ;

a f t e r E a c h ( function ( ) {

browser . e x e c u t e S c r i p t (’window.sessionStorage.clear();’ ) ;

browser . e x e c u t e S c r i p t (’window.localStorage.clear();’ ) ;

} ) ;

i t (’should warn the user that world are unequal if no code issubmitted’ , function ( ) {

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( b u t t o n ) , 5 0 0 , "Buttonunclickable" ) ;

b u t t o n . c l i c k ( ) ;

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( r e d B u t t o n ) , 5 0 0 0 , "Button isn’tred" ) ;

e x p e c t ( p r o t r a c t o r . E x p e c t e d C o n d i t i o n s . v i s i b i l i t y O f ( r e d B u t t o n ) ( ) )

. t o E q u a l ( true ) ;

} ) ;

i t (’should congrats the user for passing the exercise’ , function ( )

{

31

Page 42: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

browser . e x e c u t e S c r i p t ("window.editor.setValue(\"avance();\"); ") ;

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( b u t t o n ) , 5 0 0 0 , "Buttonunclickable" ) ;

b u t t o n . c l i c k ( ) ;

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( congratsW ) , 5 0 0 0 , "Congrats pop-up isn’t here" ) ;

browser . wa i t ( u n t i l . t e x t T o B e P r e s e n t I n E l e m e n t ( c o n g r a t s T i t l e ,’Exercice reussi’ ) , 5 0 0 0 , "Congrats pop-up isn’t here" ) ;

e x p e c t ( c o n g r a t s T i t l e . g e t T e x t ( ) ) . t o E q u a l (’Exercice reussi’ ) ;

c o n g r a t s C r o s s . c l i c k ( ) ;

browser . wa i t ( u n t i l . v i s i b i l i t y O f ( b u t t o n ) , 5 0 0 , "Pop-up stillhere" ) ;

} ) ;

} ) ;

32

Page 43: Rapport de stage - people.irisa.fr · Rapport de stage Mise en place d’un environnement de quali˙cation pour la plateforme PLM Pierric Grguric Année 2014–2015 Stage de 2e année

Résumé

L’objectif du projet PLM (Programmer’s Learning Machine) est de proposer un outil permettant

d’apprendre les bases de la programmation. Dans le cadre de son portage en application web,

il a été nécessaire d’implémenter des tests unitaires (pour le comportement interne) ainsi que

des tests de bouts en bouts (simulation d’un utilisateur). Une automatisation du déploiement de

l’application a aussi été réalisée.

Mots-clés : Docker, test unitaire, test E2E

Abstract

The PLM (Programmer’s Learning Machine) project’s goal is to create a software which help be-

ginners to learn to program. For the development of the web version, it has been mandatory to do

unit testing (for intern behaviour) and EndToEnd testing (simulation of an user). An automation

of the application deployment has been also realised.

Keywords : Docker, unitary testing, E2E testing