Você está na página 1de 25

Engenharia De Software lução e o problema não fora documentado e às

vezes tão pouco compreendido em sua totalidade


Padrões De Objetos De Sistemas De Informa- impossibilitando o reaproveitamento das idéias e
ção soluções. Desta forma, problemas idênticos que
se repetem em outros contextos não são reco-
Em engenharia de software, um padrão de proje-
nhecidos como tal, consumindo tempo e recursos
to ou padrão de desenho (do inglês design pat-
em busca de soluções que em tese,já haviam
tern) é uma solução geral reutilizável para um
sido encontradas.
problema que ocorre com frequência dentro de
um determinado contexto no projeto de software. Uma coisa que os projetistas avançados sabem
Um padrão de projeto não é um projeto finalizado que não devem fazer é resolver cada problema a
que pode ser diretamente transformado em códi- partir de princípios elementares ou do zero. Ao
go fonte ou de máquina, ele é uma descrição ou invés disso, eles reutilizam soluções que funcio-
modelo (template) de como resolver um problema naram no passado, e os utilizam repetidamente
que pode ser usado em muitas situações diferen- em seus projetos. É como resolver um problema
tes. matemático até então inédito, ou pelo, menos
desconhecido a alguém.
Padrões são melhores práticas formalizadas que
o programador pode usar para resolver proble- Primeiro utiliza-se todos os conhecimentos e prin-
mas comuns quando projetar uma aplicação ou cípios matemáticos que se tem conhecimento e
sistema. Padrões de projeto orientados a obje- que venha a ser útil na solução, depois de algu-
to normalmente mostram relacionamentos e inte- mas tentativas e uso das teorias matemáticas,
rações entre classes ou objetos, sem especificar chega-se à solução e a partir daí tem-se um “al-
as classes ou objetos da aplicação final que estão goritmo” (estrutura) montado que pode ser utiliza-
envolvidas. Padrões que implicam orientação a do para resolver tantos problemas existirem e que
objetos ou estado mutável mais geral, não são sejam idênticos ao resolvido, e mesmo que não
tão aplicáveis em linguagens de programação seja, é possível reaproveitar as idéias e conclu-
funcional. sões do problema resolvido.

Atualmente não se concebe um processo de de- É por isso que os padrões de projetos, design
senvolvimento de software sério sem a utilização patterns, tem chamado a atenção e despertado o
da orientação a objetos, pois esta permite agregar interesse dos projetistas de software, por propor-
qualidades importantes aos sistemas desenvolvi- cionar elementos que conduzem ao reaproveita-
dos sob seus paradigmas, como a extensibilidade mento de soluções para projetos, e não apenas a
e a reusabilidade. reutilização de código.

Mas somente por estar utilizando-a, não é garan- Os padrões de projetos tornam mais fácil reutilizar
tia de se obter essas qualidades. Para criar as soluções e arquiteturas bem-sucedidas para
melhores soluções, é preciso seguir um processo construir softwares orientados a objetos de forma
detalhado para obter uma análise dos requisitos, flexível e fácil de manter. O uso de padrões de
funcionais ou não funcionais, e desenvolver um projeto pode reduzir a complexidade do processo
projeto que os satisfaça e que possibilite subme- de projetar software. Além disso, o software orien-
tê-los a teste, para constatar eventuais falhas, tado a objetos bem projetado possibilita aos pro-
além do mais se deseja que o projeto tenha uma jetistas reutilizar e empregar componentes pree-
arquitetura flexível para acomodar futuros pro- xistentes em sistemas futuros.
blemas e requisitos sem a necessidade da reali-
zação do re-projeto. Em software, os padrões de projeto não são clas-
ses nem objeto. Em vez disso, os projetistas
Analisando o cotidiano do desenvolvimento de usam esses padrões para construir conjuntos de
software é possível identificar que a procura por classes e objetos. Para utilizá-los de maneira
uma solução a um problema específico possui eficaz, os projetistas precisam se familiarizar com
características idênticas, senão igual a encontra- os padrões mais populares e eficazes utilizados
da em um projeto anteriormente desenvolvido, pela engenharia de software e conhecer o seu
mas que devido à deficiência do processo, a so- contexto e escopo.

1
A idéia de projetar soluções a partir de algo já ma e uma solução”. Sendo assim para entender a
conhecido e documentado, não é nova e tão pou- necessidade, existência, de um padrão é neces-
co teve origem na industria de software, apesar sário estudar suas partes: o problema, a solução
dela já demonstrar um interesse pelo tema. A e o contexto sobre o qual ele é aplicável.
idéia surgiu em 1977 quando Christopher Alexan-
der publicou um catálogo com mais de 250 pa- Dessa forma, resumidamente pode-se entender
drões para a arquitetura civil, que discutiam ques- como padrão de projeto, como a solução recor-
tões comuns da arquitetura, descrevendo em rente para um problema em um contexto, mesmo
detalhe o problema e as justificativas de sua solu- que em projetos e áreas distintas. Observe que
ção. os termos chaves dessa definição são: contexto,
problema e solução, o que torna obrigatório à
Christopher Alexander descobriu que diminuindo compreensão inequívoca de cada um. Um con-
o foco, ou seja, procurando estruturas que resol- texto diz respeito ao ambiente, e as circunstân-
vam problemas similares, ele pode discernir simi- cias dentro do qual algo existe. O problema é a
laridades entre projetos de alta qualidade. Ele questão indefinida, algo que precisa ser investi-
chamou essas similaridades de “padrões”. gado e solucionado. Normalmente, está atrelado
ao contexto em que ocorre. Finalmente, a solução
Algum tempo depois ele formaliza seu método de refere à resposta do problema que ajuda a soluci-
descrição dos padrões, defendendo que seu uso ona-lo.
não limitaria os arquitetos às soluções prescritas,
mas garantiria a presença de elementos funda- Entretanto, se tivermos uma solução para um
mentais, e a possibilidade de aperfeiçoa-la atra- problema em um certo contexto, ela não necessa-
vés das experiências adquiridas. Esse método riamente pode constituir um padrão, pois é ne-
chamou atenção da comunidade de software, cessário que ela tenha como característica a re-
fazendo que o tema ganhasse destaque nas con- gularidade, isto é, ela se constituirá como um
ferências sobre orientação a objetos. padrão se puder ser utilizada repetidamente.

Em 1995 Erich Gama, Richard Helm, Ralph John- Segundo Christopher Alexander, “cada padrão
son, John Vlissides, conhecidos como os quatro descreve um problema no nosso ambiente e o
amigos [Gang of Four - GoF], publicaram o livro núcleo da sua solução, de tal forma que você
sobre o título: “Design patterns – elements of possa usar esta solução mais de um milhão de
reusable object-oriented software, Addison Wes- vezes, sem nunca faze-lo da mesma maneira”.
ley Longman”, que ganhou uma versão na língua
portuguesa sobre o título de “Padrões de Projeto O grupo dos quatro amigos classificou os padrões
– Soluções reutilizáveis de software orientado a de projeto por dois critérios. O primeiro critério é
objetos. Bookman”. O livro é um catálogo que a finalidade - reflete o que um padrão faz. Os
descreve 23 padrões de projeto cada um forne- padrões podem ter finalidades de criação, com-
cendo uma solução para um problema de softwa- portamento e estrutural. Os padrões de criação
re, seu contexto, aplicação e suas eventuais con- descrevem as técnicas para instanciar objetos (ou
seqüências, dividindo-os em 3 categorias: pa- grupos de objetos), e possibilitam organizar clas-
drões de criação, estruturais, e de comportamen- ses e objetos em estrutura maiores, os de com-
to. portamento se caracterizam pela maneira pelas
quais classes ou objetos interagem e distribuem
Definindo Padrões de Projeto responsabilidades e os estruturais lidam com a
composição de classes ou objetos. O segundo
Definir o que é um padrão de projeto de maneira critério é o escopo - especifica se o padrão é apli-
clara e objetiva, tem sido o objetivo da comunida- cado à classe ou objeto.
de de software, desde a década de 80.O primeiro
a apresentar uma definição do que seria um pa- Características de um Padrão de Projeto
drão, foi o arquiteto de professor Christopher Ale-
xandre, no seu livro “A Times Way of Building” Embora um padrão seja a descrição de um pro-
(Oxford University Press, 1979), que é: “Cada blema, de uma solução genérica e sua justificati-
padrão é uma regra de três partes, que expressa va, isso não significa que qualquer solução co-
uma relação entre um certo contexto, um proble- nhecida para um problema possa constituir um

2
padrão, pois existem características obrigatórias Os padrões são um mapa, não uma estratégica.
que devem ser atendidas pelos padrões: Os catálogos geralmente apresentarão algum
código-fonte como uma estratégica de exemplo,
1. Devem possuir um nome, que descreva o portanto eles não devem ser considerados como
problema, as soluções e conseqüências. Um no- definitivos.
me permiti definir o vocabulário a ser utilizado
pelos projetistas e desenvolvedores em um nível Os padrões não ajudarão a determinar qual apli-
mais alto de abstração. cação você deve estar escrevendo apenas como
implementar melhor a aplicação assim que o con-
2. Todo padrão deve relatar de maneira clara junto de recursos e outras exigências forem de-
a qual (is) problema(s) ele deve ser aplicado, ou terminados. Os padrões ajudam com o que e
seja, quais são os problemas que quando inserido como, mas não com por que ou quando.
em um determinado contexto o padrão consegui-
rá resolve-lo. Alguns podendo exigir pré- O conceito de utilizar os padrões de forma indis-
condições. criminada é conhecido como anti padrões (anti
patterns). De acordo com Andrew Koenig, se um
3. Solução descreve os elementos que com- padrão representa a “melhor prática”, então um
põem o projeto, seus relacionamentos, responsa- anti padrão representa uma “lição aprendida”.
bilidades e colaborações. Um padrão deve ser
uma solução concreta, ele deve ser exprimido em Existem duas noções de anti padrões:
forma de gabarito (algoritmo) que, no entanto
pode ser aplicado de maneiras diferentes. 1. Aqueles que descrevem uma solução ruim
para um problema que resultou em uma situação
4. Todo padrão deve relatar quais são as ruim;
suas conseqüências para que possa ser analisa-
da a solução alternativa de projetos e para a 2. Aqueles que descrevem como se livrar de
compreensão dos benefícios da aplicação do uma situação ruim e como proceder dessa situa-
projeto. ção para uma situação boa.

Não pode ser considerado um padrão de projeto Em suma um anti padrão constitui ao uso indevi-
trecho de códigos específicos, mesmo que para o do dos padrões de projeto, ou o seu uso exage-
seu criador ele reflita um padrão, que soluciona rado, o que pode ser constatado pela utilização
um determinado problema, porque os padrões de padrões impróprios para um determinado con-
devem estar a um nível maior de abstração e não texto, ou uso inadequado. A utilização dos pa-
limitado a recursos de programação. Um padrão drões proporciona um aumento na flexibilidade do
de projeto nomeia, abstrai e identifica os aspectos sistema, entretanto pode deixá-lo mais complexo
chaves de uma estrutura de projeto comum para ou degradar a desempenho. Algumas perdas são
torna-la útil para a criação de um projeto orienta- toleráveis, mas subestimar os efeitos colaterais
do a objetos reutilizável. da adoção dos patterns é um erro comum, princi-
palmente daqueles que tomam o uso como um
A Importância dos Padrões de Projeto diferencial e não pela real necessidade.

O mais importante sobre os padrões é que eles Como Padrões de Projeto Solucionam Pro-
são soluções aprovadas. Cada catálogo inclui blemas de Projeto
apenas padrões que foram considerados úteis por
diversos desenvolvedores em vários projetos. Os O alvo principal do uso dos padrões de projeto no
padrões catalogados também são bem definidos; desenvolvimento de software é o da orientação a
os autores descrevem cada padrão com muito objetos. Como os objetos são os elementos cha-
cuidado e em seu próprio contexto, portanto será ves em projetos OO, a parte mais difícil do projeto
fácil aplicar o padrão em suas próprias circuns- é a decomposição de um sistema em objetos. A
tâncias. Eles também formam um vocabulário tarefa é difícil porque muitos fatores entram em
comum entre os desenvolvedores. jogo: encapsulamento, granularidade, dependên-
cia, flexibilidade, desempenho, evolução, reutili-
Quando os Padrões não o Ajudarão zação e assim por diante. Todos influenciam a

3
decomposição, freqüentemente de formas confli- Depois de ter sido feita a escolha do(s) padrão
tantes. (ões) a ser (em) utilizado(s) no projeto é necessá-
ria conhecer como utilizá-lo(s). Uma abordagem
Muito dos objetos participantes provêm do méto- recomendada pela gangue dos quatros amigos
do de análise. Porém, projetos orientados a obje- para aplicar um padrão a um projeto é:
tos acabam sendo compostos por objetos que
não possui uma contrapartida no mundo real. 1. Ler o padrão por completo uma vez, para
obter sua visão geral. Conhecer o padrão princi-
As abstrações que surgem durante um projeto palmente a sua aplicabilidade e conseqüências
são as chaves para torna-lo flexível. Os padrões são importantes para que ele realmente solucione
de projeto ajudam a identificar abstrações menos o seu problema;
óbvias bem como os objetos que podem capturá-
las. Por exemplo, objetos que representam pro- 2. Estudar seções Estrutura, Participantes e
cesso ou algoritmo não ocorrem na natureza, no Colaborações. Assegurando-se de que compre-
entanto, eles são uma parte crucial de projetos endeu as classes e objetos no padrão e como se
flexíveis. Esses objetos são raramente encontra- relacionam entre si;
dos durante a análise ou mesmo durante os está-
gios iniciais de um projeto; eles são descobertos 3. Escolher os nomes para os participantes do
mais tarde, durante o processo de tornar um pro- padrão que tenham sentido no contexto da apli-
jeto mais flexível e reutilizável. cação;

Como Selecionar um Padrão de Projeto 4. Definir as classes. Declarar as interfaces,


estabelecer os seus relacionamentos de herança
Escolher dentre os padrões existentes aquele que e definir as variáveis de instância que represen-
melhor soluciona um problema do projeto, sem tam dados e referências a objetos. Identifique as
cometer o erro de escolher de forma errônea e classes existentes na aplicação que serão afeta-
torná-lo inviável, é uma das tarefas mais difíceis. das pelo padrão e modifique-as;
Em suma, a escolha de um padrão de projeto a
ser utilizado, pode ser baseada nos seguintes 5. Defina os nomes específicos da aplicação
critérios: para as operações no padrão. Os nomes em ge-
ral dependem da aplicação. Use as responsabili-
1. Considerar como os padrões de projeto dades e colaborações associadas com cada ope-
solucionam problemas de projeto. ração como guia;

2. Examinar qual a intenção do padrão, ou 6. Implemente as operações para suportar as


seja, o que faz de fato o padrão de projeto, quais responsabilidades e colaborações presentes do
seus princípios e que tópico ou problema particu- padrão. A seção de Implementação oferece su-
lar de projeto ele trata (soluciona). gestões para guiá-lo na implementação.

3. Estudar como os padrões se relacionam. Essas são apenas diretrizes que podem ser utili-
zadas até que seja obtido experiência e conheci-
4. Estudar as semelhanças existentes entre mento necessário para desenvolver uma maneira
os padrões. de trabalho particular com os padrões de projeto.
Os padrões de projeto não devem ser aplicados
5. Examinar uma causa de reformulação de
indiscriminadamente. Freqüentemente eles obtêm
projeto.
flexibilidade e variabilidade pela introdução de
6. Considerar o que deveria ser variável no níveis adicionais de endereçamento indireto, e
seu projeto, ou seja, ao invés de considerar o que isso pode complicar um projeto e/ou custar algo
pode forçar uma mudança em um projeto, consi- em termos de desempenho. Um padrão de proje-
derar o que você quer ser capaz de mudar sem to deverá apenas ser aplicado quando a flexibili-
reprojetá-lo. dade que ele oferece for realmente necessária.

Como Usar um Padrão de Projeto Principais Padrões de Projeto

4
Uma rápida leitura dos códigos da VCL (Visual Análise e Projeto Orientado a Objetos Com
Component Library) do Delphiä constata-se que UML
ela fora construído fazendo uso intensivo dos
padrões de projetos. O que é muito bom, pois A UML (Unified Modeling Language), que signifi-
constata o nível de excelência da ferramenta. Isto ca Linguagem Unificada de Modelagem é uma
devido ao Delphiä implementar completamente as linguagem padrão para modelagem orientada a
boas práticas da orientação a objetos – OOP, que objetos. Ela surgiu da fusão de três grandes mé-
auxiliam na implementação de projetos reutilizá- todos, do BOOCH, OMT (Rumbaugh) e OOSE
veis. (Jacobson). Esta linguagem de modelagem não
proprietária de terceira geração, não é um método
Padrões de Criação de desenvolvimento. Têm como papel auxiliar a
visualizar o desenho e a comunicação entre obje-
Os padrões de criação são aqueles que abstraem tos. Ela permite que desenvolvedores visualizem
e ou adiam o processo criação dos objetos. Eles os produtos de seu trabalho em diagramas pa-
ajudam a tornar um sistema independente de dronizados, e é muito usada para criar modelos
como seus objetos são criados, compostos e de sistemas de software.
representados. Um padrão de criação de classe
usa a herança para variar a classe que é instan- Além de fornecer a tecnologia necessária para
ciada, enquanto que um padrão de criação de apoiar a prática de engenharia de software orien-
objeto delegará a instanciação para outro objeto. tada a objetos, a UML poderá ser a linguagem de
modelagem padrão para modelar sistemas con-
Os padrões de criação tornam-se importantes à correntes e distribuídos. Utiliza-se de um conjunto
medida que os sistemas evoluem no sentido de de técnicas de notação gráfica para criar modelos
dependerem mais da composição de objetos do visuais de software de sistemas intensivos, com-
que a herança de classes. binando as melhores técnicas de modelagem de
dados, negócios, objetos e componentes. É uma
O desenvolvimento baseado na composição de
linguagem de modelagem única, comum e am-
objetos possibilita que os objetos sejam compos-
plamente utilizável.
tos sem a necessidade de expor o seu interior
como acontece na herança de classe, o que pos- Embora com a UML seja possível representar o
sibilita a definição do comportamento dinamica- software através de modelos orientados a obje-
mente e a ênfase desloca-se da codificação de tos, ela não demonstra que tipo de trabalho deve
maneira rígida de um conjunto fixo de comporta- ser feito, ou seja, não possui um processo que
mentos, para a definição de um conjunto menor define como o trabalho tem que ser desenvolvido.
de comportamentos que podem ser compostos O objetivo então é descrever "o que fazer", "como
em qualquer número para definir comportamentos fazer", "quando fazer" e "porque deve ser feito". É
mais complexos. necessária a elaboração completa de um dicioná-
rio de dados, para descrever todas as entidades
Há dois temas recorrentes nesses padrões. Pri-
envolvidas, refinando, com isso, os requisitos
meiro todos encapsulam conhecimento sobre
funcionais do software.
quais classes concretas são usadas pelo sistema.
Segundo ocultam o modo como essas classes A Linguagem Unificada de Modelagem possui
são criadas e montadas. Tudo que o sistema diagramas (representações gráficas do modelo
sabe no geral sobre os objetos é que suas clas- parcial de um sistema) que são usados em com-
ses são definidas por classes abstratas. Conse- binação, com a finalidade de obter todas as vi-
qüentemente, os padrões de criação dão muita sões e aspectos do sistema.
flexibilidade no que é criado, quem cria, como e
quando é criado. Os Diagramas da UML estão divididos em Estru-
turais e Comportamentais.
Eles permitem configurar um sistema com objetos
“produto” que variam amplamente em estrutura e Diagramas Estruturais
funcionalidade. A configuração pode ser estática
(isto é, especificada em tempo de compilação) ou  De Classe: Este diagrama é fundamental e
dinâmica (em tempo de execução). o mais utilizado na UML e serve de apoio aos

5
outros diagramas. O Diagrama de Classe mostra 4. De tempo: Descreve a mudança de estado
o conjunto de classes com seus atributos e méto- ou condição de uma instância de uma classe ou
dos e os relacionamentos entre classes. seu papel durante o tempo.

 De Objeto: O diagrama de objeto esta re-


lacionado com o diagrama de classes e, é prati-
camente um complemento dele. Fornece uma
visão dos valores armazenados pelos objetos de
um Diagrama de Classe em um determinado
momento da execução do processo do software.

 De Componentes: Está associado à lin-


guagem de programação e tem por finalidade
indicar os componentes do software e seus rela-
cionamentos.
Metodologias Ágeis De Desenvolvimento De
 De implantação: Determina as necessida- Sistemas
des de hardware e características físicas do Sis-
tema. As metodologias ágeis têm o objetivo de acelerar
o desenvolvimento do software visando à melho-
 De Pacotes: Representa os subsistemas ria contínua do processo, gerando benefícios
englobados de forma a determinar partes que o como o aumento da comunicação e interação da
compõem. equipe, organização diária para o alcance da
meta definida, evitar falhas na elaboração, res-
 De Estrutura: Descreve a estrutura interna
postas rápidas às mudanças e aumento significa-
de um classificador.
tivo da produtividade.
Diagramas Comportamentais
A expressão “Metodologias Ágeis” tornou-se co-
 De Caso de Uso (Use Case): Geral e in- nhecida em 2001, quando especialistas em pro-
formal para fases de levantamento e análise de cessos de desenvolvimento de software represen-
Requisitos do Sistema. tando entre outros, os métodos Scrum e Extreme
Programming (XP), foram estabelecidos princí-
 De Máquina de Estados: Procura acom- pios e características comuns destes métodos.
panhar as mudanças sofridas por um objeto den- Assim foi criada a “Aliança Ágil” e efetuou-se o
tro de um processo. estabelecimento do “Manifesto Ágil”.

 De Atividades: Descreve os passos a se- Scrum


rem percorridos para a conclusão de uma ativida-
Scrum é uma metodologia ágil para gestão e pla-
de.
nejamento de projetos de software.
 De Interação: Dividem-se em:
No Scrum, os projetos são divididos em ciclos
1. De Sequência: Descreve a ordem temporal (tipicamente mensais) chamados de Sprints. O
em que as mensagens são trocadas entre os Sprint representa um Time Box dentro do qual um
objetos. conjunto de atividades deve ser executado. Meto-
dologias ágeis de desenvolvimento de software
2. Geral interação: Variação dos diagramas são iterativas, ou seja, o trabalho é dividido em
de atividades que fornece visão geral dentro do iterações, que são chamadas de Sprints no caso
sistema ou processo do negócio. do Scrum.

3. De comunicação: Associado ao diagrama As funcionalidades a serem implementadas em


de Seqüência, complementando-o e concentran- um projeto são mantidas em uma lista que é co-
do-se em como os objetos estão vinculados. nhecida como Product Backlog. No início de cada
Sprint, faz-se um Sprint Planning Meeting, ou

6
seja, uma reunião de planejamento na qual o da XP garantem um agradável ambiente de de-
Product Owner prioriza os itens do Product Bac- senvolvimento de software para os seus seguido-
klog e a equipe seleciona as atividades que ela res, que são conduzidos por quatro princípios
será capaz de implementar durante o Sprint que básicos:
se inicia. As tarefas alocadas em um Sprint são
transferidas do Product Backlog para o Sprint A – Princípio da Comunicação - busca manter o
Backlog. melhor relacionamento possível entre clientes e
desenvolvedores, preferindo conversas pessoais
A cada dia de uma Sprint, a equipe faz uma breve a outros meios de comunicação.
reunião (normalmente de manhã), chamada Daily
Scrum. O objetivo é disseminar conhecimento B – Princípio da Simplicidade - entende-se co-
sobre o que foi feito no dia anterior, identificar mo simplicidade, a busca do objetivo de imple-
impedimentos e priorizar o trabalho do dia que se mentar o software com o menor número possível
inicia. de classes e métodos. Outra idéia importante
deste princípio é procurar implementar apenas
Ao final de um Sprint, a equipe apresenta as fun- requisitos atuais, evitando assim adicionar funcio-
cionalidades implementadas em uma Sprint Revi- nalidades que podem ser importantes apenas no
ew Meeting. Finalmente, faz-se uma Sprint Re- futuro. A aposta da XP é que é melhor fazer algo
trospective e a equipe parte para o planejamento simples hoje do que implementar algo complicado
do próximo Sprint. Assim reinicia-se o ciclo. Veja hoje que talvez não venha a ser usado.
a ilustração abaixo:
C – Princípio do Feedback - A prática do feed-
back constante significa que o desenvolvedor terá
informações constantes do código e do cliente. A
informação do código é dada pelos testes cons-
tantes, que indicam os erros tanto individuais
quanto do software integrado.

D – Princípio da Coragem - Sabe-se que não


são todas as pessoas que possuem facilidade de
comunicação e têm bom relacionamento inter-
pessoal, este princípio também dá suporte à sim-
plicidade, pois assim que a oportunidade de sim-
Extreme Programming (XP) plificar o software é percebida, a equipe pode
experimentar e buscar novas soluções, além dis-
A Extreme Programming (XP) é uma Metodologia so, é preciso coragem para obter e cobrar cons-
Ágil para equipes pequenas e médias que desen- tantemente um feedback do cliente.
volvem software baseado em requisitos vagos e
Principais práticas da Extreme Programming
que se modificam rapidamente. Entre as princi-
(XP):
pais diferenças da XP em relação às Metodologi-
as Clássicas estão o feedback constante, a abor- A – Planejamento - Define o que é ou não ne-
dagem incremental e o encorajamento da comu-
cessário ser feito no projeto. A XP baseia-se em
nicação entre as pessoas.
requisitos atuais para desenvolvimento de softwa-
re, não em requisitos futuros.
A maioria das regras da XP causa surpresa no
primeiro contato e muitas não fazem sentido se B - Entregas Freqüentes - Baseiam-se no de-
aplicadas isoladamente. É a força de seu conjun-
senvolvimento de um software simples, e confor-
to que sustenta o sucesso da XP, trazendo uma
me os requisitos aparecem, há a atualização da
verdadeira revolução no desenvolvimento de sof- versão do software. Cada versão entregue deve
tware.
ter o menor tamanho possível, contendo os requi-
O principal objetivo da XP é dar agilidade ao de- sitos de maior valor para o negócio. É recomen-
dado que as versões devem ser entregues a cada
senvolvimento do projeto e busca garantir a satis-
mês, ou no máximo a cada dois meses, aumen-
fação do cliente. As práticas, regras, e os valores

7
tando a possibilidade de feedback rápido do clien- dia, mantendo os programadores em sintonia,
te. além de possibilitar processos rápidos. Integrar
apenas um conjunto de modificações de cada vez
C - Metáfora - São as descrições de um software é uma prática que funciona bem porque fica óbvio
sem a utilização de termos técnicos com o objeti- quem deve fazer as correções quando os testes
vo de guiar o desenvolvimento do software com a falham. Esta prática é facilitada com o uso de
maior transparência possível para o cliente. apenas uma máquina de integração, que deve ter
livre acesso a todos os membros da equipe.
D - Projeto simples - O software desenvolvido de
acordo com a metodologia XP deve ser o mais J - 40 horas de trabalho semanal - a XP assu-
simples possível e satisfazer os requisitos atuais, me que não se deve fazer horas extras constan-
sem a preocupação de requisitos futuros. Eventu- temente. Caso seja necessário trabalhar mais de
ais requisitos futuros devem ser adicionados as- 40 horas pela segunda semana consecutiva, exis-
sim que eles realmente existirem. te um problema sério no projeto que deve ser
resolvido não com aumento de horas trabalhadas,
E – Testes - A Extreme Programming (XP) priori-
mas com melhor planejamento.
za a validação do projeto durante todo o processo
de desenvolvimento. Os desenvolvedores imple- K - Cliente presente - É fundamental a participa-
mentam o software criando primeiramente os ção do cliente durante todo o desenvolvimento do
testes. projeto. O cliente deve estar sempre disponível
para sanar todas as dúvidas de requisitos, evitan-
F - Programação em pares - A implementação
do atrasos e até mesmo construções erradas.
do código é feita em dupla, ou seja, dois desen-
Uma idéia interessante é manter o cliente como
volvedores trabalham em um único computador.
parte integrante da equipe de desenvolvimento
Procurando identificar erros sintáticos e semânti-
(Tester).
cos, pensando estrategicamente em como melho-
rar o código que está sendo implementado. Esses L - Código padrão - Baseia-se na padronização
papéis podem e devem ser alterados sempre que da arquitetura do código, para que este possa ser
possível. compartilhado entre todos os programadores e
até mesmo entre outros softwares.
G – Refatoração - Focaliza a lapidação do proje-
to do software e está presente em todas as eta- Desenvolvimento Ágil De Software
pas do desenvolvimento. A refatoração deve ser
feita sempre que possível, buscando principal- No conceito tradicional, metodologia de desenvol-
mente simplificar o código atual sem perder ne- vimento de software é um conjunto de atividades
nhuma funcionalidade. e resultados associados, que auxiliam na produ-
ção de software. Todas as metodologias de de-
H - Propriedade coletiva - O código do projeto senvolvimento tentam, entre outras coisas, redu-
pertence a todos os membros da equipe. Isto zir o alto risco associado ao desenvolvimento de
significa que qualquer pessoa que percebe que software.
pode adicionar valor a um código, mesmo que ele
próprio não o tenha desenvolvido, pode fazê-lo, O desenvolvimento ágil é um fruto da constatação
desde que faça os testes necessários e não pre- feita, de forma independente, por diversos profis-
judique as funcionalidades atuais. Isto é possível sionais renomados na área de engenharia de
porque na XP todos são responsáveis pelo sof- software, de que, apesar de terem aprendido
tware. Uma grande vantagem desta prática é que, segundo a cartilha tradicional, só conseguiam
caso um membro da equipe deixe o projeto antes minimizar os riscos associados ao desenvolvi-
do fim, a equipe consegue continuar o projeto mento de software, pensando e agindo de forma
sem grandes dificuldades, pois todos conhecem muito diferente do que tradicionalmente está nos
todas as partes do software, mesmo que não seja livros.
de forma detalhada.
Estes profissionais, a maioria veteranos consulto-
I - Integração contínua - É a prática de interagir res para projetos de softwares, decidiram reunir-
e construir o sistema de software várias vezes por

8
se no início de 2001 durante um workshop reali- Figura 1.5 - Desenvolvimento iterativo em espiral
zado em Snowbird, Utah, EUA.
DSDM
Embora cada envolvido tivesse suas próprias
práticas e teorias preferidas, todos concordavam Metodologia de Desenvolvimento de Sistemas
que, em suas experiências prévias, os projetos de Dinâmicos (Dynamic Systems Development Me-
sucesso tinham em comum um pequeno conjunto thod - DSDM) é uma metodologia de desenvolvi-
de princípios. mento de software originalmente baseada em
Desenvolvimento Rápido de Aplicação (RAD).
Com base nisso eles criaram o Manifesto para o DSDM é uma metodologia de desenvolvimento
Desenvolvimento Ágil de Software, freqüentemen- iterativo e incremental que enfatiza o envolvimen-
te chamado apenas de Manifesto Ágil. O termo to constante do usuário. Seu objetivo é entregar
Desenvolvimento Ágil identifica metodologias de softwares no tempo e com custo estimados atra-
desenvolvimento que adotam os princípios do vés do controle e ajuste de requisitos ao longo do
manifesto ágil. Estes princípios são os seguintes: desenvolvimento. DSDM é um dos modelos de
Metodologia Ágil de desenvolvimento de software.
· Indivíduos e interação entre eles mais que pro-
cessos e ferramentas O princípio fundamental por trás desta metodolo-
gia está no fato de, ao invés de fixar as funciona-
· Software em funcionamento mais que documen- lidades do produto, e somente depois ajustar o
tação abrangente tempo e os recursos, é melhor fixar o tempo e os
recursos, para depois ajustar o número de funcio-
· Colaboração com o cliente mais que negociação
nalidades adequadamente. Como uma extensão
de contratos
do RAD, o DSDM é aplicado em projetos de Sis-
· Responder a mudanças mais que seguir um temas caracterizados pelos cronogramas e custos
plano limitados. A ponta falhas de informação mais co-
muns destes projetos, incluindo custos exceden-
O manifesto reconhece o valor dos itens à direita, tes, perda de prazos, falta de envolvimento de
mas diz que devemos valorizar bem mais os itens usuários e acompanhamento da alta gerência.
à esquerda. Através do uso do RAD, contudo, sem os devidos
cuidados com o DSDM pode aumentar ainda
No desenvolvimento ágil, os projetos adotam o mais o risco em outros quesitos.
modelo iterativo e em espiral (figura 1.5). Neste
processo, todas as fases descritas no modelo em Princípios da DSDM
cascata são executadas diversas vezes ao longo
do projeto, produzindo ciclos curtos que se repe- A DSDM possui alguns princípios chaves, que
tem ao longo de todo o desenvolvimento, sendo delimitam as bases do desenvolvimento.
que, ao final de cada ciclo, sempre se tem um
• O ponto fundamental desta metodologia prende-
software funcional, testado e aprovado. Os ciclos
se com a entrega de um sistema que se aproxime
são chamados de iterações e crescem em núme-
das necessidades atuais de negócio;
ro de funcionalidades a cada repetição, sendo
que, no último ciclo, todas as funcionalidades • O desenvolvimento iterativo e incremental é
desejadas estarão implementadas, testadas e necessário para convergir com precisão às solu-
aprovadas [TELES, 2004]. ções do negócio;

• O time deve ter o poder para tomar decisões;

• O foco é na entrega freqüente de produtos;

• A entrega do projeto deve ser feita na data esti-


pulada, dentro do orçamento previsto e com boa
qualidade;

• O teste é integrado por todo o ciclo de vida;

9
• Uma abordagem colaborativa e cooperativa A primeira descrição oficial dos processos foi
entre as partes envolvidas é essencial; publicada no livro "Java Modeling in Color with
UML", por Peter Coad, Eric Lefebvre e Jeff De
Principais Técnicas Da DSDM Luca, em 1999.

