Objetivos        Meu trabalho       A empresa      Cronograma      Estrutura do trabalho      Conclusão      Apresentação

Estrutura do trabalho

Índice da Monografia
- A empresa
- O projeto
- A equipe
- O Desenvolvimento
- Treinamento/Bibliografia
- Desafios/Frustrações e Técnicas
- BCC X Estágio

A Empresa

Natureza da organização e da atividade

A WebSee Interatividade Qualificada s/c Ltda. é uma empresa de desenvolvimento de aplicações e soluções para a Internet. Iniciou suas atividades no final de 1999 e vem crescendo muito desde então. Atualmente possui cerca de 20 funcionários. Dentre os projetos que produziu estão: o Dinheiro Grátis - consiste em um site que fornece cupons de desconto, Menezes e Lopes - site de um escritório de advocacia, Click Vivo - atendimento de callcenter através de chat, Leilão - sistema que gerencia uma empresa especializada em leilões.
O principal objetivo da empresa no momento é desenvolver um projeto de grande porte para usá-lo como uma de suas ferramentas de marketing da empresa. Com relação ao desenvolvimento de projetos a Websee está começando a projetar uma metodologia, pois foi comprovado com a experiência que este é um fator realmente necessário. As tecnologias utilizadas são variadas. Metade dos desenvolvedores são adeptos de produtos Microsoft e a outra parte prefere produtos free-software. A linguagem predominante hoje em dia é Java, porém no início da empresa php era mais utilizado. Os servidores de Banco de Dados existentes são: MySQL e Postgrees, o Oracle está começando a ser implantado. O servidor Web é o Apache e o sistema Operacional é Linux - Debian. Para rodar os servlets e as páginas jsp, no início era utilizado o jserv e o gnujsp respectivamente, agora utiliza-se o Tomcat. Mais informações a respeito destas tecnologias serão dadas no decorrer deste texto.
Sua sede está situada na Rua Vergueiro, 2087 - Vila Mariana, 8o. andar, junto com outra empresa, a PerCapita, que se dedica mais à área financeira e callcenter. As duas empresas são do mesmo dono, o que faz com que vários projetos de uma empresa sejam usados, ou mesmo originados, na outra. Mais informações sobre a mesma podem ser encontradas no site http://www.websee.com.br. Fone: (11) 50822266


Voltar










O Projeto

Dinheiro Grátis

Definição/Especificação do problema ou sistema principal do trabalho

O estágio teve duração de 9 meses (Abril-2000 à Dezembro-200). Fui contratada para desenvolver uma aplicação para Internet que possiblitasse às empresas de fornecer cupons de descontos. Os cupons são veiculados pelas empresas através da Internet e seguem um formato padrão, porém algumas partes do cupom podem ser personalizadas, por exemplo: o logo, o valor do desconto, a validade, os endereços, etc. As empresas também têm a possiblidade de veicular banners para os cupons, estes são distribuídos nas páginas do site e levam os internautas diretamente ao cupom da empresa. Os cupons ficam distribuídos em uma estrutura parecida com uma árvore de diretórios.


      
Raiz
/ \
Estado1 ... EstadoN
/\
Cidade1 ... CidadeN
/\
Categoria1 ... CategoriaN
/\
Sub-Categoria1 ... Sub-CategoriaN


Exemplos de Categorias: Restaurantes, Entretenimento, Vestuário.
Exemplos de Sub-Categoria: Restaurante - Japonês, Chinês, Italiano.


Os usuários cadastrados podem imprimir cupons. Os cupons impressos contêm o nome do usuário, a validade do cupom (1 semana após a impressão), e outras informações como valor do desconto e endereços.
Ao efetuar certas ações os usuários acumulam pontos. Periodicamente são entregues prêmios aos usuários que possuem mais pontos. As funções que fornecem pontos são: impressão de cupons, preenchimento de dados pessoais e resposta à questionários.
O site possui uma página dinâmica contendo os 10 cupons mais impressos nos últimos 30 dias. Os usuários também podem cadastrar suas preferências pessoais e posteriormente verificar apenas os cupons que se relacionam com seus dados.
A busca de cupons é feita por Estado-Cidade-Categoria-SubCategoria, palavra-chave e bairro. Estão sendo acrescentadas busca por Shopping e na Web.



Voltar










A equipe

Forma de organização da equipe de trabalho e atribuição de responsabilidades

