Objectivos

Adquirir a capacidade de melhorar a qualidade do código produzido utilizando:

  1. Um debugger para descobrir a fonte dos bugs em programas Java;
  2. Uma ferramenta de análise estática de código para assinalar possíveis bugs no código.

Actividade

  1. Instalação de um debugger de Java;
  2. Resolução do enunciado da aula.
  3. Exercitar a utilização de um debugger;
  4. Exercitar a utilização de uma ferramenta de análise estática de código.

Enunciado da Aula

A aula está dividida em duas partes:
  1. Utilização de um debugger;
  2. Utilização de uma ferramenta de análise estática de código.

Utilização de um Debugger

Primeiro, siga este procedimento para instalar e executar o debugger de Java. Após ter instalado o debugger, faça debugging da seguinte aplicação Dates.java:
  • Descarregue o ficheiro com a aplicação. Esta aplicação recebe duas datas no formato mês1 dia1 mês2 dia2 e escreve número de dias entre as duas datas.
  • Coloque o ficheiro Dates.java num directório correcto, tendo em conta que esta classe pertence ao package exemplo;
  • Inicie o programa DrJava utilizando o seguinte comando: 
    • java -jar /caminho/para/drjava-stable-20140826-r5761.jar 
    • em que /caminho/para representa o directório que contém este ficheiro jar. Caso o ficheiro jar se encontre no directório actual, então apenas necessita de dar o seguinte comando:
    • java -jar drjava-stable-20140826-r5761.jar
  • Crie um projecto no DrJava para esta aplicação. Siga o procedimento indicado nesta secção;
  • Compile o projecto;
  • Coloque o DrJava em modo debugg;
  • Corra a aplicação. A aplicação vai lançar uma excepção na linha 32. Coloque um breakpoint nesta linha e corra a aplicação de novo. Veja agora o valor da variável "args" na janela Interactions.
  • O erro é devido ao facto de não estarmos a indicar os argumentos todos na linha de comandos e portanto a variável args representar um vector vazio. O DrJava não suporta a especificação de argumentos a passar ao método main. No entanto isto pode ser feito na janela Interactions. Assim, nesta janela, escreva o seguinte run exemplo.Dates 1 2 1 3;
  • Agora a aplicação lança uma excepção na linha 45. Remova o breakpoint anterior e coloque um novo na linha 45, corra o debugger de novo  e perceba o que se passa de errado nesta linha;
  • A aplicação ainda tem um erro dado que não calcula correctamente o valor do número de dias entre as duas datas. Usando a opção de Step Over do debugger verifique como é calculado os valores das variáveis someDayInYearlaterDayInYear. Corrija o erro.
  • Crie um projecto no DrJava para o projecto que está a desenvolver em Programação com Objectos.

Utilização de uma Ferramenta de Análise Estática de Código

Ao contrário de um debugger, em que para encontrar bugs é necessário executar a aplicação e exigem interacção com uma pessoa, as ferramentas de análise estática do código fazem uma análise automática ao código fonte da aplicação em causa e produzem um relatório com as possíveis fontes de erros encontrados durante a análise do código. Nem todas as possíveis fontes de erro encontradas correspondem a bugs reais. É depois da responsabilidade do programador analisar este relatório e corrigir os erros que são realmente verdadeiros. Note que as ferramentas de análise estática de código não conseguem garantir que encontram todas as fontes de erro. 

A ferramenta de análise estática sugerida é o FindBugs. Instale esta ferramenta no seu computado.

Após ter instalado a ferramenta FindBugs, volte a descarregar a versão com erros de Dates.java. Utilize agora a ferramenta FindBugs para descobrir os erros de Dates.java. Como vai verificar, nem todos os bugs (aliás, uma parte significativa) são apanhados por FindBugs. Será sempre necessário testar a aplicação por forma a encontrar os erros. No entanto, a utilização desta ferramenta permite apanhar e corrigir alguns bugs com um custo muito baixo.