Timeboxing: Técnica utilizada para realizar o de- O livro de referência é "A Practical Guide to Fea-
senvolvimento no tempo previsto, dentro do or- ture-Driven Development", por Stephen Palmer e
çamento e com a qualidade desejada ideia. Divi- John Mac Felsing, publicado em 2002 pela Pren-
dir o projeto em porções, cada uma com um or- tice-Hall, compondo uma série editada pelo pró-
çamento fixo e uma data de entrega estipulada prio Peter Coad.
MoSCoW: Técnica que prioriza os requisitos, FDD é, classicamente, descrita por cinco proces-
representa um método de definição de priorida- sos:
des nas tarefas efetuadas.
 Desenvolver um Modelo Abrangente:
M - deve ter isso. pode envolver desenvolvimento de requisitos,
análise orientada por objetos, modelagem lógica
S - devem ter este se possível.
de dados e outras técnicas para entendimento do
C - poderia ter esta se não realizar qualquer outra domínio de negócio em questão. O resultado é
coisa. um modelo de objetos (e/ou de dados) de alto
nível, que guiará a equipe durante os ciclos de
W - não terá esse tempo, mas gostaria no futuro. construção.

• Prototipagem: Técnica se refere à criação de  Construir uma Lista de Funcionalidades:


protótipos do sistema em desenvolvimento em um decomposição funcional do modelo do domínio,
estágio inicial do projeto. Ele permite a descober- em três camadas típicas: áreas de negócio, ativi-
ta precoce de deficiências do sistema e permite dades de negócio e passos automatizados da
que os futuros usuários de "test-drive" do sistema; atividade (funcionalidades). O resultado é uma
hierarquia de funcionalidades que representa o
•Workshop: Técnica que visa trazer os diferentes produto a ser construído (também chamado
atores do projeto para discutir requisitos, funcio- de product backlog, ou lista de espera do produ-
nalidades e compreensão mútua. Em uma oficina, to).
os participantes se reúnem e discutir o projeto;
 Planejar por Funcionalidade: abrange a
•Testes: Um dos objetivos da DSDM é a criação estimativa de complexidade e dependência das
de um SI com boa qualidade. Para obter esta funcionalidades, também levando em considera-
solução, a DSDM obriga a efetuar testes em to- ção a prioridade e valor para o negócio/cliente. O
das as iterações. Uma vez que a DSDM é uma resultado é um plano de desenvolvimento, com os
metodologia independente de ferramentas e téc- pacotes de trabalho na seqüência apropriada
nicas, a equipe do projeto é livre de escolher o para a construção.
seu próprio método de realização de testes.
 Detalhar por Funcionalidade: já dentro de
FDD
uma iteração de construção, a equipe detalha os
O Desenvolvimento Guiado por Funcionalidades requisitos e outros artefatos para a codificação de
(FDD) é uma metodologia ágil para gerenciamen- cada funcionalidade, incluindo os testes. O proje-
to e desenvolvimento de software nascida em to para as funcionalidades é inspecionado. O
1997 em Cingapura, a partir do Método Coad resultado é o modelo de domínio mais detalhado
desenvolvido por Peter Coad e das técnicas de e os esqueletos de código prontos para serem
gerenciamento de projetos de Jeff de Luca. preenchidos.

Seu lema é "Resultados frequentes, tangíveis e  Construir por Funcionalidade: cada es-
funcionais". queleto de código é preenchido, testado e inspe-
cionado. O resultado é um incremento do produto
integrado ao repositório principal de código, com

10
qualidade e potencial para ser usado pelo clien- por criar ou para guardar modelos. O modelo
te/usuário. criado deverá realmente servir para algum fim
específico.
Processo Unificado
 Usar modelos múltiplos: Existem diversos
Muitas vezes os engenheiros de software preci- modelos e notações que podemos utilizar para
sam desenvolver sistemas grandes e complexos. descrever o software, no entanto, apenas um
O escopo e a complexidade desses sistemas são subconjunto é realmente essencial para a maioria
modelados de forma para que todos os envolvi- dos projetos. A modelagem ágil sugere que sejam
dos no projeto entendam quais requisitos devem utilizados os modelos que realmente comuniquem
ser integrados, para que os problemas possam adequadamente para os usuários específicos.
ser melhores subdivididos entre as pessoas que Além disso, sugere-se que devemos usar diferen-
têm de solucioná-los e para que a qualidade pos- tes modelos para apresentar um aspecto diferen-
sa ser avaliada enquanto estamos projetando e te do sistema.
desenvolvendo o sistema.
 Viajar leve: Devemos apenas conservar
Muitas notações e métodos de modelos têm sur- aqueles modelos que terão valor em longo prazo,
gidos ao longo das últimas décadas. Esses méto- os demais devem ser descartados. Isso ocorre
dos e notações auxiliam tanto a análise quanto o porque efetuar manutenção em modelos é árduo,
projeto e muitas vezes geram implementações assim como qualquer outro artefato de software.
baseando-se nesses modelos. Apesar de eles Modelos são apenas mais um artefato para dar-
terem evoluído, ainda temos o problema de man- mos manutenção.
tê-los. A cada mudança devemos atualizar os
modelos e muitas vezes cuidando com o grau de  Conteúdo é mais importante do que repre-
formalismo que é imposto. sentação: A modelagem deve sempre transmitir
informação, seja para um cliente tentando enten-
Os métodos ágeis oferecem uma alternativa para
der alguma parte do sistema, seja o próprio en-
a modelagem de engenharia de software. Scott
genheiro de software tentando tirar informações
Ambler descreve o que ele chama de modelagem
do cliente ou uma equipe de desenvolvimento de
ágil da seguinte forma: "Modelagem ágil (AM)
software tentar entender ou repassar algo. Dessa
consiste em uma metodologia baseada na práti-
forma, um modelo sintaticamente perfeito que não
ca, voltada para a modelagem e documentação
transmite muito conteúdo não possui tanto valor
de sistemas com base em software. Simplifican-
quanto um modelo com notações falhas que for-
do, modelagem ágil consiste em um conjunto de
nece conteúdo valioso para seu público-alvo.
valores, princípios e práticas voltadas para a mo-
delagem do software que podem ser aplicados  Ter conhecimento e domínio dos modelos e
em um projeto de desenvolvimento de software ferramentas que serão utilizadas: Devemos com-
de forma leve e efetiva. Os modelos ágeis são preender os pontos fores e fracos de cada mode-
mais efetivos que os tradicionais pelo fato de lo e ferramenta usada para criá-lo. Isso dá mais
serem meramente bons, pois não têm a obriga- visibilidade e possibilidade de resolver problemas
ção de ser perfeitos". da melhor forma.

Todos os valores do manifesto ágil são consisten-  Adaptar localmente: Como sempre prega-
tes com o que é pregado na modelagem ágil. mos na agilidade, devemos adaptar a modelagem
Entre as principais características da modelagem às necessidades da nossa equipe. Um exemplo
ágil tem-se: disso é uma equipe que odiava mexer com as
ferramentas de modelagem. Dessa forma, adap-
 Modelar com um objetivo: O desenvolvedor
tamos a modelagem para ser realizada num qua-
sempre deverá ter um objetivo antes de criar um
dro, numa sala de reunião. A modelagem flui mui-
modelo como, por exemplo, comunicar informa-
to mais e a equipe pode se sentir mais animada.
ções ao cliente ou ajudar a compreender melhor
algum aspecto que não esteja tão claro. Podemos Processo Unificado Ágil (AUP)
notar que aqui a modelagem ágil foca em pen-
sarmos antes de criarmos modelos simplesmente

11
O Processo Unificado Ágil ou Agile Unified Pro- cam-se os produtos gerados nas atividades e
cess (AUP) adota uma filosofia serial (sequência indicam-se os papeis das pessoas envolvidas. As
linear de atividades) para o que é amplo e iterati- empresas normalmente definem seus próprios
vo para o que é particular. Este processo possui modelos de processos, juntando o que tem de
atividades nas fases clássicas adotadas pelo melhor nos diferentes modelos de processos exis-
Processo Unificado: Início, Elaboração, Constru- tentes. Outras empresas preferem adotar um
ção e Transição. Dentro de cada uma das ativi- modelo de processo que seja mais adequado ao
dades a equipe itera ou se repete para alcançar a seu contexto.
agilidade e entregar incrementos de software para
os usuários finais. É importante que essa entrega Orientação a Objetos
seja mais rápida quanto possível.
A Programação Orientada a Objetos conhecida
A AUP possui seis atividades, na qual a equipe como POO, é onde o desenvolvedor tem de co-
irá sempre iterar. As atividades são: meçar a pensar fora da caixa, a imaginar uma
forma aonde será preciso recorrer ao mundo real
 Modelagem: Modelos UML representando para o desenvolvimento das aplicações, pois hoje
o negócio são criados. Os modelos devem ser toda a programação em Java é orientada a obje-
suficientemente bons e adequados para perma- tos.
necer ágil.
Para obter esse entendimento, é necessário co-
 Implementação: Modelos são traduzidos nhecer alguns dos pilares da Orientação a Obje-
para o código-fonte. tos que são: Abstração, Encapsulamento, Heran-
ça e Polimorfismo. Neste artigo o pilar do Polimor-
 Teste: A equipe projeta e executa uma fismo não será visto.
série de teste a fim de descobrir possíveis erros e
para assegurar que o código-fonte se ajuste aos 1º Pilar - Abstração
requisitos.
É utilizada para a definição de entidades do mun-
 Aplicação: É a entrega de um incremento do real. Sendo onde são criadas as classes. Es-
de software e a aquisição de feedback dos usuá- sas entidades são consideradas tudo que é real,
rios finais com base neste incremento. tendo como consideração as suas características
e ações, veja na Figura 1 como funciona.
 Gerenciamento de Configuração e Geren-
ciamento de projeto: No contexto da AUP, geren-
ciamento de configuração refere-se ao gerencia-
mento de alterações, riscos e de controle de
qualquer artefato persistente que são produzidos
pela equipe. O gerenciamento de projeto controla
o progresso de uma equipe e coordena suas ati-
vidades.

 Gerenciamento de Ambiente: Coordena


toda a infraestrutura de processos incluindo pa-
drões, ferramenta e outras tecnologias de suporte
disponíveis para a equipe.

Como vimos nesse artigo, um processo de sof-


tware tem como característica um conjunto de
atividade que conduzem o desenvolvimento do
produto de software. Um processo tem como
característica a definição de quem realiza uma Figura 1: Abstrações do mundo real
atividade e quando fazê-la. Um Modelo de pro-
cesso é uma descrição simplificada de um pro- Encapsulamento
cesso onde se definem as atividades, especifi-

12
Os objetos como dito acima contém atributos e
métodos. O encapsulamento trata de dar alguma
segurança aos objetos. Explico:

Um objeto Cliente por exemplo tem atributos co-


mo qualquer outro e estes não podem ser aces-
sados por qualquer outro objeto diretamente.
Existem dois tipos de atributos, os privados e os
públicos. Em UML e OO (orientação a objetos) é
definido que para atributos privados usa-se o
sinal de “-” antes do nome e para atributos públi-
cos usa-se o sinal de “+” antes do nome.

Exemplo:

Herança

Herança:

Na Programação Orientada a Objetos o significa-


do de herança tem o mesmo significado para o
mundo real. Assim como um filho pode herdar
alguma característica do pai, na Orientação a
Objetos é permitido que uma classe herde atribu-
tos e métodos da outra, tendo apenas uma restri-
ção para a herança. Os modificadores de acessos
das classes, métodos e atributos só podem estar
com visibilidade public e protected para que se-
jam herdados.

Uma das grandes vantagens de usar o recurso da


