Trabalho de Formatura
Manoel Fernando Alonso Gadi
No
Usp: 3191559
Bacharelado em Ciência da Computação
1999-2002
Informações
Pessoais:.......................................................................................................................................... 3
Razões
da transferência interna de curso:......................................................................................... 3
Estágio......................................................................................................................................................
6
Natureza da organização e da atividade........................................................................................... 6
Definição/Especificação
do problema ou sistema principal do trabalho....................... 6
Forma de
organização da equipe................................................................................................................. 6
Estimativa inicial
de prazos........................................................................................................................... 7
Métricas
post-mortem do andamento do projeto........................................................................... 7
Bibliografia
utilizada ou básica para a área de atuação em que se insere o estágio 7
Participação em
treinamento....................................................................................................................... 7
Ferramentas e
técnicas utilizadas........................................................................................................... 8
Técnicas que tenham
lhe parecido relevantes para o problema em questão, mas que não tenha sido
exploradas por falta de tempo, recursos humanos ou apoio da organização.......... 8
Forma de acompanhamento utilizada pelo gerente /administrador
do projeto.....
8
Breve
descrição do projeto:............................................................................................................................. 9
Modificações
Genéricas feitas:...................................................................................................................... 9
Descrição
dos serviços do Mail Manager............................................................................................. 10
1) Serviço “DT Mail Manager Get Mail”........................................................................................................... 10
2) Serviço “DT Mail Manager Parser Mail”..................................................................................................... 11
3) Serviço “DT Mail Manager Zip Mail”........................................................................................................... 12
4) Serviço “DT Mail Manager Send Mail”........................................................................................................ 12
5) Estimativa de custo (tempo)
da combinação dos serviços:........................................................................
12
Desafios e Frustrações encontradas...............................................................................
14
Interação com membros da equipe que tenham agido como
mentores do trabalho
16
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...............................................
16
Diferenças entre a vida acadêmica
e o mercado de trabalho..........................
16
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/científicos/etc
relevantes para esta atividade?............................................................................................................................................
17
Planos para o futuro...................................................................................................................
17
Nome: Manoel Fernando Alonso Gadi
E-mail:
mgadi@linux.ime.usp.br
Primeiro
Grau: EMPG "Eda Terezinha Chica
Medeiros"
Segundo Grau: ETESP "Prof. Basilides de
Godói"
Terceiro
Grau: Instituto de Matemática e Estatística (IME-USP)
1999 – Ingresso no ciclo básico do IME.
2000 - Ingresso no Bach. em Ciência da Computação-Transferência
2002 - Finalização do curso.
Quando apareci no IME-USP pela primeira vez
como estudante, foi em uma terça feira, oito da manhã, onde assisti minha primeira
aula com a professora Nami Kobayashi. Introdução à computação (MAC110) foi
o assunto ministrado, claro que naquele momento, não me senti confortável
devido a minha total ignorância no assunto, mas com o passar do semestre começei
a me dar bem com aquela disciplina. Então em junho daquele
ano decidi mudar minhas expectativas sobre futuro e no ao término do ano troquei de
curso.
A organização aonde o estágio foi realizado é uma empresa
privada cujo ramo de trabalho é o de implementação e suporte de programas
para CRM (Customer Relationship Management). A atividade realizada constou
exatamente em trabalhar na implementação ou reimplementação de softwares desenvolvidos
pela empresa.
Enquanto estagiário da Direct Talk trabalhei com todos os programas que a
empresa produz, porém para o trabalho de formatura vou me ater ao projeto
chamado “Refactoring DTMMServ”.
O projeto nasceu da necessidade
da restruturação do serviço de Windows DTMMServ que estava apresentando
problemas tanto, de bugs quanto de performance.
A especificação inicial do
projeto foi a de dividir o atual DTMMServ de modo a facilitar possíveis
correções já naquele momento e no futuro.
Maiores detalhes podem ser
encontrados na seção “Breve descrição do projeto” dentro de “Projeto”.
O projeto foi previsto para demorar cinco meses estando esses
divididos da seguinte forma:
1 mês em reengenharia (refactoring).
2 meses de implementação
2 meses de testes + conserto de bugs
O projeto de re-implementação dos componentes de envio e
recebimento de mensagem eletrônica do Mail Manager já se encontra terminado, e
seguiu quase que corretamente os prazos previamente estabelecidos, a não ser
por um atraso de duas semanas na etapa de implementação, totalizando cinco
meses e meio. Ao final o projeto ficou distribuído como segue:
1 mês em reengenharia (refactoring).
2,5 meses de implementação
2 meses de testes + conserto de bugs
Grande parte das tárefas utilizadas necesitaram de consultas de documentação para sua implementação, parte retiradas de livros, e outras retiradas diretamente da Internet. Segue a lista de alguns livros consultados:
ASP - Guia Completo - A. Keyton Weissinger
ASP - Techniques for Webmaster - Alex Homer
Delphi 6.0 - Aprenda em 21 dias -Steve Grobman
HTML4- Aprenda em 1semana - Laura Lemay
PL/SQL - Aprenda em 21 dias - Jonathan Frekick & Tom Luers
MySQL & mSQL- Yarger, Reese & King
A empresa possui uma política de treinamento interno e como
éramos doze funcionários, a cada sexta-feira um dos doze deveria apresentar uma
palestra sobre ou uma tecnologia que estava sendo usada no projeto em que
estava trabalhando, ou sobre o próprio projeto caso este ainda não tivesse sido
apresentado, totalizando uma apresentação da cada funcionário a cada três
meses.
Esse ciclo de palestras fêz com que eu recebesse muito
treinamentos, dentre eles:
·
Técnicas de Otimização em Banco da
Dados.
·
XML
·
Protocolos de Rede
·
Programação Extrema
Ferramentas de implementação: Delphi 6.0 e SQl-Server.
Criptografia: MD5, CIPHER, BLOWFISH.
Codificações: ISO_8859_1 até ISO_8859_15, CP1250 até
CP1258, KOI8_R, CP895, CP852, UCS_2 e 4,
UTF_7 e 8
Protocolos (de Rede): POP, SMTP,
TCP/IP e HTTP.
Engenharia de Software: Método de implementação Espiral.
Em um trabalho em uma empresa o tempo torna-se um limitante
importante a aplicações de certas técnicas, isso ocorreu com a aplicação de
certas técnicas de rede para resolução de DNS e envio de e-mail diretamente
para o SMTP do cliente final, evitando o uso de um outro SMTP
intermediário. Por questões de tempo não
foram implementadas todas as partes necessárias o que faz necessário o uso de
um SMTP intermediário em muitos dos casos.
Um outro ponto foi a discussão sobre o uso de eXtreme programing ao invés de Espiral, o que foi previamente discutido, porém não implementado por desinteresse da organização.
Durante o estágio o supervisor estava sempre presente. De
tempos em tempos aconteciam reuniões entre ele e eu a fim de apresentar o
andamento do meu trabalho e possíveis reclamações ou dicas que possam ter
surgidos, claro que dúvidas poderiam ser tiradas a qualquer momento. Essas
reuniões tinham uma sazonalidade menor que um mês, acontecendo uma ou mais em
um mês.
O supervisor também foi a pessoa que controlava o cronograma
de atividades no mês, o andamento dessa atividades e as horas de estágio trabalhadas naquele
mês.
Refactoring DTMMServ
A DirectTalk já
possuía um serviço de Windows que era usado tanto para recebimento quanto
para envio de mensagens de um programa de gerenciamento de mensagens parecido
com OutLook chamado DT-Mail Manager (Para maiores informações sobre os produtos
da DirectTalk favor olhar na seção Empresa - Produtos).
Esse serviço
entra em funcionamento em duas situações.
A primeira delas
é quando o usuário do Mail Manager termina de escrever uma mensagem e pressiona
o botão enviar, neste momento o Mail Manager salva essa mensagem no Banco
de Dados específico deste cliente, na tabela de e-mails a serem enviados.
Só então o DTMMServ entra em ação enviando essa
mensagem através de um servidor SMTP.
A segunda responsabilidade deste serviço diz
respeito ao processo reverso, i.e. conectar-se a um servidor de protocolo
POP3 e fazer descarregamento do servidor das mensagens e em seguida, após
fazer a decodificação(Parse), gravar essa mensagem no Banco de Dados específico
deste cliente.
Claro que a descrição acima foi bastante superficial,
maiores detalhes serão dados na seção que descreverá o funcionamento da nova
versão.
A primeira
modificação planejada foi a quebra do serviço DTMMServ em dois outros,
separando assim o trabalho de envio e recebimento de mensagem em dois serviços
independentes, garantindo um parcial funcionamento do sistema mesmo que a outra
parte apresente problemas.
Send (Envio) -> DTMMSnd
Receive (Receb.)-> DTMMRec
Após pouco tempo
de implementação tornou-se notório a necessidade também da quebra do serviço de
recebimento em dois outros serviços. E assim foi feito:
DTMMRec -> DTMMGet
-> DTMMPrs
A necessidade surgiu
após notar que contas de e-mail de clientes com problemas interferiam inadvertidamente
em outras contas causando retardos. Quando a decisão de separar DTMMRec foi
tomada pela primeira vez surgiu à nossa realidade uma questão crucial, como
fazer a comunicação entre os dois serviços?. Naquele momento ficou estabelecido
que seria através de arquivos contendo as mensagens salvos em um determinado
diretório, logo após, decidiu-se a criação de um novo serviço que por sua
vez cuidaria da integridade dos diretórios envolvidos e do armazenamento por
segurança(backup) das mensagens que circulam pelo sistema, sendo esse batizado
DTMMZip.
Totalizando quatro
serviço, que são:
DTMMSnd
DTMMGet
DTMMPrs
DTMMZip
O serviço de baixar (Receive) mensagens encontra-se
dividido em três serviço:
DTMMGet – DT Mail
Manager Get Mail
DTMMPrs – DT Mail Manager Parse Mail
DTMMZip – DT Mail
Manager Zip Mail
Enquanto o serviço de envio é composto por
apenas um serviço:
DTMMSnd – DT Mail Manager Send
Este serviço
implementa a conexão TCP/IP permitindo a fluência de dados entre servidores
de mensagem eletrônica padrão POP3 do mundo e nosso banco de dados interno.
A fim de evitar que uma conta aonde a conexão de Internet encontra-se lenta
prejudique as normais iniciamos a o captação das mensagens através de threads.
I.e. para conta de e-mail, por exemplo joao no servidor ime.usp.br, disparamos
uma trhead específica que tratará de toda comunicação baixar do servidor POP3. Sendo que nno DTMMServ dividíamos em sites,
ou seja, baixavamos todos os e-mails do BOL de todos os clientes de uma vez
só, o que na teoria pode parecer mais inteligente, porém na prática não apresenta
bons resultados devido a grande instabilidade de muitos servidores na Internet.
O serviço dtmmget salva suas mensagens em um diretório chamado MMGet
enquanto esta está sendo baixada, após
fechar a conexão com o servidor POP3 (QUIT) cada thread move suas mensagens
baixadas para o diretório MMPrs de onde o
próximo serviço dtmmprs começará trabalhar.
Este serviço implementa o parser dos arquivos de e-mail salvos pelo
serviço anterior no diretório “MMPrs”, salvando as mensagens interpretadas
na base de dados (BD) através de chamadas a Store Procedures. Após interpretar
os arquivos eles são movido para o diretório das mensagens já interpretadas
“MMZip” que serão compactadas pelo próximo serviço chamado DTMMZip.
Aqui temos o ultimo serviço na escala de baixar mensagens, este serviço
roda a cada uma hora, verificando se a hora atual está no intervalo entre
24:00-1:00 caso isso seja falso ele não faz nada, caso seja verdade ele compacta
todas as mensagens terminadas em “.rpm” que estão no diretório “MMZip” com
o nome no seguinte formato “yyyy-mm-dd hh-nn-ss.zip” [por exemplo: 2002-05-31
11-41-30.zip].
![]() |
Este serviço ao contrário dos outros três anteriores, foi o que menos
sofreu alteração, apesar do código ter sido todo reescrito, a idéia principal
foi mantida intacta. Ou seja, o enviador de e-mail cumpre o papel de enviar
as mensagens que estão nos servidores a serem enviados, porém agora com novas
funcionalidades, a mais importante delas foi que o enviador de e-mail deixou
de ser um enviador passivo, para ser um enviador ativo, isto é, quando possível
ao enviador resolver o dns, ele o faz, e envia diretamente a mensagem ao invés
de transferir o trabalho para um servidor SMTP. Nesta versão também foram
incluídas outras codificações (ISO) a fim de aumentar a capacidade do uso do
software, tornando ele capaz de manusear mensagens escritas em diferentes
alfabetos.
Melhor Caso:
Supondo que a mensagem acabou de ser liberada no
servidor de mensagens, temos Tsm(tempo no servidor de mensagem) = 0, e que ao
deslocarmos a mensagem de diretório o dtmmprs.exe já esteja iniciando o seu
trabalho então Ted(tempo espera no diretório) = 0. Logo teremos que a mensagem
demorará:
Tdownload + Tinterpretação .
Pior caso:
Aqui vamos supor que a mensagem acabou de ser
liberada no servidor de mensagens, mas o serviço também acabou de rodar, então
ele só pegará a mensagem no próximo ciclo, temos Tsm(tempo no servidor de
mensagem) = 5** minutos, e que ao deslocarmos a mensagem de diretório o
dtmmprs.exe já esteja terminando o seu trabalho então Ted(tempo espera no
diretório) = 30** segundos. Logo teremos que a mensagem demorará:
Tdownload + Tinterpretação + 5,5 min
** valores defaults de instalação, reguláveis
pelo banco(não pelo supervisor).
Obs:
Levando em conta que o problema do Tsm também incide sobre o
serviço versão 1.21(versão anterior), o acréscimo máximo de tempo que essa nova
estrutura inseriu foi de Ted(30Segundos), sendo na média de Ted/2.
Resumo
das Melhorias:
1)
Maior controle dos parâmetros dos serviços, que agora se encontram em um banco de dados.
2)
Aumento do número de codificações que o sistema suporta, tanto pelo lado da
codificação(Send) quanto pelo lado da decodificação(Parse).
3)
Ganho de desempenho no
sistema de download das mensagens, já que contas com mensagens problemáticas
não mais influenciam as demais.
4)
Ganho de desempenho e qualidade no sistema de envio das mensagens, já que ao se enviar a
mensagem diretamente ganha-se velocidade e tem-se maior controle dos erros de
rede ocorridos no trajeto.
5)
Ganho de banda, ao
fazer-se o “parse” da mensagem em um serviço em separado do que baixa a
mensagem, ganha-se banda.
6)
Ganho de estabilidade,
ao separar o programa de “parse” ficou muito mais fácil identificar falhas na
decodificação, e resolvê-las.
7)
Ganho de segurança, a
implementação de comunicação usando um sistema criptográfico incrementou em
muito a segurança do sitema.
8)
Sistema de backup.
Desafios foram muitos, sendo eles a
parte que mais contribuiu para o meu crescimento durante o estágio.
A empresa tem uma filosofia muito boa neste
sentido, durante todo o estágio ela apresentou vários desafios. Desde a
primeira semana, na qual o desafio foi aprender usar Delphi, até as últimas que
o desafio foi estudar codificações de mime em mensagens eletrônicas a empresa
incluío esse tempo de auto aprendizado no
tempo de implementação do projeto em questão.
Resumindo, os desafios que tive que superar
foram a parte que mais me vez evoluir como profissional, mesmo aqueles desafios
que não tem relação com a área de computação, como projetos de reciclagem de
material ou de uso racional da impressora.
Frustrações por outro lado não foram
tantas, mas me sinto frustrado de não ter aproveitado o tempo de estágio para
aprender assuntos de áreas diferentes, já que a empresa apresentava essa
possibilidade, fiquei muito preso a assuntos de Internet, perdendo assim a
oportunidade de aprender mais sobre Banco de Dados.
MAC110
– Introdução à Computação
Sendo essa a estrutura fundiária para qualquer programador, ela
exerceu um papel crucial no desenvolvimento de todo projeto.
MAC122
– Princípios de Desenvolvimento de Algoritmo &
MAC323
– Estrutura de Dados
Essas disciplinas por sua vez exerceram papel alicerçador,
tendo um papel não só na estruturação do projeto, mas também servindo como uma
ligação com as matérias de conteúdo mais específico. Já que nelas são
ministradas não só de algoritmos específicos, mas ferramentas de análise que
tornam-se chaves para entender e analisar outros algoritmos.
MAC211
– Laboratório de Programação &
MAC242 – Laboratório de
Programação II
Ambos laboratórios de programação apresentam como proposta a
implementação de um projeto “grande”, que exige, portanto, um esforço maior
além da necessidade de divisão do mesmo em mais que uma única parte, que é
comum em outras disciplinas até então.
MAC417
– Visão e Processamento de Imagens – Parte I
Apesar dessa disciplina não apresentar uma relação direta com o
projeto em si, existem dois pontos básicos dessa disciplina os quais foram de
altíssima relevância.
1o Apresentação de vários algoritmos e estratégias
de reconhecimento e decodificação de padrões.
2o Pela primeira vez, em todo o curso de Bacharelado
em Ciência da Computação, me deparei com uma disciplina cujo projeto além de
grande, depositava sobre meus ombros toda a responsabilidade desde o design até
os testes e ao fim do projeto foi requisitada uma apresentação sobre o trabalho,
onde deveria constar: tempo gasto em cada etapa, estratégia em reconhecimento
de imagens utilizada para solucionar a questão, resultados obtidos, problemas
encontrados e como estes foram sanados e por último uma apresentação da versão
final em funcionamento.
MAC332
– Engenharia de Software &
PCS216
– Sistema de Tempo Real
Sem dúvida ambas disciplinas possuíram fortíssimo apelo ao
planejamento em projetos, sendo a primeira mais apegada a apresentação de
técnicas, vantagens e desvantagens das mesmas, enquanto PCS foi mais a fundo na
aplicação de uma dessas técnicas.
MAC426
– Sistema de Banco de Dados &
MAC439 – Laboratório de
Banco de Dados
Banco de Dados foi um ponto marcante em todo desenrolar do
projeto, já que Ter um Banco de Dados bem organizado e eficiente foi um dos
pensamentos que sondavam as mentes dos implementadores a todo momento.
MAC334
– Criptografia para Segurança de Dados
Apesar de não ter sido necessária a implementação de sistema de
criptografia, foram utilizados sistemas já existentes, como por exemplo CIPHER,
BLOWFISH e o gerador de chave de Hash MD5, tendo esses sido arduamente
discutidos nessa disciplina.
MAC431
– Introdução à Computação Paralela e Distribuída &
MAC438 – Programação
Concorrente &
MAC422 – Sistemas
Operacionais
Como a maioria dos sistemas que utilizam Internet hoje em dia,
meu sistema também se utilizou de recursos de concorrência e distribuição,
tendo sido muito importante toda a discussão travada nessas disciplinas sobre o
tópico.
MAC424
– O Computador na Sociedade e na Empresa
Essa disciplina não poderia ser esquecida, apesar de não
apresentar relação direta com o projeto, ela apresentou um papel fundamental no
meu pensamento social enquanto um programador, ou mais que isso, enquanto ser
humano.
Neste
ponto ocorre algo muitíssimo interessante, trabalhando em grupo na faculdade é
comum conhecer as pessoas que trabalharão com você a priori. Apesar desse fato,
é muito comum haver problema de irresponsabilidade por parte de alguns
integrantes do grupo. Por outro lado, na empresa, é comum ser colocado em grupo
com pessoas que você desconhece, mas o senso de obrigação com o trabalho faz com
que todos cooperem na execução de sua parte.
Porém
quando o trabalho é feito em dupla no BCC (pair programming) é muito mais fácil atingir o nível de cooperação entre os entes
da equipe, por outro lado o tamanho possível do projeto fica reduzido.
No estágio, quero dizer, na vida prática, é possível notar muitas diferenças
sistemáticas quanto à implementação de projetos.
Uma dos aspectos diferentes que notei foi o
de que as empresas encontram-se atrasadas, ou com dúvidas da eficácia, quando
se fala em uso de novas técnicas em Engenharia de Software. Empresas em geral
apegam-se bastante a uma só técnica, e mesmo sabendo que uma determinada técnica
seria mais eficiente para um determinado projeto, recusa-se a trocar o método
em uso corrente, chegando por vezes a firmar uma técnica de Engenharia de
Software como sendo uma metodologia da empresa. Por outro lado, na universidade
aonde existe maior afeição pelo novo e por ministrar técnicas diferentes é
possível perceber diferença entre técnica de desenvolvimento utilizadas
dependendo diretamente do professor ou dos fins que a disciplina se propõem.
Outra diferença importante em uma empresa é
a presença do supervisor, que não tem apenas o papel de supervisor de seu
trabalho, mas também o de organizar o projeto global de maneira que todas as
partes implementadas separadamente se acoplem perfeitamente.
Uma última diferença que notei foi a existência
de um processo contínuo na implementação de um software. Ou seja, em uma empresa
após o lançamento de uma versão de um software a próxima versão começa imediatamente
ser implementada, sem retardos, bugs
já conhecidos começam a ser resolvidos e novas funcionalidades a serem incluídas,
a fim de que em poucas semanas já exista uma atualização (“path”) do software.
Devido a área estar totalmente ligada a questões como
Rede/Internet/BD/ASP, estaria focando meu tempo em cursos na área de Rede e
Banco de Dados, pois esses são dentre aqueles assuntos os que mais me atrai.
Além disso, gastaria um tempo estudando mais a fundo idiomas, principalmente
inglês e espanhol. Já que é possível uma expansão dos negócios da empresa na
América do Sul.
Como estive fora no período de inscrição e realização das
provas de seleção para o mestrado, encontro me em uma posição desconfortável
para iniciar o mestrado em dois mil e três. Porém, tenho sim planos de
continuar os estudos acadêmicos, mestrado encontra-se sim em minha mente.
Apesar de não iniciar os estudos no mestrado no ano que vêem, pretendo tentar
cursar algumas disciplinas como aluno especial a fim de adiantar o curso de pós
e principalmente para não perder o contato com a Universidade.
Um ponto acertado para o próximo ano é a continuação dos trabalhos
na empresa onde fiz o estágio, estou para ser contratado em janeiro próximo
e continuarei assim na área em que estagiei mas agora na função de Analista
de Sistema.
A propósito, agora que estou terminando a graduação no IME
encontrarei tempo para voltar a freqüentar classes de bateria.