49
UNIFEOB – CENTRO UNIVERSITÁRIO DAFUNDAÇÃO DE ENSINO OCTÁVIO BASTOS Curso de Sistemas de Informação O USO DA METODOLOGIA XP NO DESENVOLVIMENTO DE SOFTWARE E OS IMPACTOS NA GESTÃO DE RISCOS JOSÉ GONÇALVES PINTO JÚNIOR Claudete Moscardini SÃO JOÃO DA BOA VISTA – SP 2009

O USO DA METODOLOGIA XP NO DESENVOLVIMENTO · PDF filenoiva a romper com o antigo namorado dela pra ficar comigo. “Os que sonham acordados e trabalham dormindo nunca realizam seus

Embed Size (px)

Citation preview

UNIFEOB – CENTRO UNIVERSITÁRIO DAFUNDAÇÃO DE ENSINO OCTÁVIO BASTOS

Curso de Sistemas de Informação

O USO DA METODOLOGIA XP

NO DESENVOLVIMENTO DE SOFTWARE

E OS IMPACTOS NA GESTÃO DE RISCOS

JOSÉ GONÇALVES PINTO JÚNIOR

Claudete Moscardini

SÃO JOÃO DA BOA VISTA – SP

2009

JOSÉ GONÇALVES PINTO JÚNIOR

O USO DA METODOLOGIA XP NO DESENVOLVIMENTO

DE SOFTWARE E OS IMPACTOS NA GESTÃO DE RISCOS

Trabalho de Conclusão de Curso realizado na área

de Engenharia de Software como requisito legal

para a obtenção do Grau de Bacharel em Sistemas

de Informação no Curso de Sistemas de Informação

da UniFEOB – Centro Universitário da Fundação de

Ensino Octávio Bastos de São João da Boa Vista -

SP, sob orientação da Profa. Claudete Moscardini.

SÃO JOÃO DA BOA VISTA

2009

DECLARAÇÃO DE APROVAÇÃO

Declaro para fins de avaliação de desempenho escolar, que o aluno José

Gonçalves Pinto Júnior, apresentou o Trabalho de Conclusão de Curso intitulado O uso da

Metodologia XP no desenvolvimento de Software e os Impactos na Gestão de Riscos para

atender às exigências da disciplina de Trabalhos de Conclusão de Curso perante banca

examinadora na UniFEOB – Centro Universitário da Fundação de Ensino Octávio Bastos,

composta pelos seguintes membros:

Profa. Claudete Moscardini – Orientadora

Profa. Adriana Nascimento Costa

Prof. João Sérgio Januzelli de Souza

Diante disto declaro que o referido aluno foi aprovado com a nota 10 (dez), tendo

apresentado este relatório e foi aprovado.

São João da Boa Vista, 24 de Novembro de 2009.

Professor(a) Orientador(a): Claudete Moscardini

DEDICATÓRIA

Dedico este trabalho a minha família e a minha

noiva, pessoas que amo imensamente e agradeço

a Deus todos os dias por tê-las em minha vida.

AGRADECIMENTOS

Primeiramente a Deus que a cada dia me presenteia com o dom da vida, com o ar

que respiro e que nunca me concede nada além do necessário para ser feliz.

Ao meu irmão Jânio e aos meus pais José e Izaulina pela compreensão e amor em

todos os momentos da minha vida. E principalmente, por acreditarem em meus sonhos e se

empenharem tanto quanto eu para que eles se realizassem.

A minha noiva Lizena Cescon pelo simples fato de existir e trazer mais sentido e

felicidade à minha vida. Como se isso já não fosse suficiente, pelo carinho, companheirismo

e amor incondicional durante os inesquecíveis anos de namoro e noivado.

A Isabela, por ser um anjo irradiante de ternura que ficará para sempre em nossos

corações.

A professora Claudete Moscardini pela competência como orientadora e dedicação

na parceria de elaboração desse trabalho.

Ao Camilo Lopes pela generosidade e disponibilidade de ajudar um desconhecido

com sua monografia, mesmo quando este ainda escrevia frases de índio.

A Profa. Laís Tarrasqui pelos esforços desmedidos de ensinar a arte da matemática

muito além da sala de aula.

Ao Roberto Rossi e Leandro Silveira pela oportunidade, confiança e disponibilidade

de compartilhar comigo os segredos “ocultos” da informática.

Aos companheiros do Universo Universitário (Robinson, Eder, Hércules e Bruno)

pela amizade, companheirismo e momentos de distração durante os quatros da faculdade.

Valeu galera!

Ao Jovem Nerd e Azaghâl por ressuscitar meu lado nerd e fazer um excepcional

nerdcast repleto de conhecimento e humor que salvou minhas intermináveis e entediantes

viagens diárias até a faculdade.

Ao Lucas Luis e Elton Mello pelo ano que mais me diverti em sala de aula, pela

amizade que não se acabou com o cursinho e principalmente por convencerem a minha

noiva a romper com o antigo namorado dela pra ficar comigo.

“Os que sonham acordados e trabalham

dormindo nunca realizam seus sonhos. Não

basta sonhar, é preciso estabelecer

prioridades para executar nossas metas. Os

sonhos só se tornam realidade quando são

irrigados pelo suor”

Augusto Cury

RESUMO

Esse trabalho é uma revisão literária, contemplando as palavras – chaves: Software, XP,

Extreme Programming e desenvolvimento ágil. Para produzir software de qualidade com

uma boa relação custo-benefício, a comunidade de software tem enfrentado um grande

desafio na busca de metodologias e ferramentas que auxiliem desenvolvedores e

programadores a fazerem seu trabalho da melhor maneira possível. Atualmente, o

desenvolvimento ágil é o que tem melhor proporcionado este ambiente que o mercado exige

e dentre as metodologias existentes a extreme programming, ou simplesmente XP, é a mais

utilizada. A metodologia XP possui quatro valores extremos: comunicação, feedback,

simplicidade e coragem que são as bases das boas práticas de desenvolvimento que são

descritas ao longo desse trabalho. Um dos fatores que tornaram a XP uma metodologia

eficaz é a integração constante entre cliente e desenvolvedores. Isso favorece para que as

necessidades do cliente sejam rapidamente compreendidas e em seguida implementadas.

Como em qualquer outra metodologia, a XP possui pontos fracos, mas se utilizada de forma

correta, a combinação dos valores e boas práticas criam as condições necessárias para que

uma equipe de desenvolvimento de software obtenha sucesso em seus projetos.

Palavras-Chave: Software, XP, Extreme Programming, desenvolvimento ágil.

ABSTRACT

This work is a literature review, looking at the keywords: Software, XP, Extreme

Programming and agile development. To produce quality software in a cost-benefit analysis,

the software community has faced a big challenge in the search for methodologies and tools

that help developers and programmers to do their job the best way possible. Currently, agile

development is the best that has provided this environment that the market demands and

among the existing methodologies to extreme programming, or just XP, is the most used.

The XP methodology has four extreme values: communication, feedback, simplicity and

courage that are the basis of good development practices that are described throughout this

work. One of the factors that made XP effective methodology is the ongoing integration

between client and developers. It helps to ensure that customer needs are quickly

understood and then implemented. As with any methodology, XP has weaknesses, but if

used correctly, the combination of values and practices create the conditions necessary for a

team of software development is successful in projects.

Keywords: Software, XP, Extreme Programming, agile development

SUMÁRIO

INTRODUÇÃO .................................................................................................................... 11

CAPÍTULO 1. ENGENHARIA DE SOFTWARE ................................................................... 13

1.1 A crise do Software .......................................................................................... 13

1.2 Qualidade de Software ..................................................................................... 16

1.3 Modelos tradicionais de desenvolvimento ......................................................... 19

1.3.1 Modelo em cascata .............................................................................. 19

1.3.2 Modelo incremental .............................................................................. 22

1.3.3 Prototipagem ....................................................................................... 23

CAPÍTULO 2. EXTREME PROGRAMMING ........................................................................ 24

2.1 Desenvolvimento ágil ........................................................................................ 24

2.2 Breve histórico da XP ....................................................................................... 27

2.3 Valores da XP................................................................................................... 28

2.3.1 Comunicação ....................................................................................... 28

2.3.2 Feedback ............................................................................................. 29

2.3.3 Simplicidade ........................................................................................ 31

2.3.4 Coragem .............................................................................................. 31

2.4 Boas Práticas da XP ......................................................................................... 33

2.4.1 Cliente presente ................................................................................... 33

2.4.2 Releases e iterações ............................................................................ 33

2.4.3 Jogo do Planejamento ......................................................................... 34

2.4.4 Metáfora ............................................................................................... 35

2.4.5 Programação em par ........................................................................... 35

2.4.6 Refactoring ........................................................................................... 36

2.4.7 Testes de unidade ............................................................................... 36