Para que o encapsulamento exista é preciso dei- herança é na reutilização do código. Esse reapro-
xar os atributos privados e os métodos públicos, veitamento pode ser acionado quando se identifi-
assim está sendo garantido que os valores atribu- ca que o atributo ou método de uma classe será
ídos aos atributos serão sempre respeitados pe- igual para as outras. Para efetuar uma herança
las regras existentes. de uma classe é utilizada a palavra reservada
chamada extends.
Exemplo:

O atributo cpf deve sempre ter 11 números, se o


atributo não for privado, ele perde essa regra (11
números) pois alguém poderia acessar e colocar
12 ou 9 números tornando-o inválido.

Como os atributos privados não podem ser aces-


sados diretamente por outros objetos, existem os
métodos públicos que são os responsáveis em
acessar os atributos e trazer ou levar algum dado (Hierarquia das classes)
para o objeto respeitando as regras.
Para saber se estamos aplicando a herança cor-
Ideia de encapsulamento: retamente, realiza-se o teste “É UM”. Esse teste
simples ajuda a detectar se a subclasse pode
herdar a superclasse.

13
Por exemplo, na acima, está mostrando que a mecanismo de ligação tardia. A ligação tardia
classe “Gerente” herda da classe “Funcionário”, ocorre quando o método a ser invocado é definido
se for aplicado o teste “É UM” nota-se que o teste durante a execução do programa. Através do
é aprovado, pois o “Gerente” também “É UM” mecanismo de sobrecarga, dois métodos de uma
Funcionário. classe podem ter o mesmo nome, desde que
suas assinaturas sejam diferentes, entretanto isso
Polimorfismo é o princípio pelo qual duas ou mais não é polimorfismo.
classes derivadas de uma mesma superclasse
podem invocar métodos que têm a mesma identi- Como dito anteriormente, tal situação não gera
ficação, assinatura, mas comportamentos distin- conflito, pois o compilador é capaz de detectar
tos, especializados para cada classe derivada, qual método deve ser escolhido a partir da análi-
usando para tanto uma referência a um objeto do se dos tipos dos argumentos do método. Nesse
tipo da superclasse. O overload não é um tipo de caso, diz-se que ocorre a ligação prematura para
polimorfismo, pois com overload a assinatura do o método correto. Em Java, todas as determina-
método obrigatoriamente tem que ter argumentos ções de métodos a executar ocorrem através de
diferentes, requisito que fere o conceito de Poli- ligação tardia exceto em dois casos:
morfismo citado acima.
1. Métodos declarados como final não podem
De forma genérica, polimorfismo significa várias ser redefinidos e, portanto, não são passíveis de
formas. No caso da Orientação a Objetos, poli- invocação polimórfica da parte de seus descen-
morfismo denota uma situação na qual um objeto dentes; e
pode se comportar de maneiras diferentes ao
receber uma mensagem, dependendo do seu tipo 2. Métodos declarados como private são im-
de criação. plicitamente finais.

Por exemplo, a operação move quando aplicada No caso de polimorfismo, é necessário que os
a uma janela de um sistema de interfaces tem um métodos tenham exatamente a mesma identifica-
comportamento distinto do que quando aplicada a ção, sendo utilizado o mecanismo de redefinição
uma peça de um jogo de xadrez. Um método é de métodos, que é o mesmo que sobrescrita de
uma implementação específica de uma operação métodos em classes derivadas. A redefinição
para certa classe. ocorre quando um método cuja assinatura já te-
nha sido especificada recebe uma nova definição,
Polimorfismo ou seja, um novo corpo, em uma classe derivada.
É importante observar que, quando polimorfismo
Polimorfismo também implica que uma operação está sendo utilizado, o comportamento que será
de uma mesma classe pode ser implementada adotado por um método só será definido durante
por mais de um método. O usuário não precisa a execução. Embora em geral esse seja um me-
saber quantas implementações existem para uma canismo que facilite o desenvolvimento e a com-
operação, ou explicitar qual método deve ser preensão do código orientado a objetos, há algu-
utilizado: a linguagem de programação deve ser mas situações onde o resultado da execução
capaz de selecionar o método correto a partir do pode ser não-intuitivo.
nome da operação, classe do objeto e argumen-
tos para a operação. Reutilização de Componentes

Desta forma, novas classes podem ser adiciona- No contexto social, a imitação ou reutilização de
das sem necessidade de modificação de código idéias são vistas como falta de originalidade, po-
já existente, pois cada classe apenas define os rém em desenvolvimento de software isso pode
seus métodos e atributos. Em Java, o polimorfis- resultar em um aumento significativo na produtivi-
mo se manifesta apenas em chamadas de méto- dade e uma redução considerável no tempo de
dos. execução das tarefas.

A decisão sobre qual o método que deve ser se- As primeiras ideias sobre reutilização de software
lecionado, de acordo com o tipo da classe deriva- são do ano de 1968, quando Doug McIlroy mos-
da, é tomada em tempo de execução, através do trou a sua motivação por software que funcionas-

14
se como "Circuitos Integrados" (CI) e que estes desenvolvido anteriormente como: especifica-
pudessem ser fabricados em massa. Além disso, ções, módulos de um projeto, arquitetura e código
ele examinou os tipos de variabilidade necessá- fonte. É a reaplicação de informações e artefatos
rias aos CIs e os possíveis tipos de CIs que pode- de um sistema já definido, em outros sistemas
riam ser padronizados desta forma. A visão de semelhantes. O termo reuso pode ser considera-
McIlroy era baseada na indústria de componentes do uma denominação genérica para uma série de
eletrônicos que podiam ser selecionados em catá- técnicas utilizadas, que vão desde a etapa de
logos de diferentes fabricantes, apresentando modelagem de um projeto até a implementação.
propriedades configuráveis e diferentes níveis de
confiabilidade. A principal motivação para a reutilização está
relacionada ao aumento dos níveis de qualidade
Apesar de os primeiros conceitos sobre reutiliza- e produtividade no desenvolvimento de software.
ção de software terem sido idealizados no final da O aumento de qualidade é uma conseqüência da
década de 1960, eles não receberam muita aten- reutilização de componentes que foram previa-
ção da indústria e das universidades até os anos mente documentados, testados e aprovados. O
80, quando a complexidade dos sistemas come- aumento da produtividade é resultado de uma
çou a aumentar e as empresas foram forçadas a redução no tempo de desenvolvimento, evitando
procurar por métodos mais eficientes de constru- a reconstrução de partes do sistema que já exis-
ção de sistemas para refletir as necessidades do tem.
mercado.
A reutilização pode ser introduzida em diferentes
Em 1980 foi estabelecido o primeiro projeto de fases e níveis do desenvolvimento de software:
pesquisa universitário no tema de reutilização, na requisitos, design, código. É mais comum a reuti-
Universidade da Califórnia, coordenado por Peter lização de porções de código, design e testes, do
Freeman. Atualmente, existem duas principais que a reutilização de requisitos. A reutilização em
conferências sobre reutilização, a ICSR – Interna- fases com maior nível de abstração aumenta os
tional Conference on Software Reuse e o SSR – benefícios da mesma e facilita a reutilização em
Symposium on Software Reusability. fases mais avançadas do ciclo de vida do produ-
to.
É notório que a reutilização, quando feita de for-
ma intencional, planejada e controlada, os benefí- Embora já se tenha chegado a essa conclusão, a
cios alcançados são relevantes. Redução de cus- reutilização de requisitos tem merecido pouca
tos e esforço, melhoria de qualidade, potencial atenção dos investigadores. É necessário mobili-
para abranger o leque de produtos, atingir novos zar o estabelecimento de um processo gradativo
mercados, ganhar espaço da concorrência são e coordenado de reutilização, não só no código,
alguns dos principais chamarizes da reutilização. mas em todo o processo de desenvolvimento de
software.
Tudo isso só é possível, pois a técnica simplifica
a tarefa de aquisição de conhecimento. Diversos Atualmente existem várias técnicas de reuso co-
estudos mostram que muito do software que es- mo frameworks, arquiteturas orientadas a servi-
tamos começando a construir já foi feito e que ços (SOA), engenharia de software baseada em
apenas algo em torno de 15% dele é realmente a componentes, entre outras.
contribuição do nosso negócio. Todavia, embora
todos acreditem nos benefícios dessa técnica, a Vejo três formas comuns de se reutilizar compo-
reutilização ainda não é uma prática freqüente. nentes:

Reutilização  Utilizar componentes de terceiros;

A reutilização de software se baseia no uso de  Desenvolver componentes próprios reutili-


conceitos, produtos ou soluções previamente záveis;
elaboradas ou adquiridas para criação de um
novo software, visando melhorar significativamen-  Copiar e colar (sim, isso mesmo).
te a qualidade e a produtividade. Reusar um pro-
Utilizar Componentes de Terceiros
duto significa poder reusar partes de um sistema

15
Essa forma de reutilização é, à princípio, a que A questão mais complexa dessa reutilização é o
demanda menos esforço por parte da equipe de versionamento do componente. Deve-se ter muita
desenvolvimento, afinal, não é necessário desen- atenção no controle das versões e alterações que
volver nada. fazem outros projetos deixarem de funcionar.
Esse componente, afinal, estará sendo utilizado
Porém, o custo do desenvolvimento é apenas em mais de um projeto e consequentemente,
uma parte do custo total de utilização de um cada alteração deve ser muito bem pensada.
componente. Ao adotar um componente de tercei-
ro deve-se ter cuidado com algumas outras ques- Copiar e Colar
tões:
Copiar e colar é uma ótima forma de reutilização.
 Qual a curva de aprendizado dele? Há situações onde determinado código é usado
em várias situações, mas em todas com peque-
 Quão extensível ele é? Pode ser customi- nas modificações, não sendo possível ou valendo
zado para atender as diversas necessidades? a pena tentar criar um componente. Deve-se to-
mar muito cuidado para o copiar e colar não virar
 No caso de um problema nesse componen- regra. Essa forma de reutilização deve ser utiliza-
te, como será feita a correção? da somente como exceção, e somente entre mais
de um projeto, quando o custo de versionamento
 Este componente está em desenvolvimen-
e gerenciamento do componente são maiores que
to? Está maduro? Há previsão de continuidade no
o benefício da reutilização. Dentro de um mesmo
desenvolvimento dele?
projeto, o custo de versionamento é pequeno, por
Como pode-se ver, adotar um componente de isso, normalmente o copiar e colar nunca será
terceiros geralmente não é uma opção tão sim- utilizado.
ples quanto se imagina à princípio. Além da
Gerencia De Projetos
aprendizagem necessária, deve-se atentar ao
desenvolvimento dele, se a equipe de desenvol- Gestão de projetos é um conjunto de práticas que
vimento poderá contar com melhorias futuras e/ou serve de guia a um grupo para trabalhar de ma-
suporte em caso de problemas. neira produtiva. Ela compreende métodos e fer-
ramentas que organizam as tarefas, identificam
Desenvolver Componentes Próprios Reutilizá-
sua seqüência de execução e dependências exis-
veis
tentes, apóia a alocação de recursos e tempo,
Quando não há um componente de terceiros dis- além de permitir o rastreamento da execução das
ponível, ou há alguma outra limitação como o atividades e medição do progresso relativo ao
preço ou inadequação do componente, a solução que foi definido no plano de projeto.
pode ser desenvolver seus próprios componentes
Qualquer que seja o projeto com o qual você es-
reutilizáveis.
teja envolvido, o plano de projeto é um documen-
Um detalhe muito importante é: não desenvolver to essencial o qual o gerente de projeto ´vive e
um componente sem um caso de uso em mente. respira´ ao longo de todo o projeto. É obrigatório
Já vi diversas vezes componentes ultra genéri- o seu desenvolvimento e manutenção. O plano de
cos, que resolvem todos os problemas do mundo, projeto define os marcos de projeto (isto é, os
serem criados e quando precisam ser utilizados, ´milestones´) e as principais atividades necessá-
simplesmente não servem para nada. rias à execução do projeto. Este documento defi-
ne a data de cada marco de projeto, as atividades
Normalmente a criação de um componente reuti- associadas, os artefatos gerados e respectivos
lizável deve ocorrer de forma natural. Se um de- responsáveis.
terminado componente foi útil para uma situação,
e poderá ser aproveitado para outras, então sim, Perceba que é, até certo ponto, natural àqueles
podemos reutilizá-lo. Antes de pensar em reutili- que desenvolvem novos produtos e sistemas de
zar é necessário utilizar. software iniciarem as atividades de desenvolvi-
mento antes mesmo que eles entendam o que
tem de ser feito, ou seja, antes mesmo de sabe-

