Contextualizando XP para Web
engineering
Américo Tadeu Falcone Sampaio
[email protected]
Visão geral do trabalho
• Apresentar conceitos e uma visão geral
sobre Extreme Programming (XP);
• Apresentar conceitos sobre Web
Engineering;
• Contextualizar XP dentro da Web
Engineering e verificar possibilidades de
adaptação da metodologia.
Extreme Programming (XP)
• É uma metodologia ágil de engenharia de software, ou
seja, promove:
–
–
–
–
Indivíduos e interações ao invés de processos e ferramentas;
Software que “roda” ao invés de documentação em demasia;
Colaboração do cliente ao invés de negociação de contratos;
Responder a mudanças ao invés de seguir um plano rígido.
• O objetivo de XP é servir como um processo ágil de engenharia
de software cujo principal foco é entregar funcionalidades de
forma rápida e eficiente. Além disso, XP foi criado
considerando que mudanças são inevitáveis e que devem ser
incorporadas constantemente.
Conceitos básicos
• Valores: Comunicação, simplicidade, feedback e coragem. Estes quatro
valores servem como critérios que norteiam as pessoas envolvidas no
desenvolvimento de software seguindo a metodologia XP.
• Princípios fundamentais: feedback rápido, assumir simplicidade,
mudança incremental, abraçando mudanças e trabalho de qualidade.
• Práticas: Jogo do planejamento (The planning game); Releases
pequenas (Small releases); Metáfora (Metaphor); Projeto simples
(Simple design); Testando (Testing); Refactoring; Programação em par
(Pair programming); Posse coletiva do código (Collective ownership);
Integração contínua (Continuous integration); 40 horas por semana
(40-hour week); Cliente no local (On-site customer); Padrões de
codificação (Coding standards).
Valores
• Comunicação: XP se foca em construir um entendimento pessoa-parapessoa do problema com o uso mínimo de documentação formal e com o
uso máximo de interação cara-a-cara entre as pessoas envolvidas no
projeto.
• Simplicidade: XP sugere que cada membro da equipe adote a solução mais
fácil que possa funcionar. O objetivo é fazer aquilo que é mais simples
hoje e criar um ambiente em que o custo de mudanças no futuro é baixo.
• Feedback: O feedback é importante pois possibilita que as pessoas
aprendam cada vez mais sobre o sistema e assim corrijam os erros e
melhorem o sistema.
• Coragem: Ela é necessária para que realmente se aplique XP como deve
ser aplicado. Exemplos de atitude que exigem coragem são: alterar código
já escrito e que está funcionando; jogar código fora e reescrever tudo de
novo; e permitir código compartilhado por todos.
Princípios
• Feedback rápido – Um dos princípios é receber o feedback,
interpretá-lo e colocar o que foi aprendido de volta no sistema o
mais rápido possível. Os programadores aprendem a melhor forma
de projetar, implementar e testar o sistema e retornam o
aprendizado.
• Assumir simplicidade – Todo problema deve ser tratado para ser
resolvido da forma mais simples possível. XP afirma que se deve
fazer um bom trabalho (testes, refactoring, comunicação) em
resolver hoje os problemas de hoje e confiar na sua habilidade de
adicionar complexidade no futuro quando for necessária.
• Mudança incremental – Quando muitas mudanças são realizadas
todas de uma vez, não se obtêm um bom resultado. Em vez disso,
esse princípio de XP diz que as mudanças devem ser incrementais
e feitas aos poucos.
Princípios - Continuação
 Abraçando mudanças (Embracing Change) – XP procura
facilitar o ato de incluir alterações através do uso de vários
princípios e práticas.
 Trabalho de qualidade – Em XP, qualidade não é um
