sobre o envio de trabalhos para o mooshak nota prévia ... · programa, antes de o submeter ao...
TRANSCRIPT
Sobre o envio de trabalhos para o Mooshak
Nota prévia Este documento é relativamente extenso, em boa parte pela quantidade de imagens que o
ilustram. Está dividido em 3 partes. A primeira diz respeito ao ambiente de avaliação dos
trabalhos, conhecido como mooshak. A segunda parte discute como deve experimentar o seu
programa, antes de o submeter ao mooshak, para melhorar as suas hipóteses de sucesso.
Finalmente, para os utilizadores de Windows, a terceira parte do documento explica como
instalar uma ferramenta adicional que lhe pode ser bastante útil.
Sobre o ambiente de entrega dos trabalhos O seu trabalho será submetido a um sistema de avaliação automática de programas
denominado Mooshak. O Mooshak está disponível em http://di90.di.fct.unl.pt/~mooshak/
Quando acede ao servidor, aparece-lhe a seguinte página:
Faça login, usando as credenciais que lhe foram atribuídas nas aulas práticas. Finalmente,
carregue em Login.
Ao entrar no Mooshak, deve-lhe aparecer uma janela tal como esta. O primeiro botão a
experimentar é, obviamente, o help! Vejamos o que acontece…
Leia atentamente o conteúdo deste manual, antes de prosseguir… Antes de perguntar alguma
coisa ao docente, tenha a certeza absoluta de que a resposta que procura não está aqui, por
favor. A razão é simples: se a resposta está aqui e você pergunta à mesma, está a dizer ao
docente que não leu o manual.
Já está? Então, continuemos. Certamente reparou nos problemas A, B, C, e D, no topo da
página. Cada um deles corresponde a uma tarefa do Guião. Seleccione o problema A e
carregue no botão View. Aparece-lhe uma descrição curta do problema, que serve apenas para
complementar a descrição mais completa do guião. A informação disponível no guião, e testes
que lhe estão associados, especifica o formato dos dados de entrada e saída que o seu
programa deve apresentar. Para todos os problemas, serão sempre dados exemplos de uma
sequência de comandos e dos resultados que o programa gera, quando esses comandos são
efectuados.
É ESSENCIAL RESPEITAR ESTE FORMATO.
Repare que ao lado do botão View existe um botão Ask que lhe permite fazer perguntas sobre
este problema. Esta funcionalidade faz parte do Mooshak, mas não é suportada pelos
docentes da cadeira. Se tiver de fazer perguntas, faça-as durante a aula prática, ou nos
horários de atendimento, por favor. Os restantes meios (esta funcionalidade do mooshak, ou
emails enviados aos docentes) poderão não ter resposta.
Vamos admitir que já resolveu a tarefa A e quer tentar uma submissão. Carregue em
Procurar... e escolha o seu ficheiro de código fonte. Tipicamente, deverá ser um arquivo zip,
com o conteúdo da pasta em que está a desenvolver o seu código. Na cadeira de POO, deve
zipar a pasta poo e escolher esse ficheiro como submissão. Depois, carregue em Submit.
Agora, carregue em Submit. Ooops. Algo correu mal. Consulte o link Compile Time Error, para
saber o que aconteceu.
A mensagem do mooshak é curta, mas informativa.
Quando lhe surgirem erros de compilação, leia atentamente as mensagens dadas pelo
mooshak e tente perceber o que aconteceu. Procure, num livro, ou num recurso online, a
solução para o seu problema, se não souber como o resolver. É claro que também pode
colocar a questão ao seu docente. Mas lembre-se sempre: primeiro, tente descobrir por si. Vai
ver que poupa imenso tempo e aprende muito mais. Poupa tempo porque o docente demora
sempre algum tempo a responder a algo que você pode encontrar em poucos minutos. E
aprende mais porque é obrigado a entender o problema, em vez de simplesmente aplicar uma
solução que lhe dão sem pensar como ela funciona. Neste caso, o mooshak queixa-se de não
ter encontrado o ficheiro poo/Main.java . Ora aqui está uma forma frequente de deitar uma
tentativa para o lixo. Temos de ter o cuidado de criar o zip tal e qual como pretendido. Neste
caso, o meu disparate foi zipar a pasta src, em vez de zipar apenas a pasta poo que se encontra
dentro de src. Agora, mais atento, vou zipar a pasta correcta e submeter o meu programa.
E pronto. Implemente as tarefas que se seguem e vá submetendo.
Pode ir consultando o ranking, à medida que progride. Depois de submeter as 4 tarefas com
sucesso o ranking fica com este aspecto:
Os valores entre parêntesis indicam o número de tentativas feitas em cada tarefa. Neste caso,
tenho 2 tentativas na primeira e segunda tarefa(esta tarefa B falhada foi omitida na descrição,
para abreviar), e apenas uma em cada uma das restantes. No caso deste guião, havia 10 testes
para cada tarefa. Com 4 tarefas, 40 era a pontuação máxima possível. Missão cumprida. Este
número varia de problema para problema, claro. Em todo o caso, se recebeu o desejado
accepted, isso significa que passou mesmo a todos os testes dessa tarefa.
Como testar localmente o seu trabalho, antes de o enviar ao
mooshak? Há pelo menos três formas de experimentar o seu trabalho. A primeira é executar o programa
a partir do ambiente de desenvolvimento Eclipse, como provavelmente está habituado a fazer
nas aulas práticas. A segunda é através da linha de comandos do seu sistema operativo. Quer
num caso, quer noutro, desenvolverá o seu programa normalmente no Eclipse.
Dentro da pasta em que o seu projecto foi guardado existe uma pasta denominada src onde
está o código fonte do seu programa e uma pasta bin, onde fica a versão compilada, e duas
pastas de testes (a testMooshak é a que vamos usar neste exemplo).
Abra uma janela de linha de comandos do seu sistema operativo (também conhecida como
Consola). No Windows XP, isto faz-se no menu:
Start->All Programs->Accessories->Command Prompt
Deve aparecer-lhe uma consola de comandos.
Vá para a pasta em que guardou o seu projecto (neste exemplo, o guião 2 de 2009/2010 de
POO). Para correr o programa na linha de comandos, escreva java poo.Main na consola e
carregue em return. Na imagem abaixo, o programa entrou em modo de execução,
aguardando agora dados.
Copiar à mão os testes fornecidos, ou outros que você tenha inventado, é fastidioso e
propenso a enganos. É mais prático usar ficheiros de texto com a sequência de comandos.
Assuma que existe um ficheiro denominado t01.in numa pasta testMooshak\A . Como deve ter
reparado numa imagem anterior esta pasta está ao lado de bin, onde nos encontramos,
portanto temos de usar o caminho ..\testMooshak\A\t01.in . Pode consultar o conteúdo do
ficheiro usando o comando type.
Para usar este ficheiro como input, recorra ao mecanismo de redireccionamento do input para
testar o seu código, usando o símbolo ‘<’. Neste exemplo, redireccionamos o input do ficheiro
t01.in para a consola. O resultado é escrito na consola.
Comparar os resultados obtidos com os esperados, a olho, é um convite a desperdiçar
submissões ao mooshak, porque é facílimo deixar escapar um ou outro detalhe essencial do
output. Nada como automatizar a comparação. Para isso, teremos de redireccionar o resultado
de execução num segundo ficheiro, usando o símbolo ‘>’. Por exemplo, vamos gravar o
resultado em t01demo.out. Consulte o ficheiro resultante. Tudo ok?
O passo seguinte é comparar o seu resultado com o resultado esperado. Recomendamos-lhe
que use a ferramenta diff, ou, para quem usa o Windows, em alternativa, o comando fc (file
compare), que já vem instalado de raiz. Compare então o ficheiro que acabou de gerar
(t01demo.out) com o ficheiro de output de exemplo que tem disponível (neste caso, seria o
ficheiro t01.out).
Sucesso! O fc não encontrou diferenças. Se o mesmo acontecer com os outros testes, o seu
trabalho deverá passar nos testes do mooshak sem problemas.
A vantagem de usar uma ferramenta é que ela nos permite detectar diferenças subtis que de
outro modo nos podem passar despercebidas na inspecção visual dos resultados. A ferramenta
fc recebe dois argumentos, com os nomes dos ficheiros que queremos comparar. Caso existam
diferenças entre ambos os ficheiros, elas serão assinaladas. No exemplo que temos vindo a
construir, os ficheiros t01.out e t01demo.out são iguais. Assim sendo, a ferramenta não dá
nenhum output, além da mensagem de sucesso apresentada. Com o diff, o processo é
semelhante. Em caso de igualdade, aparece-nos apenas de novo a prompt da consola (ver
exemplo abaixo (por acaso, com um screenshot de um projecto de outra cadeira que até foi
programado noutra linguagem de programação). Perfeito. Teste superado!
O sistema de avaliação automática de trabalhos faz isto mesmo. Pega no seu programa, gera
um executável e depois executa o programa com vários ficheiros de input ultra-secretos .
Para cada ficheiro de input, temos sempre um ficheiro com o output respectivo. Se o seu
programa gerar o output esperado, passa no teste. Se o resultado for diferente, nem que seja
num carácter, o programa falha o teste. Isto de ter de passar testes secretos parece
complicado, mas não é. O seu programa porta-se bem, independentemente da sequência de
comandos que seja introduzida, desde que essa sequência seja válida, não é? Aqui, é igual.
Mas em vez de estarmos a repetir uma sequência de comandos manualmente para cada
trabalho, temos umas quantas já prontas a usar, que nos permitem verificar se está tudo bem.
Para cada uma das versões do seu programa, indicamos agora um conjunto de testes de
exemplo. Os testes de exemplo também fazem parte do conjunto de testes secretos do nosso
sistema de avaliação automática. É escusado submeter o seu trabalho ao sistema de avaliação,
enquanto os resultados por ele produzidos não forem os aqui indicados. Mas pode (e deve!)
submeter a sua tarefa A antes de começar a desenvolver a tarefa B, e assim sucessivamente.
Instalação da ferramenta diff O diff está disponível nas distribuições standard de sistemas operativos como o Linux, mas tem
de ser instalado no Windows. Pode obter a ferramenta na Internet, na página
http://gnuwin32.sourceforge.net/packages/diffutils.htm .
Faça download do ficheiro com a descrição “Complete package, except sources”. Execute-o.
Acrescente a pasta de instalação à variável de ambiente Path. Para isso, vá a Start->Control
Panel. Escolha System.
Escolha Environment Variables.
Escolha Path, em System Variables. Carregue em Edit.
Acrescente o directório de instalação da ferramenta. Neste caso,
C:\Program Files\GnuWin32\bin
E pronto, da próxima vez que abrir a consola do sistema já tem acesso à ferramenta diff.