sábado, 24 de novembro de 2007

TQS - Testes em Quantidade Suficientemente chata

Neste momento, estou a fazer uma breve pausa antes de jantar, já que estou na FEUP desde as 10h... E tendo em conta que hoje é sábado, passar o dia inteiro na faculdade a trabalhar já é, por si só, deprimente.

Descobrir na terça-feira que o trabalho de TQS é para entregar daí a pouco mais de uma semana é mau... E a situação piora sabendo que este não é o único trabalho que tenho para fazer. Na próxima semana, até à data da entrega, o projecto de MADS e o problema da falta de integração existente na Câmara Municipal vão-se intrometer fortemente na realização deste trabalho...

Não é que eu tenha sido irresponsável e me tenha esquecido deste trabalho... Eu pensava é que as datas de entrega do trabalhos de pesquisa e do prático eram ao contrário, ou seja, que o trabalho de pesquisa seria para entregar dia 30 de Novembro e o prático dia 6... Afinal é ao contrário... Não é que me queixe, já que é menos um, fica já despachado e dá-me mais tempo para fazer o de ERSS e o de PESI.

Mas TQS, tal como a generalidade das optativas que tive / tenho, está-me a desiludir um bocado e posso afirmar que esperava mais desta cadeira.
Afinal de contas, as aulas teóricas são um bocado secantes e só é pena não serem de manhã, para uma pessoa ir para a aula continuar a dormir ou então deixar-se ficar em casa enroscado nos lençóis. As práticas, geralmente é utilizar programas manhosos, que não têm mesmo outro nome, para fazer uns testes esquisitos que ninguém acaba por perceber muito bem...

Penso eu que a coisa vai melhorar ao fazer o trabalho, mas afinal continua tudo na mesma.... Até agora foi praticamente apenas fazer testes unitários com JUnit, ou seja, fazer código e mais código para testes... Ainda por cima, o código sobre o qual incidem estes testes foi feito assim meio à martelada, num dos trabalhos realizados por alunos do 2º ano o ano passado, durante a disciplina de Complementos de Programação e Algoritmos, que é o nome pomposo que arranjaram para a antiga disciplina de Algoritmos e Estruturas de Dados...
A única vantagem que tem este código feito à martelo é que basta carregar nuns botões da interface e é ver NullPointerExceptions com fartura a aparecer na consola, o que vai dar jeito para detectar bugs no trabalho.

O trabalho deles foi sobre árvores de expansão mínima (AEM) e pode-se dizer que única coisa que aprendi até agora com este trabalho foi ficar a saber que existe o algoritmo de Prim para obter uma AEM a partir de um grafo. Só conhecia o algoritmo de Kruskal, portanto já foi algo de novo. E qual é a diferença entre os dois algoritmos? São praticamente iguais, mas aqui fica uma breve explicação para quem não conhece os algoritmos e não sabe sequer o que é uma AEM.

Uma árvore de expansão mínima é um sub-grafo do grafo, que liga todos os vértices, sendo o somatório do peso das arestas o mínimo possível, garantindo que o grafo obtido é acíclico e que o número de arestas da árvore tem de ser exactamente igual a N -1, sendo N o número de vértices.
O algoritmo de Kruskal vai adicionando à árvore a aresta de menor custo possível disponível, garantindo que não se forma um ciclo e até estarem as N – 1 arestas pretendidas.
O algoritmo de Prim, escolhe um vértice inicial aleatório e, em vez de ter imediatamente todas as arestas disponíveis, verifica qual é a menor aresta que ele próprio possui, adicionando essa aresta à AEM e obtendo o vértice oposto dessa mesma aresta. De seguida, verifica-se qual é a
aresta de menor peso de todos os vértices considerados até ao momento, e obtêm-se outro vértice, continuando-se a obter vértices por este processo (e a respectiva aresta) até se obter a árvore.

E agora, ao estilo de ERSS e de PESI, termino este post com umas dúvidas existenciais:
  • Qual é a diferença entre um grafo e uma árvore de expansão mínima, para que os dois gajos que fizeram o trabalho que eu estou a testar terem considerado uma classe Grafo e uma classe AEM?
  • Qual é a coisa pior que ser um monkey coder? É ser um monkey coder tester...

Sem comentários: