quarta-feira, 15 de maio de 2013

Metodologias ágeis

Surgimento

A expressão “Metodologias Ágeis” tornou-se conhecida em 2001, quando especialistas em processos de desenvolvimento de software representando entre outros, os métodos Scrum e Extreme Programming (XP), foram estabelecidos princípios e características comuns destes métodos. Assim foi criada a “Aliança Ágil” e efetuou-se o estabelecimento do “Manifesto Ágil”.


Conceito

As metodologias ágeis para desenvolvimento de software são uma resposta às chamadas metodologias pesadas ou tradicionais. Mesmo com a evolução dos computadores, das técnicas e ferramentas nos últimos anos, a produção de software confiável, correto e entregue dentro dos prazos e custos estipulados ainda é muito difícil.


Objetivo

A idéia das metodologias ágeis é o enfoque nas pessoas e não em processos ou algoritmos. Além disso, existe a preocupação de gastar menos tempo com documentação e mais com a implementação. Uma característica das metodologias ágeis é que elas são adaptativas ao invés de serem preditivas. Com isso, elas se adaptam a novos fatores decorrentes do desenvolvimento do projeto, ao invés de procurar analisar previamente tudo o que pode acontecer no decorrer do desenvolvimento.


Características

Maior produtividade: Entregas do produto mais rápida, freqüentes e regulares.

Ênfase em comunicação: Discutir sobre um meio de aumentar a eficiência e então ajustar-se de acordo.

Eliminar desperdícios: Inspeção e Adaptação constantes do processo em busca da melhoria contínua e a redução dos desperdícios.

Entrega freqüente de código funcionando: Satisfazer o cliente com entrega contínua e mais cedo possível de um software usável.

Aproveitar as habilidades das pessoas: Cliente e desenvolvedor trabalham juntos diariamente no projeto.

Alta qualidade: Construir projetos com individualismo e motivação – Proporcionar ambiente e suporte para que desenvolvedores confiem que farão um bom trabalho.

Melhorar constantemente: Flexibilidade para mudanças de requisitos e prioridades além de maior agilidade na tomada de decisões.


Vantagens

Iterações curtas: Entrega de versões funcionais do sistema com mais freqüência, em espaços mais curtos de tempo.

Habilidade de resolver problemas vagos: A equipe deve estar apta a mudanças para resolução de possíveis problemas ao longo do desenvolvimento dos processos.

Foco Comum: Os membros podem ter diferentes competências e habilidades, mas todos devem ter o mesmo foco, entregando um software em funcionamento ao cliente dentro do prazo.

Colaboração: A equipe precisa da colaboração de todos, para analisar, avaliar e usar a informação de forma eficiente.

Auto-organização: A equipe organiza o processo para melhor acomodar seu ambiente local.

Capacidade de tomada de decisão: A tomada de decisão deve ser feita de forma rápida e eficiente.


Metodologias ágeis X metodologias tradicionais


Existem varias formas de se construir um Software e o que sempre as pessoas procuram é uma metodologia que construa o programa perfeito, sem nenhum erro.
Das Metodologias Tradicionais a mas utilizada é o RUP, da qual da mais ênfase no controle do projeto e são utilizadas em fabricas de software que utilizam grande número de programadores.
As Metodologias Ágeis procura refinar as tradicionais tirando o foco do processo em si e passando a ênfase as pessoas(Clientes, e desenvolvedores); Uma das diferenças das Metodologias ágeis para as tradicionais é permitir a participação do cliente mais próximo do processo;Iteração(repetição) curtas e testes automatizados. Os especialistas no assunto aconselham a não formar uma equipe muito grande para o projeto, ou dividir em sub-projetos. Os métodos mais conhecidos são: Extreme Programming (XP) e o Scrum. Os motivos pelos quais, esses métodos não são utilizados em alta escalas são:

Burocracia com requisito: Há clientes que pedem sistemas que foram desenvolvidos sob vários diagramas.

Maturidade: Quando a empresa não tem muita experiência, com problemas de software ela não investe muito e prefere fazer de uma forma mais rápida o planejamento.

Nível técnico da equipe: Muitos gerentes acreditam que para usar estes métodos os desenvolvedores tem que ser “ninjas”, e que sua equipe nunca dará conta.

Medo: Além de resumir os outros itens anteriores, este o faz pensar que se até neste momento ainda não houve nenhum problema grave, é melhor não arriscar em outra forma.


Manifesto ágil