A equipe consiste de dois analistas/programadores, eu o o Thiago Lourençoni, posteriormente o Thiago se desligou da empresa e o Wu Chen Lung entrou no seu lugar, dois designers e o gerente.
O Thiago e o Wu também são colegas do BCC, o convívio com eles foi muito bom, principalmente porque já éramos amigos e tivemos a mesma formação. Nossa função era escolher as ferramentas que seriam utilizadas, instalação e configuração dos aplicativos necessários, especificação, modelagem dos dados, modelagem do sistema, codificação, teste e manutenção. Concluindo, todas as etapas de desenvolvimento de um projeto.
Os designers realizam toda a parte visual do site. Layout das páginas, figuras, etc. Cabe ao gerente a interação com os clientes e os donos da empresa. Os donos são responsáveis pelo marketing e venda dos produtos.

Interação com os membros da equipe, diferenças notadas entre a forma de cooperação com colegas do BCC nas tarefas em grupo das disciplinas e a forma de trabalho conjunto na empresa

O relacionamento com colegas do BCC não tive muitas diferenças pois meus colegas de trabalho, o Thiago e o Wu, também são meus amigos da faculdade, portanto a forma de cooperação foi a mesma. Nós dividimos o projeto em módulos e cada um fez uma parte do sistema, estas partes deveriam interagir umas com as outras. Um dos fatos que nos prejudicou bastante foi não ter definido alguns padrões para codificação, como nome de variáveis, identação, documentação, etc. Isto fez com que se torna-se um pouco difícil o entendimento do código do parceiro.
A relação com os designers no início teve alguns problemas devido a ferramenta que estava sendo utilizada inicialmente (Servlets), os designers tinham que nos informar de todas as alterações que deveriam ser feitas no layout do site e nós, os programadores, erramos os responsáveis pela execução das alterações, pois os servlets são objetos java que devolvem código html, portando nós tinhamos que inserir o código html dentro dos objetos.
O relacionamento com o gerente era bom. Porém em algumas das reuniões com o cliente, as informações coletadas não foram suficientes ou deram margem a um entendimento ambíguo do problema. Devido a estes problemas foram realizadas reuniões com a presença do restante da equipe.
A formação dos donos é Administração de Empresas e Marketing. Portanto, muitas vezes eles não compreendiam com exatidão os problemas dos desenvolvedores e vice-versa.
Apesar dos conflitos o convívio com todos os funcionários da empresa decorreu de forma respeitosa e amigável. Pode-se aprender bastante com o relacionamento entre pessoas que não são da mesma área de atuação que a sua.


Voltar










O Desenvolvimento

Forma de acompanhamento utilizada pelo gerente/administrador do projeto

No início a forma de acompanhamento era verbal. O supervisor e administradores apenas pergutavam qual era o andamento do projeto, o que estava faltando, etc. Depois nosso supervisor começou a organizar uma lista com as tarefas que estavam pendentes. Ao passo em que terminávamos cada tarefa fazíamos anotações nesta lista. No final foi implantado na empresa um sistema chamado timesheet, diariamente cada funcionário tem que preencher sua hora de chegada, saída e quais foram as tarefas realizadas naquele dia.

Estimativa inicial de prazos e do andamento do projeto

Inicialmente os prazos eram definidos pela área de Marketing e o projeto era passado para nossa equipe muito mal especificado e com o prazo já definido. Obviamente esta técnica não deu muito certo. Não conseguimos entregar o projeto no prazo determinado. O atraso também se deve ao fato de que a especificação inicial não foi cumprida. Muitas alterações foram incluídas no decorrer do desenvolvimento. Outro fator importante é que os Clientes, as pessoas que tiveram a idéia e compraram os serviços da empresa para produzi-la, ficavam em um escritório ao lado. Testando e experimentando o site em tempo real de produção. Isto nos prejudicou bastante pois dava oportunidade para eles fazerem diversas modificações irrelevantes para o funcionamento do site mas que prejudicaram bastante o andamento do projeto. Tivemos casos de alterações que foram pedidas, feitas e depois desfeitas pois os sócios não estavam em acordo. Isso fez com que muito código e tempo fosse desperdiçado.

Métricas post-mortem do andamento do projeto

Quando o prazo foi atingido e o projeto não estava pronto realizamos uma reunião com o cliente para definir o que estava faltando e os bugs que foram encontrados. Utilizamos uma técnica melhor para a definição de prazos. A definição do trabalho restante foi passada para a equipe que iria produzir de fato, no caso eu o Thiago. Assim em conjunto analisamos os requisitos e definimos um prazo muito mais consistente. Infelizmente algumas vezes estes prazos também não foram cumpridos pois muitas alterações eram pedidas diariamente, devido a isto a programação teve que ser refeita muitas vezes.
O atraso na entrega do projeto causou um ambiente de trabalho não muito agradável, pois os clientes começaram a pressionar muito mais a empresa, porém está pressão era mais forte com o nosso gerente e os donos da empresa.



