Monografia
Mac 499 - Trabalho de Formatura
Aluno: Giuliano Luz Pigatti Caliari Nusp 2235722
Supervisor: Valdemar W. Setzer Professor
Responsável: Carlos Eduardo Ferreira
Introdução
Esta monografia contém os objetivos, atividades realizadas
e estrutura geral do trabalho de formatura, trabalho este baseado em um estágio
no Instituto de Pesquisas Tecnológicas (IPT) iniciado no dia 10/05. Aqui se
encontram informações sobre o desenvolvimento do projeto que fiz, conhecimentos
adquiridos, sobre o ambiente de trabalho e a minha conclusão sobre o estágio.
Empresa
O IPT é uma empresa pública sem fins lucrativos vinculada
à Secretaria da Ciência, Tecnologia e Desenvolvimento Econômico do Estado
de São Paulo.
Projeto
Reprogramação e Aperfeiçoamento da Ferramenta ProSpec
para Desenvolvimento de Aplicações Cliente/Servidor.
Descrição do Projeto
Este projeto tem por objetivo a reprogramação e o
aperfeiçoamento de uma ferramenta CASE para desenvolvimento de aplicações
cliente/servidor, capaz de gerar código em C++. Atualmente existe uma ferramenta
desenvolvida pela Itautec, o VRC, que não foi desenvolvido usando técnicas
de compilação. Ele tem sido empregado com sucesso pela Itautec desde 1987
e em parceria entre Itautec e IPT desde 1996, na geração de aplicações de
grande porte. As aplicações são descritas atualmente por meio das chamadas
"planilhas", onde os algoritmos são colocados usando um paradigma particular
de estruturação.
O projeto desenvolvido pelo Prof. Setzer consiste
em um analisador Sintático chamado de ANASIN, parte de um projeto de modificação
e expansão do VRC. O ANASIN permitirá a descrição formal das melhorias a serem
introduzidas no VRC, e a construção rápida de gerador de código para essas
melhorias. Ele interpreta um grafo sintático que representa uma gramática,
cujo tipo foi definido pelo Prof. Valdemar Setzer no livro - "Simple sintax
graphs, their parse with automatic error recovery and an ANSI C simple sintax
graph", Valdemar W. Setzer e Roberto C. Mayer - com uma definição formal e
- "A construção de um compilador" Valdemar W. Setzer e Inês S. Homem de Melo
- com uma definição informal, e é expresso em forma de vetor, com um elemento
para cada nó do grafo.
Meu trabalho foi desenvolver uma ferramenta gráfica
em C para Windows 95/98, intitulado de Sintax Graph Desiner (SGD) que gera
um arquivo contendo um grafo sintático, onde cada nó deve armazenar o nome
do símbolo que representa, o tipo de nó, seu sucessor e sua alternativa e
o nome da rotina semântica associada, cada linha do arquivo contendo um nó.
O arquivo será utilizado para gerar o vetor que é interpretado pelo ANASIN.
O usuário deve poder criar nós na tela, nomeá-los e ligá-los entre si, criando
um ou mais sub-grafos de um grafo sintático.
Este é um projeto criado para ser open source, e inicialmente
o projeto deveria ser feito em Java para ser usado como applet e poder ser
disponibilizado via Internet para qualquer um que quisesse usá-lo, rodando
em qualquer plataforma, mas como todo o VCR e suas mudanças estavam sendo
feitas pela Itautec e tudo estava em C, eles optaram por utilizar esta linguagem.
Para maiores informações sobre o programa, veja o
manual do usuário do SGD em anexo.
O Trabalho
Fui contratado para desenvolver o SGD, portanto não
houve uma equipe de trabalho e por isso a organização ficou bem fácil, assim
como a distribuição das responsabilidades. Quanto às responsabilidades, inicialmente
foi me dado o controle total do projeto, o que acarretou na decisão de construir
o programa em Java para utilizá-lo como applet, mas essa decisão logo foi
revogada e o projeto foi desenvolvido em C. O uso de UML (Unified Modeling
Language) também foi requerido pelo meu chefe para fazer as especificações
e a engenharia do software, mas todo o resto do desenvolvimento foi deixado
por minha conta (o que me assustou um pouco dado que era meu primeiro projeto).
No final o UML foi descartado pois eu não sabia exatamente como o Windows
funcionava e meus diagramas, classes e funções criadas não puderam se encaixar
direito na realidade.
Para sanar minhas dúvidas me forneceram uma cópia do MSDN,
que é uma biblioteca da Microsoft que descreve como funciona o Windows e suas
estruturas. Esta foi de grande ajuda, mas a principal fonte de informações
foi a Internet, onde se pode encontrar todos os tutoriais que estiver procurando,
se tiver o devido tempo. O MSDN foi muito bom para tirar uma ou outra dúvida,
mas para se aprender a fazer algo do zero, são necessários tutoriais e para
isso nem mesmo os exemplo inclusos no MSDN conseguiram me ajudar, só consegui
em sites na Internet.
O treinamento que me foi dado se resume a nada, pois não
havia pessoal disponível e tudo que era necessário eu poderia pesquisar no
MSDN ou na Internet e o tempo não parecia ser problema.
Não entendendo direito o que se queria do programa, a minha
estimativa inicial fora de um mês de programação pura, sem contar a engenharia
do software, quando ainda achava que poderia fazer tudo para Java, mas logo
percebi a profundidade do programa e vi que teria de aprender o funcionamento
do Windows e então essa estimativa foi esquecida por estar completamente errada
e o único fator limitante em termos de tempo era a minha estadia no estágio,
mas me fora dito que quanto mais rápido, melhor.
O Desenvolvimento
No começo o projeto andou muito devagar, já que cada
pequena alteração requeria horas de estudo, mas com uns quatro meses de estudo,
o projeto finalmente começou a fluir numa velocidade razoável e depois de
mais dois meses, ele estava funcional (entenda-se funcional por gerando saída
e com as funcionalidades mais básicas). Depois disso, houve apenas correções
de erros e inserção de funcionalidades.
As especificações iniciais do projeto foram a construção
de grafos sintáticos utilizando um programa gráfico que pudesse gerar um arquivo
de saída contendo a linguagem descrita no grafo. Durante o desenvolvimento
do projeto, foram especificadas pelo professor Setzer várias outras funcionalidades
que deveriam ser implementadas e eram consideradas essenciais para o bom uso
do programa. A introdução destas funcionalidades no meio do projeto não acarretou
em tanta dificuldade na modificação do projeto como aconteceria em qualquer
outro, pois o planejamento deste não havia sido muito bem feito, mas ainda
geraram algumas dificuldades e mudanças na estrutura geral do SGD.
Durante todo este período, meu chefe imediato, Geraldo
Cecílio, não participou de forma nenhuma no desenvolvimento do software ou
acompanhamento. Isto foi feito pelo professor Valdemar W. Setzer, que além
de supervisionar o projeto do VCR/PROSPEC como um todo, ainda era meu supervisor
no trabalho de formatura. Ele estava presente uma vez por semana para checar
o andamento do projeto e sanar algumas dúvidas em relação ao analisador sintático
e ao que o SGD deveria fazer, e nas fases finais, indicar quais funcionalidades
ainda deveriam ser inseridas no programa.
Todo o projeto foi feito em C, com o uso de algumas classes
e funções. O compilador utilizado foi o Visual C++ da Microsoft versão 1998.
O Fim
Nem tudo nesta vida é do jeito que gostaríamos.
Apesar de funcional, algumas funções muito importantes
estão faltando na versão atual do SGD, como por exemplo o Print. O Print era
uma das melhorias que foram adicionadas ao projeto no seu final mas que não
teve tempo de ser implementada. Entre as métricas post-mortem estão inclusas
a implementação do Print e uma revisão completa de todos os comentários feitos
no programa.
Uma das maiores frustrações encontradas foi o fato de não
ter ajuda para construir o programa, ninguém para ensinar como deveriam ser
feitas certas coisas, como por exemplo o uso de UML e a construção de programas
para o sistema operacional Windows. Isso gerou outros problemas, como o tempo
gasto em pesquisa e em sanar dúvidas, mas por outro lado isso acarretou num
grande desafio, o maior encontrado neste projeto, e como todo desafio se tornou
uma conquista ao ser ultrapassado, me conferindo grande experiência e conhecimento.
Uma das coisas que poderiam ter sido melhor exploradas
foi a orientação à objeto, que não foi muito usada devido à falta de planejamento.
No começo do projeto foi estudada a possibilidade do uso de MFC (Microsoft
Foundation Class) mas este foi descartado pois seria gasto muito tempo com
o seu aprendizado, mas caso tivesse sido utilizado, este forçaria o projeto
a ser orientado à objeto.
Caso eu fosse continuar neste projeto, primeiro acabaria
de introduzir certas funcionalidades para facilitar o uso do programa e depois
faria uma reestruturação do código para utilizar MFC, tornando tudo orientado
à objeto.
O IME
Algumas das matérias mais importantes que tive no
IME foram aquelas que me deram base para planejar e construir o programa,
tais como Estrutura de Dados e Engenharia de Software. É lógico que Introdução
à Computação também foi útil pois antes disso eu nem sabia o que era C, mas
esta é uma das matérias básicas para o curso e acredito que sua importância
não precisa nem ser citada. Engenharia de Software foi a matéria que senti
mais dificuldade de aplicar na vida real, pois havia cursado a matéria a quase
um ano e minha memória falhava, além do fato de não ser uma matéria exata.
Já com Estrutura de Dados isso não ocorreu pois apesar de ter feito a matéria
junto com Engenharia de Software, ela foi aplicada a todas (ou quase todas)
as matérias que a seguiram, o que serviu como prática e para fixar esses conhecimentos.
Talvez devêssemos ter mais matérias que utilizassem ou simulassem situações
reais para preparar o aluno, situações reais como um desenvolvimento de projeto,
mudança nas especificações sem alteração de datas ou uma especificação ruim
(que realmente chegaram a ocorrer no curso), e o aluno teria que desenvolver
todo o projeto, não só implementá-lo. O problema seria que este deveria ser
um projeto em que o aluno gastaria mais tempo e portanto deveria ser um EP
de cada vez e isso é impossível no IME devido a quantidade de trabalhos que
temos, muitas vezes com três ou quatro EP's por vez.
Como não tive um grupo de trabalho, não posso fazer
uma comparação muito boa entre os trabalhos dados nas disciplinas do BCC e
o projeto pois a maioria das matérias oferecia a possibilidade de trabalho
em conjunto, o que era sempre bem-vindo, mas das poucas matérias que tive
de trabalhar sozinho, posso dizer que foram equivalentes, pois apesar do projeto
ser mais extenso não era tão difícil e o prazo era muito maior, o que não
corresponde à realidade do mercado onde prazos são mínimos.
Conclusão
O estágio me ajudou a compreender melhor como funciona
o mercado de trabalho em certos aspectos, como uma especificação inicial falha
ou mal entendida ou mudança desta no meio do projeto, trabalhar com pessoas
que não pensam como você e lidar com situações inesperadas no decorrer do
desenvolvimento. Tudo isso, apesar de não terem sido experiências muito boas,
ajudaram muito no meu desenvolvimento profissional e me deram as experiência
necessária para enfrentar a realidade profissional. Aprendi também como funciona
o sistema operacional Windows e tive uma leve experiência no uso prático de
UML. Outra coisa que aprendi foi como fazer um manual técnico, coisa que realmente
seria necessário no IME para melhor formação do aluno, apesar de ter tido
muito trabalho e ter sido meio em cima da hora.
O fator mais importante para o meu desenvolvimento pessoal
que me foi dado durante o curso foi a capacidade de auto-aprendizagem, sem
a qual não poderia ter feito este estágio e provavelmente nenhum outro.
O único fator negativo do estágio, em termos de preparação
profissional, foi que tive bastante tempo para desenvolver o projeto, fazendo
meus próprios horários e freqüentemente fazendo cerca de 50 horas mensais,
o que me ajudou muito no IME e possibilitou que eu passasse de todas as matérias
em que me matriculei (coisa rara).
Estou deixando o estágio por motivos de aprendizado, pois
acredito que posso aprender muito mais se fizer um outro estágio em alguma
área diferente da computação do que aprenderia se ficasse no IPT, pois ainda
não me sinto totalmente preparado para o mercado de trabalho. Meu único arrependimento
é deixar o SGD no estado em que está, quando este poderia ser desenvolvido
para se tornar um programa com nível comercial.
Esta monografia também está disponível
no formato Word 97 para Windows.