É a base de uma comunidade que é descobrir a melhor maneira de se fazer o software e ajudar os outros a fazer.

Valores:
  • Indivíduos e suas Interações mais que processo e ferramentas
  • Software funcionando mais que documentação abrangente
  • Colaboração do cliente mais que negociação de contrato
  • Responder a mudanças mais que seguir um plano


12 princípios da metodologia ágil

1. Nossa maior prioridade é satisfazer o cliente através da entrega contínua e adiantada de software com valor agregado: as metodologias ágeis buscam garantir a satisfação do cliente oferecendo uma entrega rápida e contínua do software, desde que o mesmo esteja funcional e com qualidade.

2. Mudanças nos requisitos são bem-vindas, mesmo tardiamente no desenvolvimento. Processos ágeis tiram vantagem das mudanças visando vantagem competitiva para o cliente:  Mudanças nos requisitos/softwares durante ou no fim do desenvolvimento, desde que analisadas, ainda são aceitáveis, pois para as metodologias ágeis as mudanças podem ser vista como uma vantagem competitiva para o cliente.

3. Entregar freqüentemente software funcionando, de poucas semanas a poucos meses, com preferência à menor escala de tempo: Freqüentemente são entregues softwares funcionais. Ao invés de serem entregues em uma escala de meses, é preferido entrega-los em semanas.

4. Pessoas de negócio e desenvolvedores devem trabalhar diariamente em conjunto por todo o projeto: Deve haver um trabalho em conjunto dos desenvolvedores do sistema com pessoas de negócio, ou seja pessoas que entendem da área para onde o software está buscando um foco. Esse trabalho em conjunto deve ser feito do inicio ao fim do projeto.

5. Construa projetos em torno de indivíduos motivados. Dê a eles o ambiente e o suporte necessário e confie neles para fazer o trabalho: Para a construção de um projeto são necessários indivíduos motivados, ambiente e o suporte necessário para o projeto. É preciso também confiar no trabalho dos indivíduos envolvidos no projeto.

6. O método mais eficiente e eficaz de transmitir informações para e entre uma equipe de desenvolvimento é através de conversa face a face: Para obter uma melhor eficiência na troca de informações na equipe e entre as equipes, é importante que se tenha conversas e discussões presenciais.

7. Software funcionando é a medida primária de progresso: A principal medida do processo do projeto é que o software seja funcional.

8. Os processos ágeis promovem desenvolvimento sustentável. Os patrocinadores, desenvolvedores e usuários devem ser capazes de manter um ritmo constante indefinidamente: O conjunto envolvido no projeto (desenvolvedores, clientes e patrocinadores) deve manter contato constante, com isso possuindo um conhecimento geral do software.

9. Contínua atenção à excelência técnica e bom design aumenta a agilidade: Dar atenção a um trabalho técnico de qualidade bem realizado e a um bom design ao sistema, faz aumentar a agilidade e a qualidade do projeto.

10. Simplicidade--a arte de maximizar a quantidade de trabalho não realizado--é essencial: Ser capaz de maximizar a quantidade de trabalho que não precisou ser feito.

11. As melhores arquiteturas, requisitos e designs emergem de equipes auto-organizáveis: Equipes que conseguem se auto-organizar produzem as melhores arquiteturas, requisitos e projetos, obtendo um melhor resultado final no desenvolvimento de software.

12. Em intervalos regulares, a equipe reflete sobre como se tornar mais eficaz e então refina e ajusta seu comportamento de acordo: A própria equipe descobre como se tornar mais eficaz e aplica isso ao seu comportamento para o desenvolvimento do software em um projeto, tornando-se mais efetiva.


Metodologias mais utilizadas

Extreme Programming (XP): Possui muitas diferenças em relação a outros modelos, podendo ser aplicado a projetos de alto risco e com requisitos dinâmicos, o XP é um conjunto bem definido de regras, que vem ganhando um grande número de adeptos e por oferecer condições para que os desenvolvedores respondam com eficiência a mudanças no projeto, mesmo nos estágios finais do ciclo de vida do processo. A comunicação com o cliente, no XP, mostra-se mais intensa que nos métodos tradicionais, devendo o cliente estar sempre disponível para tirar as dúvidas, rever  requisitos     e    atribuir     prioridades,     utilizando-se de sistemas de nomes.

