Você está na página 1de 16

Reusabilidade e portabilidade

A importncia da reusabilidade e portabilidade de cdigo


existente
Saiba tcnicas de reusabilidade e portabilidade que tornam os projetos mais
amadurecidos e com viso de reaproveitamento de idias
Caio Costa, George Dias, Lauriza Santos, Barbara Aniele, Ayran Costa e Daniele Guimares
Desde o comeo da dcada de 80, a Engenharia de Software tem se tornado uma disciplina
amadurecida nas universidades e no mercado. Porm, ao estgio que chegou atualmente,
impreciso afirmar que existem mtodos consolidados que podem ser usados em desenvolvimento
de qualquer software. Pois a heterogeneidade das necessidades do usurio aumenta a
complexidade de uma documentao que estabelea padres, mas no quer dizer que no h
similiaridade nos projetos e nos requisitos dos usurios, como os projetos tipo CRUD (Criar, Ler,
Editar e Remover) que so um grande exemplo dessa situao.
Com o comeo da dcada de 90 viu-se a existncia de um conjunto de solues que conseguia
solucionar problemas que eram recorrentes em vrios projetos. Estas solues iam alm de
cdigo: linguagem de representao do projeto, relacionamento entre entidades, boas prticas de
cdigo, quais mtodos deveriam ser usados no desenvolvimento.
No que tangia a cdigo e a elaborao de projetos apareceram questes pertinentes: Se um
mesmo problema aparece em outro projeto, como pode ser reaproveitada a soluo do primeiro
projeto sem necessitar fazer tantas mudanas? Ser que j existe soluo para o meu problema
em outros projetos? possvel aproveitar desenvolvedores novatos no projeto sem precisar
oferecer um treinamento para passar um conjunto de tcnicas que so aprendidas por anos e anos
de experincia? Como possvel fazer com que um software no envelhea to rpido? H uma
possibilidade de que a manuteno que no precise temer tantos efeitos colaterais? H
possibilidade de ser construdo um software no s funcional, mas de qualidade? Como
possvel estar preparado para as mudanas de requisitos?
O foco na reusabilidade e portabilidade das solues traz possibilidades de benefcios que
contribuem para o desenvolvimento no ser custoso e baseado no empirismo. Pois antes da
dcada de 80 o desenvolvimento no se importava com a vida til(principalmente com o
descarte muito cedo), devido ao problema de adio de novas funcionalidades a este. Com a
chegada de conceitos focados na flexibilidade (Refatorao, Padres de Projeto, Padres
Arquiteturais, paradigmas de linguagem focados no reuso), o desenvolvimento de software
deixou de ser um exemplo de negcio tendencioso ao fracasso. Assim a discusso de reutilizao
de projetos se tornou obrigao das empresas de software.

Objetivo

Neste artigo sero apresentadas as abordagem do desenvolvimento de software quanto a


reutilizao de cdigo existente, apresentando tcnicas de reutilizao de cdigo e um breve
descritivo delas.

Fundamentos
Quanto a portabilidade
Segundo (BRAUDE,2005), devemos projetar pensando em mudanas, pois raramente o
requisitos iniciais sero constantes at o final do projeto. Por isso deve-se construir software com
possibilidades de flexibilidade, entretanto, no seria razovel esperar que o projeto monitore
atividades no relacionadas:flexibilidade tem limites(BRAUDE,2005).
Ainda (BRAUDE,2005) sugere, como exemplo, que prepare o software com um conjunto de
interfaces que estabeleam comportamentos comuns e que essas interfaces sejam agregadas por
algum componente que as utilizem. A flexibilidade aumentada, pois o conjunto de solues
concretas que implemente essa classe agregada ser abstrado, e somente se, tiverem
conhecimentos destas no momento de execuo da aplicao. Utilizao sugerida por
(GAMMA,2000) com o padro de projeto State(permite a um objeto alterar seu comportamento
quando o seu estado interno muda. O objeto parecer ter mudado sua classe). Essa soluo
uma forma de diminuir os problemas com herana de implementao (baseada extends de
Classes): alta redundncia, baixa coeso, forte acoplamento e exploso de
classes(SHALLOWAY,2004).

