Buscar

Resumo Eng. De Software - Ian Sommervile

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

RESUMO ENG. DE SOFTWARE – Ian 
Sommerville 
Autor: Paulo Norberto 
CAPITULO 1 
 
• INTRODUÇÃO 
Os sistemas de software são abstratos e intangíveis. Eles não são restringidos pelas 
propriedades dos materiais, nem governados pelas leis da física ou pelos processos de 
manufatura. Isso simplifica a engenharia de software, porque não há limites naturais para o 
potencial do software. No entanto, devido a essa falta de restrição física, os sistemas de 
software podem se tornar extremamente complexos de modo muito rápido, difíceis de 
entender e caros para alterar. 
 Existem vários tipos de sistemas de software, desde os simples até os complexos. Não 
faz sentido que se busque notações, métodos ou técnicas universais para a engenharia de 
software, pois diferentes tipos de software exigem abordagens diferentes. 
 A seguir algumas causas das falhas de software: 
1. Aumento de demanda: O aumento da demanda de softwares os sistemas tem que ser 
construídos mais rapidamente, serem maiores e mais complexos, devem ter 
capacidades que antes eram consideradas impossíveis. Como os métodos e as técnicas 
de engenharia de software existentes não conseguem lidar com isso, novas técnicas de 
engenharia de software precisam ser desenvolvidas para atender a essas novas 
demandas. 
2. Expectativas baixas: Por ser fácil escrever programas de computador sem usar 
técnicas e métodos de engenharia de software, isso forçou a muitas empresas a 
desenvolver softwares à medida que seus produtos e serviços evoluíram. Como 
consequência, e por não utilizar métodos de engenharia de software no dia-a-dia, seus 
softwares são mais caros e menos confiáveis do que deveriam ser. 
 
Várias pessoas desenvolvem softwares hoje em dia, para os mais diferentes 
meios (científico, hobby, empresariais), no entanto a maior parte dos softwares é 
desenvolvido para um propósito específico de negócio. O software profissional, que é 
usado por alguém além do seu desenvolvedor, é normalmente criado por equipes, em 
vez de indivíduos. Ele é mantido e alterado durante sua vida. A engenharia de software 
inclui técnicas que apoiam especificação, projeto e evolução de programas. 
 Falar em engenharia de software não é apenas criar programas de 
computador, mas também engloba toda a documentação associada e dados de 
configuração necessários para fazer esse programa operar corretamente. Um sistema 
de software desenvolvido profissionalmente é mais que apenas um programa; ele é 
normalmente uma série de programas separados e arquivos de configuração usados 
para configurar esses programas. Isso inclui documentação do sistema (descreve a sua 
estrutura), documentação do usuário (explica como usar o sistema), e sites para o 
usuário baixar informações recentes do produto. 
Engenheiros de software preocupam-se em desenvolver produtos de softwares 
(softwares que podem ser vendidos). Existem dois tipos de produtos de software: 
1. Produtos genéricos: São os sistemas chamados stand-alone, que são os que são 
vendidos para qualquer cliente que esteja interessado em compra-los. Exemplos: 
ferramentas de banco de dados, processadores de texto, pacotes gráficos, etc. E 
também as aplicações verticais, tais como, sistemas de biblioteca, contabilidade, e 
manutenção de registros de alguma empresa. 
2. Produtos sob encomenda: São criados para atender um fim específico e um cliente 
particular. É desenvolvido especificamente para esse cliente. Exemplo: sistema de 
controle de tráfego aéreo. 
 
O que é software? R: Softwares são programas de computador e documentação 
associada. 
Quais os atributos de um 
bom software? 
R: Prover a funcionalidade e o desempenho requerido pelo 
usuário; deve ser confiável, fácil de manter e usar. 
Quais as principais 
atividades da engenharia de 
software? 
R: Especificação de software, desenvolvimento de software, 
validação de software e evolução de software. 
Quais os principais desafios 
da engenharia de software? 
R: Lidar com o aumento de diversidade, demandas pela 
diminuição do tempo para a entrega e desenvolvimento de 
software confiável. 
Quais sãos os custos da 
engenharia de software? 
R: 60% de desenvolvimento e 40% de testes. 
 
 Sobre a qualidade dos softwares profissionais, devemos lembrar que o software 
é alterado pelas pessoas, além dos seus desenvolvedores. A qualidade não é apenas o 
que o software faz, mas também como ele se comporta quando está sendo executado, 
bem como a estrutura e a organização dos programas do sistema e a documentação 
associada. Isso reflete nos atributos de software, que são chamados de não funcionais 
ou de qualidade. Exemplos desses atributos: Tempo de resposta a uma consulta 
realizada pelo usuário e a compreensão do código do programa. A seguir uma tabela 
com as características essenciais de um sistema profissional de software: 
Manutenibilidade O software deve ser escrito de forma que possa evoluir para 
atender às necessidades do cliente. Esse é um atributo crítico, 
porque a mudança de software é um requisito inevitável de um 
ambiente de negócios em mudança. 
Confiança e 
proteção 
Inclui uma série de características como: confiabilidade, proteção 
e segurança. O software não pode causar prejuízos físicos ou 
financeiros no caso de falha no sistema e usuários maliciosos não 
devem ser capazes de acessar ou prejudicar o sistema. 
Eficiência O software não deve desperdiçar os recursos de sistema, como 
memória e ciclos do processador. Deve ser eficiente na 
capacidade de resposta, tempo de processamento, uso de 
memória, etc. 
Aceitabilidade O software deve ser aceitável para o tipo de usuário para o qual 
foi projetado. Isso significa que ele deve ser compreensível, 
usável e compatível com outros sistemas usados por ele. 
 
 A engenharia de software não se preocupa apenas com os processos técnicos 
do desenvolvimento de software. Ela também inclui atividades como gerenciamento 
de projeto de software e desenvolvimento de ferramentas, métodos e teorias para 
apoiar a produção de software. Engenharia tem haver com obter resultados de 
qualidades requeridos dentro do cronograma e do orçamento. 
 A abordagem sistemática usada na engenharia de software é, às vezes, 
chamada processo de software. Um processo de software é uma sequência de 
atividades que leva à produção de um produto de software. Existem quatro atividades 
fundamentais comuns a todos os processos de software. São elas: 
1. Especificação de software: Clientes e engenheiros definem o que será 
produzido e as suas restrições de operação. 
2. Desenvolvimento de software: projeto e programação 
3. Validação de software: O software é verificado para garantir que está de 
acordo com o que o cliente quer. 
4. Evolução de software: O software é modificado para atender a mudança de 
requisitos do cliente e do mercado. 
 
Além das quatro atividades fundamentais também existem três aspectos 
gerais que afetam vários tipos diferentes de software: 
1. Heterogeneidade: O sistema deve rodar em diferentes tipos de computadores e 
dispositivos móveis. Integração entre sistemas novos e antigos e escritos em 
linguagens de programação diferentes. Desenvolver um software confiável que 
seja flexível o suficiente para lidar com essa heterogeneidade. 
2. Mudança de negócio e social: As técnicas de desenvolvimento devem evoluir 
junto com a sociedade e o surgimento de novas tecnologias para que o tempo 
requerido para o software da retorno a seus clientes seja reduzido também. 
3. Segurança e confiança: Precisamos ter certeza de que os usuários maliciosos 
não possam atacar nosso software e de que a proteção da informação seja 
mantida. 
 
Engenharia de software é uma abordagem sistemática para a produção de software;ela 
analisa questões práticas de custo, prazo e confiança, assim como as necessidades dos clientes 
e produtores do software. A forma como ela é realmente implementada varia de acordo com a 
organização que está desenvolvendo, o tipo de software e as pessoas envolvidas no processo 
de desenvolvimento. Não existe um método global de desenvolvimento, mas um conjunto 
diverso de métodos e ferramentas. Talvez o fator mais significante em determinar quais 
técnicas e métodos de engenharia de software são mais importantes seja o tipo de aplicação a 
ser desenvolvida. Vejam alguns tipos diferentes de aplicações: 
1. Aplicações stand-alone: Aplicações executadas em computador local, não precisam 
estar conectadas a uma rede. 
2. Aplicações interativas baseadas em transações; 
3. Sistemas de controle embutido; 
4. Sistemas de processamento de lote; 
5. Sistemas de entretenimento; 
6. Sistemas para modelagem e simulação; 
7. Sistemas de coleta de dados; 
8. Sistemas de Sistemas. 
 
