2
0
Fork 0

nouveau script Perl/verif_existence_repertoire_test.pl qui permet de savoir si un nom de repertoire de test existe deja dans la batterie actuelle (sera utile pour eviter les doublons lors de la creation de nouveaux tests). Ajout d une section dans la doc doc_procedure_verification.pdf : section 5.2 proposant une methodo etape par etape pour l ajout d un test

This commit is contained in:
troufflard 2015-07-16 15:54:34 +00:00
parent f48552f2dc
commit 2e70b43bfc
3 changed files with 209 additions and 5 deletions

View file

@ -19,6 +19,7 @@
\usepackage{lscape}
\usepackage{float} % paquet pour placer les images correctement avec \begin{figure}[H]
\usepackage{enumitem}%package pour gérer la puce avec \begin{enumerate}[label={blabla-\arabic*}] (ce qui donne comme puces : blabla-1, blabla-2, etc...)
\usepackage{tabularx}
\usepackage{multirow}
@ -369,16 +370,16 @@ Ce document est r
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Vue d'ensemble}
\subsection{Vue d'ensemble}\label{subsection_vue_ensemble}
Créer un nouveau test consiste à ajouter un nouveau répertoire dans le répertoire \verb|Batterie|. Le choix de son emplacement dans l'arborescence est libre en s'inspirant tout de m\^eme des descriptifs donnés en section \ref{section_classement_tests}. Le contenu du répertoire est celui défini en section \ref{section_contenu_repertoire_test}.
Les fichiers facultatifs dépendent du type de traitement Herezh++. Dans tous les cas, l'arborescence du répertoire de test est de la forme montrée sur la figure \ref{arbo_repertoire_test} et les règles suivantes sont à respecter :
\begin{itemize}
\item[$\bullet$] Le nom du nouveau répertoire est choisi en utilisant uniquement les lettres de a à z, les chiffres de 0 à 9, le signe moins "-" et le tiret bas "\_". Si le test est un test "Rapide" (moins de 30 secondes), le nom commence par \verb|Test_R|, sinon il commence par \verb|Test_L|.
\item[$\bullet$] Le nom du nouveau répertoire est choisi en utilisant uniquement les lettres de a à z (sans accent), les chiffres de 0 à 9, le signe moins "-" et le tiret bas "\_". Si le test est un test "Rapide" (moins de 30 secondes), le nom commence par \verb|Test_R|, sinon il commence par \verb|Test_L|. Pour savoir si un nom de répertoire existe déjà, il y a un script dédié présent dans le répertoire \verb|Perl| : \verb|verif_existence_repertoire_test.pl| (option \verb|-h| pour l'aide). Pour l'utiliser, il faut se placer à la racine du projet (c'est-à-dire au m\^eme niveau que le répertoire \verb|Batterie|) et taper \verb|Perl/verif_existence_repertoire_test.pl nom_repertoire|.
\item[$\bullet$] Un seul fichier d'extension \verb|.info| doit \^etre présent dans le répertoire. Ce fichier doit \^etre présent m\^eme s'il est vide.
\item[$\bullet$] Pour chaque calcul, il est nécessaire de créer un fichier \verb|.CVisu| (\verb|.CVisu1|, \verb|.CVisu2|, etc...) m\^eme si celui-ci est vide. Ces fichiers servent non seulement à Herezh++ mais également au script \verb|Perl/test.pl| pour repérer les calculs à lancer (un calcul par fichier \verb|.CVisu|).
\item[$\bullet$] tous les fichiers \verb|.CVisu|[i] et les fichiers facultatifs nécessaires à l'exécution d'un test (\verb|.verif|[i], \verb|.commande|[i], etc...) ont la m\^eme racine que le fichier \verb|.info| (par exemple, si on a le fichier \verb|nom_fichier.info|, l'éventuel fichier \verb|.verif1| doit avoir pour nom \verb|nom_fichier.verif1|)
\item[$\bullet$] le fichier \verb|README| contient obligatoirement les rubriques \it But du test \rm et \it Description du calcul \rm montrées sur la figure \ref{format_fichier_README}. Ces deux rubriques serviront à générer automatiquement une documentation pdf (catalogue de tests). Dans le m\^eme but, les rubriques \it Auteur \rm et \it Mots-cles\rm, qui ne sont pas obligatoires, donnent des informations précieuses (merci de les renseigner).
\item[] \bf Remarque importante : \rm ne pas écrire des lignes de tirets (\verb|---| et plus) dans le corps d'une rubrique.\\
\item[] \bf Remarque importante : \rm ne pas écrire des lignes de 3 tirets ou plus (\verb|---| ou plus) dans le corps d'une rubrique.\\
\end{itemize}
@ -421,7 +422,39 @@ Les fichiers facultatifs d
\label{arbo_repertoire_test}
\end{figure}
La sous-section \ref{section_commandes_CVS} est un rappel des commandes CVS de base. Les sous-sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs} donnent des informations sur les fichiers obligatoires et les fichiers facultatifs en lien avec l'exécution du test. Notamment, certains fichiers ont un format bien précis pour \^etre exploitables. Ensuite, la sous-section \ref{section_exemples_tests} a pour but de balayer les cas les plus courants de test et de donner des exemples.
La section \ref{subsection_methodologie} propose une méthodologie de travail pour construire un nouveau test. La section \ref{section_commandes_CVS} est un rappel des commandes CVS de base. Les sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs} donnent des informations sur les fichiers obligatoires et les fichiers facultatifs en lien avec l'exécution du test. Notamment, certains fichiers ont un format bien précis pour \^etre exploitables. Ensuite, la section \ref{section_exemples_tests} a pour but de balayer les cas les plus courants de test et de donner des exemples.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Méthodologie}\label{subsection_methodologie}
Avant l'ajout définitif du répertoire de test dans la batterie, il est plus que conseillé de construire pas à pas le test dans un répertoire en dehors du projet CVS. Dans ce répertoire, on pourra tester son fonctionnement sans risquer d'altérer le reste du projet. La méthodologie préconisée est :
\begin{enumerate}[label={\arabic*})]
\item créer un répertoire quelconque (appelons ce répertoire : \verb|rep_tmp|)
\item copier le répertoire \verb|Perl| et le script \verb|verifier_exeHZ.pl| (ou \verb|verifier_exeHZ.zsh|) dans \verb|rep_tmp|
\item choisir un nom de répertoire de test (voir section \ref{subsection_vue_ensemble}) et le créer dans \verb|rep_tmp| (appelons ce répertoire : \verb|Test_R_nom_test|)\\
(au besoin, pour choisir le nom du test :\\
utiliser le script \verb|verif_existence_repertoire_test.pl| au niveau du répertoire \verb|Verif_Herezh/Batterie|)
\item créer tous les fichiers nécessaires au calcul dans \verb|Test_R_nom_test| (voir sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs})\\
\underline{Remarque} : Ne pas hésiter à s'inspirer des répertoires déjà existants dans la batterie
\item se placer dans \verb|rep_tmp| et exécuter le script \verb|verifier_exeHZ.pl(.zsh)|\\
(si le test fonctionne, un rapport de test en bonne et due forme est produit)
\item si il y a un disfonctionnement : modifier les fichiers de calcul jusqu'à ce que le test fonctionne
\item créer le fichier \verb|README| dans \verb|Test_R_nom_test| (voir section \ref{section_fichiers_obligatoires})
\item choisir un répertoire de destination dans la batterie (voir section \ref{section_classement_tests})\\
(appelons ce répertoire \verb|rep_dest|)
\item enregistrer le test dans le projet CVS (voir section \ref{section_commandes_CVS}) :
\begin{itemize}
\item[$>$] Recopie du répertoire de test vers le projet :\\
\verb|cp -R rep_tmp/Test_R_nom_test Verif_Herezh/Batterie/.../rep_dest/.|
\item[$>$] Ajout du répertoire sous CVS :\\
\verb|cvs add Verif_Herezh/Batterie/.../rep_dest/Test_R_nom_test|
\item[$>$] Ajout de son contenu :\\
\verb|cvs add Verif_Herezh/Batterie/.../rep_dest/Test_R_nom_test/*|
\item[$>$] Actualisation définitive du projet CVS en se plaçant dans le répertoire du projet :\\
\verb|cvs commit -m 'ajout nouveau test etc...'|
\end{itemize}
\end{enumerate}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Commandes usuelles CVS}\label{section_commandes_CVS}
@ -673,7 +706,9 @@ L'arborescence pour ce genre de test devrait avoir la forme suivante :\\
\item[$\bullet$] 2015-07-16 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script de génération automatique du catalogue de tests (script \verb|Perl/genere_catalogue_tests.pl|). Désormais, il est possible d'insérer des figures via une syntaxe par balises dans les fichiers README des tests. La méthode est expliquée dans la documentation utilisateur \verb|doc_procedure_verification.pdf| à la section \ref{section_fichiers_obligatoires} "Fichiers obligatoires" (fichier \verb|README|)\\
\item[-] modif du script de génération automatique du catalogue de tests (script \verb|Perl/genere_catalogue_tests.pl|). Désormais, il est possible d'insérer des figures via une syntaxe par balises dans les fichiers README des tests. La méthode est expliquée à la section \ref{section_fichiers_obligatoires} "Fichiers obligatoires" (fichier \verb|README|)\\
\item[-] ajout du script \verb|Perl/verif_existence_repertoire_test.pl|. Permet de savoir si un nom de répertoire de test existe déjà dans la batterie. Est utile au moment de l'ajout d'un nouveau test pour aider à choisir le nom et éviter de choisir un nom déjà existant (m\^eme si ce n'est pas dans le m\^eme répertoire de destination car le catalogue des tests ne tient pas compte du chemin complet). Explication de son utilisation à la section \ref{subsection_vue_ensemble}\\
\item[-] méthodologie pour ajouter un nouveau test : il n'y avait aucune section exposant clairement les étapes à suivre pour créer et ajouter un test, d'où la création de la section \ref{subsection_methodologie}\\
\end{itemize}%tiret
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View file

@ -0,0 +1,169 @@
#!/usr/bin/perl
#!/usr/local/bin/perl
use strict;
use warnings;
use English;
use File::Basename;
my $NOM_PROG = basename $PROGRAM_NAME;
#####################################################################################################
# script pour savoir si il existe deja un repertoire de test d un certain nom
# (utile lorsque l on veut ajouter un test dans la batterie, pour verifier si le nom que
# l on souhaite donner au repertoire existe deja ou non)
#
# IMPORTANT : 1) on considere comme nom d un repertoire de test, uniquement la partie apres Test_R_ ou Test_L_
# par exemple : nom reel du repertoire : Test_R_non_dynamique => nom retenu : non_dynamique
#
# ainsi, par exemple, ce script considerera que les repertoires Test_R_blabla et Test_L_blabla
# ont le meme nom : blabla
#
# 2) les comparaisons sont insensibles a la casse (BlaBla est considere comme egal a blabla)
#####################################################################################################
##########################################################################
##########################################################################
##########################################################################
#
# RECUPERATION ET VERIFICATION DES ARGUMENTS ET OPTIONS DU SCRIPT
#
##########################################################################
##########################################################################
##########################################################################
#indicateur de l option -h ou -help => affichage aide
my $is_opt_help = 0;
foreach my $arg (@ARGV) {
if($arg =~ /-h/i or $arg =~ /-help/i) {
$is_opt_help = 1;
last;
}
}
#--------------------------------------------------------------------------
# affichage de l aide si option -h ou -help ou si il n y a pas assez d arguments
#--------------------------------------------------------------------------
if($is_opt_help or $#ARGV < 0) {
afficher_ligne_tirets('print');
print "Script $NOM_PROG \n";
afficher_ligne_tirets('print');
print " Description :\n";
print " script pour savoir si un nom de repertoire de test existe deja\n";
print " quelque part dans l arborescence.\n";
print " 3 cas possibles :\n";
print " - le repertoire existe deja\n";
print " - le repertoire existe mais dans l autre type\n";
print " (Test_R au lieu de Test_L ou inversement)\n";
print " - le repertoire n existe si en Test_R, ni en Test_L\n";
print "\n";
print " Usage : $NOM_PROG nom_rep\n";
print "\n";
print " Argument obligatoire :\n";
print " nom_rep : nom de repertoire (doit commencer par Test_R_ ou Test_L_)\n";
print "\n";
print " Options :\n";
print " aucune...\n";
print "\n";
print " Remarques :\n";
print " 1) le prefixe Test_R_ ou Test_L_ est considere comme faisant\n";
print " partie du nom\n";
print " (exemple : on considere que Test_R_abcdef n est pas egal\n";
print " a Test_L_abcdef)\n";
print " 2) test insensible a la casse\n";
print " (exemple : on considere Test_R_AbCDef egal a Test_R_abcdef)\n";
afficher_ligne_tirets('print');
print "\n";
exit;
}
#nom du repertoire a rechercher
my $nom_rep_propose = shift(@ARGV);
($nom_rep_propose =~ /^(Test_[RL])_/) or die "\nErreur (prog:$NOM_PROG) : repertoire donne en argument doit commencer par Test_R_ ou TesT_L_ ...\n\n";
#type de test (Rapide ou Long) (connu grace a la regexp de la ligne precedente)
my $type_test_propose = $1;
#nom du test sans son type
my ($nom_rep_propose_sans_type) = $nom_rep_propose =~ /^Test_[RL]_+(\S+)/;
#liste des repertoires de test existants (en chemin complet)
#--tests rapides (Test_R_)
my @rep_tests_existants_R = map {chomp; $_} qx(find . -name "Test_R_*" -type d);
#--tests rapides (Test_L_)
my @rep_tests_existants_L = map {chomp; $_} qx(find . -name "Test_L_*" -type d);
###print "$_\n" for (@rep_tests_existants_R, @rep_tests_existants_L); exit;
#comparaison entre les repertoires @rep_tests_existants et le repertoire propose en argument $nom_rep_propose
foreach my $rep_test_existant (@rep_tests_existants_R, @rep_tests_existants_L) {
#on va tester uniquement le nom du repertoire (et non son chemin complet)
# donc, on ne garde que le basename
my $nom_rep_existant_basename = basename $rep_test_existant;
#recuperation de son type (Rapide ou Long) que l on supprime de la chaine
my ($type_test_existant) = $nom_rep_existant_basename =~ /^(Test_[RL])/;
#nom sans le type
my ($nom_rep_existant_sans_type) = $nom_rep_existant_basename =~ /^Test_[RL]_+(\S+)/;
#-----------------------------------
#comparaison (insensible a la casse)
#-----------------------------------
if($nom_rep_existant_sans_type =~ /^$nom_rep_propose_sans_type$/i) {
# cas 1) meme type de test => le repertoire existe deja => affichage du chemin complet vers le repertoire existant
if($type_test_existant eq $type_test_propose) {
print "\n";
print "Le repertoire $nom_rep_propose existe deja :\n";
print " => $rep_test_existant\n";
print "\n";
exit;
}
# cas 2) pas le meme type de test => le repertoire n existe pas mais existe sous un autre type de test => affichage du chemin complet vers le repertoire existant
else {
print "\n";
print "Le repertoire $nom_rep_propose n existe pas mais existe sous une version $type_test_existant :\n";
print " => $rep_test_existant\n";
print "\n";
exit;
}
}
}#foreach my $rep_test_existant (@rep_tests_existants_R, @rep_tests_existants_L)
#si on arrive ici, c est que le repertoire n existe ni en version Rapide, ni en version Long => affichage de sa non existence
print "\n";
print "Le repertoire $nom_rep_propose n existe pas\n";
print "\n";
##########################################################################
##########################################################################
##########################################################################
#
# SUBROUTINES
#
##########################################################################
##########################################################################
##########################################################################
#####################################################################################################
#subroutine permettant d ecrire une ligne de tirets de la largeur du terminal
#####################################################################################################
#
# en entree :
# - print ou warn (suivant que l on souhaite afficher avec print (donc vers STDOUT) ou warn (donc vers STDERR)
#
sub afficher_ligne_tirets {
use Term::ReadKey;
my $nb_char_largeur_terminal = ( GetTerminalSize() )[0];#largeur du terminal en nombre de caracteres (via package Term::ReadKey)
my $funct_disp = shift;
my $ligne_tirets = '';
$ligne_tirets .= '-' for(1 .. $nb_char_largeur_terminal);
print "$ligne_tirets\n" if($funct_disp eq 'print');
warn "$ligne_tirets\n" if($funct_disp eq 'warn');
}#sub afficher_ligne_tirets

Binary file not shown.