Dilema de controle de qualidade x iterações

17

Na minha empresa, trabalhamos com sucesso com práticas ágeis - mas sem usar iterações. O principal motivo é que não conseguimos encontrar uma maneira limpa de ajustar o controle de qualidade em um ciclo de iteração.

Entendemos o controle de qualidade como um pouco extra de verificação para uma determinada versão (candidato a lançamento) antes que essa versão seja implantada no cliente. O objetivo é evitar que um único commit malicioso danifique toda a versão. Como você nunca sabe qual é, o controle de qualidade precisa aguardar até que todos os recursos / confirmações para o lançamento estejam na compilação. (Nenhuma última palavra famosa "Foi apenas uma pequena alteração" permitida.)

Se o controle de qualidade encontrar erros em um candidato a lançamento, os desenvolvedores os corrigem no respectivo ramo de lançamento (e o mesclam no tronco). Quando todos os erros são corrigidos, uma nova compilação é implantada para que o controle de qualidade seja testado novamente. Somente quando nenhum bug é encontrado em um determinado candidato à liberação, ele é oferecido ao cliente para verificação.

Isso geralmente leva de dois a três candidatos, cerca de uma semana, por release. O tempo para escrever as correções geralmente é muito menor do que os esforços de teste. Portanto, para manter os desenvolvedores ocupados, eles trabalham no release N + 1, enquanto o QA trabalha no N.

Sem usar iterações, isso não é problema, pois podemos sobrepor o trabalho das versões N e N + 1. No entanto, pelo que entendi, isso não é compatível com abordagens baseadas em iteração como Scrum ou XP. Eles exigem que uma iteração seja liberável ao final, com todo o esforço de teste a ser incorporado na iteração.

Acho que isso leva necessariamente a um dos seguintes resultados indesejados:

(A) Os desenvolvedores estão ociosos no final de uma iteração porque o controle de qualidade precisa de tempo para verificar um candidato a lançamento e o trabalho de correção de bugs não está mantendo completamente os desenvolvedores ocupados.

(B) O controle de qualidade já começa a funcionar antes que o candidato à primeira liberação esteja pronto. É o que é mais recomendado no Stack Exchange. Mas não é o que minha empresa entende como controle de qualidade, porque não há nenhum candidato a release específico testado. E a "pequena mudança" que quebra tudo ainda pode ser introduzida despercebida.

(C) Os erros são transferidos para a próxima iteração. Isso também é recomendado no Stack Exchange. Não acho que seja uma solução. Basicamente, significa que nunca estamos obtendo uma compilação verificada, porque sempre que são feitas correções de bugs, novas confirmações não verificadas também são adicionadas à mesma ramificação.

Existe alguma maneira de sair desse dilema?

Wolfgang
fonte
4
Por que o controle de qualidade leva tanto tempo? Seus testes automatizados não estão capturando regressões?
psr
2
@ psr: Acima do nível da unidade, é raro que tudo possa ser automatizado. A AIUI, sua equipe de controle de qualidade, está testando no nível de integração e aceitação. E os testes automatizados não conseguem encontrar tudo, especialmente quando o tempo começa a desempenhar um papel.
Bart van Ingen Schenau

Respostas:

9

Entendemos o controle de qualidade como um pouco extra de verificação para uma determinada compilação (candidato a lançamento) antes que essa compilação seja implantada no cliente.

Não há nada inerentemente incompatível entre essa forma de controle de qualidade e metodologias baseadas em iteração como o Scrum.
No Scrum, a equipe entrega um produto em um ciclo semanal X para seu cliente. A parte importante aqui é que, se a equipe de desenvolvimento estiver executando o Scrum, o cliente será a equipe de controle de qualidade, não o usuário final do seu produto.

Como desenvolvedor, eu consideraria um produto que pode ser entregue ao controle de qualidade se tiver uma chance de ser aprovado em todos os testes. Isso provavelmente significa que alguns dos testes de controle de qualidade já foram executados nas compilações diárias, mas como isso afeta os testes de versão oficial da equipe de controle de qualidade depende da sua organização.

