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}
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}
\item[$\bullet$] comparaison des données sorties au format maple :
\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{array}{rrcl}
\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\\
\end{itemize}
\item[$\bullet$] comparaison libre définie par un script :
\item[$\bullet$] comparaison libre définie par un script \verb|.verif|:
\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}
\item[$\bullet$] vérification simple de l'exécution :
\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}
@ -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|
\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 "-"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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)
my $resu_verif = '';
my $commentaire = '';
open(FIC, "<$script_verif.log");
while(<FIC>) {
next if(not /^\s*resultat\s+verification\s*:\s*(\S+)/i);#rq : recherche insensible a la casse
$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;
}
close(FIC);
#verif du resultat (doit etre ECHEC ou OK)
($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";
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)
#################################################################################
#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
#################################################################################
elsif(-e "$fichier_temp_maple.ref$no_test") {
if(-e "$fichier_temp_maple.ref$no_test") {
##############################################################
# 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);
}
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
#############################
#comparaison absolue };
#############################
#---OK
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
else {
$is_grandeur_ECHEC = 1;
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
$sortie_rapport .= " -> Difference = $diff_absolue\n";
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\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)
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
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
else {
$is_grandeur_ECHEC = 1;
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
$sortie_rapport .= " -> Difference relative = $diff_relative_pourcent\%\n";
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\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
if($is_grandeur_ECHEC) {
printRapport($sortie_rapport);
printRapport(" -> comparaison .maple : ECHEC\n\n$sortie_rapport");
}
#sinon, on signale que tout est OK
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
#################################################################################
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");
}

Binary file not shown.