Estrutura do trabalho
Índice da Monografia
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