Bart van Ingen Schenau
fonte
1
Essa abordagem de jogar fora da parede para o controle de qualidade tende a apresentar seus próprios problemas. Aumenta drasticamente o tempo de feedback quando você introduz um bug. Se você escrever algo no início do ciclo e o controle de qualidade não o testar até o final, mas você perdeu algum caso crítico, sua mente deixou esse desenvolvimento específico para trás no momento em que o bug foi relatado. Melhor ter os recursos testados à medida que estão completos.
PDR
1
@pdr: Por esse motivo, seria uma boa prática executar uma parte dos testes de controle de qualidade de maneira não oficial na versão mais complexa. Algumas indústrias precisam apenas de um nível de confiança mais alto do que "funcionou quando o testamos na conclusão de recursos". Eles precisam de um nível de confiança "funciona corretamente na versão exata que nós entregamos a você".
Bart van Ingen Schenau
Como você sugere que o controle de qualidade encontre tempo para testar uma versão futura, quando eles estão sob pressão para testar o candidato a lançamento e tirá-lo da porta?
PDR
1
@pdr: não adiando os testes não oficiais para o controle de qualidade, mas para executá-los como equipe de desenvolvimento. Eles destinam-se principalmente a aumentar seu nível de confiança de que você está fornecendo software de qualidade de qualquer maneira.
Bart van Ingen Schenau
Eu adoraria concordar. Foi minha experiência que, quanto mais você separa o desenvolvedor e o controle de qualidade, mais a culpa é do controle de qualidade e menos responsáveis ​​se tornam os desenvolvedores de qualidade. Novamente, enquanto está sob pressão para fazer o trabalho de desenvolvimento, o controle de qualidade não oficial se torna uma tarefa secundária e não concluída, porque não são os desenvolvedores que terão problemas se o software falhar na produção. Se o controle de qualidade e o desenvolvedor trabalham como uma única unidade para fornecer software juntos, isso não acontece muito.
Pd
11

Para a maioria das situações da vida real, o ágil para na entrega ao QA / UAT ou como quer que seja chamado.

O esforço para passar do controle de qualidade para a produção em um ambiente da vida real é frequentemente subestimado. Em muitos casos, isso envolve usuários reais de negócios em testes, o gerenciamento sai da linha real de gerentes de negócios, agendando o lançamento com operações etc. etc. Isso não é trivial!

Em casos extremos, o software pode precisar de certificação por agências externas ou estar sujeito a testes de segurança rigorosos.

Nessas circunstâncias, é simplesmente impossível prever mais de uma versão por trimestre, exceto correções de bugs.

Fica pior para um produto de software sério. A documentação precisa ser revisada e publicada. As brochuras de marketing precisam ser alteradas. O pessoal de vendas precisa ser informado sobre o que está vendendo (não é tarefa fácil!) Etc. etc. Você realmente não deseja promover os negócios mais de uma vez por ano.

James Anderson
fonte
5

A solução a curto prazo é dar ao controle de qualidade um período extra após a iteração para finalizar o teste. ie Se você tiver uma iteração de duas semanas, não a liberte até a terceira semana. O controle de qualidade não terá nada para testar na próxima iteração, durante a primeira semana dela.

Mas vou avisá-lo com antecedência o que acontecerá (tendo visto isso em várias equipes): você terminará em uma situação em que uma iteração você realiza o trabalho de duas semanas, o controle de qualidade está sobrecarregado, eles estão procurando por você semana inteira do controle de qualidade e, na iteração a seguir, você realizará apenas o trabalho de uma semana. Essa iteração, o controle de qualidade não terá nada para fazer e você pensará que resolveu o problema. Mas, na próxima iteração, você iniciará o ciclo novamente.

Assim, assim que você adicionar essa semana, apenas para garantir que seu lançamento seja estável (porque uma coisa que aprendi é que, se você perder a fé nos negócios, o Agile fica exponencialmente mais difícil de implementar), siga em frente para o plano de longo prazo.

Compre uma cópia da Entrega Contínua de Jez Humble , leia-a, capa a capa, passe para a equipe. Inspire todos. Em seguida, implemente tudo o que puder dele.

Torne o processo de criação o mais liso possível. Implemente uma política de teste de unidade e faça com que as pessoas executem em todas as versões. Faça do processo de implantação a coisa mais esperta que você já viu. Três cliques? Não é liso o suficiente.

Depois de fazer tudo isso, não importará muito se o erro de regressão ocasional passar. Você sabe porque? Porque você poderá (opcionalmente) reverter, corrigi-lo e implantar novamente, antes que os negócios desmoronem. De fato, o zelador noturno poderá reverter para você, o processo será muito simples.

Sei o que você está pensando: não temos tempo para fazer tudo isso. Deixe-me dizer-lhe, você faz. Se você está sobrecarregando o controle de qualidade, está implantando demais por iteração. Então não. Se você ainda não está sobrecarregando, pergunte-lhes por que eles ainda não têm suítes de teste automatizadas. Você logo estará.

Faça tudo isso com total visibilidade para os negócios. Faça uma estimativa mais baixa e injete parte desse trabalho na iteração. Ou, melhor ainda, divida-o em histórias e faça com que eles o priorizem, junto com todo o resto.

Explique a eles que a) melhorará a estabilidade do lançamento eb) melhorará sua capacidade de responder a problemas para eles ec) comprará mais velocidade posteriormente. É uma empresa rara que não quer essas coisas. Certamente não é uma empresa ágil que não os deseja, portanto, se você tiver resistência, saberá que tem um problema diferente.

Depois de baixar a Entrega contínua, você pode começar a reduzir o tempo de controle de qualidade no final da iteração. É do interesse de todos trazer as iterações de volta em paralelo, o mais rápido possível. Talvez você tenha um dia no final da iteração, onde precisará preencher o tempo. Eu já respondi o que fazer sobre isso em outro lugar .