Voltar










Treinamento/Bibliografia

Participação em treinamento

Não tivemos treinamento. Aprendemos no decorrer do trabalho. Um dos fatores que atrasou o andamento do projeto foi o fato de não existir na empresa uma pessoa com experiência nas tecnologias que utilizamos. Também não havia um Analista/Programador experiente para auxiliar e orientar os novatos no desenvolvimento do projeto.
O projeto poderia ser feito num tempo muito menor se houvesse algum tipo de treinamento ou orientação para os estagiários.

Bibliografia utilizada ou básica para o área de atuação em que se insere o estágio

Todo o material de apoio que utilizamos está na Internet. Não utilizamos nenhum livro, somente um guia de consulta rápida de Java.

Links mais utilizados:

LDAP
http://marco.uminho.pt/~joao/tese/node19.html
http://www.iit.edu/~gawojar/ldap/

Servlets e JSP
www.servlets.com


Servlets API
http://java.sun.com/products/servlet/2.2/javadoc/overview-summary.html

Java Servlet and JSP Tutorial
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Intro.html

JSP
http://www.jspin.com/

Templates
http://freemarker.sourceforge.net/download.html

JNDI
http://java.sun.com/products/jndi/1.2/javadoc/javax/naming/package-summary.html

Javascript
http://jsguide.simplenet.com/forms.html

MySQL Documentation
http://www.mysql.com/documentation/mysql/bychapter/

Jascript
http://javascript.internet.com/




Voltar










Desafios/Frustrações e Técnicas

Desafios e frustrações encontrados

Desafios
Não tinhamos nenhuma experiência com programação para Internet e nosso conhecimento de Banco de Dados era mínimo, portanto o projeto ao todo foi um desafio.
Este também foi nosso primeiro grande projeto comercial

Frustrações
Apesar de termos toda responsabilidade do projeto os prazos inicialmente não eram estipulados por nós, mas sim pela área de marketing da empresa. Isso nos prejudicou bastante pois algumas vezes os prazos não podiam ser cumprido, esta é uma situação muito desmotivante
Falta de metodologia de desenvolvimento de projetos.

Ferramentas e técnicas utilizadas

As principais ferramentas utilizadas foram Java(jndi, jsp, servlets, jdbc), Mysql, Html, Javascript, Php, Perl. O sistema operacional é Linux-Debian, o servidor Web é o Apache, as engines para rodar os servlets e as páginas jsp inicialmente eram jserv e gnujsp respectivamente, atualmente está sendo usado o Tomcat.
Inicialmente não foi utilizada nenhuma técnica para o projeto da interface do sistema, pois não tinhamos conhecimento de nenhuma. Atualmente estamos desenvolvendo com as técnicas aprendidas no Curso Interação Homem-Máquina, agora estamos visando mais a usabilidade do sistema e não somente as funcionalidades, pois os projetos que desenvolvemos envolvem uma grande interação com os usuários, de modo que é necessário que as pessoas aprendam a usá-los com facilidade e rapidez.

Técnicas que tenham lhe parecido relevantes para o problema em questão, mas que não tenham sido exploradas por falta de tempo, recursos humanos ou apoio da organização

Comentar o código, especificar detalhadamente o projeto antes de começar, mais noções de programação orientada a objeto, reuso de código, elaboração de scripts para agilizar trabalhos manuais e otimização do espaço no banco de dados

- Faríamos uma especificação inicial bem detalhada e que só poderia ser modificada juntamente com alterações nos prazos do projeto.

- Utilizaríamos ferramentas para modelagem do banco de dados, como construção de diagramas ER (Entidade-Relacionamento).

- Utilizaríamos ferramentas CASE, para especificação e modelagem do sistema.

Porém a modificação principal em relação ao desenvolvimento do projeto seria fazer uma modelagem do sistema bem detalhada antes de começar a codificar, com a modelagem pode-se perceber com muito mais facilidade os problemas e os requisitos do sistema tornando a programação muito mais fácil e rápida pois evita que o trabalho tenha que ser feito mais de uma vez. Quando esta especificação não é feita, muitas vezes grande parte do código deve ser refeita pois alguns requisitos não foram previstos.


Voltar










Bcc X Estágio

Lista das disciplinas cursadas no BCC mais relevantes para o estágio