16
rem qual é o problema a ser tratado. Esse tipo de § Uso de múltiplos recursos (como equipamentos,
atitude, comumente, resulta no insucesso de pro- ferramentas, laboratórios);
jetos.
§ Decisão e aprovação em múltiplos pontos num
Estudos apontam que cerca de 40% de insucesso projeto;
de projetos são devidos ao mau planejamento ou,
até mesmo, a inexistência de plano de projeto, § Alocação adequada de recursos humanos e
enquanto que quase 20% se deve a uma gestão financeiros a tarefas.
inadequada do projeto. Interessante destacar que
Portanto, é preciso dar visibilidade e compartilhar
aproximadamente 50% dos problemas e insuces-
informações de projeto, pois as decisões preci-
so de projeto se devem a uma ´pobre´ comunica-
sam ser tomadas com base de informações bem
ção entre os principais envolvidos no projeto (ou
entendidas e explicitadas.
seja, os stakeholders). Num projeto, as questões
essenciais que um gerente deve se fazer são: A qualidade resultante de um produto ou sistema
é determinada a partir do início de seu desenvol-
1. Que problema precisamos solucionar?
vimento. Uma criteriosa análise, feita logo cedo
2. Quais recursos necessito para resolver? no projeto, visa encontrar erros, identificar incon-
sistências e averiguar quão correto e completo é
3. Quanto tempo disponho para o projeto e im- o entendimento do problema e adequada é a
plementação da solução? solução trabalhada.

A lição que fica é: sem o entendimento completo Isto torna a gestão de projeto uma atividade es-
do problema a ser tratado e um bem elaborado sencial à execução de projetos e sucesso de pro-
plano de projeto em mãos, você (gerente) e sua dutos. A gestão de projetos de software pode ser
equipe não saberão onde querem e precisam vista sob duas perspectivas: técnica e pessoal
chegar. A conseqüência é você (juntamente com onde a ênfase se dá sobre atividades de plane-
sua equipe) deparar-se com a inserção de defei- jamento e execução, conforme ilustrado na Figura
tos logo cedo no desenvolvimento, os quais virão, 1.
apenas bem mais tarde, a serem descobertos,
resultando em atraso no projeto e/ou comprome-
tendo a qualidade do produto final.

Essas situações apontadas ocorrem, com fre-


qüência, quando não há qualquer ‘preocupação’
com a gestão de projeto do software. Essas, den-
tre outras, são razões pelas quais muitos projetos
se transformam em casos de insucesso.

Por que a Gestão de Projetos é Essencial?

A gestão de projetos é uma atividade ortogonal às


demais atividades de projeto e atua como guia Figura 1. Perspectivas da gestão de projetos.
para a boa execução do projeto. Todas as pesso-
Perceba que a visão ilustrada na Figura 1 é uma
as envolvidas com um projeto têm a necessidade
visão simplificada das reais necessidades de
de acesso às suas informações. Quando lidamos
projetos. Dominar as habilidades necessárias a
com projeto de médio a grande porte e de nature-
za complexa, uma atividade chave é a coordena- uma boa gestão de projetos requer tempo, expe-
ção. Um gerente de projeto precisa coordenar: riência e reciclagem. Embora algumas pessoas
sejam levadas a acreditar que a capacidade para
§ Múltiplas pessoas de formação diversa; fazer a gestão de projetos seja um mito, isso não
passa de uma falácia. Não se trata de caracterís-
§ Múltiplas tarefas onde ocorre relação de depen- tica inata que o indivíduo traz consigo, mas de um
dência; conjunto de habilidades que podem ser reconhe-

17
cidas, classificadas e desenvolvidas pelas pesso- quando a busca da qualidade de software vem
as. crescendo com grande rapidez.

O reconhecimento desses fatos tem motivado os Acredito que o ato de medir e estimar é a parte
profissionais a buscarem atualizar-se, bem como mais importante de um projeto de sistema bem-
às empresas a considerarem a gestão de projetos sucedido e alguns fatos como: a falta de maturi-
no plano estratégico da instituição. dade, o desinteresse das empresas de desenvol-
vimento de sistemas e a baixa popularidade deste
Hoje em dia, profissionais e empresas buscam a assunto entre os profissionais da área de informá-
capacitação em gestão de projetos que seguem tica são algumas das principais causas para o
as orientações da principal referência mundial no insucesso e o alto custo dos sistemas de informa-
assunto: o PMI (Project Management Institute) o ção.
qual tem tido um crescimento quase exponencial
no número de afiliações, que hoje conta com mais O termo métrico de software refere-se à mensu-
de 240 mil profissionais membros. ração dos indicadores quantitativos do tamanho e
complexidade de um sistema. Estes indicadores
Métricas e Estimativas de Software são, por sua vez, utilizados para correlatar contra
os desempenhos observados no passado afim de
Imagine que você faça parte de uma equipe de
derivar previsões de desempenho futuro.
Rally, e que você e sua equipe tenham que atra-
vessar um deserto enorme e cheio de obstáculos A métrica de software tem como princípios espe-
e que 50% dos fatores críticos de sucesso de- cificar as funções de coleta de dados de avalia-
pendam do seu navegador para estimar o tempo ção e desempenho, atribuir essas responsabilida-
do percurso e a distância. des a toda a equipe envolvida no projeto, reunir
dados de desempenho pertencentes à comple-
Agora imagine-se diante de um projeto de Siste-
mentação do software, analisar os históricos dos
mas de Informação onde 50% dos fatores críticos
projetos anteriores para determinar o efeito des-
de sucesso estão nos prazos e custos. Certamen-
ses fatores e utilizar esses efeitos para pesar as
te você terá que fazer uma eficiente métrica e
previsões futuras. Estes princípios nos permitem
estimativa de software.
prever o resto do processo, avaliar o progresso e
As métricas e estimativas de software vem se reduzir a complexidade, como numa prova de
tornando um dos principais tópicos na Engenharia rally, onde a cada corrida ficamos mais esclareci-
da Informação com a crescente exigência de seus dos da condições e limites da equipe.
consumidores pela qualidade, rapidez, comodida-
As Métricas Orientadas ao Tamanho
de e baixo custo de implantação e manutenção, é
impossível não enxergar tais técnicas como ala- Métricas de software orientadas ao tamanho são
vanca para um produto de melhor qualidade, com medidas diretas do software e do processo por
custos adequados. meio do qual ele é desenvolvido. Se uma organi-
zação de software mantiver registros simples,
Mas existem ainda muitas barreiras que impedem
uma tabela de dados orientada ao tamanho pode-
os profissionais da área de utilizarem tais técnicas
rá ser criada. A tabela relaciona cada projeto de
ou de o fazerem de maneira errônea, embora a
desenvolvimento de software que foi incluído no
literatura disponível atualmente sobre engenharia
decorrer dos últimos anos aos correspondentes
da informação seja relativamente ampla e varia-
dados orientados ao tamanho deste projeto. A
da, o que nos leva a questionar: Por que as mé-
partir dos dados brutos contidos na tabela, um
tricas e estimativas de software propostas para o
conjunto de métricas de qualidade e de produtivi-
desenvolvimento de sistemas não são fiéis à rea-
dade orientadas ao tamanho pode ser desenvol-
lidade e à dimensão do problema? Tais técnicas
vido para cada projeto. Médias podem ser compu-
acompanharam a rápida evolução do setor?
tadas levando-se em consideração todos os pro-
Tais questões nos levam a crer que algumas mé- jetos.
tricas e estimativas de software ficaram obsoletas
As métricas orientadas ao tamanho provocam
e outras ganharam vigor nas épocas atuais,
controvérsias e não são universalmente aceitas

18
como a melhor maneira de se medir o processo funcionalidade ou utilidade do programa. Uma
de desenvolvimento de software. abordagem foi sugerida baseada nesta proposta
chamada de pontos-por-função (function point).
A maior parte da controvérsia gira em torno do Os pontos-por-função (FP’s) são derivados usan-
uso das linhas de código (LOC) como uma medi- do-se uma relação empírica baseada em medidas
da-chave. Os proponentes da afeição de linhas de informações e complexidade do software.
de código afirmam que as mesmas são o "artefa-
to" de todos os projetos de desenvolvimento de Um dos princípios da análise de pontos-por-
software que podem ser facilmente contados, que função focaliza-se na perspectiva de como os
muitos modelos existentes usam LOC ou KLOC usuários "enxergam" os resultados que um siste-
(milhares de linhas de código) como entrada- ma produz. A análise considera as várias formas
chave e que já existe um grande volume de litera- com que os usuários interagem com o sistema,
tura e de dados baseados nas linhas de código. com os seguintes objetivos:

Por outro lado, os opositores afirmam que as 1. Fornecer medidas consistentes;


medidas LOC são dependentes da linguagem de
programação utilizada na codificação do projeto, 2. Medir funcionalidades que o usuário solicita ou
que elas penalizam programas bem projetados, recebe;
porém mais curtos, que elas não podem acomo-
3. Independência da tecnologia;
dar facilmente linguagens não-procedurais e que
seu uso em estimativas requer um nível de deta- 4. Método simples.
lhes que pode ser difícil de conseguir (isto é, o
planejador deve estimar as linhas de código a ser As métricas orientadas à função apresentam vá-
produzidas muito antes que a análise e o projeto rios benefícios, dentre eles podemos citar o se-
tenham sido construídos). guinte:

Essa forma de medida foi uma herança do mode- 1. Uma ferramenta para dimensionar aplicações;
lo de manufatura em que os CIO'S podiam deter-
minar os recursos necessários para uma "corri- 2. Um veículo para quantificar custo, esforço e
da", contando o número de produtos manufatura- tempo;
dos necessários. Essa métrica não leva em con-
3. Um veículo para calcular índices de produtivi-
sideração o fato de que o desenvolvimento envol-
dade e qualidade;
ve um custo relativo ao ambiente ou linguagem
de programação utilizada. Por exemplo, em orien- 4. Um fator de normalização para comparar sof-
tação a objeto (OO), a flexibilidade da ferramenta tware.
no uso de mecanismos de herança dilui o resulta-
do final da contagem de linhas. Tal métrica parece ser útil e funcional para o de-
senvolvimento tradicional, mas apresenta algu-
A contagem de linhas de código pode ser uma mas falhas com o modelo de desenvolvimento em
medida do que foi feito, e não uma medida a ser orientação a objeto (OO), pois alguns atributos do
utilizada para previsão. design em OO invalidam o cálculo de alguns pon-
tos-por-função. As características fundamentais
Métricas Orientadas à Função
de OO têm efeito de reduzir a validade da conta-
Consiste em um método para medição de softwa- gem de funções para a avaliação de esforço e
re do ponto de vista do usuário, que determina de recursos necessários para a execução de um
forma consistente o tamanho e complexidade de projeto.
um software, sob a perspectiva do usuário. Ele
A métrica de pontos por função foi originalmente
dimensiona um software, quantificando a funcio-
projetada para sistemas de informação comerci-
nalidade proporcionada ao usuário a partir do seu
ais. Para acomodar estas aplicações, a dimensão
desenho lógico. Ou seja, são medidas indiretas
dos dados foi enfatizada para a exclusão de di-
do software e do processo por meio do qual ele é
mensões funcionais e de controle. Por esta razão,
desenvolvido. Em vez de contar linhas de código,
a medida de pontos por função era adequada
a métrica orientada à função concentra-se na
para muitos sistemas de engenharia. Um número

