Considerações finais


= Considerações finais =

A evolução de um software é um processo contínuo que envolve manutenções corretivas,
implementação de novas funcionalidades e documentação. Este capítulo detalha o que
foi realizado por este trabalho e expõem algumas idéias na intenção de convidar
ao leitor a novas possibilidades de implementações e/ou manutenções no **GRAFO**.

== O que foi realizado ==

Durante a confecção deste trabalho foram realizadas algumas manutenções corretivas e a
implementação de novas funcionalidades como o //passo a passo// e este documento
que serve como documentação para os trabalhos futuros. Tais implementações serão
citadas uma a uma nos itens //6.1.1//, //6.1.2// e //6.1.3// para que o leitor possa acompanhar
e perceber a dimensão deste trabalho.

=== Manutenções corretivas ===

- Inclusão da diretiva //-Wl,-export-dynamic// no arquivo Makefile.in para fazer que 
os símbolos definidos no //main// fossem vistos pelos plugins.
Isso corrigiu o problema do tipo //"plugin.so: undefined symbol: FOO"// quando o
plugin chamava alguma função do programa principal.

- Remoção da referência da macro //msh// do arquivo //aclocal.m4//. Apesar de não gerar erro na compilação
essa macro não existia e não foi encontrado referência sobre ela na internet. Para
remover os //warnings// gerados na compilação ela foi removida.

- Correção da compilação do algoritmo //Delaunay triangulation//  e incluindo-o na lista
de plugins disponíveis.

- Correção da compilação do algoritmo //Chordalize a Graph//  e incluindo-o na lista
de plugins disponíveis.

- Remoção de alguns arquivos de "Lixo" como "src/plugins/Makefile.x"

- Execução da operação de limpar os vértices e arestas destacados antes de abrir um //grafo// de um arquivo.
O destaque do //grafo// que estava na área de trabalho era assumida pelo //grafo//
carregado de um arquivo gerando distorções.

- Alteração dos Captions e Labels nos diálogos de geração de //grafos// para manter a coerência de nomes.
Em alguns lugares utilizava a palavra //Create// e em outros //Generate//.


=== Novas funcionalidades ===

- Melhoramento a infraestrutura do **GRAFO** com a sua inclusão em controle de versão
utilizando o software //Subversion - SVN//.

- Geração de //tag// no //SVN// da versão original do programa disponibilizada 
pelos autores originais. E com isso manter o histórico e a evolução do //software//.

- Inclusão do tratamento para algoritmos //passo a passo// na lista de algoritmos
disponíveis no **GRAFO**. Até então o menu //passo a passo// existia porem não
tinha funcionalidade implementada.

- Inclusão de ícones para o passo a passo na toolbar.

- Inclusão //step.h// e //step.c// para manipular a estrutura //passo a passo//.

- Inclusão do algoritmo //Depth Search// com suporte a //passo a passo//.

- Inclusão dos flag PGIN_FLAG_REDRAWASCIRCLE e PGIN_FLAG_REDRAWWITHCENTEREDVERTEX 
para redraw automáticos nos plugins de transformação que respectivamente redesenha
o //grafo// em circulo ou com um vértice central.

- Inclusão do plugin stargraphexample.c que serve para exemplificar a utilização do AddPoint e AddEdge.

- Inclusão do plugin selectoddexample.c.
O plugin destaca todos os vértices ímpares e todas as arestas que conectam dois
vértices ímpares. O objetivo do plugin é ilustrar a construção de um algoritmo
com os recursos do //passo a passo//.


=== Documentação ===

- Inclusão de novos comentários e organização de tabulações dos  plugins 
//selectoddexample.c//, //getsp.c//, //vertexexample.c//. //edgeexample.c, hw.c//.

- Criação da pasta //docs// e disponibilização deste trabalho no formato //HTML//
além do formato //txt2tags//, //PDF// e //ODT//.

- Criação da pasta //examples// contendo os //grafos// no formato //.gr// dos exemplos utilizados neste trabalho.


== O que há por vir ==

Além do que já foi realizado por este trabalho, foram observados outros pontos onde
existe a possibilidade de manutenção corretiva e oportunidades de melhorias.