Scrum: Estabelece conjuntos de regras e práticas de gestão que devem ser adotadas para garantir o sucesso de um projeto. Centrado no trabalho em equipe, melhora a comunicação e maximiza a cooperação, permitindo que cada um faça o seu melhor e se sinta bem com o que faz o que mais tarde se reflete num aumento de produtividade. Englobando processos de engenharia, este método não requer nem fornece qualquer técnica ou método específico para a fase de desenvolvimento de software. 

Lean development: é uma metodologia que foi originalmente desenvolvida pela Toyota para guiar processos industriais de linha de montagem. Ela foca na eliminação de desperdícios, aumento da velocidade de processos e na excelência em qualidade. Implementar Lean permite que uma organização diminua seus estoques, maximize o uso de trabalhadores generalistas (ou seja, que possuem muitas habilidades) e produza de acordo com a demanda. Lean também é conhecido como TPS, Toyota Production System ou Sistema de Produção Toyota.O objetivo de um sistema de produção Lean é “ter as coisas certas no lugar certo na hora certa, desde a primeira vez, enquanto elimina-se o desperdício estando sempre aberto a mudanças”. Lean oferece um conjunto de princípios que podem ser utilizados por organizações para adaptar ferramentas, técnicas e métodos a seus contextos e capacidades específicas.

Feature-Driven Development (FDD): (Desenvolvimento Guiado por Funcionalidades) é uma metodologia ágil para gerenciamento e desenvolvimento de software. Ela combina as melhores práticas do gerenciamento ágil de projetos com uma abordagem completa para Engenharia de Software orientada por objetos, conquistando os três principais públicos de um projeto de software: clientes, gerentes e desenvolvedores. Seus princípios e práticas proporcionam um equilíbrio entre as filosofias tradicionais e as mais extremas, proporcionando uma transição mais suave para organizações mais conservadoras, e a retomada da responsabilidade para as organizações que se desiludiram com as propostas mais radicais. O lema da FDD é: "Resultados freqüentes, tangíveis e funcionais.

Kanban:  O Kanban, com seu mecanismo de sinalização, tem como objetivo apresentar uma atividade de trabalho em processo, ou seja, o número de atividades ou cartões em circulação é equivalente à capacidade do sistema. Uma outra característica importante do modelo Kanban é o conceito de “puxar tarefa” quando há capacidade de processá-la. Esse recurso vai de encontro ao tradicional modelo de “empurrar tarefa” conforme sua demanda, mantendo assim o bom desempenho da equipe. Portanto, ao invés dos membros que produzem o produto receberem atividades conforme suas demandas, os requisitos são adicionados a lista de backlog e “puxados” pelos membros que liberam suas atividades correntes e se tornam disponíveis para iniciar uma nova tarefa.

RUP: Rational Unified Process (RUP) é um framework de processo de engenharia de software que fornece um conjunto de práticas testadas na indústria para desenvolvimento de software e gerência de projetos (Shuja, 2007). Trata-se de um processo proprietário, desenvolvido pela Rational Software, atualmente subsidiária da IBM, que usa abordagem orientada a objetos e preconiza a utilização da notação UML (Unified Modeling Language) para documentação. É organizado em disciplinas (workflows) onde são distribuídas tarefas e responsabilidades e gerados produtos de trabalho (artefatos). O ciclo de vida é dividido em fases sequenciais  as quais podem ser sub divididas em iterações.

OpenUp: A Open UP, por si só, é um Processo Unificado leve que aplica as abordagens iterativa e incremental em um ciclo de vida estruturado, abordando uma filosofia ágil e pragmática que foca na natureza colaborativa do desenvolvimento de software. A Open UP é uma metodologia livre de ferramentas e de baixo formalismo que pode ser estendido a uma variada gama de tipos de projetos e não apenas desenvolvimento de software.


Conclusão

As metodologias ágeis tem sido bem aceitas pela industria de software, por estarem trazendo benefícios para o desenvolvimento de software. Com a grande competitividade na área de desenvolvimento de software as empresas estão buscando o aperfeiçoamento de seus serviços para que possam disputar espaço no mercado de trabalho com a concorrência. Prazo e qualidade, além de melhor aceitação e adaptação a mudanças são diferenciais que podem ser alcançados utilizando as metodologias ágeis. 
As metodologias ágeis mostram uma maneira de trabalhar de forma organizada e interativa, podendo contribuir para um ambiente de trabalho mais amigável, portanto é uma opção para se obter os diferenciais desejados.


Grupo:
Diego Nunes
Emerson William
Felipe Rodrigues
Jeferson Ricardo

Nenhum comentário:

Postar um comentário