Além disso, existem fundamentos de engenharia de software que se aplicam a todos os 
tipos de sistemas de software: 
1. Eles devem ser desenvolvidos em um processo gerenciado e compreendido; 
2. Confiança e desempenho são importantes para todos os tipos de sistema; 
3. É importante entender e gerenciar as especificações e os requisitos de software (o 
que o software deve fazer); 
4. Você deve fazer o melhor uso possível dos recursos existentes. 
 
Pontos importantes: 
 Software não é apenas um programa ou programas; ele inclui também a 
documentação. Os atributos principais de um produto de software são 
manutenibilidade, confiança, proteção, eficiência e aceitabilidade. 
 O processo de software inclui todas as atividades envolvidas no desenvolvimento 
do software. Atividades de alto nível de especificação, desenvolvimento, validação 
e evolução é parte de todos os processos de software. 
 As ideias fundamentais da engenharia de software são universalmente aplicáveis 
para todos os tipos de desenvolvimento de sistemas. Esses fundamentos incluem 
processos de software, confiança, proteção, requisitos e reuso. 
 Existem vários tipos diferentes de sistemas, e cada um requer ferramentas e 
técnicas de engenharia de software adequadas a seu desenvolvimento. Existem 
poucas, se houver alguma, técnicas específicas de projeto e implementação 
aplicáveis a todos os tipos de sistemas. 
 As ideias básicas da engenharia de software são aplicáveis a todos os tipos de 
sistemas de software. Esses fundamentos incluem processos de software 
gerenciados, confiança e proteção de software, engenharia de requisitos e reuso 
de software. 
 
CAPITULO 2 
 
 Um processo de software é um conjunto de atividades relacionadas que levam à 
produção de um produto de software. Existem muitos processos de softwares diferentes, mas 
todos devem incluir quatro atividades fundamentais para a engenharia de software: 
1. Especificações de software 
2. Projeto e implementação de software 
3. Validação de software 
4. Evolução de software 
Os processos de software, às vezes, são categorizados como dirigidos a planos 
ou a processos ágeis. Processos dirigidos a planos são aqueles em que todas as 
atividades são planejadas com antecedência, e o progresso é avaliado por comparação 
com o projeto inicial. Em processos ágeis o planejamento é gradativo, e é mais fácil 
alterar o processo de maneira a refletir as necessidades de mudança dos clientes. 
Geralmente, é necessário encontrar um equilíbrio entre os processos ágeis e os 
processos dirigidos a planos. 
 A seguir alguns modelos de processos utilizados na engenharia de software: 
 
 Modelo em cascata: 
 
 
 
1. Análise e definição de requisitos: Os serviços, restrições, e metas do 
sistema são estabelecidos por meio de consulta ao usuário. Em seguida, são 
definidos em detalhes e funcionam como uma especificação do sistema. 
2. Projeto de sistema e software: O processo de projeto de sistemas aloca os 
requisitos tanto para sistemas de hardware como para os sistemas de 
software, por meio da definição de uma arquitetura geral do sistema. O 
projeto de software envolve identificação e descrição das abstrações 
fundamentais do sistema de software e seus relacionamentos. 
3. Implementação e teste unitário: Durante esse estágio, o projeto de 
software é desenvolvido como um conjunto de programas ou unidades de 
programas. O teste unitário envolve a verificação de que cada unidade 
atenda a sua especificação. 
4. Integração e teste de sistema: As unidades individuais do programa ou 
programas são integradas e testadas como um sistema completo para 
assegurar que os requisitos do software tenham sido atendidos. Após o 
teste, o software é entregue ao cliente. 
5. Operação e manutenção: A manutenção envolve a correção de erros que 
não foram descobertos em estágios iniciais. 
 
Nesse modelo, o estágio seguinte não deve ser iniciado até que a fase anterior seja 
concluída. Por causa dos custos de produção e aprovação de documentos, as iterações podem 
ser dispendiosas e envolver significativos retrabalho. 
 
 Desenvolvimento incremental 
 
 
 
 Essa abordagem intercala as atividades de especificação, desenvolvimento e 
