GENY Simon Activité professionnelle N° 1...BTS SIO Services Informatiques aux Organisations Option...

Preview:

Citation preview

BTS SIO Services Informatiques aux

Organisations

Option SLAM

Session 2019

GENY Simon

1337726455

Activité professionnelle N°

1

NATURE DE L'ACTIVITE Développement et amélioration d’un outil de traçabilité

Contexte Site interne permettant la traçabilité des projets de dévellopements.

Objectifs Mise en place d’un outil de traçabilité

Lieu de réalisation

Lille Technicentre d’Hellemmes

SOLUTIONS ENVISAGEABLES Mise en place d’un outil de traçabilité de l’avancement des projets présent sous le logiciel Polarion. Utilisation d’un « faux » projet pour créer une fonction de récupération du taux d’avancement et de couverture des fichiers. Application de cette fonction a un niveau global.

DESCRIPTION DE LA SOLUTION RETENUE

Conditions initiales

Projet Polarion avec taux d’avancement locale à chaque cycle du projet (cycle en V)

Conditions finales

Taux d’avancement et de traçabilité global par projet

Outils utilisés

Polarion, Référenciel Polarion (https://almdemo.polarion.com/polarion/help/?topic=/com.polarion.xray.doc.user/ch21.html) et Apache Velocity (http://velocity.apache.org/engine/2.0/user-guide.html#math)

CONDITIONS DE REALISATION

Matériels Ordinateur fournis, « faux » projet, accès développeur Polarion

Logiciels Polarion, Notepad++, Bloc-Notes

Durée

6 semaines

Contraintes Manque de temps pour réaliser le rendu global, de plus le langage utilisé par Polarion n’étaient pas pratique pour la réalisation de cette fonction (Apache Velocity).

COMPETENCES MISES EN OEUVRE POUR CETTE ACTIVITE PROFESSIONNELLE Code de la compétence Intitulé de la compétence (Fiche A3)

DEROULEMENT DE L'ACTIVITE

Tutoriel complet de l'activité, avec commentaires, lignes de commandes, imprimes écran, etc. Nombre de pages minimum : 5 Stage au TI (Le Technicentre Industriel) d’Hellemmes, au PIGI

PIGI Pôle Ingénierie Groupes Informatiques

Le Groupe Informatique produit et maintient : - des logiciels embarqués assurant du contrôle-commande et/ou du service à bord, - des logiciels de maintenance et de diagnostic, - des logiciels de traitement de données pilotées via des interfaces web ou mobile.

L’équipe PIGI utilise principalement l’outil Polarion. Mais réalise aussi des tests sur BATIR, des tests simulant

des pannes via l’interface dont conducteur du train a accès.

Les équipes GDI, CCEU et SIE utilise l’outil Polarion dans le cadre des développements logiciels en cours,

principalement les développements sécuritaires.

De plus un Plan Qualité Logiciel (PQL) est écrit et mis à jour avant chaque début de projet, pour ensuite

évoluer avec le temps. Le PQL décrit l’organisation et toutes les dispositions spécifiques prises par relatives :

• Au management du projet logiciel, • À la prise en compte des exigences de la norme EN 50128 pour un niveau NoSIL, SIL0 ou SIL2, • Au contrôle de la qualité logicielle

Le Plan Qualité Logiciel définit une organisation de niveau de sécurité équivalent NSIL2.

Il a été décidé d’appliquer les exigences du Plan Qualité Logiciel à l’ensemble des modifications concernées, que celles-ci requièrent un développement NSIL2, NSIL0 ou NoSIL.

Sur les projets en cours on applique le cycle en V.

Le modèle du cycle en V (par comparaison avec les méthodes dites agiles) est un modèle conceptuel de gestion de projet, imaginé à la suite du problème de réactivité du modèle en cascade. Il permet, en cas d'anomalie, de limiter un retour aux étapes précédentes. Les phases de la partie montante doivent renvoyer de l'information sur les phases en vis-à-vis lorsque des défauts sont détectés, afin d'améliorer le logiciel.

Exemple de cycle en V appliqué a un projet :

L’outil Polarion : Qu’est-ce que Polarion ?

Polarion ALM™ est un logiciel convivial et collaboratif de gestion du cycle de vie des applications, qui

incluent la gestion des exigences et permet aux parties prenantes de rédiger simplement leurs spécifications

dans des documents web partagés facilitant la revue et la gestion du changement tout au long du cycle de

vie.

Le projet Polarion SIE TGV contient l'ensemble de la documentation des projets d'évolution des logiciels

embarqués des Systèmes Informatiques Embarqués TGV et permet l’application de la norme EN 50128

(expliquer ce que le norme demande => respect des exigences suivant le niveau de SIL du développement).

Mise en place de mon Projet : Récupération d’un Projet terminer mis sous Polarion. Accès a un grade développeur sur l’outil polarion ce qui m’a permis de modifier le projet directement sous Polarion. Dans un premier temps :

- Calculer le % d’avancement d’un document en fonction du statut de ses WI (Works Items)

- Calculer le % de traçabilité des WI grâce à la couverture des liens

Ensuite une fois que j’ai eu le pourcentage d’avancement et de traçabilité pour chaque phase, j’ai dû

mettre mon code sous une forme générale, et utiliser des macros pour l’alléger.

Enfin j’ai réuni tous mes scripts dans un seul et même script (d’où l’utilisation de macro pour éviter d’avoir

une répétition inutile de morceau de code).

Ce qui m’a permis de retourner un pourcentage d’avancement et de traçabilité global.

J’ai essayé de récupérer les taux de couverture les plus bas pour les mettre en valeurs mais le fait de ne

pas pouvoir utiliser de boucle WHILE et FOR m’a beaucoup compliqué la tâche.

Au départ je pensais partir sur un tri à bulle (Bubbleshort) ou un tri rapide (Kickshort) mais étant limité

dans l’utilisation possible des boucles, je n’ai pas réussi à avoir quelque sans répétition de code inutile et a

100% fonctionnel.

Finalement avec l’aide de mon maitre de stage, j’ai opté pour un algorithme de tri imbriquant plusieurs IF le

tout dans un foreach permettant de vérifier à chaque itération si ma valeur au rang i était inférieure ou pas à

3 valeurs fixées préalablement. Si oui alors ma valeur prenait la valeur d’une des 3 valeurs.

A la fin de cet algorithme on se retrouve donc avec les 3 valeurs les plus basse et c’est bien ce qui m’avait

été demandé, même si ça m’a demandé plus de lignes de code que ce qu’un algo de tri à bulle ou rapide

m’aurait demandé.

Exemple d’algo réalisé : #set($Pourc_avanc_Projet = 0)

#set($Pourc_traca_Projet = 0)

#set($NB_Phase = 0)

#set($Coef_Phase = 0)

#set($list_nom = [])

#set($list_pourc = [])

#set($NB1 = 0)

#set($NB2 = 0)

#set($NB3 = 0)

#set($nom1 = 0)

#set($nom2 = 0)

#set($nom3 = 0)

#macro (avancement $pourc_avanc $typedoc )

#if ($pourc_avanc< 100)

#set($b = $list_nom.add($typedoc))

#if(!$b)

erreur dans l'ajout dans array

<br>

#end

#set($c = $list_pourc.add($pourc_avanc))

#if(!$b)

erreur dans l'ajout dans array

<br>

#end

#end

#end

####MACRO DE TRI DE % COUVRE LES PLUS BAS####

#macro(tri $taille $list_nom $list_pourc)

#if($taille > 1)

#set($ind_max = $taille)

#foreach($i in [0..$taille])

#if($i < $taille)

#if($list_pourc.get($i) > $list_pourc.get($ind_max))

#set($ind_max = $i)

#end

#end

#end

$ind_max

$list_pourc.get($ind_max)

<br>

#set($ind_min = 0)

#foreach($i in [0..$taille])

#if($i < $taille)

#if($list_pourc.get($i) < $list_pourc.get($ind_min))

#set($ind_min = $i)

#end

#end

#end

$ind_min

$list_pourc.get($ind_min)

<br>

#end

#set($NB1 = $list_pourc.get($ind_max))

#set($nom1 = $list_nom.get($ind_max))

#set($NB2 = 50)

#set($nom2 = 0)

#set($NB3 = $list_pourc.get($ind_min))

#set($nom3 = $list_nom.get($ind_min))

$NB1 $NB2 $NB3 <br><br>

#foreach($i in [0..$taille])

#if($list_pourc.get($i) < $NB1)

#if($list_pourc.get($i) <= $NB2)

#if($list_pourc.get($i) < $NB3)

#set($NB3 = $list_pourc.get($i))

#set($nom3 = $list_nom.get($i))

#elseif($list_pourc.get($i) != $NB3)

#set($NB2 = $list_pourc.get($i))

#set($nom2 = $list_nom.get($i))

#end

#else

#set($NB1 = $list_pourc.get($i))

#set($nom1 = $list_nom.get($i))

#end

#end

#end

#foreach($i in [0..$taille])

#if($list_pourc.get($i) < $NB1)

#if($list_pourc.get($i) <= $NB2)

#if($list_pourc.get($i) < $NB3)

#set($NB3 = $list_pourc.get($i))

#set($nom3 = $list_nom.get($i))

#elseif($list_pourc.get($i) != $NB3)

#set($NB2 = $list_pourc.get($i))

#set($nom2 = $list_nom.get($i))

#end

#else

#set($NB1 = $list_pourc.get($i))

#set($nom1 = $list_nom.get($i))

#end

#end

#end

#end

################################################

####MACRO INIT####

#macro(init )

#set($cpt_test = 0)

#set($cpt = 0)

#set($cpt_couvre = 0)

#set($pourc_couvre = 0)

#set($total=0)

#if($typedoc == "FI")

#set($cpt_EFI = 0)

#set($cpt_EL = 0)

#set($pourc = 0)

#set($total_efi=0)

#set($list_fichier=[])

#set($taille = 0)

#end

#end

#macro( typedocs $typedoc)

#if($typedoc == "STB")

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.back)