2.4.8 Código coletivo ..................................................................................... 38

2.4.9 Código padronizado ............................................................................. 38

2.4.10 Integração continua ........................................................................... 39

2.4.11 Reunião diária .................................................................................... 39

2.4.12 Ritmo sustentável ............................................................................... 39

CAPÍTULO 3. ESTUDO DE CASO ...................................................................................... 40

3.1 Comparativos entre a metodologia XP e o modelo em cascata ......................... 40

3.1.1 Comparativo sobre processos ............................................................. 40

3.1.2 Comparativo sobre a gestão de riscos ................................................. 41

CAPÍTULO 4. CONCLUSÕES ............................................................................................ 44

REFERÊNCIAS ................................................................................................................... 45

LISTA DE ABREVIATURAS

OTAN Organização do Tratado do Atlântico Norte

ISSO International Organization Standardization

IEC International Electrochnical Comission

CIO Chief Information Officer

LISTA DE ILUSTRAÇÕES E FIGURAS

Figura 1 – Resultado do relatório Chaos Research de 1994 ................................................ 15

Figura 2 – Resultado do relatório Chaos Research de 2004 ................................................ 15

Figura 3 – Modelo em cascata ............................................................................................. 20

Figura 4 – Modelo incremental ............................................................................................. 22

Figura 5 – Boas Práticas da XP ........................................................................................... 32

LISTA DE TABELAS

Tabela 1 – Razões para qualidade de um Software ............................................................. 16

Tabela 2 – Comparativo entre os processos da XP e do modelo em cascata ...................... 40

Tabela 3 – Riscos comuns em projetos de Software ............................................................ 41

Tabela 4 – Comparativo entre o grau de risco nas metodologias tradicionais e na XP ........ 42

11

INTRODUÇÃO

O Software representa uma grande proporção do valor total da maioria dos produtos

tecnológicos e sendo essencial para o funcionamento da economia nacional e internacional,

produzir tais softwares com uma boa relação custo-benefício se tornou prioridade e,

consequentemente, a indústria de software tornou-se peça fundamental para o mundo

globalizado (SOMMERVILLE, 2007). O mercado de software é exigente quando o assunto é

produtividade e atributos de qualidade como eficiência, confiabilidade e segurança são

requisitos indispensáveis. Entretanto, por mais que a Engenharia de Software tenha se

esforçado nesses últimos anos para desenvolver técnicas e métodos de desenvolvimento,

em 2004 apenas 29% dos grandes projetos de software foram concluídos dentro do prazo e

do orçamento (STANDISH, 2006).

A tecnologia e as ferramentas de desenvolvimento têm evoluído a um ritmo

exponencial, porém, a metodologia utilizada não tem seguido a mesma velocidade. De

acordo com Pressman (2006), durante os últimos trintas anos, a grande massa da

comunidade de engenharia de software tem utilizado os mesmos modelos de processos de

desenvolvimento. No entanto, uma nova tendência surgiu sutilmente durante a última

década e vem ganhando espaço a cada dia: a metodologia ágil. Dentre as metodologias de

desenvolvimento ágil, tem-se a Extreme Programming, que é abordada neste trabalho, e

segundo Beck (2000, apud BORBOREMA, 2007), esta é uma metodologia eficiente graças a

uma série de princípios e boas práticas que possibilitam aos desenvolvedores trabalharem

de forma ágil, sem deixar de lado aspectos como custo e qualidade de software.

Com a adoção dos valores e boas práticas da XP, espera-se reduzir o tempo de

fabricação e manutenção de software, agregando maior valor de custo versus benefício ao

produto. Nesse sentido, a motivação para a realização desse trabalho é apresentar de forma

simples e objetiva os valores e as práticas da metodologia XP e dessa forma contribuir com

empresas que trabalham com desenvolvimento de software. Além disso, a sociedade

acadêmica e demais pesquisadores da área podem se beneficiar com os estudos sobre as

12

boas práticas da metodologia XP no desenvolvimento de software.

Esta monografia tem como objetivo verificar as implicações dos antigos modelos de

desenvolvimento de software e analisar de forma qualitativa os problemas que levam muitos

projetos a falhar. E como objetivo específico busca-se realizar um estudo bibliográfico

visando descrever e analisar de forma qualitativa, as implicações de um conjunto de boas

práticas que possam ser mais eficientes e fornecer melhores resultados nos projetos de

desenvolvimento de software.

Visando atingir os objetivos propostos, escolheu-se um estudo descritivo através de

uma abordagem qualitativa do tema. Na elaboração do trabalho utilizou-se como referência

bibliográfica livros, artigos científicos, trabalhos acadêmicos e artigos da internet.

Esta monografia está dividida em quatros partes. O capítulo 1 apresenta conceitos

básicos sobre Engenharia de Software que serviram de base para o desenvolvimento do

tema. No capítulo 2 é abordado o conteúdo principal e nele será introduzido o conceito de

desenvolvimento ágil para depois apresentar a Extreme Programming com seus valores e

boas práticas no desenvolvimento de software. No capítulo 3 é apresentado um estudo

comparativo entre a metodologia tradicional e a metodologia XP sobre a gestão de riscos

em desenvolvimento de software. Por fim, no capítulo 4 são apresentadas as conclusões

obtidas na elaboração dessa monografia.

13

CAPÍTULO 1. ENGENHARIA DE SOFTWARE

1.1 A crise do Software

O software tornou-se um elemento imprescindível na nossa vida, estando presente

tanto nas tarefas corriqueiras do dia-a-dia, como programar a TV, até as transações

bancárias que movimentam bilhões de dólares e aquecem a economia global (ASTELS et al,

2002). As inúmeras aplicações foram aumentando gradativamente ao longo dos anos e

segundo Pressman (2006), o software passou por diversas transformações, a começar pelo

programador, que antigamente trabalhava solitário e depois foi substituído por uma equipe

de especialistas em software, cada um se concentrando em uma pequena parte da

aplicação.

De acordo com Brooks (1975, apud PRESSMAN, 2006), a necessidade de softwares

mais complexos era indispensável para acompanhar as transformações ocorridas no mundo

nas décadas de 60 e 70. Infelizmente, a comunidade de software ainda não estava

preparada para essas mudanças, tanto que muitos projetos de software fracassaram

durante esse período. Os softwares eram mal projetados e por isso estouravam o tempo

planejado e consequentemente custavam mais, Sommerville no seu livro vem reafirmar:

[...] O software era entregue com atraso, não era confiável, custava várias

vezes mais do que previam as estimativas originais e, muitas vezes, exibia

características precárias de desempenho [...] (BROOKS, 1975, p.60 apud

SOMMERVILLE, 2007).

A comunidade de software necessitava de algo que a ajudasse a melhorar seus

processos e técnicas de desenvolvimento, e em 1968 surgiu o termo “Engenharia de

Software”, uma disciplina criada exclusivamente para estudar e aprimorar o

14

desenvolvimento de software (SOMMERVILLE, 2007). Nesse mesmo ano, de acordo com

Teles (2005), ocorreu na Alemanha a Conferência da OTAN (Organização do Tratado do

Atlântico Norte) sobre Engenharia de Software, organizada para discutir sobre a chamada

“Crise de Software”, a qual Sommerville (2007) atribuía à evolução do hardware de terceira

geração que tornava possível muitas aplicações de softwares até então inimagináveis.

Para vencer a “crise do software” a Engenharia de Software tem proposto a cada dia

novos métodos para controlar a complexidade dos softwares, começando pelas

metodologias de desenvolvimento linear, conhecidas inicialmente por modelo em cascata,

até os atuais processos ágeis de desenvolvimento. Entretanto, ainda hoje muitos projetos de

software têm problemas e isso levou alguns críticos (PRESSMAN, 1997) a sugerirem que a

Engenharia de Software está em um estado de aflição crônica.

A “aflição crônica” sugerida por Pressman pode ser comprovada através de um

estudo intitulado de Chaos Research (STANDISH, 2006), que é realizado desde 1994 pela

Standish Group International. O resultado é um relatório abrangente sobre o sucesso e o

fracasso de milhares de projetos na área da tecnologia da informação. De acordo com

Castro (2007), este estudo engloba uma grande quantidade de projetos e a maior parte

deles são baseados no desenvolvimento tradicional.

No relatório Chaos Research, os projetos são enquadrados em três categorias

distintas:

• Mal sucedido – O projeto é cancelado em algum momento do

desenvolvimento por uma ou mais razões;

• Bem sucedido – O projeto é concluído dentro do prazo previsto e do

orçamento estimado;

• Comprometido – O Projeto é concluído. Porém, é entregue com atraso, com

orçamento além do estimado, e em alguns casos, o software não possui

todas as funcionalidades especificadas.

15

Figura 1 - Resultado do relatório Chaos Research de 1994

