Reescrevendo Software Utilizando Metodologias Ágeis


13

Suponha que você precise reescrever um aplicativo inteiro usando metodologias Agile, como você faria isso?

Eu acho que você pode escrever um monte de histórias de usuários com base no comportamento do seu sistema atual. E, em seguida, implemente-os em pequenas iterações. Mas isso não significa que temos os requisitos PARA CIMA NA FRENTE ??

Além disso, quando você começaria a lançar? O Agile diz que devemos lançar cedo e frequentemente, mas não faz muito sentido lançar antes que a reescrita completa seja concluída.


4
Reescrever um aplicativo inteiro nunca é uma boa ideia. Veja reescrevendo o Netscape . Muito se perde na reescrita de um aplicativo inteiro. O conhecimento é codificado na fonte e precisará ser redescoberto em uma reescrita. É fácil encontrar o código e declarar "Por que eles fizeram dessa maneira?" Eu posso fazer melhor e em menos linhas! Na maioria das vezes, uma vez no código, o desenvolvedor entende por que foi escrito anteriormente dessa maneira. Code Simplicity fala com
Chuck Conway

Fazer a pergunta indica que você não tem experiência com o Agile para usá-lo efetivamente em uma empresa tão grande. Pessoalmente, como eu faria isso (supondo que "fugir" estava fora de questão) é começar limitando minha exposição e implementando estratégias de controle de danos, caso (quando) fique em forma de pêra.
mattnz

Você não acha que novos requisitos serão criados durante todo esse processo de reconstrução?
10114 JeffOlá

postado de forma cruzada do SO: stackoverflow.com/questions/13168314/…
gnat

Reescrever o aplicativo inteiro não seria muito ágil?
Pieter B

Respostas:


15

Divida-o em épicos de alto nível. Tome cada área funcional do aplicativo, uma etapa de cada vez.

Divida uma epopeia em um grupo de histórias (partes utilizáveis ​​- qualquer coisa que melhore o aplicativo) e gerencie-as como faria se não houvesse uma aplicação existente, com uma exceção: se possível, faça com que você pode implementar essa parte da funcionalidade como parte ou ao lado do aplicativo original.

Quando os agilistas dizem "liberar cedo e frequentemente", isso não significa necessariamente produção. Se você for substituir um aplicativo existente, use uma área de teste para liberar frequentemente e verifique se seus usuários estão testando o sistema lá. Isso ainda lhes dará espaço para priorizar o próximo trabalho e garantir que nada que você libere para a produção deprecie o produto.

Depois de liberar um componente para produção, passe para o próximo.


O que @pdr disse.
KodeKreachor 1/11/12

3
Durante os períodos de liberação de não produção, use o dogfood, mesmo que em uma VM, para ter uma idéia do uso e da integridade, pois todos os requisitos são conhecidos antecipadamente e, muito provavelmente, é um domínio / BI significativo na equipe de desenvolvimento.
JustinC

10

acabamos de passar por essa experiência (eu como proprietário do produto scrum). Levamos dois anos para chegar a algo liberável. Mas ainda assim, o ágil nos trouxe muitos benefícios.

Primeiro: uma reescrita total não é, por natureza, ágil. Em vez disso, considere refatorar o produto existente, peça por peça. Isso foi discutido em outra pergunta. Então, vamos supor que seja uma reescrita.

Então, de fato, você começa com um log reverso que abrange todos os casos de uso relevantes do produto existente. Mas, por favor, não o aborde como escrever especificações. Isso seria muitos detalhes. Deve estar completo (caso contrário, você não poderá executar o planejamento da liberação). E não deve ser muito elaborado (caso contrário, você está escrevendo especificações antecipadamente). Veja como abordamos isso:

  • categorizar os usuários do produto antigo. Identifique os usuários que precisam apenas de uma pequena parte do produto antigo e ainda assim obtenham algo útil. Eles definem seus primeiros épicos.

  • Em seguida, adicione épicos que permitam que outra categoria de usuários passe para o novo produto. Etc. até você ter um log reverso que cubra todos os usuários.

  • muito provavelmente, esses épicos precisarão ser divididos ainda mais. Se possível, tente dividir para que cada parte ainda tenha algum valor. Se isso não for possível, certifique-se de que cada parte possa ser demonstrada.

  • quando você tiver de 20 a 50 épicos, peça à equipe que os avalie.

  • divida os principais épicos em Histórias de usuários que a equipe acredita serem viáveis ​​em um sprint. Não faça isso para todos os épicos ainda, apenas os que estão no topo. Você terá tempo de sobra para dividir o resto.