#set($a = "True")

#set($c = "False")

#elseif($typedoc == "DSBL")

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.direct)

#set($a = "True")

#set($c = "True")

#elseif($typedoc == "DCL")

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.up)

#set($a = "True")

#set($c = "False")

#elseif($typedoc == "RTM")

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.direct)

#set($a = "True")

#set($c = "True")

#elseif($typedoc == "DTILM")

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.direct)

#set($a = "True")

#set($c = "False")

#elseif($typedoc == "DTVAL")

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.direct)

#set($a = "True")

#set($c = "False")

#else

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.direct)

#end

#if($typedoc == "RTM")

#set($role = "valide")

#else

#set($role = "couvre")

#end

#end

####MACRO CALCUL AVANC ET COUVRE ####

#macro(calcul $docs $role )

#set($cpt_test = 0)

#set($cpt = $cpt + 1)

#if( $wi.fields.status.get.id == "Approuve")

#set($total = $math.add($total,100))

#elseif( $wi.fields.status.get.id == "Valide")

#set($total = $total + 95)

#elseif( $wi.fields.status.get.id == "En_verification")

#set($total = $total+ 50)

#elseif( $wi.fields.status.get.id == "En_redaction")

#set($total = $total+ 25)

#end

####POUR CHAQUE FIELDS : ROLE FAIRE #####