Fonte: modificado de The Standish Group International Inc (2006).

Figura 2 - Resultado do relatório Chaos Research de 2004

Fonte: modificado de The Standish Group International Inc (2006).

Observando as Figuras 1 e 2, nota-se que em 10 anos os projetos bem sucedidos

tiveram uma melhora de quase 100%. Entretanto, esses resultados ainda são muito ruins,

pois os projetos mal sucedidos e comprometidos correspondem a mais de 70% do total. Isto

leva a deduzir que as técnicas e métodos desenvolvidos pela Engenharia de Software ainda

não são adequados para atender a evolução que o desenvolvimento de software necessita

16

para vencer a “crise do software”.

1.2 Qualidade de Software

Para Sommerville (2007), atingir um alto nível de qualidade deve ser atualmente o

maior objetivo das organizações, pois o mercado não mais admite que se entregue um

produto de baixa qualidade e aos poucos reparar os defeitos. Em relação ao fator qualidade,

o software se tornou igual a qualquer outro produto comercializado como automóveis,

televisores e computadores.

Segundo Geek (2008, apud NETO, 2008) a qualidade de software não é mais um

diferencial de mercado, é um pré-requisito para toda empresa que queira lançar e manter

seu produto no mercado, e para tanto, ela necessita que seus clientes percebam essa

qualidade em seus softwares. Para este autor, a qualidade é um item essencial a se

considerar em um software e existem boas razões para isto. A Tabela 1 mostra algumas

dessas razões.

Tabela 1 - Razões para qualidade de um Software

Razão Justificativa

Qualidade é competitividade

A única maneira de diferenciar o produto do competidor é pela qualidade do Software e do suporte que é fornecido juntamente.

Qualidade é essencial para a sobrevivência

Clientes estão pedindo por qualidade. Se a empresa não tiver habilidade de sobreviver em um mercado altamente competitivo, ela está em débito com o mercado.

Qualidade é custo/benefício

Um sistema de qualidade direciona para o aumento da produtividade e permanentemente reduz custos, habilitando o gerenciamento para reduzir a correção de defeitos, danos ênfase à prevenção.

Qualidade retém consumidores e aumenta lucros

Pouca qualidade normalmente custa muito mais caro do que contratar mais desenvolvedores e ainda continuar sem qualidade. A maioria dos consumidores não tolerará falta de qualidade e irão procurar outros desenvolvedores.

Fonte: Geek (2008, apud NETO, 2008)

17

A ISO (International Organization Standardization) e a IEC (International

Electrochnical Comission) se uniram para editar normas internacionais de qualidade de

software, e assim definiram: “A totalidade de características de um produto de software que

lhe confere a capacidade de satisfazer necessidades explícitas e implícitas”. Necessidades

explícitas são os requisitos definidos para atender os objetivos, funções e desempenho

esperado pelo software, já as necessidades implícitas são os requisitos que mesmo não

sendo declarados na documentação, são fundamentais devido à gravidade das

conseqüências, como por exemplo, a integridade dos dados (RODRIGUES et al, 2009).

Segundo Pressman (2006, p.351), na tentativa de identificar os atributos de

qualidade de um software, a norma ISO 9126 de 1991 identifica seis atributos-chave de

qualidade:

a) Funcionalidade – Capacidade do software de funcionar adequadamente e atender as necessidades especificadas;

b) Confiabilidade – Capacidade do software de funcionar por determinado período de tempo livre erros e falhas;

c) Usabilidade – Capacidade do software de ser compreendido e utilizado facilmente pelo usuário;

d) Eficiência – Capacidade do software de atingir seu melhor desempenho utilizando seus recursos da melhor forma;

e) Manutenibilidade – Capacidade do software de realizar modificações e reparos sem grandes dificuldades;

f) Portabilidade – Capacidade do software de ser transferido facilmente de um ambiente (plataforma) para outro.

Para Sommerville (2007), além dos atributos citados por Pressman, existem ainda

outros atributos importantes a se considerar em um software de qualidade. Eles são:

a) Segurança – Capacidade do software de impedir o acesso de pessoas ou programas não autorizados;

b) Robustez – Capacidade do software de manter o processamento, mesmo com ações inesperadas;

18

c) Facilidade de compreensão – Capacidade do software de ser explicativo e memorizado facilmente;

d) Facilidade de adaptação – Capacidade do software de se adaptar a novas necessidades do usuário quando necessário.

Evidentemente que a importância de cada um desses atributos depende muito do

projeto e do custo de cada atributo. Eles são essenciais para se obter um software de

qualidade do ponto de vista da Engenharia de Software, mas do ponto de vista do usuário,

um software de qualidade é fácil de usar, de simples manutenção e o mais importante,

funciona corretamente (RODRIGUES et al, 2009).

De acordo com Leite (2001), de nada adianta concentrar as atenções somente no

produto de software a ser construído. Tão importante como a qualidade do produto é a

qualidade do processo utilizado na fabricação desse produto. Portanto, para lidar com

qualidade de software é necessário que qualidade de produto e processos caminhem lado a

lado.

Segundo Garcia (2009), processos de software são um conjunto de atividades,

métodos, práticas e tecnologias que as pessoas utilizam para desenvolver e manter

softwares e produtos relacionados. E as motivações que levam as empresas a buscar

processos de qualidade são: aumento da qualidade, diminuição do retrabalho, maior

produtividade, redução do tempo para atender o mercado, maior competitividade e maior

precisão nas estimativas. Mesmo com todas essas motivações a respeito de processos,

Astels et al (2002) chegaram à conclusão de que cerca de 60% dos projetos de

desenvolvimento são executados sem um processo definido, pois as equipes de

desenvolvimento ignoram muitas regras de processo devido a estrutura rígida que a maioria

dos processos impõe.

Depois de analisar os requisitos para se ter um software de qualidade e concluir que

a qualidade se estende até os processos de desenvolvimento, é importante buscar entender

melhor esses processos, bem como avaliar os fatores que caracterizam um processo de

software de qualidade.

19

1.3 Modelos tradicionais de desenvolvimento

Conforme apresentado anteriormente, qualidade de software está diretamente

relacionada com qualidade de processo, que pode ser definido grosseiramente como os

métodos utilizados pela equipe de desenvolvimento de software.

A seguir, serão abordados alguns dos processos tradicionais de desenvolvimento

criados pela Engenharia de Software a partir da década de 70.

1.3.1 Modelo em cascata

Segundo Pressman (2006), o modelo em cascata foi o primeiro paradigma de

desenvolvimento criado pela Engenharia de Software, que teve sua essência retirada de

outras áreas da Engenharia. Mas, conforme é descrito ao longo desse trabalho, a

construção de software não pode ser comparada a produção de produtos manufaturados,

pois o software é o resultado de um processo de criação e não de fabricação. Para

Pressman (2006) o modelo em cascata sugere uma abordagem linear e seqüencial de todas

as atividades envolvidas no desenvolvimento de software, e por se tratar de uma seqüência

de eventos, esse modelo também ficou conhecido como “ciclo de vida” do software.

Os estágios do modelo em cascata e a seqüência com que esses eventos são

executados são ilustrados na Figura 3 abaixo:

20

Figura 3 - Modelo em cascata Adaptado de: Pressman (2006); Pfleeger (2004)

• Definição dos requisitos – Segundo Pfleeger (2004), os requisitos são

características de algo que o sistema será capaz de realizar para atingir determinado

objetivo. Para isso, a equipe de desenvolvimento deve questionar o cliente sobre a

forma que o sistema deve ser para satisfazer as suas necessidades. Em seguida a

equipe deve registrar esses requisitos em um documento de tal maneira que clientes

e desenvolvedores cheguem a um acordo sobre como o sistema deve ser.

• Projeto de Software – Os requisitos são um conjunto de problemas que o sistema

deve resolver para o cliente e com base nesses requisitos, a equipe de

desenvolvimento deve, antes de codificar, projetar uma solução que satisfaça as

necessidades do cliente (PFLEEGER, 2004).

• Desenvolvimento – De acordo com Pressman (2006), a atividade de

desenvolvimento consiste em transformar, através de técnicas de programação, o

projeto de software em um produto executável e operacional.

• Testes de sistema – Ainda citando este autor, os testes são um processo de

execução de um programa que têm como objetivo revisar a codificação

implementada e encontrar erros na estrutura do software.

• Implantação – Implantação compreende a entrega do software para o cliente e a

utilização do usuário final. Nesse momento, o cliente tem a oportunidade avaliar se o

software atende às suas necessidades e em caso de não conformidades, a equipe

deve registrar as modificações necessárias para dar início à manutenção do software

(PRESSMAN, 2006).

Segundo Pfleeger (2004), todo o processo começa com as especificações dos

objetivos com o cliente, e nenhum outro estágio é iniciado antes do término do seu