validação. O sistema é desenvolvido como uma série de versões (incrementos), de 
maneira que cada versão adiciona funcionalidade à anterior. As atividades de 
especificação, desenvolvimento e validação são intercaladas, e não separadas, com 
rápido feedback entre todas as atividades. 
 
 Engenharia de software orientada a reuso 
Na maioria dos projetos de software, há algum reuso de software. Isso acontece 
muitas vezes informalmente, quando as pessoas envolvidas no projeto sabem de 
projetos ou códigos semelhantes ao que é exigido. Elas o buscam, fazem as 
modificações necessárias e incorporam-nos a seus sistemas. 
Apesar do modelo de reuso ter estágios comparáveis com outros processos de 
software, ele difere nos estágios intermediários. Vejam quais são eles: 
1. Análise de componentes: Dada a especificação de requisitos, é feita uma busca 
de componentes para implementar essa especificação. Os componentes que 
podem ser usados podem apenas fornecer alguma funcionalidade necessária. 
2. Modificação de requisitos: Durante esse estágio, os requisitos são analisados 
usando-se informações sobre os componentes que foram descobertos. Em 
seguida, estes serão modificados para refletir os componentes disponíveis. 
3. Projeto do sistema com reuso: Durante este estágio, o framework do sistema é 
projetado ou algo existente é reusado. Os projetistas têm em mente os 
componentes que serão reusados e organizam o framework para reuso. 
4. Desenvolvimento e integração: Softwares que não podem ser adquiridos 
externamente são desenvolvidos, e os componentes e sistemas são integrados 
para criar o novo sistema. A integração de sistemas, nesse modelo, pode ser 
parte do processo de desenvolvimento, em vez de uma atividade separada. 
 
Engenharia de software orientada a reuso tem a vantagem óbvia de reduzir a 
quantidade de software a ser desenvolvido, e, assim, reduzir custos e riscos. Geralmente, 
também proporciona a entrega mais rápida do software. 
Especificação de software ou engenharia de requisitos é o processo de compreensão e 
definição dos serviços requisitados do sistema e identificação de restrições relativas à 
operação e ao desenvolvimento do sistema. Essa é uma parte crítica do processo de software, 
pois erros nessa fase inevitavelmente geram problemas no projeto e na implementação do 
sistema. 
O processo de engenharia de requisitos tem como objetivo produzir um documento de 
requisitos acordados que especifica um sistema que satisfazos stakeholders. Existem quatro 
atividades principais do processo de engenharia de requisito: 
1. Estudo de viabilidade 
2. Elicitação e análise de requisitos 
3. Especificação de requisitos 
4. Avaliação de requisitos. 
 
As atividades no processo de requisitos não são feitas em apenas uma sequencia. A 
análise de requisitos continua durante a definição e especificação, e novos requisitos emergem 
durante o processo. Por tanto, as atividades de análise, definição e especificação são 
intercaladas. 
O estágio de implementação do desenvolvimento de software é o processo de 
conversão do sistema em um sistema executável. Um projeto de software é uma descrição da 
estrutura do software a ser implementado, dos modelos e estruturas de dados usados pelo 
sistema, das interfaces entre os componentes do sistema e, às vezes, dos algoritmos usados. 
Os projetistas não chegam a um projeto final imediatamente, mas desenvolvem-no de forma 
iterativa. Eles acrescentam formalidade e detalhes, enquanto desenvolvem seu projeto por 
meio de revisões constantes para correção de projetos anteriores. 
A validação de software tem a intenção de mostrar que um software se adequa a suas 
especificações ao mesmo tempo em que satisfaz as especificações do cliente do sistema. O 
teste do programa é a principal técnica de validação. A validação também pode envolver 
processos de verificação, como inspeções e revisões, em cada estágio do processo de 
software, desde a definição dos requisitos de usuários até o desenvolvimento do programa. 
Erros em componentes de programa podem vir à luz durante os testes de sistema. O 
processo é, portanto, iterativo, com informações realimentadas de estágios posteriores para 
partes anteriores do processo. Os estágios do processo de teste são: 
1. Testes de desenvolvimento 
2. Teste de sistema 
3. Teste de aceitação 
Se uma abordagem incremental é usada para o desenvolvimento, cada incremento deve ser 
testado enquanto é desenvolvido. 
• Pontos importantes: 
 Os processos de software são as atividades envolvidas na produção de um sistema 