#foreach($wi2 in $ellinkedWorkItems)

#if($wi2.fields.role.get.id=="$role")

#set($cpt_test = 1)

#end

#end

#if ($cpt_test>0)

#set($cpt_couvre = $cpt_couvre + 1)

#end

#end

######MACRO % TOTAL########

#macro(pourc_total $pourc_avanc $pourc_couvre )

#set($Pourc_avanc_Projet = $Pourc_avanc_Projet + $pourc_avanc)

#set($Pourc_traca_Projet = $Pourc_avanc_Projet + $pourc_couvre)

#set($NB_Phase = $NB_Phase + 1)

#end

##################

<h2> Phase 0 </h2>

#set($Projet = "STR-DASYE-A")

#set($Cycle = "Cycle_1")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "STB")

####A CHAQUE DEBUT DE PHASE####

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:ES AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

$pourc_avanc

####POUR CHAQUE PHASE A LA FIN FAIRE####

#set($pourc_avanc = 80)

#pourc_total ($pourc_avanc $pourc_couvre )

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<h2>Phase 1b</h2>

#set($Projet = "STR-DASYE-A")

#set($Cycle = "Cycle_1")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "DSBL")

####A CHAQUE DEBUT DE PHASE####

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:EL AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

####POUR CHAQUE PHASE A LA FIN FAIRE####

