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. Todas as informações relacionadas ao projeto podem ser encontradas no manual que desenvolvi para o programa criado durante meu estágio, e que faz parte desta monografia por descrever o programa e seu funcionamento.

 

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 PROSPEC

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 PROSPEC desenvolvido pelo Prof. Setzer consiste na reprogramação do compilador do VCR e a extenção dessa linguagem. Uma parte consiste na preparação de um analisador Sintático chamado de ANTA, parte de um projeto de modificação e expansão do VRC. O ANTA 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 relatório técnico- "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 Projeto

Meu projeto consistiu 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 ANTA. 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 em C pela Itautec, eles optaram por utilizar esta linguagem para o SGD.

Para maiores informações sobre o programa, como ele funciona, suas estruturas e funcionalidades, veja o manual do usuário do SGD, criado por mim com supervisão do professor Valdemar Setzer.

O Trabalho

O SGD, por se tratar apenas de uma ferramenta, teve apenas uma pequena verba e com isso fui contratado pelo IPT para desenvolve-lo sozinho, portanto não houve uma equipe de trabalho. O mais próximo que se chegou disso foram meus colegas de trabalho, dos quais Rosana Mayumi foi a que mais me ajudou. Por estar trabalhando na outra parte do VCR(reprogramação e aperfeiçoamento) ela me ajudou muito e entender o que eu precisava fazer e porque. Ela, assim como eu, era estagiária no IPT e por estarmos trabalhando em projetos paralelos, estávamos sempre na mesma sala, onde sempre nos ajudávamos, especialmente em relação a dúvidas do projeto e da linguagem. Como a equipe era constituída de apenas uma pessoa, 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, como ele deveria ser desenvolvido e quais ferramentas deveriam ser utilizadas, 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 fora do IME). 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 a partir do nada, são necessários tutoriais e para isso nem mesmo os exemplo inclusos no MSDN conseguiram me ajudar, só consegui em sites na Internet.

Logo no meu primeiro dia me foram dadas as especificações do projeto e o material com que trabalhar, portanto 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 não existia tempo máximo para ser gasto em pesquisa, sendo este apenas limitado pela data de entrega do programa.

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 passara a ser minha estadia no estágio, mas me fora enfatizado que quanto mais rápido, melhor.

 

O Desenvolvimento

Antes de começar a programar, tive que estudar novamente como utilizar a UML para desenvolver projetos, e com essa ferramenta tentar modelar um programa que satisfizesse as especificações que me foram dadas, que eu deveria criar um programa no qual se pudesse criar graficamente um grafo que descresse uma linguagem, e esta deveria ser gravada num arquivo para ser lida e interpretada pelo analisador sintático ANTA, que na época possuíamos apenas o formato que ele leria. Depois de modelar o projeto, comecei a estudar o sistema operacional Windows, como funcionava e como este utilizava-se de mensagens para que eu pudesse criar meu métodos já pré-definidos pela UML. Então percebi que os métodos e classes criados na UML não condiziam com a realidade e não poderiam ser aplicados. Percebi, então, que o uso de UML estava sendo mal feito pela minha falta de experiência, descartei seu uso e comecei a, ao invés de tentar desenvolver um enorme projeto, começar aos poucos, e fazer programas que aos poucos fossem crescendo; primeiro criar uma janela, depois desenhar nela, criar botões, e assim por diante.

No começo o projeto andou muito devagar, já que cada pequena alteração requeria horas de pesquisa, 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, como criar, mover, ligar e nomear nós). 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 muita dificuldade na modificação do projeto como aconteceria em qualquer outro, pois o planejamento do primeiro não havia sido muito bem feito, mas ainda assim geraram algumas dificuldades e mudanças na estrutura geral do SGD.

Durante todo este período, meu chefe imediato no IPT, 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 ou como deveria funcionar, 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, mas na minha atual situação, com outro emprego, faculdade e minha vida particular, essas métricas estão sem previsão de serem implementadas.

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, conferindo-me 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.

Base dada pelo BCC

Algumas das matérias mais importantes que tive no BCC 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 Pascal, mas esta é uma das matérias básicas para o curso e acredito que sua importância não precisa ser citada. Engenharia de Software foi a matéria que senti mais dificuldade de aplicar na vida real, pois havia cursado a matéria há quase um ano e minha memória falhava, além do fato de não ser uma matéria exclusivamente 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. Acredito que para isso tenha sido criada a matéria Mac 499 – Trabalho de Formatura.

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 ao estágio, pois apesar do projeto ser mais extenso não era tão difícil quanto aos exercícios do IME 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, pois nem sempre se pode ter um mestre para ensinar.

O único fator negativo do estágio, em termos de preparação profissional, foi que tive muito 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 fosse aprovado em 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.