From e37d4911c750550896c4155f452736200d977b83 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Mon, 16 Jan 2023 02:51:22 -0500 Subject: Almost done... --- rapport/algpseudocode.sty | 92 +++++++++++++++++++++++ rapport/class.png | Bin 0 -> 142596 bytes rapport/frpseudocode.sty | 7 +- rapport/main.pdf | Bin 137828 -> 577604 bytes rapport/main.tex | 183 ++++++++++++++++++++++++++++++++++++++++++---- rapport/sequence.png | Bin 0 -> 102706 bytes rapport/usecase.png | Bin 0 -> 264876 bytes 7 files changed, 265 insertions(+), 17 deletions(-) create mode 100644 rapport/algpseudocode.sty create mode 100644 rapport/class.png create mode 100644 rapport/sequence.png create mode 100644 rapport/usecase.png (limited to 'rapport') diff --git a/rapport/algpseudocode.sty b/rapport/algpseudocode.sty new file mode 100644 index 0000000..8cc2bf0 --- /dev/null +++ b/rapport/algpseudocode.sty @@ -0,0 +1,92 @@ +% PSEUDOCODE ALGORITHMIC STYLE -- Released 27 APR 2005 +% for LaTeX version 2e +% +% Copyright Szasz Janos +% E-mail szaszjanos@users.sourceforge.net +% Based on Peter Williams's algorithmic.sty +% +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{algpseudocode}% +\RequirePackage{ifthen}% +\RequirePackage{algorithmicx}% +\typeout{Document Style - pseudocode environments for use with the `algorithmicx' style}% +% +\def\ALG@noend{f}% +\newboolean{ALG@compatible}% +\setboolean{ALG@compatible}{false}% +% +\DeclareOption{noend}{\def\ALG@noend{t}}% +\DeclareOption{end}{\def\ALG@noend{f}}% +\DeclareOption{compatible}{\typeout{For compatibility mode use algcompatible.sty!!!}\setboolean{ALG@compatible}{true}}% +\DeclareOption{noncompatible}{\setboolean{ALG@noncompatible}{false}}% +\ProcessOptions% +% +% *** DECLARATIONS *** +% +\algnewlanguage{pseudocode}% +\alglanguage{pseudocode}% +% +% *** KEYWORDS *** +% +\algnewcommand\algorithmicend{\textbf{end}} +\algnewcommand\algorithmicdo{\textbf{do}} +\algnewcommand\algorithmicwhile{\textbf{while}} +\algnewcommand\algorithmicfor{\textbf{for}} +\algnewcommand\algorithmicforall{\textbf{for all}} +\algnewcommand\algorithmicloop{\textbf{loop}} +\algnewcommand\algorithmicrepeat{\textbf{repeat}} +\algnewcommand\algorithmicuntil{\textbf{until}} +\algnewcommand\algorithmicprocedure{\textbf{procedure}} +\algnewcommand\algorithmicfunction{\textbf{function}} +\algnewcommand\algorithmicif{\textbf{if}} +\algnewcommand\algorithmicthen{\textbf{then}} +\algnewcommand\algorithmicelse{\textbf{else}} +\algnewcommand\algorithmicrequire{\textbf{Require:}} +\algnewcommand\algorithmicensure{\textbf{Ensure:}} +\algnewcommand\algorithmicreturn{\textbf{return}} +\algnewcommand\textproc{\textsc} +% +% *** DECLARED LOOPS *** +% +\algdef{SE}[WHILE]{While}{EndWhile}[1]{\algorithmicwhile\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicwhile}% +\algdef{SE}[FOR]{For}{EndFor}[1]{\algorithmicfor\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicfor}% +\algdef{S}[FOR]{ForAll}[1]{\algorithmicforall\ #1\ \algorithmicdo}% +\algdef{SE}[LOOP]{Loop}{EndLoop}{\algorithmicloop}{\algorithmicend\ \algorithmicloop}% +\algdef{SE}[REPEAT]{Repeat}{Until}{\algorithmicrepeat}[1]{\algorithmicuntil\ #1}% +\algdef{SE}[IF]{If}{EndIf}[1]{\algorithmicif\ #1\ \algorithmicthen}{\algorithmicend\ \algorithmicif}% +\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen}% +\algdef{Ce}[ELSE]{IF}{Else}{EndIf}{\algorithmicelse}% +\algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}% + [2]{\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% + {\algorithmicend\ \algorithmicprocedure}% +\algdef{SE}[FUNCTION]{Function}{EndFunction}% + [2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% + {\algorithmicend}% +% +\ifthenelse{\equal{\ALG@noend}{t}}% + {% + \algtext*{EndWhile}% + \algtext*{EndFor}% + \algtext*{EndLoop}% + \algtext*{EndIf}% + \algtext*{EndProcedure}% + \algtext*{EndFunction}% + }{}% +% +% *** OTHER DECLARATIONS *** +% +\algnewcommand\Require{\item[\algorithmicrequire]}% +\algnewcommand\Ensure{\item[\algorithmicensure]}% +\algnewcommand\Return{\algorithmicreturn{} }% +\algnewcommand\Call[2]{\textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% +% +% +% +\ifthenelse{\boolean{ALG@compatible}}% + {% + \ifthenelse{\equal{\ALG@noend}{t}}% + {\RequirePackage[noend]{algcompatible}}% + {\RequirePackage{algcompatible}}% + }% + {}% +% diff --git a/rapport/class.png b/rapport/class.png new file mode 100644 index 0000000..cfb3804 Binary files /dev/null and b/rapport/class.png differ diff --git a/rapport/frpseudocode.sty b/rapport/frpseudocode.sty index 06be0cc..8e1732a 100644 --- a/rapport/frpseudocode.sty +++ b/rapport/frpseudocode.sty @@ -9,7 +9,7 @@ %% Functions %% \algrenewcommand\algorithmicprocedure{\textbf{PROCÉDURE}} \algrenewcommand\algorithmicfunction{\textbf{FONCTION}} -\algrenewcommand\algorithmicreturn{\textbf{RENVOYER}} +\algrenewcommand\algorithmicreturn{Retourner} \algrenewtext{Procedure}[2]% {\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}\ :} @@ -68,6 +68,11 @@ \algrenewtext{ENDIF}[0]% {\algorithmicend\ \algorithmicifm} + +\algtext*{EndWhile}% Remove "end while" text +\algtext*{EndIf}% Remove "end if" text +% \algtext*{EndFunction}% Remove "end if" text + %% Logical %\algrenewcommand{\algorithmicnot}{\textbf{non}} %\algrenewcommand{\algorithmicand}{\textbf{et}} diff --git a/rapport/main.pdf b/rapport/main.pdf index 1fbfb35..325b471 100644 Binary files a/rapport/main.pdf and b/rapport/main.pdf differ diff --git a/rapport/main.tex b/rapport/main.tex index a465927..638a69d 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -4,6 +4,9 @@ \usepackage{titlepage} \usepackage{float} \usepackage{algorithm} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage{tikz-uml} \usepackage{algpseudocode} \usepackage{frpseudocode} \usepackage[T1]{fontenc} @@ -12,6 +15,7 @@ % \addbibresource{bibliography.bib} % \nofiles + % \institution{Université de Sherbrooke} % \faculty{Faculté de génie} % \department{Département de génie électrique et de génie informatique} @@ -24,7 +28,7 @@ Benjamin Chausse & -- & chab1704 \\ \end{tabular} } -\teacher{Eugène Morin} +\teacher{Domingo Palao Muñoz} % \location{Sherbrooke} % \date{\today} @@ -33,31 +37,178 @@ \maketitle \newpage \tableofcontents +\listoffigures +\listoftables \newpage \section{Diagrammes UML} -\section{Pseudo-code} +La figure \ref{fig:class} montre les diverses relation entre les classes de +graphicus-02. Elle permet d'observer la hiérarchie des classes ainsi que les +facteurs de dépendance entre les classes. + +\begin{figure}[H] % Diagramme de classes {{{ +\centering +\caption{Diagrame de classes de graphicus-02}\label{fig:class} +\includegraphics[width=0.8\textwidth]{class.png} +\end{figure} % }}} + +La figure \ref{fig:sequence} montre comment l'application procéderait +lorsqu'un utilisateur voudrait activer la couche 1 du canevas alors que la +couche 0 est présentement active. Les autres couches ont été omises pour +alléger le diagramme. + +\begin{figure}[H] % Diagramme de séquence {{{ +\centering +\caption{Diagrame de séquence d'activation de couche}\label{fig:sequence} +\includegraphics[width=\textwidth]{sequence.png} +\end{figure} % }}} + -Ceci est un test pour voir comment le package frpseudocode fonctionne. -Du pseudo-code est pertinent pour l'APP ira ici. +La figure \ref{fig:usecase} montre les différentes actions que l'utilisateur +peut exécuter dans l'application. Nous voyos par la suite comment certaines de +ces actions agissent en arrière plan et dépendent d'autres actions (parfois +même d'autres actions accessibles à l'utilisateur). -\begin{algorithm} -\caption{Euclid's algorithm}\label{alg:euclid} +\begin{figure}[H] +\centering\caption{Diagramme de cas d'utilisation}\label{fig:usecase} +\includegraphics[width=\textwidth]{usecase.png} +\end{figure} + + +\section{Pseudo-code} + +\begin{algorithm} % {{{ +\caption{Ajout d'un élément au vecteur}\label{alg:ajouterForme} \begin{algorithmic}[1] - \Function{Euclid}{$a, b$} - \While{$a \neq b$} - \If{$a > b$} - \State $a \gets a - b$ - \Else - \State $b \gets b - a$ - \EndIf - \EndWhile - \State \Return $a$ + \Function{Vecteur::ajouterForme}{$f$}{ Booléen}\\ + \hspace{.5cm}// $f$: Forme à ajouter au vecteur\\ + \hspace{.5cm}// $Vecteur::taille$: nombre d'éléments actuellement dans le vecteur (entier)\\ + \hspace{.5cm}// $Vecteur::capacite$: capacité maximale du vecteur actuellement (entier)\\ + \hspace{.5cm}// $Vecteur::formes$: Liste de pointeurs vers les formes du vecteur (*Forme)\\ + \textbf{DÉBUT}\\ + \hspace{.5cm}// $newCapacite$: nouvelle capacité du vecteur (entier)\\ + \hspace{.5cm}// $newFormes$: nouvelle liste de pointeurs vers les formes du vecteur (*Forme) + \If{$f$ est de valeur nulle} + \Comment{Vérifier si la forme est valide} + \State\Return{Faux} + \EndIf + \If{$Vecteur::taille =\joinrel= Vecteur::capacite$} + \Comment{Si le vecteur est plein} + \State $newCapacite := Vecteur::capacite\times2$ + \If{L'espace disponible en mémoire $<$ $newCapacite\times taille(Forme)$} + \State\Return{Faux} + \EndIf + \State $newFormes :=\ $allouer$(newCapacite\times taille(Forme))$ + \For{\textbf{CHAQUE} Forme $i$ dans $Vecteur::formes$} + \State $newFormes[i] := Vecteur::formes[i]$ + \EndFor + \State $Vecteur::capacite := newCapacite$ + \State libérer$(Vecteur::formes)$ + \State $Vecteur::formes := newFormes$ + \EndIf + \State $Vecteur::taille := Vecteur::taille + 1$ + \State $Vecteur::formes[Vecteur::taille] := f$ + \State \Return{Vrai} \EndFunction \end{algorithmic} -\end{algorithm} +\end{algorithm} % }}} + +\section{Plan de test} + +\subsection{Identification} +\begin{table}[H] % {{{ +\centering\caption{Informations générales du plan de test}\label{fig:planTest} +\begin{tabular}{rl} + \\ \toprule + Nom: & Scénario de test du rapport d'APP \\ + But: & Vérifier les fonctionnalitées globales de graphicus-02\\ + Acteur principal: & classe \verb|Test| \\ + Date de création: & 2023-01-14 \\ + Auteur: & Benjamin Chausse -- chab1704 \\ + Version: & 1.0 \\ + \bottomrule +\end{tabular} +\end{table}% }}} + +\subsection{Scénario} + +\subsubsection{Préconditions} + +\begin{itemize} + \item Un canevas vierge vient d'être créé + \item Ce cas d'utilisation emploie la méthode \verb|tests_application_cas_02| + de la classe \verb|Tests|. La première ayant été utilisée lors de la + validation en classe. +\end{itemize} + + +\subsubsection{Postconditions} + +\begin{itemize} + \item Le déroulement du test se fait sans intervention de l'utilisateur. + \item L'affichage doit-être accessible à l'évaluateur: + \begin{itemize} + \item soit par écriture dans un fichier + \item soit par affichage dans un terminal + \end{itemize} + \item Le numéro de chaque étape est identifié avant son exécution. + \item La description de chaque étape est affichée avant son exécution. + \item Les informations passées à chaque étape sont affichées avant son exécution. +\end{itemize} + + +\subsubsection{Limitations} + +\begin{itemize} + \item Le test ne vérifie pas la totalité des cas limites + (ex: capacité insuffisante en mémoire pour agrandir le vecteur). +\end{itemize} + + +\subsection{Enchaînement nominal} + +\subsubsection{Étapes 1 à 4} +\begin{enumerate} + % \setcounter{enumi}{1} + \item Activer la couche d'index 4 + \item Ajouter les formes suivantes au canevas: + \begin{itemize} + \item un cercle de centre (1, 2) et de rayon $\frac{1}{\sqrt{\pi}}$ + \item un rectangle anchré en (3, 4), de largeur + \item un carré anchré en (-1, -1), de côté 2 + \end{itemize} + \item Afficher le canevas + \item Imprimer l'aire du canevas (doit être égale à $1+12+4$ soit $17$) +\end{enumerate} +\subsubsection{Étapes 5 à 13} +\begin{enumerate} + \setcounter{enumi}{4} + \item Activer la couche d'index 3 + \item Ajouter les formes par défaut au canevas. Soit: + \begin{itemize} + \item un cercle de centre (0, 0) et de rayon 1 + \item un rectangle anchré en (0, 0), de largeur 1 et de hauteur 1 + \item un carré anchré en (0, 0), de côté 1 + \end{itemize} + \item Afficher le canevas + \item Translater le canevas de (1, 1) + \item Afficher le canevas + \item Supprimer la forme de l'index 0 (la première) + \item Activer la couche 4 + \item Supprimer la forme de l'index 2 (la dernière) + \item Afficher le canevas +\end{enumerate} +\subsubsection{Étapes 14 à 18} +\begin{enumerate} + \setcounter{enumi}{13} + \item Initialiser la couche 4 + \item Afficher le canevas + \item Imprimer l'aire du canevas (doit être égale à $1+1$ soit $2$) + \item Réinitialiser le canevas + \item Afficher le canevas +\end{enumerate} % \newpage diff --git a/rapport/sequence.png b/rapport/sequence.png new file mode 100644 index 0000000..bdb1aae Binary files /dev/null and b/rapport/sequence.png differ diff --git a/rapport/usecase.png b/rapport/usecase.png new file mode 100644 index 0000000..2bf4ea9 Binary files /dev/null and b/rapport/usecase.png differ -- cgit v1.2.3