de software. Modelos de processos de software são representações abstratas 
desses processos. 
 Modelos gerais de processo descrevem a organização dos processos de software. 
Exemplos desses modelos gerais incluem o modelo em cascata, o desenvolvimento 
incremental e o desenvolvimento orientado a reuso. 
 Engenharia de requisitos é o processo de desenvolvimento de uma especificação 
de software. As especificações destinam-se a comunicas as necessidades de 
sistemas dos clientes para os desenvolvedores do sistema. 
 Processos de projeto e implementação estão relacionados com a transformação 
das especificações dos requisitos em um sistema de software executável. Métodos 
sistemáticos de projetos podem ser usados como parte dessa transformação. 
 Validação de software é o processo de verificação de que o sistema está de acordo 
com a sua especificação e satisfaz às necessidades reais do usuário do sistema. 
 Evolução de software ocorre quando se alteram os atuais sistemas de software 
para atender aos novos requisitos. As mudanças são continuas, e o software deve 
evoluir para continuar útil. 
 Processos devem incluir atividades para lidar com as mudanças. Podem envolver 
uma fase de prototipação, que ajuda a evitar más decisões sobre os requisitos e 
projetos. Processos podem ser estruturados para o desenvolvimento e a entrega 
iterativos, de forma que mudanças possam ser feitas sem afetar o sistema como 
um todo. 
 RUP é um moderno modelo genérico de processo, organizado em fases 
(concepção, elaboração, construção e transição), mas que separa as atividades 
(requisitos, análises, projetos, etc.) dessas fases. 
 
 
CAPITULO	
  3	
  
	
  
 Os processos de desenvolvimento rápido de software são concebidos para produzir, 
rapidamente, softwares úteis. O software não é desenvolvido como uma única unidade, mas 
como uma série de incrementos – cada incremento inclui uma nova funcionalidade do 
sistema. Embora existam muitas abordagens para o desenvolvimento rápido de software, elas 
compartilham algumas características fundamentais: 
1. Os processos de especificação, projeto e implementação são intercalados. 
2. O sistema é desenvolvido em uma série de versões. 
3. Interfaces de usuário do sistema são geralmente desenvolvidas com um sistema 
interativo de desenvolvimento que permite a criação rápida do projeto de 
interface por meio de desenho e posicionamento de ícones na interface. 
Os métodos ágeis são métodos de desenvolvimento incremental em que os 
incrementos são pequenos e, normalmente, as novas versões do sistema são criadas e 
disponibilizadas aos clientes a cada duas ou três semanas. Elas envolvem os clientes no 
processo de desenvolvimento para obter feedback rápido sobre a evolução dos requisitos. 
Assim, minimiza-se a documentação, pois se utiliza mais a comunicação informal do que 
reuniões formais com documentos escritos. 
Métodos ágeis permitiram que a equipe de desenvolvimento focasse no software em 
si, e não em sua concepção e documentação. Métodos ágeis, universalmente, baseiam-se 
em uma abordagem incremental para a especificação, o desenvolvimento e a entrega do 
software. Destinam-se a entregar o software rapidamente aos clientes, em funcionamento, 
e estes podem, em seguida, propor alterações e novos requisitos a serem incluídos nas 
iterações posteriores do sistema. Tem como objetivo reduzir a burocracia do processo, 
evitando qualquer trabalho de valor duvidoso de longo prazo e qualquer documentação 
que provavelmente nunca será usada. 
 