=== Manutenções Corretivas ===

- O //redraw// utilizando o //neato// e o //dot// não está funcionando.
Quando utilizado o //neato// e o //dot// para redesenhar o //grafo// da área de
trabalho este fica como os vértices alinhados em uma reta e não como o esperado
do retorno do //neato// e o //dot//.

- Executando //Valgrid (Debugger de memória)// observa-se pontos de 
//memory leaks// que podem ser eliminados para melhorar a estabilidade do programa.

- Ao sair do programa pelo botão fechar (X) da janela ocorre falha de segmentação.

- Quando uma aresta e vértices são rotulados (//labels//) e/ou são atribuídos pesos (//weight//)
o programa fica instável e quebra facilmente gerando falha de segmentação.


=== Novas funcionalidades ===

- Finalizar o suporte de //digrafos//. O **GRAFO** já possui boa parte do suporte
a //digrafos// implementada como a matriz de adjacência, a possibilidade de inserção
de //arcos//, porem a interface não está preparada para desenhar e manipular as 
flechas e nem fazer a alteração de tipo entre //grafo// e //digrafo//.

- Concluir a funcionalidade de gerar grafos regulares. Esta opção está no menu
porem não existe o algoritmo implementado.

- Salvar nos arquivos //.gr// a curvatura de arestas. Quando se utiliza dos
//control points// para curvar arestas esta curvatura não é salva no //.gr// 
e ao carregar novamente o //grafo// as arestas são desenhadas com retas.

- Melhorar as estruturas internas otimizando o consumo de memória. Algumas estruturas
do programa não fazem alocação dinâmica de memória. Alocam ao iniciar uma quantidade
fixa e pressupõem que esta seja o suficiente.

- Melhorar a edição vértices e arestas. É burocrático ter que clicar em cada um dos vértices
para se editar uma aresta. Seria suficiente clicar na própria aresta. Em vértices
quando se está utilizando //control points// ocorre uma sobreposição entre a área
de ação sobre um vértice e sobre os //control points//.

- Possibilidade de arrastar um grafo inteiro. Muitas vezes é desejável arrastar
todo o //grafo// e manter o seu //layout//. Hoje isto não é possível sendo necessário
mover vértice a vértice.

- Implementar novos algoritmos como //Dual//, //Planar//, //Coloração Ótima//, //Djsktra//, //Prim// entre outros.

- Possibilitar salvar e reproduzir algoritmos passo a passo. Pode ocorrer de um
algoritmo demorar muito para ser executado, a possibilidade de salvar os passos
de execução pode evitar ter que roda-lo toda vez.

- Possibilitar salvar como imagem a lista de reprodução passo a passo. É a possibilidade
de salvar a lista de reprodução acima para por exemplo incluir os passos de execução
do algoritmo em um documento e assim evitar ter que salvar passo por passo manualmente
com um editor de imagens.

- Possibilitar carregar e descarregar plugins sem necessidade de sair do ambiente. Esta
funcionalidade é extremamente útil quando está se codificando um novo algoritmo com isto
evita-se ter que ficar entrando toda vez na interface do //grafo// para realizar um
novo teste.

- Possibilitar trabalhar com mais de um grafo de maneira simultânea. Hoje o **GRAFO**
esta limitado a um só //grafo// por interface. Com isso não é possível realizar
por exemplo a operação entre dois //grafos// como união ou decomposição.


== Software livre ==

O **GRAFO** é um software livre sobre a GPL versão 2. Porem ele está restrito
ao ambiente da UFPR. Como um software livre qualquer um pode contribuir para o seu 
desenvolvimento. Encontrar um repositório público e disponibiliza-lo para a comunidade
dará longevidade ao software. O //Apêndice A// detalha como é possível
obter os fontes a partir do repositório na //UFPR//.

== Conclusão ==

Com este trabalho conseguiu-se cumprir com algumas estapas do processo de evolução do 
**GRAFO**. Fazendo-se manutenções corretivas, implementando-se novas funcionalidades e melhorando
a documentação. A expectativa é que agora outros venham a cumprir outras etapas no processo,
como realizado por //Murilo Vicente//, //Oliver Matias// e por mim.