#pourc_total ($pourc_avanc $pourc_couvre )

$pourc_avanc

$pourc_couvre

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<h2>Phase 2B</h2>

#set($Projet = "STR-H")

#set($Cycle = "Cycle_6")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "DCL")

####A CHAQUE DEBUT DE PHASE####

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:EC AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

####POUR CHAQUE PHASE A LA FIN FAIRE####

#pourc_total ($pourc_avanc $pourc_couvre )

$pourc_avanc

$pourc_couvre

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<h2> Phase 3 </h2>

#set($Projet = "STR-H")

#set($Cycle = "Cycle_4")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "DSBL")

#set($typedoc2 = "DCL")

#if($Projet.contains("DASY"))

#if($logiciel== "T2N")

#set($path = "https://svn-

pim.ll.sncf.fr:8443/svn/LE_SIER_T2NDASY")

#set($offset = 40)

#elseif($logiciel== "M")

#set($offset = 38)

#set($path = "https://svn-

pim.ll.sncf.fr:8443/svn/LE_SIER_MDASY")

#end

#elseif ($Projet.contains("2N2"))

#if($logiciel== "T2N")

#set($path = "https://svn-

pim.ll.sncf.fr:8443/svn/LE_SIER_T2N2N2")

#set($offset = 40)

#elseif($logiciel== "M")

#set($offset = 38)

#set($path = "https://svn-

pim.ll.sncf.fr:8443/svn/LE_SIER_M2N2")

#end

#elseif ($Projet.contains("POS"))

#if($logiciel== "T1N")

#set($path = "https://svn-pim.ll.sncf.fr:8443/svn/LE_SIER_T1N")

#set($offset = 40)

#elseif($logiciel== "M")

#set($offset = 38)

#set($path = "https://svn-

pim.ll.sncf.fr:8443/svn/LE_SIER_MPOS")

#end

#else

#if($logiciel== "T2N")

#set($path = "https://svn-pim.ll.sncf.fr:8443/svn/LE_SIER_T2N")

#set($offset = 40)

#elseif($logiciel== "T1N")

#set($path = "https://svn-pim.ll.sncf.fr:8443/svn/LE_SIER_T1N")

#set($offset = 40)

#elseif($logiciel== "M")

#set($offset = 38)

#set($path = "https://svn-pim.ll.sncf.fr:8443/svn/LE_SIER_M")

#end

#end

#set($Que = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND (title:${esc.h}$typedoc${esc.h} OR

title:${esc.h}$typedoc2${esc.h})")

#set($docs = $transaction.documents.search().query($Que).sort("space"))

#set ($txt ="")

#set ($rootItems =

$transaction.workItems().search().query($thisQuery).sort("status"))

#set($NbTot = 0)

#set($NbCodee = 0)

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "(type: EC OR type: EL) AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

#set ($NbTot = $NbTot + 1)

#set($test = $wi.fields.document)

#set($test = $wi.fields().linkedResources)

#set($chemin = "$test.render")

#set($te = "$test.render.withLinks")

#set($len = $chemin.length - $te.length+4)

#if($te != "")

#set($NbCodee = $NbCodee+1 )

#end

#end

#end

#set($pourc =0)

#set($pourc = 100 * $NbCodee / $NbTot)

$pourc

#set($Pourc_avanc_Projet = $Pourc_avanc_Projet + $pourc_avanc)

#set($Pourc_traca_Projet = $Pourc_avanc_Projet + $pourc_couvre)

#set($NB_Phase = $NB_Phase + 1)

<h2> Phase 4 </h2>

#set($Projet = "STR-H")

#set($Cycle = "Cycle_6")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "FI")

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type: Fichier AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

#set($cpt_test = 0)

#set($cpt_EL = $cpt_EL + 1)

#set($ellinkedWorkItems = $wi.fields.linkedWorkItems.direct)

#foreach($wi2 in $ellinkedWorkItems)

#set ($txt_wi = "$wi2.render")

#set ($txt_2 = $txt_wi.substring(1))

#if($txt_2.contains($logiciel))

##Lorsque le logiciel est contenu ajouter le fichier dans une

liste

#set($c = $list_fichier.add($wi))

#if(!$c)

erreur dans l'ajout dans array

#end

#end

#end

#end

#set($query2 = "type: EFI AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems2 =