Os princípios dos métodos ágeis: 
Envolvimento do cliente Os clientes devem estar intimamente envolvidos no processo 
de desenvolvimento. Seu papel é fornecer e priorizar novos 
requisitos do sistema e avaliar suas iterações. 
Entrega incremental O software é desenvolvido em incrementos com o cliente, 
especificando os requisitos pra serem incluídos em cada um. 
Pessoas, não processos. As habilidades da equipe de desenvolvimento devem ser 
reconhecidas e exploradas. Membros da equipe devem 
desenvolver suas próprias maneiras de trabalhar, sem 
processos prescritivos. 
Aceitar as mudanças Deve-se ter em mente que os requisitos do sistema vão 
mudar. Por isso, projete o sistema de maneira a acomodar 
essas mudanças. 
Manter a simplicidade Focalize a simplicidade, tanto do software a ser desenvolvido 
quanto do processo de desenvolvimento. Sempre que 
possível, trabalhe ativamente para eliminar a complexidade 
do sistema. 
 
Abordagens ágeis de desenvolvimento de software consideram o projeto e a 
implementação como atividades centrais no processo de software. Eles incorporam outras 
atividades, como elicitação de requisitos e testes no projeto e na implementação. Em 
contrapartida, uma abordagem de engenharia de software dirigida a planos identifica estágios 
distintos do processo de software com saídas associadas a cada estágio. As saídas de um 
estágio são usadas como base para o planejamento da atividade do processo a seguir. 
Em uma abordagem dirigida a planos, ocorrem iterações no âmbito das atividades com 
documentos formais, usados para estabelecer a comunicação entre os estágios do processo. 
Por exemplo, os requisitos vão evoluir e, finalmente, será produzida uma especificação de 
requisitos. Em uma abordagem ágil, iterações ocorrem em todas as atividades. Por tanto, os 
requisitos e o projeto são desenvolvidos em conjunto, e não separadamente. 
Extreme Programming (XP) é talvez o mais conhecido e mais utilizado dos métodos 
ágeis, pois a abordagem foi desenvolvida para impulsionar práticas reconhecidamente boas, 
como o desenvolvimento iterativo, a níveis ‘extremos’.Por exemplo, em XP, várias novas 
versões de um sistema podem ser desenvolvidas, integradas e testadas em um único dia por 
programadores diferentes. 
Em extreme Programming, os requisitos são expressos como cenários (chamados de 
estórias do usuário), que são implementados diretamente como uma série de tarefas. Os 
programadores trabalham em pares e desenvolvem testes para cada tarefa antes de escreverem 
o código. Quando o novo código é integrado ao sistema, todos os testes devem ser executados 
com sucesso. Há um curto intervalo entre os releases do sistema. 
Extreme Programming envolve uma série de práticas que refletem os princípios dos 
métodos ágeis: 
1. O desenvolvimento incremental é sustentado por meio de pequenos e frequentes 
releases do sistema. 
2. O envolvimento do cliente é sustentando por meio do engajamento contínuo do 
cliente com a equipe de desenvolvimento. 
3. Pessoas – não processos – são sustentadas por meio de programação em pares, 
propriedade coletiva do código do sistema e um processo de desenvolvimento que 
não envolve horas excessivas de trabalho. 
4. As mudanças são aceitas por meio de releases contínuos para os clientes. 
5. A manutenção da simplicidade é feita por meio da refatoração constante que 
melhora a qualidade do código, bem como por meio de projetos simples que não 
antecipam desnecessariamente futuras mudanças no sistema. 
 
Em um processo XP, os clientes estão intimamente envolvidos na especificação e 
priorização dos requisitos do sistema. Os requisitos não estão especificados como uma lista de 
funções requeridas do sistema. Pelo contrário, o cliente do sistema é parte da equipe de 
desenvolvimento e discute cenários com outros membros da equipe. Juntos, eles desenvolvem 
um ‘cartão de estórias’, englobando as necessidades do cliente. A equipe de 
desenvolvimento, então, tenta implementar esse cenário em um release futuro do software. 
Os cartões de estória são as principais entradas para o processo de planejamento em XP ou 
‘jogo de planejamento’. Esse processo geralmente envolve discussões com o cliente para 
refinamento dos requisitos. O cliente, então, prioriza as estórias para implementação, 
escolhendo aquelas que podem ser usadas imediatamente para oferecer apoio aos negócios. A 
intenção é identificar funcionalidade útil que possa ser implementada em cerca de duas 
semanas, quando o próximo release do sistema é disponibilizado para o cliente. 
Claro que, como os requisitos mudam, as estórias não implementadas mudam ou podem 
ser descartadas. Se houver necessidade de mudanças em um sistema que já tenha sido 
entregue, novos cartões de estória são desenvolvidos e, mais uma vez, o cliente decide se 
essas mudanças devem ter prioridade sobre a nova funcionalidade. 
Para evitar alguns dos problemas de teste e validação do sistema, a abordagem XP 
enfatiza a importância dos testes do programa. Extreme Programming incluiu uma abordagem 
de testes que reduz as chances de erros desconhecidos na versão atual do sistema. 
As principais características dos testes em XP são: 
1. Desenvolvimento test-first 
2. Desenvolvimento de teste incremental a partir de cenários 
3. Envolvimentos dos usuários no desenvolvimento de testes e validação 
4. Uso de frameworks de testes automatizados. 
 
