2
0
Fork 0

a propos dernier commit : le script Perl/test.pl a ete modifie de maniere a permettre plusieurs types de verification pour un meme test. Desormais, un test peut etre l objet a la fois d une verif de .maple et d une verif par script .verif; actualisation de la doc doc_procedure_verification.pdf pour mentionner ce fait (voir evolution des mises a jour)

This commit is contained in:
troufflard 2016-10-12 08:09:31 +00:00
parent 8bd0e7c604
commit 85aa431472
3 changed files with 45 additions and 23 deletions

View file

@ -332,11 +332,16 @@ L'ex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Vérification}\label{subsubsection_verification} \subsubsection{Vérification}\label{subsubsection_verification}
Pour chaque calcul, une vérification est faite pour déterminer si le test est réussi ou non. Le rapport de test contient les indicateurs \verb|OK| ou \verb|ECHEC|. Il y a actuellement 3 types de vérification possible : Pour chaque calcul, une vérification est faite pour déterminer si le test est réussi ou non. Le rapport de test contient les indicateurs \verb|OK| ou \verb|ECHEC|. Il y plusieurs types de vérification possibles. Plusieurs types de vérification peuvent \^etre faites pour un m\^eme test.
Liste des possibilités :
\begin{itemize} \begin{itemize}
\item[$\bullet$] comparaison des données sorties au format maple : \item[$\bullet$] comparaison des données sorties au format maple :
\begin{itemize} \begin{itemize}
\item[] il s'agit du mode de vérification par défaut. Le fichier \verb|.CVisu|[i] définit les sorties au format maple. Le répertoire de test contient alors un fichier \verb|.maple.ref|[i] qui définit les valeurs de référence. Si l'écart absolu et relatif entre les données de référence et les données du calcul sont inférieures à une tolérance, alors le test est réussi. Les tolérances par défaut sont en absolu 1e-6 et en relatif 1e-3. Il est possible de choisir librement les tolérances dans un fichier \verb|.precision|[i]. Pour une grandeur $X$ générée à l'issue du calcul [i] et sa valeur de référence $X_{ref}$ contenue dans le fichier \verb|.maple.ref|[i], le test est réussi si les relations de comparaison suivantes sont respectées : \item[] Ce mode de vérification est exécuté si il y a la présence d'un fichier \verb|.maple.ref|[i].
\vspace*{0.2cm}
Le fichier \verb|.CVisu|[i] définit les sorties au format maple. Le fichier \verb|.maple.ref|[i] définit les valeurs de référence. Si l'écart absolu et relatif entre les données de référence et les données du calcul sont inférieures à une tolérance, alors le test est réussi. Les tolérances par défaut sont en absolu 1e-6 et en relatif 1e-3. Il est possible de choisir librement les tolérances dans un fichier \verb|.precision|[i]. Pour une grandeur $X$ générée à l'issue du calcul [i] et sa valeur de référence $X_{ref}$ contenue dans le fichier \verb|.maple.ref|[i], le test est réussi si les relations de comparaison suivantes sont respectées :
\begin{equation} \begin{equation}
\begin{array}{rrcl} \begin{array}{rrcl}
\text{comparaison absolue :} & |X - X_{ref}| & \leq & \varepsilon_{absolu}\\ \text{comparaison absolue :} & |X - X_{ref}| & \leq & \varepsilon_{absolu}\\
@ -346,13 +351,16 @@ Pour chaque calcul, une v
\\ \\
\bf IMPORTANT : \rm si les fichiers \verb|.maple| et \verb|.maple.ref| contiennent plusieurs lignes de données, seule la dernière ligne est traitée\\ \bf IMPORTANT : \rm si les fichiers \verb|.maple| et \verb|.maple.ref| contiennent plusieurs lignes de données, seule la dernière ligne est traitée\\
\end{itemize} \end{itemize}
\item[$\bullet$] comparaison libre définie par un script : \item[$\bullet$] comparaison libre définie par un script \verb|.verif|:
\begin{itemize} \begin{itemize}
\item[] la vérification peut \^etre librement définie par un script qui a pour fonction de renvoyer \verb|OK| ou \verb|ECHEC|. Ce script est un fichier exécutable d'extension \verb|.verif|[i], signifiant que le calcul n°[i] sera vérifié par un script libre.\\ \item[] Ce mode de vérification est exécuté si il y a présence d'un fichier \verb|.verif|[i].
\vspace*{0.2cm}
Cette vérification est définie par un script qui a pour fonction de renvoyer \verb|OK| ou \verb|ECHEC|. Ce script est un fichier exécutable d'extension \verb|.verif|[i], signifiant que le calcul n°[i] sera l'objet d'une vérification par un script libre.\\
\end{itemize} \end{itemize}
\item[$\bullet$] vérification simple de l'exécution : \item[$\bullet$] vérification simple de l'exécution :
\begin{itemize} \begin{itemize}
\item[] en l'absence de fichier \verb|.maple.ref| ou de script \verb|.verif|, la vérification est considérée \verb|OK| si le calcul s'est lancé normalement et terminé normalement (que le calcul ait convergé ou non). \item[] en l'absence de fichier \verb|.maple.ref| et de script \verb|.verif|, la vérification est considérée \verb|OK| si le calcul s'est lancé et a renvoyé la main au terminal (que le calcul ait convergé ou non). Il y a tout de m\^eme quelques vérifications de l'affichage pour y trouver des indicateurs d'erreur, ce qui provoquera le cas échéant un ECHEC.
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
@ -1145,6 +1153,12 @@ pour ces 2 scripts, une gestion des signaux d'interruption \verb|INT| et \verb|T
\item[-] modif du script \verb|test.pl| : ajout d'un nouveau message d'erreur fatal dans la liste des erreurs à repérer dans le fichier de redirection \verb|.log|. Désormais, si Herezh++ produit un message de la forme "\verb|erreur (...message...) detectee|", le test est considéré comme \verb|ECHEC| \item[-] modif du script \verb|test.pl| : ajout d'un nouveau message d'erreur fatal dans la liste des erreurs à repérer dans le fichier de redirection \verb|.log|. Désormais, si Herezh++ produit un message de la forme "\verb|erreur (...message...) detectee|", le test est considéré comme \verb|ECHEC|
\end{itemize}%tiret \end{itemize}%tiret
~\\
\item[$\bullet$] 2016-10-11 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|test.pl| : désormais, les vérifications ne sont plus mutuellement exclusives. Un m\^eme test peut très bien \^etre l'objet à la fois d'une vérification de \verb|.maple| et d'une vérification libre par script \verb|.verif|. Légère modif de l'affichage dans le rapport de tests de manière à rendre clair les cas où un test est l'objet de plusieurs vérifications.
\end{itemize}%tiret
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%template d ajout d une nouvelle mise à jour (composé d'une puce "bullet" avec Date et auteur de la modif, suivie d une série de puce "-" %template d ajout d une nouvelle mise à jour (composé d'une puce "bullet" avec Date et auteur de la modif, suivie d une série de puce "-"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View file

@ -788,29 +788,34 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
#saisie du resultat (on s attend a trouver une chaine de la forme "resultat verification : STATUS" dans le .log) #saisie du resultat (on s attend a trouver une chaine de la forme "resultat verification : STATUS" dans le .log)
my $resu_verif = ''; my $resu_verif = '';
my $commentaire = '';
open(FIC, "<$script_verif.log"); open(FIC, "<$script_verif.log");
while(<FIC>) { while(<FIC>) {
next if(not /^\s*resultat\s+verification\s*:\s*(\S+)/i);#rq : recherche insensible a la casse next if(not /^\s*resultat\s+verification\s*:\s*(\S+)/i);#rq : recherche insensible a la casse
$resu_verif = $1; $resu_verif = $1;
(my $reste_chaine = $_) =~ s/^\s*resultat\s+verification\s*:\s*\S+\s*//;
chomp($reste_chaine);
$commentaire = "cause : $reste_chaine" if(defined $reste_chaine);
last; last;
} }
close(FIC); close(FIC);
#verif du resultat (doit etre ECHEC ou OK) #verif du resultat (doit etre ECHEC ou OK)
($resu_verif eq 'OK' or $resu_verif eq 'ECHEC') or do { ($resu_verif eq 'OK' or $resu_verif eq 'ECHEC') or do {
printRapport(" -> ECHEC : resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC\n\n"); printRapport(" -> resultat .verif : ECHEC (resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC)\n\n");
print "**Erreur Test $repertoire_test/.CVisu$no_test : resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC\n"; print "**Erreur Test $repertoire_test/.CVisu$no_test : resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC\n";
last BOUCLE_TEST; last BOUCLE_TEST;
}; };
printRapport(" -> $resu_verif (resultat fourni par le script de verification $script_verif)\n\n"); printRapport(" -> resultat .verif : $resu_verif ($commentaire) (resultat fourni par le script de verification $script_verif)\n\n");
}#if(-e $script_verif) }#if(-e $script_verif)
################################################################################# #################################################################################
#cas d une verification classique (comparaison entre .maple et .maple.ref[$no_test]) #cas d une verification classique (comparaison entre .maple et .maple.ref[$no_test])
# rq : on suppose qu il s agit d une verification classique si il y a la presence d un fichier .maple.ref # rq : on suppose qu il s agit d une verification classique si il y a la presence d un fichier .maple.ref
################################################################################# #################################################################################
elsif(-e "$fichier_temp_maple.ref$no_test") { if(-e "$fichier_temp_maple.ref$no_test") {
############################################################## ##############################################################
# pretraitement # pretraitement
@ -939,22 +944,22 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
$diff_relative_pourcent = sprintf("%.${nb_decimales_prec_relative}f", 100.*($valeur_temp-$valeur_ref)/$valeur_ref); $diff_relative_pourcent = sprintf("%.${nb_decimales_prec_relative}f", 100.*($valeur_temp-$valeur_ref)/$valeur_ref);
} }
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n"; $sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
############################# #############################
#comparaison absolue }; #comparaison absolue };
############################# #############################
#---OK #---OK
if(abs($diff_absolue) <= $precision_absolue) { if(abs($diff_absolue) <= $precision_absolue) {
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> OK\n"; $sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> OK\n";
} }
#---ECHEC #---ECHEC
else { else {
$is_grandeur_ECHEC = 1; $is_grandeur_ECHEC = 1;
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> ECHEC\n"; $sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n"; $sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n"; $sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
$sortie_rapport .= " -> Difference = $diff_absolue\n"; $sortie_rapport .= " -> Difference = $diff_absolue\n";
} }
############################# #############################
@ -962,19 +967,19 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
############################# #############################
#---cas d une comparaison impossible => affichage d un message d erreur (mais pas du mot ECHEC : ce n est pas un echec car la valeur de reference est egale a 0) #---cas d une comparaison impossible => affichage d un message d erreur (mais pas du mot ECHEC : ce n est pas un echec car la valeur de reference est egale a 0)
if($diff_relative_pourcent =~ /impossible/) { if($diff_relative_pourcent =~ /impossible/) {
$sortie_rapport .= " - comparaison relative : impossible car valeur de reference egale a 0\n"; $sortie_rapport .= " - comparaison relative : impossible car valeur de reference egale a 0\n";
} }
#---OK #---OK
elsif(abs($diff_relative_pourcent) <= $precision_relative) { elsif(abs($diff_relative_pourcent) <= $precision_relative) {
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> OK\n"; $sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> OK\n";
} }
#---ECHEC #---ECHEC
else { else {
$is_grandeur_ECHEC = 1; $is_grandeur_ECHEC = 1;
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n"; $sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n"; $sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n"; $sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
$sortie_rapport .= " -> Difference relative = $diff_relative_pourcent\%\n"; $sortie_rapport .= " -> Difference relative = $diff_relative_pourcent\%\n";
} }
@ -983,11 +988,11 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
#si il y a au moins 1 ECHEC => ecriture de tout le contenu de $sortie_rapport #si il y a au moins 1 ECHEC => ecriture de tout le contenu de $sortie_rapport
if($is_grandeur_ECHEC) { if($is_grandeur_ECHEC) {
printRapport($sortie_rapport); printRapport(" -> comparaison .maple : ECHEC\n\n$sortie_rapport");
} }
#sinon, on signale que tout est OK #sinon, on signale que tout est OK
else { else {
printRapport(" -> pour toutes les grandeurs testees : OK\n\n"); printRapport(" -> comparaison .maple : OK (pour toutes les grandeurs testees)\n\n");
} }
@ -999,7 +1004,10 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
################################################################################# #################################################################################
#cas sans verification #cas sans verification
################################################################################# #################################################################################
else { #pas de verification si les conditions suivantes sont TOUTES remplies :
# - pas de fichier .verif
# - pas de fichier .maple.ref
if(not (-e $script_verif) and not (-e "$fichier_temp_maple.ref$no_test")) {
printRapport(" -> OK (pas de verification pour ce test)\n\n"); printRapport(" -> OK (pas de verification pour ce test)\n\n");
} }

Binary file not shown.