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.


 

Voltar para a página inicial