19
de extensões para a medida básica de pontos por fundamental para dados de entrada como são
função tem sido propostas para remediar esta processados para se transformarem em dados de
situação. saída. Passos de processamento que adquirem
dados de um arquivo e simplesmente os coloca
Uma extensão de pontos por função chamada na memória do programa não poderia ser consi-
"feature points" (ou, pontos característicos) é uma derado uma transformação. O dado não sofreu
evolução da medida de pontos por função que nenhuma mudança.
pode ser aplicada a sistemas e aplicações de
engenharia de software. A medida "feature points" O nível de complexidade associado a cada trans-
acomoda aplicações em que a complexidade formação é uma função do número de passos de
algorítmica é alta. Sistemas real-time de controle processamento e o número de regras semânticas
de processos e outros apresentam alta complexi- é que controla os passos de processamento.
dade algorítmica, e são receptivos a métrica de
"feature points". A dimensão de controle é medida pela contagem
do número de transições entre os estados. Um
Para computar o "feature point", valores do domí- estado representa algum modo internamente
nio são contados e ponderados. A métrica "featu- observável de comportamento e uma transição
re point" conta uma nova característica de softwa- ocorre como resultado de algum evento que força
re, os algoritmos. Um algoritmo é definido como o software ou sistema a mudar seu comportamen-
"um problema computacional que é incluído com to, isto é, mudar seu estado.
um programa de computador específico". Inverte
uma matriz, decodificar um bit de string ou manu- Quando pontos por função 3D são computados,
sear uma interrupção são exemplos de algorit- transições não são associadas a valores de com-
mos. plexidade.

Outra extensão de pontos por função para siste- Nota-se que pontos por função, "feature points" e
mas real-time e produtos de engenharia tem sido pontos por função 3D representam a mesma coi-
desenvolvido por Boeing. A aproximação de sa – "funcionalidade" ou "utilidade" fornecida pelo
Boeing integra a dimensão dos dados de software software. De fato, cada uma destas medidas re-
com dimensões funcionais e de controle para sulta no mesmo valor se somente a dimensão de
obter uma medida orientada à função, chamada dados de uma aplicação é considerada.
pontos por função 3D, que é receptiva a aplica-
Para sistemas real-time mais complexos, a con-
ções que enfatizem capacidades de função e
tagem "feature points" é de 20 a 35% mais alta
controle. Características de todas as três dimen-
que a contagem determinada usando somente
sões dão "contadas, quantificadas e transforma-
pontos por função.
das" em uma medida que fornece uma indicação
da funcionalidade fornecida pelo software. Pontos por função (e suas extensões), como a
medida LOC, é controversa. Os proponentes
Contagem de dados retidos (a estrutura de dados
acham que FP é independente da linguagem de
interna do programa, isto é, arquivos) e dados
programação, tornando-se ideal para aplicações
externos (entradas, saídas e referências exter-
usando linguagens convencionais e não procedu-
nas) são usados com medidas de complexidade
rais, e que ela é baseada em dados que são co-
para derivar uma contagem da dimensão de da-
nhecidos muito cedo na evolução do projeto, fa-
dos.
zendo a FP mais atrativa como uma estimativa
A dimensão funcional é medida considerando "o mais próxima.
número de informações internas requeridas para
Oponentes acham que o método requer alguma
transformar entradas em dados de saída". Para
prestidigitação em que a computação é baseada
os propósitos da computação de pontos por fun-
em dados subjetivos, que a contagem das infor-
ção 3D, uma transformação é vista como uma
mações de domínio (e outras dimensões) podem
série de passos de processamento que são limi-
ser difíceis de coletar após terminado o projeto, e
tados por regras semânticas estabelecidas. Como
que FP não tem significado físico direto. É só um
uma regra geral, a transformação é concluída
número.
com um algoritmo que resulta em uma mudança

20
Métricas Voltadas para Orientação a Objeto Entretanto a documentação é parte integrante de
qualquer sistema ou programa criado. Arrisco a
Muitas métricas já foram desenvolvidas para ge- dizer inclusive que a documentação é tão impor-
rações passadas de tecnologia e, em muitos ca- tante (ou mais) que as questões de segurança
sos, são usadas até para desenvolvimento OO, pois sem a devida documentação, bug’s e pontos
porém não são muito coerentes, pois a diferença vulneráveis no sistema demoram a ser encontra-
entre sistemas tradicionais e sistemas OO são dos e corrigidos, permitindo assim que os ataques
muito grandes. continuem levando à falência múltipla do sistema
e, consequentemente, de seu usuário.
Existem várias propostas para métricas OO que
levam em consideração as características básicas Normalmente em grandes corporações existem
e interações do sistema como: número de clas- pessoas e/ou equipes voltadas única e exclusi-
ses, número de cases, número de métodos, mé- vamente para a criação de documentação, sendo
dias de métodos, médias de métodos por classe, que o desenvolvedor fica restrito à codificação e
linhas de código por método, profundidade máxi- comentários de seu código. Já no mundo “real”,
ma da hierarquia de classes, a relação existente esta atividade é realizada pelo próprio desenvol-
entre métodos públicos e privados, entre outros. vedor e demanda um bom conjunto de horas para
planejar e criar cada uma de suas partes a fim de
Tais métricas baseiam-se na análise detalhada do
atender minimamente as necessidades do produ-
design do sistema. Como na técnica de pontos-
to desenvolvido. Então, como não é possível evi-
por-função, faz sentido adicionar um peso às
tar a criação da documentação técnica, vamos
métricas das classes para produzir uma medida
tentar amenizar um pouco sua horrível aparência
de complexidade do sistema. A maioria das me-
usando ferramentas que auxiliam na tarefa de
didas examina atributos em termos dos conceitos
domar o monstro. Mas antes disso, uma pequena
de OO, como herança, polimorfismo e encapsu-
apresentação do que é a documentação em si.
lamento. Para tanto, seria necessário coletar um
número significativo de contagens, ou seja, seria Documentação, o que é?
necessário tomar valores de vários projetos e
dimensioná-los selecionando as classes, os mé- A documentação de um software é composta por
todos e os atributos desejáveis para medir o ta- várias partes diferentes que abrangem todo o
manho e a complexidade de um novo software, o sistema e pode ser dividida em dois grandes gru-
que nos tomaria um longo tempo. pos: documentação técnica e documentação de
uso. A primeira é voltada ao desenvolvedor ou
Documentação De Software pessoa de TI e compreende principalmente dicio-
nários e modelos de dados, fluxogramas de pro-
A documentação de software mesmo sendo o
cessos e regras de negócios, dicionários de fun-
carma de qualquer desenvolvedor, é extrema-
ções e comentários de código.
mente necessária e auxilia na redução de horas
preciosas na correção de problemas. Neste pri- Já a documentação de uso é voltada tanto para o
meiro momento, vamos ver o que é a documenta- usuário final quanto para o administrador do sis-
ção de um sistema, suas partes principais e tam- tema e comumente é formada por apostilas ou
bém as ferramentas que auxiliam desenvolvedo- manuais que apresentam como o software deve
res a fazer desta uma tarefa menos maçante. ser usado, o que esperar dele e como receber as
informações que se deseja.
Para muitos desenvolvedores a criação de docu-
mentação técnica é a parte mais aterrorizante A primeira parte (técnica) é, para o desenvolve-
para se enfrentar em todo o processo de criação dor, a mais simples pois literalmente descreve
de um software, seja pela necessidade de escre- seu trabalho e também é utilizada pelo mesmo
ver várias e várias páginas de texto, gráficos e como ferramenta para o desenvolvimento de um
desenhos ou ainda pela necessidade de largar bom código. Já a segunda costuma ser um martí-
aquilo que se aprendeu (programar) para fazer rio pois a redação de manuais, inserção
aquilo que não sabe bem (redigir). de screenshots, desenhos e outros elementos
gráficos não é aquilo que podemos considerar

21
como skill deste profissional (são raros os que dispõem de versões tanto para Linux quanto para
possuem). Windows.

Ambas podem ser criadas em vários formatos de Conhecimento em RUB


visualização tais como páginas HTML, documen-
tos PDF, apresentações, vídeos ou ainda arqui- O Processo Unificado da Rational conheci-
vos texto. A forma de apresentação não importa. do como RUP (Rational Unified Process), é um
O importante é saber que para cada tarefa existe processo de engenharia de software criado para
uma ferramenta certa, inclusive para a documen- apoiar o desenvolvimento orientado a objetos,
tação de sistemas em qualquer nível de comple- fornecendo uma forma sistemática para se obter
xidade ou necessidade e que precisa ser feita, de vantagens no uso da UML. Foi criado pela Ratio-
uma forma ou de outra. nal Software Corporation e adquirido em fevereiro
de 2003 pela IBM.
As Ferramentas para Documentação
O principal objetivo do RUP é atender as neces-
Aproveitando a divisão da documentação em sidades dos usuários garantindo uma produção
duas grandes áreas, vamos conhecer suas partes de software de alta qualidade que cumpra um
e algumas ferramentas que ajudam e/ou facilitam cronograma e um orçamento previsíveis. Assim, o
aqueles que tem pela frente a tarefa de gerar RUP mostra como o sistema será construído na
documentação de sistemas. fase de implementação, gerando o modelo do
projeto e, opcionalmente, o modelo de análise
Modelos de dados que é utilizado para garantir a robustez. O RUP
define perfeitamente quem é responsável pelo
Modelos de dados são aquelas folhas com várias
que, como as coisas deverão ser feitas e quando
caixinhas das tabelas de um banco de dados
devem ser realizadas, descrevendo todas as me-
interligadas e que muitas vezes somente são
tas de desenvolvimento especificamente para que
utilizadas para decoração de escritórios. Mas
sejam alcançadas.
longe de ser um quadro ou pôster, o modelo de
dados reflete de uma forma gráfica (e lógica) a O RUP organiza o desenvolvimento de software
base de dados de um sistema, seus relaciona- em quatro fases, onde são tratadas questões
mentos, entidades, chaves e tudo aquilo que é sobre planejamento, levantamento de requisitos,
referente aos dados em si. análise, implementação, teste e implantação do
software. Cada fase tem um papel fundamental
Este modelo, junto com o dicionário de dados, é
para que o objetivo seja cumprido, distribuídos
peça fundamental para o desenvolvimento de um
entre vários profissionais como o Analista de sis-
sistema, sendo inclusive pensado e criado AN-
tema, Projetista, Projetista de testes, entre outros.
TES do início do desenvolvimento. Um bom mo-
delo de dados bem pensado e bem estruturado
não impacta somente em um bom código, mas
também na performace da aplicação com um todo
e na redução de horas de desenvolvimento equi-
vocado.