antecessor, pois cada estágio envolve um ou mais documentos que devem ser aprovados e

assinados para que seja autorizado o início do próximo.

Para Pressman (2006), esse método de desenvolvimento apresenta vários

21

problemas. O principal é que em uma equipe de desenvolvimento, alguns membros

necessitam esperar o término do estágio anterior pra começar a trabalhar, e por mais que o

gerente tente administrar sua equipe para que isso não aconteça, é inevitável que algum dia

membros da equipe fiquem ociosos por terem que esperar que outros completem suas

tarefas.

Além disso, há outros problemas que segundo Pressman (2006) a modelagem em

cascata pode acarretar:

• “... projetos reais raramente seguem o fluxo seqüencial que o modelo

propõe...” (PRESSMAN, 2006, p.39).

O modelo em cascata não possui a flexibilidade que uma equipe de desenvolvedores

necessita, muitas vezes, no meio do desenvolvimento o cliente percebe algum item que

ficou faltando nos requisitos. Essas mudanças não são tratadas no modelo em cascata e na

maioria das vezes causa confusão à medida que a equipe prossegue com o projeto.

• “... em geral, é difícil para o cliente estabelecer todos os requisitos

explicitamente...” (PRESSMAN, 2006, p.39).

Raramente um cliente que contrata uma equipe para desenvolver um software sabe

exatamente o que quer de um software. O cliente sabe que precisa, mas não faz ideia de

como explicar detalhadamente a forma como deve ser esse software para atender suas

necessidades.

Essa incerteza do cliente se torna uma barreira para o modelo em cascata, uma vez

que modelo necessita que todas as informações e requisitos sejam definidos logo no início

do projeto.

• “... cliente precisa ter paciência...” (PRESSMAN, 2006, p.39).

Como nenhum estágio pode ser iniciado antes do seu antecessor, a

“produção visível” do software é demorada e o cliente precisa ter muita paciente até que a

22

equipe projete, desenvolva, implante e teste o software completamente.

1.3.2 Modelo incremental

Nos primeiros anos de desenvolvimento de software, alguns projetos demoravam

vários anos para serem entregues. Evidentemente que, atualmente, isso não é mais aceito

devido ao mercado concorrido e a economia super aquecida do mundo globalizado.

Segundo Pfleeger (2004), uma solução para reduzir o tempo de entrega do software foi

passar a projetar o mesmo em pequenas partes e entregar para o cliente ao término de

cada fase do projeto. Dessa forma, o usuário pode experimentar, mesmo que aos poucos,

os recursos e funções que o software terá ao final do desenvolvimento.

Na verdade, o modelo incremental combina os elementos do modelo em cascata de

forma iterativa. Cada iteração é uma seqüência linear que produz um subproduto de um

sistema. O primeiro incremento é freqüentemente chamado de núcleo de produto, que

possui os requisitos básicos do sistema para que o cliente possa avaliar e elaborar os

próximos incrementos que melhor satisfaçam as suas necessidades (PRESSMAN, 2006).

A seqüência do modelo incremental pode ser ilustrada como a figura abaixo:

Figura 4 - Modelo incremental Adaptado de: Pressman (2006); Pfleeger (2004)

23

1.3.3 Prototipagem

Para Pressman (2006), a Prototipagem é comumente utilizada como uma técnica

aplicada em outras metodologias de desenvolvimento e tem seu fundamento na construção

rápida de vários protótipos que são descartados à medida que os novos protótipos são

melhores que seus antecessores. Os primeiros protótipos concentram-se unicamente na

representação dos aspectos que estarão visíveis para o cliente. Dessa forma, é possível

implantar rapidamente um protótipo que será avaliado, e então o feedback produzido é

usado para refinar os requisitos do software e construir um novo protótipo com mais

recursos que atendam a necessidade do cliente.

Segundo Pfleeger (2004) um protótipo é construído com a finalidade de ajudar a

entender melhor as necessidades do cliente e explorar a viabilidade das possíveis soluções.

Neste protótipo não há nenhuma pretensão de utilizá-lo como parte real do sistema a ser

entregue, por isso o protótipo é descartado e inicia-se a construção de um novo. No entanto,

Pressman (2006) afirma que o emprego de protótipos pode ser problemático, pois o cliente

vê uma versão de seu software em funcionamento, mas ignora o fato de que foi construído

na pressa de fazê-lo rodar e que, conseqüentemente, ninguém considerou a qualidade do

código fonte. Em alguns casos, o cliente não aceita o fato de descartarem o protótipo, que

aparentemente funciona, para construírem um novo com altos níveis de qualidade. Então, o

cliente exige “alguns consertos” para transformar o protótipo no produto final e na maioria

das vezes a gerência de desenvolvimento do software, mesmo discordando, acaba por fazer

a vontade do cliente.

24

CAPÍTULO 2. EXTREME PROGRAMMING

2.1 Desenvolvimento ágil

As metodologias tradicionais de desenvolvimento foram criadas em um cenário muito

diferente do atual. No cenário anterior, as limitações tecnológicas e a falta de ferramentas

para a criação de softwares, tornavam o custo muito alto para o desenvolvimento e

manutenção destes. Portanto, era essencial planejar e documentar todo o software para

então implementá-lo (VIANA & DESCHAMPS, 2007).

Segundo Pressman (2006), essa prática de projetar todo o sistema para só então

implementar é obsoleta para o cenário atual. É praticamente impossível prever com

antecedência todos os detalhes de um sistema, devido às condições mutáveis de mercado e

a freqüente evolução das necessidades do usuário final.

Um dos problemas no desenvolvimento de software é a enorme quantidade de

detalhes que precisam ser considerados. Segundo Beck (2000, apud CASTRO, 2007), o

cliente tem o conhecimento de apenas alguns aspectos do software que ele deseja e só

passará a ter o restante depois de utilizar o sistema. Portanto, é difícil ter uma versão

completa do documento de requisitos1 antes de começar a programar, pois o cliente não

especifica todos os detalhes no início do projeto pelo simples fato dele mesmo não os

conhecer. Além disso, mesmo que ele soubesse de todos os detalhes, especificá-los em

documento seria muito difícil, devido à grande quantidade de elementos que precisariam ser

descritos.

Para suprir essas e outras necessidades da Engenharia de Software, Kent Beck e

outros dezesseis notáveis consultores se reuniram em 2001 e criaram um novo conceito de

processo de software: o Desenvolvimento Ágil.

1 Documento de requisitos é um consenso entre cliente e o desenvolvedor sobre uma listagem completa de tudo o que o cliente espera que o sistema proposto faça (PFLEEGER, 2004).

25

O Desenvolvimento Ágil é uma nova metodologia criada por profissionais renomados

na engenharia de software, que só conseguiram maximizar os resultados pensando e

trabalhando de forma muito diferente das descritas nos livros. Embora cada um tivesse suas

próprias teorias sobre desenvolvimento de software, todos concordavam que as teorias

tinham algo em comum. Foi dessa forma, que eles definiram um pequeno conjunto de

princípios e criaram o Manifesto para o Desenvolvimento Ágil de Software, freqüentemente

chamado apenas de Manifesto Ágil (CASTRO, 2007).

Os princípios do Manifesto Ágil são:

• Indivíduos e interações em vez de processos e ferramentas;

• Software funcionando em vez de documentação abrangente;

• Colaboração do cliente em vez de negociação de contratos;

• Resposta a modificações em vez de seguir um plano.

De acordo com Viana & Deschamps (2007), o Manifesto Ágil não descarta os

processos, ferramentas, documentações, negociações e planejamentos, mas procura dar a

esses itens um valor secundário diante dos indivíduos e interações, do bom funcionamento

do software, da colaboração do cliente e das respostas velozes às modificações.

Pressman (2006) afirma que o Desenvolvimento Ágil requer a utilização de pequenos

e constantes incrementos de software, e para isso, necessita que o feedback do cliente seja

o mais rápido possível.

[...] Um catalisador efetivo para o feedback do cliente é um protótipo

operacional ou uma porção do sistema operacional. Assim, uma estratégia

de desenvolvimento incremental deve ser instituída. [...] Essa abordagem

iterativa habilita o cliente a avaliar o incremento de software regularmente,

fornecer o feedback necessário à equipe de software e influenciar as

adaptações do processo feitas para acomodar o feedback [...]

(PRESSMAN, 2006, p. 61).

26

Com efeito, é possível notar nas afirmações de Pressman que a metodologia ágil

mescla alguns processos das metodologias de Incremento e Prototipagem oriundos dos

modelos tradicionais.

Segundo Fowler (2007, apud BORBOREMA, 2007), as duas principais diferenças

entre as metodologias ágeis e as tradicionais são:

a) Adaptativas, ao invés de previsivas – as metodologias tradicionais são