O desenvolvimento test-first é uma das mais importantes inovações no XP. Em vez de 
escrever algum código e, em seguida, escrever testes para esse código, você escreve os testes 
antes do código. Isso significa que você pode executar o teste enquanto o código está sendo 
escrito e pode encontrar problemas durante o desenvolvimento. 
No desenvolvimento test-first, os implementadores de tarefas precisam entender 
completamente a especificação para que possam escrever testes para o sistema. Isso significa 
que as ambiguidades e omissões da lista de especificações devem ser esclarecidas antes do 
inicio da implementação. Além disso, também evita o problema de ‘test-lag’. Isso pode 
acontecer quando o desenvolvedor do sistema trabalha em um ritmo mais rápido que o 
testador. A implementação fica mais e mais à frente dos testes e desenvolve-se uma tendência 
a ignorar os testes, a fim de que o cronograma de desenvolvimento possa ser mantido. 
Outra prática inovadora introduzida no XP é que, para desenvolver o software, os 
programadores trabalhem em pares. Na verdade, para desenvolver o software eles se sentam 
juntos, na mesma estação de trabalho. No entanto, os mesmos pares nem sempre programam 
juntos. Pelo contrario, os pares são criados de maneira dinâmica, de modo que todos os 
membros da equipe trabalhem uns com os outros durante o processo de desenvolvimento. 
O uso da programação em pares tem uma série de vantagens: 
1. Dá suporte a ideia de propriedade e responsabilidade coletiva para o sistema. 
2. Atua como um processo de revisão informal, porque cada linha de código é 
observada por, pelo menos, duas pessoas. 
3. Dá suporte à refatoração, que é um processo de melhoria de software. 
 
• PONTOS IMPORTANTES: 
1. Métodos ágeis são métodos de desenvolvimento incremental que se concentram 
em desenvolvimento rápido, releases frequentes do software, redução de 
overheads dos processos e produção de códigos de alta qualidade. Eles envolvem o 
cliente diretamente no processo de desenvolvimento. 
2. A decisão de usar uma abordagem dirigida a planos para o desenvolvimento deve 
depender do tipo de software a ser desenvolvido, das habilidades da equipe de 
desenvolvimento e da cultura da empresa que desenvolve o sistema. 
3. Extreme Programming é um método ágil, bem conhecido, que integra um 
conjunto de boas praticas de programação, como releases frequentes do software, 
melhorias contínuas do software e participação do cliente na equipe de 
desenvolvimento. 
4. Um ponto forte da Extreme Programming é o desenvolvimento de testes 
automatizados antes da criação de um recurso do programa. Quando um 
incremento é integrado ao sistema, todos os testes devem ser executados com 
sucesso. 
5. O método Scrum é uma metodologia ágil que fornece um framework de 
gerenciamento de projetos. É centralizado em torno de um conjunto de sprints, 
que são períodos determinados de tempo, quando um incremento de sistema é 
desenvolvido. O planejamento é baseado na priorização de um backlog de 
trabalho e na seleção das tarefas mais importantes para um sprint. 
6. O escalamento de métodos ágeis para sistemas de grande porte é difícil. Tais 
sistemas necessitam de projeto adiantado e alguma documentação. A integração 
continua é praticamente impossível quando existem varias equipes de 
desenvolvimento separadas trabalhando em um projeto.

Outros materiais