Para criá-lo são utilizadas ferramentas de mode-


lagem de dados, as quais geram de forma gráfica
as tabelas, índices, relacionamentos e tudo aquilo
que tem a ver com a base de dados em si, po- Fases do RUP
dendo ser criados por meio de engenharia rever-
sa ou ainda baseando-se nas necessidades do Fase de Concepção / Iniciação: Esta fase do RUP
aplicativo que está sendo desenvolvido. abrange as tarefas de comunicação com o cliente
e planejamento. É feito um plano de projeto avali-
As ferramentas mais conhecidas para modelagem ando os possíveis riscos, as estimativas de custo
de dados dentro do mundo livre são o DBDesig- e prazos, estabelecendo as prioridades, levanta-
ner, MySQL Workbenche também o PGDesigner, mento dos requisitos do sistema e preliminarmen-
as quais possuem funcionalidades diferentes e

22
te analisá-lo. Assim, haverá uma anuência das Levando em consideração esses fatos, alguns
partes interessadas na definição do escopo do modelos foram desenvolvidos de forma a auxiliar
projeto, onde são examinados os objetivos para a condução de atividades que envolvam projetos
se decidir sobre a continuidade do desenvolvi- de software. O objetivo deste artigo é fornecer
mento. uma visão geral sobre dois destes modelos
(CMMI e MPS-BR), baseando-se para isto em um
Fase de Elaboração: Abrange a Modelagem do conceito conhecido como “maturidade”.
modelo genérico do processo. O objetivo desta
fase é analisar de forma mais detalhada a análise O termo “maturidade” deve ser compreendido
do domínio do problema, revisando os riscos que como a capacidade de se repetir uma série de
o projeto pode sofrer e a arquitetura do projeto resultados de uma maneira previsível. Importante
começa a ter sua forma básica. Indagações como ressaltar ainda que os modelos CMMI e MPS-BR
"O plano do projeto é confiável?", "Os custos são contemplam diferentes níveis de maturidade,
admissíveis?" São esclarecidas nesta etapa. disponibilizando-se assim uma forma de mensu-
rar o grau de progresso atingido por uma organi-
Fase de Construção: Desenvolve ou Adquire os zação na implementação de projetos de software.
componentes de Software. O principal objetivo
desta fase é a construção do sistema de software, CMMI
com foco no desenvolvimento de componentes e
outros recursos do sistema. É na fase de Cons- O CMMI (Capability Maturity Model Integration) foi
trução que a maior parte de codificação ocorre. criado pelo SEI (Software Engineering Institute), o
qual é um órgão integrante da universidade norte-
Fase de Transição: Abrange a entrega do softwa- americana Carnegie Mellon. Trata-se de um mo-
re ao usuário e a fase de testes. O objetivo desta delo que está atualmente na versão 1.3 (Janei-
fase é disponibilizar o sistema, tornando-o dispo- ro/2013), com um enfoque voltado para a capaci-
nível e compreendido pelo usuário final. As ativi- dade de maturidade de processos de software.
dades desta fase incluem o treinamento dos usu-
ários finais e também a realização de testes da Um processo representa, dentro da área de sof-
versão beta do sistema visando garantir que o tware, um conjunto de atividades cujo objetivo é
mesmo possua o nível adequado de qualidade. atingir uma meta previamente estipulada. Já por
capacidade e maturidade de um processo, deve-
se ter a noção do grau de qualidade com o qual
um processo atinge um resultado esperado.

O CMMI está dividido em 5 níveis de maturidade


(Figura 1) que atestam, por sua vez, o grau de
evolução em que uma organização se encontra
num determinado momento. Além disso, tem por
objetivo principal funcionar como um guia para a
melhoria dos processos da organização, conside-
CMMI rando para isto atividades como o gerenciamento
do desenvolvimento de software, prazos e custos
O dia-a-dia dentro da área de desenvolvimento de
previamente estabelecidos.
software é caracterizado por uma grande pressão
no que se refere a prazos de entrega, custos e O objetivo maior, considerando o CMMI e seus
qualidade daquilo que se está produzindo. Inde- diferentes conceitos, está justamente na produ-
pendente do tamanho das equipes voltadas a ção de software com maior qualidade e menos
tarefas deste tipo, muitas organizações possuem propenso a erros.
dificuldades em gerenciar tais atividades, sendo
comum a ocorrência de atrasos, estouros orça-
mentários e sistemas que ficam aquém do espe-
rado.

23
 Nível 1 - Inicial: os processos normalmente
estão envoltos num caos decorrente da não obe-
diência ou ainda, inexistência de padrões;

 Nível 2 - Gerenciado: os projetos têm seus


requisitos gerenciados neste ponto. Além disso,
há o planejamento, a medição e o controle dos
diferentes processos;

 Nível 3 - Definido: os processos já estão


claramente definidos e são compreendidos dentro
da organização. Os procedimentos se encontram
Figura 1: Os diferentes níveis de maturidade do padronizados, além de ser preciso prever sua
CMMI aplicação em diferentes projetos;

Dentre os principais benefícios da implantação do  Nível 4 - Gerenciado Quantitativamente:


CMMI, vale a pena destacar: ocorre o aumento da previsibilidade do desempe-
nho de diferentes processos, uma vez que os
 Uma maior confiabilidade no que refere ao mesmos já são controlados quantitativamente;
cumprimento de prazos e custos que foram acor-
dados, inicialmente, perante o cliente que solici-  Nível 5 - Otimizado: existe uma melhoria
tou o desenvolvimento de um sistema. Essa pre- contínua dos processos.
visibilidade é decorrente do rigor que o CMMI
exige quanto à medição dos processos, fato este A implantação do CMMI é recomendável para
que conduz à obtenção de uma base histórica grandes fábricas de software. Implementar os
realista e confiável para estes fins; diversos estágios é uma tarefa árdua, não só
numa fase inicial, mas também quando se leva
 O gerenciamento das atividades relativas à em conta a migração de um nível para outro. Isto
produção de software aumenta consideravelmen- exigirá, invariavelmente, a realização de vultosos
te; investimentos financeiros, assim como uma mu-
dança de postura da organização (principalmente
 Uma maior qualidade nos softwares cria- quando a mesma não contava uma experiência
dos, já que processos bem definidos e controla- anterior bem-sucedida no gerenciamento de pro-
dos conduzem à produção de produtos mais con- cessos).
fiáveis;
Mais sobre SCRUM
 A menor dependência da empresa de de-
senvolvimento para com seus especialistas. Com O SCRUM é um framework para gerenciamento
um foco voltado para processos e melhoria contí- de produtos complexos, isso quer dizer que o
nua, além do uso intensivo de informações histó- SCRUM não é aplicado somente à área de TI,
ricas, a organização deixa de depender única e também pode ser utilizado em diversas áreas do
exclusivamente de profissionais com um elevado conhecimento. O SCRUM NÃO É um processo ou
grau de conhecimento técnico; técnica, ele é um framework, que pode agrupar
vários processos e técnicas.
 A busca por melhorias contínuas nos pro-
cessos cotidianos. O SCRUM é iterativo e incremental. Isso significa
que ele trabalha com iterações (períodos pré-
Para se conseguir o que este modelo propõe, a determinados de desenvolvimento), e de maneira
organização interessada na implantação do CMMI incremental (a medida que as iterações vão pas-
deverá evoluir progressivamente, considerando sando, mais valor é agregado ao produto).
para isto uma sucessão de diferentes de níveis.
Cada nível indica, por sua vez, o grau de maturi- Os Pilares
dade dos processos num determinado instante:
Existem três pilares que mantém o uso do
SCRUM, são importantíssimos para seu bom

24
funcionamento. Segui-los não garante que você nha ágil, e grande o bastante para que consiga
conseguirá implementar o SCRUM em sua orga- entregar o trabalho.
nização, mas aumentam suas chances conside-
ravelmente.  O Product Owner: é o responsável por
maximizar o ROI (retorno sobre investimento) do
 Transparência: os aspectos mais significa- produto. Ele é responsável por gerenciar o bac-
tivos do projeto devem estar visíveis para todos klog do produto. Priorizando as tarefas, alimen-
os envolvidos, aumentando assim a visibilidade tando o backlog. E garantindo que a Equipe de
do andamento do projeto. Deixando claro o que Desenvolvimento entenda os itens do backlog. O
está sendo feito, o que ainda será feito, e o que PO pode delegar essa tarefa para a equipe de
está pronto; desenvolvimento, no entanto, ele continua sendo
o responsável. O PO é uma pessoa (apenas
 Inspeção: os envolvidos devem inspecionar uma), que deverá se comprometer com o produto,
os artefatos gerados, para verificar se o projeto qualquer alteração só será realizada mediante
está seguindo de acordo com o planejado, detec- solicitação do PO, logo se existir uma comissão
tando variações de desempenho. Deve-se tomar interessada no projeto, devem passar as solicita-
cuidado com a frequência das inspeções para ções para o PO, e esse sim deverá solicitá-las a
que não chegue ao ponto de atrapalhar o anda- equipe de desenvolvimento.
mento do desenvolvimento;
 O SCRUM Master: o SM é o responsável
 Adaptação: baseado nos resultados obtidos pela aplicação e andamento do SCRUM na orga-
da inspeção, a adaptação realiza as alterações nização, sua função é remover impedimentos, e
necessárias para que o projeto continue seu bom proteger a equipe de intervenções externas. O
andamento, ou para consertar falhas; SM NÃO É um Gerente de Projetos. Ele não de-
lega tarefas, sua função é facilitar o andamento
Os Papéis
do processo. Ele é um líder-servo, deve tomar
O Time SCRUM é composto pela Equipe de De- suas decisões baseado no bem da equipe. Como
senvolvimento, o SCRUM Master e o Product já disse, ele é o facilitador do processo, e sua
Owner. O Time deve ser auto-gerenciável e mul- rigidez depende da experiência e maturidade da
tidisciplinar, isto é, os componentes do time de- equipe, com equipes novas, e que ainda não con-
vem ser proativos, e comprometidos com o proje- seguem se auto-gerenciar, o SM deve ser mais
to. E dentro do time, deve haver pessoas que rígido, e mostrar como o SCRUM deve ser execu-
possam projetar, desenvolver e testar. O SCRUM tado, com equipes mais experientes, sua rigidez
é projetado para melhorar a flexibilidade, criativi- diminui.
dade e produtividade.
ANOTAÇÕES
________________________________________
 A Equipe de Desenvolvimento: é com-
________________________________________
posta pelos desenvolvedores, os que criam in-
________________________________________
crementos para o produto. Assim como o Time
________________________________________
SCRUM, as Equipes de Desenvolvimento tam- ________________________________________
bém são auto gerenciáveis. Outro detalhe impor- ________________________________________
tante, é que o SCRUM não define títulos, todos os ________________________________________
membros da equipe de desenvolvimento são de- ________________________________________
senvolvedores, independentemente de sua fun- ________________________________________
ção (se vai testar, programar ou projetar). Existe ________________________________________
uma discussão muito grande quanto ao tamanho ________________________________________
da equipe de desenvolvimento, algumas pessoas ________________________________________
dizem que o número ideal é 7 (com uma margem ________________________________________
de 2 pra mais ou menos, ou seja, 5 a 9), outros ________________________________________
dizem ser 8, 9. Enfim, este valor varia bastante de ________________________________________
equipe para equipe. O SCRUM Guide define que ________________________________________
o tamanho exato é um número de membros pe- ________________________________________
queno o suficiente para que a equipe se mante- ________________________________________

25

Você também pode gostar