Quando liberar externamente! Essa é uma decisão de negócios. Pelo menos, essa abordagem oferece a oportunidade de liberar anteriormente para determinadas categorias de usuários. Isso pode ser útil se a gerência ficar nervosa com esse projeto aparentemente interminável.


4
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.Palavras mais verdadeiras nunca foram ditas.
maple_shaft

4

Libere agora se puder

Sua pergunta sobre quando você começa a liberar o código é ótima. Eu acho que duas condições se aplicam. Primeiro, que você tenha "qualidade suficiente" e, em seguida, que atenda aos requisitos de um MVP (produto mínimo viável).

Roma (e Agile) não foram construídas em um dia

Talvez você esteja pronto com uma equipe ágil pronta para assumir o primeiro dia. Para a maioria das organizações, há o trabalho e as despesas de treinamento, reequipamento e o ciclo habitual de formação, assalto, normatização e execução da formação de uma equipe. Seja franco quanto aos riscos e custos, tenha cuidado para estabelecer expectativas realistas e esteja preparado para defender sua abordagem.

Seja um Bootstrapper reutilizado

Como o poder de fusão, a reutilização de código é e sempre será a solução futura para nossos problemas econômicos. Meu sentimento é que os desenvolvedores costumam dizer que acreditam na reutilização, mas apenas o tipo de reutilização que começa após a construção de uma nova estrutura, em vez do tipo em que se baseia no que outra pessoa já fez. Como isso pode funcionar até que alguém esteja disposto a escolher construir o alicerce de outra pessoa? Na melhor das hipóteses, significa reescrever a cada poucos anos quando a liderança da equipe muda.

Por que lançar cedo e frequentemente?

Liberar cedo e muitas vezes é um mantra por muitas razões. Isso dá vida às nossas discussões sobre o que o produto deve se tornar, torna real onde estamos e fornece uma base para mudanças iterativas / incrementais. O ritmo dos lançamentos é praticamente invariável para o ágil, com a diferença de quem recebe os lançamentos (substitutos do cliente ou usuários finais). Antes do Agile, a manutenção era estimada em 60% do custo dos sistemas de software. Essa é uma fonte de muita consternação para gerentes e outros, alguns que acham que o lançamento do produto é onde o software morre. Para eles, tudo após o lançamento é retrabalhado e pago para consertar um produto pelo qual eles já pagaram uma vez.

Pré-lançamento não é natural

Kent Beck escreve que o pré-lançamento é um estado não natural para produtos de software. Certamente é um momento inconveniente, porque é um momento em que você não tem clientes e está pagando pelo produto, e não pelo produto que está pagando por você.

Não critique a equipe anterior

Embora possa configurar os desenvolvedores que assumem a reescrita como heróis e salvação do projeto, acho que há um custo em criticar as realizações da equipe anterior.

  • Primeiro, se você deixar as pessoas se decidirem sobre a equipe anterior, terá mais tempo e energia para sua verdadeira missão.
  • Será complicado se você precisar trabalhar com membros da equipe anterior, tanto com desenvolvedores quanto com partes interessadas, como gerentes de produto, gerentes de projeto ou clientes.
  • Se você conseguir fazê-lo funcionar, poderá receber (ou pior ainda, receber crédito) pelo que a equipe anterior fez.
  • Em média, a equipe anterior provavelmente era média. Em média, você pode ser médio. Você tem mais trabalho do que a equipe anterior, porque possui uma nova metodologia para implementar, além de um projeto.
  • Se a equipe antiga era horrível, a menos que você também seja horrível, você receberá crédito por ser melhor do que horrível. Se eles eram melhores que horríveis, e você não é visivelmente melhor, dizer que eles eram horríveis pode convidar comparações desagradáveis.
  • Se a equipe antiga foi melhor do que você pensava, e você se mete em problemas porque a organização está quebrada ou o problema está mal definido ou muito difícil, as coisas vão melhorar para você se você não tiver aumentado significativamente as expectativas.
  • Se eles esperam o que estavam recebendo, mas você se sai melhor, é uma vitória para você.
  • Abster-se de críticas é uma boa educação e mostra que você tem classe.

