CASCATA
O Modelo em Cascata (do inglês: Waterfall Model) é um modelo de desenvolvimento de software sequencial no qual o processo é visto como um fluir constante para frente (como uma cascata) através das fases de análise de requisitos, projeto, implementação, testes (validação), integração, e manutenção de software.
Entre os problemas às vezes encontrados quando se aplica o modelo cascata, temos:
- Projetos reais raramente seguem o fluxo sequencial proposto pelo modelo. Embora o modelo linear possa conter iterações, ele o faz indiretamente. Como consequência, mudanças podem provocar confusão à medida que a equipe de projeto prossegue.
- Frequentemente, é difícil para o cliente estabelecer explicitamente todas as necessidades. O modelo cascata exige isso e tem dificuldade para adequar a incerteza natural existente no início de muitos projetos.
- O cliente deve ter paciência. Uma versão operacional do(s) programa(s) não estará disponível antes de estarmos próximos ao final do projeto. Um erro grave, se não detectado até o programa operacional ser revisto, pode ser desastroso.
XP
O objetivo principal do XP é levar ao extremo esse conjunto de práticas que são ditas como boas na engenharia de software. Entre elas podemos citar o teste, visto que procurar defeitos é perda de tempo, nós temos que constantemente testar, se perder tempo com código sujo é ruim, melhoraremos o nosso código sempre que uma nova mudança for feita. Portanto, como podemos notar todas as coisas práticas do XP são levadas ao extremo.
No XP temos um conjunto de quatro valores: comunicação, simplicidade, feedback e coragem, que a partir desses valores são geradas treze práticas: jogo do planejamento, programação em pares, pequenas versões, propriedade coletiva, metáforas, integração contínua, projeto simples, semana de 40 horas, testes, cliente presente, refatoração, padronização de código e reunião diária. As práticas reforçam os valores.
Dev Media - XP
PROTOTIPAÇÃO
A prototipação é um processo para desenvolver um produto mínimo viável (MVP), que é utilizado para simulações e testes de um produto ou um serviço antes do lançamento destes.
O termo protótipo tem origem grega: prótos significa "primeiro" e typos quer dizer "tipo". Juntando as duas palavras, temos que um protótipo é o primeiro tipo ou primeiro modelo do produto em desenvolvimento.
A prototipação pode ser implantada em diferentes fases do projeto: conceitual, preliminar ou detalhado.
Voitto - O que é prototipação
SCRUM
A metodologia Scrum é um framework simples para trabalhar com projetos complexos, criada pelos desenvolvedores Ken Schwaber e Jeff Sutherland.
Trata-se de um método de trabalho realizado a partir de pequenos ciclos de atividades dentro de um projeto.
Cada ciclo de atividade é planejado previamente e se chama Sprint, composto por um período de tempo predefinido em que as tarefas devem ser realizadas pela equipe.
A metodologia Scrum permite potencializar o trabalho em equipe, acompanhar a evolução do produto, sempre com foco na qualidade da produção e nos prazos estipulados.
Uma das principais vantagens é que a equipe consegue entregar a produção com maior agilidade, corrigindo problemas ao longo do processo a partir dos Sprints, em que se obtém feedback do usuário.
Quem são os sujeitos de uma scrum:
- Product Owner: Responsável por definir quais recursos e funcionalidades serão utilizados e construídos, além de definir a prioridade de cada um.
- Scrum Master: Responsável por ajudar a equipe a compreender inteiramente a metodologia, seus valores, princípios e práticas.
- Scrum Team ou DevTeam: É a equipe multidisciplinar que se torna responsável pelo desenvolvimento e entrega do produto.
INCREMENTAL
Um processo de desenvolvimento de software é incremental quando a cada rodada é desenvolvido um pedaço inteiro do software.
Podemos notar pela figura ao lado que o modelo de processo incremental aplica sequências lineares (como no modelo cascata) de forma escalonada, à medida que o tempo for avançando. Cada uma das sequencias lineares gera um incremento do software. Esses incrementos são entregáveis e prontos para o cliente. Um exemplo de um processo incremental é um software de e-mail que inicialmente contém funções apenas para enviar e-mails à destinatários e ler e-mails recebidos. Em um segundo incremento o software poderia adicionar funções de revisão ortográfica e gerenciamento de e-mails recebidos. No terceiro incremento o software poderia adicionar um controle de spam. E assim sucessivamente.
O modelo de processo incremental entrega um produto operacional a cada incremento, ou seja, um produto sem erros e pronto para o usuário utilizar. Mesmo que os primeiros incrementos sejam partes do produto, essas partes são operacionais e funcionam sem as outras. Portanto, os incrementos possuem totais condições de atender ao usuário.
De forma geral, os primeiros incrementos podem ser implementados com um número reduzidos de pessoas. Nos próximos incrementos um pessoal adicional poderá ser acrescido de forma a implementar o incremento seguinte.
Também podemos administrar alguns riscos através de um planejamento baseado nos incrementos. Por exemplo, se uma determinada versão de um software utilitário fornecido por terceiros que será integrado ao nosso projeto estiver disponível apenas numa data mais posterior, poderíamos deixar para desenvolver um determinado complemento do software que use essa versão mais atual numa data posterior quando esse utilitário já estiver disponível para uso.
EXEMPLO EMAILDev Media - Incremental
AUP
O Processo Unificado Ágil (AUP - Agile Unified Process) é uma metodologia que foi idealizada por Scott Ambler e se refere a uma versão simplificada do RUP (Rational Unified Process).
O AUP tem 3 princípios: Simplicidade, Agilidade e Centrado em atividades de alto valor.
O AUP também abrange 7 disciplinas, onde as 4 primeiras são de implementação e as 3 restantes são disciplinas chamadas de apoio. De acordo com a fase do ciclo de vida, as atividades da disciplina vão variando.
As 7 disciplinas são:
- Modelo: entender as regras de negócio, o domínio do problema e identificar solução viável para resolvê-lo, realizar uma prototipação, diagramas, casos de uso, etc.
- Implementação: transformar os modelos em códigos, tendo uma prototipagem mais técnica, pensando na UI (user interface), sempre evoluindo na criação do software.
- Teste: validação da arquitetura, evolução no modelo de teste, validar o sistema, finalização do modelo de teste.
- Implantação: planejamento da entrega do sistema, deixar o sistema disponível para usuários finais. Treinar clientes e implantar o sistema em produção.
- Gestão de configuração: configurar o ambiente de configuração.
- Gerenciamento de projetos: dirigir as atividades que acontecem no projeto, como a gestão de riscos, gerenciar a equipe, a atribuição de tarefas, monitoramento do progresso, etc.
- Ambiente: configurar e evoluir o ambiente de trabalho, apoiar a equipe.
ESPIRAL
Criado por Barry Boehm em 1988, o Modelo em Espiral é uma melhoria do Modelo Incremental e possui esse nome por causa de sua representação, onde cada volta no espiral percorre todas as fases do processo de software. As voltas devem ser repetidas quantas vezes forem necessárias até que o software possa ser completamente entregue. É um processo evolucionário, ou seja, adequado para softwares que precisam passar por inúmeras evoluções na medida que o desenvolvimento acontece.
Medium - Espiral
FDD
O FDD "Feature Driven Developement" busca o desenvolvimento por funcionalidade, ou seja, por um requisito funcional do sistema. É pratico para o trabalho com projetos iniciais ou projetos com codificações existentes.
O FDD possui cinco processos básicos.
- Desenvolvimento de modelo abrangente (Análise orientada por objetos);
- Construção de lista de funcionalidades (Decomposição funcional);
- Planejar por funcionalidade (Planejamento incremental);
- Detalhe por funcionalidade (Desenho orientado a objetos);
- Construção por funcionalidade (Programação e teste orientado a objetos).
RUP
É uma sigla que significa Rational Unified Process, que traduzindo para o português, quer dizer Processo Unificado da Rational.
RUP, promove uma solução disciplinada, que consiste na organização das tarefas e responsabilidades de todos dentro de uma organização.
A práticas usadas no RUP são baseadas em outros diversos métodos, mas além disso, ele apresenta alguns princípios parecidos com o dos métodos ágeis.
Voitto - Rup
DSDM
Dynamic Systems Development Method ou, em português, Metodologia de Desenvolvimento de Sistemas Dinâmicos.
Uma solução que também é reconhecida como sendo o pai dos métodos ágeis e que foi pensada para o desenvolvimento de projetos de alta qualidade, mas limitados em termos de prazos curtos e orçamentos fixos.
As melhores práticas que caracterizam essa metodologia são:
- Desenvolvimento incremental (ciclo contínuo de melhorias das versões anteriores).
- Colaboração entre cliente e equipe de trabalho.
- Funções integradas.
- Flexibilidade nas exigências.
Outra particularidade sobre o funcionamento do DSDM é a interação frequente entres os usuários finais e a equipe de desenvolvimento, que trocam informações entre si em cada novo estado do projeto e a cada novo período de testes.
Voitto - DSDM Flowup - DSDM
RAD
O Desenvolvimento Rápido de Aplicação, é uma metodologia de desenvolvimento de software que prioriza um ciclo de trabalho curto, iterativo e incremental. Trata-se de um método que foi projetado para substituir as tradicionais técnicas de desenvolvimento, como o modelo cascata, que apresentavam processos mais lentos e pouco flexíveis.
A metodologia busca concentrar esforços e recursos na prototipagem do produto, optando por reduzir o tempo de planejamento. Dessa forma, a equipe pode desenvolver uma aplicação rapidamente, obter feedbacks sobre o protótipo criado e fazer as alterações necessárias com mais facilidade.
Para otimizar o tempo de desenvolvimento ao mesmo tempo em que possibilita a flexibilidade do escopo do projeto, a metodologia RAD é dividida em cinco etapas.
- Modelagem do negócio.
- Modelagem dos dados.
- Modelagem do processo.
- Geração da aplicação.
- Teste e modificação.
ASD
Adaptive Software Development (ASD) ou Desenvolvimento de Software Adaptativo
Características do metodologia ASD:
- Focado na missão: objetivos muito bem definidos, porém podem ser ajustados de acordo com o desenvolvimento do projeto;
- Orientado a riscos;
- Orientado a componentes: as atividades de desenvolvimento não devem ser orientadas a tarefas, mas, focadas nas funcionalidades do desenvolvimento do software;
- Iterativo;
- Tolerante a mudanças: incorpora as mudanças que aparecem no meio do projeto. Como é algo frequente em desenvolvimento de software, é mais importante se adaptar a elas ao invés de tentar controlar.
TDD
TDD (Test Driven Development / Desenvolvimento orientado a teste.
É parte da metodologia XP e também utilizado em diversas outras metodologias, além de poder ser utilizada livremente.
O TDD transforma o desenvolvimento, pois deve-se primeiro escrever os testes, antes de implementar o sistema. Os testes são utilizados para facilitar no entendimento do projeto, pois clareiam a ideia em relação ao que se deseja em relação ao código. Segundo Presmann (2011), "os componentes individuais são testados para garantir que operem corretamente. Cada componente é testado independentemente, sem os outros componentes de sistema. Os componentes podem ser entidades simples, tais como funções ou classes de objetos, ou podem ser grupos coerentes dessas entidades".
DevMedia - TDD
LEAN
Lean é uma metodologia originalmente desenvolvida pela Toyota para guiar processos industriais de linha de montagem, atuando fortemente na eliminação de desperdícios, aumento da velocidade de processos e excelência em qualidade. Lean Software Development trás os conceitos de Lean para o universo do desenvolvimento de software, para que através da aplicação dos mesmos princípios seja possível eliminar desperdícios e alcançar melhores resultados.
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.
DevMedia - Lean
CMMI
Capability Maturity Model Integration
O CMMI organiza as práticas, que já são consideradas efetivas, em uma estrutura que visa auxiliar a organização a estabelecer prioridades para melhoria e também fornece um guia para a implementação dessas melhorias.
O CMMI está dividido em cinco estágios:
- Realização – Estágio inicial
- Gerenciado – Gerenciamento de requisitos, planejamento de projeto, monitoramento e controle de projeto, gerenciamento de fornecedores, medição e análise, garantia da qualidade do processo e do produto, gerenciamento de configuração;
- Definido – Desenvolvimento de requisitos, solução técnica, integração do produto, verificação e validação, foco no processo organizacional, definição do processo organizacional, treinamento organizacional, gerenciamento de riscos, gerenciamento integrado do projeto, análise da decisão e resolução;
- Quantitativamente – Gerenciamento quantitativo do projeto, performance do processo organizacional;
- Otimização – Análise causal e resolução, inovação organizacional e implantação.
MPS.BR
Melhoria de Processos do Software Brasileiro.
O MPS.BR sugere resultados a serem atingidos como requisitos para atender objetivos de qualidade (obtenção de qualidade). Esses resultados podem ser atingidos por meio de tarefas ou conjunto de tarefas que quando mal aplicados torna o processo mais burocrático.
O processo escolhido é baseado nas principais técnicas da metodologia XP e do Scrum, enquanto a primeira é mais focada em práticas operacionais de codificação, teste e integração, a segunda é focada no gerenciamento do projeto.
Alguns conceitos de qualidade do MPS.BR e importantes:
- Capacidade do processo: Uma caracterização da habilidade do processo atingir os objetivos de negócio atuais ou futuros;
- Atributo de processo: Uma característica mensurável da capacidade do processo aplicável a qualquer processo;
- Nível de maturidade: Grau de melhoria de processo para um predeterminado conjunto de processos no qual todos os resultados esperados do processo e dos atributos dos processos são atendidos.
O talento vence jogos, mas só o trabalho em equipe ganha campeonatos.