- Estrutura de Dados
- Introdução à Computação
- Princípios de desenvolvimento de Algoritmos
- Banco de Dados
- Programação Orientada a Objetos
- Programação Concorrente
- Laboratório de Programação
- Administração de Sistemas Unix
- Redes
- Engenharia de Software
- Interação Homem-Computador
- Estrutura Geral do curso de BCC

Observações sobre a aplicação de conceitos estudados nos cursos no contexto prático de aplicações reais

As disciplinas básicas de computação como Introdução a Computação, Princípios de desenvolvimento de Algoritmos e Estrutura de Dados proporcionam um conhecimento básico de programação e estruturas de dados. Incluso no conteúdo destas disciplinas também estão estudos sobre algoritmos conhecidos de ordenação e construção/balanceamento de estruturas em forma de árvore. Tornando o aluno apto a desenvolver programas para resolver problemas simples.
As matérias com conteúdo mais prático foram muito mais aplicadas do que as disciplinas teóricas, porém a base teórica provida pelo BCC também foi muito importante, pois adquiri-se um raciocínio lógico bom além de uma base matemática forte que também são necessários em vários casos.
A disciplina Banco de Dados, nos ajudou bastante pois nosso trabalho foi bastante focado nesta área. Uma das únicas documentações feitas antes de iniciar a codificação do sistema foi o modelo de Entidade-Relacionamento dos dados, que foi muito útil para o desenvolvimento.
Os conceitos de Programação Orientada a Objetos foram bastante aplicados pois a principal linguagem utilizada no projeto é Java, esta disciplina também deveria envolver um pouco de análise orientada a objetos e UML, estas técnicas são necessárias para a modelagem do sistema. Em Engenharia de Software é ensinado um pouco sobre este assunto, mas a abordagem é muito superficial.
Programação Concorrente foi importante pois a ferramenta utilizada para o desenvolvimento da aplicação, Servlets, é uma classe Multi-Thread, portanto os problemas de concorrência devem ser considerado.
O conteúdo das disciplinas Laboratório de Programação e Administração de Sistemas Unix ajudaram na interação, administração, configuração e instalação de aplicativos no Sistema Operacional utilizado, no caso Linux-Debian. Com os conceitos adquiridos nestas disciplinas desenvolvemos vários scripts em perl e em bash para automatizar alguns trabalhos.
Redes, tanto a disciplina ministrada na Poli quanto a ministrada no IME forneceram uma base sólida de como é feita a transmissão de dados pela rede, e o funcionamento do protocolo TCP/IP. O que nos ajudou bastante pois a empresa trabalha principalmente com projetos para Internet.
Infelizmente algumas das matérias mais importantes para o desenvolvimento do projeto só foram cursadas neste último semestre, as matérias são Engenharia de Software e Interação Homem-Máquina, para sistemas grandes é necessário que haja o processo de análise de requisitos, especificação e modelagem do sistema e dos dados. Se tivéssemos cursado estas disciplinas antes de começar o projeto, o desenvolvimento certamente seria mais fácil e rápido.

Se o aluno fosse continuar atuando na área em que exerceu o estágio, que passos tomaria para aprimorar os conhecimentos técnicos/metodológicos/comerciais/cientificos/etc relevantes para esta atividade?

Para me aprimorar na área de Internet faria cursos de segurança na transmissão dados na rede pois não tenho experiência nesta área e para muitas aplicações este é um fator crucial, como serviços bancários, informações sigilosas, e-comerce, etc.
Com relação a Administração de Sistemas, ainda não tenho conhecimento suficiente para gerenciar/administrar redes, esta também é uma das minhas áreas de interesse, para isso é preciso ler bastante. Existe muito material disponível na Internet ou em livros, principalmente com relação a Linux.
Para aprimorar meus conhecimentos de Banco de Dados, preciso estudar mais sobre normalização, com a finalidade de otimizar o espaço no Banco de Dados. É necessário um treinamento maior em modelagem de dados e construção de diagramas Entidade-Relacionamento.
Sem dúvida a área em que mais preciso de treinamento é Engenharia de Software. Pretendo aperfeiçoar-me nesta área com mais leituras e praticando os métodos aprendidos no curso. Existem inúmeras aplicativos/técnicas que propiciam o desenvolvimento destes métodos com mais rapidez e facilidades, dentre elas se encaixam UML e ferramentas CASE



Voltar
     Objetivos        Meu trabalho       A empresa      Cronograma      Estrutura do trabalho      Conclusão      Apresentação