Você esqueceu uma outra coisa. A equipe antiga estabeleceu as expectativas dos clientes. Você precisa redefini-las, fazendo muito melhor, ou faça as coisas exatamente da mesma maneira. Quanta pressão o Windows 8 conseguiu por não ter um botão Iniciar, mas o iOS e o Android nunca o fizeram e ninguém pensou em mencioná-lo.
mattnz

2

Solicitados pelos comentários do @Chuck e referências ao Netscape dizendo essencialmente não reescrever, e respostas válidas replicando que o OP não está perguntando se deveria. - Um ciclo de desenvolvimento de software verdadeiramente ágil impede a reescrita. Reescrever quase sempre quebra muitos dos princípios por trás do Agile. Usando o software atual como linha de base, esses princípios do Agile (do Agile Manifesto ) não podem ser reescritos.

  • Entrega antecipada e contínua de software valioso . - o cliente não receberá valor antecipado quando medido em relação ao que já possui
  • Entregue software em funcionamento com freqüência - semanas a meses - qual é o tamanho do projeto. Você pode dizer honestamente que o cliente obterá algo mais útil a eles em breve?
  • O software de trabalho é a principal medida de progresso - o trabalho comparado à linha de base não acontece com pressa
  • Os processos ágeis promovem o desenvolvimento sustentável. - Dado que o cliente tem uma linha de base em funcionamento, a pressão será exercida para oferecer funcionalidade aprimorada. É improvável que isso seja feito a um ritmo que
  • A simplicidade - a arte de maximizar a quantidade de trabalho não realizado - é essencial. isso diz tudo realmente ...

"Suponha que você tenha que reescrever um aplicativo inteiro usando metodologias ágeis, como você faria isso?"

A pergunta é baseada em uma premissa falsa - Que uma reescrita pode ser considerada ágil.


2

Considere se você pode liberar o aplicativo reescrito uma peça de cada vez e tê-lo em produção lado a lado com o antigo.

Para aplicativos da Web em particular, pode ser bastante fácil mover uma única parte do aplicativo para uma nova plataforma e ter suas solicitações de rota do balanceador de carga para o sistema apropriado. Em seguida, escreva as histórias que permitirão que você coloque sua primeira página em produção e as entregue de maneira ágil.

Os aplicativos de desktop podem ser mais complicados, mas muitas vezes serão possíveis.

Você está procurando costuras - locais onde é possível que o sistema antigo assuma suas responsabilidades pelo novo, sem precisar de uma reescrita completa.

Talvez exista alguma lógica comercial independente que possa ser movida para um novo serviço ou estrutura da Web, e o aplicativo antigo possa ser modificado usando-o em vez de seu código antigo. Continue cortando pedaços nas costuras até que o que resta seja administrável, tudo de uma só vez.

Se você não encontrar costuras, talvez seja necessário procurar o tipo de abordagem do big bang sugerida em algumas das outras respostas. Mas esteja preparado para uma longa marcha antes de chegar ao seu destino, especialmente se você espera continuar desenvolvendo o sistema antigo em paralelo ...


1

O Agile diz que devemos lançar cedo e frequentemente, mas não faz muito sentido lançar antes que a reescrita completa seja concluída.

Na verdade, IMHO, esse é o ponto principal - quanto mais cedo você obtém partes do aplicativo reescrito na produção (e, idealmente, substituindo a funcionalidade do sistema antigo), maiores são as chances de o seu projeto ser bem-sucedido. Se você acha que isso não faz muito sentido, pense mais a respeito - quase sempre há possibilidades de liberar peças.

Provavelmente, isso significa que alguém precisa alterar algo no aplicativo antigo, por exemplo, adicionar algumas novas interfaces para interagir com o aplicativo reescrito durante o tempo em que a reescrita não estiver concluída. Mas, para minha experiência, esse trabalho adicional sempre se paga.

Quando as primeiras partes do novo aplicativo estiverem em produção, a abordagem ágil e iterativa se tornará óbvia. Os requisitos mudarão, suas histórias de usuário mudarão ou obterão novas prioridades, e esperamos que você substitua cada vez mais a funcionalidade do sistema antigo em pequenas etapas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.