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.