$transaction.workItems().search().query($query2).sort("id"))

#foreach($wi3 in $rootItems2)

#set($cpt_EFI = $cpt_EFI + 1)

#if( $wi3.fields.status.get.id == "Approuve")

#set($total_efi = $math.add($total_efi,100))

#elseif( $wi3.fields.status.get.id == "Valide")

#set($total_efi = $total_efi + 95)

#elseif( $wi3.fields.status.get.id == "En_verification")

#set($total_efi = $total_efi + 50)

#elseif( $wi3.fields.status.get.id == "En_redaction")

#set($total_efi = $total_efi + 25)

#end

#end

#end

#set($pourc_avanc_efi = $total_efi/$cpt_EFI)

##$total_efi

##$cpt_EFI

#if($pourc_avanc_efi <30)

#set($color_efi="red")

#elseif($pourc_avanc_efi <80)

#set($color_efi="orange")

#else

#set($color_efi="green")

#end

#set($taille = $list_fichier.size)

#set($taille = $taille - 1)

#set($cpt_fich = 0)

#foreach($i in [0..$taille])

#set($cpt_fich = $cpt_fich + 1)

#set ($recup_list_fichier = $list_fichier.get($i))

#set($t = "$recup_list_fichier.fields.link.id")

#if($t.contains("couvre"))

#set($cpt_test = 1)

#end

#if( $recup_list_fichier.fields.status.get.id == "Approuve")

#set($total = $math.add($total,100))

#elseif( $recup_list_fichier.fields.status.get.id == "Valide")

#set($total = $total + 95)

#elseif( $recup_list_fichier.fields.status.get.id ==

"En_verification")

#set($total = $total+ 50)

#elseif( $recup_list_fichier.fields.status.get.id == "En_redaction")

#set($total = $total+ 25)

#end

#end

#set($pourc_avanc_fich = $total / $cpt_fich)

#set($Pourc_avanc_Projet = $Pourc_avanc_Projet + $pourc_avanc_fich)

#set($Pourc_traca_Projet = $Pourc_avanc_Projet + $pourc_couvre)

#set($NB_Phase = $NB_Phase + 1)

FI fichier $pourc_avanc_fich

<h2>Phase 4</h2>

RTM -> CTU

#set($Projet = "STR-H")

#set($Cycle = "Cycle_6")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "RTM")

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:CTU AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

####POUR CHAQUE PHASE A LA FIN FAIRE####

#pourc_total ($pourc_avanc $pourc_couvre )

$pourc_avanc

$pourc_couvre

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<h2>Phase 5b</h2>

#set($Projet = "STR-DASYE-A")

#set($Cycle = "Cycle_1")

#set($logiciel = "M")

#set($log = "Logiciel $logiciel")

#set($typedoc = "DTILM")

####A CHAQUE DEBUT DE PHASE####

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:CTI AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

####POUR CHAQUE PHASE A LA FIN FAIRE####

#pourc_total ($pourc_avanc $pourc_couvre )

$pourc_avanc

$pourc_couvre

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<h2>Phase 6 </h2>

DSBL EL -> CTL

#set($Projet = "STR-H")

#set($Cycle = "Cycle_6")

#set($logiciel = "T2N")

#set($log = "Logiciel $logiciel")

#set($typedoc = "DSBL")

####A CHAQUE DEBUT DE PHASE####

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:EL AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

####POUR CHAQUE PHASE A LA FIN FAIRE####

#pourc_total ($pourc_avanc $pourc_couvre )

$pourc_avanc

$pourc_couvre

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<h2> Phase 6</h2>

DTVAL -> CTL

#set($Projet = "STR-DASYE")

#set($Cycle ="Cycle_1")

#set($logiciel = "M")

#set($log = "Logiciel $logiciel")

#set($typedoc = "DTVAL")

####A CHAQUE DEBUT DE PHASE####

#init ()

#set($thisQuery = "Projet.KEY:$Projet AND Cycle.KEY:$Cycle AND

title:${esc.h}$logiciel${esc.h} AND title:${esc.h}$logiciel${esc.h} AND

title:${esc.h}$typedoc${esc.h}")

#set($docs = $transaction.documents.search().query($thisQuery).sort("space"))

#foreach ($d in $docs)

#set($taille = $d.fields.moduleLocation.get.indexOf('#',1))