Estrutura do Pattern State(http://en.wikipedia.org/wiki/File:State_Design_Pattern_UML_Class_Diagram.svg)


O (KERIEVSKY,2008) afirma que um pensamento de flexibilidade deve sempre focar em um
cdigo menos irritante, mas ele ressalta que deve se tomar cuidado com a ansiedade de
utilizar padres em demasia e a possibilidade de se perder muito tempo no projeto. Ele sugere
que uma boa prtica seria a utilizao de Refatorao, pois pode se encontrar softwares que
necessitem ser flexveis e portveis mas por alguma razo, seu redesenvolvimento caro (ex:
software especialista) ou eles so crticos (A manuteno deve ser dada em runtime).
Quanto a reusabilidade
Cada vez mais empresas de software vem seu software como um ativo valioso e esto
promovendo o reuso para aumentar seu retorno sobre investimentos(SOMMERVILLE,2007).
Por muitos anos, a reutilizao foi algo que no poderia ficar fora do pensamento de algum
profissional: mas s muito recentemente os engenheiros de software aprenderam a alcanar a
fazer a reutilizao em escala significativa, como por exemplo a utilizao disseminada das APIs
Java(BRAUDE,2005).
O (BOOCH, 1998) recomenda-se que sempre pense no desenvolvimento de um software a
pergunta: Esse comportamento j foi usado em mais algum contexto?.

As primeiras instncias da abordagem da reutilizao vieram com a documentao e publicao


de algoritmos fundamentais(KNUTH, 1971) e, mais tarde com a documentao de tipos de dados
abstratos como pilhas, rvores listas (BOOCH, 1998) e mais recentemente com a evoluo da
orientao a objeto perceberam que determinadas solues de projeto poderiam ser aplicadas em
diferentes casos. Assim como forma de padronizao implantou-se a utilizao de padres de
projetos (design patterns).

Contedo
A reusabilidade apesar de ser um recurso de estratgia de desenvolvimento, ainda no muito
amadurecida, deveria ser discutida na Engenharia de Software como algo natural que ocorresse
com frequncia em um projeto. Ela vem em prol da agilidade, manuteno do software e reduo
de custos de produo. Entre algumas vantagens, podem ser citadas:
Confiana aumentada - Software reusado, experimentado e j testado em sistemas de trabalho
deve ser mais confivel do que software novo, pois seus defeitos de projetos e implementao j
foram encontrados e corrigidos;
Conformidade com padres - alguns padres podem ser implementados como um conjunto de
componentes reusveis padronizados;
Uso eficiente de especialistas - Ao invs de desenvolver o mesmo trabalho repetidas vezes,
esses especialistas podem depositar seus conhecimentos em softwares reusveis.
Dentre as desvantagens esto:
Custo de manuteno aumentados - Se o cdigo-fonte de um sistema ou componente no
estiver disponvel, ento o custo de manuteno poder ser aumentado.
Sndrome de no inventado aqui - Alguns desenvolvedores preferem desenvolver por si
mesmo ao invs de reutilizar um software.
Aumentar a reusabilidade do software considerada como pr condio tcnica crucial para
melhorar a qualidade geral do software e reduzir os custos de manuteno e de produo.
Design Pattners
Reusabilidade uma consequncia de um conjunto de prticas para que o cdigo seja flexvel.
Quando se trabalha com Padres de Projeto, se pensa na melhor forma de deixar o cdigo
reutilizvel em vrias situaes, mas o que mais chama ateno como tratado a Ligao
Dinmica(Dynamic Binding). Nela envolve o atendimento de uma solitao em tempo de
execuo, deixando poucas coisas em hard code. Atravs da ligao dinmica possvel fazer
manuteno do cdigo sem compilar nada e expandi-lo a nveis extremos com Reflexo
Computacional.
Uma outra questo muito comum em orientao a objetos a responsabilidade ou
interesse(concern). Quando se pretende implementar um sistema flexvel, de fcil acrscimos de

mudanas e que aproveite o mximo da POO, o projeto de responsabilidades de objetos


pensado com cuidado devido a uma questo bem simples ou no: O que poder mudar
amanh?
A reusabilidade acontece quando existe algo j pronto, mas no impede-se que planeje como os
mdulos sero implementados futuramente focando em uma diviso de responsabilidades clara.
Para se aproveitar o mximo da POO, sem especificar alguma linguagem, (GAMMA, 2000)
sugeriu os grupos responsabilidade como:
Criacionais (Criar objetos em configuraes variveis determinadas em tempo de
execuo);
Estruturais (Representar rvores variveis de objetos ou outras estruturas em tempo de
execuo);
Comportamentais (Mudar, recombinar ou, de outro modo, captar o comportamento
mtuo de um conjunto de objetos).

Sendo 23 padres de projeto se dividindo nessas trs categorias.Ou como (METSKER,


2008)classificou os padres focando a estrutura: de interface, responsabilidade, construo,
operao e extenso.
Dentre todos os padres, o que chama bastante ateno o Memento(GAMMA, 2000), pois ele
consegue acrescentar metdos as classes.Assim, tais metdos podem ser escritos a qualquer hora
e serem adicionados na Classe(uma pseudo reflexo computacional).
Os Padres de Projeto oferecem uma forma de construo de relacionamento entre as classes que
faz surgir o conceito de Framework.
Frameworks de aplicao
A estrutura de trabalho usada para aperfeioar a produo e suprir a demanda crescente do
software, uma tcnica aplicada do projeto ao desenvolvimento, da reutilizao da linha de
cdigo a analise de projeto, ou seja, passvel de reutilizao e adaptao. (BROOCH, 2000)
define como, Um padro arquitetural que prov um template extensvel para aplicaes
dentro de um certo domnio. E de forma mais ampla (QUINAI,2005):
Framework: um pacote projetado para ser importado com substituies. Ele desdobra-se para
prover uma verso de seu contedo que especializado atravs das substituies feitas. Um
framework pode instanciar a descrio de um Padro, uma famlia de Padres mutuamente
dependentes, uma colaborao, um refinamento de Padro, a prpria construo do modelo e
mesmo um conjunto de propriedades genricas fundamentais. Frameworks podem ser
reconstrudos em outros frameworks.
Caractersticas
Uma caracterstica importante dos frameworks que os mtodos definidos pelo
usurio para especializ-lo so chamados de dentro do prprio framework, ao invs de
serem chamados do cdigo de aplicao do usurio.

Modularidade
Reuso
Extensibilidade

Classificao do framework:

System infrastruture frameworks (Os frameworks de infra-estrutura)


Middleware integration frameworks (Os frameworks de integrao de middleware)
Enterprise application frameworks (Os frameworks de aplicao empresarial)

Experincia Prtica
Foi feita entrevista com Tiago Cajaba, Arquiteto de Software do IRT (Instituto Recncavo de
Tecnologia) para explorar como a portabilidade e reusabilidade de software tem sido utilizada no
mercado.
P:Boa tarde, voc poderia falar um pouco da sua empresa de voc e do seu cargo,de suas
funes?
R:Meu nome Tiago, Tiago Cajahyba, trabalho no IRT empresa voltada a inovao, instituto
sem fins lucrativos, no uma empresa que visa lanar produto no mercado, na verdade nossa
funo desenvolver coisas que, por exemplo, o mercado nunca viu, hoje a gente trabalha com
empresas como a Samsung, sms, o grupo positivo, e outra empresas do estado de So
Paulo.Minha funo aqui arquiteto de sistemas, estou aqui h 5 anos, basicamente minha
funo resolver problemas.
P: Vc poderia falar brevemente sobre como vc aplica a reusabilidade aqui?
R: A reusabilidade est meio no cerne do que ns fazemos aqui. A primeira coisa que acontece :
No tem nada. No adianta fazer reuso de nada porque no tem nada. Por exemplo uma nova
soluo pra um celular que no foi lanado, ou seja o celular nunca foi pro mercado e ningum
sabe como ele , chega pra gente o prottipo e temos que desenvolver solues pra ele. Nunca
fizemos aquele cdigo. No existe nada em que se basear. Ento nesse momento no h
possibilidade de reuso e o que ns fazemos: trabalhamos com esquema de prova de conceito.
Criamos vrios conceitos e a partir da comeamos a ter cdigo, e dessa prova de conceito
nascem novos conceitos, pois como se fosse um grande sistema em que existem vrias idias
que quando prontas, so apresentadas ao cliente e partindo desse encontro, olhamos nosso cdigo
e comeamos a procurar quais as caractersticas comuns que ns temos ali e ento comea a
tentativa de criar pequenos componentes. As vezes nascem classes utilitrias, as vezes nascem
classes de pattern ... a gente nunca sabe. Por exemplo, tratamento de imagem, que a gente
trabalha muito, identificao de rosto, leitura de cdigo de barra, identificao de objeto dentro
de uma imagem e ento analisamos: "bom, dentro dessas estruturas o que ns temos?".
Verificar a saturao da imagem. Bom, verificar a saturao de uma imagem uma coisa
comum, toda vez que trabalhamos com uma imagem temos que verificar: qual o esquema de
cores, qual o tipo, se jpeg, se bitmap, fazer histograma... e assim sucessivamente. Ento essa

funes so genricas. Desse padro comea a nascer a nossa primeira classe utilitria. Mas
estou falando s de utilitria, as vezes tambem temos regras de negcio. Por exemplo,
trabalhando com celulares a gente tem o tratamento de mensagens, a gente tem um sistema
android e a chega um sms. Sempre trava alguma coisa da aplicao. Isso j tem um pouco de
regra de negcio, comeamos a pegar essa regra de negcio pra tratamento de exceo e
organizar, pois j no utilitrio. Assim comeam a nascer os novos componentes.
Passsamos 1 ano e meio mais ou menos com o projeto Android mas hoje ns temos uma API
interna nossa. E um cdigo que permite que vc acesse basicamente todos os recursos principais
do celular como contatos, sms, imagem, msica tudo isso j um componente nosso e vrios
projetos j esto utilizando. Tambm utilizamos classes de teste unitrio pra garantir que tudo vai
funcionar da forma esperada. O resultado tem sido muito bom, mas demorou um ano e meio pra
que a gente ganhasse maturidade suficiente no cdigo e pudesse agora utilizar em vrios lugares.
Vamos identifiticando o que pode ser melhorado, aparece um novo projeto, ento esse novo
projeto traz alguma caracterstica. Por exemplo aconteceu agora com o facebook, o cliente queria
fazer um projeto que conectasse direto com o facebook. Bom, toda essa parte de conexo
comum a vrios projetos. Agora sugiu um segundo projeto que o cliente quer que use o
facebook: por que no transformar aquilo que antes era apenas um cdigo do programa em
algum componente que possa ser reutilizado? Como agora na nossa API a gente j tem uma
estrutura, a gente t portando esse cdigo pra dentro dessa estrutura e todo mundo vai poder usar.
Ento assim que nasce. No uma coisa mirabolante, no uma coisa fcil de fazer no uma
coisa que algum goste de fazer at porque javadoc que tem que ter nesses casos embora no seja
uma coisa muito gostosa de ser feita por parte do desenvolvedor.
P:Quais os mtodos e ferramentas de reusabilidade voc trabalha mais freqentemente?
R:Para anlise do cdigo ou identificao dos pontos q podem sofrer reuso?
P:Identificao dos pontos, em geral mesmo
R:Bom, para a identificao dos pontos de reuso ns temos uma ferramenta, que agora... eu j
uso h tanto tempo que esqueci o nome, ou PMD, CheckStyle, FindBugs e CAP, acho que
criadouds, ele monta um grfico que ele diz o quanto de Control C, Control V, tem no
cdigo,depois eu pego o nome para voc, ele mostra esse cdigo est exatamente igual a esse, se
isso acontece ento porque provavelmente aquele ponto boa sugesto de resuo ou ento
criao de alguma estrutura que a gente possa utilizar depois, a segunda coisa quando ele tem o
nvel de acoplamento do cdigo, se a classe est muito acoplada, a gente pode verificar se h
necessidade de se dividir aquele ponto em vrios pedaos e mais genricos, a partir da a gente
verifica, se esses pedaos so realmente mais genricos?eu posso utilizar em outros lugares
outros projetos?Normalmente no nosso caso aqui sim, porque Android no tem muito para onde
ir, mas isso um forte candidato a ser utilizado como reuso, e agente tambm utiliza algumas
ferramentas de Code Smell verificar boas prticas inclusive nos nossos componentes, tipo essa
API que comentei , a gente roda de tempos em tempos essa ferramenta para verificar se existe
alguma coisa que possa ser melhorada.Ento basicamente assim que a gente trabalha hoje.
P:Qual o impacto da reusabildiade na empresa?

R:Qual o impacto que eu gostaria(riso), ou qual o impacto que realmente tem?Porque ns


trabalhamos com mltiplos clientes e cada cliente tem um contrato de confidencialidade, olha a
dificuldade, ento o que eu fao aqui teoricamente nenhum outro cliente pode saber, ento eu
posso falar do meu projeto que no pequeno,meu cliente Samsung, nesse caso existem vrios
projetos, ento a reusabilidade dentro do projeto grande, mas na empresa no to grande, o
que acontece muito quando a gente,por exemplo, tirando Android no caso, em outros projetos
que trabalhei, a gente passar, como Java, por algumas experincias e sair, conversando com
outras equipes para verificar como que eles resolveram aquele problema, e montando uma
pequena base de conhecimento, a partir da a gente gera um cdigo, no gosto de chamar de API
nesse caso, nem de Framework, no chega no nvel de Framework o que meio comum, ai a
gente gerou o Jar com varias classes extremamente comuns na base de projetos, a gente utiliza
at para o Android, porque tem classe tratamento de data,classe de tratamento, leitura de
arquivos, pasta de XML, assim sucessivamente, ento todo mundo consegue utilizar, o legal
quando que quando um acha um erro, corrige e disponibiliza para os outros, nesse caso a
reusabilidade boa, no caso do projeto Android, inicialmente no tinha reutilizao nenhuma,
era um terror, e hoje ns j estamos no segundo projeto que utiliza a mesma API, sendo que
existem mais trs projetos, que tem previso de utilizar a inrcia, ento at o final do ano teremos
cinco projetos, na mesma API, eu acho isso bem interessante porque, o primeiro projeto foi
muito lento, demorou um ano e um/dois ms, e segundo saiu em trs meses, tem um que est
entrando agora, est utilizando que j tem um ms est praticamente finalizado, ento, veja
muito importante que a gente tenha como mensurar, estou j estou alertando meu gerente, olha j
est podendo abaixar o prazo porque a gente investiu nisso, porque h um gosto de tempo, h um
gasto de dinheiro, prefiro chamar de investimento mas h um gasto e um desgaste porque a
equipe no quer usar, ento a gente precisa ter algum que compre a idia, e fale no, eu assumo
a responsabilidade, disso dar certo ou errado, hoje em dia isso no muito fcil de encontrar,
mas acho que papel tambm do arquiteto, se der certo tudo bem, se no der certo amm, faz
parte, mas acho que a empresa no v muito bem dessa forma no.
P:Qual o Framework voc utiliza como mais freqncia, e por qu?
R:Bom, quando eu trabalhava para a interprise, ou seja, desenvolvendo aplicaes da empresa,
eu ultiliza muito o Spring, eu usava o Spring porque o J2EE, o antigo, no era muito bom dava
muito trabalho, e ningum merece aquilo,precisava de um servidor de aplicao e assim
sucessivamente, e eu queria s um Tomcat e o Spring tinha uma srie de recursos muito bons,
como gesto independentes, tratamento de transao, desacoplamento total do cdigo, forava
voc a trabalhar com boas prticas, e s no fazia chover ali dentro, mas tudo bem, mas o Spring
era principal para a parte de negocio, e o Hibernate, no gostava muito sou da velha guarda, para
projetos mdios bom framework de persistncia, e para interface, muito Java Script basicamente
isso, agora no Android no tem muito para onde correr, tem a infra-instrutora do Android que
voc obrigado a utilizar, o que ns fizemos no um Framework , uma API, forma de acessar
os recursos s, no Android tem um problema, voc trabalha muito com cursor de banco de

dados, se voc nunca trabalhou com banco de dados, vai fazer cada query linda, ento o
tratamento de transao meu Deus, entao o que ns fizemos transformou todo que era banco
em objeto, mas veja eu no estou persistindo objeto, como o Hibernate faz, eu engano mas eu
no persisto ele, eu realmente trabalho com o banco de dados, mas o programador s v o
objetos, ento os objetos voc no precisa criar esto todos prontos, a nica coisa que voc faz
conhecer os objetos, e conhecer as funes e os restante, ele no faz tudo mas ajuda bastante.
P:Voc j pegou alguma resistncia para utilizao da reusabilidade?
R:(Riso)Sim claro, estagirio um bicho muito bom, precisa ser educado, ainda bem que quando
voc chega em um nvel e voc manda, no nivel que voc manda a resistencia menor, mas
ainda existe, mas agora falando serio. um problema grave que ns temos, a reusabilidade
bonita na teoria, na pratica exige mudana de comportamento da pessoa, antigamente a pessoas
eram muito mais curiosa do que so hoje, porque no tinha nada pronto, hoje em dia tem um
bilho de Framework de tudo quanto tipo para achar no mercado, ento para qu eu vou
fazer?,ento ai j comea o problema de reusabilidade, eu quero um framework, s que as vezes
voc no precisa de um canho para matar uma formiga as vezes um pequeno cdigo ou um
pequeno conjunto de classes resolve todo seu problema, no questo de querer reinventar a
roda, saber em que momento voc deve reutilizar uma coisa que voc j usou fez para outros,
ou reutilizar um cdigo que seu, mas o programador adora fazer seu prprio cdigo porque o
cdigo dele sempre o melhor que existe, ento que eu falo olhe use isso aqui, o principal
problema o seguinte eu dou uma funo que j faz chover para pessoa, faz tudo que ele quer,
mas s que ele no l a documentao ele no pergunta programador no gosta de perguntar, h
porque eu no achei eu fiz a minha, ai comea a fazer duplicao de nome de cdigo, que
exatamente o que eu queria matar no inicio do processo, ento esse um tipo de resistncia,
outro tipo de resistncia chave o nvel de maturidade que voc quer para seu cdigo quando
voc vai comear a identificar os problemas que voc tem, e as solues genricas para ele voc
tem um tempo de maturao naquilo, est aprendendo as vezes a equipe zerou e chega todo
mundo novo voc tem que treinar aquilo, ento a gerencia quer para ontem, as vezes voc precisa
de um tempo para treinar aquele pessoal, etc, o que eu falei algum precisa comprar a idia e
voc tem que trabalhar com os dois lados, com aquele que no quer usar, e voc vai ter que
descobrir porque ele no quer usar porque as vezes o motivo de no querer usar um bom
motivo para mudar o cdigo, e a parte da gerencia que no quer que voc utilize porque quer
velocidade porque no verdade voc esta ganhando velocidade em um momento para perder no
final porque no vai estar testado, vai dar muito mais erros quando der erro voc no vai saber
onde ento uma via de duas mos voc perde mais tempo, digamos assim, no inicio do
projeto porque voc est estruturando bem o cdigo, e ganha no final, porque voc no vai ter
dez milhes de dores de cabea para corrigir bugs q no deveriam estar l, e ai aparece segundo
novo projeto que era as mesmas caractersticas daquele ou ento a verso 2.0, iai?
P:Quais so os obstculos para reusabilidade ser utilizada em larga escala na empresa, e no
mundo?

R:P no mundo brincadeira (riso) n?Mas tudo bem, na empresa, viso.No a critica, viso
mesmo, significa o qu, ter algum q se preocupe com aquilo e olhe para aquilo, hoje no tem
ningum olhando para isso cabe ao arquiteto ou programador mais experiente comprar a idia e
levar at o fim, e depois falar est vendo deu certo, e depois aparece para a gerencia, quando
aparece para a gerencia, as mil maravilhas porque ns fizemos isso porque ns fizemos aquilo,
quando na verdade do incio do projeto voc estava levando porrada para fazer um cdigo, que
voc sabia que era importante mas que ningum estava acreditando, aconteceu isso, eu estava
fazendo, tentando criar uma estrutura com uma outra pessoa que fosse genrico suficiente que,
em vrios projetos pudesse ser utilizado, porque eu sabia que aquilo seria necessrio mas dava
erro, obvio que dava erro, porque estava criando aquilo junto com o projeto, ningum queria usar
porque no prestava e ai a medida que o projeto foi evoluindo aquilo comeou a prestar, da o
pessoal comeou a ver que o trabalho era mais fcil, porque a nica coisa que eles precisava
fazer era, olha preciso de um mtodo que faa isso ou eu dizia no o mtodo tal j faz isso se
voc fizer dessa forma correto eu acrescento,mas eu ja tinha toda uma infra- estrutura montada
acrescentar mais um mtodo no era um bicho de sete cabeas, ento o que falta viso algum
que compre a idia, algum que fale olha, normalmente da diretoria, mas faa isso importante
ou ento faa com isso aqui vou gerar dez mil projetos ento o pessoal muito imediatista, eu
acho que brasileiro muito imediatista, por causa da poca da inflao ningum fazia poupana,
hoje ningum faz poupana tambm, quer resolver problema logo mas no pensa daqui h um
projeto, dois projetos, no vou botar tempo, vou botar projetos, daqui h um, dois projetos, como
que eu vou estar, eu acho q isso q est faltando.No mundo difcil , difcil porque? Existem
vrios tipos de mundo, por exemplo Europa uma realidade Estados Unidos uma realidade,
ndia e Rssia, meu deus do cu aquilo ali realidade completamente diferente, mas o que eu
vejo a ndia est correndo atrs disso, porque eu sei? Porque a maior partes dos componentes
visuais que ns vemos hoje na web so feitos por programadores indianos, ento se voc pegar
esses componentes e arrumar notar q so indianos ento eu vejo eles esto se preocupando pelo
menos na parte visual em criar componentes, e percebo muito que as grandes empresas como
oracon e microsoft se preocupam muito com a reusabilidade mas tambm eles vendem
ferramentas para isso, no Brasil eu vejo por exemplo o Serpro, o Serpro criou um framework
chamado Demoiselle que na verdade eu no considero bem um framework , um conjunto de
framework unidos que tem uma forma de trabalhar ali e tem uma IDE mais ou menos montada
no Eclipse que permite voc trabalhe com eles ao mesmo tempo e uma forma de trabalhar, tem
dado certo um projeto que o governo est forando as empresas que esto trabalhando com eles
a utilizar esse framework tem muita coisa de reuso ali, ento j uma outra iniciativa.Tem muito
framework nacional, Mentawai, eu lembro do Mentawai, um framework Demoiselle tambm
que nasceu aqui no Brasil, a idia era no utilizar XML na configurao, eu me lembro quando o
cara lanou no Java Bahia, olha eu quero fazer isso, o pessoal censurou, foi um sucesso, existem
muitas frentes interessantes, o mundo caminha para isso, porque programador bom
programador preguioso, esse negocio de reinventar a roda uma coisa muito antiga, ento vou
torcer que a gente continue nessa direo.

P:E no mercado soteropolitano?


R:No mercado soteropolitano, tirando Maker que h de padecer, digo que h um dia de ser um
sucesso, difcil.Eu no vou chamar Dot Net de reutilizao, no porque voc tem o IDE que
voc arrasta e solta componente, de reuso at porque no nosso, a gente trabalha com JSS,
muito com Dot Net, mas eu no vejo, tirando o Demoiselle, que o pessoal aqui do Serpro
trabalha forte, eu no vejo muitas empresas se esforando nisso, existe uma empresa chamada
Avacis, quando sa de l o pessoal estava montando uma estrutura lega, sei que a antiga
Unitech,CPM Braxis, tem o seu prprio tambm. bom, , mas limitante tambm ento tem
que saber ponderar, eu no vejo nada que chame muita ateno aqui no mercado.
P:Voc acha que a academia enfatiza reusabilidade da maneira que deve ser feita?
R:Claro que no, a academia mal fala de reusabilidade, a academia nem usa reusabilidade, bem,
na academia boa parte das coisas que a gente aprende para que a gente tenha uma noo
daquilo, no mercado de trabalho muito diferente, no uma critica a academia, impossvel na
academia ensinar a gente a trabalhar, o mercado mutante, quando eu entrei na academia, na
minha poca da faculdade estava morrendo o desktop, para nascer a web, hoje est morrendo a
web para nascer dispositivos mveis, ento assim gente, no tanto tempo assim no passou
tanto tempo, uma dcada, uma coisa mudou completamente mudou tudo, est indo para Cloud
Computing, como que a academia vai ensinar Cloud?Me diga?Tudo no servidor, tudo em
algum lugar que voc no sabe, o mximo que ela pode fazer sistemas distribudos porque est
todo distribudo, voc no sabe onde est o importante que voc saiba onde perguntar, e
algum vai lhe responder, ento voc aprende o conceito de sistemas distribudos, para
engenharia de software talvez, engenharia de software, acho q a academia pode ajudar bastante,
porque no tanta coisa assim, no aparece milhares de tecnologias o tempo todo, tem a CMMI,
MPS.BR, BIOS, White paper, para gesto de infra-estrutura, mas para reusabilidade o mximo
que pode fazer, Quais so os tipos de reusabilidade?Existem mtodos?Existem mtricas?,
legal bom aprender, na prtica voc no vai usar isso, porque o mercado brasileiro engatinha a
gente no tem ainda maturidade suficiente.Quantas empresas CMMI voc j ouviu falar que o
Brasil tem nvel 5?A CPM Braxis reza a lenda, , mas aonde?Porque voc pode tirar uma rea,
no a empresa inteira. Na ndia tem uma cacetada, na
Rssia tem, nos Estados Unidos tem ento poxa, a gente est engatinhando. Mas isso problema
nosso?Claro que problema nosso, sabe o que isso, falta de viso, quantas empresas esto
preocupadas com a qualidade do cdigo que esto entregando?Nenhuma, porque o prazo
arrojado voc tem profissionais que ganham muito mal, porque o mercado de Salvador no
parmetro para nenhum lugar do pas, e eu espero que a gente um dia melhore isso, mas triste
porque um profissional altamente capacitado, ningum faz faculdade de informtica porque
no gosta, porque so umas das faculdades que mais tem evaso, voc v que as faculdades de
salvador todas esto com uma quantidade de alunos muito baixa, exceto as duas pblicas que no
contam, mas curso da Catlica abre, mas ningum se cadastra, Unifacs pouqussimas pessoas,
Rui Barbosa ainda est um pouquinho, isso porque tenho amigos que me falam isso, FTC mal as
pernas. Porque est assim?Paga pouco estuda muito, voc vai passar o resto da sua vida

estudando, uma faculdade difcil, a quantidade de matria de clculo que a gente tem de fsica a
depender da faculdade, coisa de maluco, e outra coisa voc vai ser taxado como nerd, resolver
todos os problemas da tua famlia de computador, ento uma profisso dura, trabalha muito,
ganha pouco e no reconhecido. Dai voc pergunta e a reusabilidade do cdigo?(risos)Precisa
de gente com viso, e nosso mercado no tem.
P:
Quais desses conceitos vc utiliza com freqncia, padres de projeto, desenvolvimento
baseado em componentes, framework de aplicao, interface com sistemas de legados,
sistemas orientados a servios, linha de produto de aplicao, integrao de cots(sistemas
gerais), aplicaes verticais configurveis, biblioteca de programas, gerador de programas,
desenvolvimento e software orientado a aspectos, linguagem de scripts e outros?
R:
Padres de projeto, todos os dias da minha vida e acho que aqui necessrio, e um assunto que
deveria fazer parte, uma matria na faculdade s sobre isso,e veja, existe milhes de padres de
projeto,no s GoF o J2EE trouxe vrios, h mas agora j JEE, mas muitos ficaram e alguns
ficaram mas mudaram de nome, a idia a mesma quando voc aprender um padro, so coisas
assim que eu acredito, tem padro de projeto de SOA para SOA, acerta servios, milhares de
coisas, deveria ter uma matria na faculdade s para isso porque o dia-a-dia do programador,
ontem mesmo estava atendendo uma pessoa que estava com um problema de projeto, ele foi
falando o problema, j tinha nascido na minha cabea um padro de projeto para ele, olha isso a
o padro de projeto mais ridculo que existe que Factory Method, ningum faz isso mais,
parecia uma outra forma que no GoF, mas na minha opinio melhor, porque tem isso padro
de projeto nasceu numa poca, os do GoF, que eles precisavam fazer daquela forma, hoje tem
framework, as linguagens, muitas implementam padres internos, voc precisa saber, e se ele
tivesse visto s aquele padro de projeto, ele j teria resolvido o problema que ele passou dois
dias para encontrar a soluo, ento assim um Factory Method, ridculo,ento complicado.
Desenvolvimento baseado em componentes, empresa no sempre, eu muito porque sou arquiteto
minhas responsabilidade, ento sim. Framework de aplicao, todos os dias, no trabalho mais
sem framework, at quando no tem eu fao, mas necessrio. Interface com sistemas de
legados, claro, no momento para Android no, porque est nascendo agora, mas eu j trabalhei
em outros projetos, sistemas legados um filho que voc tem que criar at a maturidade.
Sistemas orientados ao servios, nunca trabalhei, na ps eu vi mas no conheo quem trabalhe
com isso a no ser o pessoal da CPM Braxis. Integrao de COTS no. Aplicaes verticais
configurveis tambm no. Biblioteca de programa, claro. Gerador de Programas, sim, mas no
total, no usa MDA, a gente gera parte do programa para facilitar a nossa vida, s algumas
classe, algumas coisas que a gente j tem no padro e a gente manda gerar, mas no MDA.
Aspectos a gente usou em alguns projetos mas em Android no uma boa prtica por motivos de
restrio de memria e outra coisa, o Android j faz uma segunda compilao, ele compila para
.class e depois ele compila de novo para .dex, ento se eu gerar um aspecto eu terei um
intermedirio, e mais um intermedirio, ento o cdigo final no vale a pena. Linguagem de
Script, a gente usa JSP. Outros ns usamos a carnia do Ruby on Rails, eu no gosto, mas eu

uso, eu precisei aprender; PHP a que vai para o cu, eu adoro, e tem gente que usa Python, tem
algumas pessoas aqui que usam Python, mas basicamente JSP. J mexemos com
Lua;trabalhamos com Lua para desenvolvimento para POS, para ponto de venda, leitor de carto
de crdito e ali o software que roda embarcado em alguns clientes, como Veriphone, feito em
Lua. uma linguagem excelente por sinal.
P:Quais conceitos de arquitetura voc mais utiliza e qualquer analista deveria saber?
R:Conceitos de arquitetura, agora voc me matou. Se for os conceitos que falamos aqui: Padres
de Projeto(ningum arquiteto sem saber padres de projeto). Existe algumas coisas que a gente
precisa saber: levantamento de requisitos. Tem que saber levantar requisitos. Parece fcil, no!
No fcil. Ah qualquer um consegue, no, ningum consegue fazer direito. Nem o cara mais
experiente. Porque? por que requisito depende de uma coisa inconstante chamada cliente.Ento o
mximo que a gente faz reduzir o grau de risco que seu projeto possui.Quanto mais experiente
o programador for, mais prximo do cliente. Ento, saber levantar requisitos fundamental.
Dialogar com o cliente fundamental. Eu acho que esse dilogo marca o arquiteto. Pois mesmo
que ele no converse direto com o cliente, ele vai conversar com algum que tenha os requisitos.
Ento preciso saber o que precisa ser feito. Padres de Projeto depois. UML hoje para quem
trabalha orientado a objeto fundamental. E quando falo UML no fazer casinho de uso, pq
diagrama de caso de uso no nada. Eu sei que tem gente vai me dizer; mas o que serve mesmo
a descrio do caso de uso que um saco de fazer, mas importante. Diagrama de sequncia
para quem faz componente fundamental;no dia a dia, algumas coisas so importantes.
Diagrama de atividade bom para mostrar para o cliente. Estado em alguns momentos. Classes
no precisa dizer que fundamental. Algumas polticas de qualidade de cdigo seria muito bom
saber, mas a depende da linguagem de programao. Ento, claro que uma ferramenta que
analisa o cdigo muito interessante: JUnit para testes unitrios de maneira geral. Pode ser com
Mock, pode ser com JUnit.
P:Voc trabalha com muita refatorao aqui?
R: Muito, oxe!! Com certeza.A gente trabalha com o mtodo interativo incremental, ento para
cada interao a gente refatora cdigo. Voc vai me perguntar, que ferramenta a gente usa.
Eclipse, graa a deus! Mas com alguns plugins do Android. A gente nem usa o ADT puro, a
gente usa o MotoDev. Plugin da Motorola que acrescenta algumas coisas a mais. Ajuda muitas
coisas nas nossas vidas. Mas refatorao, normal, normal.
P:Na sua experincia que caso de reusabilidade voc quer enfatizar? Um que marcou
mesmo a sua vida.
R: Olha, o que t mais latente assim na minha mente esse ltimo caso dessa API.O que
aconteceu? A verdade foi que a gente tinha um grande desafio pela frente.A gente comeou a
desenvolver um projeto. O projeto comeou a evoluir; o cdigo-fonte impraticvel, por que? Por
que o cliente mudava toda hora. O nvel de refactoring chegou ao extremo. Eu no conseguia
mais mudar sem quebrar tudo e a tomei a deciso junto com uma equipe de criar um
componente para resolver aquele problema que ningum aguentava mais. O Android uma
pssima diviso de camadas. Todo mundo que fazer tudo em uma camada s. Por performance,

bl bl, por que um celular, no tem tantos recursos de memria. A eu tive que comprar uma
briga: Vai fazer!, Vai ter trs camadas!, tudo do jeito...Ah mais a quantidade de classes,
Dane-se, Vai fazer e acabou!. Foi uma briga durante trs meses.Ningum querendo usar e eu
forando a barra.O que aconteceu? Depois de tres meses, chegamos a maturidade daquele
cdigo. E depois de trs meses todo mundo sabia onde ocorria a zorra daquele erro.Pronto, a
partir da todo mundo comprou a minha idia. E hoje a gente desenvolve
muito mais, no pouco no . Por que para mim, 40% mais rpido muito tempo. uma
diferena absurda. E mais ou menos 40% . Por que? por que t tudo pronto. Ah, o cliente agora
quer que meixa nas funcionalidades do evento. Ok, tudo bem. s mexer nos
componentes.Agora olha s para isso. Agora s pedir que ele informa por voc. Vc diz: Olha,
eu quero entrar.Beleza.No foi um projeto, j o terceiro. Ento vale a pena, e isso ento muito
gratificante.
P:Qual uma experiencia ruim de reusabilidade?
S: Ah tem sim. Uma experiencia bastante ruim.Basicamente quando a gente trabalha com com
cdigo dos outros sempre d algum problema por que a gente no t acostumado. Quando eu
cheguei aqui o tinha um framework(API) . Que facilitar vai ajudar a vida da gente. O negcio
que chega em um ponto. As tecnologia s suas . No adianta ter nada se no evolui. As
tecnologias evoluem. Chega no ponto que quebrou . Ou seja, tava dando erro, no tinha mais
ningum para dar manuteno. E agora? Tem que restruturar tudo. Vai todo o trabalho de novo.
Isso muito ruim. Emto assim, no que a reusabilidade seja ruim. por que precisa evoluir
sempre. Acabei de pensar no ponto ruim.Quando voc cria a biblioteca. Ela serve para vc
resolver um conjunto Xs de problemas;No todos os problemas da humanidade.E as vezes
quando voc t utilizando, voc quer continuar aquilo. a voc no pode mais, como foi esse
caso.Ento voc deve ponder quando tem que reutilizar e quando no tem que reutilizar.Se no,
digamos, fica muito mais lento a performance. Pois aquilo muito genrio, mas na verdade voc
quer alguma coisa pequena.
P:Qual bom caso que no deve se usar reusabilidade de forma nenhuma?
R:Nesse exato momento eu no t pensando em nada.
P: Algum programa especfico ou especializado que voc precisou fazer reusabilidade nele.Um
caminho bem ruim.
R:Eu acho que sempre possvel utilizar reusabilidade. O problema de qu? e em que
momento?Eu no consigo ver nada que no precise.Um tipo de projeto ou de problema que no
precise trabalha de reusabilidade. Eu mesmo no consigo. Pode no ser em componente que voc
tem no momento. Mas talvez faa aquele projeto, que dali nasceu algo que pode ser
reutilizado.Como foi o caso do facebook, que fizeram uma coisa completamente separada que a
gente precisou: Hum, legal Como podemos criar um componente reutilizvel.? A faz.Ento,
eu no vejo nada que no possa reutilizar.
P: Teve algum caso que foi elaborado um cdigo especfico, otimizado. E que precisou
sofrer algum problema.;

R:Trabalha muito com sistemas interativos leva a gente a uma eterna refatorao.Chega em um
ponto vc
Que vai desenvlver para dispositivos moveis(tablet tambm) e que voc tem que escovar bit, ae
cai na quele caso. O que que eu fao? eu fao uma funo de acesso direto.Que vai resolver em
tempo de performance mas naum nenhum pouco fcil de entender como aquilo usa e utilizado.
Ento melhor fazer uma coisa mais genrica e que mais fcil de ser utilizada.Por que voc
tem que entender que algum coitado ir ler aquele cdigo no futuro e da manuteno. A cai no
dilema: reutiliza ou no reutiliza? Ento, complicado. J tive trauma: preciso aquele cdigo que
est impactando . E a? Antes tava funcionando o habitual. Vrias vezes j quebrou, vaarias
vezes. Por isso que os teste unitrios so fundamentais para quem trabalha com reuso.
P:Diga a um pattner que o seu preferido e por que?
R:Eu gosto de tantos. Tem que ser Gof(GAMMA, 2000). Bussiness Object. E o DAO. Por que
quem trabalha com um sistema de mais de uma camada provavelmente vai passa por esses dois.
Ele vai criar o seu Faade, pensando que Faade, de repente cai no BO. Milagre. Acontece uma
mgica, o Faade se tornar um BO. E o DAO, bem, no s para banco, mas para persistncia em
XML.E para serializao de objetos.Ele fantstico. Quem pensou nisso vai para o cu. E os
padres de projeto que acho que so gambiarra: Adapter. Adapter no uma coisa muito bonita
no. Apesar do pessoal do GoF tenha feito.Eu respeito. uma gabiarrazinha bonita. Arrumada. E
o Singleton. Singleton tambm no coisa legal. Se bem que multithread em java
difcil.Apesar de ter aprendido em java a instncia nica. Ento eu parei de dizer que no existia
Singleton multithread. Bussiness Delegate. Dispatch.Tem um monte. Os do GoF utilizamos no
dia-a-dia.
P:Poderia falar um pouco do seu currculo
R: Me formei pela UCSAL em bacharelado em Informtica,Ps-graduado pela FGV em
Administrao de Empresas, Ps-graduado pela Ruy Barbosa em Componentes Web, Mestrado
no SENAI em Modelagem Computacional.

Referncia
BOOCH, Grady. . Object-Oriented Analysis Ad Design With Applications. 2ed. .
Massachusett:Addison Wesley Longman Limited.1998.

BRAUDE, Eric J. . Projeto De Software: Da Programao Arquitetura: Uma Abordagem


Baseada Em Java . Porto Alegre, RS:Bookman, 2005.
BURLAMAQUI, A. M. F. N2N: Uma Plataforma Para Desenvolvimento De Sistemas
Colaborativos Distribudos.Natal, RN.2004
FOWLER, Martin. Refatorao:Aperfeioado O Projeto De Cdigo Existente. So
Paulo:Bookman.2004

FOWLER2 , Martin. Padres de Arquitetura de Aplicaes Corporativas. So Paulo:


Bookman.2006.
GAMMA, Erich; HELM, Richard; JOHNSON, Ralph;VLISSIDES, John..Padres De Projeto:
Solues Reutilizveis De Software Orientado A Objetos. So Paulo: Bookman. 2000
KERIEVSKY, Joshua. Refatorao Para Padres. So Paulo: Bookman.2008.
KNUTH, D.E.. The Art Of Programming: Fundamental Algorithms.Massachusett :AddsionWesley.1971
MCCONNELL, S. Code Complete: A Pratical Handbook Of Software Construction.
Redmond: Microsoft Press, 1993.
METSKER, S. J. Design Patterns Java Workbook. Massachusett:Addison-Wesley, 2002
QUINIA, Marcos A..Contribuio A Uma Metodologia Para Identificao E Especificao
De Padres Arquiteturais De Software.UTFPR:Rio Grande do Sul.Curitiba.2005.
SHALLOWAY, Alan; TROTT, Jame R.. Explicando Padres de Projeto: Uma nova
perspectiva em projeto orientado a objeto. So Paulo: Bookman. 2004.
SOMMERVILLE, Ian. .Engenharia de Software. 8 ed.Rio de Janeiro: A. Wesley, 2007.

Autores

Caio Costa (nextc3@gmail.com) graduando em Sistemas de Informao na Universidade do


Estado da Bahia(UNEB). Graduando em Anlise e Desenvolvimento de Sistemas no Instituto Federal de Educao, Cincia e
Tecnologia da Bahia(IFBA).Bolsista do Laboratrio de Realidade Aumentada, Jogos Digitais e TV Digital(LABRAGAMES).

George Dias (geocdias@gmail.com) graduando em Sistemas de Informao na Universidade


do Estado da Bahia, atua como voluntrio na Consult Jnior Empresa Junior de Informtica da UNEB.

Lauriza Santos (laurizass@gmail.com) graduando em Sistemas de Informao na


Universidade do Estado da Bahia, estagiria na Caixa Econmica Federal.
Barbara Aniele (barbara.aniele@gmail.com) graduando em Sistemas de Informao na Universidade do Estado da
Bahia.

Ayran Costa (ayranccruz@gmail.com) graduando em Sistemas de Informao na Universidade


do Estado da Bahia, bolsista do Ncleo de Arquitetura de Computadores e Sistemas Operacionais(Acso).
Daniele Guimares (danitgb@gmail.com) graduando em Anlise de Sistemas, trabalha na Zcr Informtica.

Você também pode gostar