resistentes a mudanças devido à excedente documentação feita com

antecedência. Em contrapartida, as metodologias ágeis conseguem ser

mais flexíveis, pois ajustam seus requisitos durante o desenvolvimento do

software.

b) Orientadas às pessoas, não aos processos – as metodologia ágeis não

possuem processos rígidos que impõem o que as equipes devem ou não

fazer. Muito pelo contrário, a equipe é estimulada a se envolver

diretamente com o cliente e toma as decisões necessárias para melhor

ajustar a equipe.

Segundo Teles (2006), algumas metodologias que seguem os princípios do

Manifesto Ágil são: Scrum, Dynamic Systems Development Method (DSDM), Crystal

Methods, Feature-Driven Development (FDD), Lean Development (LD), Extreme

Programming e Adaptative Software Development. Dentre essas metodologias, esta

monografia aborda como assunto principal a Extreme Programming, mais conhecida por XP,

por ser uma das metodologias mais conhecidas atualmente tanto no Brasil quanto no

exterior.

27

2.2 Breve histórico da XP

Extreme Programming, ou simplesmente XP é uma das mais conhecidas

metodologia de desenvolvimento de software que segue os princípios do Manifesto Ágil.

Embora seu marco de criação seja o ano de 1996, a junção de princípios e boas práticas de

programação são frutos de um processo de evolução de pelo menos uma década em que

Kent Beck e Ward Cunningham trabalharam na Tektronixs, Inc. como consultores de

problemas em SmallTalk (CASTRO, 2007).

Em 1996, Kent Beck foi chamado na empresa Chrysler para analisar o desempenho

de projeto do C3 (Chrysler Comprehensive Compensation System - Sistema de

Compensação Abrangente da Chrysler). O sistema era nada menos que o controle da folha

de pagamento de aproximadamente 86 mil funcionários e o objetivo do projeto era unificar

os quatro sistemas de software legado2 diferentes que estavam sendo usados há vinte anos.

Uma tarefa um tanto difícil, mas de total importância para a Chrysler que aos poucos viu o

projeto se tornar um verdadeiro caos. Havia problema em todos os processos, desde

contratos irregulares a profissionais estressados e desconfiados. Foram três dias até Beck

analisar todo o projeto para apresentar as seguintes opções para o CIO (Chief Information

Officer) da Chrysler: 1 – deixar da forma que estava; 2 – demitir todos os funcionários e

cancelar o projeto e; 3 – conceder uma semana de folga e começar o projeto do zero. A

Chrysler optou pela alternativa 3 e contratou Beck para ser responsável pelo projeto

(TELES, 2006).

Depois de entrevistar várias pessoas e orientá-las no que deveriam trabalhar, Beck

tinha esquematizado e nomeado as práticas básicas do XP. Os trabalhos começaram em

março de 1996 e terminaram em maio de 1997, e mesmo com atraso de 2 meses por causa

de mudanças de última hora nas funcionalidades do sistema, o lançamento foi um enorme

sucesso (TELES, 2006).

2 Sistemas desenvolvidos há décadas atrás e que tem sido continuamente modificado para satisfazer a mudanças do negócio e nas plataformas de computação (PRESSMAN, 2006).

28

A partir deste projeto na Chrysler liderado por Kent Beck, inúmeras equipes de

desenvolvimento ao redor do mundo vêm adotando XP com sucesso, especialmente nos

Estados Unidos e Europa. Aqui no Brasil, os valores e práticas veem sendo adotados desde

1998, mas ainda há poucas equipes que conduzem seus projetos utilizando a XP de forma

completa (CASTRO, 2007).

De acordo com Teles (2006), não é correto afirmar que este projeto foi o “berço” do

XP, afinal seus princípios e práticas foram sendo evoluídas pelo menos durante uma

década. Mas com certeza, essa foi a oportunidade que Beck teve para aplicar de forma

coesa todas as práticas do XP e, além disso, foi durante este projeto que as práticas foram

batizadas com os nomes atuais.

2.3 Valores da XP

O XP tem como base quatro valores fundamentais que sustentam as boas práticas

de desenvolvimento de software: comunicação, feedback, simplicidade e coragem. De

acordo com Beck (2005, apud CASTRO, 2007) esses valores são essenciais para guiar o

desenvolvimento de software, mas cada equipe XP pode definir outros valores que

acreditem ser relevantes dentro da sua realidade. O importante é que a equipe tenha

entendido muito bem esses quatro primeiros valores, pois eles são fundamentais para

compreender a razão e os motivos de cada boa prática de desenvolvimento.

2.3.1 Comunicação

Tradicionalmente na indústria do software, as equipes de desenvolvimento gastam

um valioso esforço na tentativa de trocar informações por meio de extensos documentos

escritos. Devido à ineficiência desse meio, nem sempre é possível reproduzir com exatidão

uma informação e dessa forma elas são freqüentemente interpretadas de forma incorreta ou

incompleta (TELES, 2006).

29

Geralmente, projetos de software são produzidos por uma equipe de

desenvolvedores, sendo assim, cada componente da equipe precisa trocar informações

entre si e com o cliente sobre cada detalhe do projeto. Segundo Beck (2000, apud

BORBOREMA, 2007), os problemas mais comuns ocorrem por erro de comunicação entre

as pessoas, algumas vezes o cliente não conversou sobre algo importante e, outras vezes,

o desenvolvedor não soube fazer as perguntas corretas para o cliente. Justamente por isso

que a comunicação é tida como um dos elementos mais importantes no desenvolvimento de

software.

Soares (2004) afirma que a melhor forma de comunicação em XP é a conversa face-

a-face, pois ela permite que o interlocutor leve em conta o conteúdo emocional da fala, dos

gestos e da expressão facial para interpretar a informação transmitida. Além disso, em caso

de dúvidas, o interlocutor pode saná-las instantaneamente.

A XP procura assegurar que a comunicação seja a mais eficiente possível, de modo

a diminuir as falhas na comunicação e evitar re-trabalhos desnecessários. Por isso, a

comunicação face-a-face é fortemente recomendada, por ser uma forma de interação direta

entre as pessoas, evitando-se ao máximo o uso de telefones, e-mail e outros meios de

comunicação (TELES, 2006).

2.3.2 Feedback

Segundo o dicionário Sensagent (2009), feedback é:

“A mechanism of communication within a system in that the input signal

generates an output response which returns to influence the continued

activity or productivity of that system.” 3

Trazendo este conceito para a realidade de desenvolvimento de software, feedback é

3 Tradução livre: “Um mecanismo de comunicação dentro de um sistema em que o sinal de entrada gera uma saída que retorna resposta continua a influenciar a atividade ou a produtividade do sistema”.

30

o processo de troca de informações que ocorre entre cliente e a equipe de desenvolvimento

durante a produção de um software.

Para Teles (2006) um feedback constante é a base de todos os processos ágeis de

desenvolvimento, e é a filosofia fundamental da XP, pois é ele que permite uma maior

produtividade, uma vez que os trabalhos da equipe de desenvolvimento são influenciados e

direcionados de acordo com a constante resposta do cliente sobre determinada atividade.

Ainda citando este autor, o feedback não é exclusividade do XP ou das metodologias ágeis,

ela também está presente nos processos tradicionais. O diferencial está nos tempos de

execução, pois nos processos tradicionais há uma defasagem muito grande no tempo da

troca de informação entre cliente e desenvolvedores, isto é ruim tanto para o cliente como

para a equipe que precisa encontrar rapidamente a solução que atenda as necessidades de

ambas as partes.

O contato incessante entre o cliente e a equipe de desenvolvimento é o que se pode

chamar de feedback constante. Dessa forma, o cliente pode freqüentemente ter uma parte

do software funcional para avaliar e com isso, pode sugerir novas características ao mesmo

tempo em que pode identificar eventuais não conformidades com os requisitos. E assim, os

desenvolvedores podem implementar rapidamente novas características e corrigir eventuais

erros já nas próximas versões a serem entregues ao cliente (SOARES, 2004).

Da mesma forma que os desenvolvedores se beneficiam com o constante feedback

do cliente, o contrário também acontece quando os desenvolvedores fornecem ao cliente o

seu feedback. Segundo Teles (2006) isto acontece quando eles apresentam estimativas,

riscos técnicos, alternativas de design, entre outros. A partir dessas informações e da

manipulação constante de um protótipo funcional, o cliente aprende mais sobre aquilo que

seria adequado para se produzir no software. Para este autor, perceber que o cliente

aprende na medida em que utiliza o software e se envolve em discussões sobre o mesmo, é

fundamental para compreender os desafios que existe no desenvolvimento de software.

31

2.3.3 Simplicidade

Simplicidade em XP refere-se a desenvolver apenas o suficiente para atender as

necessidades atuais do cliente, desprezando qualquer funcionalidade não essencial. Mesmo