#set($query = "type:CTL AND

document.id:$d.fields.moduleLocation.get.substring(0,$taille)")

#set ($rootItems =

$transaction.workItems().search().query($query).sort("id"))

#foreach($wi in $rootItems)

######VALEUR DES TRUE/FALSE A REVOIR AVEC ALEXANDRE######

#typedocs ( $typedoc)

#calcul($typedoc $role )

#set($pourc_couvre = 100 * ($cpt_couvre / $cpt))

#set($pourc_avanc = $total / $cpt)

#end

#end

####POUR CHAQUE PHASE A LA FIN FAIRE####

#pourc_total ($pourc_avanc $pourc_couvre )

$pourc_avanc

$pourc_couvre

#avancement ($pourc_avanc $typedoc )

$list_nom

$list_pourc

<br>

$Pourc_avanc_Projet

$Pourc_traca_Projet

$NB_Phase

#set($pourc_avanc_total = $Pourc_avanc_Projet / $NB_Phase)

#set($pourc_traca_total = $Pourc_traca_Projet / $NB_Phase)

####AfFICHER LE % TOTAL ####

##$pourc_avanc_total

##$pourc_traca_total

#if($pourc_avanc_total <30)

#set($color="red")

#elseif($pourc_avanc_total <80)

#set($color="orange")

#else

#set($color="green")

#end

#if($pourc_traca_total <30)

#set($color="red")

#elseif($pourc_traca_total <80)

#set($color="orange")

#else

#set($color="green")

#end

<h3> Pourcentage de l'avancement total: </h3>

##AFFICHAGE BARRE DE PROGRESSION DE L'AVANCEMENT##

<br>

<div class="progress" style="width:100%;">

<span class=$color style="width:

$pourc_avanc_total%;"><span>$pourc_avanc_total%</span></span>

</div>

</br>

###################################################

<h3> Pourcentage de la traçabilité totale: </h3>

##AFFICHAGE BARRE DE PROGRESSION DE L'AVANCEMENT##

<br>

<div class="progress" style="width:100%;">

<span class=$color style="width:

$pourc_traca_total%;"><span>$pourc_traca_total%</span></span>

</div>

</br>

###################################################

##set($taille = $list_nom.size)

##set($taille = $taille - 1 )

<br>

$list_nom

<br>

$list_pourc

<br>

#set($taille = $list_nom.size)

#set($taille = $taille - 1)

$taille

#tri ($taille $list_nom $list_pourc)

$NB1 $NB2 $NB3 <br>

$nom1 $nom2 $nom3

<h2> Les taux de traçabilité les plus bas : </h2>

<h3> Nom : $nom1 </h3>

<h3> Nom : $nom2 </h3>

<h3> Nom : $nom3 </h3>

#####################################################

Difficultés :

Le langage utilisé (surtout la partie SQL, les QUERY / requêtes) me semblait complexe.

Nombreux problèmes liés au type de fichier, les différents liens qu’ils ont entre eux, me permettant de

retourner différentes choses indispensables pour mon projet.

Résultat : Finalement, j’ai réussi à retourner les taux d’avancement et de couverture des différents fichiers. Mais ce

n’est pas un projet tout à fait abouti, pour ce faire il m’aurait fallu beaucoup plus de temps et une meilleure

compréhension de l’outil Polarion.

Le résultat final aurait du m’afficher les différents taux en fonction du type de document, du type de projet.

Pour le moment il renvoi les taux grâce au projet que j’avais préalablement mis en paramètres

CONCLUSION Ce stage a été très enrichissant pour moi car il m’a permis de découvrir le PIM d’Hellemmes puis PIGI de la SNCF, ses acteurs, ses contraintes… et il m’a permis de participer concrètement à ses enjeux au travers de ma mission que j’ai particulièrement appréciée. Ce stage m’a aussi permis de comprendre que je devais m’investir plus personnellement afin de développer ma communication. Me débrouillant niveau technique, je dois mieux m’organiser afin d’optimiser mon temps et faire de meilleur retour.

EVOLUTION POSSIBLE Fort de cette expérience et en réponse à ses enjeux, j’aimerai beaucoup par la suite essayer de m’orienter via un prochain stage, vers le secteur de la sécurité informatique avec des acteurs de petites tailles, et un important développement d’avenir.