pdr
fonte
2

Sem usar iterações, isso não é problema, pois podemos sobrepor o trabalho das versões N e N + 1.

Parece haver um problema com a maneira como você decidiu o que exatamente constitui work for release N.

Por algum motivo estranho (só posso supor que haja algum mal-entendido sobre receitas específicas do Agile), você decidiu que a abordagem ágil exige que todos os esforços da equipe de controle de qualidade sejam incorporados na iteração.

  • Se esse fosse realmente o caso, suponho que a popularidade do Agile não chegasse nem perto do que vemos agora. Não consigo imaginar muitos projetos que poderiam "sobreviver" à sincronização obrigatória de iterações da equipe de desenvolvimento com ciclos de teste de controle de qualidade.

Há um pouco mais de agilidade abaixo, mas primeiro, vamos resolver work for release N...


Olha, simplesmente não há motivo para a equipe de desenvolvimento definir o trabalho dessa maneira. Muito pelo contrário, a partir de sua descrição, é claro que, em vez de "unidade de trabalho" monolítica, existem várias dessas unidades, com marcos fáceis de sentir ...

  • Por exemplo, a primeira "unidade" é indicada por um marco distinto quando a construção do candidato é passada aos testadores, e outros marcos correspondem a alterações envolvidas nos ciclos de teste realizados pelo controle de qualidade, etc.

Observe também que a maneira como você define work for release Ntambém não é forçada pelo fluxo de trabalho do controle de qualidade. Pelo que você descreve, as coisas parecem ter um cronograma próprio (e bastante razoável).

Dado acima, a maneira mais realista de definir as unidades de trabalho no seu caso pode ser a seguinte:

  1. Atividades de desenvolvimento até o momento em que a construção é passada para o controle de qualidade
    Release Candidate N
  2. Atividades de desenvolvimento relacionadas ao primeiro ciclo de teste do controle de qualidade
    Release Candidate N patch 1
  3. Atividades de desenvolvimento relacionadas ao segundo ciclo de teste do controle de qualidade
    Release Candidate N patch 2
  4. etc, até a compilação final

Acima estão suas unidades de trabalho, não importa se você faz o Agile ou o que quer.

Estes são naturais e convenientes para definir, seguir e acompanhar. Isso também combina bem com o cronograma de controle de qualidade, permitindo uma coordenação conveniente dos esforços de desenvolvimento e controle de qualidade.


No entanto, pelo que entendi, isso não é compatível com abordagens baseadas em iteração como Scrum ou XP. Eles exigem que uma iteração seja liberável ao final, com todo o esforço de teste a ser incorporado na iteração.

Acima da compreensão da compatibilidade com o Agile parece fundamentalmente errado e aqui está o porquê ...

A suposição que você fez não tem nada a ver com o Agile, se considerarmos sua filosofia pelo valor nominal indicado pelo próprio nome, que é uma abordagem que favorece e pratica a agilidade .

Nessa perspectiva, manter um fluxo de trabalho "fixo" específico e ignorar se é conveniente ou não simplesmente contradiz o espírito do Agile. Seguir servilmente o "procedimento" leva a práticas denegridas de maneira tão eloquente no Manifesto Ágil Semi-Arsed "... temos processos e ferramentas obrigatórios para controlar como esses indivíduos (preferimos o termo 'recursos') interagem" .


Você pode encontrar mais informações sobre isso em uma resposta a outra pergunta , citada abaixo. Dê uma olhada na nota sobre "release entregável", parece que naquela época o OP havia sido confundido de maneira semelhante:

é preciso ser ágil quanto à aplicação de princípios ágeis. Quero dizer, se os requisitos do projeto não são ágeis (estáveis ​​ou mudam lentamente), por que se preocupar? Certa vez, observei a alta gerência forçando o Scrum em projetos que estavam indo perfeitamente bem sem. Que desperdício foi. Não apenas não houve melhorias na entrega, mas, pior ainda, desenvolvedores e testadores ficaram infelizes.

Para mim, uma das partes mais importantes do Agile é ter um lançamento que pode ser entregue no final de cada sprint. Isso implica várias coisas. Primeiro, um nível de teste deve ser feito para garantir que não ocorram erros, se você acha que pode liberar a construção para um cliente ...

Liberação Shippable eu vejo. Hum. Hummm. Considere adicionar uma ou duas doses de Lean em seu cocktail Agile. Quero dizer, se essa não é uma necessidade do cliente / mercado, isso significaria apenas um desperdício de recursos (de teste).

Eu, por um lado, não vejo nada de criminoso ao tratar a liberação final da Sprint como apenas um ponto de verificação que satisfaz a equipe.

  • dev: sim, parece bom o suficiente para passar aos testadores; QA: Sim, parece bom o suficiente para o caso, se forem necessários mais testes entregáveis - coisas assim. A equipe (dev + QA) está satisfeita, é isso.
mosquito
fonte