que tal funcionalidade esteja ligada com a evolução do produto, ela deve ser descartada até

que se tenha absoluta certeza da sua necessidade. Assume-se assim a seguinte estratégia:

desenvolver algo simples hoje e fazer modificações futuramente, ao invés de desenvolver

algo complexo hoje e correr o risco de não ser utilizado no futuro (SOARES, 2004).

Segundo Teles (2006), ao codificar uma funcionalidade pensando em problemas

futuros, o desenvolvedor recorre a um erro muito freqüente: o trabalho especulativo.

Trabalho este em que o desenvolvedor para “ganhar tempo” assume algumas premissas

das quais não tem absoluta certeza e implementa uma funcionalidade que possa ser

utilizada no futuro, mas na maioria das vezes ele erra ao assumir essas premissas e dessa

forma é preciso refazer todo o trabalho. Teles ainda afirma sobre os riscos de assumir o

trabalho especulativo, pois quando o desenvolvedor implementa uma funcionalidade além

do necessário, ele investe tempo e dinheiro em algo que pode nunca ser utilizado.

Conclui-se então que o principal objetivo da simplicidade na XP é evitar o retrabalho

resultante da precipitação em especular requisitos futuros.

2.3.4 Coragem

A XP é uma metodologia de software que se baseia em diversas premissas que

contrariam os processos tradicionais de desenvolvimento, justamente por isso, é preciso que

a equipe tenha convicção da sua eficiência e tenham determinação em adotar as boas

práticas. A coragem é acima de tudo uma forma de pensamento diferenciado que deve ser

adotado por todos os membros da equipe. Isto significa que as mudanças que ocorrem no

projeto não devem ser encaradas negativamente apenas como problemas a serem

resolvidos, mas sim como oportunidades a serem exploradas para a melhoria como um todo

32

da equipe e do projeto.

De acordo com Soares (2004) é preciso coragem para implantar comunicação entre

desenvolvedores e clientes, pois não são todas as pessoas que possuem facilidade de

comunicação e conseguem manter um bom relacionamento. É necessário também coragem

para aplicar refactoring em um código que está funcionando corretamente somente para

torná-lo mais simples.

Segundo Teles (2006), XP não tem uma fórmula mágica para eliminar todos os

riscos presentes no desenvolvimento de software, eles existem como em qualquer outra

forma de desenvolvimento, o que diferencia XP das outras metodologias é a forma de lidar

com estes riscos. Em XP, por exemplo, é natural quebrar o que estava funcionando

simplesmente para aplicar uma prática recomendada. Os riscos de aplicar tais técnicas são

conhecidos, mas a confiança de que elas serão benéficas para o projeto encorajam a equipe

a sempre aplicá-las quando forem necessárias.

Os valores apresentados até aqui são considerados os “alicerces” da XP, pois eles

que oferecem sustentação às boas práticas adotadas pelas equipes de desenvolvimento.

Segue abaixo a Figura 5 contendo as principais boas práticas da XP:

Figura 5 – Boas Práticas da XP Adaptado de: http://xprogramming.com

33

2.4 Boas Práticas da XP

As boas práticas da XP são um conjunto de atividades que as equipes XP utilizam

enquanto produzem softwares. Antes de qualquer coisa, é necessário ter confiança nestas

boas práticas e consciência de que elas devem ser aplicadas em conjunto. Quando

aplicadas isoladamente, elas não trazem os mesmos resultados por que os pontos fracos de

cada prática são protegidos pelos pontos fortes das outras práticas (BORBOREMA, 2007).

2.4.1 Cliente presente

Em projetos XP é essencial que o cliente participe ativamente do desenvolvimento.

Essa talvez seja uma prática muito extrema, mas a XP acredita que é somente a presença

constante do cliente que viabiliza a simplicidade dos processos e a clara comunicação com

os desenvolvedores. Tendo o cliente sempre presente, quaisquer dúvidas dos

desenvolvedores são sanadas rapidamente, mas para isso, o cliente deve possuir

capacidade para responder perguntas sobre o negócio e autoridade suficiente para tomar

decisões relativas a prioridades no projeto (ASTELS et al , 2002; TELES, 2006).

2.4.2 Releases e iterações

Release é um conjunto de funcionalidades que representa uma pequena versão do

sistema com recursos completos e relevantes para o cliente. Dessa forma, a versão é

colocada em produção o mais rápido possível, para que o cliente possa usufruir do

investimento no software ao mesmo tempo em que avalia e retorna um feedback para os

desenvolvedores sobre o release (TELES, 2006).

Além de fragmentar todo o projeto em releases, cada release é fragmentado em

pequenas partes chamadas iterações. Elas são utilizadas para refinar cada vez mais os

requisitos do release, para que ao término dela o cliente possa receber um produto que

atenda o máximo de suas necessidades e expectativas daquele momento. O tempo de cada

34

release e iteração depende da complexidade do projeto, mas em geral, releases costumam

durar em torno de oito semanas, enquanto as iterações duram em torno de duas semanas

(BORBOREMA, 2007).

Esta prática, segundo Astels et al (2002), deve ser utilizada para que alguns usuários

possam utilizar o software e avaliar, pois dessa forma vários tipos de defeitos podem ser

detectados rapidamente, possibilitando à equipe de desenvolvimento saber se está no

caminho certo ou não.

2.4.3 Jogo do Planejamento

Segundo Astels et al (2002), é fato que em desenvolvimento de softwares, seja ele

de que tamanho for, é preciso que haja um planejamento de projeto, mas isso não significa

elaborar um plano minucioso e detalhado que demore semanas ou até meses para ser

finalizado. Os planejamentos na maioria das vezes não são precisos e mudam

consideravelmente durante o andamento do projeto, quanto mais longo for o prazo de

planejamento, maior a probabilidade da imprecisão.

No início de cada iteração a equipe de desenvolvimento estimula o cliente a escrever

as funcionalidades que deseja no sistema em pequenos cartões chamados user stories.

Uma user story é a menor quantidade de informação que o cliente pode definir para uma

determinada funcionalidade do projeto e de acordo com a complexidade da user story, a

equipe de desenvolvimento estima o tempo e o custo que aquela funcionalidade irá custar

para o cliente. Ciente do tempo e custo, o cliente deve decidir a ordem que cada user story

deve ser desenvolvida, ou seja, ele tem a oportunidade de priorizar as funcionalidades

sabendo exatamente o tempo e quanto irá lhe custar. Esta prática realizada no início de

cada iteração é conhecida como Jogo de Planejamento e assegura que a equipe esteja

sempre trabalhando no que é mais importante e gere mais valor para o cliente (ASTELS et

al, 2002; TELES, 2006).

35

2.4.4 Metáfora

Segundo Teles (2006) as metáforas tem o poder de transmitir ideias complexas de

forma simples e clara. Por isso, a XP as utilizam para criar uma visão comum do projeto

entre cliente e desenvolvedores. Beck (2000, apud BORBOREMA, 2007) afirma também

que as metáforas devem ser estabelecidas de acordo com o vocabulário que o cliente está

habituado no dia a dia, pois assim a compreensão fica mais fácil e a comunicação é

beneficiada.

2.4.5 Programação em par

Para Borborema (2007), na programação em par dois desenvolvedores escolhem

uma user story e sentam-se em um único computador para codificar uma determinada

funcionalidade. O desenvolvedor com menor experiência tem como responsabilidade

assumir o controle do teclado e conduzir ativamente a programação do código fonte,

enquanto o outro desenvolvedor com maior experiência inspeciona o código a procura de

erros e defeitos, além de questionar decisões e pensar estrategicamente em soluções mais

simples para o código.

Semelhante a outras boas práticas, a programação em par é um investimento que a

equipe faz para sempre buscar as soluções mais eficientes e eficazes. Teles (2006) afirma

que na programação em par os desenvolvedores estão constantemente discutindo sobre as

melhores alternativas, dessa forma um ajuda o outro quando uma solução está muito

complexa. Além disso, a programação em par trás outros benefícios para o projeto, como

por exemplo, a revisão constante do código que ajuda na detecção de erros rapidamente, e

a disseminação do conhecimento entre os pares, que ajuda no nivelamento técnico de toda

a equipe.

Segundo Astels et al (2002), programar uma funcionalidade em par é tão produtivo

quanto programar a mesma funcionalidade sozinho, ou seja, a programação em par não

afeta a velocidade do desenvolvimento, mas afeta diretamente a qualidade do código, uma

36

vez que o código gerado por um par tende a ser mais eficiente e a quantidade de erros é

bem menor. Além das vantagens já citadas com a programação em par, essa prática

também proporciona a “pressão do parceiro”, que é uma forma saudável de manter um

senso de disciplina durante a jornada de trabalho.

2.4.6 Refactoring

Refactoring é o processo de reorganizar o código fonte de um software para