critério opcional mas sim obrigatório. Embora a definição
de qualidade possa variar de pessoa para pessoa, XP trata
qualidade no sentido de se ter um sistema que atenda os
requisitos do cliente, que rode 100% dos casos de teste e
que agregue o maior valor possível para o negócio.
Práticas
• O jogo do planejamento (The planning game) – No final de cada release é
feita uma determinação rápida do escopo da próxima, através da
combinação de estimativas e prioridades do negócio. Uma release
consiste de várias iterações e, em cada iteração, várias estórias (use case
simplificadas) são implementadas. Os programadores estimam cada
estória e dizem quantas eles podem implementar no final da release.
• Releases pequenas (Small releases) – Beck diz: “cada release deve ser tão
pequena quanto possível, contendo os requisitos mais importantes para o
negócio”. Isso possibilita ter releases freqüentes o que resulta em maior
feedback para clientes e programadores, facilitando o aprendizado e a
correção dos defeitos do sistema.
• Metáfora (Metaphor) – A intenção da metáfora é oferecer uma visão geral
do sistema, em um formato simples, que possa ser compartilhada por
clientes e programadores. É semelhante a uma arquitetura porém feita de
uma forma mais simples.
Práticas - continuação
• Projeto simples (Simple Design) – Pode-se explicar esta prática em
duas partes: A primeira diz que devem ser projetadas as
funcionalidades que já foram definidas e não as que poderão ser
definidas futuramente. A segunda diz que deve ser feito o melhor
projeto que possa entregar tais funcionalidades.
• Testando (Testing) – Os casos de testes em XP são feitos antes da
programação. Existem dois tipos de teste: teste de unidade e teste
funcional. Os testes de unidade são feitos para verificar tudo que possa
dar errado. Os testes são automatizados, e toda vez que o programador
escrever código, ele irá verificar se o sistema roda 100%.
• Refactoring – Essa prática pode ser definida como constantes
melhorias no projeto do software para aumentar sua capacidade de se
adaptar a mudanças. O refactoring consiste em aplicar uma série de
passos para melhorar o projeto do código existente, tornando-o mais
simples, sem alterar sua funcionalidade.
Práticas - continuação
• Posse coletiva do código (Collective ownership) – Qualquer
membro do projeto pode alterar qualquer parte do código a
qualquer tempo. A programação em par encoraja duas pessoas a
trabalharem juntas procurando atingir o melhor resultado possível.
Enquanto isso, a posse coletiva encoraja a equipe inteira a
trabalhar mais unida em busca de qualidade no código.
• Integração contínua (Continuous integration) – O código escrito
deve ser constantemente integrado na versão atual. As alterações
feitas não podem quebrar o que foi feito antes devem passar em
100% dos testes.
• 40 horas por semana (40-hour week) – Essa não é uma regra que
obriga as equipes em projetos XP a trabalharem somente 40 horas
por semana. No entanto, Beck diz que não se deve trabalhar 2
semanas seguidas além desse tempo, pois o cansaço e a
insatisfação de trabalhar horas extras pode resultar numa queda de
qualidade do código.
Práticas - continuação
• Cliente no local (On-site customer) – Deve ser incluído na
equipe uma pessoa da parte do cliente, que irá usar o sistema,
para trabalhar junto com os outros e responder as perguntas e
dúvidas.
• Padrões de codificação (Coding standards) – Como XP prega a
posse coletiva de código, onde todos podem alterar e fazer
refactoring de qualquer parte do código a qualquer momento,
então é mais do que necessário que se tenha padrões de
codificação. O objetivo é que todos programem da mesma
forma, facilitando o entendimento do código e as alterações.
Web Engineering
• Tópico recente da área de engenharia de
software;
• Preocupa-se com as características inerentes
aos sistemas Web.
• Procura abordar aspectos que diferem da ES
tradicional e como adaptar metodologias e
processos de software existentes para o
desenvolvimento de sistemas para a Web;
Caraterísticas dos sistemas Web
• Diversos tipos de clientes que podem acessar o
sistema via browsers distintos, via dispositivos
wireless (celulares, PDAs, Pocket PCs);
• Possui uma arquitetura hipermídia distribuída;
• Rodam em ambientes heterogêneos com diversos
tipos de hardware e software;
• Estão constantemente sendo alterados e integrados
com outros sistemas e dispositivos.
Cenário atual de projetos de software
• Ciclos de desenvolvimento curtos, tipicamente 3
meses ou menos;
• Times de desenvolvimento pequenos (4 a 6 pessoas) e
multidisciplinares;
• Melhor teste e avaliação dos produtos construídos;
• Em projetos de sistemas Web:
– Mais rigor na análise de requisitos, incluindo uma
análise clara das necessidades de negócio e
preocupação com requisitos não funcionais;
– Preocupação com questões de navegação e interfaces;
– Maior preocupação com as questões relativas a
evolução e integração dos sistemas Web.
• Processos ágeis surgem levando em consideração as
questões acima. A Web Engineering pode se beneficiar
de metodologias ágeis.
O que existe atualmente
• Existem técnicas e metodologias que podem
ser incorporadas em processos de software
como RUP e XP fazendo as devidas
adaptações.
– Técnicas de modelagem baseadas na UML com
extensões para aplicações WEB (WAE, W2000,
etc).
– Metodologias de Projeto de sistemas
Hipermídia (HDM, OOHDM e outras).
• Não são processos completos de ES.
Extensões de UML
• 3 características importantes para estender a UML
para a Web que são: modelagem de elementos
específicos de aplicações Web tais como página
cliente, pagina servidor, links, frames, formulários
entre outros; navegação; e apresentação
(interface).
• Existem 3 abordagens feitas respectivamente por
J. Conallen (WAE), N. Koch (Koch) e L. Baresi
(Framework W2000).
Extensões de UML - Comparação
• A WAE (Web Application Extension), proposta por J. Conallen,
define um conjunto de estereótipos para modelagem dos
elementos específicos descritos anteriormente, porém não
atende a um aspecto muito importante que é o da navegação.
• A extensão proposta por N. Koch , que é baseada na OOHDM
(Object Oriented Hipermedia Design Method) , trata dos
aspectos de navegação e apresentação, porém não define
estereótipos para modelar os elementos básicos.
• O framework W2000, proposto por L. Baresi, é uma
caracterização do HDM (Hipermedia Design Method) usando o
meta modelo da UML. Ele trata apenas dos aspectos de
navegação.
Extensões UML – Quadro Resumo
Técnicas de Projeto de sistemas
Hipermídia
• Sistemas Web podem ser considerados sistemas
Hipermídia.
• Essas técnicas podem ser incorporadas dentro
de um processo de engenharia de software.
• As principais são HDM (Hipermidia Design
Method) e OOHDM (Object Oriented
Hipermedia Design Method)
OOHDM
• Em OOHDM, uma aplicação hipermídia é construída
em um processo de cinco passos em um estilo
iterativo e incremental. Cada passo mantém seu foco
em um interesse particular de projeto e um modelo
orientado a objetos é construído. Classificação,
agregação e generalização/especialização são usadas
durante o processo para melhorar o poder de
abstração e as oportunidades de reuso.
• Possui cinco atividades: captura de requisitos,
modelagem de domínio ou conceitual, projeto
navegacional, projeto da interface abstrata e
implementação
Resumo dos passos de OOHDM
• O primeiro passo é capturar os requisitos do sistema.
• Os cenários são então coletados para formar uma Use Case que
é representada usando Diagramas de Interação do Usuário
(UID). Em seguida, um conjunto de guidelines é aplicado aos
UIDs para extrair o modelo conceitual.
• O próximo passo é construir o modelo conceitual do domínio da
aplicação usando técnicas conhecidas de modelagem orientada a
objetos, além de algumas primitivas para perspectivas de
atributos (atributos multivalorados) similares às perspectivas
HDM.
• Na atividade de projeto da interface abstrata o modelo é
construído pela definição de objetos perceptíveis (ex. figura,
mapa, etc.) em termos de classes de interface
• Na implementação ocorre o mapeamento dos objetos de
interface em objetos implementacionais
XP e Web Engineering
• Web Engineering possui características como: equipes
multidisciplinares (XP); ciclos curtos de desenvolvimento
(XP); grande quantidade de requisitos não funcionais;
preocupação com questões de navegação e interfaces;
preocupação com as questões relativas a evolução e
integração dos sistemas Web; e mudanças constantes nos
requisitos (XP).
• XP atende a algumas dessas características e falha em outras.
– Atende: ver acima (XP)
– Não atende  a metodologia precisa ser adaptada
• XP pode ser adaptado para a Web Engineering
Falha de XP: Navegação e Interface
• Uma das questões fundamentais no desenvolvimento de
sistemas para a Web é a do projeto da navegação e das páginas
do Website. Os sistemas Web são concebidos para serem usados
por diversos tipos de usuário, com perfis e funções diferentes,
que podem navegar de diversas maneiras para obter informações
de seu interesse. Então, qualquer metodologia que trate da
construção de sistemas Web deve levar isso em consideração.
• Ao analisar a metodologia XP nota-se a omissão em relação a
esse assunto. Para solucionar o problema pode-se pensar em
importar para XP, práticas de projeto de navegação e interface
adotadas por outras metodologias como extensões de UML
(seção 2.3) e OOHDM (seção 2.4). É importante mencionar que
a incorporação de tais práticas deve ser feita respeitando os
valores e princípios de XP, caso contrário ela pode perder a sua
característica de metodologia ágil.
Outras falhas
• A questão de modelagem em XP não é muito levada em
consideração visto que seu foco é maior em
implementação e testes.
– Possibilidades de solução: Utilização de modelagem
baseada em técnicas ágeis (Agile Modeling) e
utilização de Design Patterns
• As questões arquiteturais em XP são descritas de forma
superficial através da metáfora. O problema da metáfora é
que ela é relativamente estática e estável o que não se
alinha ao desenvolvimento Web que deve possuir um alto
grau de dinamismo para incorporar as mudanças de
infraestrutura e permitir a evolução dos sistemas Web.
– Considerar uso de padrões arquiteturais
Conclusão
• Extreme Programming pode ser adaptado
para a Web Engineering;
• A adaptação deve ser feita de forma a
preservar as caraterísticas ágeis de XP e
responder às peculiaridades dos sitemas
Web;
• Já existem iniciativas semelhantes de
criação de processos ágeis para Web
Engineering (AWE process).
Download

Contextualizando XP para Web engineering