%\documentclass[dvips,12pt]{amsart}
\documentclass[pdftex,12pt]{amsart}
\usepackage{amsmath}
\usepackage[portuges]{babel}
\usepackage{enumerate}

\usepackage{hyperref}
\def\hbref#1#2#3{\href{#1#2}{#3}}


\def\cwurl{http://www.inf.ufes.br/~raulh/ufes/teaching/courses/s.and.s/page/cw/0/}

%\input{defport}
%\input{deflogic}
%\input{defseqs}
%\input{deftrees}

\def\stdin{\emph{stdin}}
\def\stdout{\emph{stdout}}
\def\tarball{\emph{tarball}}
\def\mailto#1{\href{mailto:#1}{#1}}
\title{Exerc\'{\i}cio  1: \\ Teste autom\'atico de trabalhos}

\author{Raul H.C. Lopes}
\def\radixsort{\emph{radix sort}}
\def\splitter{\emph{splitter}}
\def\quicksort{\emph{quick sort}}
\def\mergesort{\emph{merge sort}}
\def\prefsum{prefix sum}
\def\real{Real}

%\setcounter{page}{0}
%\setcounter{section}{0}
%\setcounter{subsection}{0}

\def\bash{\emph{bash}}
\def\bashscripts{programas em {\emph{bash}}}
\def\mailbox{\emph{mailbox}}
\def\log{\emph{log}}
\def\home{http://www.inf.ufes.br/~raulh/}
\def\hcourses{\home ufes/teaching/courses/}
\def\cwd{\hcourses linux/cw/1/}
\def\hcwd#1#2{\href{\cwd#1}{#2}}

\def\tour{\emph{tour}}
\def\TBO{\emph{T\'ecnicas de Busca e Ordena\c{c}\~ao}}
\def\UFES{\textbf{UFES}}
\def\CC{\emph{Ci\^encia da Computa\c{c}\~ao}}
\begin{document}

\maketitle

\section{Introdu\c{c}\~ao}
O objetivo deste exerc\'{\i}cio consiste em escrever uma conjunto programas 
em \bash\ para compilar e testar um conjunto de trabalhos pr\'aticos. 
Assuma que cada trabalho est\'a  inicialmente arquivo como anexo de 
uma mensagem. O objetivo consiste em extrair o anexo, ativar a compila\c{c}\~ao 
e execu\c{c}\~ao de testes e produzir relat\'orio referentes \`a
compila\c{c}\~ao e execu\c{c}\~ao de tetses.

O ponto de partida do trabalho \'e um \mailbox\ contendo mensagens, cujos anexos
s\~ao trabalhos. Al\'em disso, voc\^e recebe um conjunto de programas que
realizam de forma semi-autom\'atica a tarefa de extrair os trabalhos das 
mensagens, compilar os trabalhos e gerar \log s de compila\c{c}\~ao.
Sua tarefa consiste em:
\begin{itemize}
	\item entender os programas que geram \log s compila\c{c}\~ao; 
	\item escrever um conjuntos de programas que automatizem o processo de
		teste e produ\c{c}\~ao de logs de execu\c{c}\~ao;
	\item junto os programas de compila\c{c}\~ao  e teste em um programa
		\'unico;
	\item escrever um pequeno relat\'orio, descrevendo seus programas e como
		us\'a-los.
\end{itemize}

O trabalhos a compilar e testar s\~ao trabalhos da disciplina de
\TBO, do curso de \CC\ da \UFES. Veja a
\href{\home/s.and.s/cw/0/0.result.pdf}{especifica\c{c}\~ao} do trabalho.

\section{Sua tarefa inicial}\label{sc:compile}
Inicialmente voc\^e tem \`a  sua disposi\c{c}\~ao um
\hcwd{compile.scripts.tar.bz2}{\tarball} contendo \bashscripts\ para extrair 
os trabalhos de um \mailbox, compil\'a-los e gerar \log s de compila\c{c}\~ao.
Suas tarefas:
\begin{itemize}
	\item Entender esses programas.
	\item Alter\'a-los para que eles, o \mailbox\ dos trabalhos a compilar,
		e o destino de \log s e programas compilados possam estar
		em locais arbitr\'arios, definidos pela secret\'aria que
		ir\'a usar seu programa. 
	\item Escrever um programa que receber\'a tr\^es argumentos:
		\begin{itemize}
			\item A localiza\c{c}\~ao do \mailbox;
			\item Identifica\c{c}\~ao do trabalho a compilar.
			\item A localiza\c{c}\~ao dos programas e \log s 
				que ser\~ao gerados.  
		\end{itemize}

		O nome deste programa ser\'a 

		\centerline{\textbf{start.compile}}

		Ele acionar\'a todos os passos do processo de compila\c{c}\~ao.
\end{itemize}
Note que a estrutura dos diret\'orios gerados pelo processo de compilac\~ao
deve ser mantida. Al\'em disso, o \mailbox\ que voc\^e receber\'a estar\'a 
em um diret\'orio com nome

\centerline{\textbf{submit}}

Dentro dele voc\^e encontrar\'a diret\'orios cada um tendo como nome a
identifica\c{c}\~ao do trabalho a ser corrigido. Cada um destes diret\'orios
conter\'a, por sua vez, tr\^es diret\'orios com nomes: \textbf{cur},
\textbf{new}, \textbf{tmp}.

O diret\'orio de nome \textbf{new} conter\'a os trabalhos a corrigir. No 
diret\'orio \textbf{new} existir\'a exatamente um arquivo, de nome arbitr\'ario
para cada trabalho a corrigir. Cada um desses arquivos \'e uma mensagem,
contendo o trabalho em anexo.

\section{A tarefa de testar os programas submetidos}\label{sc:test}
O objetivo final desta se\c{c}\~ao consiste em escrever um programa em 
\bash, de nome \textbf{runtests} que ser\'a executado com uma linha de
comando como:

\begin{verbatim}
    ./runtest groups groups.test.logs groups.reports int
\end{verbatim}

onde os par\^ametros de \textbf{runtest} s\~ao:
\begin{itemize}
	\item Primeiro par\^ametro, no exemplo \textbf{groups}: diret\'orio
		onde est\~ao os programas compilados de cada grupo. Cada
		grupo tem seu pr\'oprio diret\'orio e dentro deles existem
		quatro programas compilados: \textbf{tsp.frp, tsp.nn, tsp.greedy,
		tsp.pqgreedy.}
	\item Segundo par\^ametro, no exemplo \textbf{groups.test}: diret\'orio 
		que conter\'a os resultados de testes de cada grupo. Novamente
		pode ser conveniente armazenar os resultados de cada grupo
		em um diret\'orio separado e, dentro do diret\'orio do
		grupo, os resultados, separados por diret\'orio, de cada um
		dos programas acima. Veja um exemplo no 
		\hcwd{groups.test.log.tar.bz2}{\tarball}.
	\item Terceiro par\^ametro, no exemplo, \textbf{groups.reports}:
		diret\'orio com quatro arquivos de relat\'orios com nomes
		\begin{itemize}
			\item \textbf{tsp.frp.tex}, contendo \log s de
				execu\c{c}\~ao para o programa \textbf{tsp.frp}.
			\item \textbf{tsp.nn.tex}
			\item \textbf{tsp.greedy.tex}
			\item \textbf{tsp.pqgreedy.tex}
		\end{itemize}

		Cada um desses arquivos \'e uma tabela com linhas, contendo
		resultados de testes. Por exemplo a linha

		\begin{verbatim}
				tsp.frp & C1k.1 & 1 & ok & 43889849.26 & 0.11
		\end{verbatim}

		Ela indica:


		\begin{itemize}
			\item  Esta linha \'e resultado da execu\c{c}\~ao do
				programa \textbf{tsp.frp}.
			\item A inst\^ancia usada foi \textbf{C1k.1}.
			\item O grupo que escreveu o programa \'e identificado
				como \textbf{1}, estando os \log s de
				execu\c{c}\~ao no diret\'orio
				
				\centerline{\textbf{groups.test.logs/1}}
			\item \textbf{ok} indica que o atour\ produzido est\'a 
				correto.
			\item \textbf{43889849.26} \'e o peso do \tour.
			\item \textbf{0.11} \'e o tempo de execu\c{c}\~ao.
		\end{itemize}

		
		Veja exemplo no \hcwd{groups.eval.tar.bz2}{\tarball}.

		

\end{itemize}

Os seguintes programas est\~ao contidos no \hcwd{test.tar.bz2}{\tarball}:
\begin{itemize}
	\item \textbf{tourlen}: dado um \tour, avalia seu peso.
	\item \textbf{tourok}: dado um \tour, avalia se ele est\'a correto.
	\item \textbf{fixed.timed.bench.pl}: executa um programa de c\'alculo
		de um \tour\ por um tempo determinado.
\end{itemize}

Leia arquivo \textbf{README} que detalha como executar tais programas.

Fa\c{c}a download do  seguinte \hcwd{submit.cw0.tar.gz}{\tarball}. 
Ele cont\'em um
\mailbox\ com uma mensagem, contendo uma submiss\~ao de solu\c{c}\~ao para
o trabalho pr\'atico da \TBO. Use-o para depurar seus programas.

\section{A avalia\c{c}\~ao}

Este trabalho vale tr\^es pontos, sendo dois pontos para a se\c{c}\~ao
\ref{sc:compile} e um ponto para a se\c{c}\~ao \ref{sc:test}. 

\section{A submiss\~ao}

Submeta seus scripts com um \tarball\ por
\href{mailto:raulh@inf.ufes.br}{e-mail}. Sua mensagem ter\'a  a seguinte
estrutura:

\begin{itemize}
	\item \textbf{Subject:} linux.1
	\item Anexo: o \tarball\ do arquivo.
\end{itemize}

Gere o \tarball, usando o comando \emph{tar}. Por exemplo, estando no
diret\'orio dos seus scripts, use:
\begin{verbatim}
   tar -jcf ~/1.tar.bz2 *
\end{verbatim}

Esse comando gerar\'a em seu \emph{home} o arquivo \emph{1.tar.bz2} com
os seus scripts.


Submeta at\'e dia 6/04/2005.


\end{document}