melhorar sua qualidade interna, facilitar a leitura e diminuir o tempo gasto com manutenção,

sem contudo prejudicar o desempenho e alterar seu comportamento externo. Aplicado em

sistemas orientados a objetos, a técnica é fundamental para tornar o código mais legível e

encontrar facilmente erros em algoritmos mal escritos (NETO, 2007).

Segundo Teles (2006), um projeto em XP não existe sem a prática de refactoring,

pois a agilidade necessária para alterar e incluir novas funcionalidades constantemente em

um sistema só é possível com um código de alta qualidade que seja organizado e de fácil

compreensão. Para que isso aconteça, a XP determina que qualquer um da equipe faça o

refactoring em qualquer parte do código que esteja pouco legível.

Ainda citando Teles, ele admite que a prática de refactoring traz um grande risco de

fazer com que um código que estava funcionando corretamente pare de funcionar. No

entanto, é possível reduzir esse risco conhecendo bem as técnicas de refactoring e testando

constantemente o código. Os testes garantem uma segurança para aplicação de refactoring,

pois após cada alteração, eles informam se o código continua produzindo os mesmos

resultados.

2.4.7 Testes de unidade

Uma das preocupações da XP é a qualidade do código produzido e nada garante tão

bem que um código esteja funcionando corretamente do que um teste. Por isso, os

programadores da XP escrevem testes automatizados antes mesmos de codificar uma

37

funcionalidade. Dessa forma eles aprofundam o conhecimento da funcionalidade em

questão, além de poder sempre contar com testes que validem o sistema em qualquer

momento do projeto (CASTRO, 2007; TELES, 2006).

Segundo Astels et al (2002), existem dois motivos para fazer testes:

a) Eles descrevem a tarefa que o código a ser testado deve executar e

com base nisso o desenvolvedor consegue se concentrar apenas no

essencial para passar no teste, evitando assim que ele perda de tempo em

algo que não será utilizado.

b) Eles são uma garantia de que o sistema está funcionando da forma

como deveria, dessa forma o desenvolver avança mais rapidamente no

projeto, pois tem a confiança de que o código não foi quebrado durante

uma alteração qualquer.

Ainda citando este autor, ele aponta três momentos durante o desenvolvimento que

se devem aplicar os testes:

a) Antes o refactoring – para ter certeza que o código está funcionado

corretamente antes de qualquer alteração.

b) Após o refactoring – para ter certeza que as modificações não

alteraram o comportamento externo do sistema.

c) Após a integração – para ter certeza que não houve conflitos entre os

códigos integrados.

As metodologias tradicionais encaram os testes como um gasto desnecessário no

projeto, mas em XP eles são vistos como uma forma de investimento que garante

produtividade no médio e longo prazo. Certamente que as equipe consomem um tempo

considerável na criação dos testes, entretanto eles ajudam a reduzir a ocorrência de erros e

defeitos no sistema e quando ocorre, o tempo gasto na busca por esses erros é

infinitamente menor, graças aos testes automatizados (TELES, 2006).

38

2.4.8 Código coletivo

Uma equipe de XP trabalha com a prática de propriedade coletiva do código, ou seja,

cada membro da equipe pode trabalhar em qualquer parte do sistema a qualquer momento.

Caso um desenvolvedor encontre alguma coisa que possa ser melhorada, ele não precisa

solicitar que outra pessoa o faça por não seu o “dono” daquele código. Essa prática permite

que o sistema evolua mantendo o código o mais simples possível, pois sempre que um

membro encontra algo confuso, ele tem a liberdade de aplicar o refactoring (Astels et al,

2002).

Equipes que trabalham com propriedade de código tendem a criar pessoas dentro da

equipe com conhecimento especializado, e isso se torna um transtorno quando ocorre um

imprevisto e tais pessoas são afastadas do projeto por uma razão, como por exemplo, em

casos de doenças ou demissões. Para evitar este tipo de problema a XP utiliza-se do código

coletivo, que além de evitar “ilhas de conhecimento”, cria mais um mecanismo de revisão

constante, uma vez que um código escrito hoje por uma dupla acaba sendo manipulado por

outra no dia seguinte (TELES, 2006).

2.4.9 Código padronizado

Como todos os desenvolvedores têm acesso a todo o código, é necessário que se

estabeleça um padrão de codificação e que todos concordem voluntariamente em segui-lo,

assim o sistema será homogêneo e permitirá que qualquer um compreenda facilmente e não

tenha dificuldades para manipulá-lo caso seja necessário (TELES, 2006).

Segundo Beck (2000, apud CASTRO, 2007) a equipe deve adotar um padrão que

exigia a menor quantidade possível de trabalho, ou seja, quanto menos código duplicado

tiver, melhor. Além disso, a padronização do código deve ser encarada como um meio de

comunicação entre a equipe. Por isso, ela deve ser clara, objetiva e entendida por todos da

equipe.

39

2.4.10 Integração continua

Segundo Soares (2006), integração continua é a prática de construir o software

várias vezes por dia, o que possibilita uma constante sincronia entre os desenvolvedores.

Esta prática é aconselhada para evitar surpresas e assegurar que o sistema esteja sempre

funcionando de forma harmoniosa a cada nova integração. Não é raro uma integração

causar erros no sistema. Por isso, a cada integração, os pares devem executar todos os

testes para verificar a integridade do sistema. Dessa forma é possível descobrir os defeitos

rapidamente e corrigi-los antes que se tornem problemas maiores no futuro.

2.4.11 Reunião diária

De acordo com Teles (2006), as equipes XP sempre começam um dia de trabalho

com uma reunião de no máximo 10 minutos. Nesse momento, cada desenvolvedor têm

oportunidade de comentar rapidamente sobre o que realizou no dia anterior, e assim todos

tem conhecimento sobre o andamento geral do projeto. Ainda nessa reunião, a equipe

aproveita para priorizar as atividades que serão realizadas ao longo do dia.

2.4.12 Ritmo sustentável

Segundo Borborema (2007), essa prática consiste em trabalhar respeitando os

limites físicos e demonstrando respeito pela individualidade de cada membro da equipe.

Dessa forma, para que uma equipe seja criativa e produza software com qualidade, ela

precisa estar saudável do ponto de vista físico e mental. Para isso, a XP recomenda que a

carga horária de trabalho não ultrapasse 8 horas diárias e 40 horas semanais.

Muitos gerentes de projetos utilizam a prática de estender a jornada de trabalho para

compensar atrasos no cronograma do projeto, mas estudos comprovam que essa solução

tem resultados apenas nos primeiros dias. Trabalhar vários dias além do horário, além de

causar um cansaço físico e mental, causa um sentimento desmotivador e

conseqüentemente o desempenho da equipe será bem menor (TELES, 2006).

40

CAPÍTULO 3. ESTUDO DE CASO

3.1 Comparativos entre a metodologia XP e o modelo em cascata

O estudo de caso a seguir tem como desafio demonstrar as principais diferenças

acerca da aplicação das metodologias no que tange às questões sobre eficiência e eficácia

no desenvolvimento. Sendo o enfoque desse estudo a flexibilidade da metodologia para com

os processos e o suporte que ela proporciona para as principais questões na gestão de

riscos em projetos de software.

3.1.1 Comparativo sobre processos

Para Pompilho (2002), a metodologia de desenvolvimento tradicional é composta de

uma regra rígida onde as fases do projeto devem ter uma seqüência, e uma fase dá início

ao término da outra, portanto, o teste que no desenvolvimento XP ocorre a todo momento,

no modelo em cascata só irá ocorrer no final. Percebe-se então, na tabela 2 como XP é

flexível deixando o engenheiro de software verificar quais etapas serão importantes e quais

artefatos serão utilizados.

Tabela 2 - Comparativo entre os processos da XP e do modelo em cascata

Ciclo de vida do um Software

Desenvolvimento ágil XP (Extreme Programming)

Desenvolvimento Tradicional Modelo em cascata

Definição dos requisitos

Obrigatório. Os requisitos são atualizados ao longo do desenvolvimento.

Obrigatório. É gerada uma versão que servirá de base para todos os itens a seguir.

Projeto de software Opcional. Surge informalmente durante o desenvolvimento do software.

Obrigatório. E só se dá início ao término da definição dos requisitos.

Desenvolvimento Implementa os incrementos (user stories) levantados junto ao cliente.

Implementa sequencialmente cada funcionalidade que o projetista especificou no projeto.

41

Teste de sistema É feito um plano de teste antes da implementação que vão sendo executados freqüentemente.

O teste é feito apenas pela equipe de desenvolvimento no final do projeto.

Implantação Parte do software vai sendo implantada até concluir todos os requisitos.

O software só é entregue ao usuário quando estiver totalmente pronto.

Adaptado de: Pompilho (2002)

3.1.2 Comparativo sobre a gestão de riscos

Segundo Sommerville (2007), desenvolver software é uma atividade arriscada e todo

gerente de projeto deve obrigatoriamente prever os riscos que podem afetar o

desenvolvimento e a qualidade do software. Os tipos de riscos dependem da complexidade

e do ambiente de desenvolvimento. No entanto, alguns riscos são considerados universais

pela comunidade de Engenharia de Software e alguns deles são descritos na Tabela 3.

Tabela 3 - Riscos comuns em projetos de Software

RISCO DESCRIÇÃO

Alteração nos requisitos Mudanças nos requisitos não previstas

Atrasos na especificação Especificações essenciais não disponíveis nos prazos

Documentação completa Clientes que exigem documentação abrangente

Escopo fechado Contrato que define todas as atividades do projeto

Doenças e demissões Perda de pessoas-chave em períodos cruciais

Treinamento Perda de mão-de-obra para treinar novas pessoas

Mudanças gerenciais Gerenciamento organizacional com prioridades diferentes

Sistemas de premiação Incentivo a desenvolvedores que apresentarem melhores resultados

Tamanho subestimado Tamanho do sistema bem maior que o estimado

Adaptado de: Sommerville (2007); Teles (2006)

42

Baseando-se no que foi estudado até o momento sobre Desenvolvimento Tradicional

e Desenvolvimento Ágil, foi possível empiricamente montar a tabela abaixo, dando níveis de

Alto e Baixo nas questões levantadas por Sommerville (2007) e Teles (2006).

Tabela 4 - Comparativo entre o grau de risco nas metodologias tradicionais e na XP

RISCO Desenvolvimento ágil (XP)

Desenvolvimento tradicional

Alteração nos requisitos Baixo Alto

Atrasos na especificação Baixo Alto

Documentação completa Alto Baixo

Escopo fechado Alto Baixo

Doenças e demissões Baixo Alto

Treinamento Baixo Alto

Mudanças gerenciais Baixo Alto

Sistemas de premiação Alto Baixo

Tamanho subestimado Baixo Alto

Adaptado de: Sommerville (2007); Teles (2006)

Na análise feita no comparativo sobre gestão de riscos, nota-se que:

a) As boas práticas de: Cliente presente, Releases e iterações e Jogo de

planejamento fazem com que a metodologia XP seja mais aconselhável para

projetos de espoco variável em que os requisitos ainda não estão bem

definidos e que podem sofrer alterações durante o projeto, seja por mudanças

gerenciais na equipe do cliente ou mesmo por ele não conhecer ao certo a

dimensão exata do sistema. Além disso, a XP consegue reduzir problemas de

treinamento e perda de mão-de-obra devido às boas práticas de Código

43

coletivo e Programação em par, que proporciona a todos da equipe (inclusive

aos novatos), treinamento constante e conhecimento satisfatório sobre todas

as partes do sistema.

b) Em contrapartida, a XP não é aconselhável em projetos que o cliente exija

uma documentação completa do sistema logo no início do projeto, uma vez

que equipes XP priorizam colocar o sistema em funcionamento ao invés da

documentação abrangente. Outro risco para projetos que utilizam a XP é a

premiação (muitas vezes financeira) para membros da equipe de

desenvolvimento que apresentarem melhor desempenho. Essa prática trás

um sentimento de competição dentro da equipe e os levam a

comportamentos individualistas e, sem duvida a XP é um ambiente de

cooperação, e não há espaço para esse tipo de competição (TELES, 2006).

44

CAPÍTULO 4. CONCLUSÕES

Extreme Programming é uma metodologia que busca reduzir ou mesmo sanar

problemas de atrasos no cronograma, retrabalhos no projeto e desperdícios de tempo e

dinheiro nos processos de desenvolvimento. Para isso, a XP utiliza-se de uma série de

práticas que auxiliam as equipes de desenvolvimento a trabalhar de maneira mais eficiente.

Um dos fatores que tornam a XP eficiente é a integração constante entre cliente e

desenvolvedores, isso favorece para que as necessidades do cliente sejam rapidamente

compreendidas e em seguida implementadas. A programação em par também é um

diferencial da metodologia XP no requisito treinamento, enquanto que no desenvolvimento

tradicional a falta de treinamento influencia diretamente no prazo de um projeto, na

metodologia XP um dos integrantes da dupla vai sendo treinado ao longo do

desenvolvimento de maneira transparente para o projeto.

Por se tratar de uma metodologia relativamente nova que contraria muitos

paradigmas do desenvolvimento tradicional, ainda há um preconceito com a metodologia e a

dúvida sobre a eficácia da sua utilização. Mas, percebe ao longo deste trabalho que existe

grande chance nos próximos anos da metodologia XP vir a ser bastante utilizada. E que,

como em qualquer outra metodologia, ela possui pontos fracos, mas se utilizada da forma

correta, a combinação dos valores e boas práticas criam as condições necessárias para que

uma equipe de desenvolvimento obtenha sucesso em seus projetos.

45

REFERÊNCIAS

ASTELS, David; MILLER, Granville; NOVAK, Miroslav. Extreme Programming – Guia

prático. Rio de Janeiro, Ed. Campos, 2002.

BORBOREMA, Thiago. Impacto da aplicação da metodologia XP nas organizações de

desenvolvimento de software. Monografia – Curso de Sistemas de Informação, Faculdade

de Filosofia Ciência e Letras Eugênio Pacelli, Pouso Alegre, 2007.

CASTRO, Vinicius A. Desenvolvimento Ágil com Programação Extrema. Monografia –

Curso de Ciência da Computação, Universidade Federal de Sergipe, São Cristóvão,

Sergipe, 2007.

GARCIA, Luís F. Qualidade de Software – Aula 5. Disponível em:

<http://www.garcia.pro.br/Ulbra-Qualidade/Qualidade%20de%20Software%20-

20Aula%205%20-%20qualidade%20processo.pdf> Acessado em: 01/05/2009.

LEITE, Júlio C.S.P. Qualidade de Software: Teoria e Prática, Orgs. Rocha, Maldonado,

Weber, Prentice-Hall, São Paulo, 2001. Capítulo 17.

NETO, Camilo L. M. As implicações da técnica de refatoração em desenvolvimento e

manutenção de Software. Monografia (Bacharel Sistemas de Informação) Faculdade

Zacarias de Góes. Valença, 2008.

PFLEEGER, Shari L. Engenharia de Software: Teoria e Prática; tradução Dino Franklin;

Revisão técnica Ana Regina Cavalcanti da Rocha. 2ª ed. São Paulo: Prentice- Hall, 2004.

(Pearson)

PRESSMAN, Roger S. Software engineering: a practitioner's approach. 4ª ed. New York:

McGraw-Hill, 1997.

PRESSMAN, Roger S. Engenharia de software; tradução Rosângela Delloso Penteado. 6ª

ed. São Paulo: McGraw-Hill, 2006.

RODRIGUES, Ana N.; MOURA, Mirtes; RODRIGUES, Paula; SANTOS, Vanusa; DevMedia

Group – Qualidade de Software - parte 1 e 2. Disponível em:

46

<http://www.devmedia.com.br/articles/viewcomp.asp?comp=9408> Acessado em:

01/05/2009.

SENSAGENT. Disponível em: <http://dicionario.sensagent.com/feedback/en-en/> Acessado

em: 26/07/2009.

SOARES, Michel dos S. Comparação entre Metodologias Ágeis e Tradicionais para o

Desenvolvimento de Software. Unipac - Universidade Presidente Antônio Carlos

Faculdade de Tec. e Ciências de Conselheiro Lafaiete. Conselheiro Lafaiete, 2004.

SOMMERVILLE, Ian Engenharia de software; tradução André Maurício de Andrade

Ribeiro. 8ª ed. São Paulo: PEARSON UNIVERSITARIOS, 2007.

STANDISH, The Chaos Report. The Standish Group International, Inc 2001. Disponível em:

<http://www.standishgroup.com/sample_research/chaos_1994_1.php> . Última visita em

abril de 2009.

TELES, Vinícius M. Extreme Programming - Aprenda como encantar seus usuários

desenvolvendo software com agilidade e alta qualidade. Rio de Janeiro: Novatec

Editora, 2006.

TELES, Vinícius M. Um estudo de caso da adoção das práticas e valores do extreme

programming - Dissertação (Mestrado em Informática) – Universidade Federal do Rio de

Janeiro - UFRJ, 2005.

VIANA, Leonardo. M.; DESCHAMPS, Alexandro. XP – Extreme Programming. Disponível

em: <http://www.apicesoft.com/common/articles/Apice> Acessado em: 21/03/2009.

XProgramming.com What is Extreme Programming? Disponível em:

<http://xprogramming.com> Acessado em: 25/ 10/ 2009.