Escolar Documentos
Profissional Documentos
Cultura Documentos
Capítulo 12
SUMÁRIO DE
QUADRANTES DE TESTE
Teste Exploratório
Testes de confiabilidade
241
produt
Crítica
Machine Translated by Google
Automatizado
Voltado para negócios Manual
& Manual
do
Testes Funcionais Teste Exploratório
Exemplos Cenários
2º trimestre 3º trimestre
1º trimestre 4º trimestre
odneapiioupqA
e
a
Automatizado Ferramentas
Voltado para a tecnologia
A história a seguir é sobre o sucesso de uma organização ao testar todo o seu sistema usando
uma variedade de ferramentas locais e de código aberto. Janet trabalhou com essa equipe e
Paul Rogers foi o principal arquiteto de testes. Esta é a história de Paulo.
A Aplicação O sistema
Site
Satélite
Satélite
UTR H/W
Modem
Cliente
Rede TCP
Ponte
Terceiros
Aplicativo
Dados na fila JMS
Pontes de rede
Serviços web
Rede
Roteamento e Dados Dados Apresentação e Servidor
distribuição de mensagens Em processamento Gerenciamento Navegação
Servidor DB
Usuário básico
Base de dados Entrega de mensagens
Centro
E-mail, Fax, Foto
O aplicativo de software era um enorme sistema legado que tinha poucos testes unitários.
A equipe estava reconstruindo lentamente o aplicativo com novas tecnologias.
A Equipe e o Processo
Testes unitários
Os testes unitários são testes voltados para a tecnologia que oferecem suporte à programação. Aqueles que
O Capítulo
7, “Testes são desenvolvidos como parte do desenvolvimento orientado a testes não apenas ajudam o programador
voltados para a a entender a história corretamente, mas também ajudam a projetar o sistema.
tecnologia que
dão suporte à
Os programadores do projeto Monitoramento Remoto de Dados compraram o Test
equipe”, explica
mais sobre testes unitários e Desenvolvimento
TDD. Orientado (TDD) e programação em pares de todo o coração. Tudo novo
a funcionalidade foi desenvolvida e testada usando programação em pares. Todas as histórias
entregues aos testadores foram suportados por testes unitários, e muito poucos bugs foram
encontrado após a codificação ser concluída. Os bugs encontrados foram geralmente
relacionados com a integração.
No entanto, quando a equipe começou, o sistema legado tinha poucos testes unitários para
apoiar a refatoração. À medida que as mudanças no processo foram implementadas, os desenvolvedores
Machine Translated by Google
AUTOMAÇÃO 245
decidiu começar a resolver o problema. Cada vez que eles tocavam em um pedaço de código
no sistema legado, eles adicionaram testes unitários e refatoraram o código conforme necessário.
Gradualmente, o sistema legado tornou-se mais estável e foi capaz de resistir a grandes refatorações
quando necessário. Experimentamos o poder de
testes unitários!
Testes de aptidão
O engenheiro de produto (o representante do cliente) assumiu a responsabilidade pela criação do
testes de aptidão. Esses testes variaram em formato dependendo da história real.
Embora tenha lutado no início, o engenheiro de produto ficou muito bom em dar
os testes para os programadores antes de começarem a codificar. A equipe criou um
modelo de teste, que evoluiu ao longo do tempo, que atendeu às necessidades dos programadores e
as necessidades dos testadores.
Os testes às vezes eram escritos informalmente, mas incluíam dados, configuração necessária se não
fosse imediatamente óbvio, variações diferentes que eram
crítica para a história e alguns exemplos. A equipe descobriu que os exemplos ajudaram
esclarecer as expectativas para muitas das histórias.
Esses testes de aceitação serviram a três propósitos. Eles eram testes voltados para negócios
Consulte o Capítulo 8,
que apoiaram o desenvolvimento porque foram entregues à equipe antes da codificação
“Relacionado aos negócios
Testes que apoiam a equipe”, iniciado. Em segundo lugar, eles foram usados pela equipe de teste como base para automação
para saber mais sobre isso alimentou o conjunto de regressão e forneceu ideias futuras para testes exploratórios. O terceiro
como conduzir o
objetivo foi confirmar se a implementação atendeu às necessidades
desenvolvimento com
do cliente. O engenheiro de produto fez esta verificação da solução.
testes de aceitação.
AUTOMAÇÃO
A automação envolveu a estrutura de testes funcionais, serviços web e testes incorporados.
O código de teste automatizado incluía três camadas distintas, mostradas na Figura 12-3.
A camada mais baixa, Camada 1, incluía Watir e outras classes, como loggers
que gravou nos arquivos de log.
A segunda camada, Camada 2, era a camada de acesso à página, onde as classes que continham
código para acessar páginas da web individuais. Por exemplo, no pedido em
test (AUT) havia uma página de login, uma página de criação de usuário e uma página de edição de usuário.
Classes escritas em Ruby continham código que poderia executar certas funções em
o AUT, como uma classe que faz login no aplicativo, uma classe para editar um usuário e um
classe para atribuir direitos de acesso a um usuário. Essas classes não continham dados. Por exemplo, a
classe log-in não sabia com qual nome de usuário fazer login.
Por exemplo, o teste real chamaria LogIn e passaria Janet como o nome de usuário
e Passw0rd como senha. Isso significava que você poderia alimentar muitos
conjuntos de dados facilmente.
AUTOMAÇÃO 247
A Camada 2 também sabia como lidar com as mensagens de erro geradas pelo aplicativo. Por
exemplo, quando um nome de usuário inválido foi inserido na página de login,
a classe de login detectou a mensagem de erro e depois devolveu o problema
aos testes na Camada 3.
Isso significa que as mesmas classes da Camada 2 podem ser usadas para testes de caminho feliz
e para testes negativos. No caso negativo, a Camada 3 esperaria que a Camada 2
retornaria uma falha e verificaria se o teste falhou pelo motivo correto, acessando as mensagens de
erro que a Camada Dois extraiu do navegador.
Serviços web
Os serviços da Web eram usados pelos clientes para fazer interface com alguns de seus outros
aplicativos. O grupo de desenvolvimento usou Ruby para escrever um cliente para testar cada serviço
eles desenvolveram. Para esses testes, o framework de testes unitários do Ruby, Test::Unit, foi
usado.
Os testes de serviços web foram ampliados pela equipe de teste para cobrir mais de
1.000 casos de teste diferentes e levaram apenas alguns minutos para serem executados. Eles deram ao time
uma quantidade incrível de cobertura em um curto período de tempo.
Eles usaram IRB, a interface interativa fornecida por Ruby, e alimentaram valores em
um método exploratório. Proporcionou ao cliente um ambiente interativo para
descobrir o que funcionou e o que não funcionou. Também permitiu que eles se familiarizassem com
Ruby e como estávamos testando, e isso deu a eles muito mais confiança
nossos testes. Grande parte do teste de aceitação do usuário foi feito usando IRB.
Três inclinações diferentes nos testes de serviços da web serviram a três propósitos diferentes. Os
programadores o usaram para ajudar a testar seus clientes e impulsionar seu desenvolvimento. Os
testadores usaram-no para criticar o produto de uma forma automatizada muito eficiente.
Machine Translated by Google
Teste incorporado
Além da interface web, o sistema RDM consistia em um pequeno dispositivo embarcado que se
comunicava com equipamentos de medição utilizando vários
protocolos. Utilizando Ruby, vários testes foram desenvolvidos para testar parte de sua interface
administrativa. Essa interface era um sistema de linha de comando semelhante ao FTP.
Esses testes baseados em dados foram contidos em uma planilha Excel. Um rubi
script leria comandos do Excel usando a interface OLE e enviaria
para o dispositivo incorporado. O script então compararia a resposta
do aparelho com o resultado esperado, também realizado na planilha. Erros
foram destacados em vermelho. Esses testes automatizados levaram aproximadamente uma hora
para ser executado, enquanto fazer os mesmos testes manualmente levaria oito horas.
Embora isso tenha fornecido muita cobertura de teste, na verdade não testou o motivo pelo qual
foi utilizado um dispositivo que era para ler dados das UTRs. Um simulador foi escrito
em Ruby com uma GUI FOX (FXRuby). Isso permitiu que dados simulados fossem inseridos no
dispositivo. Como o simulador podia ser controlado remotamente, ele foi incorporado em testes
automatizados que exercitaram a capacidade do dispositivo embarcado de
ler dados, responder a condições de erro e gerar alarmes quando a entrada
os dados excederam um limite predeterminado.
Os testes incorporados são altamente técnicos, mas com o poder fornecido pelo
simulador, toda a equipe pôde participar dos testes do aparelho. O
O simulador foi escrito para dar suporte aos testes da equipe de teste, mas o programador do
firmware achou-o valioso e também o usou para ajudar em seus esforços de desenvolvimento.
Esse foi um efeito colateral inesperado e positivo. Quadrante 2
testes que apoiam a equipe podem incorporar uma variedade de tecnologias, pois
fiz neste projeto.
Teste Exploratório
Os testes automatizados eram simples e fáceis de usar por todos da equipe.
Scripts de teste individuais podem ser executados para configurar condições específicas, permitindo
Machine Translated by Google
O teste de usabilidade não era um requisito crítico para o sistema, mas os testadores
observei para que a interface fizesse sentido e fluísse suavemente. Os testadores
usou testes exploratórios extensivamente para criticar o produto. O engenheiro de produto também
utilizou testes exploratórios para os testes de verificação de sua solução.
O quadrante 3 inclui testes funcionais ponta a ponta que demonstram o comportamento desejado de
cada parte do sistema. Desde o início, ficou evidente
que a operação correta de todo o sistema de monitoramento remoto de dados poderia
só será determinado quando todos os componentes forem usados. Depois que o simulador, os testes
de dispositivos incorporados, os testes de serviços da Web e os testes de aplicativos foram escritos, ele
foi uma questão relativamente simples combiná-los para produzir um teste automatizado
de todo o sistema. Mais uma vez, foram utilizadas planilhas Excel para realização da prova
dados e classes Ruby foram escritas para acessar os dados e resultados esperados.
Por aqui. Teria sido altamente improvável que eles tivessem sido encontrados
com testes manuais, porque eram problemas esporádicos.
Como testes ponta a ponta como esses podem ser frágeis, eles podem não ser mantidos tão
parte do conjunto de regressão automatizada. Se todos os componentes do sistema
são bem cobertos com testes de regressão automatizados, testes automatizados de ponta a ponta
pode não ser necessário. No entanto, devido à natureza deste sistema, não foi
possível fazer um teste completo sem automação.
O Teste de Aceitação do Usuário (UAT) é a crítica final do produto por parte do cliente, que
deveria estar envolvido no projeto desde o início. Nisso
Por exemplo, o verdadeiro cliente estava na França, a milhares de quilômetros da equipe de
desenvolvimento. A equipe teve que ser inventiva para ter um UAT bem-sucedido. O
cliente veio trabalhar com os membros da equipe algumas vezes durante o
ano e assim pude interagir com a equipe um pouco mais facilmente do que se eles tivessem
nunca conheci.
Depois que a equipe introduziu o desenvolvimento ágil, Janet foi à França para facilitar o primeiro
UAT nas instalações do cliente. Funcionou bastante bem e o lançamento
foi aceito depois que alguns problemas críticos foram corrigidos. A equipe aprendeu muito com
essa experiência.
A segunda aprovação do UAT foi feita internamente. Para se preparar, a equipe trabalhou
com o cliente para desenvolver um conjunto de testes que o cliente poderia realizar para verificar
novas funcionalidades. O cliente pôde testar o aplicativo durante todo o ciclo de desenvolvimento,
portanto o UAT não produziu nenhum problema. O cliente
veio, fez os testes e assinou em um dia.
Confiabilidade
A confiabilidade, uma das “ilidades” abordadas pelos testes do Quadrante 4, foi um fator crítico
fator do sistema porque ele estava monitorando locais remotos que muitas vezes eram
Machine Translated by Google
DOCUMENTAÇÃO 251
DOCUMENTAÇÃO
grandes gráficos
possível. Para esse fim criamos tabelas e gráficos ao longo do caminho e publicamos
visíveis. -los nas áreas comuns. A Figura 12-4 mostra alguns dos gráficos que criamos.
Machine Translated by Google
Figura 12-4 Grandes gráficos visíveis usados pela equipe do projeto do sistema de monitoramento remoto
Ao planejar cada épico, lançamento ou iteração, trabalhe com a equipe do cliente para
compreender as prioridades do negócio e analisar riscos. Use os quadrantes para
ajudar a identificar todos os diferentes tipos de testes que serão necessários e quando
eles deveriam ser executados. O desempenho é o critério mais importante? É o
Machine Translated by Google
RESUMO 253
maior prioridade a capacidade de interface com outros sistemas? A usabilidade é talvez o aspecto mais
importante?
Os testes ponta a ponta parecem impossíveis de fazer? Sua equipe está achando difícil
escrever testes unitários? Como fez a equipe de Janet, faça com que todos experimentem diferentes
abordagens e ferramentas. Os quadrantes fornecem uma estrutura para um brainstorming produtivo sobre
maneiras criativas de realizar os testes que permitirão ao
equipe agrega valor ao negócio.
RESUMO
Neste capítulo, descrevemos um projeto real que utilizou testes de todos os quatro métodos ágeis.
quadrantes de teste para superar desafios de teste difíceis. Usamos exemplos
deste projeto para mostrar como as equipes podem ter sucesso com todos os tipos de testes.
Algumas lições importantes do projeto Sistema de Monitoramento Remoto de Dados são:
Toda a equipe deve escolher ou criar ferramentas que resolvam cada problema de teste.
Invista tempo na construção da arquitetura de teste certa que funcione para todos os
membros da equipe.
Encontre maneiras de manter os clientes envolvidos em todos os tipos de testes, mesmo que
estejam em locais remotos.
Relate os resultados dos testes de uma forma que mantenha todas as partes interessadas
informadas sobre a iteração e o progresso do projeto.
Não esqueça de documentar. . . mas apenas o que é útil.
Pense em todos os quatro quadrantes de testes ao longo de seus ciclos de desenvolvimento.
Use as lições aprendidas durante os testes para criticar o produto e impulsionar o desenvolvimento
nas iterações subsequentes.
Machine Translated by Google
Parte IV
AUTOMAÇÃO
A automação de testes é uma prática ágil central. Projetos ágeis dependem de automação.
Uma automação suficientemente boa libera a equipe para entregar código de alta qualidade com
frequência. Ele fornece uma estrutura que permite à equipe maximizar sua velocidade enquanto
mantendo um alto padrão. Controle de código-fonte, compilações automatizadas e testes
suítes, implantação, monitoramento e uma variedade de scripts e ferramentas eliminam
tédio, garantem a confiabilidade e permitem que a equipe faça sempre o seu melhor trabalho.
A automação também é um tópico vasto. Inclui tarefas como escrever shell simples
scripts, configurando propriedades de sessão e criando testes automatizados robustos.
A variedade e o número de ferramentas automatizadas parecem crescer exponencialmente à medida que
aprenda sobre melhores maneiras de produzir software. Felizmente, o número de livros excelentes que
ensinam maneiras de automatizar parece crescer com a mesma rapidez.
Este livro enfoca o papel do testador no desenvolvimento ágil. Como a automação é fundamental para
o desenvolvimento ágil bem-sucedido, precisamos conversar sobre isso, mas
não consigo começar a cobrir todos os aspectos do assunto. O que queremos explicar é
por que você, como testador, deve adotar a automação e como você e sua equipe
pode superar os muitos obstáculos que podem dificultar seus esforços de automação.
Esta seção descreve como você pode aplicar valores, princípios e práticas ágeis para desenvolver uma
estratégia de automação prática, superar barreiras e obter força na automação de testes.
Machine Translated by Google
Capítulo 13
Internet Segura
Razões para
Automatizar
Forneça feedback com antecedência e frequência
ROI/Investimento
Lista de Bret
Código legado
Temer
Velhos hábitos
257
Machine Translated by Google
258 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
Existem vários motivos para automatizar, além de dizermos que você precisa ter
automação para ter sucesso usando ágil. Nossa lista inclui o seguinte:
As equipes ágeis são capazes de entregar software pronto para produção no final de cada
iteração curta, tendo software pronto para produção todos os dias. Executando um
conjunto completo de testes de regressão aprovados pelo menos diariamente é uma prática indispensável,
e você não pode fazer isso com testes de regressão manuais. Se você não tiver nenhuma automação
agora, terá que fazer o teste de regressão manualmente, mas não deixe isso parar
você comece a automatizá-lo.
Se você executar seu teste de regressão manualmente, levará cada vez mais tempo
testando todos os dias, todas as iterações. Para que os testes acompanhem o ritmo da codificação, ou os
programadores precisam reservar um tempo para ajudar nos testes de regressão manual ou a equipe
precisa contratar mais testadores. Inevitavelmente, tanto a técnica
a dívida e a frustração crescerão.
Se o código não precisar passar por um conjunto de testes automatizados de regressão em nível de
unidade, os testadores provavelmente gastarão muito do seu tempo pesquisando, tentando reproduzir e
relatar esses bugs simples, e menos tempo encontrando.
bugs potencialmente graves no nível do sistema. Além disso, como a equipe não está desenvolvendo o
teste primeiro, é mais provável que o design do código seja menos testável e
pode não fornecer a funcionalidade desejada pela empresa.
Machine Translated by Google
Testar manualmente vários cenários diferentes pode levar muito tempo, especialmente se você estiver
digitando entradas em uma interface de usuário. Configurando dados para uma variedade
de cenários complexos pode ser uma tarefa árdua se você não tiver
maneira de acelerar isso. Como resultado, apenas um número limitado de cenários pode ser
testado e defeitos importantes podem ser perdidos.
Os testes manuais ficam repetitivos, especialmente se você estiver seguindo testes com script,
e os testes manuais tornam-se enfadonhos muito rapidamente. É muito fácil cometer erros
e ignorar até mesmo bugs simples. Etapas e até testes inteiros serão ignorados. Se
a equipe enfrenta um prazo apertado, há a tentação de economizar e o
o resultado é um problema perdido.
O ditado “construa uma vez, implemente para muitos” é o sonho de qualquer testador que se torna
realidade. A automação dos processos de construção e implantação permite saber exatamente o que
você está testando em qualquer ambiente.
Se estivermos pensando constantemente em como automatizar testes para uma correção ou um novo recurso, é
mais provável que pensemos em testabilidade e em um design de qualidade, em vez de em um projeto de qualidade.
hack rápido que pode ser frágil. Isso significa código melhor e testes melhores.
260 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
A história de Janete
Jason (um de meus colegas testadores) e eu estávamos trabalhando em alguns scripts de
automação de GUI usando Ruby e Watir e adicionando constantes para nomes de botões para os
testes. Rapidamente percebemos que os botões em cada página não tinham nomes consistentes.
Conseguimos alterá-los e resolver esses problemas de consistência muito rapidamente, além de ter
Consulte o Capítulo
9, “Kit de uma maneira fácil de aplicar as convenções de nomenclatura.
ferramentas para negócios
—Janet
Testes que apoiam a
equipe”, Capítulo 12,
“Resumo dos quadrantes
de testes” e Capítulo
14, “Uma estratégia ágil Livros como Pragmatic Project Automation [2004] podem orientá-lo na automatização
de automação de testes”, das tarefas diárias de desenvolvimento e liberar sua equipe para atividades importantes
para obter mais
como testes exploratórios.
informações sobre Ruby e
Watir.
Nossa automação de testes de regressão de UI cresceu 500% desde abril [de 2007].
Isto nos permite concentrar a atenção de seres humanos reais em testes mais
interessantes.
Chris continuou explicando: “Agora que temos muita automação, temos tempo livre
para realmente pensar sobre o que os testes humanos precisam fazer. Para qualquer
teste que não seja trivial, praticamente institucionalizamos uma sessão de
brainstorming de ideias de teste antes de iniciar a execução.” Normalmente, Chris e
seus colegas de equipe formam pares com dois testadores ou um testador e um desenvolvedor.
Às vezes, um testador gera ideias e as analisa por meio de um mapa mental, uma página
wiki ou uma lista nas notas de lançamento. Chris observou: “Quase sempre temos
boas ideias de testes por meio de pares que não teriam sido encontradas por nenhum
dos indivíduos de forma independente”.
Concordamos com Chris que a parte mais interessante da automação de testes é a maneira
como ela expande nossa capacidade de melhorar o produto por meio de testes exploratórios
inovadores.
Machine Translated by Google
Os projetos têm sucesso quando boas pessoas são livres para fazer o seu melhor trabalho. Automatizar os
testes adequadamente faz com que isso aconteça. Testes de regressão automatizados que
detectar alterações nas funcionalidades existentes e fornecer feedback imediato são
um componente primário disso.
A maioria dos profissionais que estão no ramo de software há alguns anos sabe
a sensação de pavor quando se deparam com a correção de um bug ou a implementação de um
novo recurso em código mal projetado que não é coberto por testes automatizados.
Aperte uma extremidade do balão aqui e outra parte ficará saliente. Será que
quebrar?
Saber que o código tem cobertura suficiente por testes de regressão automatizados dá
uma grande sensação de confiança. Claro, uma mudança pode produzir um efeito inesperado, mas
saberemos disso em questão de minutos se for no nível da unidade.
ou horas se estiver em um nível funcional superior. Fazer a mudança testar primeiro significa
pensando sobre a mudança de comportamento antes de escrever o código e escrever um
teste para verificá-lo, o que aumenta essa confiança.
Recentemente, conversei com um dos testadores da minha equipe que questionou o valor dos testes
A história de Janete
automatizados. Minha primeira resposta foi “É uma rede de segurança” para a equipe.
No entanto, ele desafiou essa premissa. Não nos tornamos dependentes apenas dos testes em vez de corrigir
a causa raiz do problema?
Isso me fez pensar um pouco mais sobre minha resposta. Ele estava certo em certo sentido; se nos tornarmos
complacentes com nossos desafios de teste e dependermos apenas de testes automatizados para encontrar
nossos problemas e, em seguida, corrigi-los o suficiente para que o teste seja aprovado, estaremos prestando
um péssimo serviço a nós mesmos.
No entanto, se usarmos os testes para identificar áreas problemáticas e corrigi-las da maneira certa ou refatorar
conforme necessário, estaremos usando a rede de segurança da automação da maneira certa. A automação é
fundamental para o sucesso de um projeto ágil, especialmente à medida que o tamanho da aplicação cresce.
—Janet
Quando não possuem um conjunto automatizado de testes que atue como rede de segurança, o
os programadores podem começar a ver os próprios testadores como uma rede de segurança. É fácil
imaginar que o processo de pensamento de Joe Programmer é assim: “Eu deveria
volte e adicione alguns testes de unidade automatizados para formatEmployeeInfo, mas eu
saiba que Susie Tester verificará todas as páginas onde for usado manualmente.
Ela verá se alguma coisa está errada, então eu estaria apenas duplicando o esforço dela.”
Machine Translated by Google
262 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
É bom que um programador tenha tanta consideração pelos talentos do testador, mas Joe está
caindo em uma ladeira escorregadia. Se ele não automatizar esses testes unitários, quais outros
testes ele poderá pular? Susie estará muito ocupada examinando todas essas páginas.
As equipes que possuem boa cobertura de testes de regressão automatizados podem fazer
alterações no código sem medo. Eles não precisam se perguntar: “Se eu alterar este módulo
formatEmployeeInfo, quebrarei alguma coisa na interface do usuário?”
Os testes dirão imediatamente se quebraram alguma coisa ou não. Eles podem ir muito mais rápido
do que equipes que dependem exclusivamente de testes manuais.
frequência Depois que um teste automatizado para uma parte da funcionalidade é aprovado, ele
deve continuar a ser aprovado até que a funcionalidade seja alterada intencionalmente. Quando
planejamos mudanças na aplicação, alteramos os testes para acomodá-las. Quando um teste
automatizado falha inesperadamente, um defeito de regressão pode ter sido introduzido por uma
alteração no código. Executar um conjunto automatizado de testes sempre que um novo código é
verificado ajuda a garantir que bugs de regressão sejam detectados rapidamente. Feedback rápido
significa que a mudança ainda está fresca na mente de alguns programadores, então a solução
de problemas será mais rápida do que se o bug não fosse encontrado até alguma fase de testes,
semanas depois. Falhar rápido significa que os bugs são mais baratos de corrigir.
Na maioria das vezes, se os testes de regressão não forem automatizados, eles não serão
executados em todas as iterações, muito menos todos os dias. O problema surge muito rapidamente
durante o final do jogo, quando a equipe precisa completar todos os testes de regressão.
Bugs que seriam detectados no início são encontrados no final do jogo. Muitos dos benefícios dos
testes precoces são perdidos.
No Capítulo 7, “Testes voltados para a tecnologia que apoiam a equipe”, falamos sobre o uso de
testes e exemplos para orientar a codificação. Já falamos sobre como é importante conduzir a
codificação com testes de unidade e de cliente. Queremos também salientar que se estes testes
forem automatizados, tornar-se-ão valiosos por uma razão diferente. Eles se tornam a base para
um conjunto de regressões muito forte.
Machine Translated by Google
A história de Lisa
Depois que minha equipe dominou testes de unidade, refatoração, integração contínua e outras
práticas voltadas para a tecnologia, conseguimos detectar bugs de regressão e funcionalidades
implementadas incorretamente durante o desenvolvimento.
É claro que isso não significava que nossos problemas estivessem completamente resolvidos; às
vezes ainda ignoramos ou entendemos mal os requisitos. No entanto, ter uma estrutura de
automação implementada nos permitiu começar a focar em fazer um trabalho melhor de captura de
requisitos em testes iniciais. Também tivemos mais tempo para testes exploratórios.
Com o tempo, nossa taxa de defeitos diminuiu drasticamente, enquanto a satisfação de nossos
clientes com o valor comercial entregue aumentou.
—Lisa
TDD e SDD (desenvolvimento orientado a testes de história) mantêm as equipes pensando primeiro nos
A bibliografia contém um
artigo de Jennitta Andrea testes. Durante as reuniões de planejamento, eles conversam sobre os testes e a melhor forma de
[2008] sobre etiqueta de faça-os. Eles projetam o código para fazer os testes passarem, de modo que a testabilidade nunca seja um
equipe para TDD. problema. O conjunto de testes automatizados cresce junto com a base de código, fornecendo uma
rede de segurança para refatoração constante. É importante que toda a equipe pratique TDD e escreva
testes unitários consistentemente, ou a rede de segurança terá falhas.
Na Parte III, explicamos como as equipes ágeis usam exemplos e testes para orientar o desenvolvimento.
Quando testes que ilustram exemplos de comportamento desejado são automatizados, eles se tornam
documentação “viva” de como o sistema realmente funciona.
funciona. É bom ter documentação narrativa sobre como funciona uma funcionalidade, mas ninguém pode
contestar um teste executável que mostra em
vermelho e verde como o código opera em um determinado conjunto de entradas.
264 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
ROI e retorno
Todas as razões apresentadas contribuem para os resultados financeiros e para o retorno da
automação. A automação fornece consistência a um projeto e dá
a oportunidade da equipe testar de forma diferente e ampliar os limites da aplicação. Automação
significa tempo extra para testadores e membros da equipe se concentrarem em colocar o produto
Lista de Bret
Usar apenas o tempo livre para automação de testes não dá o foco necessário.
Pode haver relutância em pensar em testes; a diversão está na automação, não nos testes.
Concentrar-se na solução do problema tecnológico pode fazer com que você perca de vista
se o resultado atende às necessidades do teste.
Achamos que existem alguns outros problemas que as equipes enfrentam ao tentar
automatizar. Mesmo que tentemos incluir a automação nas entregas do nosso projeto,
existem outras barreiras para o sucesso. Na próxima seção, apresentamos nossa lista de
obstáculos para uma automação de testes bem-sucedida.
Nossa lista
Nossa lista de barreiras para uma automação de testes bem-sucedida é baseada nas experiências
tivemos com nossas próprias equipes ágeis, bem como com as de outras equipes que conhecemos.
Velhos hábitos
Certa vez, entrei para uma equipe XP de programadores qualificados que praticavam desenvolvimento orientado
A história de Lisa
a testes e que tinham um conjunto razoável de testes unitários em execução em um processo de construção
automatizado. Eles nunca haviam automatizado nenhum teste voltado para os negócios, então um dia
comecei uma discussão sobre quais ferramentas eles poderiam usar para automatizar testes de regressão
funcionais voltados para os negócios. Os programadores queriam saber por que precisávamos automatizar esses testes.
Machine Translated by Google
266 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
A educação é a chave para fazer com que os programadores e o restante da equipe entendam
a importância da automação.
Freqüentemente, espera-se que novas equipes adotem práticas como TDD e refatoração, que
são difíceis de aprender. Sem um bom treinamento, há muito tempo para
dominar novas habilidades e um forte apoio gerencial, eles são facilmente desencorajados
envelhecido. Se eles tiverem obstáculos extras para aprender, como ter que trabalhar com
código legado mal projetado, pode parecer impossível obter força
automação de testes.
Minha equipe na ePlan Services originalmente tentou escrever testes unitários para um sistema legado que definitivamente
A história de Lisa
não foi escrito pensando em testes. Eles acharam que essa era uma tarefa difícil, se não impossível, então decidiram
codificar todas as novas histórias em uma arquitetura nova e testável. Curiosamente, cerca de um ano depois, eles
descobriram que não era tão difícil escrever testes unitários para o código antigo. O problema era que eles não
sabiam escrever testes unitários e era mais fácil aprender em uma arquitetura bem projetada.
Escrever testes em nível de unidade tornou-se simplesmente uma parte natural da escrita de código.
—Lisa
A dor pode ocorrer porque você está construindo seu domínio específico
estrutura de teste ou aprendendo sua nova ferramenta de teste funcional. Você pode querer
traga um especialista para ajudá-lo a configurar corretamente.
Você sabe que sua equipe superou o “obstáculo” quando a automação se torna,
se não for fácil, pelo menos um processo natural e arraigado. Lisa trabalhou em três
equipes que adotaram com sucesso o TDD e a automação de testes funcionais. Cada
Ao mesmo tempo, a equipe precisava de muito tempo, treinamento, comprometimento e incentivo
para obter força nas práticas.
Investimento inicial
Mesmo com toda a equipe trabalhando no problema, a automação requer um
grande investimento, que pode não render imediatamente. Leva tempo e pesquisa para decidir
quais estruturas de teste usar e se devem ser construídas
Muitas pessoas experimentaram esforços de automação de testes que não valeram a pena.
A organização deles pode ter adquirido uma ferramenta de captura e reprodução de fornecedor,
entreguei-o à equipe de controle de qualidade e esperava que ele resolvesse todos os problemas de
automação. Essas ferramentas geralmente ficam em uma prateleira acumulando poeira. Pode ter havido
milhares de linhas de scripts de teste de GUI gerados, sem sobrar ninguém que saiba
o que eles fazem, ou os scripts de teste que são impossíveis de manter não são mais
útil.
Machine Translated by Google
268 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
Entrei em uma organização como novo gerente de controle de qualidade. Uma das minhas tarefas era
A história de Janete
avaliar os scripts de testes automatizados atuais e aumentar a cobertura dos testes. Uma ferramenta de
fornecedor foi adquirida alguns anos antes e os testadores que desenvolveram o conjunto inicial não
estavam mais na organização. Um dos novos testadores contratados estava tentando aprender a
ferramenta e adicionando testes ao conjunto.
A primeira coisa que fiz foi pedir a esse testador para fazer uma avaliação do conjunto de testes para ver
qual era realmente a cobertura. Ela passou uma semana apenas tentando entender como as provas eram
organizadas. Comecei a fuçar também e descobri que os testes existentes eram muito mal projetados e
tinham muito pouco valor.
Paramos de adicionar mais testes e, em vez disso, passamos um pouco de tempo entendendo qual era o
objetivo de nossa automação de testes. No final das contas, a ferramenta do fornecedor não conseguiu
fazer o que realmente precisávamos, então cancelamos as licenças e encontramos uma ferramenta de
código aberto que atendesse às nossas necessidades.
Ainda tivemos que gastar tempo aprendendo a nova ferramenta de código aberto, mas esse investimento
teria sido feito se tivéssemos continuado com a ferramenta original do fornecedor, porque ninguém na
equipe sabia como usar a ferramenta original.
—Janet
As habilidades de design de teste têm um enorme impacto sobre se a automação compensa ou não
ausente. Práticas inadequadas produzem testes difíceis de entender e manter,
e pode produzir resultados difíceis de interpretar ou falsas falhas que levam tempo para serem
pesquisar. Equipes com treinamento e habilidades inadequadas podem decidir o retorno
em seu investimento em automação não vale seu tempo.
Boas práticas de design de testes produzem testes simples, bem projetados, continuamente refatorados
e de fácil manutenção. Bibliotecas de módulos de teste e objetos são construídas
tempo e agilize a automação de novos testes. Veja o Capítulo 14 para algumas dicas
e diretrizes para design de teste para automação.
Sabemos que não é fácil capturar métricas. Por exemplo, tentar capturar o
tempo necessário para escrever e manter testes automatizados versus o tempo necessário para
executar os mesmos testes de regressão manualmente é quase impossível. Da mesma forma, tentando
capturar quanto custa corrigir defeitos minutos após a introdução
eles versus quanto custa encontrar e corrigir problemas após o final do
a iteração também é bastante difícil. Muitas equipes não se esforçam para rastrear isso
Informação. Sem números mostrando que automatizar exige menos esforço
e agrega mais valor, é mais difícil para as equipes convencer a gestão de que
vale a pena investir em automação. A falta de métricas que demonstrem o retorno sobre o investimento
Automatizar testes por meio da interface do usuário é complicado, porque as UIs tendem a
mudam frequentemente durante o desenvolvimento. Essa é uma das razões pelas quais esse registro simples
e as técnicas de reprodução raramente são uma boa escolha para um projeto ágil.
Em nossa experiência, é muito mais fácil obter tração na automação se você estiver escrevendo
um código totalmente novo em uma arquitetura projetada com testes em mente. Escrita
testar códigos existentes que tenham poucos ou nenhum teste é, na melhor das hipóteses, uma tarefa assustadora. Parece
praticamente impossível para uma equipe novata em agilidade e novata em automação de testes.
Às vezes é um beco sem saída. Você deseja automatizar testes para poder refatorar
parte do código legado, mas o código legado não foi projetado para ser testado, então
é difícil automatizar testes mesmo em nível de unidade.
Se sua equipe enfrenta esse tipo de desafio e não dispõe de tempo suficiente para
Se você fizer um brainstorming sobre como lidar com isso, será difícil começar a automatizar testes de
maneira eficaz. O Capítulo 14 apresenta estratégias para abordar estas questões.
Temer
A automação de testes é assustadora para quem nunca a dominou e até para alguns
quem têm. Os programadores podem ser bons em escrever código de produção, mas
pode não ter muita experiência em escrever testes automatizados. Os testadores não podem
têm uma sólida experiência em programação e não confiam em seu potencial
habilidades de automação de testes.
Os testadores que não são de programação muitas vezes recebem a mensagem de que
nada a oferecer no mundo ágil. Acreditamos no contrário. Nenhum testador individual
Machine Translated by Google
270 CAPÍTULO 13 POR QUE QUEREMOS AUTOMATIZAR OS TESTES E O QUE NOS RETÉIA
Velhos hábitos
Quando as iterações não ocorrem sem problemas e a equipe não consegue concluir todos os
as tarefas de programação e teste ao final de uma iteração, os membros da equipe
pode entrar em pânico. Observamos que quando as pessoas entram em pânico, elas caem
em velhos hábitos confortáveis, mesmo que esses hábitos nunca tenham produzido bons resultados.
Este é o caminho para a perdição. Alguns testes manuais podem ser feitos, mas talvez não
os importantes testes exploratórios manuais que teriam encontrado o bug que
custou à empresa centenas de milhares de dólares em vendas perdidas. Então, como não terminamos
nossas tarefas de automação de testes, essas tarefas são transferidas
para a próxima iteração, reduzindo a quantidade de valor comercial que podemos entregar.
À medida que as iterações avançam, a situação continua a deteriorar-se.
“Desafios Culturais”, pela entrega de código, seja ele cheio de bugs ou não, desde que eles
para obter algumas cumprir prazos. O desenvolvimento orientado a testes é mais orientado para o design
ideias sobre como
do que testes, então os testes voltados para os negócios ainda podem não entrar em sua consciência.
fazer mudanças
na cultura da equipe É preciso liderança e comprometimento da equipe com a qualidade para que todos pensem sobre
para facilitar práticas ágeis. como escrever, usar e executar testes voltados para a tecnologia e para os negócios. Envolver toda
a equipe na automação de testes pode ser uma
desafio cultural.
No próximo capítulo, mostraremos como usar valores e princípios ágeis para superar alguns dos
problemas descritos neste capítulo.
Machine Translated by Google
RESUMO 271
RESUMO
Neste capítulo, analisamos alguns fatores importantes relacionados à automação de testes:
Precisamos de automação para fornecer uma rede de segurança, fornecer feedback essencial,
manter o débito técnico ao mínimo e ajudar a impulsionar a codificação.
Medo, falta de conhecimento, experiências anteriores negativas com automação, código em
rápida mudança e código legado estão entre as barreiras comuns à automação.
Capítulo 14
UM TESTE ÁGIL
ESTRATÉGIA DE AUTOMAÇÃO
Pirâmide de Teste
Automação
O que pode
GUI
Automatizamos?
Identificando Requisitos
Carregar
Uma ferramenta de cada vez Avaliando
Automação Comparações
Escolhendo ferramentas Ferramentas
Tarefas repetitivas
Ferramentas ágeis
Criação ou configuração de dados
Desenvolvendo
uma automação
Estratégia
Ferramentas de geração de dados
Usabilidade
Evite acesso ao banco de dados Fornecimento
Dados para Exploratório
O que não deveríamos
Quando o acesso ao banco de dados é inevitável
Testes
automatizar? Testes que nunca falharão
Entenda suas necessidades
Testes únicos
Mantenha simples
O que pode ser difícil
Feedback Iterativo de automatizar?
273
Machine Translated by Google
À medida que exploramos cada um dos quadrantes de testes ágeis na Parte III, demos exemplos de
ferramentas que podem ajudar o sucesso desses diferentes esforços de testes. Muitas dessas
ferramentas são para automatizar testes. Conforme descrevemos no capítulo anterior, as equipes
enfrentam muitos obstáculos em sua busca por uma automação de testes bem-sucedida. Ferramentas
melhores ficam disponíveis o tempo todo, mas o truque é escolher as ferramentas certas e aprender
a usá-las de maneira eficaz. A automação de testes requer investimentos cuidadosos e melhorias
incrementais. Neste capítulo, explicamos como você pode aplicar valores e princípios ágeis para obter
impulso ao iniciar ou melhorar seus esforços de automação.
Aqui está você, lendo este capítulo sobre como fazer sua estratégia de automação de testes funcionar,
talvez esperando por aquela solução mágica ou por uma resposta para todas as suas dúvidas.
questões. Odiamos desapontá-lo, mas precisamos dizer logo de cara:
Não há bala de prata. Não existe uma resposta que funcione para todas as equipes.
Não desanime, porque temos algumas ideias para ajudá-lo a começar.
Primeiro, sugerimos abordar seus problemas de automação como faria com qualquer
problema. Defina o problema que você está tentando resolver. Para ajudá-lo a descobrir isso
fora, primeiro falamos sobre alguns fundamentos da automação de testes e reintroduzimos alguns
termos.
Você pode ver que rotulamos os dois quadrantes que apoiam a equipe (Q1 e
Q2) como usar automação. No Quadrante 4, as ferramentas utilizadas para criticar o
produto do ponto de vista tecnológico também geralmente requer ferramentas automatizadas.
No Capítulo 9, “Kit de ferramentas para testes voltados para negócios que apoiam a equipe”, nós
discutimos algumas das ferramentas que podem ser usadas para automatizar
testes na busca por apoiar a equipe. Na verdade, o único quadrante que não é
rotulado como usando automação é o Quadrante 3 – os testes voltados para os negócios que criticam o
produto. No entanto, como discutimos no Capítulo 10, “Recursos voltados para os negócios
Testes que criticam o produto”, as ferramentas podem ser úteis para alguns desses testes.
Por exemplo, a automação pode ajudar a configurar dados de teste e cenários de usuário, além de
analisar atividades registradas.
produt
Crítica
Machine Translated by Google
Automatizado
Voltado para negócios Manual
& Manual
do
Testes Funcionais Teste Exploratório
Exemplos Cenários
2º trimestre 3º trimestre
1º trimestre 4º trimestre
odneapiioupqA
e
a
Automatizado Ferramentas
Voltado para a tecnologia
Os quadrantes nos ajudam a descobrir quais ferramentas podemos precisar, mas com tantas
diferentes opções de automação em diferentes níveis, uma estratégia de onde fazer
quais tipos de testes e como organizá-los é essencial. Para entregar valor
de forma rápida e frequente, nossos esforços de automação precisam de um alto ROI. A pirâmide de teste
nos ajuda a otimizar nosso investimento em testes.
No desenvolvimento ágil, tentamos enviar o máximo de testes possível para esta camada.
Consulte o Capítulo 7,
Embora os testes voltados para os negócios tendam a ocorrer em um dos níveis mais altos, nós os
“Testes voltados
para a tecnologia que implementamos no nível da unidade quando faz sentido. Se eles testarem os clientes
apoiam a equipe” não precisam ser capazes de ler e podem ser codificados muito mais rapidamente, pois
para obter mais
testes unitários, é uma boa opção. Outros tipos de testes voltados para a tecnologia, como
informações sobre testes
unitários e de componentes.
testes de desempenho também podem ser possíveis no nível da unidade.
Machine Translated by Google
Manual
Testes
GUI
Testes
Testes de aptidão
(Camada API)
A camada intermediária da pirâmide é a camada que inclui a maioria dos testes automatizados voltados para
Consulte o Capítulo 8,
os negócios, escritos para apoiar a equipe. Esses são os testes funcionais que verificam se estamos
"Visado para negócios
Testes que apoiam a “construindo a coisa certa”. Os testes neste
equipe", para saber camada pode incluir testes de “história”, testes de “aceitação” e testes que cobrem
mais sobre
conjuntos de funcionalidades do que a camada de teste de unidade. Esses testes operam na API
voltado para negócios
nível ou “por trás da GUI”, testando a funcionalidade diretamente, sem passar
testes que apoiam a
equipe. através da GUI. Escrevemos casos de teste que configuram entradas e fixtures que alimentam
as entradas no código de produção, aceite as saídas e compare-as
aos resultados esperados. Como esses testes ignoram a camada de apresentação, eles são
menos dispendioso para escrever e manter do que testes que usam a interface.
Fit e FitNesse são exemplos de ferramentas utilizadas para a camada intermediária da pirâmide.
Nós temos mais
sobre esses testes
Equipamentos de teste desenvolvidos internamente que usam planilhas ou outros meios de negócios
para o negócio
testes que apoiam a Esses testes são tradicionalmente mais caros de escrever, embora existam novos
equipe e o ferramentas que ajudam a reduzir o investimento necessário. Porque os componentes do
ferramentas que efetivamente
a interface do usuário tende a ser alterada com frequência, esses testes são muito mais frágeis
capturar ativamente
esses testes.
do que testes que funcionam em nível funcional ou de unidade. Por exemplo, apenas renomeando
Elementos HTML podem causar falha em um script de teste. Operando através do usuário
interface também retarda esses testes, em comparação com testes nos níveis mais baixos de
a pirâmide que opera diretamente no código de produção. Os testes no topo
camada fornece feedback importante, mas um conjunto de testes de GUI pode levar horas
para ser executado, em vez dos poucos minutos necessários para conjuntos de testes em nível de unidade. Nós
deseja minimizar o número de testes nesta camada, então eles devem formar apenas
a ponta da pirâmide.
Não importa quantos testes automatizados eles tenham, a maioria dos sistemas também precisa de
atividades de teste manuais, como testes exploratórios e testes de aceitação do usuário.
Não queremos esquecê-los, por isso os ilustramos com a pequena nuvem em
a ponta da pirâmide. A maior parte dos nossos testes de regressão deve ser automatizada
ou nossos testes manuais também não nos proporcionarão um bom retorno do investimento.
Patrick Wilson-Welsh [2008] acrescenta uma dimensão descritiva à pirâmide de automação de testes
com uma metáfora dos “três porquinhos”. A base inferior
camada é feita de tijolos. Os testes são sólidos e não vulneráveis ao ataque
e o sopro do Lobo Mau. A camada intermediária é feita de palitos. Eles
precisa ser reorganizado com mais frequência do que a camada de tijolo para permanecer forte. Os testes em
a camada superior é feita de palha. É difícil fazê-los permanecer no lugar, e o
o lobo pode facilmente explodi-los. Se tivermos muitos testes feitos de
palha, vamos gastar muito tempo colocando-os de volta em forma.
A maioria das novas equipes ágeis não começa com esse formato de pirâmide – geralmente ela é
invertida, um resquício de projetos anteriores. Ferramentas de teste de GUI geralmente são mais fáceis de usar
aprendem, então as equipes começam com muitos testes em sua camada “palha” superior. Como nós
mencionado no capítulo anterior, o “corcunda de dor” que a maioria dos programadores tem que superar
para dominar a automação de testes unitários significa que a equipe
Machine Translated by Google
pode começar com apenas alguns tijolos. Os equipamentos que automatizam funções
Consulte a bibliografia para
testes na camada intermediária são fáceis de escrever se o sistema for projetado com aqueles
obter um link para a
discussão de Patrick testes em mente, para que os gravetos possam se acumular mais rápido que os tijolos. À medida que as
Wilson-Welsh sobre “inverter
equipes dominam o TDD e a automação de testes unitários, a camada inferior começa a crescer. Quando eles
a pirâmide de testes”
ganhar força, uma equipe que usa TDD construirá rapidamente a base de tijolos
a pirâmide de teste.
lado direito para cima.
A pirâmide de testes é um bom lugar para começar a ver como a automação de testes
pode ajudar uma equipe ágil. Os programadores tendem a se concentrar na base da pirâmide e precisam
de muito tempo e treinamento para superar o “corcunda”.
dor” e chegar ao ponto onde o TDD é natural e rápido. Em tradicional
equipes, os testadores geralmente não têm escolha a não ser automatizar os testes no nível da GUI.
A abordagem de equipe inteira usada por equipes ágeis significa que os testadores se unem
programadores e ajudá-los a melhorar a escrita de testes, o que, por sua vez, solidifica a camada de base
da pirâmide. Como os testes impulsionam o desenvolvimento, toda a equipe está sempre projetando para
máxima testabilidade, e o
pirâmide pode crescer até a forma correta.
Os programadores se unem aos testadores para automatizar testes de nível funcional, preenchendo
a camada intermediária. Por exemplo, um testador e um cliente podem preparar um arquivo de 400 linhas
planilha de casos de teste para uma aplicação de serviços web. O programador pode
ajude a descobrir uma maneira de automatizar esses testes. Diferentes membros da equipe podem
ter experiência em áreas como geração de dados de teste ou uso de ferramentas como macros Excel, e
todo esse conhecimento se espalha pela equipe. Trabalhando em conjunto, a equipe encontra as melhores
combinações de ferramentas, casos de teste e dados de teste.
Quanto mais uma equipe puder trabalhar junta e compartilhar conhecimento, mais forte será o
equipe, o aplicativo e os testes se tornarão. O Lobo Mau não vai
ter uma chance. Vamos começar analisando que tipo de testes podemos automatizar
e então naquilo que nem deveríamos tentar.
não conseguem executar testes rapidamente com o toque de um botão, eles podem não estar motivados
o suficiente para executar testes. Poderíamos testar manualmente que diferentes unidades de código
funcionam juntos corretamente, mas os testes automatizados de componentes são uma rede de segurança
muito mais eficaz.
O teste exploratório manual é uma forma eficaz de encontrar defeitos funcionais, mas
se não tivermos testes de regressão automatizados suficientes voltados para os negócios, provavelmente
gastaremos todo o nosso tempo tentando loucamente acompanhar a regressão manual
testando. Vamos falar sobre todos os diferentes tipos de testes que podem ser feitos
bem com automação.
Para executar testes automatizados, você precisa de algum tipo de estrutura automatizada que
permite que os programadores verifiquem o código com frequência, executem testes nesse código e criem
arquivos implantáveis. Vamos considerar isso primeiro.
a tecnologia que apoiam a processo. Você não pode construir sua pirâmide de testes automatizados sem isso. Seu
equipe”. a equipe precisa do feedback imediato dos testes em nível de unidade para permanecer no caminho certo.
para obter exemplos de
Receber e-mails de compilação automatizados listando todas as alterações verificadas é uma grande ajuda
ferramentas de automação
de construção.
para testadores porque eles sabem quando uma compilação está pronta para teste sem precisar
incomodar os programadores.
Num ambiente tradicional, é normal que os testadores esperem por uma compilação
estável, mesmo que isso signifique esperar até a próxima terça-feira. Em um ambiente ágil,
se os testadores não acompanharem os desenvolvedores, as histórias serão testadas no
final do jogo. Se os desenvolvedores não receberem feedback, como sugestões e bugs,
os testadores podem perder credibilidade junto aos desenvolvedores. Bugs não serão
descobertos até que os desenvolvedores já estejam em outra história e não queiram ser
interrompidos para corrigi-los até mais tarde.
Os bugs se acumulam e a automação sofre porque não pode ser concluída. A velocidade
é afetada porque uma história não pode ser marcada como “concluída” até ser testada.
Isso torna mais difícil planejar a próxima iteração. No final do ciclo de lançamento, o
teste da sua história chega ao final do jogo e você pode não ter um lançamento bem-
sucedido. No mínimo, você terá uma liberação estressante.
Machine Translated by Google
Conversamos com equipes que tiveram tempos de construção de duas horas ou mais. Esse
significava que um programador teria que esperar duas horas após o check-in
código para obter a validação de que seu check-in não quebrou nenhuma funcionalidade preexistente. É muito
tempo para esperar.
A maioria das equipes ágeis encontra uma construção contínua que dura mais de oito a dez minutos para
ser inviável. Mesmo 15 minutos é muito tempo para esperar por feedback, porque os check-ins começarão a
se acumular e os testadores esperarão muito tempo para obter
a melhor e mais recente construção. Você pode imaginar como os desenvolvedores trabalham com
uma construção que leva duas horas à medida que se aproxima do final de uma iteração ou
ciclo de lançamento? Se quebrarem alguma funcionalidade, terão que esperar mais dois
horas para saber se eles haviam consertado ou não.
Muitas vezes, compilações longas são o resultado de acessar o banco de dados ou tentar
teste através da interface. Milhares de testes executados em uma grande base de código podem sobrecarregar
os recursos da máquina que executa a compilação. Faça um perfil de seus testes e veja onde está o gargalo.
Por exemplo, se for o
acesso ao banco de dados que está causando a maioria dos problemas, tente simular o
banco de dados real e use um banco de dados na memória. Configure o processo de construção para distribuir
testes em diversas máquinas. Veja se um software diferente poderia
ajudar a gerenciar melhor os recursos. Traga especialistas de fora da sua equipe para ajudar
se necessário.
Quando estiver implementado, a equipe terá uma maneira de obter feedback rápido dos testes
Veja a bibliografia
automatizados. A seguir, veremos os diferentes tipos de testes que devem ser automatizados.
para links para
automação de construção
ferramentas e livros
com mais
Testes unitários e de componentes
informações sobre
Não podemos enfatizar demais a importância de automatizar os testes unitários. Se seu
como melhorar o
programadores estão usando TDD como mecanismo para escrever seus testes, então eles
processo de construção.
não estão apenas criando um ótimo conjunto de regressões, mas também os estão usando para projetar
código robusto e de alta qualidade. Se sua equipe não estiver automatizando testes unitários, é
Capítulo 7,
as chances de sucesso a longo prazo são mínimas. Faça automação de testes em nível de unidade e
"Tecnologia-
integração contínua sua primeira prioridade.
Enfrentando testes que
Apoiar o
Equipe”, detalha
alguns Teste de API ou serviços da Web
das ferramentas que
pode ser usado.
Testar uma API ou aplicativo de serviços da web é mais fácil usando alguma forma de automação.
Janet esteve em equipes que usaram Ruby com sucesso para ler em um
planilha com todas as permutações e combinações de variáveis de entrada
e compare os resultados com os resultados esperados armazenados nas planilhas. Esses testes
baseados em dados são fáceis de escrever e manter.
Um cliente da Janet usou o recurso IRB (Interactive Ruby Shell) do Ruby para
testar os serviços da web para testes de aceitação. A equipe estava disposta a compartilhar
scripts com a equipe do cliente, mas os testadores de negócios preferiram assistir
veja o que aconteceria se as entradas fossem alteradas na hora. A execução de testes de forma
interativa e semiautomática permitiu isso.
Testar por trás da GUI é mais fácil de automatizar do que testar a própria GUI. Porque os testes não
Consulte o Capítulo
são afetados por alterações na camada de apresentação e trabalho
9, “Kit de
Testando a GUI
Mesmo uma GUI fina com pouca ou nenhuma lógica de negócios precisa ser testada. O rápido
O ritmo de desenvolvimento ágil, entregando novas funcionalidades a cada iteração, exige alguns testes
de regressão automatizados no nível da GUI para a maioria dos projetos.
Machine Translated by Google
A seleção de ferramentas é fundamental para uma automação bem-sucedida da GUI. Os scripts automatizados
precisam ser flexíveis e fáceis de manter. Janet usou Ruby e Watir muito
com sucesso quando a estrutura foi desenvolvida usando boas práticas de codificação,
como se fosse um aplicativo de produção. Tempo foi investido no desenvolvimento do
bibliotecas para que não houvesse muito retrabalho ou duplicação no código, e
as mudanças necessárias poderiam ser feitas em um só lugar. Tornar o código fácil de manter aumentou o
ROI nesses testes.
Um ponto sobre testabilidade aqui: certifique-se de que os programadores nomeiem seus objetos ou
Consulte o Capítulo 9, “Kit
atribuam IDs a eles. Se eles dependem de identificadores gerados pelo sistema, então
de ferramentas para
Voltado para negócios toda vez que um novo objeto é adicionado à página, os IDs serão alterados, exigindo
Testes que apoiam a alterações nos testes.
equipe”, para exemplos
de estruturas de teste de
Mantenha os testes apenas na interface real. Verifique coisas como ter certeza de que
GUI.
os botões realmente funcionam e fazem o que deveriam. Não tente tentar testar
funcionalidade de negócios. Outros tipos de testes que podem ser facilmente automatizados são
verificadores de links. Não há necessidade de alguém passar manualmente por cada
link em cada página para garantir que eles acessem a página certa. Procure os frutos mais fáceis de
alcançar, automatize as coisas que são simples de automatizar primeiro e
você terá mais tempo para os desafios maiores.
Testes de carga
Alguns tipos de testes não podem ser realizados sem automação. Testes de carga manuais
Consulte o Capítulo 11,
geralmente não são viáveis ou precisos, embora todos nós já tenhamos tentado isso uma vez ou
“Criticando o produto
usando testes outro. O teste de desempenho requer ferramentas de monitoramento e uma forma de
voltados para a conduzir ações no sistema em teste. Você não pode gerar um ataque de grande volume para verificar se um
tecnologia”, para obter
site pode ser hackeado ou se pode lidar com uma carga grande
exemplos de ferramentas
sem alguma estrutura de ferramenta.
de automação de teste
de carga.
Comparações
Verificar visualmente a saída de um arquivo ASCII por um processo do sistema é muito mais fácil se
Leia mais sobre
você primeiro analisa o arquivo e o exibe em um formato legível. Um roteiro para
ferramentas de
gerenciamento de código- comparar os arquivos de saída para garantir que nenhuma alteração não intencional foi feita é uma
fonte e IDEs no Capítulo muito mais rápido e preciso do que tentar compará-los manualmente. Arquivo
7, “Testes voltados
existem muitas ferramentas de comparação, desde o diff gratuito até ferramentas proprietárias
para a tecnologia que
como WinDiff. Ferramentas de gerenciamento de código-fonte e IDEs têm seus próprios
dão suporte à
equipe”. ferramentas de comparação integradas. Esses são itens essenciais na caixa de ferramentas de todo testador.
Não se esqueça de criar scripts para comparar tabelas de banco de dados ao fazer testes em seu data
warehouse ou projetos de migração de dados.
Machine Translated by Google
Tarefas repetitivas
À medida que trabalhamos com nossos clientes para entender melhor o negócio e aprender
o que é valioso para eles, poderemos ver oportunidades para automatizar alguns dos
suas tarefas. A empresa de Lisa precisava enviar vários formulários com uma carta de apresentação para
todos os seus clientes. Os programadores podiam não apenas gerar os formulários, mas também
também poderia concatená-los com a carta de apresentação e agilizar bastante o
esforço de correspondência. O colega testador de Lisa, Mike Busse, escreveu uma macro de planilha para
fazer cálculos complexos para alocar fundos que os administradores do plano de aposentadoria vinham
fazendo manualmente. Muitas listas de verificação manuais podem ser substituídas
com um script automatizado. A automação não serve apenas para testes.
Outra área útil para automação é a criação ou configuração de dados. Se você configura seus dados
constantemente, automatize o processo. Muitas vezes precisamos repetir
algo várias vezes para poder recriar um bug. Se isso puder ser automatizado, você terá a garantia de
obter os mesmos resultados todas as vezes.
Muitos de nossos esquemas de teste, incluindo aqueles usados para conjuntos de regressão
A história de Lisa
automatizados, usam dados canônicos. Esses dados canônicos ou “semente” foram originalmente
retirados da produção. Algumas tabelas no banco de dados, como tabelas de pesquisa, não mudam,
portanto nunca precisam ser atualizadas com uma nova cópia. Outras tabelas, como aquelas que
contêm informações sobre planos de aposentadoria, funcionários e transações, precisam começar do
zero sempre que um conjunto de regressões for executado.
Nosso desenvolvedor de banco de dados escreveu um procedimento armazenado para atualizar cada
esquema de teste do esquema “semente”. Nós, testadores, podemos especificar as tabelas que queremos
atualizar em uma tabela especial chamada REFRESH_TABLE_LIST. Temos um destino ant para
cada esquema de teste para executar o procedimento armazenado que atualiza os dados. As
compilações automatizadas usam esse alvo, mas nós mesmos o usamos sempre que queremos limpar
nosso esquema de teste e começar de novo.
Muitos de nossos testes de regressão criam seus próprios dados sobre os dados “sementes”. Nossos
testes Watir criam todos os dados necessários e incluem lógica que os torna executáveis novamente,
independentemente dos dados presentes. Por exemplo, o script que testa um funcionário que solicita um
empréstimo do seu plano de aposentadoria primeiro cancela quaisquer empréstimos existentes para que
um novo possa ser contratado.
Os testes FitNesse que testam a camada de banco de dados também criam seus próprios dados.
Usamos um esquema especial onde removemos a maioria das restrições, portanto não precisamos
adicionar todas as colunas de todas as tabelas. Os testes adicionam apenas os dados pertinentes à
funcionalidade que está sendo testada. Cada teste destrói os dados que criou, de forma que os testes
subsequentes não sejam afetados e cada teste seja independente e reexecutável.
—Lisa
Machine Translated by Google
Limpar os dados de teste é tão importante quanto gerá-los. Sua criação de dados
O kit de ferramentas deve incluir maneiras de destruir os dados de teste para que não afetem um
teste diferente ou impedir a repetição do mesmo teste.
Testando usabilidade
O teste real de usabilidade exige que alguém realmente use o software. A automação pode ser útil na
Discutimos algumas
configuração de cenários para posterior análise da usabilidade. Observar os usuários em ação,
ferramentas de registro e
monitoramento no informando-os sobre suas experiências e
Capítulo 10, julgar os resultados é tarefa de quem entende que os aspectos de usabilidade do software não podem
“Recursos voltados para negócios”.
ser automatizados. Registrar ações do usuário é útil para
Testes que criticam o
produto.” Testando usabilidade.
A história de Janete Avaliamos diversas ferramentas GUI, mas decidimos usar Ruby com Watir. Mantivemos
nossos testes limitados apenas às funções da GUI. Um de nossos testes foi verificar
se as mensagens de validação corretas estavam sendo exibidas na tela. Eu estava
executando os testes e por acaso estava olhando para a tela porque não tinha visto
esse teste específico criado por um dos outros testadores. Meus olhos captaram
algo estranho, mas o teste passou, então repeti novamente. Um dos programadores
adicionou um “$” à tela e a mensagem de erro foi exibida deslocada por causa disso.
A mensagem correta foi exibida, mas não no lugar certo. Neste caso, o valor em
observar a execução dos testes foi enorme porque estávamos nos preparando para
o lançamento em breve e provavelmente não teríamos detectado esse problema específico.
—Janet
É possível automatizar testes que garantem que a GUI nunca mude, mas você
precisa se perguntar se vale a pena o custo. Você realmente se importa com o fato de um botão ter
mudado de posição em um pixel? Os resultados justificam o esforço? Nós
não acho que você deva automatizar os testes de “aparência”, porque um sistema automatizado
Machine Translated by Google
O script só pode procurar o que você diz para ver. A automação perderia o visual
problemas que saltariam para um ser humano.
Teste Exploratório
Da mesma forma, os testes exploratórios podem ser acelerados com scripts para criar testes
Consulte o Capítulo 10,
dados e passar por algumas etapas de configuração, mas requer um testador qualificado para projetar
“Relacionado aos negócios
Testes que criticam o e executar os testes. Um dos principais objetivos dos testes exploratórios é aprender
produto”, para obter mais mais sobre o produto fazendo e, em seguida, use essas informações para melhorar
informações sobre testes
desenvolvimento futuro. Scripts automatizados não farão isso por você. No entanto, como
exploratórios e ferramentas
que podem facilitá-los. como dissemos antes, você não terá tempo para testes exploratórios sem muita
outros testes automatizados.
Ouvimos um argumento de que testes que nunca falharão não precisam ser automatizados. Se um
requisito é tão óbvio que só existe uma maneira de implementá-lo
e nenhum programador jamais olhará para esse código mais tarde sem saber exatamente o que ele
deve fazer, as chances de alguém introduzir um defeito nele
código são quase nada. Digamos que temos um formulário com campos de endereço. Nós
precisa de um teste de regressão automatizado para verificar se a segunda linha de endereço
não é necessário? Depois de verificarmos isso manualmente, qual é a probabilidade de alguém
irá acidentalmente alterá-lo para um campo obrigatório mais tarde? Mesmo que alguém o fizesse, seria
não seria um evento catastrófico. Alguém notaria isso e as pessoas
poderia contornar isso facilmente até que fosse consertado.
Se você estiver testando um sistema crítico para a vida, mesmo um risco muito pequeno de regressão
Consulte o Capítulo 18,
o fracasso é demais. Use a análise de risco para ajudar a decidir quais testes devem ser
“Codificação e testes”,
automatizado.
para obter mais
Na maioria das vezes, executar manualmente um teste único é suficiente. Se automatizar um teste
não tem recompensa, por que fazer isso? Às vezes vale a pena fazer a automação por um
teste único.
Machine Translated by Google
Recentemente, fizemos uma história para exibir uma caixa de diálogo com uma mensagem de aviso ao postar
A história de Lisa
uma folha de pagamento, mas a mensagem só deve aparecer durante as duas primeiras semanas de janeiro.
Automatizar um teste para essa funcionalidade exigiria alguma forma de simular que a data atual estava
entre 1º e 15 de janeiro. Isso não é muito difícil de fazer, mas as consequências de uma falha eram bastante
triviais, e tínhamos mais histórias críticas para contar. entregar essa iteração. Automatizar esse teste naquela
época simplesmente não funcionou
tinham valor suficiente para justificar o custo e o fator de risco era baixo. Decidimos testá-lo manualmente.
Há outros casos em que fazer um teste único parece ser o mais intuitivo, mas a automação é uma escolha
melhor. Hospedamos sites para diferentes parceiros de negócios e cada um deles tem conteúdo, aparência e
comportamento exclusivos. Os valores no banco de dados orientam o comportamento e o conteúdo corretos
para cada marca. Alguns dos dados, como tabelas de taxas baseadas em valores de ativos e números
de participantes, são altamente complexos. É muito mais fácil e preciso verificar esses dados usando
testes FitNesse. Temos um conjunto de fixtures que nos permitem especificar chaves para a “marca” parceira
que queremos testar. Podemos facilmente inserir os resultados esperados apropriados nas planilhas que a
equipe de desenvolvimento de negócios cria para cada novo parceiro.
Esses testes não fazem parte do nosso conjunto de regressão. Eles são usados apenas uma vez para validar
a nova marca.
—Lisa
Pode valer a pena automatizar tarefas tediosas, mesmo que você não as faça com frequência.
Pese o custo da automação em relação à quantidade de tempo valioso consumido pelos
fazendo o teste manualmente. Se for fácil de fazer manualmente e automatizar não
seja rápido, apenas mantenha o manual.
é muito mais difícil automatizar. Os sistemas mais antigos tendem a cair nesta categoria,
mas sem dúvida há muitos códigos novos com as mesmas características não testáveis.
ainda sendo produzido.
Se você se deparar com o trabalho em um código existente que ainda não possui testes automatizados,
você terá uma batalha difícil, mas vencível. Código legado
pode ter E/S, acesso a banco de dados, bem como lógica de negócios e código de apresentação
entrelaçados. Pode não estar claro onde conectar o código para automatizar um
teste. Como você começa a automatizar testes em tal sistema? Você certamente
não posso planejar automatizar tudo abaixo da GUI, porque grande parte do
a lógica está na camada de apresentação.
Machine Translated by Google
A equipe de Lisa decidiu adotar uma abordagem diferente, mas igualmente eficaz. O time
Capítulo 7,
os membros começaram a “estrangular” o código legado escrevendo todos os novos recursos em um
“Testes
voltados para a nova arquitetura amigável para testes. Eles estão substituindo gradualmente todo o código antigo
tecnologia que apoiam a equipe”,
com código escrito test-first. Quando eles trabalham em código antigo para corrigir bugs ou em
entra em mais
nos casos em que o código antigo precisa ser atualizado, eles simplesmente adicionam testes unitários para todos
detalhes sobre
do código que eles mudam. Um conjunto de testes de fumaça GUI cobre as funções críticas
diferentes
abordagens ágeis do restante do sistema legado que não possui testes unitários.
para código legado.
Como acontece com qualquer projeto de automação, aborde o código difícil de automatizar
peça de cada vez e aborde primeiro as áreas de maior risco. Resolva a testabilidade
problema e encontrar uma maneira de escrever testes em nível de unidade. O esforço valerá a pena.
Uma abordagem simples e passo a passo parece incompatível com uma automação
estratégia, mas nos testes ágeis tentamos entender o problema primeiro. Decidindo
onde e como começar com a automação requer um pouco de reflexão e discussão. À medida que sua
equipe analisa os desafios de teste, você precisará considerar onde
automação é apropriada. Antes de começar a procurar uma ferramenta de automação específica, você
desejará identificar seus requisitos.
Você precisa entender qual problema está tentando resolver. O que você está
tentando automatizar? Por exemplo, se você não tiver nenhum tipo de automação de teste,
e você começa comprando uma ferramenta de teste comercial cara pensando que ela automatizará todos
os seus testes funcionais, você pode estar começando no lugar errado.
Sugerimos que você comece do início. Procure seu maior ganho. O maior
o melhor custo-benefício são definitivamente os testes de unidade que os programadores podem fazer. Em
vez de começar no topo da pirâmide de teste, você pode querer começar no
parte inferior, certificando-se de que o básico esteja no lugar. Você também precisa considerar
Machine Translated by Google
os diferentes tipos de testes que você precisa automatizar e quando você precisará
tenha ferramentas prontas para usar.
Pense nas habilidades e experiência de sua equipe. Quem precisa da automação e por quê? Que
objetivos você está tentando alcançar? Entendendo alguns
esses problemas podem afetar sua escolha de ferramentas e o esforço que você despende.
Há uma seção sobre avaliação de ferramentas no final deste capítulo.
A automação é assustadora, especialmente se você está começando do zero, então onde podemos
começar?
Sua equipe pode resolver isso desenvolvendo uma estratégia de automação, conforme
descrevemos neste capítulo. A equipe começa a projetar visando testabilidade e escolhe e
implementa ferramentas de automação apropriadas. Os testadores têm a oportunidade de
desenvolver suas habilidades técnicas.
Machine Translated by Google
Onde quer que dói mais, é aí que você deve iniciar seus esforços de automação.
Por exemplo, se sua equipe está lutando para entregar código implantável, você
precisa implementar um processo de construção automatizado. Nada é pior do que ficar mexendo os
Capítulo 18, “Codificação polegares enquanto espera o teste de algum código.
e Teste,”
tem mais informações
Mas, se o desempenho colocar a existência da sua organização em perigo, os testes de desempenho
sobre uma abordagem
simples para análise de devem ser a principal prioridade. É voltar a entender o que
risco. problema que você está tentando resolver. A análise de risco é sua amiga aqui.
Trabalhei em um sistema legado que tentava resolver alguns problemas de qualidade, bem como
A história de Janete
adicionar novos recursos para nosso principal cliente. Não havia nenhuma unidade automatizada ou
testes funcionais para o aplicativo existente, mas precisávamos refatorar o código para resolver os
problemas de qualidade. Os membros da equipe decidiram abordar uma peça de cada vez. Ao
escolherem uma parte da funcionalidade para refatorar, os programadores escreveram testes de
unidade, garantiram que eles fossem aprovados e então reescreveram o código até que os
testes fossem aprovados novamente. No final da refatoração, eles tinham um código testável e bem
escrito e os testes que os acompanhavam. Os testadores escreveram os testes funcionais de nível
superior ao mesmo tempo. Em um ano, a maior parte do código legado de baixa qualidade foi
reescrito, e a equipe conseguiu uma boa cobertura de testes apenas abordando um pedaço de
cada vez.
—Janet
A automação de testes não valerá a pena a menos que outras boas práticas de desenvolvimento estejam em vigor
lugar. A integração contínua executando um conjunto robusto de testes unitários é o primeiro passo
para automatizar outros testes. O código que é continuamente refatorado para manutenção e bom design
ajudará a aumentar o ROI da automação. A refatoração não pode acontecer sem uma boa cobertura de
testes unitários. Esses desenvolvimentos
práticas também precisam ser aplicadas aos scripts de testes funcionais automatizados.
Abordagem Multicamadas
Embora recomendemos dominar uma ferramenta de cada vez, não espere muito
de qualquer ferramenta. Use a ferramenta certa para cada necessidade. A ferramenta que funciona melhor
para testes unitários pode ou não ser apropriado para automatizar testes funcionais.
Os testes de GUI, carga, desempenho e segurança podem exigir, cada um, um
ferramenta ou ferramentas.
O conceito de pirâmide de testes de Mike Cohn (veja a Figura 14-2) ajudou nossas equipes a colocar
seus esforços de automação onde eles fazem o melhor. Queremos maximizar
os testes que apresentam o melhor ROI. Se a arquitetura do sistema for projetada para capacidade de
teste, a automação de testes será menos dispendiosa, especialmente no nível da unidade.
Machine Translated by Google
Os testes que passam pela interface do usuário geralmente apresentam o ROI mais baixo, porque
sua manutenção é cara, mas precisamos deles. Eles compõem o pequeno
ponta da nossa pirâmide Podemos optar por automatizar alguns desses testes, mas o
a maioria dos testes de GUI são definidos em termos de negócios e provavelmente é melhor deixá-los
como testes de interação humana (ou seja, testes manuais).
A camada intermediária representa os testes funcionais que trabalham diretamente com o código de
produção, sem uma GUI ou outra camada intermediária. Embora não sejam tão baratos para
automatizar quanto os testes em nível de unidade e forneçam feedback um pouco mais lentamente,
as ferramentas certas permitem que eles tenham um bom ROI. O facto de estes testes poderem ser
escrito em uma linguagem que os especialistas em negócios entendem que agrega valor.
Existem muitas camadas diferentes no aplicativo que podem ser testadas de forma independente.
Em seu livro xUnit Test Patterns [2007], Gerard Meszaros refere-se a isso
como o padrão de teste de camada. Ele adverte que ao tentar testar todas as camadas
da aplicação separadamente, ainda temos que verificar se as camadas estão enganchadas
configurado corretamente e isso pode exigir pelo menos um teste da lógica de negócios
através da camada de apresentação.
A história de Lisa À medida que minha equipe construía nossa estrutura de automação passo a passo, reunimos um
arsenal de ferramentas. Depois de implementar uma estrutura de construção contínua com Ant e
CruiseControl, dominamos o JUnit para testes unitários. Sabíamos que a automação de testes
unitários é a maneira mais rápida e barata de automatizar e fornece o feedback mais rápido aos
programadores.
Nosso sistema legado não tinha testes automatizados, então construímos um conjunto de testes de
regressão GUI com Canoo WebTest. Isso proporcionou um bom retorno porque os scripts do
WebTest foram especificados, não programados. Eles foram rápidos de escrever e fáceis de manter.
Todas essas ferramentas foram fáceis de aprender, implementar e integrar ao processo de construção
e forneceram feedback contínuo sobre nossos problemas de regressão. Essas foram considerações
importantes quando decidimos sobre nossa estratégia de automação de testes.
—Lisa
Ao avaliar o retorno dos seus esforços de automação, considere aspectos menos tangíveis, como se
a ferramenta promoveu a colaboração entre os
Machine Translated by Google
Depois de começar, pode ser muito fácil automatizar os testes. Por exemplo, quando
Se você tiver um acessório FitNesse funcionando, adicionar mais casos de teste requer pouco esforço.
Isso é ótimo quando você tem muitas permutações diferentes para testar. Você vai
provavelmente testará mais condições do que você faria se todos os seus testes fossem feitos
manualmente. Quando os membros da equipe de Lisa reescreveram o sistema de empréstimos de seu plano
de aposentadoria, eles puderam testar centenas de possibilidades diferentes de processamento de
pagamentos de empréstimos por meio de testes FitNesse. O que acontece quando três pagamentos do empréstimo são
processado no mesmo dia? Se alguém não fizer nenhum pagamento por três
meses e depois envia um grande pagamento, os juros são calculados e aplicados corretamente? Foi
fácil escrever testes automatizados para descobrir.
Essa é uma grande vantagem, mas tem um lado negativo. Agora a equipe tem dezenas, ou
até centenas de casos de teste para manter. E se as regras sobre cálculo
o valor dos juros para o pagamento de um empréstimo mudará daqui a um ano? Esse
pode exigir a atualização de todos os testes. Se sua ferramenta de teste não acomodar facilmente
alterações em testes existentes, seu grande conjunto de testes automatizados pode
se transformar em uma dor de cabeça.
Os testes ponta a ponta são particularmente difíceis de automatizar porque têm a capacidade
maior potencial para precisar de manutenção à medida que as regras de negócios mudam. Como nós
equilibrar a necessidade de automação com o custo?
Projeto de teste
Lembre-se de começar com a fatia fina ou fio de aço do recurso que você está testando. Aborde a
Capítulo 8,
automação da mesma forma que os programadores abordam a codificação. Pegue um
“Visado para negócios
Testes que apoiam a pequena unidade da rosca de aço funcionando e depois passar para a próxima. Depois
equipe”, explica mais você cobriu toda a fatia fina, volte e dê volume.
sobre fatias finas.
Machine Translated by Google
Escolha seu padrão de teste com atenção. Automatize todos os casos de teste que você
Consulte o Capítulo 9, “Kit
de ferramentas para
precisa, mas não mais, e automatize-os no nível mais baixo possível. Limite
Voltado para negócios o escopo de cada caso de teste para uma condição de teste ou uma regra de negócios. Entenda o
Testes que apoiam a objetivo do teste. Evite dependências entre testes, pois elas
equipe”, para obter
aumentar rapidamente a complexidade e as despesas de manutenção.
mais informações sobre
design de teste eficaz.
Considere opções
Como mencionamos antes, quanto mais baixo for o nível em que você automatiza um teste,
melhor será o ROI. Empurre a automação de testes o mais abaixo possível na pirâmide.
Se você tiver uma boa cobertura em seus testes de unidade e integração de código, você não
precisa automatizar tantos testes funcionais. Com cobertura sólida na parte inferior
níveis, pode ser suficiente fazer testes ponta a ponta manualmente para verificar o comportamento do
sistema. Use a análise de risco para ajudá-lo a decidir.
Interface de usuário
no nível da GUI é fundamental. Talvez sua equipe esteja usando controles GUI de terceiros e você não
tenha certeza de como eles se comportarão. Se sua análise de risco e ROI
suporta muita automação no nível da GUI, faça o investimento.
Se você automatizar nos níveis mais altos, não exagere e automatize todos os caminhos possíveis
através do sistema. Você não precisa manter todos os testes automatizados criados durante a fase de
desenvolvimento no conjunto de regressão;
considere as compensações do tempo de construção e a chance de encontrar defeitos. Concentre seu
esforços para cobrir todos os caminhos importantes através do código na unidade, código
integração e níveis funcionais. Você terá um retorno muito melhor.
Encontrar um equilíbrio
Encontrar um equilíbrio não é um princípio ágil, é apenas bom senso. Você precisa de um
solução boa o suficiente no momento, mas não precisa ser perfeita. Será que o
ferramenta fornece os resultados que você precisa agora? Fornece um retorno adequado sobre os
recursos necessários para usá-lo para automação? Se sim, vá em frente e use
isso e reserve um tempo mais tarde para procurar alternativas. Você pode melhorar sua estrutura de
automação ao longo do tempo. O fator mais importante é se suas ferramentas de automação se adequam
à sua situação específica no momento.
Não deslize para o outro lado e pense: “OK, podemos gerar vários scripts
com esta ferramenta de registro, faça nossos testes imediatos e refatore os scripts
mais tarde para torná-los sustentáveis.” Embora você não precise continuar procurando
a solução de automação perfeitamente ideal, você precisa de uma solução que não
Machine Translated by Google
aumente a dívida técnica da sua equipe. Encontre um equilíbrio entre “Ele encontra os bugs
precisamos saber e não custa muito para manter” e “Isso é
É legal termos tantas ferramentas disponíveis para nos ajudar a resolver nossa automação
problemas. Não busque mais sofisticação do que você precisa. Colegas de trabalho de Lisa
descobriram que uma planilha que recupera dados do banco de dados e realiza cálculos
independentemente do sistema é uma ferramenta poderosa, tanto para
impulsionar o desenvolvimento e verificar os cálculos da aplicação.
Já falamos sobre algumas desvantagens das ferramentas de gravação/reprodução, mas elas são
apropriado na situação certa. Você pode estar usando uma ferramenta de gravação/reprodução
por um bom motivo: talvez seu código legado já tenha um conjunto de ferramentas automatizadas
testes criados nessa ferramenta, sua equipe tem muita experiência na ferramenta ou seu
a administração deseja que você o use por qualquer motivo. Você pode usar gravado
scripts como ponto de partida, depois divida os scripts em módulos, substitua os dados
codificados por parâmetros quando apropriado e monte os testes usando o
módulos como blocos de construção. Mesmo que você não tenha muita experiência em
programação, não é difícil identificar os blocos de script que devem estar em um módulo. O
login, por exemplo, é uma escolha óbvia.
A gravação/reprodução também pode ser apropriada para sistemas legados que são projetados
de tal forma que dificultam os testes unitários e os testes manuais.
do zero é muito caro. É possível construir uma capacidade de gravação e reprodução
no aplicativo, mesmo um aplicativo legado. Com o design certo e o
uso de algum formato legível para a interação gravada, é até
possível construir testes de reprodução antes que o código seja construído.
Machine Translated by Google
Em 2004, nosso grupo mudou para Visual Basic .NET. Passei vários meses adaptando
nossa biblioteca TestPartner para ativar controles .NET. Em 2006, adotamos uma
metodologia Ágil. Com base nas lições aprendidas anteriormente no mundo não ágil,
alcançamos resultados surpreendentes com a automação de testes. No final de 2006, os
membros da equipe conseguiram produzir scripts de teste de GUI e componentes de biblioteca
de fácil manutenção após apenas alguns dias de treinamento. Ao mesmo tempo, a
equipe adotou testes unitários com NUnit e testes de aceitação de usuários com FitNesse.
No momento em que este livro foi escrito, os problemas eram detectados em todos os três
níveis de nossos testes automatizados: Unidade, FitNesse e GUI. Os problemas
encontrados em cada um dos três níveis de teste são de natureza diferente. Como tudo é
automatizado e acionado automaticamente, os problemas são detectados muito
rapidamente, no verdadeiro estilo Agile. Cada parte de nossa automação de testes agrega valor.
Machine Translated by Google
Algumas pessoas acham que os recursos seriam mais bem gastos em arquitetura e design,
de modo que a automação de testes de GUI não é necessária. Em nosso grupo de
desenvolvimento, cada equipe tomou sua própria decisão sobre automatizar os testes de
GUI.
Caso você decida usar a automação de testes de GUI, aqui vão alguns conselhos: Fique
longe de scripts gravados, invista em capacidade de manutenção e minimize os testes de
GUI necessários com uma boa arquitetura do aplicativo. Pela minha experiência, investir em
boas práticas de automação de testes de GUI sempre valerá a pena.
Pediram-me para ajudar uma equipe que estava portando um aplicativo “sensível à
segurança” do OS2 para o Windows. A empresa estava muito preocupada com o tempo que
levaria para testar novamente o sistema portado e com a probabilidade de a equipe perder
bugs importantes. O sistema foi projetado para oferecer ao usuário apenas escolhas
válidas que não comprometam a segurança. Eles consideraram usar uma ferramenta de
gravação de testes para gravar testes no sistema antigo e reproduzi-los no novo sistema, mas
não havia ferramentas de gravação de testes disponíveis para OS2 e Windows que
pudessem lidar com janelas desenhadas usando caracteres ASCII. Depois de revisar a
arquitetura do sistema, determinamos que escrever testes xUnit não seria uma maneira
econômica de testar o sistema porque grande parte da lógica de negócios estava incorporada
na lógica da interface do usuário, e refatorar o código para separá-los seria ser muito
arriscado e demorado. Em vez disso, propusemos construir um recurso de teste de
gravação e reprodução diretamente no sistema antes de portá-lo.
Embora o resto do projeto tenha sido orientado por marcos, desenvolvemos o mecanismo de
teste integrado de uma forma muito ágil. Cada tela exigia pelo menos um novo gancho e às
vezes vários. Começamos com as telas mais utilizadas, adicionando os ganchos
necessários para registrar as
ações e as respostas do sistema a elas em um arquivo XML. Também adicionamos
ganchos para reproduzir o XML e determinar os resultados do teste.
Inicialmente, concentramos nossos esforços em comprovar o conceito, fisgando apenas
Machine Translated by Google
as telas que precisávamos gravar e depois reproduzir um teste simples, mas realista.
Depois que todos estavam convencidos de que a abordagem funcionaria, priorizamos as
telas em relação ao benefício que ela traria. Implementamos os ganchos um por um até
que pudéssemos automatizar uma parte significativa dos testes. Também construímos
uma folha de estilo XSLT que formataria o XML de maneira semelhante ao Fit, com
células verdes indicando resultados aceitáveis e células vermelhas indicando uma
etapa de teste com falha.
Algumas equipes ágeis obtêm valor de ferramentas de teste comerciais ou de código aberto, enquanto
Veja mais
outros preferem uma abordagem totalmente personalizada. Muitos testadores acham que vale a pena
exemplos de
ferramentas para testes escrever scripts simples em uma linguagem de script como Ruby, ou um shell, para automatizar
voltados para tarefas rotineiras, mas necessárias, gerar dados de teste ou conduzir outras ferramentas. Livros
negócios no Capítulo 9, como Everyday Scripting with Ruby for Teams, Testers, and You fornecem um roteiro para essa
“Kit de ferramentas
abordagem. Se você é um testador sem uma sólida experiência em programação, recomendamos
para testes voltados
para negócios
que você compre um livro, encontre um tutorial on-line ou faça um
que dão suporte à equipe”. aula sobre uma linguagem de script e veja como pode ser fácil escrever scripts úteis.
O que estamos tentando dizer é que você pode usar muitas ferramentas diferentes. Olhe para
o problema que você está tentando resolver e decidir em equipe o mais fácil e mais fácil
maneira eficaz de resolvê-lo. De vez em quando, dê um passo atrás e dê uma olhada nas ferramentas
Machine Translated by Google
você está usando. Todos na equipe estão felizes com eles? Você está perdendo problemas porque
não tem as ferramentas certas? Reserve tempo para explorar novas ferramentas
e veja se eles podem preencher lacunas ou substituir uma ferramenta que não está valendo a pena.
Se sua equipe é novata no desenvolvimento ágil ou está trabalhando em um projeto totalmente novo,
você pode se deparar com a escolha de ferramentas e a configuração de ambientes de teste
durante as primeiras iterações, quando você também pode estar trabalhando em histórias de alto
risco. Não espere conseguir agregar muito valor ao negócio se ainda estiver criando sua
infraestrutura de teste. Planeje com bastante tempo a avaliação de ferramentas, configuração
desenvolver processos de construção e experimentar diferentes abordagens de teste.
Cada equipe, cada projeto e cada organização tem uma situação única com
desafios únicos de automação. Cada um tem sua própria cultura, história, recursos,
pressões de negócios, produtos e experiência. Não importa qual seja a sua equipe
situação, você pode usar os princípios e valores ágeis discutidos no Capítulo 2
para ajudá-lo a encontrar soluções. Conceitos como coragem, feedback, simplicidade,
comunicação, melhoria contínua e resposta às mudanças não são
apenas ideias ágeis – são qualidades comuns a todas as equipes de sucesso.
Mantenha simples
A máxima ágil de “faça a coisa mais simples que possa funcionar” aplica-se a
testes, bem como código. Mantenha o design do teste simples, mantenha o escopo mínimo e
use a ferramenta mais simples que fará o trabalho.
A simplicidade é um valor ágil fundamental por um bom motivo. O melhor lugar para começar é o
abordagem mais simples que você pode imaginar. No entanto, fazer a coisa mais simples não
significa fazer a coisa mais fácil. Envolve realmente pensar sobre o que você precisa
agora e dando passos de bebê para chegar lá. Mantendo as coisas simples, se você fizer isso
fizer uma escolha errada, você não se desviará muito do caminho antes de perceber o erro de
seus caminhos.
É fácil se envolver em uma tarefa e fugir do básico para algum desafio intrigante. Avalie o ROI de
cada tarefa de automação antes de executá-la.
A automação é divertida (quando você supera a parte assustadora de começar). Isso é
tentador tentar algo difícil só porque você pode. Como todos os outros aspectos dos testes em um
projeto de desenvolvimento ágil, a única maneira de acompanhar é
faça apenas o mínimo necessário.
Use a ferramenta mais simples que você puder usar. Lembre-se da pirâmide de teste. Se um
o teste voltado para o cliente pode ser mais facilmente automatizado no nível da unidade, faça-o
Machine Translated by Google
lá. Lisa às vezes escreve casos de teste no FitNesse, apenas para descobrir que os
programadores podem automatizá-los muito mais rápido como testes JUnit. Por outro lado, às vezes
os programadores usam FitNesse para TDD em vez de JUnit, porque o código
eles estão escrevendo pode ser testado em um dos formatos de fixação FitNesse.
Feedback Iterativo
Iterações curtas nos permitem experimentar várias abordagens de automação,
avaliar os resultados e mudar de rumo tão rapidamente quanto necessário. Comprometa-se
com um esforço de automação, como desenvolver uma estrutura de teste internamente ou
implementar uma ferramenta de código aberto por pelo menos algumas iterações. Após cada iteração,
veja o que está funcionando e o que não está funcionando. Pense em ideias para superar
problemas e tente-os na próxima iteração. Se não for a solução certa, tente
outra coisa por algumas iterações. Não seja sugado por um atoleiro onde
você colocou tantos recursos em uma ferramenta e tem tantos testes que a utilizam,
que você sente que não pode trocar de ferramenta. Entre as muitas ferramentas comerciais e de código
aberto, além da capacidade dos programadores de escrever ferramentas de teste desenvolvidas internamente,
não há razão para se contentar com menos do que a ferramenta ideal.
Uma das minhas primeiras equipes XP lutou para encontrar uma boa maneira de automatizar testes
A história de Lisa
de aceitação voltados para o cliente para um aplicativo Web baseado em Java. Isso aconteceu quando
havia muito menos opções de ferramentas para equipes ágeis. Primeiro, tentamos uma ferramenta de
código aberto que simulava um navegador, mas faltavam os recursos que precisávamos. Simplesmente não foi
bastante robusto o suficiente. Discutimos isso na próxima retrospectiva.
Decidimos tentar usar a ferramenta de teste de unidade para testar a GUI nas próximas duas iterações.
Ao nos comprometermos com duas iterações, sentimos que estávamos nos dando tempo suficiente
para testar a ferramenta, mas não tanto tempo que teríamos investido muito se não fosse a solução
certa. Os clientes acharam os testes de unidade difíceis de ler e havia lógica na GUI que não
pudemos testar com esta ferramenta.
Após outra discussão durante nossa retrospectiva, nos comprometemos com duas iterações de uso de
uma ferramenta de teste de GUI de fornecedor que eu havia usado extensivamente em projetos anteriores.
Os programadores Java acharam o processo lento porque a ferramenta usava uma linguagem de script
proprietária, mas funcionava bem o suficiente para realizar a automação mínima necessária. Depois
de duas iterações, decidimos que não era o ideal, mas na época não havia muitas outras opções e
era a melhor que tínhamos.
Em retrospectiva, deveríamos ter continuado procurando uma opção melhor. Talvez pudéssemos ter
desenvolvido nosso próprio equipamento de teste. Conseguimos automatizar cerca de 60% dos testes de
regressão acima do nível da unidade usando a ferramenta do fornecedor, o que parecia ótimo na
época. Se tivéssemos nos esforçado um pouco mais, poderíamos ter feito muito melhor.
—Lisa
Machine Translated by Google
Use iterações a seu favor. Eles facilitam uma abordagem passo a passo. Se seu
a ideia for um fracasso, você saberá rapidamente e terá a chance de tentar uma diferente.
Não tenha medo de continuar procurando, mas não continue procurando a solução perfeita se
uma que você tentar tiver um desempenho adequado.
O desenvolvimento ágil não funciona sem automação. Felizmente, a abordagem de equipe inteira,
que exploramos no Capítulo 1, significa que uma gama mais ampla de
habilidades e recursos estão disponíveis para encontrar e implementar uma automação útil
estratégia. Atacar o problema em equipe significa que é mais provável que o código
ser projetado para testabilidade. Programadores, testadores e outros membros da equipe
colaborará para automatizar testes, trazendo vários pontos de vista e conjuntos de habilidades
ao esforço.
Minha equipe atual se comprometeu a automatizar testes de regressão em todos os níveis onde isso
A história de Lisa
fizesse sentido. Aqui estão alguns exemplos de onde pedi ajuda para ter sucesso com a automação.
No início, quando não tínhamos nenhum teste automatizado e os desenvolvedores estavam tentando
dominar o desenvolvimento orientado a testes, optamos pelo Canoo WebTest para os testes de
fumaça da GUI. Eu precisava de um pouco de ajuda para entender como configurar o WebTest para ser
executado em nosso ambiente e precisava de muita ajuda para executar os testes do processo de
construção automatizado. Pedi ajuda ao nosso administrador de sistema (que também era um dos
programadores). Rapidamente obtivemos um conjunto de testes em execução na compilação.
Mais tarde, eu realmente queria experimentar o FitNesse para testes funcionais por trás da GUI. Tive que
ser paciente enquanto os programadores ainda estavam ganhando força com os testes unitários
automatizados. A equipe concordou em experimentar a ferramenta, mas foi difícil encontrar tempo para
começar a usá-la. Escolhi uma história que parecia adequada aos testes FitNesse e perguntei ao
programador que estava trabalhando na história se eu poderia fazer parceria com ele para tentar alguns testes FitNesse
Ele concordou e automatizamos alguns testes no FitNesse. O programador achou fácil e valeu a pena e
deu um bom relatório ao resto da equipe.
Depois disso, não foi difícil abordar cada programador, sugerir a criação de testes FitNesse para a história
em que ele estava trabalhando e deixá-lo ver os resultados. Os testes do FitNesse encontraram casos
de teste nos quais o programador não havia pensado e perceberam o benefício imediatamente. Quando
todos na equipe tiveram alguma experiência com a ferramenta, eles não apenas ficaram felizes em
automatizar os testes, mas também começaram a projetar o código de uma forma que tornasse mais fácil
escrever acessórios FitNesse.
Machine Translated by Google
Quando nosso especialista em Ruby, que projetou a maior parte de nosso conjunto de testes
Watir, deixou a empresa, fiquei bastante preocupado em manter nosso enorme conjunto de
testes, bem como em ser capaz de codificar novos. Meu conhecimento em Ruby não era tão
bom quanto o dele (além disso, tínhamos apenas um testador, então o tempo era um
problema). Cada programador da equipe saiu, comprou um livro sobre Ruby e ajudou quando
tive problemas para atualizar scripts para funcionarem quando o código mudava. Um programador
até escreveu um novo roteiro para testar uma nova história quando eu não tinha tempo para
essa tarefa. Quando contratamos um novo testador, ele e eu conseguimos cuidar e alimentar os
scripts Watir, de modo que os programadores não precisassem mais assumir essas tarefas.
Eu sei que posso pedir ajuda aos colegas de equipe com problemas de automação, e toda a
equipe vê a automação como uma prioridade, por isso os programadores sempre pensam na
testabilidade ao projetar o código. Este é um exemplo da abordagem de toda a equipe no trabalho.
—Lisa
Testes especializados voltados para a tecnologia, como testes de segurança ou de carga, podem
O Capítulo
exigir a contratação de especialistas de fora da equipe. Algumas empresas possuem equipes
11, “Criticando
o produto especializadas que estão disponíveis como recursos compartilhados para equipes de produto. Até
usando testes ao mesmo tempo que aproveitam esses recursos, as equipes ágeis ainda devem assumir a
voltados para a responsabilidade de garantir que todos os tipos de testes sejam realizados. Eles também podem ser
tecnologia”, fala
surpreso ao descobrir que os membros da equipe podem ter as habilidades necessárias se tomarem uma decisão
sobre testes voltados
para a tecnologia abordagem criativa.
como esses e
diferentes abordagens para Algumas
lidar com organizações
eles. têm equipes de testes independentes que fazem testes de pós-desenvolvimento
testando. Eles podem estar testando para garantir que o software se integre a outros sistemas ou
conduzindo outros testes especializados, como testes de desempenho em larga escala.
testando. As equipes de desenvolvimento devem trabalhar em estreita colaboração com essas outras
equipes, usando o feedback de todos os esforços de teste para melhorar o design do código e facilitar
automação.
continuar trabalhando terá um grande custo no futuro. À medida que sua equipe acumula
dívida técnica, você terá menos capacidade de entregar o gerenciamento de valor de negócios
precisa. Trabalhe para chegar a um acordo. Por exemplo, corte o escopo de um recurso
mas mantenha o valor essencial e use a automação para entregar e manter um
produto melhor.
Sempre temos prazos e sempre nos sentimos pressionados pelo tempo. A tentação de
simplesmente voltar a fazer as coisas como sempre fizemos, como executar testes de
regressão manualmente e esperar pelo melhor, está sempre presente, embora
sabemos que isso não funciona. Nunca há tempo suficiente para voltar e consertar
coisas. Durante sua próxima reunião de planejamento, reserve um tempo para fazer
progresso em seus esforços de automação.
Nossa equipe se concentra em reservar tempo para um bom design, um forte conjunto de testes
A história de Lisa
automatizados e tempo suficiente para testes exploratórios. Qualidade, e não velocidade, sempre
foi nosso objetivo. Nossos problemas de produção custam muito para serem resolvidos, então
toda a empresa está disposta a dedicar algum tempo para evitá-los. Às vezes não escolhemos o
design certo e não temos medo de arrancá-lo e substituí-lo quando percebemos.
Aqui estão alguns exemplos recentes de como reservar um tempo para fazer as coisas certas.
Iniciamos um tema para fazer grandes alterações nos extratos de contas dos planos de
aposentadoria. Um dos programadores, Vince Palumbo, assumiu a tarefa de coletar dados adicionais
a serem utilizados nos depoimentos. Ele decidiu escrever testes unitários robustos para a
funcionalidade de coleta de dados, mesmo que isso significasse que a história teria que continuar na
próxima iteração. Escrever os testes unitários exigia muito tempo e esforço e, mesmo com os testes,
o código era extremamente complexo e difícil de fazer. Algumas iterações depois, outra programadora,
Nanda Lankala-palli, pegou outra história relacionada à coleta de dados e ficou agradavelmente
surpresa ao encontrar novos testes unitários. Ele foi capaz de fazer alterações rapidamente e o
esforço de teste foi bastante reduzido porque os testes de unidade estavam em vigor.
Mais tarde, descobrimos que havíamos perdido um caso extremo em que alguns cálculos para
a alteração no valor da conta estavam incorretos. A combinação de testes unitários automatizados e
muitos testes exploratórios não foram suficientes para capturar todos os cenários. Ainda assim, ter
os testes significava que Vince poderia escrever seu código corrigido primeiro e se sentir mais
confiante de que o código agora estava correto.
Outro exemplo recente dizia respeito ao processamento de cheques recebidos. A empresa queria
reduzir o processo de duas etapas para uma etapa, o que significava que o dinheiro seria investido
nas contas do plano de aposentadoria dois dias antes do que seria possível. O processo existente
foi todo escrito em código legado, sem testes unitários.
Discutimos se deveríamos reescrever o processamento na nova arquitetura. Nosso proprietário
do produto estava preocupado com o tempo que isso poderia levar. Nós sentimos
Machine Translated by Google
levaria tanto tempo para alterar o código existente quanto para reescrevê-lo
completamente, porque o código antigo era difícil de entender e não tinha nenhum teste
de unidade. Decidimos reescrever, o que não apenas reduziu o risco de problemas
nesta funcionalidade crítica, mas também nos deu a oportunidade de fornecer alguns
recursos extras com um pequeno custo extra. Até agora, esta estratégia provou valer a pena.
—Lisa
Permita-se ter sucesso. Trabalhe em um ritmo sustentável. Aproveite o tempo para refatorar conforme
você avança ou você acabará em uma bagunça. Como testadores, sempre
tem muitas tarefas diferentes para fazer. Se você estiver aprendendo uma nova ferramenta ou tentando
automatizar novos testes, não faça multitarefas. Encontre um grande bloco de tempo e foco. Isso é
difícil, mas mudar de marcha constantemente é mais difícil.
Se as partes interessadas da empresa estiverem impacientes para que sua equipe “simplesmente faça
isso”, analise o problema com elas. Quais são os riscos? Quanto custará uma produção
custo do problema? Quais são os benefícios de lançar um hack rápido? Quanto
dívida técnica isso adicionará? Qual é o retorno do investimento a longo prazo de um
design sólido suportado por testes automatizados? Como cada abordagem afetará
rentabilidade da empresa e satisfação do cliente? E o intangível
custos, como o efeito que a realização de um trabalho de baixa qualidade tem sobre o moral da equipe?
Às vezes o negócio vai dar certo, mas apostamos que você normalmente encontrará
esse investimento inicial compensa.
Aprender fazendo
Todo mundo aprende de maneiras diferentes, mas quando você decide como vai
para automatizar um teste, entre e comece a fazê-lo. Em scripts diários com Ruby
for Teams, Testers, and You [2007], Brian Marick aconselha aprender a programar
escrevendo um programa. Cometer erros! Quanto mais problemas você tiver, mais
mais você aprenderá. Conseguir que alguém se junte a você ajudará a acelerar o aprendizado, mesmo
que nenhum de vocês esteja familiarizado com a ferramenta ou o idioma.
Se você não tem ninguém com quem fazer dupla, fale com o “patinho de borracha”: Imagine
você está descrevendo o problema para um colega de trabalho. O processo de explicação pode
muitas vezes fazem com que a causa do problema apareça. Simplesmente lendo um teste
em voz alta para si mesmo pode ajudá-lo a encontrar seus pontos fracos.
Você sempre deve ser capaz de identificar as versões dos scripts de teste que acompanham um
versão específica do código.
As ferramentas de automação são apenas uma peça do quebra-cabeça. Ambientes de teste e teste
os dados são componentes essenciais. Vejamos os dados de teste a seguir.
Não importa qual ferramenta usamos para automatizar os testes, os testes precisam de dados para serem processados.
Idealmente, eles precisam de dados realistas que correspondam aos dados de produção. No entanto, os
bancos de dados de produção geralmente contêm muitos e muitos dados e podem ser
altamente complexo. Além disso, o acesso ao banco de dados retarda exponencialmente os testes. Igual a
grande parte dos testes ágeis é um ato de equilíbrio.
Enquanto escrevemos este livro, existem diversas ferramentas interessantes disponíveis para gerar testes
dados para todos os tipos de campos de entrada e condições de contorno. Código aberto e
ferramentas comerciais como Data Generator, databene benerator, testgen,
Datatect e Turbo Data estão disponíveis para gerar arquivos simples ou gerar dados
diretamente para tabelas de banco de dados. Essas ferramentas podem gerar enormes variedades de
diferentes tipos de dados, como nomes e endereços.
Machine Translated by Google
Também é bastante fácil gerar dados de teste com um script caseiro, usando um
linguagem de script como Ruby ou Python, uma ferramenta como Fit ou FitNesse, ou um
script de shell.
Nossos scripts Watir criam entradas de dados de teste aleatórias, tanto para garantir que sejam
A história de Lisa
reexecutáveis (é improvável que criem um funcionário com o mesmo SSN duas vezes) quanto para
fornecer uma variedade de dados e cenários. O script que cria novos planos de aposentadoria produz
planos com cerca de 200 combinações diferentes de opções. O script que testa a contratação de um
empréstimo gera aleatoriamente a frequência, o motivo e o prazo do empréstimo e verifica se o pagamento
esperado está correto.
Temos scripts utilitários para criar arquivos separados por vírgula para testar uploads.
Por exemplo, existem vários locais no sistema que carregam arquivos de censo com informações de novos
funcionários. Se eu precisar de um arquivo de teste com 1.000 novos funcionários com alocações aleatórias
de investimentos para um plano de aposentadoria, posso simplesmente executar o script e especificar o
número de funcionários, os fundos mútuos em que estão investindo e o nome do arquivo. Cada registro
terá um Número de Seguro Social gerado aleatoriamente, nome, endereço, beneficiários, valores de
diferimento de salário e alocações de fundos de investimento. Aqui está um trecho do código para gerar
os cálculos de investimento.
# 33% das vezes maximiza o número de fundos escolhidos, 33% das vezes
# selecione um único fundo e 33% das vezes selecione entre 2 a 4 fundos
fund_hash = caso rand(3)
quando 0: a.get_random_allocations(@fund_list.clone)
quando 1: a.get_random_allocations(@fund_list.clone, 1)
quando 2: a.min_percent = 8;
a.get_random_allocations(@fund_list.clone, rand(3) + 2)
fim
emp['fund_allocations'] = fund_hash_to_string(fund_hash)
Scripts como esses têm usos duplos, tanto como testes de regressão que cobrem vários cenários diferentes
quanto como ferramentas de teste exploratório que criam dados de teste e constroem cenários de teste.
Eles não são difíceis de aprender a escrever (veja a seção “Aprender fazendo“
anteriormente neste capítulo).
—Lisa
Scripts e ferramentas para gerar dados de teste não precisam ser complexos. Por exemplo,
PerlClip simplesmente gera texto na área de transferência do Windows para que possa ser colado
onde for necessário. Vale a pena tentar qualquer solução que elimine o tédio suficiente para
permitir que você descubra possíveis problemas sobre o aplicativo. "O mais simples
coisa que poderia funcionar” definitivamente se aplica à criação de dados para testes.
Você deseja manter seus testes o mais simples e rápidos possível.
Machine Translated by Google
Sua primeira escolha para teste deve tentar ter testes que possam ser executados completamente
em memória. Eles ainda precisarão configurar e desmontar os dados de teste, mas o
os dados não serão armazenados em um banco de dados. Cada teste é independente e é executado tão rapidamente quanto
qualquer teste poderia. O acesso ao banco de dados significa que a E/S e os discos são
inerentemente lentos. Cada leitura no banco de dados retarda a execução do teste. Se o seu objetivo é dar rápido
feedback para a equipe, então você deseja que seus testes sejam executados o mais rápido possível.
Um objeto falso, como um banco de dados na memória, permite que o teste faça o que for necessário
fazer e ainda dar feedback instantâneo.
—Lisa
Se você estiver testando lógica de negócios, algoritmos ou cálculos em código, estará interessado
no comportamento do próprio código, dadas determinadas entradas; você não se importa
de onde vêm os dados, desde que representem dados reais com precisão. Se este
Se for o caso, construa dados de teste que façam parte do teste e possam ser acessados na
memória e deixe o código de produção operar a partir deles. Simular acesso ao banco de dados
e objetos, e concentre-se no propósito do teste. Não só os testes serão executados
mais rápido, mas serão mais fáceis de escrever e manter.
Machine Translated by Google
Ao gerar dados para um teste, use valores que reflitam a intenção do teste,
sempre que possível. A menos que você esteja completamente confiante de que cada teste é independente,
gere valores de teste exclusivos para cada teste. Por exemplo, use carimbos de data/hora
como parte dos valores do campo. Dados exclusivos são outra rede de segurança para impedir que os testes
infectando uns aos outros com dados perdidos. Quando você precisa de grandes quantidades de dados,
tente gerar os dados aleatoriamente, mas sempre limpe-os no final do teste
para que não sangre no próximo teste. Reconhecemos que às vezes você
precisa testar tipos de dados muito específicos. Nestes casos, gerados aleatoriamente
dados iriam anular o propósito do teste. Mas você pode usar o suficiente
randomização para garantir que cada teste tenha entradas exclusivas.
Se o sistema em teste depende muito do banco de dados, isso naturalmente terá que ser
testado. Se o código que você está testando lê e/ou grava no banco de dados, pelo menos
em algum momento você precisará testar isso e provavelmente desejará pelo menos alguns testes de
regressão que verifiquem a camada de código do banco de dados.
Nossa abordagem preferida é fazer com que cada teste adicione os dados necessários a um teste
esquema, operar nos dados, verificar os resultados no banco de dados e, em seguida, excluir todos os
dados de teste para que o teste possa ser executado novamente sem impactar outros testes subsequentes.
Isto apoia a ideia de que os testes são independentes uns dos outros.
Usamos um acessório de dados genérico que permite que a pessoa que escreve o teste especifique
A história de Lisa
a tabela do banco de dados, as colunas e os valores das colunas para adicionar dados. Outro
dispositivo genérico de pesquisa de dados nos permite inserir um nome de tabela e uma cláusula SQL
where para verificar os dados persistidos reais. Também podemos usar o acessório de dados genérico
para excluir dados usando o nome da tabela e um valor-chave. A Figura 14-3 mostra um exemplo
de tabela que usa um data fixture para construir dados de teste no banco de dados. Ele preenche a tabela
Figura 14-3 Exemplo de tabela usando um acessório de dados para construir dados de
teste no banco de dados
Machine Translated by Google
“todos os fundos” com as colunas e valores especificados. É fácil para aqueles que escrevem
casos de teste preencher as tabelas com todos os dados de que precisamos.
Observe que os esquemas que usamos para esses testes têm a maioria de suas restrições
removidas, portanto, só precisamos preencher as tabelas e colunas pertinentes à funcionalidade
que está sendo testada. Isso também torna a manutenção um pouco mais fácil. A desvantagem é
que o teste é um pouco menos realista, mas os testes que utilizam outras ferramentas verificam a
funcionalidade em um ambiente realista.
A desvantagem de criar dados de teste dessa maneira é que sempre que uma alteração é feita no
banco de dados, como uma nova coluna com um valor obrigatório, todos os dados fixos
tabelas nos testes que preenchem essa tabela terão que ser alteradas. Esses testes podem ser
complicados de escrever e manter, por isso só os usamos quando for absolutamente necessário.
Tentamos projetar os testes para manter os custos de manutenção baixos. Por exemplo, o conjunto
de dados na Figura 14-3 está em uma biblioteca “include” e pode ser incluído nos testes que
precisam dele. Digamos que adicionamos uma nova coluna, “fund_category”. Precisamos apenas
adicioná-lo a esta tabela “include”, em vez de em 20 testes diferentes que o utilizam.
—Lisa
Dados Canônicos
Outra alternativa é ter esquemas de teste que possam ser atualizados rapidamente com
dados de um banco de dados canônico ou inicial. A ideia é que esses dados de sementes sejam uma amostra
representativa dos dados reais de produção. Por ser uma pequena quantidade de dados,
pode ser reconstruído rapidamente sempre que um conjunto de testes de regressão precisar ser executado.
Essa abordagem também aumenta o tempo necessário para executar testes, mas são apenas alguns
minutos no início do conjunto de regressão, em vez de reservar um tempo de cada
teste individual. Os testes ainda serão mais lentos que os testes que não acessam o banco de dados, mas serão
Os dados canônicos têm muitos usos. Testadores e programadores podem ter seus próprios
esquema de teste para atualizar à vontade. Eles podem conduzir tanto manuais quanto automatizados
testes sem pisar nos testes de ninguém. Se os dados forem cuidadosamente escolhidos,
os dados serão mais realistas do que a quantidade limitada de dados que cada teste pode
construir para si mesmo.
Claro que, como acontece com praticamente tudo, há uma desvantagem. Dados canônicos
pode ser difícil acompanhar. Quando você precisar de novos cenários de teste, deverá identificar os dados de
produção que funcionarão ou criar os dados necessários e adicioná-los
para o esquema inicial. Você tem que limpar os dados, mascarar a identificação de pessoas reais
características, tornando-o inócuo por razões de segurança. Cada vez que você adiciona
Machine Translated by Google
uma tabela ou coluna no banco de dados de produção, você deverá atualizar seus esquemas de
teste adequadamente. Talvez seja necessário avançar os dados sensíveis à data todos os anos ou
fazer outra manutenção em grande escala. Você deve selecionar cuidadosamente quais tabelas
devem ser atualizadas e quais tabelas não precisam ser atualizadas, como tabelas de pesquisa.
Se você precisar adicionar dados para aumentar a cobertura do teste, a atualização demorará mais
para ser feita, aumentando o tempo do processo de construção que a aciona. Como enfatizamos, é
importante que suas compilações automatizadas forneçam feedback em tempo hábil, para que
atualizações cada vez mais longas do banco de dados prolonguem seu ciclo de feedback. Você
também perde a independência do teste com dados canônicos; portanto, se um teste falhar, outros
poderão seguir o exemplo.
Os membros da equipe de Lisa executam seus conjuntos de testes de GUI e alguns de seus testes
de regressão funcional em esquemas atualizados a cada execução com dados canônicos. Em raras
ocasiões, os testes falham inesperadamente devido a uma atualização incorreta dos dados iniciais.
Decidir se deve “rolar” os dados para frente, de modo que, por exemplo, as linhas de 2008 se tornem
as linhas de 2009, pode ser uma dor de cabeça. Até agora, o ROI do uso de dados canônicos tem
sido aceitável para a equipe. A equipe atual de Janet também usa dados iniciais para testes de
“camada intermediária” em compilações locais. Funciona bem para feedback rápido durante o ciclo
de desenvolvimento. No entanto, o ambiente de teste e os ambientes de preparação usam uma
cópia migrada dos dados de produção. A desvantagem é que os testes de regressão só podem ser
executados em cópias locais da compilação. O risco é baixo porque eles praticam “construir uma
vez, implantar para muitos”.
A capacidade de testar um sistema que seja o mais parecido possível com a produção é essencial
para a maioria das equipes de desenvolvimento de software. No entanto, executar um conjunto de
testes de regressão automatizados em uma cópia de um banco de dados de produção provavelmente
seria executado muito lentamente para ser um feedback útil. Além disso, você não poderia realmente
depender de nenhum dado permanecer estável ao trazer novas cópias para se manter atualizado.
Geralmente, quando se trata de testes funcionais ou de ponta a ponta, um clone do banco de dados
de produção é mais útil para testes exploratórios manuais.
Sempre há uma compensação; seu banco de dados de produção pode ser enorme, por isso é caro
e lento, mas fornece os dados de teste mais precisos disponíveis. Se a sua organização puder
adquirir hardware e software para armazenar várias cópias de dados de produção para fins de teste,
isso é ideal. As pequenas empresas podem
Machine Translated by Google
têm restrições de recursos que podem limitar a quantidade de dados que podem ser
armazenados em ambientes de teste e preparação. Neste caso, você precisará decidir
quantos dados de teste você pode suportar e planejar como copiar dados relevantes o suficiente
dados para tornar o teste representativo do que é usado na “vida real”. Ou você pode
considere fazer o investimento em hardware, que está ficando mais barato
todos os dias, para apoiar um ambiente de estilo de produção real. Caso contrário, seu
os resultados dos testes podem ser enganosos. Como mencionamos com os dados canônicos,
pode ser necessário limpar os dados antes de usá-los.
Migração de dados
A migração de dados precisa ser testada em um banco de dados real. Os scripts de atualização
do banco de dados precisam ser executados em dados reais e na última versão conhecida do
esquema do banco de dados.
Paul Rogers, arquiteto de testes de automação, conta esta história de teste de uma
migração de banco de dados reveladora [2008]:
Ontem mesmo, executei uma migração Rails em meu banco de dados de teste.
Os desenvolvedores escreveram, testaram e verificaram usando seus bancos de
dados de desenvolvimento. Meu banco de dados de teste era provavelmente 20.000
vezes maior. A migração para eles levou segundos. Para mim, bem, parei depois de
três horas, provavelmente 10% concluído. Os programadores precisavam de refazer
a sua estratégia de migração.
Duvido que isso tivesse aparecido em um banco de dados na memória, então, para
mim, um banco de dados real neste caso foi definitivamente a escolha certa. Na
verdade, é provável que isso contribua para coisas que precisamos considerar
antes do lançamento, como quanto tempo leva uma implantação ou quanto tempo
leva a atualização do banco de dados. Podemos então usar isso para estimar
quanto tempo de inatividade precisaremos para a atualização real.
Este é outro exemplo de como devemos encontrar um equilíbrio entre testes que fornecem
feedback rápido e testes que refletem de forma realista eventos que podem ocorrer na
produção.
O primeiro passo para escolher uma ferramenta de automação é fazer uma lista de tudo
a ferramenta precisa fazer por você. Vamos considerar como você pode decidir sobre seu teste
requisitos da ferramenta.
Claro, o tipo de teste que você está automatizando é fundamental. Os testes de segurança
provavelmente precisam de ferramentas altamente especializadas. Existem muitos softwares de código aberto e
Machine Translated by Google
ferramentas do fornecedor para desempenho, para que o trabalho de selecionar uma não seja cansativo.
Ao dominar um desafio, você estará melhor preparado para o próximo. Levou
equipe de Lisa alguns anos para desenvolver conjuntos robustos de testes de regressão no
unidade, integração e níveis funcionais. O teste de desempenho foi o próximo
área de dor. As lições aprendidas com os esforços anteriores de automação ajudaram
eles fazem um trabalho melhor na identificação de requisitos para uma ferramenta de teste, como facilidade
de relatórios de resultados, compatibilidade com estruturas existentes e scripts
linguagem.
Escreva uma lista de verificação que capture todos os requisitos de sua ferramenta. Alguns deles
podem entrar em conflito ou se contradizerem - “A ferramenta precisa ser fácil
suficiente para que os clientes possam especificar testes” ou “Os testes devem ser fáceis de
automatizar." Anote-os para encontrar o equilíbrio certo. Então comece
fazendo sua pesquisa.
Você precisará de ferramentas diferentes para atender a propósitos diferentes. Implementar novas
ferramentas e aprender a melhor maneira de usá-las pode ser cansativo
muito rapidamente. Experimente uma ferramenta de cada vez, abordando a área de maior dor.
Dê tempo suficiente para um julgamento justo e avalie os resultados. Se estiver funcionando para
você, domine essa ferramenta antes de passar para a próxima área de dor e a próxima
ferramenta. A multitarefa pode funcionar em algumas situações, mas as novas tecnologias exigem atenção
total.
Quando você escolher uma ferramenta para atender a uma necessidade específica, dê um passo para trás
e veja o que mais você precisa. Qual é o próximo desafio de automação enfrentado
seu time? A ferramenta que você acabou de selecionar para outra finalidade funcionará para esse propósito?
também precisa ou precisa iniciar um novo processo seletivo?
Reserve tempo para avaliar ferramentas. Algumas equipes têm um “sprint de engenharia” ou
“refatorar iteração” a cada poucos meses onde, em vez de entregar histórias
priorizados pela empresa, eles começam a trabalhar na redução do débito técnico, na atualização de
versões de ferramentas e na experimentação de novas ferramentas. Se sua equipe não tiver
ainda assim, peça à sua administração para obtê-los. Reduzindo sua tecnologia
Machine Translated by Google
Quando você tiver uma lista de ferramentas que podem atender às suas necessidades, restrinja o
possibilidades até uma ou duas, aprenda como usar cada uma bem o suficiente para
experimente e faça um pico: experimente um cenário simples, mas representativo, que você possa
jogar fora. Avalie os resultados em relação aos requisitos. Use retrospectivas
considerar prós e contras.
Quais recursos você precisa para implementar e usar a ferramenta? Que impacto
a ferramenta terá na produtividade e velocidade da equipe? Quais são os riscos
pose? O que isso permitirá que você faça a longo prazo que não pode fazer agora?
Escolha seu melhor candidato e comprometa-se a experimentá-lo por algum período de tempo.
tempo suficiente para obter alguma competência com ele. Certifique-se de testar todas as suas
funcionalidades de missão crítica. Por exemplo, se sua aplicação usa muito Ajax,
certifique-se de que você pode automatizar testes usando a ferramenta. Em retrospectivas, veja
o que funcionou e o que não funcionou. Esteja aberto à ideia de que pode não estar certo
e que você tem que jogá-lo fora e começar de novo. Não sinta que você tem que manter
continue com a ferramenta porque você já investiu muito nela.
Todos sabemos que não existe uma “bala de prata” que possa resolver toda a sua automação
problemas. Reduza suas expectativas e abra sua mente. Soluções criativas
confiar tanto na arte quanto na ciência.
Escolhendo ferramentas
Temos a sorte de ter uma gama já vasta e um conjunto cada vez maior de ferramentas para
escolha entre: ferramentas locais, de código aberto, de fornecedores ou uma combinação de
Machine Translated by Google
qualquer, são todas alternativas viáveis. Com tantas opções, o truque é saber
onde procurar e encontrar tempo para experimentar as ferramentas e ver se elas atendem às suas
necessidades. Como não podemos prever o futuro, pode ser difícil avaliar o ROI de
cada solução potencial, mas uma abordagem iterativa para avaliá-las ajuda
vá para o caminho certo.
em cima de uma ferramenta de código aberto existente? Nesse caso, ferramentas de teste desenvolvidas internamente podem ser
o melhor ajuste.
As ferramentas caseiras têm muitas vantagens. Eles são definitivamente amigáveis ao programador. Se
sua equipe estiver escrevendo suas próprias estruturas de automação, eles estarão
precisamente personalizado para as necessidades de suas equipes de desenvolvimento e de clientes,
e integrado ao seu processo de construção existente e outras infraestruturas —
e você pode torná-los tão fáceis de executar e interpretar os resultados quanto precisar.
Cultivado em casa não significa grátis, é claro. Uma equipe pequena pode não ter o
largura de banda para escrever e dar suporte a ferramentas, bem como desenvolver código de produção. A
grande organização com requisitos únicos pode ser capaz de montar um
equipe de especialistas em automação que podem colaborar com testadores, clientes,
programadores e outros. Se suas necessidades são tão únicas que nenhuma ferramenta existente
os apoia, o cultivo local pode ser a sua única opção.
o preço está certo, embora seja importante lembrar que o preço de compra é
apenas uma fração do custo de qualquer ferramenta.
Nem todas as ferramentas de código aberto estão bem documentadas e o treinamento pode ser um problema.
No entanto, vemos seminários e tutoriais sobre a utilização destas ferramentas em muitas conferências e
reuniões de grupos de utilizadores. Algumas ferramentas de código aberto têm excelente usuário
manuais e ainda disponibilizam tutoriais online e aulas agendadas.
Se você está considerando uma solução de código aberto, procure um desenvolvedor ativo
Consulte o Capítulo 9,
“Kit de ferramentas para
e comunidade de usuários. Existe uma lista de discussão com muita largura de banda? São novos
Voltado para negócios recursos lançados com frequência? Existe uma maneira de relatar bugs e alguém corrige
Testes que apoiam a eles? Algumas dessas ferramentas têm melhor suporte e resposta mais rápida a bugs
equipe”, para saber
do que as ferramentas do fornecedor. Por que? As pessoas que os escrevem também os usam, e
mais sobre open
teste de origem automático
eles precisam desses recursos para testar seus próprios produtos.
ferramentas de informação.
Ferramentas do fornecedor
As ferramentas comerciais são percebidas como uma aposta segura. É difícil criticar alguém por
selecionando uma ferramenta bem conhecida que já existe há anos. É provável que eles
vêm com manuais, suporte e treinamento. Para testadores ou outros usuários que
não tiver formação técnica, o arranque inicial poderá ser mais rápido. Alguns são
bastante robusto e rico em recursos. Sua empresa pode já possuir um e ter
uma equipe de especialistas que sabem utilizá-lo.
Embora estejam mudando com o tempo, as ferramentas dos fornecedores são historicamente hostis aos
programadores. Eles tendem a usar linguagens de script proprietárias que
os programadores não querem perder tempo aprendendo. Eles também tendem a ser pesados. Os scripts de
teste podem ser frágeis, facilmente quebrados por pequenas alterações no
aplicação e de manutenção cara. A maioria dessas ferramentas está gravando
scripts para reprodução posterior. Os scripts de gravação/reprodução são notoriamente
caro do ponto de vista da manutenção.
nesse assunto.
Se você já tem pessoas especialistas em uma ferramenta de fornecedor e usa uma ferramenta que
pode ser usado apenas por um subconjunto da equipe de desenvolvimento ou por uma equipe separada
desde o desenvolvimento, uma ferramenta de fornecedor pode fazer muito sentido. Os dois primeiros XP de Lisa
as equipes usaram uma ferramenta de fornecedor com algum grau de sucesso.
Machine Translated by Google
No momento em que este livro foi escrito, melhores ferramentas de teste funcional e IDEs estavam surgindo.
Eles facilitam as tarefas de manutenção de testes com recursos como pesquisa/substituição global. Torção
é um exemplo de ferramenta implementada como uma coleção de plug-ins para o Eclipse
IDE, para que possa aproveitar os poderosos recursos de edição e refatoração.
Ferramentas ágeis
Elisabeth Hendrickson [2008] lista algumas características de testes ágeis eficazes
Parte III, “Usando
ferramentas de automação. Essas ferramentas devem:
quadrantes de testes ágeis”
e particularmente o
Capítulo 9, “Kit de Apoie o início imediato do esforço de automação de testes, usando uma abordagem
ferramentas para testes de teste primeiro
voltados para negócios
Separe a essência do teste dos detalhes da implementação
que dão suporte à
equipe”, contém Apoiar e incentivar boas práticas de programação para a parte do código da
exemplos de automação de testes
ferramentas de
Suporte à escrita de código de automação de testes usando linguagens reais,
automação de testes que funcionam bem em projetos ágeis.
com IDEs reais
Promova a colaboração
IMPLEMENTANDO AUTOMAÇÃO
Ao avaliar as ferramentas, pense na rapidez com que sua principal necessidade de automação
deve ser atendida. Onde você obterá suporte para ajudar
Implementá-lo? De que treinamento a equipe precisa e quanto tempo será
disponível para se dedicar a isso? Com que rapidez você precisa desenvolver essa ferramenta?
Selênio no trabalho
Joe Yakich, engenheiro de software com experiência em automação de testes, descreve como
uma equipe com a qual trabalhou implementou um esforço de automação de testes com Sele-nium,
uma ferramenta de automação de testes de código aberto.
A empresa de software para a qual trabalhei — vamos chamá-la de XYZ Corp — teve um
problema. O produto, um aplicativo baseado na Web de nível empresarial, era uma
oferta poderosa e madura. Os projetos de desenvolvimento foram gerenciados usando
Machine Translated by Google
Então qual foi o problema? XYZ estava enfrentando um futuro em que os esforços de teste de
software talvez não conseguissem acompanhar o esforço de desenvolvimento.
Problemas de qualidade de software podem retardar a adoção do produto ou, pior ainda,
ainda - faz com que os clientes existentes procurem outro lugar.
A automação de testes parecia uma forma óbvia de mitigar esses riscos, e a XYZ estava
plenamente ciente disso. Na verdade, eles já haviam tentado criar um conjunto de automação
de testes duas vezes antes e falharam.
Na terceira vez, XYZ optou por usar Selenium RC, impulsionado pela linguagem de
programação Ruby. Selenium RC – RC significa “Controle Remoto” – é uma ferramenta
para automação de testes. Selenium RC consiste em um componente de servidor e
bibliotecas de cliente. O componente do servidor Java atua como um proxy HTTP, fazendo
com que o Selenium Core JavaScript pareça originar-se do servidor web do aplicativo em
teste (AUT). O servidor pode iniciar e parar sessões do navegador (os navegadores suportados
incluem quase todos os navegadores modernos, incluindo Internet Explorer, Firefox e Safari)
e interpretar comandos para interagir com elementos como botões, links e campos de
entrada.
As bibliotecas cliente permitem que scripts de teste sejam escritos em Java, .NET, Perl,
Python e Ruby.
Nossa equipe escolheu Ruby porque é uma linguagem puramente orientada a objetos,
dinâmica e interpretada, com uma sintaxe elegante, expressiva e concisamente poderosa.
Mais importante ainda, Ruby é uma ferramenta ideal para a criação de uma Linguagem
Específica de Domínio (DSL). Ruby é maleável o suficiente para que o programador escolha
primeiro a estrutura e a sintaxe da DSL e depois crie uma implementação, em oposição a uma
linguagem mais rígida que pode impor restrições a essa liberdade. Um dos nossos objetivos
era criar uma estrutura de automação – uma DSL – que escondesse detalhes complexos.
Queríamos poder dizer coisas como
editor.save
s.click("//tabela[@class='edit']/tbody/tr[0]//img[@src='save.gif']")
O primeiro não é apenas mais legível, mas também muito mais fácil de manter. A expressão
XPath neste último pode ser colocada em um método de biblioteca para ser chamada conforme
necessário. Usar uma DSL que emprega os substantivos e verbos do aplicativo permite que
um engenheiro que escreve um teste se concentre no teste, e não na complexidade subjacente
da interação com os controles na tela.
XYZ criou uma equipe de automação para construir a estrutura e os testes. A criação da
estrutura em si foi uma tarefa demorada e tecnicamente desafiadora.
Machine Translated by Google
tarefa. Algumas das próprias classes da estrutura eram complicadas o suficiente para
garantir seus próprios testes unitários. Depois que uma quantidade suficiente de estrutura de
teste foi construída, começamos a trabalhar nos testes reais da aplicação, usando a biblioteca
Ruby RSpec. O próprio RSpec é uma DSL para especificações de teste. Um de seus pontos
fortes é o uso de declarações declarativas simples para descrever comportamentos e expectativas.
Poderíamos, por exemplo, escrever um teste usando a instrução
preenchendo o corpo do teste com chamadas para a estrutura de teste baseada em Selenium que
criamos.
Nem tudo pode ser automatizado, por razões orçamentais ou técnicas. Além disso, os testes
exploratórios são inestimáveis e não devem ser negligenciados. Deve-se notar, no entanto, que
essas desvantagens são compartilhadas por todas as outras ferramentas de automação
de testes disponíveis atualmente, e a maioria das outras ferramentas de automação que podem
rivalizar com as proezas de automação do Selenium são produtos comerciais que não podem
igualar seu preço: grátis.
Boas práticas de desenvolvimento são fundamentais para qualquer esforço de automação. Use uma
abordagem orientada a objetos. À medida que você constrói sua biblioteca de objetos de teste, adicionar
novos testes fica mais fácil. Uma linguagem específica de domínio ajuda a tornar os testes voltados para
os negócios compreensíveis para os clientes, ao mesmo tempo que reduz os custos de gravação e
manutenção de scripts de teste automatizados.
Um bom design orientado a objetos não é a única chave para construir um conjunto de testes
automatizados sustentáveis que compensam. Você também precisa executar os testes com frequência
o suficiente para obter o feedback que sua equipe precisa. Quaisquer ferramentas que escolhermos devem
ser integrado ao nosso processo de construção. Resultados fáceis de interpretar devem surgir
para nós automaticamente.
Machine Translated by Google
Estas preocupações são uma parte essencial do quadro, mas ainda são apenas uma parte do
quadro. Precisamos de ferramentas que nos ajudem a criar ambientes de teste que imitem a
produção. Precisamos de maneiras de manter esses ambientes de teste independentes, não
afetados pelas mudanças que os programadores possam estar fazendo.
Construir uma infraestrutura de teste pode ser um grande investimento, mas é um investimento
que nossa equipe ágil precisa fazer para dar um salto na automação de testes. Hardware,
software e ferramentas precisam ser identificados e implementados. Dependendo dos recursos
da sua empresa, este pode ser um projeto de longo prazo. Pense em maneiras de lidar com a
situação no curto prazo, enquanto planeja como montar a infraestrutura que você realmente
precisa para minimizar riscos, maximizar a velocidade e entregar o melhor produto possível.
Digamos que precisamos de uma maneira de encontrar o teste que verifica um cenário específico,
de entender o que cada teste faz e de saber que parte do aplicativo ele verifica. Talvez precisemos
satisfazer um requisito de auditoria para rastreabilidade de cada requisito até seu código e testes.
Os testes automatizados precisam ser mantidos e controlados da mesma forma que o código-
fonte de produção. Ao marcar seu código de produção para lançamento, os testes que verificaram
essa funcionalidade precisam fazer parte da tag.
Aqui está um exemplo em que isso é útil. Acabamos de encontrar um problema no código em
desenvolvimento. É um problema novo ou está oculto no código há algum tempo e de alguma
forma não foi percebido no teste? Podemos implantar a tag que está em produção, tentar
reproduzir o problema e investigar por que os testes não detectaram o problema. A equipe de
Lisa recentemente teve uma situação em que o conjunto de regressão perdeu um bug porque
faltava uma restrição de banco de dados no esquema de teste. Esse tipo de problema é difícil de
identificar se você não estiver vinculando as versões do código de teste às versões do código de
produção.
Organizando testes
Muitas ferramentas vêm com seus próprios meios de organização. Por exemplo, Fit-Nesse vem
com seu próprio wiki, com uma organização hierárquica e recursos integrados.
Machine Translated by Google
controle de versão. No momento em que este livro foi escrito, FitNesse estava começando a fornecer suporte para
ferramentas de controle de código-fonte, como o Subversion. Scripts escritos em outras ferramentas de teste,
como Watir e Canoo WebTest, podem e devem ser mantidos dentro do
mesmo sistema de controle de código-fonte do código de produção, assim como os testes de unidade.
Sempre organizamos nossos testes junto com o projeto em teste. Ou seja, as fontes de teste
são armazenadas junto com as fontes do projeto exatamente no mesmo repositório, utilizando
os mesmos mecanismos de controle de revisão, marcação e compartilhamento da base de testes.
WebTest vem com um layout padrão de como organizar testes e dados de teste em diretórios.
Você pode adaptar isso a qualquer estrutura que desejar, mas a “convenção sobre configuração”
mostra sua força aqui. Em grandes projetos, cada subprojeto mantém sua própria
base de testes em um “webtest”
subdiretório que segue a convenção.
Sempre que um cliente não seguia esta abordagem, a experiência era muito dolorosa para todas
as pessoas envolvidas. Vimos enormes bancos de dados de descrições de testes que nem
sequer apresentavam um controle de revisão adequado (ou seja, onde você poderia, por exemplo,
ver diferenças com versões antigas ou quem alterou qual teste por qual motivo).
Tenha em mente que os testes são compostos de módulos para que você possa eliminar a
duplicação do código de teste; caso contrário, a manutenção irá matá-lo.
E antes de alterar qualquer módulo, você precisa saber onde ele é utilizado.
Resumindo: certifique-se de que o mestre de seus testes e seus dados de teste estejam em um
formato de texto versionado junto com seu código em teste.
O pessoal não técnico (por exemplo, gerenciamento, controle de qualidade) pode exigir mais
informações de alto nível sobre a cobertura do teste, os resultados dos testes mais recentes
ou até mesmo meios de acionar uma execução de teste. Não deixe que esses requisitos
válidos prejudiquem a abordagem de engenharia para automação de testes. Em vez disso, crie
pequenas ferramentas, por exemplo, aplicativos de relatórios baseados na Web, que atendam
a essas necessidades.
A capacidade dos clientes de acessar informações sobre testes é tão importante quanto a capacidade
de manter os códigos de teste e produção coordenados. Como Dierk apontou, talvez você não consiga
fazer tudo isso com a mesma ferramenta.
Machine Translated by Google
Como um dos principais motivos pelos quais escrevemos testes é para orientar o desenvolvimento,
precisamos organizar os testes para que todos da equipe possam encontrar os testes apropriados para cada
história e identificar facilmente quais funcionalidades os testes cobrem.
Como usamos testes como documentação, é fundamental que qualquer pessoa do
a equipe de desenvolvimento ou do cliente pode encontrar um teste específico rapidamente quando há
uma pergunta sobre como o sistema deve se comportar. Podemos precisar de várias ferramentas
para satisfazer diferentes objetivos de gerenciamento de testes.
É fácil perder o controle dos scripts de teste. Quando um teste falha, você precisa identificar
o problema rapidamente. Talvez você precise saber quais alterações foram feitas
recentemente ao script de teste, o que é fácil com o histórico disponível em uma fonte
sistema de controle de código. Sua equipe de clientes também precisa de uma maneira de acompanhar
progresso do projeto, para entender quanto do código é coberto com testes,
e possivelmente para executar os próprios testes. Sistemas de gerenciamento de testes, como os testes
em si, devem promover a comunicação e a colaboração entre a equipe
membros e entre diferentes equipes.
Teste de transparência
Declan Whelan, desenvolvedor de software e coach ágil, usa uma abordagem de
gerenciamento de testes projetada para manter os testes visíveis para testadores,
desenvolvedores, gerentes e outras equipes.
Antes disso, a equipe de controle de qualidade mantinha casos de teste em uma unidade
que não era acessível a ninguém fora do controle de qualidade. Isso significava que os
desenvolvedores não conseguiam ver facilmente o que estava sendo testado. Tornar os
testes visíveis, transparentes e apoiados por um sistema de controle de versão (Subversion)
realmente ajudou a quebrar barreiras entre desenvolvedores e testadores da equipe.
Certifique-se de que seus testes sejam gerenciados com um controle de versão sólido, mas
aumente isso com uma maneira de todos usarem os testes de maneira a impulsionar o projeto
e garantir que o valor certo seja entregue.
Se você está conduzindo o desenvolvimento com testes, e alguns desses testes ainda não foram
aprovados, isso não deve falhar na compilação. Algumas equipes, como a de Lisa, simplesmente mantêm
novos testes fora do processo de integração e construção até que passem pelo primeiro
tempo. Depois disso, eles sempre precisam passar. Outras equipes usam regras na construção
processar-se para ignorar falhas de testes escritos para cobrir o código atualmente
sendo desenvolvido.
Como acontece com qualquer ferramenta de automação de testes, você pode resolver seus problemas
de gerenciamento de testes com sistemas locais, de código aberto ou comerciais. Os mesmos critérios
descritos na seção sobre avaliação de ferramentas de teste podem ser aplicados a
selecionando uma abordagem de gerenciamento de testes.
O gerenciamento de testes é outra área onde se aplicam valores e princípios ágeis, juntamente com a
abordagem de toda a equipe. Comece simples. Experimente em
pequenos passos até encontrar a combinação certa de controle de código-fonte, repositórios e
gerenciamento de construção que mantém os testes e o código de produção em
sincronizar. Avalie sua abordagem de gerenciamento de testes com frequência e certifique-se de que ela
acomode todos os diferentes usuários de testes. Identifique o que está funcionando e
o que está faltando e planeje tarefas ou mesmo histórias para tentar outra ferramenta ou processo para
preencha quaisquer lacunas. Lembre-se de manter o gerenciamento de testes leve e fácil de manter para
que todos possam usá-lo.
Machine Translated by Google
Figura 14-4 Resultados de testes de uma ferramenta de gerenciamento de testes desenvolvida internamente
Criamos um conjunto de testes FitNesse para cada sprint. Nesse conjunto, criamos
um subwiki para cada história de usuário que contém seus testes. Conforme
necessário, criamos uma configuração e desmontagem por teste ou suíte. Se, por
algum motivo, não concluirmos uma história de usuário no sprint, moveremos os
testes para o conjunto do sprint no qual concluímos a história.
VAI COMEÇAR _
Não tenha medo de colocar algo - qualquer coisa - no lugar, mesmo que seja um pouco
deficiente. O fator mais importante para o sucesso é apenas começar. Muitos, se
não a maioria, as equipes de sucesso começaram com um processo ruim, mas conseguiram
transformar um processo inadequado em algo verdadeiramente essencial para o sucesso da equipe,
uma peça de cada vez. Tal como acontece com tantos aspectos dos testes ágeis, melhorar
em pequenos incrementos é a chave para o sucesso.
Se você não começar de algum lugar, nunca obterá força na automação. Pegar
toda a equipe junta e inicia um experimento. Sem o nível certo de
automação de testes, sua equipe não consegue fazer o melhor trabalho. Você precisa da automação
de teste certa para agregar valor ao negócio com frequência. Daqui a um ou dois anos, você
me pergunto por que você achou que a automação de testes era tão difícil.
RESUMO
Neste capítulo, consideramos como aplicar valores, princípios e práticas ágeis para desenvolver uma
estratégia de automação. Discutimos os seguintes assuntos
relacionado à automação:
Use os quadrantes de testes ágeis para ajudar a identificar onde você precisa da automação
de testes e quando precisará dela.
A pirâmide de automação de testes pode ajudar sua equipe a fazer os investimentos certos
em automação de testes que terão maior retorno.
Machine Translated by Google
RESUMO 325
Aplique valores, princípios e práticas ágeis para ajudar sua equipe a obter força na automação
de testes.
Uma abordagem simples para toda a equipe, usando feedback iterativo e dedicando tempo
suficiente pode ajudá-lo a começar a encontrar uma boa solução.
Ao desenvolver uma estratégia de automação, comece com a maior área problemática, considere
uma abordagem em várias camadas e se esforce para revisitar e melhorar continuamente
sua estratégia, em vez de alcançar a perfeição desde o início.
Um bom gerenciamento de testes garante que os testes possam fornecer documentação eficaz
do sistema e do progresso do desenvolvimento.
Comece hoje mesmo com a automação de testes.
Machine Translated by Google
Parte V
UMA ITERAÇÃO EM
A VIDA DE UM TESTADOR
Sempre que realizamos tutoriais, webinars ou sessões de perguntas e respostas com participantes que
são relativamente novos no desenvolvimento ágil, sempre nos fazem perguntas como
“O que os testadores fazem durante a primeira parte de uma iteração antes de qualquer coisa
pronto para testar?” ou “Onde o teste de aceitação do usuário se encaixa em uma versão ágil
ciclo?" É fácil expor teorias sobre quem deve fazer o quê e quando, em
um processo ágil, mas achamos que dar exemplos concretos de nossa própria experiência é a melhor ajuda
que podemos dar aos novatos ágeis. Através de nossas conversas com muitos
diferentes equipes ágeis, aprendemos que há muitos pontos em comum no que
funciona bem para desenvolvimento e testes ágeis.
Nesta parte do livro, acompanharemos a vida de um testador ágil ao longo de uma iteração. Na verdade,
exploraremos mais do que apenas uma iteração. Começaremos com o que
os testadores fazem durante o planejamento do lançamento ou do tema, quando a equipe analisa o trabalho
isso servirá para várias iterações futuras. Daremos exemplos do que os testadores
pode fazer para ajudar os membros da equipe a começarem a trabalhar quando iniciarem o
iteração. Mostraremos como a codificação e os testes fazem parte de um processo integrado de entrega de
software e descreveremos como testadores e programadores
trabalhar de perto e de forma incremental. Explicaremos diferentes maneiras pelas quais os testadores podem
ajudam suas equipes a permanecer no caminho certo e avaliar o progresso, incluindo abordagens úteis para
métricas e tratamento de defeitos. Veremos as atividades relacionadas aos testes envolvidas na conclusão
de uma iteração e na descoberta de maneiras de melhorar para o
o próximo. Por fim, examinaremos o papel do testador em um lançamento bem-sucedido, incluindo o jogo
final, UAT, empacotamento, documentação e treinamento.
Machine Translated by Google
As atividades descritas nesta visão geral dos testes ágeis podem ser realizadas por qualquer pessoa
da equipe, não apenas por especialistas em testes. Em algumas equipes,
todos os membros da equipe podem executar e realizam qualquer tarefa, seja desenvolvimento, teste,
banco de dados, infraestrutura ou outras tarefas. Para simplificar, nesta seção presumiremos que
estamos seguindo alguém cuja função principal é testar, pois ajuda a
entregar software de alta qualidade.
Machine Translated by Google
Capítulo 15
ATIVIDADES DO TESTER EM
LANÇAMENTO OU PLANEJAMENTO DE TEMAS
Preparando para
Comunicação de resultados de testes
Visibilidade
Métricas de lançamento Dimensionando histórias
Dimensionamento
Função do testador
Um exemplo
Plano de teste leve
Matriz de Teste
Por que priorizamos?
Plano de teste Lançamento/Tema
Planilha Priorizando
Alternativas
Planejamento Considerações de teste
Quadro branco
Foco no valor
Envolvimento de terceiros
Por que plano de teste?
Tipos de teste
Ambientes de teste
Dados de teste
As equipes de desenvolvimento ágil completam histórias e entregam software pronto para produção
em cada iteração, mas planejam o panorama geral ou uma parte maior da funcionalidade com
antecedência. Um tema, épico ou projeto pode abranger várias iterações. Neste capítulo,
veremos o que os testadores fazem quando sua equipe reserva um tempo para planejar seu
lançamento. Também consideramos formas de acompanhar se o nosso desenvolvimento está a
decorrer conforme previsto ou se são necessárias correções de rumo.
329
Machine Translated by Google
Um dos motivos pelos quais as equipes de software tentam o desenvolvimento ágil é porque
sabem que planos de longo prazo não funcionam. A maioria dos ambientes de negócios é
volátil e as prioridades mudam toda semana, ou mesmo todos os dias. O desenvolvimento ágil deve
evite “grande design inicial”. A maioria de nós já experimentou fazer planos que
acabou sendo um desperdício de esforço. Mas precisamos ter alguma compreensão
o que nosso cliente está procurando e como podemos entregá-lo para obter
começou bem. Felizmente, uma abordagem ágil pode tornar o planejamento uma ferramenta útil
maneira de nos dar uma vantagem inicial para saber como entregaremos o produto.
Minha mesa está cheia de pastas e listas de tarefas, e uma sensação de estar
sobrecarregado me deixa inativo. Sou Diretor da Conferência e a tarefa neste momento
parece onerosa. Quando minha irmã se oferece para me ajudar, eu concordo, porque estou
desesperada para controlar esse planejamento. Dou as boas-vindas a Janet em minha
bagunça, mostro a ela minhas páginas com listas escritas à mão de coisas que precisam
ser feitas, explico as enormes tarefas que aguardam minha atenção e compartilho como
meu comitê funciona.
Janet me mostrou em linguagem simples como separar cada tarefa em um post-it e usar a
coordenação de cores para diferentes responsabilidades e diferentes indivíduos. Ela
explicou sobre as colunas “To Do”, “In
Progresso”, “Para revisar” e “Concluído”. Eu nunca tinha ouvido falar da palavra iteração
antes, mas entendia perfeitamente sobre uma linha do tempo. Ela recomendou blocos de
duas semanas, mas eu escolhi iterações de uma semana. Montamos uma parede para
meu quadro de planejamento e Janet me deixou para montá-lo e adicionar as tarefas
necessárias.
Nos seis dias desde que Janet chegou aqui, dez tarefas foram movidas da coluna
Tarefas pendentes para Em andamento. Três tarefas estão concluídas e específicas
as tarefas relacionadas ao tempo foram bloqueadas pelo período correto. O mais positivo
é que à medida que adiciono mais tarefas na coluna Tarefas, não me sinto sobrecarregado.
Entendo que tudo o que preciso fazer é iniciar os passos para iniciá-lo e então o trabalho
fica mais fácil. A sensação de caos desapareceu; Vejo progresso e entendo que ainda há
muito trabalho a ser feito. O cronograma é claro, as tarefas são discretas e concretas. E a
tarefa mais difícil de todas, encontrar uma forma de coordenar a videoconferência para o
nosso orador principal, foi abordada. Este sistema funciona!
As práticas ágeis de planejamento e rastreamento são úteis para mais do que o desenvolvimento
de software. Um pouco de tempo cuidadosamente investido e ferramentas simples usadas na
organização e planejamento das atividades de teste e recursos para um lançamento ajudarão
a equipe a entregar software de alta qualidade.
Machine Translated by Google
As equipes XP podem levar um dia a cada poucos meses para planejar o lançamento. Outras
equipes ágeis fazem planejamento antecipado quando se preparam para iniciar um tema, épico
ou recurso importante, que consideramos um grupo relacionado de histórias. Eles trabalham
para entender o tema ou lançamento em alto nível. Qual é a visão do cliente sobre o que
deveríamos entregar? Qual é o propósito do lançamento? Qual é o panorama geral? Que valor
isso agregará ao negócio, aos clientes?
Que outras equipes ou projetos estão envolvidos e requerem coordenação? Quando acontecerá
o UAT? Quando o código será liberado para teste, para produção?
Quais métricas precisamos saber se estamos no caminho certo? Essas questões gerais são
abordadas no planejamento do lançamento.
Essas reuniões de planejamento não têm como objetivo planejar detalhadamente cada iteração
do lançamento. E sabemos que não podemos prever exatamente quantas histórias podemos
completar em cada iteração. Porém, temos uma ideia da nossa velocidade média, para que
possamos ter uma ideia geral do possível alcance do lançamento. A equipe fala sobre os
recursos e histórias, tentando obter uma visão geral do que pode acontecer no lançamento e
quantas iterações serão necessárias para ser concluído.
Nós dois gostamos da abordagem de Mike Cohn para o planejamento de lançamentos em seu
livro Agile Estimating and Planning [2005]. As histórias que a empresa deseja incluir são
dimensionadas umas em relação às outras e, em seguida, os recursos são priorizados de
acordo com o valor que agregam. A equipe pode identificar “fatias finas” através dos recursos
para determinar quais histórias realmente precisam ser feitas, o que está no escopo, quais
“coisas interessantes” podem ser adiadas para mais tarde. Eles analisam as dependências
entre histórias, o risco relativo e outros fatores que determinam a ordem em que os recursos
devem ser codificados. A ordem em que as histórias são codificadas é tão importante, ou às
vezes mais importante, que o tamanho das histórias. As equipes desejam agregar valor na
primeira iteração do lançamento.
Vamos acompanhar nossa testadora ágil nas atividades de planejamento de lançamento e ver
como ela agrega valor por meio de sua perspectiva e foco únicos.
Machine Translated by Google
DIMENSIONAMENTO
As equipes ágeis estimam o tamanho relativo de cada história. Algumas equipes dimensionam à
medida que avançam, atrasando a estimativa até a iteração em que realmente concluirão a história.
Outros realizam reuniões para estimar histórias antes mesmo do planejamento do lançamento.
Algumas equipes de desenvolvedores e clientes se reúnem para escrever e estimar o tamanho
das histórias de uma só vez. O objetivo do dimensionamento é que os programadores dêem ao
negócio uma ideia do custo de cada história e os ajudem a priorizar e planejar as primeiras
iterações. Equipes de alto desempenho que trabalham juntas há anos podem adotar uma
abordagem menos formal. Para novas equipes ágeis, aprender a dimensionar histórias exige muita
prática e experiência. Não é importante dimensionar cada história corretamente, mas estar próximo
o suficiente para dar aos clientes uma ideia do tamanho das histórias, para que possam priorizar
com melhores informações. Com o tempo, as variações no tamanho das histórias individuais
diminuirão e descobriremos que um tema ou grupo relacionado de histórias leva aproximadamente
o tempo esperado.
No que diz respeito ao cálculo do tamanho da história, equipes diferentes usam técnicas diferentes,
mas, novamente, gostamos da abordagem de Mike Cohn para determinar o tamanho da história.
Dimensionamos em pontos da história, dias ideais ou simplesmente “pequeno, médio, grande”. O
tamanho relativo de cada história em relação às outras é o fator importante. Por exemplo, adicionar
um campo de entrada a uma interface de usuário existente é obviamente muito menor do que
desenvolver uma tela totalmente nova do zero.
Se a empresa conhece a velocidade média (o número de pontos da história que a equipe conclui
em cada iteração) e tem as estimativas iniciais do tamanho de cada história que deseja concluir,
ela tem uma ideia de quanto tempo pode levar para implementar um determinado tema. Tal como
acontece com qualquer outra metodologia de desenvolvimento, não há garantias, porque as
estimativas são apenas isso. Ainda assim, a empresa pode planejar bem o suficiente para conduzir
suas atividades habituais.
Nossas equipes usam o pôquer de planejamento (explicado no livro Agile Estimat-ing and
Planning, de Mike Cohn ) para estimar o tamanho da história. No planejamento do pôquer, cada
membro da equipe tem um baralho de cartas. Cada carta contém um número de pontos. O
processo começa com o cliente ou proprietário do produto lendo uma história e explicando seu
propósito e o valor que ela agregará. Ele pode listar algumas condições de satisfação ou casos
de teste de alto nível. Após uma breve discussão, cada membro da equipe segura um cartão que
representa o quão “grande” eles acham que a história é da sua perspectiva. Eles discutem
quaisquer grandes diferenças no valor dos pontos e estimam novamente até chegarem a um
consenso. A Figura 15-1 mostra os membros da equipe falando sobre
Machine Translated by Google
DIMENSIONAMENTO
333
os valores de pontos que cada um deles acabou de exibir. Este precisa ser um processo rápido -
longas discussões sobre detalhes não resultam em estimativas de tamanho mais precisas.
Algumas equipes calculam o tamanho relativo das histórias com base no número de pessoas necessárias
para completar uma determinada história em um determinado período de tempo. Outros estimam quantos
dias ideais que uma pessoa precisaria para terminá-lo. Use uma medida que faça
sentido para todos os membros da equipe e que forneça consistência entre as estimativas.
Um dos nossos ditados favoritos é: “Nenhuma história está pronta até ser testada”. No entanto,
encontramos equipes onde os testes não foram incluídos nas estimativas do tamanho da história.
Em alguns casos, testar uma funcionalidade pode demorar mais do que codificá-la.
Em nossa experiência, os testadores geralmente têm um ponto de vista diferente do de outras equipes
membros. Eles geralmente têm um amplo conhecimento do domínio e podem
identificar rapidamente “efeitos em cascata” que uma história pode ter no resto do
sistema. Eles também tendem a pensar em atividades não diretamente relacionadas ao desenvolvimento
que talvez precisem ser realizadas, como treinar usuários em um ambiente novo ou alterado.
interface.
Machine Translated by Google
A história de Lisa
O que um testador faz durante o processo de dimensionamento da história? Penso rapidamente na
história de vários pontos de vista. Que problema de negócios a história está resolvendo ou que valor de
negócios ela agrega? Se isso não estiver claro, faço perguntas ao proprietário do produto.
Como o usuário final realmente usará o recurso? Se ainda não estiver claro, peço ao proprietário do
produto um exemplo rápido. Posso perguntar: “Qual é a pior coisa que pode dar errado nisso?” Essa
abordagem negativa ajuda a avaliar o risco da história. Quais considerações de teste podem afetar o
tamanho da história? Se for difícil obter dados de teste ou se a história envolver terceiros, o teste
poderá demorar mais do que a codificação. Tento eliminar rapidamente quaisquer suposições
ocultas. Existem dependências ou riscos especiais de segurança? Esta parte do aplicativo precisará
lidar com uma grande carga?
Muitas histórias não são grandes o suficiente para justificar tanta reflexão. Geralmente, nós não
precisa de muitos detalhes para ter uma ideia do tamanho relativo. No entanto, sua equipe pode
realmente se queimar se uma história for subestimada por um fator de cinco ou dez. Certa vez, demos
uma estimativa relativamente pequena para uma história que acabou sendo pelo menos dez vezes maior.
Estes são os desastres que queremos evitar fazendo boas perguntas.
—Lisa
Os testadores precisam fazer parte do processo de dimensionamento. Algumas equipes pensam que
apenas os programadores deveriam participar, mas quando os testadores são participantes ativos, eles
pode ajudar a obter um dimensionamento de história muito mais preciso, o que é do interesse de toda
a equipe.
História PA-3
DIMENSIONAMENTO 335
Dono do produto: “Queremos apenas uma maneira fácil para os usuários excluirem itens, mas
não temos uma implementação específica em mente.”
Testador: “Eles deveriam ser capazes de excluir vários itens de uma vez?”
Dono do produto: “Ah, sim, apenas torne isso o mais fácil possível.”
Dono do produto: “Existe alguma maneira de salvar os itens excluídos para recuperação
posterior?”
Programador: “Claro, mas você deveria escrever uma nova história para isso. Por enquanto,
devemos começar com a funcionalidade básica de exclusão.”
Testador: “Na última versão, implementamos um recurso de lista de desejos. Você deseja que
os usuários possam mover itens do carrinho de compras para a lista de desejos? Essa também
seria uma nova história.”
Product Owner: “Sim, essas são mais duas histórias que queremos fazer, com certeza. Vou
anotá-los, podemos dimensioná-los também. Mas definitivamente poderíamos adiá-los até o próximo
lançamento, se for necessário.”
Testador: “Qual é a pior coisa que pode acontecer com esse recurso?”
Dono do produto: “Se eles não conseguirem descobrir como excluir, podem simplesmente
abandonar todo o carrinho de compras. Tem que ser muito fácil e óbvio.”
História PA-4
Outro programador com 8: “Concordo, acho que o esforço de teste é mais intenso do
que o esforço de codificação para esta história.”
DIMENSIONAMENTO
337
A história de Lisa
Nossa equipe começou a temer as reuniões de dimensionamento de histórias, porque entrávamos
em discussões muito longas sobre detalhes, e as reuniões sempre duravam muito além do horário
programado. Desde então, nosso ScrumMaster encontrou maneiras de nos manter no caminho certo.
Ela usa um cronômetro para cronometrar as discussões e as interrompe cada vez que a areia acaba
para ver se achamos que realmente precisamos de mais tempo para fazer perguntas. Nosso proprietário
do produto também aprendeu quais informações precisamos para fazer estimativas e geralmente
tem o que precisamos. Também aprendemos a trabalhar apenas em histórias que provavelmente
surgirão nas próximas iterações.
Com todas as nossas reuniões, pequenas tradições cresceram para torná-las mais divertidas. Alguém
sempre traz guloseimas para reuniões de planejamento de iteração. Nas reuniões em pé,
passamos uma combinação de lanterna e apontador laser, para que cada um de nós a segure
enquanto relatamos no que estamos trabalhando. Sempre terminamos as reuniões de avaliação de
histórias com uma competição para ver quem consegue jogar seu baralho de cartas de pôquer na
pequena banheira de plástico onde moram. A Figura 15-4 mostra essa atividade boba, mas divertida,
de encerramento de reunião. Lembre-se sempre do valor ágil da diversão e divirta-se em suas
reuniões.
—Lisa
PRIORIZANDO
O objetivo da reunião de planejamento de lançamento também é ter uma ideia do que
histórias que a equipe tentará terminar até a data de lançamento. Os clientes priorizam
as histórias, mas pode haver dependências, então faz sentido fazer certas
histórias primeiro, mesmo que não sejam a prioridade mais alta. É importante que o
a equipe entende a possibilidade de que nem todas as histórias sejam concluídas
até a data de lançamento. Uma das premissas básicas do ágil é entregar trabalho
software, por isso é importante ter as histórias de maior valor concluídas primeiro
para que o software que entregamos atenda às necessidades do cliente.
Algumas equipes que não fazem um planejamento de lançamento completo reservam tempo para analisar
as histórias e decidir quais duas ou três devem ser as primeiras. Dessa forma, eles agregam valor
comercial logo na primeira iteração do lançamento.
Vejamos um exemplo.
Ao fornecer essa fatia fina primeiro, os testadores têm algo para começar a testar
imediatamente. Os programadores também testaram suas etapas de design e integração de código e,
portanto, têm uma ideia sólida de como as coisas funcionarão quando o todo
recurso está completo.
Machine Translated by Google
PRIORIZANDO 339
Se for necessária nova tecnologia ou software, pode ser bom aprendê-los desenvolvendo uma história
simples e planeando histórias mais difíceis para iterações posteriores. Esta nova tecnologia pode ou não
afetar a automação de seus testes. Você
talvez precise de mais tempo para verificar o impacto. Se os recursos forem todos de marca
novo e a equipe precisa de mais tempo para entender como deve funcionar,
planeje fazer menos do que sua velocidade média na primeira iteração. Dessa maneira,
você terá mais tempo para escrever testes que orientarão corretamente o desenvolvimento.
Identifique os riscos e decida qual abordagem faz mais sentido em um teste
perspectiva, bem como uma perspectiva de desenvolvimento. Esta é uma das razões
é importante incluir toda a equipe nas sessões de planejamento.
Os testadores podem fazer lobby para obter um marcador ponta a ponta através do
código rapidamente, para que possam construir uma estrutura de automação e, em seguida, concretizá-la
Machine Translated by Google
Os clientes de nossa equipe listam suas histórias em ordem de prioridade e depois traçam uma
A história de Lisa
linha entre as histórias que devem ser feitas antes que o lançamento possa ocorrer e aquelas que
poderiam ser adiadas com segurança. Eles chamam as histórias menos importantes de “abaixo da linha”,
e essas histórias podem nunca ser concluídas.
Por exemplo, quando abordamos o tema para permitir que participantes de planos de aposentadoria
tomassem dinheiro emprestado de suas contas de aposentadoria, havia uma situação “abaixo da linha”
story para enviar e-mails a quaisquer participantes cujos empréstimos estejam mudando de status para
“inadimplência pendente” ou “inadimplência”. Quando o empréstimo está em situação de
“inadimplência”, o mutuário deve pagar impostos e multas sobre o saldo. O e-mail seria extremamente
útil para os mutuários, mas não era tão importante para o nosso negócio quanto o software para
solicitar, aprovar e distribuir empréstimos ou processar pagamentos de empréstimos.
A história do e-mail não foi incluída no lançamento. Isso só foi feito mais de dois anos depois, depois de
reclamações suficientes de pessoas que não sabiam que seus empréstimos iriam entrar em
inadimplência até que fosse tarde demais.
—Lisa
Janet trabalhou com uma equipe cujos clientes tinham a suposição equivocada de que todos os
recursos seriam incluídos no lançamento e que, quando
eles estavam priorizando, apenas escolhendo quais histórias seriam feitas primeiro.
Quando o resto da equipe percebeu o mal-entendido, eles também implementaram a ideia de
histórias acima e abaixo da linha. Ajudou a acompanhar o progresso
bem como tornar as histórias que foram colocadas abaixo da linha muito visíveis.
Prazos e cronogramas
Enquanto trabalhava neste livro, planejei um lançamento com minha equipe na WestJet. Tínhamos
A história de Janete
diversas histórias possíveis e trabalhamos com os clientes para decidir como seria o lançamento.
Tivemos uma mudança regulatória que foi um trabalho leve para os programadores, mas pesado para
os testadores. Precisava estar em produção até uma determinada data, então as outras histórias que
estávamos considerando para o lançamento levaram isso em consideração.
Decidimos criar uma pequena versão de manutenção com apenas um recurso importante, junto com
alguns bugs do backlog para que a liberação da mudança regulatória não fosse prejudicada.
Enquanto os testadores concluíam os testes, o restante da equipe iniciava algumas histórias de
elaboração para o próximo lançamento.
Um plano alternativo poderia ter sido que os programadores participassem e ajudassem a testar e
instalar mais recursos. No entanto, toda a equipe decidiu que esse plano funcionaria melhor com o
menor risco.
—Janet
Foco no valor
É muito fácil para uma equipe começar a discutir uma história complexa e perder de vista
qual valor os recursos realmente oferecem. O planejamento de lançamento é a hora de começar
pedindo exemplos e casos de uso de como os recursos serão usados e o que
valor que eles fornecerão. Desenhar fluxogramas ou exemplos de cálculos no quadro branco
pode ajudar a identificar a funcionalidade principal.
Nosso proprietário do produto escreveu uma história para fornecer um aviso caso um empregador
A história de Lisa
anule a data em que um participante se torna elegível para contribuir para uma conta de
aposentadoria depois que o participante já tiver feito contribuições.
Um dos programadores sugeriu fornecer um relatório dos participantes que atendiam aos critérios
para que os administradores do plano pudessem simplesmente ligar para os empregadores que poderiam
Machine Translated by Google
preciso fazer correções. A história do relatório era muito menor que a história de advertência, cabia
facilmente no comunicado e era aceitável para o cliente.
—Lisa
Um de nossos trabalhos como testadores é manter o panorama geral em mente. O testador ágil
Conversamos sobre
pensa em como cada história pode afetar o sistema como um todo, ou outros sistemas com os quais o
os “efeitos em cascata”
no Capítulo 8, “Testes nosso tenha que trabalhar. Por exemplo, se o armazém de brinquedos fizer um
voltados para mudança em seu software de inventário, e o novo código tem um bug que exagera
negócios que apoiam
o número de itens em estoque, o site pode vender mais da nova boneca
a equipe”.
do que os disponíveis, decepcionando milhares de crianças e seus pais no Natal. Quando o risco é alto,
listar as áreas do sistema que podem ser
afetado por um tema ou grupo de histórias pode ser um exercício válido, mesmo
durante o planejamento da versão.
A Figura 15-5 mostra um diagrama simplificado de um novo sistema que abrange muitos
partes do sistema existente. Diferentes ferramentas podem ser necessárias para testar o
integrações.
Testadores que trabalharam com alguns dos outros sistemas ou entendem o que
os testes precisam acontecer nesses sistemas podem oferecer informações valiosas sobre o
impacto de uma nova história. Freqüentemente, as histórias precisarão ser adiadas até um lançamento
futuro se o impacto não tiver sido explorado. Este é um bom momento para relembrar lançamentos
anteriores que não terminaram tão bem.
Envolvimento de terceiros
abc
Sistema
Perfis
(NS Ferramenta 1)
Padrão
SEIVA
Relatórios
A sobrecarga
(NS Ferramenta 2)
Legado Gás
Sistema Sistema
Novo
Sistema
Rede
seguro médico obrigatório
Relatórios
Combustível Conversão
Sistema (NS Ferramenta 3)
Se você precisar coordenar com outras pessoas, incluindo possíveis novos usuários do
sistema, é melhor começar cedo.
A equipe de Lisa escreveu diversas interfaces para permitir que os usuários carreguem dados
em seus sistemas. Em cada caso, eles tiveram que entregar o formato de arquivo proposto
aos usuários com antecedência para ter certeza de que funcionaria para eles. Outros
projetos envolviam o envio de dados a parceiros ou fornecedores. Eles exigiram planejamento
extra para organizar testes com seus sistemas de teste e obter feedback sobre se os dados
eram válidos e formatados corretamente.
Se você estiver usando um produto de terceiros como parte de sua solução, poderá presumir
que ele foi testado, mas isso pode ser uma suposição errada. Você precisará reservar mais
tempo para testar seu aplicativo em conjunto com o software do fornecedor. Se houver um
problema no software da outra empresa, poderá levar muito tempo para ser resolvido. A
equipe de Lisa usa software de terceiros para tarefas críticas, como criação de documentos.
Se um tema incluir modificação ou criação de novos documentos, eles planejam tempo extra
para atualizar o software, se necessário, e tempo extra
Machine Translated by Google
tempo para testes caso sejam necessárias correções. Se possível, traga o terceiro
software no projeto antecipadamente e iniciar os testes de ponta a ponta. Quanto mais você
puder trabalhar com a interface, melhor para você.
Outro software de terceiros que muitas vezes esquecemos até que seja tarde demais é o nosso
próprios ambientes de teste. Às vezes, uma equipe incorpora um novo código que
aproveita os novos recursos no idioma escolhido. Por exemplo, se
membros da equipe estão usando AJAX ou JavaScript, eles podem precisar atualizar o
kit de desenvolvimento de software que eles estão usando. Isso significa que uma equipe terá que
atualize também seu ambiente de tempo de execução de produção, portanto, leve isso em
consideração e teste o quanto antes.
Clientes ou parceiros podem ter preocupações sobre um lançamento que não está dentro do seu
escopo da própria equipe. A equipe de Lisa uma vez foi impedida no último minuto
de lançar um novo recurso porque um parceiro não teve tempo de aprovar o
alteração com seus assessores jurídicos. Os programadores tiveram que criar rapidamente um
maneira de desativar a funcionalidade sem exigir testes adicionais extensivos. Curiosamente, os
parceiros que não usam o desenvolvimento ágil às vezes
têm dificuldade em cumprir seus próprios prazos. Eles podem estar despreparados quando
sua equipe cumpre o prazo.
A história de Janete Trabalhei em um projeto para implementar um recurso que exigia um novo hardware
para digitalizar um novo código de barras 2D. A equipe decidiu implementar em etapas
porque não se sabia quando os scanners estariam disponíveis para testes completos,
mas o cliente queria o código pronto para quando os scanners chegassem.
A fase inicial exigiu muita programação porque havia muita pesquisa a ser feita. Depois
de determinarem como implementariam o recurso, a história foi criada para adicioná-lo
ao código. No entanto, sabíamos que não poderíamos testá-lo completamente até que
os scanners estivessem disponíveis. O código estava pronto para teste, mas em vez de
voltar atrás, só precisávamos nos preocupar em testar se o recurso poderia ser
desativado para o lançamento. A próxima versão exigiria mais testes, mas apenas se
os scanners estivessem disponíveis. O teste da história foi mantido no backlog do
produto para que não nos esquecêssemos de fazê-lo.
—Janet
PLANEJAMENTO DE TESTE
ou tema. Capítulo 8, Testes voltados para negócios que apoiam a equipe, mencionamos um
dos perigos dos testes ágeis: “esquecer o panorama geral”. O Planejamento de Teste
ajudá-lo com esse problema.
Onde começar
Durante o planejamento do lançamento, é útil conhecer as condições comerciais de satisfação para cada
história ou caso de teste de aceitação do usuário de alto nível. Quando histórias
precisam de esclarecimentos, os testadores ágeis pedem exemplos. Nesta fase, serão apresentados exemplos
ser de alto nível, abrangendo apenas o básico, mas o suficiente para poder dimensionar e priorizar a história.
Desenhar fluxogramas ou escrever cálculos no quadro branco e discuti-los nos ajuda a identificar problemas
de teste específicos do projeto.
À medida que tivermos uma noção de quais histórias provavelmente serão incluídas no lançamento,
pode começar a pensar sobre o escopo dos testes. Quais suposições
foram feitas que possam afetar os testes? O uso de software de terceiros, como o
exemplo de uso da API de cálculo de frete de uma empresa de transporte, afeta o teste
planejamento. Há algum risco incomum nesta versão que afetará os testes?
Se tivermos histórias para implementar trabalhos em lote e nunca tivemos nenhum trabalho em lote
processamento no sistema antes, provavelmente existem novas estruturas que impactam os testes.
Precisamos reservar tempo para aprendê-los.
Se, como nós, você passou algum tempo trabalhando em um ambiente tradicional em cascata, você
Consulte o Capítulo 5,
pode ter perdido tempo escrevendo planos de teste volumosos que ninguém leu
“Transição
Processos Típicos,” e ninguém se preocupou em manter. No desenvolvimento ágil, queremos que nosso teste
para mais sobre planos para atender às nossas necessidades. Seu cliente pode exigir um plano de teste para cada
planos de teste e liberação por motivos de conformidade. Mesmo que não seja uma entrega obrigatória, pode ser
estratégias de teste.
útil. Mantenha-o conciso e leve. Só precisa servir aos seus propósitos
durante este lançamento. Resolva os problemas de teste específicos desta versão
ou projeto. Inclua sua análise de risco e identifique suposições. Descreva o
fatores críticos de sucesso que seu cliente identificou. Pensar sobre o que
as pessoas precisam saber em relação aos testes e remover qualquer coisa estranha.
Mesmo que você não crie um plano de teste formal, certifique-se de anotar todos
esses diferentes fatores de teste envolvidos no lançamento. Você vai querer mantê-los
em mente durante cada sessão de planejamento de iteração. O maior benefício no teste
o planejamento é o próprio planejamento. Ele permite que você considere e resolva problemas
como requisitos de dados de teste, infraestrutura ou até mesmo quais resultados de teste são
necessários. O planejamento de testes é uma estratégia de mitigação de riscos. Vamos considerar alguns destes
problemas.
Tipos de teste
Na Parte III, cobrimos os quatro quadrantes do teste e falamos sobre todos
os diferentes tipos de testes que você pode fazer durante seu projeto. O planejamento da versão é um
bom momento para considerar essas diferentes necessidades. Você precisa planejar
trazer uma ferramenta de teste de carga ou será necessário construir algum tipo de equipamento de
teste especializado?
Pode ser que o seu próximo lançamento seja apenas uma extensão do anterior, e você
continuará criando seus exemplos, automatizando seus testes de história e
fazendo o resto dos testes como você está fazendo. Você é um dos sortudos
uns. Para aqueles que estão iniciando um novo projeto sem nenhum
processos em vigor, agora é a hora de considerar quais testes você precisará. Nós
não significa que você tenha que decidir como testar cada história, mas observe o panorama geral e
pense nos quadrantes. Você precisará planejar um UAT especial,
ou as demonstrações de iteração serão suficientes? É importante levantar essas questões
cedo para que a equipe possa planejá-los.
A infraestrutura
Enquanto você planeja o teste, você precisa considerar sua infraestrutura. Infraestrutura pode significar
sua configuração de integração contínua, teste
ambientes e banco de dados de teste. Pode significar como você promove suas construções
Machine Translated by Google
para seus ambientes de teste. Pode significar seu laboratório de testes, se você tiver um, ou
ter um servidor separado para executar todos os seus testes de automação. Estes são geralmente
peças de infraestrutura que precisam de algum tempo para serem implementadas. Isto é o
hora de fazer um plano.
A história de Lisa
Alguns tipos de testes podem exigir esforço extra. Minha equipe tinha uma ferramenta para fazer
testes de desempenho e alguns scripts, mas faltava um ambiente de estilo de produção onde
pudéssemos controlar todas as variáveis que poderiam afetar o desempenho. Por exemplo, o
banco de dados de teste foi compartilhado por testadores, programadores e dois processos de
construção. Um desempenho mais lento pode simplesmente significar que alguém estava
executando testes com uso intensivo de banco de dados. Usamos nosso ambiente de teste para
obter uma linha de base, mas faltavam alguns componentes de produção. Estabelecemos uma
meta de seis meses para adquirir hardware e software para um ambiente de teste adequado e
configurá-lo. Escrevemos um ou dois cartões de tarefas a cada iteração para estabelecer o ambiente passo a p
—Lisa
Ambientes de teste
Ao observarmos os tipos de recursos na próxima versão, poderemos ver a necessidade
para um ambiente de teste totalmente novo. Pense em ambientes de teste especializados
você também pode precisar. Você precisará de mais ferramentas? Você precisa expandir seu
laboratório de testes para que você possa testar com diferentes navegadores e sistemas operacionais?
Este é o momento de pensar em todas as considerações de teste.
Se você estiver planejando seu primeiro lançamento, os ambientes de teste são uma consideração
importante. Você pode precisar de uma história ou iteração apenas para configurar a infraestrutura que deseja
precisar. Iniciamos mais de um projeto onde o único lugar onde pudemos testar
foi o ambiente de desenvolvimento. Descobrimos que isso não funciona muito bem,
porque o ambiente nunca é estável o suficiente para testes eficazes.
Assim como os programadores têm seus próprios sandboxes para trabalhar e testar, isso funciona
bem se cada testador tiver a mesma disponibilidade e controle. Nós reconhecemos que
nem todos os aplicativos se prestam a isso, mas pelo menos você precisa
saiba qual compilação você está testando. Você também precisa de dados de teste que outros não
vá até lá com seus testes. Se você não tiver um sandbox de teste abaixo
seu próprio controle, reserve um tempo para planejar o que você precisa estabelecer para o seu teste
ambientes. Faça um brainstorming com sua equipe sobre como você pode obter o
Machine Translated by Google
hardware e software necessários. Pode levar algum tempo, então desenvolva um Plano B para
realizar algo enquanto espera pela infraestrutura necessária.
Se você estiver trabalhando em um sistema grande, talvez seja necessário entrar na fila junto com
outras equipes para obter tempo em um ambiente de teste ou preparação que inclui todos os
os vários softwares com os quais o seu deve funcionar. Este ambiente de teste deve imitar seu sistema de
produção tanto quanto possível. Se
Se sua organização não tiver alguém responsável pela criação de ambientes, sua equipe poderá precisar de
funções extras dedicadas à obtenção dos ambientes de teste necessários. Essas funções podem envolver
trabalhar com outras equipes como
bem. O planejamento da versão é o momento de considerar todos esses requisitos de infraestrutura de testes.
Dados de teste
O planejamento do lançamento ou do tema também é um bom momento para pensar sobre quais dados de teste
você pode precisar durante o projeto.
Usar dados de teste que se assemelhem muito aos dados reais geralmente é uma boa prática.
Planeje os dados que você precisa. Tivemos a oportunidade, em diversas organizações, de usar uma cópia
dos dados de produção. Dados reais fornecem uma boa base para
diferentes cenários para testes exploratórios. Os dados de produção podem precisar ser
“limpo” antes de ser usado para testes, a fim de remover qualquer informação sensível, como identificação
ou números de contas bancárias. Os dados precisam
ser alterado para ocultar os valores originais, mas permanecer válido para que não
violar as restrições do banco de dados. Porque leva tempo para que os especialistas em banco de dados
portar dados de produção para um ambiente de teste, certifique-se de que eles estejam incluídos em seu
planejamento.
Em uma das organizações com as quais trabalhei, usamos dois esquemas diferentes de dados
A história de Janete
de teste de linha de base. Para nossos ambientes de teste individuais, usamos acessórios Fit
para carregar dados predefinidos. Tentamos tornar esses dados o mais próximo possível da
produção, mas também os semeamos com alguns dados de teste muito específicos.
Cada vez que verificamos uma nova versão do código, conseguimos recarregar um conjunto
básico de dados. Dessa forma, também testamos o esquema do banco de dados para ver
se algo havia mudado.
Para nosso ambiente de teste mais estável, onde queríamos que os dados persistissem, usamos
os scripts de migração de dados que os programadores desenvolveram à medida que faziam
alterações no banco de dados. Esses scripts de migração foram eventualmente usados para o
corte inicial da produção e então tínhamos certeza de que estavam corretos.
—Janet
Machine Translated by Google
Conte com o suporte de seus clientes para obter dados de teste significativos. Se vocês são
trabalhando em uma história que envolve o envio de um arquivo para um fornecedor terceirizado, seu
especialista em negócios pode descobrir quais dados o fornecedor espera no arquivo. Lisa
A equipe desenvolveu recursos para permitir que corretores de planos de aposentadoria oferecessem
carteiras de fundos mútuos aos seus clientes. Eles pediram ao proprietário do produto que fornecesse
amostras de carteiras, incluindo nome, descrição e conjunto de fundos para
cada. Isso os ajudou a testar com dados realistas.
Os dados de teste tendem a ficar obsoletos e desatualizados com o tempo. Dados mais antigos, mesmo que
veio da produção, pode não refletir mais com precisão a produção atual
dados. Um teste “aprovado” usando dados que não são mais válidos dá uma sensação enganosa
de confiança. Revise continuamente suas necessidades de dados de teste. Atualizar dados ou criar
usando uma nova abordagem, conforme necessário.
Os requisitos de dados de teste variam de acordo com o tipo de teste. Testes de regressão
Capítulo 14, “Um
geralmente podem criar seus próprios dados ou executá-los em um pequeno conjunto representacional
Estratégia Ágil de
Automação de
de dados que podem ser atualizados rapidamente para um estado conhecido. Teste exploratório
Testes”, explora pode precisar de uma réplica completa dos dados do tipo de produção.
diferentes abordagens
para obter dados de teste
Resultado dos testes
Equipes diferentes têm requisitos diferentes para relatórios de resultados de testes. Pensar
sobre como você relatará os resultados dos testes nesta fase do jogo para que
você pode fazer isso de forma eficaz quando chegar a hora de fazer o relatório propriamente dito.
Sua organização pode ter requisitos de conformidade de auditoria, ou talvez seu
o cliente só quer saber como você testou. Entenda suas necessidades para que
você pode escolher a abordagem certa para sua equipe.
Existem muitas maneiras de relatar resultados de testes. Existem ferramentas de fornecedores que irão
registrar resultados automatizados e manuais. Sua equipe pode encontrar uma maneira de manter os
resultados de ferramentas como o Fit, ou você pode simplesmente optar por manter um grande
gráfico manual visível.
Uma ferramenta como esta pode ser muito simples ou pode incluir complexidade adicional, como
como a capacidade de categorizar seus testes. O importante são os resultados dos testes. Se seus testes
automatizados registrarem o resultado de aprovação ou reprovação junto com o erro, você terá algum
histórico para ajudar a determinar a fragilidade do teste.
Machine Translated by Google
Sua equipe pode configurar seu processo de construção automatizado para fornecer resultados de testes
de cada build, por e-mail ou por um utilitário de feedback ou interface web que a equipe
os membros podem ver online. Os resultados ao longo do tempo podem ser resumidos em uma variedade de
formatos que tornam o progresso visível. Uma das equipes de Lisa produziu um gráfico diário
de testes escritos, executados e aprovados que foram afixados na área de trabalho da equipe. Outro produziu
um calendário diário com o número de testes unitários aprovados em cada
dia. Mesmo resultados visuais simples são eficazes.
Falaremos sobre algumas das métricas que você pode usar posteriormente neste capítulo.
Já falamos sobre por que testar o plano e o que você deve considerar. Agora nós
fale sobre algumas das alternativas aos planos de testes pesados aos quais você pode estar acostumado.
Seja qual for o tipo de plano de teste que sua organização usa, personalize-o. Use-o em um
maneira que beneficie sua equipe e garanta que você atenda às necessidades do cliente.
Como acontece com qualquer documento produzido pela sua equipe, ele deve cumprir um propósito.
Um plano de teste não deve cobrir todas as eventualidades ou todas as histórias, e não é
destinado a abordar a rastreabilidade. Deve ser uma ferramenta para ajudá-lo a pensar sobre os riscos de
teste para o seu projeto. Não deve substituir a conversa cara a cara com
seu cliente ou o resto de sua equipe.
Janet usa o planejamento de lançamento para trabalhar com os testadores e clientes para desenvolver
uma matriz de teste de alto nível. Uma matriz de teste é uma maneira simples de comunicar o grande
imagem sobre qual funcionalidade você deseja testar. Isso dá à sua equipe um
visão geral rápida dos testes necessários.
Introdução
O Plano de Teste pretende ser uma linha de base para identificar o que é considerado dentro e fora do escopo do
teste e quais são os riscos e suposições.
Recursos
% do testador comprometido
Janete 100%
Lisa 50%
Na mira
Os testes incluem todas as novas funcionalidades, funcionalidades identificadas de conjunto de regressão de alto
risco, UAT e testes de carga. A localização faz parte deste projeto. Testes de regressão manuais
considerados de baixa prioridade serão executados se o tempo permitir.
Fora do escopo
Os testes reais de tradução são terceirizados e, portanto, não fazem parte deste plano de testes.
Nova funcionalidade
A seguinte funcionalidade está sendo alterada nesta versão.
Premissas
A tradução foi testada antes de ser entregue à equipe do projeto.
Riscos
Os seguintes riscos foram identificados e as ações apropriadas identificadas para mitigar o seu impacto no
projeto. O impacto (ou gravidade) do risco baseia-se em como o projeto seria afetado se o risco fosse acionado.
Também pode ser um mecanismo para rastrear a cobertura e pode ser tão detalhado quanto você
como. Uma matriz de teste de alto nível pode ser usada pela equipe para mostrar ao cliente
equipe ou gestão o que já foi testado e o que resta. Um mais
uma matriz de teste detalhada pode ser usada pela equipe para mostrar o que está planejado
para teste e acompanhar o progresso dos testes. Após a matriz ter sido criada, ela
torna-se fácil preencher os quadrados quando o teste é feito. Mantenha simples. Como gostamos
de gráficos grandes e visíveis e fáceis de ler, recomendamos cores
isso significa algo para sua equipe. Por exemplo, verde (G) significa que o teste está
feito e a equipe está feliz com isso, enquanto amarelo (Y) pode significar que alguns testes foram
feitos, mas mais testes exploratórios serão necessários se houver tempo. Vermelho
(R) significa que algo está quebrado. Um quadrado branco significa que não foi testado
ainda, e um quadrado cinza (não aplicável) significa que não precisa ser testado.
Vejamos um exemplo. Queremos lançar um pequeno comunicado que calcula os custos de envio.
Na Figura 15-7, diferentes funcionalidades são
representadas em um eixo e as propriedades da remessa são representadas em
o outro. As células individuais são codificadas por cores para mostrar quais casos são testados e
que precisam de mais atenção. Todas as células para “<= 2 lbs” estão concluídas, a parte superior
três células para> 4 libras são feitas, mas precisam de mais testes exploratórios, e o
A célula “Ship to Alaska”/“>4 lbs” indica um possível problema.
Condições de teste
Funcionalidade
A história de Janete
Tive um efeito colateral inesperado ao usar uma matriz de teste em um projeto em que estava.
Os clientes e testadores montaram a matriz de teste e pensaram em todas as funcionalidades
afetadas para o projeto e nas condições de teste de alto nível que precisariam. Como esperado,
o ato de planejar trouxe à tona muitas questões que teriam sido esquecidas até mais tarde.
Olhando para trás, eu não deveria ter ficado surpreso, mas nunca tive essa experiência com os
programadores antes.
—Janet
Uma matriz de teste é uma ferramenta muito poderosa e pode ser usada para ajudar a
resolver problemas de rastreabilidade se sua equipe tiver esses problemas. Pense no que faz sentido
para sua equipe e adapte-o para sua equipe e para o que faz sentido para você.
Planilha de teste
Janet também viu um formato de planilha ser usado com algum sucesso. Por exemplo, na
WestJet, a primeira guia de uma pasta de trabalho era uma lista de alto nível de funcionalidades
que existiam no aplicativo. Para cada linha, a equipe determinou se o
projeto afetou essa parte da funcionalidade. Em caso afirmativo, deram uma classificação do
impacto esperado. Após a determinação do impacto das mudanças, as decisões sobre
ambientes de teste, dados de teste ou UAT poderiam então ser tomadas.
As guias eram usadas para riscos e suposições, mas podiam ser usadas para qualquer coisa
sua equipe pode precisar. Um formato flexível, como uma planilha, significa que você pode
adapte-o para funcionar para você.
Essas informações podem ser usadas de diversas maneiras. Pode ser usado para
determinar onde concentrar seus esforços de testes exploratórios, ou talvez
ajude a criar uma matriz de teste de alto nível para garantir que você aborde todas as áreas
durante seus testes.
Um quadro branco
e funcionou muito bem. Se um risco realmente se tornasse um problema, o resultado era documentado
e riscado. Foi fácil adicionar novos riscos e estratégias de mitigação, e a lista ficou visível para toda a
equipe. Isso também pode ser feito em uma página wiki.
Não podemos enfatizar o suficiente que você precisa conhecer sua equipe e suas necessidades.
Às vezes, pode ser necessário que você apresente mais informações aos seus clientes, como uma
lista de casos de teste. Se sua equipe tiver uma ferramenta da qual você possa extrair uma lista de
nomes de casos de teste, você poderá fornecer essa lista facilmente para qualquer pessoa que
precise dela. Isso apresentaria um plano de teste detalhado do tipo tradicional, mas não estaria
disponível até que os testes fossem realmente escritos. Não recomendamos perder tempo com isto
porque não vemos valor acrescentado, mas por vezes esta lista pode ser necessária para avaliação
de riscos ou auditabilidade.
Se sua equipe está apenas começando com o desenvolvimento ágil, certifique-se de ter a infraestrutura
necessária para suas primeiras iterações. Você pode mudar a maneira como acompanha o progresso
à medida que avança, e suas retrospectivas o ajudarão a trazer essas questões à luz. Se você estiver
tendo problemas para concluir o trabalho planejado para cada iteração, talvez precise de gráficos ou
recursos visuais mais visíveis para ajudá-lo a avaliar o progresso e fazer ajustes no meio da iteração.
Seus clientes têm alguma maneira de saber como a iteração está progredindo e quais histórias foram
concluídas? Reserve um tempo antes de cada iteração para avaliar se você está recebendo o tipo
certo de feedback para acompanhar os testes.
teste Todas as equipes ágeis eficazes que conhecemos seguem esta regra simples: “Nenhuma
história é concluída até que seja testada”. Esta regra pode ser expandida para dizer que não apenas
a história deve ser testada, o código deve ser verificado, deve ter testes automatizados que são
executados por um processo de construção contínuo, deve ser documentado ou quaisquer que sejam
os critérios de “prontidão” da sua equipe são. A qualquer momento durante uma iteração, você precisa
ser capaz de avaliar rapidamente quanto trabalho de teste resta em cada história e quais histórias
estão “concluídas”. Os quadros de histórias ou tarefas são ideais para essa finalidade, especialmente
se usarem codificação por cores para denotar tarefas de teste versus desenvolvimento e outros tipos
de tarefas. Quadros de cortiça, chapas de aço com ímãs, post-its do tamanho de pôsteres ou quadros
brancos funcionam bem. Dê a cada história sua própria linha e ordene-as por prioridade. Tenha
colunas para “fazer”, “trabalho em andamento”, “verificar” e “concluído”.
Machine Translated by Google
A história de Janete Comecei com membros da equipe que já praticavam Agile há alguns meses, com apenas alguns
programadores e um testador. Eles estavam usando o XPlanner para rastrear suas tarefas e histórias,
e estava funcionando bem para eles. Ao mesmo tempo em que entrei, alguns novos programadores
foram adicionados e os stand-ups tornaram-se menos eficazes; a equipe não estava completando as
histórias planejadas. Sugeri um storyboard e, embora eles estivessem céticos quanto à manutenção
de dois conjuntos de “tarefas”, disseram que tentariam.
Pegamos uma parede aberta e usamos adesivos para criar nosso storyboard. Começamos a fazer stand-
ups em frente ao storyboard e nossa discussão tornou-se mais específica. Forneceu uma boa
maneira visível de saber quando as tarefas foram concluídas e o que faltava fazer. Depois de alguns
meses, a equipe cresceu novamente e tivemos que transferir o storyboard para um escritório. Também
movemos nossos stand-ups e nossos gráficos de resultados de testes para lá. No entanto, a visibilidade
constante foi perdida e os programadores e testadores pararam de mover as suas tarefas.
Tivemos que reavaliar o que queríamos fazer. Um tamanho único não serve para todas as equipes.
Certifique-se de planejar o que é certo para sua equipe.
—Janet
Algumas equipes usam fichas de cores diferentes para os diferentes tipos de tarefas:
verde para teste, branco para codificação, amarelo e vermelho para bugs. Outras equipes usam
um cartão por tarefa de desenvolvimento e adicione adesivos de cores diferentes para mostrar que
o teste está em andamento ou mostra que há bugs para resolver. Utilize qualquer método
que permite ver rapidamente quantas histórias estão “concluídas”, com todas as tarefas de codificação,
banco de dados, testes e outras tarefas concluídas. À medida que a iteração avança,
é fácil ver se a equipe está no caminho certo ou se você precisa divulgar uma história ou ter
os programadores contribuem nas tarefas de teste.
A história de Janete Nosso storyboard (mostrado na Figura 15-8) não era muito grande e não tínhamos muito espaço na
parede para expandir e ter o quadro de tarefas do tipo coluna normal. Em vez disso, decidimos usar
adesivos para designar o status.
Os cartões brancos, como os mostrados na primeira linha da Figura 15-8, eram tarefas regulares,
os cartões azuis designavam histórias técnicas, como refatoração ou picos, e os cartões rosa,
mostrados no lado direito do tabuleiro como a cor mais escura. , eram bugs que precisavam ser
resolvidos. É fácil ver que esta foto foi tirada no início de uma iteração porque não há círculos coloridos
em cada cartão. No canto superior direito você pode ver a legenda. Adesivos azuis significam que
foi codificado, verdes indicam concluído (testado) e vermelhos significam que a tarefa foi considerada
não concluída ou um bug foi rejeitado como não corrigido. À medida que uma tarefa ou história era
concluída (ou seja, o adesivo verde), ela era movida para a direita do quadro.
—Janet
Machine Translated by Google
A história de Lisa
Por mais de quatro anos, nosso storyboard consistia em duas folhas de metal pintadas com as cores
da empresa, usando fichas codificadas por cores fixadas ao quadro com ímãs. A Figura 15-9 mostra
uma imagem disso no início de uma iteração. Nossos cartões de tarefas também foram codificados por
cores: branco para tarefas de desenvolvimento, verde para tarefas de codificação, amarelo e vermelho
para bugs e listrado para cartões não planejados originalmente na iteração.
O quadro foi tão eficaz em indicar nosso progresso que eventualmente paramos de nos preocupar com
um gráfico de esgotamento de tarefas. Isso nos permitiu focar em completar uma história de cada vez.
Também o usamos para postar outros grandes gráficos visíveis, como um grande sinal vermelho
mostrando que a construção falhou. Adorámos a nossa prancha.
Então, um dos membros da nossa equipe mudou-se para o exterior. Tentamos usar uma planilha
junto com nosso storyboard físico, mas nosso colega de equipe remoto achou a planilha muito difícil de
usar. Tentamos vários pacotes de software projetados para equipes Scrum, mas eles eram tão
diferentes do nosso storyboard real que não conseguimos nos adaptar ao seu uso. Finalmente
encontramos um produto (Mingle) que se parecia e funcionava o suficiente com nossa placa física
para que todos, incluindo nossa pessoa remota, pudessem usá-lo. Pintamos nosso antigo storyboard de
branco e agora podemos projetá-lo na parede durante reuniões em pé.
—Lisa
Machine Translated by Google
As equipes distribuídas precisam de algum tipo de storyboard online. Pode ser uma planilha ou um
software especializado que imite um storyboard físico como o Mingle faz.
Anteriormente, falamos sobre como planejar como monitorar os resultados dos testes. Agora
queremos falar sobre como comunicá-los de forma eficaz. Os resultados dos testes são uma das
formas mais importantes de medir o progresso, ver se novos testes estão sendo escritos e
executados para cada história e se todos estão sendo aprovados. Algumas equipes publicam
grandes gráficos visíveis do número de testes escritos, executados e aprovados. Outros têm seu
processo de construção por e-mail com resultados de testes automatizados para membros da
equipe e partes interessadas. Algumas ferramentas de integração contínua fornecem ferramentas
GUI para monitorar compilações e resultados de compilações.
Ouvimos falar de equipes que possuem um projetor conectado à máquina que executa testes
FitNesse em uma construção contínua e exibe os resultados do teste o tempo todo.
Os resultados dos testes são uma representação concreta do progresso da equipe. Se o número de
Machine Translated by Google
os testes não aumentam todos os dias ou a cada iteração, o que pode indicar um problema.
Ou a equipe não está escrevendo testes (supondo que estejam desenvolvendo os testes primeiro)
ou não estão concluindo muito código. Claro, é possível que eles estejam copiando o código
antigo e os testes que o acompanham. É importante analisar por que as tendências estão indo na
direção errada. A próxima seção dá algumas ideias sobre os tipos de métricas que você pode
querer coletar e exibir.
Independentemente de como sua equipe decidir que deseja comunicar seu progresso, pense
nisso com antecedência e todos obterão valor com isso.
Métricas de lançamento
Incluímos esta seção aqui porque é importante entender quais métricas você deseja coletar desde
o início de um lançamento. Essas métricas devem fornecer feedback contínuo sobre como o
desenvolvimento está progredindo, para que você possa responder a eventos inesperados e
alterar seu processo conforme necessário. Lembre-se de que você precisa entender qual problema
está tentando resolver com suas métricas para poder rastrear as corretas. As métricas de que
falamos aqui são apenas alguns exemplos que você pode optar por acompanhar.
Muitas equipes ágeis monitoram o número de testes em cada nível: unitários, funcionais, testes
de história, GUI, carga e assim por diante. A tendência é mais importante que o número. Temos
uma sensação calorosa ao ver o número de testes aumentar. No entanto, um número sem
contexto é apenas um número. Por exemplo, se uma equipe diz que tem 1.000 testes, o que isso
significa? 1.000 testes fornecem 10% ou 90% de cobertura?
O que acontece quando o código que contém testes é removido?
Após a aprovação de um teste, ele precisa permanecer “verde” enquanto a funcionalidade estiver
presente no código. Gráficos do número de testes aprovados e reprovados ao longo do tempo
mostram se há algum problema com falhas de regressão e também mostram o crescimento da
base de código. Novamente, é a tendência que é importante. Fique atento a anomalias.
Esses tipos de medições podem ser relatados de forma simples e ainda assim serem eficazes.
Machine Translated by Google
Minha equipe envia por e-mail um calendário codificado por cores todos os dias mostrando se o “completo
A história de Lisa
build” com o conjunto completo de testes de regressão aprovados todos os dias (veja a Figura 15-10).
Dois dias “vermelhos” consecutivos (a cor mais escura) são motivo de preocupação e percebidos tanto
pela gestão quanto pela equipe de desenvolvimento. Ver os resultados visuais dos testes ajuda a
organização a se unir para corrigir os testes com falha ou quaisquer outros problemas que façam com que
a compilação não seja executada, como problemas de hardware ou de banco de dados.
—Lisa
Se você for contar testes, certifique-se de relatar as informações para que possam ser
usado. Construir e-mails ou UIs de status de construção pode comunicar o número de testes
executado, aprovado e reprovado em vários níveis. A equipe do cliente pode ficar satisfeita
Machine Translated by Google
Quaisquer que sejam as métricas que você escolher coletar, certifique-se de que a equipe as aceite.
Iniciei um novo contrato com uma equipe que já praticava Agile há alguns anos e eles desenvolveram
A história de Janete
um grande número de testes funcionais automatizados. Comecei a acompanhar o número de testes
aprovados a cada dia. A equipe não viu problema quando a tendência mostrou que cada vez menos
testes estavam sendo aprovados. Os testes unitários foram mantidos e estavam fazendo o que
deveriam fazer, então a equipe se sentiu confiante no lançamento. Parecia que isso acontecia a cada
lançamento, e a equipe passaria a última semana antes do lançamento para fazer todos os testes
passarem. Era caro manter os testes, mas a equipe não queria desacelerar para corrigi-los. Todo mundo
estava bem com isso, exceto eu.
Eu não via como consertar os testes naquela data tardia poderia garantir que os resultados corretos
esperados fossem capturados. Senti que corríamos o risco de obter falsos positivos.
No início do próximo ciclo de lançamento, fiz com que a equipe concordasse em tentar consertar os
testes quando eles quebrassem. Não demorou muito para que a equipe percebesse que não era tão
difícil consertar os testes assim que soubemos que eles estavam quebrados, e encontramos muitos
problemas no início que normalmente só eram detectados muito mais tarde. A equipe logo estabeleceu
a meta de ter 95% dos testes aprovados em todos os momentos.
Também percebemos como os testes eram frágeis. A equipe fez um esforço conjunto para
refatore alguns dos testes mais complexos e elimine os redundantes. Com o tempo, o número de
testes de alto nível foi reduzido, mas a qualidade e a cobertura aumentaram.
—Janet
Não fique tão envolvido com as medidas reais a ponto de não reconhecer
outros efeitos colaterais da tendência. Esteja aberto para ajustar o que você está medindo se houver
necessidade.
Cobertura de código
A cobertura de código é outra métrica tradicional. Quanto do nosso código é exercitado pelos nossos
testes? Existem excelentes ferramentas comerciais e de cobertura de código-fonte aberto disponíveis, e
elas podem ser integradas ao seu processo de construção para
que você saiba imediatamente se a cobertura aumentou ou diminuiu. Tal como acontece com a maioria
das métricas, a tendência é algo a ser observado. A Figura 15-11 mostra um exemplo de cobertura de código
relatório.
Machine Translated by Google
GHIDRAH
Resumo da cobertura geral
WHITNEY
Resumo da cobertura geral
total de pacotes: 46
total de arquivos executáveis: 655
aulas totais: 737
métodos totais: 8760
total de linhas executáveis: 80358
Figura 15-11 Exemplo de relatório de cobertura de código da equipe de Lisa. “Ghidrah” é a nova
arquitetura; “Whitney” é o sistema legado.
As Figuras 15-12 e 15-13 são dois exemplos de tendências que funcionam juntas.
A Figura 15-12 mostra uma tendência do número total de métodos em cada iteração. A Figura 15.12
mostra a cobertura do código correspondente. Esses exemplos mostram por que os gráficos
precisam ser vistos em contexto. Se você olhar apenas para o primeiro gráfico mostrando
o número de métodos, você obterá apenas metade da história. O número de métodos está a aumentar,
o que parece bom, mas a cobertura está, na verdade, a diminuir.
Não sabemos a razão da diminuição da cobertura, mas deveria ser uma
gatilho para perguntar à equipe: “Por quê?”
Lembre-se de que essas ferramentas só podem medir a cobertura do código que você
escrito. Se alguma funcionalidade for perdida, seu relatório de cobertura de código não será
Machine Translated by Google
trazer isso à luz. Você pode ter 80% de cobertura de código com seus testes, mas
você está perdendo 10% do código que deveria ter. Impulsionando o desenvolvimento com
testes ajudam a evitar esse problema, mas não valorizam mais as estatísticas de cobertura de código
do que merecem.
Uma abordagem TDD foi seguida para desenvolver um grande número de bons testes
unitários orientados para alcançar uma boa cobertura de código. Escrevemos muitos
testes de aceitação eficazes para verificar todas as funcionalidades complexas. Depois
disso, instrumentamos o código com uma ferramenta de cobertura de código e
atingimos uma cobertura de declaração de 95%.
O código que não pôde ser testado foi verificado pela inspeção, levando-os a declarar
100% de cobertura da declaração após dez sprints de quatro semanas.
Desta vez, quando fizemos os testes de aceitação, o resultado foi desastroso; 47% dos
testes de aceitação falharam e a cobertura das declarações caiu para 62%!
Alessandro conclui: “A lição aprendida com este exemplo é que a habilitação das opções
de otimização do compilador deve ser planejada no início do projeto. É um erro ativá-los nas
fases finais do projeto.”
Boas métricas requerem um bom planejamento. Esforço extra pode lhe dar mais
dados significativos. Os membros da equipe de Pierre Veragen usam uma linha de base de teste de interrupção
técnica para saber se sua métrica de cobertura de código é significativa. Eles introduzem
manualmente uma falha em cada método e então executam seus testes para garantir
os testes detectam o problema. Alguns testes apenas garantem que o código retorne algum
valor, qualquer valor. A equipe de Pierre garante que os testes retornem o valor correto . Em
dessa forma, eles podem determinar se a cobertura do teste é boa o suficiente.
Machine Translated by Google
A cobertura do código é apenas uma pequena parte do quebra-cabeça. Use-o como tal. Isso não diz
você quão bons são seus testes, mas apenas se um determinado pedaço de código foi executado durante
o teste. Ele não informa se diferentes caminhos através do aplicativo foram executados,
qualquer. Entenda sua aplicação e tente identificar suas áreas de maior risco,
e definir uma meta de cobertura que seja mais elevada para essas áreas do que para áreas de baixo risco.
Não se esqueça de incluir também seus testes funcionais no relatório de cobertura.
Métricas de Defeito
À medida que sua equipe define metas relacionadas a defeitos, use métricas apropriadas para medir
progresso em direção a esses objetivos. Existem tendências que você deseja monitorar
para toda a versão, e há aqueles que são específicos da iteração. Por exemplo, se você está tentando atingir
zero defeitos, você pode querer rastrear os problemas em aberto.
bugs no final de cada iteração, ou quantos bugs foram encontrados após o desenvolvimento, mas antes do
lançamento. A maioria de nós está interessada em saber quantos
defeitos foram relatados após o código estar em produção, o que é algo completamente diferente. Essas
questões serão informadas após o fato
quão bem sua equipe se saiu no último lançamento, mas não quão bem você está no
a versão atual. Eles podem lhe dar alguma indicação de quais processos
você precisa mudar para reduzir o número de defeitos. A equipe de Lisa está mais preocupada com os
defeitos de produção encontrados no “novo” código que foi reescrito
na nova arquitetura. Eles estão trabalhando duro para produzir esse novo código com
zero defeitos, então eles precisam saber se estão indo bem. Eles esperam que
bugs serão encontrados com bastante frequência no sistema legado, onde apenas a funcionalidade mais
crítica é coberta por testes automatizados de fumaça da GUI, e há poucos
unidade automatizada e testes por trás da GUI.
Conhecer a taxa de defeitos do código legado pode ser uma boa justificativa para refatorá-lo ou reescrevê-lo,
mas a principal prioridade da equipe é fazer um bom trabalho com o código legado.
novo código, então eles agrupam os bugs por código “novo” e “antigo” e se concentram no
“novos” erros.
Certifique-se de que seu banco de dados de bugs possa rastrear o que você deseja medir. Você pode
Mais informações sobre
precisa fazer algumas alterações no banco de dados e no seu processo para obter o
sistemas de rastreamento
de defeitos podem ser dados que você precisa. Por exemplo, se você quiser medir quantos defeitos foram
encontradas no Capítulo encontrado na produção após um lançamento, você deve ter certeza de que tem ambiente e versão como
5, “Transição de Processos
campos obrigatórios, ou certificar-se de que as pessoas que inserem
Tradicionais”.
bugs sempre os preenchem.
Como os sistemas de rastreamento de defeitos são frequentemente usados para outros fins além do rastreamento
erros, certifique-se de não confundir os números. Uma solicitação de atualização manual para
o banco de dados não reflete necessariamente um problema com o código existente. Usar
sua ferramenta de rastreamento de defeitos corretamente para garantir que suas métricas sejam significativas.
Machine Translated by Google
Avalie periodicamente as métricas que você está reportando e veja se elas ainda são relevantes.
A história de Lisa
A Figura 15-14 mostra dois relatórios de defeitos que a equipe de Lisa utilizou durante anos.
Quando fizemos a transição para o Agile pela primeira vez, os gerentes e outras pessoas
analisaram esses relatórios para ver o progresso resultante do novo processo. Quatro anos
depois, nosso ScrumMaster descobriu que ninguém mais lia esses relatórios, então paramos
de produzi-los. Naquela época, as taxas de novos defeitos haviam reduzido drasticamente e
ninguém realmente se importava com os defeitos antigos que ainda persistiam no código legado.
—Lisa
Figura 15-14 Exemplos de relatórios de defeitos usados (e não mais usados) pela equipe de Lisa
Machine Translated by Google
O planejamento de lançamento é um bom momento para avaliar o ROI das métricas que você
estava rastreando. Quanto esforço você está gastando para coletar e relatar os
Métricas? Eles dizem o que você precisa saber? O código que você libera
atende aos padrões de qualidade interna da sua equipe? A porcentagem de cobertura do código está
aumentando? A equipe está atingindo suas metas de redução do número de defeitos que chegam à
produção? Se não, houve um bom motivo?
As métricas são apenas uma peça do quebra-cabeça. Use seu lançamento, tema ou projeto
planejando reuniões para focar novamente na entrega de valor comercial quando o negócio
precisa disso. Reserve algum tempo para aprender sobre os recursos que você está prestes a desenvolver.
Não se preocupe em se comprometer com seus planos – a situação está fadada
mudar. Em vez disso, prepare-se para realizar as atividades certas e obter os resultados certos.
recursos a tempo de atender às prioridades dos clientes.
RESUMO
À medida que sua equipe elabora o plano para um novo tema ou lançamento, mantenha os principais
pontos deste capítulo em mente.
Ao dimensionar uma história, considere diferentes pontos de vista, incluindo valor comercial,
risco, implementação técnica e como o recurso será usado. Faça perguntas esclarecedoras,
mas não se prenda a detalhes.
Os testadores podem ajudar a identificar a “fatia fina” ou “caminho crítico” por meio de um
conjunto de recursos para ajudar a priorizar histórias. Agende histórias de alto risco com
antecedência se elas exigirem testes extras antecipadamente.
O tamanho do esforço de teste de uma história ajuda a determinar se essa história está no
escopo para lançamento.
Os testadores podem ajudar a equipe a pensar sobre como as novas histórias impactarão o
sistema como um todo.
Planeje tempo e recursos extras para testes quando os recursos puderem afetar sistemas ou
subsistemas desenvolvidos por equipes externas.
À medida que a equipe identifica o escopo do lançamento, avalie o escopo dos testes e
reserve tempo e recursos suficientes para isso.
Passe algum tempo durante o planejamento da versão para abordar questões de infraestrutura,
ambiente de teste e dados de teste.
Um plano de teste leve e ágil pode ajudar a garantir que todas as considerações de teste sejam
abordadas durante a vida do lançamento ou projeto.
Considere alternativas para planos de teste que possam ser mais apropriados para sua equipe;
matrizes de teste, planilhas ou até mesmo um quadro branco podem ser suficientes.
Machine Translated by Google
RESUMO 367
O planejamento formal de lançamento pode não ser apropriado para sua situação.
Na ausência de planejamento de lançamento, considere identificar e discutir pelo
menos as primeiras histórias que devem ser feitas primeiro.
Planeje quais métricas você deseja capturar durante a vida do lançamento;
pense sobre qual problema você está tentando resolver e capture apenas as
métricas que são significativas para sua equipe.
Machine Translated by Google
Capítulo 16
Benefícios
No desenvolvimento ágil, geralmente gostamos de realizar as tarefas “na hora certa”. Não
podemos ver além das curvas da estrada à frente, então nos concentramos nas atividades que
temos em mãos. Então, novamente, queremos começar a trabalhar quando iniciarmos cada nova iteração.
Isso pode exigir um pouco de preparação. Cozinhar é uma boa analogia aqui. Você decide que quer
fazer biscoitos porque alguém está vindo. Antes de começar, certifique-se de ter os ingredientes
certos. Do contrário, você compra o que precisa ou escolhe um tipo diferente para fazer.
Não exagere — se uma atividade de pré-iteração não economizar tempo durante a iteração
ou não ajudar você a fazer um trabalho melhor, não faça isso antes da iteração. Faça o que for
apropriado para sua equipe e continue experimentando. Talvez você faça algumas dessas
atividades após o início da iteração. Aqui estão algumas idéias para pensar que podem ajudá-lo
a “incorporar qualidade” ao seu produto.
SEJA PROATIVO
No Capítulo 2, “Dez princípios de um testador ágil”, explicamos como o ágil
os testadores precisam mudar sua mentalidade. Em vez de esperar que o trabalho chegue
nós, desenvolvemos uma atitude proativa onde nos levantamos e vamos procurar maneiras de
369
Machine Translated by Google
Com certeza não queremos gastar todo o nosso tempo em reuniões ou planejando histórias
que pode ser re-priorizado. No entanto, se pudermos fazer o nosso planejamento de iteração
ir mais rápido e reduzir o risco das histórias que estamos prestes a empreender, é
vale a pena fazer alguma pesquisa e brainstorming antes de iniciarmos a iteração.
Benefícios
O problema é que estamos tão ocupados durante cada curta iteração ágil que é
difícil encontrar tempo para conversar sobre as histórias da próxima iteração, muito menos para começar
escrever casos de teste. Se suas iterações sempre correrem bem, com histórias entregues
de forma incremental e com bastante tempo para testar, e o software entregue corresponde
expectativas do cliente, talvez você não precise de tempo para se preparar com antecedência.
Se sua equipe tiver problemas para terminar histórias ou acabar com grandes incompatibilidades entre
o comportamento real e desejado dos recursos, um pouco de planejamento antecipado pode ajudar.
economizar tempo durante a iteração.
Nossa equipe costumava sentir que não tínhamos tempo para planejar antecipadamente a próxima iteração.
A história de Lisa
Depois de muitas experiências de mal-entendidos de histórias e de tê-las ultrapassado em muito as
estimativas, e de descobrir que a maioria dos “bugs” eram requisitos perdidos, decidimos reservar um tempo
na iteração para começar a falar sobre a próxima. Agora toda a equipe, incluindo o proprietário do produto e
outros clientes, conforme necessário, se reúne por uma hora ou menos no dia anterior à reunião de
planejamento do próximo sprint.
Nós, rindo, chamamos isso de reunião de “pré-planejamento”. Repassamos as histórias para a próxima
iteração. O proprietário do produto explica o propósito de cada história. Ele analisa as condições de
satisfação do negócio e outros itens de suas listas de verificação de histórias e dá exemplos de comportamento
desejado. Fazemos brainstorming sobre possíveis riscos e dependências e identificamos fios de aço quando
apropriado.
Machine Translated by Google
Às vezes é suficiente passar alguns minutos ouvindo o que o proprietário do produto diz.
explicação das histórias. Outras vezes, reservamos um tempo para diagramar fatias finas de uma
história no quadro branco. A Figura 16-1 mostra um diagrama de exemplo onde entramos nos
detalhes do fluxo da UI e das tabelas do banco de dados. Observe os números dos “threads”. O tópico
nº 1 é nosso caminho crítico. O segmento 2 é a segunda camada e assim por diante. Carregamos fotos
desses diagramas no wiki para que nosso desenvolvedor remoto também possa vê-los.
Podemos começar a pensar em quais cartões de tarefas poderemos escrever no dia seguinte e
que abordagem adotaremos para cada história. Por alguma razão, ser capaz de ruminar sobre as
histórias durante a noite nos torna mais produtivos na reunião de planejamento da iteração no dia
seguinte. Depois de fazer isso por algumas iterações, estávamos gastando menos tempo
planejando a iteração, embora tivéssemos duas reuniões para fazer isso.
Às vezes chamamos outros clientes para discutir histórias que os afetam diretamente. Se eles não
estiverem disponíveis naquele momento, ainda teremos tempo antes da reunião de planejamento
da iteração para conversar com eles e esclarecer a história.
Em uma reunião de pré-planejamento, nosso product owner apresentou uma história sobre a
obtenção de dados de desempenho para fundos mútuos. Enviaríamos um arquivo ao fornecedor
contendo uma lista de fundos mútuos, e o fornecedor forneceria um arquivo XML em um site com
todas as informações mais recentes sobre o desempenho desses fundos. Em seguida,
carregaríamos esses dados em nosso banco de dados.
Na reunião de pré-planejamento, fizemos perguntas como: “Qual é o formato do arquivo que enviamos
ao fornecedor?” “A data final de cada fundo é sempre o último dia do mês?” “Existe alguma segurança no
site que contém o XML?” "Vai
alguma vez obteremos um registro para o mesmo fundo e data “de” que contém novos dados, ou podemos
ignorar registros com uma data que já temos em nosso banco de dados?”
Na reunião de planejamento da iteração do dia seguinte, o proprietário do produto obteve respostas para
todas as nossas perguntas. A escrita dos cartões de tarefas foi rápida e a codificação pôde prosseguir
com suposições corretas.
Freqüentemente, encontramos uma solução muito mais simples para uma história quando a discutimos
na discussão do planejamento pré-iteração. Descobrimos que para ir rápido, precisávamos primeiro
desacelerar.
—Lisa
Esses testes, que foram escritos em uma página wiki ou alguma ferramenta semelhante junto
com a narrativa da história, são usados posteriormente quando os membros da equipe escrevem cartões de tarefas
para cada história e comece a escrever mais testes e códigos. Exemplos são transformados
em testes executáveis. Porque os testes mudam à medida que a equipe aprende mais sobre
história, a equipe pode optar por não manter as originais que foram escritas no início.
Mantenha a simplicidade no início e aprofunde-se nos detalhes mais tarde.
Posteriormente, Lisa observou uma de suas sessões de planejamento e viu em primeira mão
quão eficaz foi essa técnica. Mesmo quando o gerente de produto fornece
exemplos concretos, transformá-los em testes pode eliminar requisitos ausentes. A equipe
deles não precisava fazer isso antes da sessão de planejamento da iteração, mas não é o
caso com todas as equipes.
Minha equipe gostou da prática de escrever testes juntos, mas como estávamos escrevendo cartões de
A história de Lisa
tarefas durante o planejamento da iteração, decidimos escrever testes de aceitação do usuário juntos
durante a reunião de pré-planejamento. Descobrimos que isso manteve nossas discussões focadas e
entendemos cada história mais rapidamente. Também fizemos um trabalho melhor ao entregar
exatamente o que o cliente tinha em mente. Nossos clientes notaram uma diferença na qualidade e nosso
proprietário do produto nos incentivou a continuar essa prática.
—Lisa
Machine Translated by Google
Se a sua situação for tão dinâmica que as histórias possam ser re-priorizadas no dia em que
a iteração começa, não vale a pena tentar fazer esse planejamento. Em vez disso, faça
certifique-se de reservar tempo para essas discussões durante sua reunião de planejamento.
CLAREZA AVANÇADA
Com muitas agendas diferentes, alguém precisa decidir quais histórias devem ser
ser implementado na próxima iteração. Como há muitas maneiras de implementar qualquer
história, alguém precisa decidir os requisitos específicos e
capturá-los na forma de exemplos, condições de satisfação e testar
casos. Steve reúne todos para concordar sobre o valor que desejam de cada um
história e para fornecer “claridade antecipada”.
os componentes de cada história devem ser implementados. O apoio da gestão é crucial, porque qualquer
pessoa nesta função precisa de tempo e autoridade para
coloque todos na mesma página.
Outras equipes usam analistas de negócios para ajudar a detalhar as histórias antes da próxima
iteração. Numa organização com a qual Janet trabalhou, os clientes não eram
disponível em tempo integral para tirar dúvidas, mas cada equipe contava com um analista de negócios
que trabalhou com os clientes para definir os requisitos antes da reunião de planejamento da iteração. Se
houvesse alguma dúvida que ela não pudesse responder na reunião, a equipe ligava diretamente para o
cliente ou para o
analista fez o acompanhamento imediatamente após a reunião.
Tal como acontece com o código, as histórias são melhores se tiverem o mínimo. Por exemplo, um
O carrinho de compras pela Internet precisa de alguma forma de excluir itens indesejados, mas o
a capacidade de mover itens do carrinho para uma lista “salvar para mais tarde” provavelmente pode esperar.
Pode ser útil conversar sobre isso antes da iteração, para que a equipe esteja
claro sobre quais tarefas precisam ser planejadas. Concentre-se primeiro na coisa mais simples e
use um exemplo para deixar claro.
Obter requisitos de diferentes clientes para uma história, cada um dos quais tem
uma agenda diferente, pode criar o caos. É por isso que é essencial para alguém
na equipe do cliente para obter consenso e coordenar todos os pontos de vista.
Isso não significa que não devemos receber informações de clientes diferentes. Como um
testador, você está considerando cada história de vários pontos de vista. Isso ajuda a
saber o que a história significa para pessoas em diferentes papéis.
Quando minha empresa decidiu redesenhar os extratos contábeis trimestrais dos participantes do plano de
A história de Lisa
aposentadoria, diferentes pessoas do lado comercial queriam mudanças por diferentes motivos. Os
administradores do plano queriam um layout claramente compreensível que minimizasse o número de
chamadas de participantes confusos para o suporte ao cliente.
Por exemplo, queriam que o extrato mostrasse a data e o valor da contribuição mais recente do participante.
Isso ajuda o participante a saber se ela
Machine Translated by Google
Enquanto o product Owner equilibrava todas as diferentes necessidades e apresentava o resultado final
layout do extrato, ainda era importante para nossa equipe entender o propósito de cada nova
informação. Precisávamos conversar diretamente com especialistas em negócios nas áreas de
administração de planos, desenvolvimento de negócios e jurídica, e com o proprietário do produto.
Um testador e um programador reuniram-se com cada grupo para reunir os diferentes pontos de vista.
Ao fazer isso antes de iniciar as histórias para coletar e exibir dados, entendemos os requisitos com
muito mais clareza e até fizemos sugestões para produzir as informações de forma mais eficiente.
—Lisa
Tamanho da história
Ao discutir histórias para a próxima iteração com os membros da equipe do cliente, faça perguntas
para ajudá-los a garantir que cada história agregue valor
necessário. Este é um bom momento para identificar novas histórias que eles possam precisar escrever.
Mesmo que a equipe tenha dimensionado as histórias anteriormente, você pode descobrir que uma história é
maior do que se pensava anteriormente. Você pode até descobrir que um recurso pode ser
implementado de forma mais simples do que o planejado, e a história pode ser menor.
Às vezes, suposições são feitas quando a história é dimensionada e, após investigações mais
aprofundadas, revelam-se falsas. Mesmo histórias simples merecem um olhar mais atento. Isso é
difícil para qualquer pessoa lembrar todos os detalhes de um aplicativo.
A história de Lisa Aqui estão alguns exemplos de histórias que se revelaram significativamente maiores ou menores
do que se pensava originalmente.
história. Depois que começamos a desenvolver a história, os clientes revelaram outro requisito:
se o endereço de algum participante estivesse faltando ou fosse inválido, o extrato deveria ser
enviado ao empregador. É razoável, mas não sabíamos disso quando avaliamos a história.
2. Nossos clientes queriam começar a exibir o número de telefone de vendas em vários locais da
IU. Há um número de telefone de vendas diferente para cada parceiro
site, e na época havia cerca de 25 sites parceiros diferentes. Parecia uma história tão direta que
nem sequer foi dada à equipe.
O gerente de desenvolvimento apenas atribuiu a ele um pequeno valor de ponto e ele foi
simplesmente “adicionado” à iteração. Ele presumiu que o número de telefone estava armazenado
no banco de dados, quando na verdade estava codificado no HTML da página de “contato” de
cada parceiro. Armazenar o número correto de cada parceiro no banco de dados e alterar o
código para recuperar o valor tornou a história duas vezes maior, e não havia espaço para isso
naquela iteração, por isso não foi concluída.
3. Dimensionamos uma história para a interface do usuário para permitir que os administradores enviem uma
solicitação de um trabalho em lote para reequilibrar contas de participantes que atenderam a
uma determinada condição. Incluía uma página de confirmação exibindo o número de
participantes afetados. Como a solicitação foi colocada na fila para ser executada como um
trabalho em lote assíncrono, o código para determinar quais participantes foram afetados estava
no código do trabalho em lote. Refatorar o código para obter o número de participantes no
momento da solicitação foi um grande trabalho. Depois que começamos a trabalhar na história,
perguntamos ao usuário principal do recurso se ele realmente precisava daquele número ao
enviar a solicitação, e ele decidiu que não era necessário. A história se tornou muito menor do
que se pensava originalmente. Sempre fazemos perguntas para descobrir o verdadeiro valor
comercial que os clientes desejam e eliminar componentes que não tenham um bom ROI.
—Lisa
Essas histórias mostram que algumas perguntas iniciais podem economizar tempo durante o
iteração que poderia ser gasta para descobrir o que fazer com novas descobertas.
No entanto, reconhecemos que nem todas as descobertas podem ser encontradas precocemente. Por
exemplo, na primeira história, uma simples pergunta sobre o tamanho do extrato pode ter evitado
confusões de última hora sobre como lidar com extratos de quatro páginas,
mas a questão do endereço impreciso pode não ter sido considerada até que fosse
sendo codificado ou testado.
Sabemos que sempre haverá descobertas ao longo do caminho, mas se conseguirmos captar
as grandes “pegadinhas” primeiro, que ajudarão a equipe a trabalhar da maneira mais eficaz possível.
subconjunto das próximas histórias e peça-lhes que escrevam cartões de tarefas com antecedência.
Durante a reunião de planejamento, todos podem revisar todos os cartões de tarefas e fazer
alterações conforme necessário. O trabalho antecipado melhora a comunicação, torna o
histórias e tarefas visíveis para todos e acelera o processo de planejamento.
Claro, isso pressupõe que a equipe esteja usando uma história ou tarefa eletrônica
quadro. A equipe de Lisa usa o Mingle da Thoughtwork, mas há muitos outros
produtos que servem a esse propósito.
Patrick Fleisch e Apurva Chandra são consultores que trabalharam com esta empresa e
atuaram como analistas funcionais em um projeto de desenvolvimento de software de
titularidade baseado na web, porque são especialistas neste domínio. Eles viajaram
entre locais para facilitar a comunicação entre as partes interessadas e os desenvolvedores.
Se os clientes não estiverem prontamente disponíveis para responder perguntas e tomar decisões,
outros especialistas do domínio que estejam sempre acessíveis devem ser capacitados
para orientar a equipe determinando prioridades e expressando o sistema desejado
Machine Translated by Google
EXEMPLOS
Você pode notar que falamos sobre exemplos em quase todos os capítulos deste livro.
este livro. Os exemplos são uma forma eficaz de aprender e ilustrar
funcionalidade (e indesejada); vale a pena usá-los durante todo o seu ciclo de desenvolvimento. Nosso
lema foi cunhado por Brian Marick: “Um exemplo seria
útil agora. (Veja a Figura 16-2.) Comece suas discussões sobre recursos e histórias com um exemplo
realista. A idéia decolou, de modo que em um
No recente workshop para testes funcionais, estávamos discutindo ideias sobre como chamá-lo de
“Desenvolvimento Orientado a Exemplos”.
Quando os membros da equipe de Lisa se reúnem com o proprietário do produto para falar sobre o
na próxima iteração, eles pedem exemplos de comportamento desejado para cada história.
Isto mantém a discussão em um nível concreto e é uma maneira rápida de aprender como o
novos recursos devem funcionar. Tenha um quadro branco à mão enquanto faz isso e
comece a desenhar. Se alguns membros da equipe estiverem em um local distante, considere usar
ferramentas que permitem que todos vejam diagramas do quadro branco e participem do
discussão. Veja exemplos reais com seus clientes ou seus representantes.
Assim como durante o planejamento do lançamento, considere diferentes pontos de vista: o negócio,
usuários finais, desenvolvedores e parceiros de negócios. Ao contrário do planejamento de lançamento, você
estão analisando muito mais detalhes porque essas são as histórias que você está planejando
para a próxima iteração.
Usando exemplos, você pode escrever testes de alto nível para detalhar um pouco cada história
mais. Talvez você não precise fazer isso antes do início da iteração, mas para fins
EXEMPLOS 379
histórias complexas, pode ser uma boa ideia escrever pelo menos um caminho feliz e um
caso de teste de caminho negativo com antecedência. Vamos considerar a história da Figura 16-3.
História PA-3
Quando o usuário clica na caixa de seleção de exclusão ao lado do item e clica no botão
“atualizar carrinho”, a página é atualizada mostrando que o item não está mais no carrinho.
Quando o usuário clica nas caixas de seleção de exclusão ao lado de cada item do carrinho
e clica no botão “atualizar carrinho”, a página é atualizada mostrando um carrinho vazio.
(Isso gerará perguntas – o usuário deve ser direcionado para outra página? Um botão
“continuar comprando” deve ser exibido?)
Quando o usuário clica no botão “atualizar carrinho” sem marcar um item para exclusão,
a página é atualizada e nada é removido do carrinho.
Peça aos seus clientes para anotarem exemplos e casos de teste de alto nível antes
a iteração. Isto pode ajudá-los a refletir melhor sobre as histórias e a definir as suas condições de
satisfação. Também os ajuda a identificar quais recursos
são críticos e que podem esperar. Também ajuda a definir quando o
história é feita e gerencia as expectativas entre a equipe.
Machine Translated by Google
Os modelos são essenciais para histórias que envolvem a IU ou um relatório. Peça aos seus
clientes que elaborem ideias sobre a aparência da página. Compartilhe estes
ideias com a equipe. Uma ideia é escaneá-los e carregá-los no wiki
então todos têm acesso. Use-os como ponto de partida e faça mais protótipos de papel ou
desenhe-os no quadro branco. Estes podem ser fotografados e
carregado para membros remotos da equipe verem.
ESTRATÉGIAS DE TESTE
À medida que você aprende sobre as histórias da próxima iteração, pense em como abordar
o teste delas. Eles apresentam algum desafio especial de automação? São
alguma nova ferramenta necessária?
A história de Lisa Recentemente, nossa empresa precisou substituir o hardware da unidade de resposta de voz e o software de
interface de voz interativa. Um contratante deveria fornecer o software para operar o aplicativo de voz, mas
ele precisava interagir por meio de procedimentos armazenados com o banco de dados.
Machine Translated by Google
RECURSOS 381
Este foi um grande diferencial em relação a qualquer software em que havíamos trabalhado
antes, por isso foi útil ter um dia extra para pesquisar como outras equipes testaram esse tipo
de aplicativo antes do planejamento da primeira iteração que envolveu uma história
relacionada a esse projeto. Durante a sessão de planejamento da iteração, conseguimos
escrever tarefas pertinentes aos testes necessários e fornecer estimativas melhores.
—Lisa
Quando sua equipe embarca em um novo tipo de software, você pode decidir fazer um
Capítulo 9, “Kit de
ferramentas para negócios
pico de desenvolvimento para ver o que você pode aprender sobre como desenvolvê-lo. No
Enfrentando testes que ao mesmo tempo, tente um pico de teste para ter certeza de que você saberá como conduzir o
Apoiar o desenvolvimento com testes e como testar o software resultante. Se uma grande novidade
Equipe”, Capítulo 10,
um épico ou recurso está chegando, escreva alguns cartões para pesquisá-lo e realize reuniões de
“Visado para negócios
brainstorming com uma ou duas iterações de antecedência. Isso ajuda você a saber o que
Testes que criticam o
produto”, histórias e tarefas para planejar quando você realmente começar a programar. Uma ideia é ter um
e Capítulo 11, Equipe de “olheiros” que analisa quais soluções técnicas podem funcionar para histórias ou temas
“Criticando o
futuros.
Uso do produto
Tecnologia-
Facing Tests”,
fornece exemplos de PRIORIZAR DEFEITOS
ferramentas para diferentes
Em nosso mundo ideal, queremos zero defeitos no final de cada iteração e definitivamente no final do
tipos de testes.
lançamento. No entanto, reconhecemos que não vivemos numa
mundo ideal. Às vezes, temos defeitos de sistemas legados com os quais nos preocupar, e
às vezes, consertar um defeito simplesmente não tem valor alto o suficiente para ser corrigido pela empresa.
O que acontece com esses defeitos? Falaremos sobre estratégias no Capítulo 18,
“Codificação e Teste”, mas por enquanto, vamos apenas considerar que temos defeitos para
tratar.
Antes da próxima iteração é o momento ideal para revisar questões pendentes com
o cliente e fazer a triagem do valor de consertar versus deixá-los no sistema.
Aqueles que forem considerados necessários para serem consertados deverão ser agendados no
próxima iteração.
RECURSOS
Outra coisa a verificar antes da iteração é se sua equipe tem
todos os recursos necessários para concluir qualquer história de alto risco. Você precisa de alguma
especialistas que são compartilhados com outros projetos? Por exemplo, você pode precisar de um
especialista em segurança se uma das histórias representar um risco à segurança ou se tratar de um
recurso de segurança. Se o teste de carga for feito, você pode precisar de uma ferramenta especial ou ter
ajuda de um especialista em testes de carga de outra equipe ou até mesmo de um fornecedor que
fornece serviços de teste de carga. Esta é sua última chance de planejar com antecedência.
Machine Translated by Google
RESUMO
Sua equipe pode ou não precisar fazer qualquer preparação antes de uma iteração. Como as
prioridades mudam rapidamente no desenvolvimento ágil, você não quer
perder tempo planejando histórias que podem ser adiadas. No entanto, se você estiver prestes
implementar alguma nova tecnologia, embarcar em um novo tema complexo, espero
para economizar tempo no planejamento de iterações, ou se sua equipe estiver dividida em locais
diferentes, você pode achar que algum planejamento e pesquisa iniciais são produtivos.
Como testador, você pode fazer o seguinte:
Faça a triagem e priorize os defeitos existentes para determinar se algum deve ser
agendado para a próxima iteração.
Capítulo 17
INÍCIO DA ITERAÇÃO
Aprendendo os detalhes
Revise com os clientes
Alto nível Considerando todos os pontos de vista
Iteração
Revisão com programadores Testes e
Planejamento
Exemplos Escrevendo cartões de tarefas
Casos de teste como documentação
Decidindo sobre a carga de trabalho
Iteração
Começo
Colabore com
Histórias testáveis
os clientes
PLANEJAMENTO DE ITERAÇÃO
A maioria das equipes inicia sua nova iteração com uma sessão de planejamento. Isso pode ser
precedido por uma sessão retrospectiva, ou de “lições aprendidas”, para olhar para trás e ver o que
funcionou bem e o que não funcionou na iteração anterior. Embora os itens de ação da retrospectiva
ou sugestões de “iniciar, parar, continuar” afetem a iteração que está prestes a começar, falaremos
sobre a retrospectiva como uma atividade de fim de iteração no Capítulo 19, “Concluir a iteração”.
Ao planejar o trabalho para a iteração, a equipe de desenvolvimento discute uma história por vez,
escrevendo e estimando todas as tarefas necessárias para implementar
383
Machine Translated by Google
essa história. Se você fez algum trabalho antes para se preparar para a iteração,
esta sessão de planejamento provavelmente será bastante rápida.
Equipes novas no desenvolvimento ágil geralmente precisam de muito tempo para iterar
sessões de planejamento. O planejamento da iteração geralmente demorava um dia inteiro quando Lisa
a equipe começou. Agora são feitas em duas ou três horas, o que inclui o tempo da retrospectiva. A equipe
de Lisa usa um projetor para exibir o usuário
casos de teste de aceitação e condições de satisfação de seu wiki para que
todos na equipe podem vê-los. Eles também projetam sua história online
ferramenta de tabuleiro, onde escrevem os cartões de tarefas. Outro componente tradicional
de suas reuniões de planejamento é um prato de guloseimas que eles se revezam no fornecimento.
A Figura 17-1 mostra uma reunião de planejamento de iteração em andamento.
Aprendendo os detalhes
Idealmente, o proprietário do produto e/ou outros membros da equipe do cliente participam
no planejamento da iteração, respondendo perguntas e fornecendo exemplos descrevendo os requisitos
de cada história. Se ninguém do lado comercial puder comparecer, os membros da equipe que trabalham
em estreita colaboração com os clientes, como analistas
e testadores, podem servir como proxies. Eles explicam detalhes e tomam decisões sobre
em nome dos clientes ou anote as perguntas para obter respostas rápidas. Se
Machine Translated by Google
Uma prática que ajuda algumas equipes é escrever testes de aceitação do usuário para cada
história juntos, durante o planejamento da iteração. Junto com o proprietário do produto
e possivelmente outras partes interessadas, eles escrevem testes de alto nível que, quando
aprovados, mostrarão que a história está concluída. Isso também poderia ser feito em breve,
antes do planejamento da iteração, como parte do “trabalho de preparação” da iteração.
As histórias devem ser dimensionadas para que não levem mais do que alguns dias para serem concluídas.
Quando testamos pequenas histórias regularmente, não temos todas elas
terminado de uma vez e empilhado no final da iteração esperando para ser
testado. Se uma história passou pelas discussões de planejamento de lançamento e pré-iteração
e ainda é muito grande, esta é a última chance de dividi-la em partes menores.
peças. Mesmo uma pequena história pode ser complexa. A equipe pode realizar um exercício
para identificar as fatias finas ou o caminho crítico através da funcionalidade. Usar
exemplos para orientá-lo e encontrar os cenários de usuário mais básicos.
Os testadores ágeis, juntamente com outros membros da equipe, estão alertas para o “aumento do escopo”. Não
tenha medo de levantar uma bandeira vermelha quando uma história parece estar crescendo em todas as direções.
A equipe de Lisa faz um esforço consciente para apontar “bling” ou “bom ter”
componentes, que não são centrais para a funcionalidade da história. Esses podem ser
adiar para o final, ou adiar, caso a história demore mais do que o planejado para
terminar.
Como testador, você tentará colocar cada história no contexto do sistema maior
e avaliar o potencial de impactos imprevistos em outras áreas. Como você fez
na reunião de planejamento de lançamento, coloque-se nas diferentes mentalidades de
Machine Translated by Google
usuário, parte interessada no negócio, programador, redator técnico e todos os envolvidos na criação
e uso da funcionalidade. Agora você está trabalhando em um nível detalhado.
Decidimos pegar uma “fatia fina” e mudar essa história para assumir que só existe
uma velocidade de envio. As outras velocidades de envio serão histórias posteriores. Por esta
história, precisamos calcular o custo de envio com base no peso do item e no destino, e decidimos
usar a API do BigExpressShipping para o cálculo.
Nossa história agora é mostrada na Figura 17-2.
História PA-5
Testador: “Esta história se aplica a todos os itens disponíveis no site? Algum item é muito
pesado ou desqualificado para entrega em 5 dias?
Dono do produto: “O terreno de 5 dias está disponível para todos os nossos itens. São
os períodos noturno e de 2 dias que estão restritos a menos de 25 libras.
Programador: “Poderíamos exibir o custo de envio de 5 dias como padrão assim que o
usuário inserir o endereço de envio. Quando fazemos os stories para as outras opções
de frete, podemos colocar botões para exibir esses custos rapidamente.”
Dono do Produto: “É isso que queremos: antecipar os custos. Vamos comercializar nosso
site como o mais amigável ao cliente.”
Testador: “Existe alguma maneira de o usuário errar? O que eles farão nesta página?
Dono do produto: “Quando adicionamos as outras opções de envio, eles podem optar
por alterar sua opção de envio. Mas, por enquanto, é realmente simples. Já temos
validação para garantir que o código postal corresponde à cidade inserida no endereço de
entrega.”
Testador: “Isso tornaria a IU fácil de usar. Eu sei que quando faço compras on-line, fico
chateado por não poder ver o custo do frete até a confirmação do pedido. Se o frete for
ridiculamente caro e eu não quiser continuar, já perdi tempo. Queremos garantir que os
usuários não fiquem presos no processo de finalização da compra, fiquem frustrados e
simplesmente desistam. Então, a próxima página que eles verão é a página de confirmação
do pedido. Existe alguma chance de o custo de envio ser diferente quando o usuário
acessar essa página?
Programador: “Não, a API que nos dá o custo estimado deve sempre corresponder ao
custo real, desde que os mesmos itens ainda estejam no carrinho de compras.”
Dono do produto: “Se eles alterarem as quantidades ou excluirem algum item, precisamos
garantir que o custo de envio seja alterado imediatamente para refletir isso.”
Machine Translated by Google
Como você pode perceber pela conversa, muitos esclarecimentos vieram à tona. Todos na equipe
agora têm um entendimento comum da história. É importante falar sobre todos os aspectos da
história. Escrever testes de aceitação do usuário como um
grupo é uma boa maneira de garantir que a equipe de desenvolvimento entenda o
requisitos do cliente. Vamos continuar monitorando essa conversa.
Testador: “Vamos apenas escrever alguns testes rápidos para ter certeza de que acertamos.”
Posso selecionar dois itens com opção de envio em 5 dias e ver meu
custos imediatamente.
Testador: “Ótimo começo, mas não saberemos para onde enviá-lo nesse momento.
Que tal um teste mais genérico como:
Durante nossa reunião de iteração, uma das histórias que discutimos foi sobre a adição de
algumas novas imagens a parte de uma aplicação web. Essa discussão se seguiu.
Dono do produto: “Gostaria também de entrar na história para obter imagens adicionais.”
Desenvolvedor 1: “OK, deveríamos pensar um pouco mais sobre isso. Talvez existam
outras maneiras de implementá-lo.
Desenvolvedor 2: “Por que não fazemos um pico rápido, adicionamos as imagens simuladas
e executamos outro teste de desempenho?”
Foi muito bom que essa discussão antes mesmo de começar uma história nos deu algumas
ideias sobre os problemas que podemos encontrar.
Qualquer pessoa que não tenha certeza sobre o impacto de uma história no resto do sistema ou sobre a
dificuldade de desenvolver a funcionalidade pode, e deve, levantar uma questão durante o planejamento
da iteração. É melhor abordar a incerteza desde o início e depois fazer mais pesquisas ou fazer um pico
para obter mais informações.
Fazer perguntas com base em diferentes pontos de vista ajudará a esclarecer a história
e permitir que a equipe faça um trabalho melhor.
Quando sua equipe tiver um bom entendimento de uma história, você poderá começar a escrever
e estimando cartões de tarefas. Como o desenvolvimento ágil impulsiona a codificação com
testes, escrevemos cartões de tarefas de teste e desenvolvimento ao mesmo tempo.
Quando nossa equipe está pronta para começar a escrever cartões de tarefas, os programadores geralmente
A história de Lisa
criam os cartões de tarefas de codificação. Os testadores escrevem cartões de tarefas de teste ao mesmo tempo.
Normalmente começo com um cartão para escrever casos de teste de alto nível. Pergunto aos
programadores se a história pode ser testada por trás da GUI e escrevo cartões de tarefas de teste de
acordo. Isso geralmente significa um cartão de teste para “Escrever casos de teste do FitNesse” e um cartão
de tarefas do desenvolvedor para “Escrever acessórios do FitNesse”, a menos que os acessórios já existam.
Às vezes, todos os testes por trás da GUI podem ser abordados mais facilmente em testes unitários, por isso é
sempre bom perguntar se esse é o caso.
Colocamos tudo o que a equipe precisa lembrar durante a iteração em um cartão de tarefas.
“Mostrar UI para Anne” ou “Enviar arquivos de teste para Joe” aparecem no storyboard junto com todas as outras
tarefas.
Machine Translated by Google
Eu estimo os cartões de tarefas de teste à medida que prossigo e peço feedback à equipe sobre os
cartões e as estimativas. Às vezes nos dividimos em grupos, e cada grupo pega algumas histórias e escreve
cartões de tarefas para elas. Sempre analisamos todos os cartões em conjunto, juntamente com o tempo
estimado. Se o tempo de desenvolvimento for relativamente baixo comparado ao tempo de teste, ou vice-
versa, isso provoca uma discussão. Chegamos a um consenso sobre se achamos que todos os aspectos da
história foram cobertos com cartões de tarefas. Se ainda houver algumas incógnitas, simplesmente adiamos
a escrita dos cartões de tarefas até termos a informação.
Todos os cartões de teste e desenvolvimento vão para o storyboard na coluna “tarefas”. Qualquer pessoa
da equipe pode se inscrever em qualquer cartão. Alguns cartões de tarefas de teste passam para a coluna
“trabalho em andamento” ou “concluído” antes que os cartões de codificação comecem a se mover, para que
os programadores tenham alguns testes para orientar sua codificação. À medida que os cartões de tarefas de
codificação são movidos para a coluna “concluído”, os cartões para testar a funcionalidade “concluído” são
movidos para “trabalho em andamento”.
—Lisa
Janet usa uma abordagem semelhante a esta, mas o cartão de codificação do programador
permanece na coluna “Para testar” até que a tarefa de teste seja concluída. Ambos
os cartões são movidos ao mesmo tempo para a coluna “Concluído”.
Três cartões de teste para Story PA-5 (Figura 17-2), exibindo o custo de envio para 5-
entrega por dia com base no peso e destino, que a equipe de Lisa pode escrever são:
Escreva testes FitNesse para calcular o custo de envio de 5 dias com base no
peso e no destino.
Escreva testes WebTest para exibir o custo de envio em 5 dias.
Teste manualmente a exibição do custo de entrega em 5 dias.
Testador: “Alguém sabe com quem trabalhamos no BigExpressShipping para obter especificações
sobre sua API? O que passamos para eles, apenas o peso e o CEP? Já temos acesso para
testar isso?”
Scrum Master: “Joe da BigExpressShipping é nosso contato e ele já enviou este documento
especificando o formato de entrada e saída. Eles ainda precisam autorizar o acesso do nosso
sistema de teste, mas isso deve ser feito em alguns dias.”
Testador: “Ah, que bom, precisamos dessas informações para escrever casos de teste.
Escreveremos um cartão de teste apenas para verificar se podemos acessar sua API e receber
de volta o custo de envio. Mas como sabemos que o custo está realmente correto?”
Scrum Master: “Joe nos forneceu alguns casos de teste para peso, código postal e custo
esperado, para que possamos enviar essas entradas e verificar a saída correta. Também temos
esta planilha mostrando as taxas para alguns códigos postais diferentes.”
Testador: “Devemos reservar bastante tempo apenas para ter certeza de que estamos
acessando sua API corretamente. Vou colocar uma estimativa alta neste cartão para verificar
usando a API para teste. Talvez o cartão do desenvolvedor para a interface da API também
deva ter uma estimativa bastante conservadora.”
Ao escrever cartões de tarefas do programador, certifique-se de que as estimativas das tarefas de codificação
inclua tempo para escrever testes unitários e para todos os testes necessários por parte dos
programadores. Um cartão para testes “ponta a ponta” ajuda a garantir que os programadores
trabalhando em tarefas diferentes e independentes, verifique se todas as peças funcionam juntas. Os
testadores devem ajudar a garantir que todos os cartões necessários estejam escritos e que
eles têm estimativas razoáveis. Você não quer estimativas duvidosas, mas se
as estimativas de teste são duas vezes maiores que as estimativas de codificação, pode ser
vale a pena falar.
Algumas equipes continuam testando tarefas para um dia de trabalho ou menos e não se preocupam em
escreva horas estimadas no cartão. Se um cartão de tarefa ainda estiver disponível após um dia
trabalho, a equipe fala sobre por que isso aconteceu e escreve novos cartões para ir
avançar. Isso pode reduzir despesas gerais e manutenção de registros, mas se você
estão inserindo tarefas em seu sistema eletrônico, talvez não. Faça o que faz
sentido para sua equipe.
Estimar o tempo para correção de bugs também é sempre complicado. Se os defeitos existentes forem
puxado como histórias, é muito simples. Mas e os bugs que são
encontrado como parte da iteração?
Machine Translated by Google
Com novas equipes ágeis, descobri que elas sempre acabam gastando um tempo em bugs que não
A história de Janete
foi alocado como parte de suas estimativas para as histórias. Com o tempo, os programadores
aprendem quanto tempo normalmente gastam corrigindo bugs de uma história e podem simplesmente
adicionar meio dia ou algumas horas às suas tarefas para esse propósito. Testar novamente as
correções de bugs também adiciona tempo às estimativas do testador.
Até que os membros da equipe entendam isso, pode ser apropriado monitorar o tempo gasto na
correção e teste de bugs separadamente. Minha equipe atual adiciona uma história no XPlanner
com tarefas para corrigir e testar os bugs que não foram detectados imediatamente. Estamos
monitorando o tempo para que possamos estimar melhor no futuro.
—Janet
Seja como for, sua equipe escolhe estimar o tempo gasto para corrigir defeitos durante
a iteração, seja ela incluída na estimativa da história ou monitorada separadamente, certifique-se de
que seja feita de forma consistente.
Outro item a considerar ao estimar tarefas de teste são os dados de teste. O início de uma iteração
é quase tarde demais para pensar nos dados que você precisa
teste com. Como mencionamos no Capítulo 15, “Atividades do testador em lançamento ou
Theme Planning”, pense nos dados de teste durante o planejamento do lançamento e pergunte ao
clientes para ajudar a identificá-lo e obtê-lo. Certamente pense nisso enquanto se prepara
para a próxima iteração. Quando a iteração começa, quaisquer dados de teste que estejam faltando
deve ser criado ou obtido, então não se esqueça de levar isso em consideração nas estimativas.
Trabalhamos um tema relacionado aos extratos contábeis trimestrais dos participantes de planos de
A história de Lisa
aposentadoria. Estávamos modificando um trabalho mensal que tira um “instantâneo” da conta
de cada participante na data especificada. O snapshot depende de uma enorme quantidade de
dados no banco de dados de produção, incluindo milhares de transações diárias. Planejamos com
antecedência.
Para a primeira iteração, fizemos algumas histórias sobre o tema sabendo que só poderíamos
testar alguns casos usando alguns planos de aposentadoria individuais para os quais tínhamos
dados no banco de dados de teste. Também sabíamos que precisávamos de um teste em maior
escala, com todos os planos de aposentadoria no banco de dados e pelo menos um mês inteiro de
dados. Escrevemos um cartão de tarefas para copiar dados de produção suficientes para
produzir um “instantâneo” mensal e garantimos que os dados fossem limpos para proteger a privacidade.
Em seguida, planejamos o teste completo na próxima iteração. Esses dados permitiram que os
testadores encontrassem problemas que antes eram indetectáveis, quando apenas dados parciais
estavam disponíveis. Foi um bom equilíbrio entre dados “suficientes” para fazer a maior parte da
codificação e a quantidade total disponível a tempo de verificar a funcionalidade completa. Como a
equipe planejou com antecedência, os bugs foram corrigidos a tempo para o lançamento crítico.
—Lisa
Machine Translated by Google
trabalho Nós, como equipe técnica, controlamos nossa própria carga de trabalho. À medida que
escrevemos tarefas para cada história e as publicamos em nosso storyboard (real ou virtual),
somamos as horas estimadas ou verificamos visualmente a quantidade de cartões. Quanto
trabalho podemos realizar? No XP, não podemos exceder o número de pontos de história que
completamos na última iteração. No Scrum, nos comprometemos com um conjunto de histórias
com base no tempo real que achamos que precisamos para concluí-las.
A equipe atual de Lisa tem vários anos de experiência em processos ágeis e descobre que às
vezes perde tempo escrevendo cartões de tarefas para histórias que talvez não tenham tempo de
fazer durante a iteração. Eles começam com histórias suficientes para manter todos ocupados. À
medida que as pessoas começam a se liberar, elas contam mais histórias e planejam as tarefas
relacionadas. Eles podem ter algumas histórias prontas “no convés” para serem apresentadas
assim que terminarem as iniciais. Isso parece fácil, mas é difícil de fazer até que você tenha
aprendido o suficiente para ter mais confiança sobre o tamanho das histórias e a velocidade da
equipe e saber o que sua equipe pode ou não fazer em um determinado período de tempo e em
circunstâncias específicas.
Seu trabalho como testador é garantir que seja alocado tempo suficiente para os testes e lembrar
à equipe que o teste e a qualidade são responsabilidade de toda a equipe. Quando a equipe
decide quantas histórias podem entregar na iteração, a pergunta não é “Quanto código podemos
terminar?” mas “Quanta codificação e testes podemos concluir?” Haverá momentos em que uma
história será fácil de codificar, mas o teste consumirá muito tempo. Como testador, é importante
que você aceite na iteração apenas o número de histórias que podem ser testadas.
Como equipe, vamos sempre dar o nosso melhor. Precisamos lembrar que nenhuma história está
pronta até ser testada, então planeje adequadamente.
HISTÓRIAS TESTÁVEIS
Quando você estiver olhando histórias e os programadores começarem a pensar em
implementação, sempre pense em como você pode testá-las. Um exemplo ajuda muito a “testar a
testabilidade”. Que impacto isso terá em meus testes? A Parte III, “Os quadrantes de testes
ágeis”, dá muitos exemplos de como
Machine Translated by Google
projetar o aplicativo para permitir testes eficazes. Esta é sua última oportunidade de pensar sobre a
testabilidade de uma história antes de começar a codificação.
A história de Janete
Uma equipe com quem trabalhei me contou sobre os problemas que teve na versão anterior.
A equipe estava reescrevendo a primeira etapa de um processo de várias etapas. O que eles
não previram foi que, quando o desenvolvimento da nova etapa começou, o resto do processo foi
interrompido. Nenhum teste poderia ser feito em quaisquer outras alterações nessa iteração até
que toda a primeira etapa fosse concluída.
Lembre-se de perguntar: “Como podemos testar isso?” se não for óbvio para você.
—Janet
Durante o planejamento da iteração, pense nos tipos de variações que você precisará
testar. Isso pode gerar outras questões.
A história de Janete
Durante uma reunião de planejamento de iteração em que participei, os programadores
começaram a conversar sobre implementação e a fazer desenhos no quadro branco para mostrar
o que estavam pensando.
Pensei um pouco e fiz a pergunta: “Isso pode ser feito de forma mais simples?
As permutações e combinações para testar a implementação proposta tornarão os testes
horríveis.”
Os programadores pensaram por alguns minutos e sugeriram uma alternativa que não apenas
atendesse às necessidades do cliente, mas também fosse mais simples e fácil de testar.
Foi uma combinação ganha-ganha para todos.
—Janet
Quando a testabilidade for um problema, faça com que o problema seja resolvido pela equipe. Equipes que
começar seu planejamento escrevendo cartões de tarefas de teste provavelmente terá uma vantagem
aqui, porque ao pensarem sobre suas tarefas de teste, eles perguntarão como a história
pode ser testado. Alguma funcionalidade pode ser testada por trás da GUI? É possível
fazer os testes voltados para os negócios em nível de unidade? Toda equipe ágil deve ser
pensando primeiro no teste. À medida que sua equipe escreve cartões de tarefas de desenvolvedor para uma história, pense
sobre como testar a história e como automatizar os testes dela. Se os programadores ainda não têm o
hábito de codificar TDD ou automatizar testes unitários, tente
Machine Translated by Google
escrever um cartão de tarefas “XUnit” para cada história. Escreva cartões de tarefas de programação para
quaisquer acessórios de automação de teste que serão necessários. Pense na aplicação
mudanças que podem ajudar nos testes, como propriedades de tempo de execução e APIs.
O aplicativo em que trabalho tem muitas atividades que dependem de data e hora.
A história de Lisa
Os programadores adicionaram uma propriedade de servidor de tempo de execução ao aplicativo da web
para definir a data do servidor. Posso especificar uma substituição de data e hora e, quando o servidor for
inicializado, ele se comportará de acordo. Isso permite iniciar processos mensais ou trimestrais com uma
simples substituição. Esta propriedade ajudou a testar uma ampla variedade de histórias.
Markus Gärtner [2008] nos disse que sua equipe tem uma propriedade semelhante, um “DATE_OFFSET”
contados em “dias para avançar”. No entanto, isso foi usado apenas pelos componentes Java da aplicação
onde reside a lógica de negócios. Os sistemas back-end em C e C++ não usam o deslocamento de data,
o que causou um problema.
—Lisa
Se você tiver problemas semelhantes porque outras equipes estão desenvolvendo partes do sistema,
escreva um cartão de tarefas para discutir o problema com a outra equipe e venha
encontrar uma solução coordenada. Se trabalhar com a outra equipe não for uma opção, reserve um
tempo para pensar em outra solução. No mínimo, esteja atento às limitações, ajuste as estimativas de
teste de acordo e gerencie
o risco associado.
Iniciamos um projeto para substituir o sistema interativo de resposta de voz (IVR) de nossa empresa, que
A história de Lisa
permite aos participantes de planos de aposentadoria obter informações de contas e gerenciar contas por
telefone. Contratamos outra empresa para escrever o sistema em Java, com a intenção de que nossa
equipe o mantivesse após um determinado período de tempo.
Passamos algum tempo pensando em quais testes seriam necessários e como fazê-los. Presumivelmente, o
contratante testaria coisas como a funcionalidade de conversão de texto em fala, mas tivemos que fornecer
procedimentos armazenados para recuperar dados apropriados do banco de dados.
Nosso primeiro passo foi negociar com o empreiteiro a entrega de pequenos pedaços de recursos em
iteração, para que pudessem ser testados à medida que o projeto avançasse e o trabalho fosse distribuído
uniformemente ao longo da vida do contrato. Decidimos testar os procedimentos armazenados usando
acessórios FitNesse e exploramos as opções. Optamos pelo PL/SQL para acessar os procedimentos
armazenados. Um programador foi encarregado de se familiarizar com PL/SQL para lidar com a
automação de testes.
A equipe buscou uma abordagem passo a passo. Ao alocar bastante tempo para as tarefas no início,
permitimos as curvas de aprendizado acentuadas envolvidas.
Machine Translated by Google
Curiosamente, o contratante entregou uma construção inicial para a primeira iteração, mas
não foi capaz de entregar os incrementos de código para as próximas iterações. Acabamos
cancelando o contrato e adiando o projeto até encontrarmos uma solução melhor. Ao forçar
o empreiteiro a trabalhar em incrementos, descobrimos imediatamente que ele não
conseguiria cumprir. E se tivéssemos deixado que levassem seis meses para redigir o
requerimento completo? Provavelmente não teria terminado bem. Colocamos em
bom uso o que aprendemos na pesquisa de uma abordagem melhor.
—Lisa
Quando você estiver embarcando em algo novo para a equipe, como uma nova estrutura de modelos
ou biblioteca de relatórios, lembre-se de incluí-la como um risco no
seu plano de teste. Esperançosamente, sua equipe considerou a testabilidade antes de escolher uma
nova estrutura ou ferramenta e selecionou uma que melhorasse sua capacidade de
teste. Seja generoso com suas estimativas de tarefas de teste com tudo que é novo, incluindo novos
domínios, porque há muitas incógnitas. Às vezes novo
conhecimento de domínio ou nova tecnologia significa uma curva de aprendizado acentuada.
Mesmo que o proprietário do produto e/ou outros clientes tenham explicado as histórias antes e durante
o planejamento da iteração, às vezes é útil repassá-las
brevemente mais uma vez quando a iteração começa. Nem todo mundo pode ter ouvido isso
antes, e o cliente pode ter mais informações.
Começamos a escrever testes de aceitação de alto nível no primeiro dia da iteração. Como
A história de Lisa
analisamos todas as histórias com o proprietário do produto no dia anterior à iteração e
escrevemos testes de aceitação do usuário em equipe para as histórias mais complexas,
temos uma boa ideia do que é necessário. No entanto, o ato de escrever mais casos de
teste muitas vezes traz à tona novas questões. Repassamos os testes de alto nível e
quaisquer dúvidas que tenhamos com o product owner, que também tem pensado mais nas histórias.
Machine Translated by Google
Um exemplo disso foi uma história que envolvia um arquivo de distribuições monetárias para
participantes do plano que retirassem dinheiro de suas contas de aposentadoria. Esse arquivo
é enviado a um parceiro que utiliza as informações para passar cheques ao participante. Os
valores em alguns registros não estavam sendo reconciliados corretamente no sistema do
parceiro, e o parceiro solicitou uma nova coluna com um valor para permitir a reconciliação.
—Lisa
Uma boa comunicação geralmente dá trabalho. Se você não estiver aproveitando oportunidades
suficientes para fazer perguntas e revisar casos de teste, vá em frente e agende reuniões
regulares para fazer isso. Se não houver muito o que discutir, as reuniões serão
rapidamente. O tempo gasto em uma reunião para uma discussão esclarecedora pode economizar codificação e
teste mais tarde, porque você terá mais certeza dos requisitos.
Os testes de alto nível devem transmitir o objetivo principal da história. Eles podem
inclua exemplos de comportamento desejado e indesejado. Para o nosso anterior
Na história PA-5 (Figura 17-2) que pede para mostrar o custo de envio para entrega em 5 dias
com base no peso e destino do pedido, nossos testes de alto nível podem
incluir:
Verifique se o custo de envio de 5 dias é exibido como padrão assim que o usuário
insere um endereço de entrega.
Verifique se o custo de envio estimado corresponde ao custo de envio na fatura final.
Machine Translated by Google
Paul Rogers [2008] tem experimentado algumas ideias interessantes sobre isso e explica a abordagem
de sua equipe para o problema na barra lateral a seguir. A Figura 17-3 mostra o modelo de UI que
ele descreve.
O aplicativo em que trabalho é de natureza muito gráfica. Ele permite que um usuário modifique
uma página da web adicionando “aprimoramentos de fotos”, como óculos, chapéus ou balões de
fala às imagens, ou destacando o texto na página da web com um efeito de caneta marca-
texto.
Há um conjunto complexo de regras de negócios sobre quais acréscimos podem ser aplicados
às imagens, como e onde eles são afixados e como podem ser girados. Para explicar os testes
dessas regras, foi muito mais simples desenhar um esboço de uma página web típica com os
diferentes tipos de acréscimos e adicionar pequenas notas a cada imagem.
O realce do texto também apresentou muitos desafios. As mais problemáticas eram as áreas
onde o realce do texto cobria apenas parte de uma tag HTML. Para descrever o que deve
ser esperado em muitas situações diferentes, criamos diferentes páginas da web e as imprimimos.
Usando marcadores de caneta reais, destacamos as áreas que esperávamos mostrar como
destacadas após iniciar e terminar em determinadas áreas. Dessa forma, tivemos um teste de
regressão de fácil leitura.
Os modelos podem transmitir requisitos para uma IU ou relatório de forma rápida e clara. Se
Veja o modelo de
um relatório existente precisa ser modificado, faça uma captura de tela do relatório e use
amostra das
mudanças na interface marcadores, caneta, lápis ou qualquer outra ferramenta útil. Se você quiser capturar
do usuário no eletronicamente, experimente o programa Windows Paint ou outra ferramenta gráfica para
Capítulo 16, “Comece a correr”. desenhe as alterações e publique-as na página wiki que descreve o relatório
requisitos.
ferramentas para negócios fazer com que o cliente se sente com eles e lhes diga os requisitos conforme eles
Testes que apoiam a código.
equipe”, para
algumas ideias
O que é importante ao iniciar a iteração é que você aprenda rapidamente os requisitos básicos de
sobre ferramentas
para coletar e comunicar cada história e os expresse no contexto de uma forma que
requisitos. funciona para toda a equipe. A maioria das equipes ágeis com quem conversamos dizem que seus maiores
Machine Translated by Google
O problema é entender cada história bem o suficiente para entregar exatamente o que o
cliente queria. Eles podem produzir código tecnicamente livre de erros, mas
não corresponde exatamente à funcionalidade desejada pelo cliente. Ou eles podem acabar
fazer muito retrabalho em uma história durante a iteração à medida que o cliente esclarece os requisitos
e, como resultado, fica sem tempo para concluir outra história.
Testes que apoiam a equipe”, Janet gosta de dizer que um requisito é uma combinação de história + conversa + um cenário de
para saber mais sobre usuário ou imagem de apoio, se necessário + um teste de coaching ou
o que constitui um
exemplo.
requisito.
Se sua equipe está contratando para desenvolver software, requisitos e casos de teste
podem ser resultados formais que você deve apresentar. Mesmo que não sejam, é
uma boa ideia fornecer os casos de teste em um formato que os clientes possam facilmente
leia por conta própria e entenda.
Programadores com bom conhecimento do domínio podem entender uma história corretamente
longe e ser capaz de começar a codificar antes mesmo de os testes de alto nível serem escritos. Até
então, é sempre uma boa ideia revisar as histórias do cliente e do testador
perspectiva com os programadores. A compreensão deles da história pode
Machine Translated by Google
Não se esqueça de perguntar aos programadores o que eles acham que você perdeu.
Quais são as áreas de alto risco do código? Onde eles acham que os testes
deve ser focado? Obter uma perspectiva mais técnica ajudará no projeto de casos de teste detalhados.
Se você criou uma matriz de teste, talvez queira revisar
as áreas impactadas novamente também.
Casos de teste de alto nível, juntamente com os testes executáveis que você escreverá durante o
iteração, formará o núcleo da documentação do seu aplicativo. Os requisitos mudarão durante e após
essa iteração, portanto, certifique-se de que seus casos de teste executáveis sejam fáceis de manter.
Pessoas não familiarizadas com o desenvolvimento ágil
muitas vezes temos a ideia errada de que não há documentação. Na verdade, ágil
projetos produzem documentação utilizável que contém testes executáveis e
portanto, está sempre atualizado.
Mostrar a eles um teste FitNesse que reproduz o cenário é muito mais poderoso do que apenas
mostrar requisitos narrativos. Talvez o sistema não tenha sido projetado como deveria, mas o
teste ilustra como ele realmente funciona, pois podemos ver claramente os resultados das
entradas e operações. Isso salvou muitos argumentos do tipo “Achei que funcionasse assim”.
—Lisa
RESUMO 403
RESUMO
A sessão de planejamento da iteração dá o tom para toda a iteração. Nisso
capítulo, vimos o que os testadores ágeis fazem para ajudar a iniciar a iteração para um
bom começo.
Capítulo 18
CODIFICAÇÃO E TESTE
Comece simples
Avalie o risco
Dirigindo
Mantenha a construção “verde” Teste e progresso de codificação juntos
Desenvolvimento
É tudo sobre
Que mídia usamos para registrar bugs?
Escolhas
Mostrar clientes
Falar com
Alternativas e sugestões
Clientes Entenda as necessidades do negócio
Comece simples
405
Machine Translated by Google
IMPULSIONANDO O DESENVOLVIMENTO
Neste ponto, estamos escrevendo principalmente testes que serão automatizados, mas também estamos
pensando no futuro, nos importantes testes exploratórios que precisamos fazer como codificação
está completo.
Comece simples
Como testadores, somos facilmente distraídos por cheiros de código interessantes e casos extremos.
No entanto, se estivermos usando testes para orientar a codificação, teremos que começar com o básico.
Escreva o teste do caminho da felicidade mais simples que puder para mostrar que o núcleo
funcionalidade funciona.
Por que testes executáveis? Estamos trabalhando com um cronograma extremamente apertado e
Capítulo 14, “Um
nem os programadores nem os testadores têm tempo para parar e executar o manual
Estratégia de
Automação Ágil”, testes repetidamente. Eles têm tempo para clicar em um botão e executar um teste automatizado. Esse
fornece dicas para teste precisa falhar de uma forma que torne a causa tão óbvia quanto
selecionar as ferramentas certas.
possível. Idealmente, daríamos esses testes aos programadores para que eles
poderia executá-los enquanto eles codificam. Essa é uma das razões pelas quais escolher o caminho certo
estrutura de automação é muito importante.
Para algumas histórias, automatizar os testes pode levar muito tempo. Ao manter o
primeiro teste simples, você mantém o foco no design da solução de automação.
Quando o teste simples funciona, vale a pena investir tempo em testes mais complexos
casos.
Adicione
complexidade Assim que o teste do caminho feliz funcionar, comece a adicionar mais
casos de teste. Adicione condições de limite e borda. Os testes podem mostrar que os
programadores entenderam mal um requisito, ou podem mostrar que um testador
entendeu, ou talvez o verdadeiro significado do requisito tenha escapado a todos. O
importante é que todos falem sobre isso e entrem no caminho certo.
À medida que os testadores pensam em novos cenários para validar com testes executáveis,
eles também pensam em cenários potenciais para testes exploratórios manuais. Anote-os para
pesquisa posterior.
Lembre-se do propósito desses testes. Eles devem fornecer exemplos que informem aos
programadores qual código escrever. À medida que o código evolui, seus testes podem desafiá-
lo ainda mais, mas resista à tentação de seguir imediatamente os cheiros até os casos extremos.
Faça o básico funcionar primeiro. Se você pensar em mais casos com base em alguma análise
de risco, poderá adicionar testes extras posteriormente.
Avalie o risco
Há muito tempo que os testadores usam a análise de risco para ajudar a priorizar os testes, e a
consideração do risco já está incorporada no desenvolvimento ágil. Histórias de alto risco
podem receber estimativas de tamanho maiores, e as equipes consideram o risco ao priorizar
histórias durante o planejamento do lançamento e da iteração.
Algumas análises rápidas de risco podem ajudá-lo a decidir quais testes fazer primeiro e onde
concentrar seus esforços. Nunca temos tempo para testar tudo e podemos usar a análise de
risco para descobrir quantos testes são suficientes.
Se você tiver uma história realmente complexa, você pode começar listando todos os riscos
potenciais relacionados à história. Eles não estão limitados à funcionalidade. Considere
segurança, desempenho, usabilidade e outras “ilidades”. Em seguida, para cada item, avalie o
impacto no negócio caso ele ocorra, usando uma escala de 1 a 5 (ou qualquer escala que
funcione para você): 1 sendo um impacto baixo, 5 sendo um impacto negativo crítico.
Agora, considere a probabilidade de cada item ocorrer, usando a mesma escala: 1 para nada
provável de acontecer e 5 para itens que provavelmente surgirão.
Multiplique as duas classificações para obter a classificação de risco total para cada item.
Isso torna mais fácil escolher as áreas onde sua equipe deve concentrar primeiro seus esforços
de teste. Os itens de baixo risco podem ser deixados para o final ou, porque o seu impacto é
baixo ou é altamente improvável que ocorram, podem nem sequer ser abordados.
Machine Translated by Google
Seu domínio faz uma grande diferença aqui. Se você estiver testando um software que executa
em marca-passos cardíacos, você provavelmente precisará cobrir todos os riscos com seus testes, não
não importa quão baixos ou improváveis eles sejam. Se você estiver testando um site interno da empresa
aplicativo a ser usado por alguns especialistas treinados no assunto, você pode estar
capaz de ignorar cenários improváveis ou que tenham uma solução alternativa óbvia.
História PA-5
velocidade se eu quiser.
A Figura 18-2 mostra uma possível avaliação de risco para esta história de custos de envio.
O item 8 é o item de maior risco, portanto, gostaríamos de testar a alteração dos endereços de entrega
e verificar os custos atualizados. Poderíamos querer automatizar um
Machine Translated by Google
teste ponta a ponta com este cenário. Não estamos muito preocupados com o item 5;
talvez já tenhamos testado nossa validação de código postal e nos sintamos bem com isso
isso, então não precisamos testá-lo mais. Você pode até ter um item de risco muito baixo
que você optou por não testar.
A história geralmente é uma boa professora. Anote os problemas anteriores e certifique-se de que eles
não aconteça novamente.
Vejamos como uma equipe poderia trabalhar na história dos custos de envio na Figura 18-1.
Patty Programmer pega um cartão de tarefas para codificar o custo estimado de envio
cálculos. Ela já entende a história muito bem das discussões anteriores, mas pode olhar as páginas wiki
ou o verso do cartão da história onde
os testadores escreveram alguma narrativa descrevendo o propósito da história,
alguns exemplos de como deveria funcionar e alguns testes de alto nível para fazer
certeza de que ela tem uma boa ideia de por onde começar. Tammy Tester vê essa codificação
o trabalho começou e começa a escrever casos de teste por trás da GUI para o custo
cálculos.
A equipe concordou durante o planejamento em começar calculando o custo de envio de 5 dias com base
no endereço de entrega e no peso do item. Os itens só podem ser
enviado dentro da América do Norte continental, mas essa validação será feita
na camada de apresentação, portanto os testes de cálculo de custos podem assumir apenas valores válidos
destinos são considerados para entrada. Eles estão usando uma API de cálculo de custos
fornecido pelo parceiro de transporte, e Tammy pergunta a Patty onde encontrar os algoritmos para que
ela mesma possa calcular o custo para escrever os testes. Tammy
escreve o caso de teste mais simples que ela consegue imaginar no teste por trás da GUI
ferramenta. Mostramos isso como uma tabela simples na Figura 18-3.
Patty ainda não terminou o código que faria esse teste passar, então Tammy
começa a trabalhar em outra tarefa de teste para a história, configurando o ambiente de teste
para funcionar com o sistema de teste do parceiro de remessa.
Identificar variações
Como esta história e o teste são tão simples, Patty e Tammy não
discuta o design do teste e ajuste-o como fariam em histórias mais complexas.
Eles também não precisaram fazer mais perguntas ao proprietário do produto ainda. Patty
chama Tammy para mostrar que o teste simples agora está funcionando. Tammy
escreve mais casos de teste, tentando diferentes pesos e destinos dentro
os Estados Unidos. Tudo isso funciona bem. Ela tenta um código postal canadense e
o teste obtém uma exceção. Ela mostra isso para Patty, que percebe que a API
o padrão é o código postal dos EUA e requer um código de país para códigos no Canadá e no
México. Ela ainda não havia escrito nenhum teste unitário para outros países.
Eles revisam as entradas de teste e Patty se junta a Paul Programmer para mudar
o código que chama a API. Agora o teste se parece com a Figura 18-4.
Este exemplo simples ilustra as idas e vindas iterativas entre codificação e teste. Equipes
diferentes adotam abordagens diferentes. Patty e Tammy
pode emparelhar tanto na codificação quanto no teste. Tammy pode formar dupla com Paul para
escreva o fixture para automatizar o teste. Tammy pode estar em um escritório remoto,
usando uma ferramenta de colaboração online para trabalhar com Patty. Patty pode escrever o
a história executável testa a si mesma e depois escreve o código para fazê-los funcionar,
praticando o desenvolvimento orientado a testes de histórias reais. A questão é que testar e
codificação fazem parte de um processo de desenvolvimento no qual todos os membros da equipe
participar.
Tammy pode continuar a identificar novos casos de teste, incluindo casos extremos e
condições limite, até que ela sinta que todas as áreas de risco foram cobertas pelo
quantidade mínima e variedade de casos de teste. Ela pode testar com o mais pesado
item disponível no site enviado para o destino mais caro. Ela
pode testar ter uma grande quantidade do mesmo item. Alguns casos extremos podem ser
tão improvável que ela não se preocupe com eles, ou decida fazer um teste, mas
depois de aprovado, não o inclui no conjunto de regressão. Alguns testes podem ser
é melhor fazer manualmente depois que uma IU estiver disponível.
Machine Translated by Google
Patty escreveu testes unitários tendo o Havaí como destino de envio, mas
Tammy acredita que apenas destinos continentais são aceitáveis. Nem de
eles têm certeza se os destinos de caixas postais militares são aceitáveis.
Eles vão ver a proprietária do produto Polly para perguntar o que ela pensa. Eles estão usando o
Poder de Três. Quando surgem divergências ou dúvidas, ter três pontos de vista diferentes é uma
maneira eficaz de garantir que você obtenha uma boa solução e
você não terá que refazer o problema mais tarde. Se um dos participantes da discussão não estiver
familiarizado com o tema, os demais terão que organizar suas
pensamentos para explicá-lo claramente, o que é sempre útil. Envolver pessoas em diferentes
funções ajuda a garantir que as mudanças nos requisitos não sejam ignoradas.
radar e surpreender os membros da equipe mais tarde.
Quando surgem problemas inesperados, como sempre acontece, a regra do Poder de Três
é um ótimo lugar para começar. Você pode precisar atrair mais pessoas, ou até mesmo o
toda a equipe, dependendo da gravidade ou complexidade do problema. E se o
A API do parceiro de remessa é tão lenta que o tempo de resposta no
site será inaceitável? Tanto a equipe de desenvolvimento quanto o cliente
a equipe precisa explorar rapidamente soluções alternativas.
Paul procura uma tarefa de programação para trabalhar. Embora as tarefas de UI para o
a história do custo de envio estimado ainda está na coluna “tarefas pendentes” da tarefa
quadro, ele está mais interessado na história para deletar itens do shopping
carrinho, então ele pega uma dessas cartas. Ninguém tem tempo para começar a escrever o
testes executáveis para essa história, então ele avança sozinho.
Agora a equipe tem duas histórias. Eles realmente não sabem quanto tempo
será necessário para terminar qualquer uma das histórias. Uma abordagem muito melhor seria Paulo
comece a trabalhar em uma tarefa de UI para a primeira história para que essa história possa ser concluída
mais cedo. Quando uma história termina (ou seja, todo o código é escrito e testado),
você sabe exatamente quanto trabalho resta fazer: zero. Se o desastre acontecesse
e nenhuma outra história foi concluída nesta iteração, há pelo menos uma concluída
história para lançar.
Concluir a história toda não é um conceito de teste, mas é algo que os testadores deveriam
promover e seguir. Se um programador começou a codificar uma história, certifique-se
alguém também começou a trabalhar em tarefas de teste para essa história. Este é um ato de
equilíbrio. E se ninguém tiver escrito testes de alto nível para os itens excluídos?
história? Talvez essa seja a maior prioridade de teste? Normalmente, terminar uma história
deve ser o objetivo antes que a equipe possa passar para a próxima história.
Machine Translated by Google
A menos que a equipe seja muito pequena, sempre há mais de uma história em andamento
a qualquer momento. Pode ser mais difícil, mas tente se concentrar em terminar um
história de cada vez. Patty está prestes a encerrar a história do custo do frete, e Paul
passou para a história de exclusão de itens. Patty se depara com um obstáculo e não tem certeza
como resolver isso. Paul a ajuda a terminar o código para que Tammy possa terminá-lo
testes exploratórios e eles podem marcar a história como “concluída”. Agora eles têm uma ideia melhor de
quanto ainda lhes resta para terminar esta iteração (ou pelo menos, quanto
muito que eles ainda não precisam trabalhar).
Às vezes, várias histórias diferentes podem ser feitas ao mesmo tempo se um programador e um testador
se unirem para completar cada história juntos. Isso funciona se o
as histórias são pequenas e independentes. O que você não quer ver são programadores iniciando a
codificação sem que as tarefas de teste sejam concluídas ao mesmo tempo.
guiado sua passagem de codificação, reserve um tempo para explorar a funcionalidade mais profundamente.
Experimente diferentes cenários e aprenda mais sobre o comportamento do código. Você deve
tenha cartões de tarefas para testes que criticam o produto, tanto voltados para negócios quanto para
tecnologia. A história não estará “pronta” até que todos esses tipos de testes sejam concluídos.
Isto se torna mais importante quando todas as tarefas, exceto o teste, são concluídas para um
história. Agora você deve ser capaz de testar desde uma extremidade do fio da história até o
outra extremidade, com todas as variações intermediárias. Não adie esse teste. Você
pode encontrar requisitos que estavam na história, mas foram perdidos nos testes que
impulsionou o desenvolvimento e, portanto, está faltando no código. Agora é a hora de escrever
aqueles testes e códigos ausentes. Preencha todas as lacunas e agregue mais valor enquanto o
a equipe ainda está focada na história. Fazer isso mais tarde custará muito mais.
Esteja ciente de que parte do que você aprende ao testar a história final pode ser considerada “bom de se
ter”, talvez tornando a funcionalidade mais fácil ou rápida de usar.
Capítulo 10,
“Visado para negócios itens que não faziam parte da história original. Consulte seu cliente. Se
Testes que Criticam o há tempo para adicioná-lo na iteração e a empresa pode usar o extra
Produto” e o Capítulo valor, vá em frente. Essas adições são muito mais baratas de adicionar agora. Mas não
11, “Testes
comprometer outras histórias gastando muito tempo adicionando “bling” que
voltados para a
tecnologia que Criticam não tem um grande ROI.
o Produto”, ajudarão
você a garantir a
Se o seu teste exploratório levar a equipe e os clientes a perceberem que
cobertura de todos os
funcionalidades significativas não foram cobertas pelas histórias, escreva novas histórias para
testes necessários
que criticam o produto. iterações futuras. Mantenha um controle rígido sobre o “aumento do escopo” ou sua equipe não terá
tempo para entregar o valor que você planejou originalmente.
Machine Translated by Google
Testes voltados para a tecnologia para criticar o produto geralmente são mais bem realizados durante
codificação. Este é o momento de saber se o projeto não é dimensionável ou se há falhas de
segurança.
Teste de pares
Paul Programmer concluiu a interface do usuário para a história das opções de envio estimadas,
mas ainda não fez o check-in. Ele pede a Tammy para sentar
com ele e demonstra como o usuário final inseriria o endereço de entrega durante o processo de
finalização da compra. O custo de envio estimado é exibido à direita
ausente. Tammy altera o endereço de entrega e vê o novo custo aparecer. Ela
insere um código postal que não corresponde ao resto do endereço e vê o
mensagem de erro apropriada será exibida. A IU parece boa para ambos, então
Paul verifica o código e Tammy continua com seu manual exploratório
testando isso.
Janet gosta que o programador “dirija” durante essas sessões de testes em pares
enquanto ela observa o que acontece. Ela acha que é muito mais eficaz do que
assumindo o controle do teclado e do mouse enquanto o programador assiste.
"Mostre-me"
membros trabalham em fusos horários muito diferentes, é ainda mais difícil. Atenha-se
a comunicação mais direta disponível para você. Um dos companheiros de equipe de Lisa está em
um fuso horário 121 ÿ2 horas à frente. Ele trabalha até tarde da noite, e quando
necessário, ele liga para Lisa e eles trabalham juntos nos resultados dos testes e nos exemplos.
O simples ato de mostrar a GUI para outra pessoa pode ajudar Paul a perceber
A bibliografia
contém ele implementou algum comportamento errado. Da mesma forma, se Tammy estiver tendo
referências para problemas para fazer seu script de teste GUI funcionar, explicar o problema pode ser
leitura adicional o suficiente para ela perceber o que está causando isso. Se não houver ninguém disponível para olhar
sobre este assunto. no que você acabou de codificar ou ajudá-lo a depurar um problema, às vezes ajuda
explique em voz alta para si mesmo. “Esquecimento de borracha” e “Pensando em voz alta”
são maneiras surpreendentemente eficazes de resolver seus próprios problemas. Janet gosta de ter
seu próprio patinho de borracha em sua mesa para se lembrar de pensar antes de perguntar.
Esperamos que você tenha conseguido revisar os casos de teste com os clientes, ou com alguém que
pudesse representar o cliente, antes do início da codificação. Se não, nunca é
tarde demais. Para situações em que os clientes precisam estar mais envolvidos com o
detalhes dos testes executáveis, certifique-se de encontrar ferramentas de teste que funcionem para eles como
bem como para membros da equipe técnica.
Como descrevemos nos dois últimos capítulos, você já deve ter repassado
maquetes ou protótipos de papel com seus clientes. Se as tarefas para simular um relatório ou interface
permanecerem no plano de iteração, lembre-se de manter o processo
simples. Por exemplo, não codifique um protótipo HTML ao desenhar em um
quadro branco também servirá. Queremos manter o processo o mais simples possível; a simplicidade é um
valor fundamental.
Mostrar clientes
Assim que uma interface de usuário ou relatório codificado estiver pronto, mesmo que ainda seja rudimentar,
sem todos os recursos ou exibindo dados codificados, mostre-os ao apropriado
clientes. Ninguém pode explicar exatamente o que quer com antecedência. Eles
precisa ver, sentir e usar o aplicativo para saber se está certo. Você pode não estar
Machine Translated by Google
capaz de implementar grandes mudanças no meio da iteração, mas se você começar cedo, pode haver
será hora de pequenos ajustes e seus clientes saberão o que esperar.
A reunião de revisão da iteração é uma ótima oportunidade para mostrar o que a equipe
entregue e obtenha feedback para a próxima iteração, mas não espere até então para
obter informações dos clientes. Mantenha-os envolvidos durante toda a iteração.
Entenda o negócio
Embora sejamos apanhados pelo ritmo acelerado das iterações, também precisamos parar
e reserve um tempo para entender melhor o negócio. Passe algum tempo conversando com
empresários sobre seus empregos e quais aspectos podem ser melhorados com
novos recursos de software. Quanto melhor você entender o negócio do seu cliente,
melhor você poderá fornecer um bom produto.
Minha equipe reserva tempo para cada membro da equipe de desenvolvimento sentar-se com os
A história de Lisa
membros da equipe de administração do plano de aposentadoria enquanto eles realizam seu
trabalho diário. Não apenas entendemos melhor essas tarefas, mas frequentemente identificamos
pequenas alterações na aplicação que facilitarão o trabalho do administrador.
Adições simples, como alguns dados extras fornecidos, um filtro de pesquisa adicional ou alterar a
ordem de uma exibição podem fazer uma grande diferença em um processo tedioso e detalhado.
Também documentamos o que aprendemos com fluxogramas e páginas wiki para que outros
membros da equipe possam se beneficiar.
—Lisa
Algumas equipes, na verdade, sentam-se permanentemente com os empresários para que eles
estão envolvidos com o negócio real diariamente.
Se você vir isso, reconheça como um cheiro ruim. Trabalhe com a equipe para determinar qual pode
ser o problema. Os programadores não estão trabalhando suficientemente próximos dos testadores?
Houve muitas interrupções?
A maneira de enfrentar esse perigo é envolver toda a equipe. Lembre-se de que qualquer pessoa da
equipe pode se inscrever para tarefas de teste. No seu stand-up diário, você pode avaliar se a equipe
está no caminho certo para finalizar todas as histórias. Se várias histórias correm o risco de não serem
concluídas, escolha uma história para descartar ou reduza o escopo de uma ou mais histórias.
Concentre-se em completar uma história de cada vez. À medida que o fim da iteração se aproxima, os
programadores podem ter que parar de trabalhar em novos recursos e começar a realizar tarefas de
teste. Perder alguma funcionalidade de uma versão é melhor do que perder a versão inteira porque o
teste não pôde ser concluído em todas ou na maioria das histórias.
Todos na equipe também devem estar dispostos a realizar tarefas de teste manuais. Se
sua equipe está apenas começando e não conseguiu atender às necessidades de automação
ainda assim, toda a equipe deve planejar um tempo para executar o teste de regressão manual
scripts, bem como testar manualmente novos recursos. Como a equipe de Lisa pode atestar, isso
tarefa fornece grande motivação para aprender como projetar o aplicativo para
facilitar a automação de testes. Outras equipes nos dizem que isso também funcionou para elas.
desperdício. Algumas equipes simplesmente corrigem os bugs assim que são descobertos. Eles escrevem um
teste de unidade para reproduzir o bug, corrija o código para que o teste passe, verifique o teste
e a correção do bug e continue. Se alguém quebrar esse trecho de código mais tarde, o teste
irá capturar a regressão.
Adicionamos esta seção a este capítulo porque é quando você se depara com o
problema. Você tem escrito testes primeiro, mas está encontrando problemas à medida que
trabalhar com o programador. Você registra um bug? Se sim, como? Você tem feito
seu teste exploratório e encontrou um bug em uma história que foi marcada como concluída.
Você registra um bug para isso? Vamos discutir mais sobre defeitos e considerar as opções que
estão disponíveis para você e sua equipe.
Primeiro, vamos falar sobre defeitos versus recursos. A velha questão do software
desenvolvimento é: “O que é um bug”? Algumas respostas que ouvimos são: É um desvio dos
requisitos ou é um comportamento que não é o esperado. De
é claro que existem alguns defeitos realmente óbvios, como saída incorreta ou mensagens de erro
incorretas. Mas o que realmente importa é a percepção do usuário sobre o
qualidade do produto. Se o cliente disser que é um defeito, então é um defeito.
No final das contas, realmente importa se é um bug ou um recurso se precisa ser corrigido?
O cliente escolhe as prioridades e a proposta de valor. Se a qualidade do software
Machine Translated by Google
é uma prioridade mais alta para o cliente do que obter todos os novos recursos, então
devemos tentar consertar todos os defeitos à medida que os encontramos.
Os clientes da equipe usam seu conhecimento para dar o melhor conselho possível
para a equipe no desenvolvimento diário. No entanto, quando um produto vai para
UAT e está exposto a uma base de clientes maior, sempre haverá solicitações em
na forma de bugs ou novas melhorias.
Dívida Técnica
Uma maneira de pensar nos defeitos é como uma dívida técnica. Quanto mais tempo um defeito
Capítulo 6, “O
permanece no sistema e não é detectado, maior será o impacto. Também é verdade
Finalidade do
teste”, explica como que deixar bugs apodrecendo em uma base de código tem um efeito negativo na qualidade do código,
os testes ajudam a intuitividade do sistema, flexibilidade do sistema, moral da equipe e velocidade. Consertando um
gerenciar o débito técnico.
defeitos no código com bugs podem revelar mais, então as tarefas de manutenção demoram mais.
Acho que tudo se resume a uma comunicação excepcional entre os testadores, os desenvolvedores
e os analistas de negócios. A disciplina também foi fundamental, porque estabelecemos a meta
de encerrar iterações com recursos totalmente desenvolvidos, funcionais, implantáveis e livres
de defeitos, ao mesmo tempo em que nos esforçamos para evitar cair em uma armadilha em
cascata. Para nós, evitar a cascata significava que tínhamos que manter o alinhamento com o
código e as atividades de teste; tentamos planejar as atividades de uma iteração para que os
casos de teste de um determinado recurso fossem projetados e automatizados ao mesmo tempo
em que o código desse recurso era escrito. Nós
rapidamente descobrimos que estávamos praticando uma forma de desenvolvimento orientado
a testes. Não acho que tenha sido TDD puro, porque na verdade não estávamos executando
os testes até que o código fosse verificado, mas estávamos desenvolvendo os testes enquanto
os desenvolvedores escreviam o código, e os desenvolvedores nos perguntavam como
nossos testes estavam estruturados e o que nossos resultados esperados foram.
Machine Translated by Google
Por outro lado, perguntávamos regularmente aos desenvolvedores como eles estavam
implementando um determinado recurso. Esse tipo de questionamento bidirecional muitas
vezes aumentava as inconsistências na forma como os requisitos eram interpretados e,
em última análise, destacava defeitos em nossas interpretações antes que o código
fosse realmente confirmado.
Todas as manhãs, durante nosso Scrum, garantimos ainda mais a paridade entre os grupos
funcionais da equipe por meio de um diálogo simples. A comunicação era ridiculamente boa –
sentávamos perto um do outro, muitas vezes até no mesmo computador. Quando um defeito
era descoberto, o desenvolvedor estava ali observando, tomando notas e conversando sobre
os requisitos. Um analista de negócios estava sempre por perto para validar ainda mais
nosso pensamento. Muitas vezes, em poucos minutos, uma resolução era registrada,
implantada no ambiente de teste e verificada.
Tanto os desenvolvedores quanto os testadores tiveram que estar comprometidos com essa
abordagem ou ela não teria funcionado. Sem disciplina, os desenvolvedores poderiam
facilmente ter avançado para mais recursos e deixado os bugs passarem até o final do projeto,
arriscando uma iteração incompleta. Se não estivéssemos co-localizados como estávamos,
a comunicação teria sido prejudicada; provavelmente um sistema de rastreamento de bugs
ou e-mail teria se tornado nosso principal meio de comunicação de defeitos, resultando em
tempos de resposta mais longos e em uma maior probabilidade de retrabalho.
Como parte de qualquer desenvolvimento, você sempre precisará fazer concessões. Seu
equipe pode decidir lançar com alguns bugs pendentes porque é considerado
mais importante lançar novas funcionalidades do que consertar problemas de baixo nível
insetos.
As equipes resolveram o problema de como lidar com defeitos de muitas maneiras diferentes.
caminhos. Algumas equipes colocam todos os seus bugs em cartões de tarefas. Outras equipes
optaram por escrever um cartão, avaliá-lo e programá-lo como uma história. Outros ainda sugerem
adicionando um teste para cada bug – dessa forma você não precisa registrar o defeito, apenas
o teste.
Existe um caminho certo? Claro que não! Mas, como você sabe o que é certo para
seu time? Temos algumas sugestões para ajudá-lo a escolher e decidir o que é
certo para você. Pense na sua equipe e no seu produto e no que pode
trabalhe na sua situação. Primeiro, falaremos sobre quais defeitos devemos registrar,
então falaremos um pouco sobre quando você deve corrigi-los e, finalmente, veremos
que mídia escolher. A combinação certa dependerá de quão longe
sua equipe está em sua jornada ágil e quão maduro é seu produto.
Machine Translated by Google
Não registre falhas em testes de unidade. Se você faz parte de uma equipe que pratica TDD
(desenvolvimento orientado a testes) e tem boa cobertura com seus testes unitários, você
saiba que os testes que falharam durante a construção não devem ser registrados. Um teste falhado
durante a construção de integração contínua é um sinal para os programadores
resolver o problema imediatamente. Registrar esses bugs seria redundante e
uma perda de tempo.
Muitas equipes têm compilações que executam testes de regressão acima do nível da unidade, como
testes por trás da GUI e testes por meio da GUI. Quando uma dessas construções
falhar, você deve registrar o bug em um DTS?
Temos duas compilações, uma “compilação contínua” que executa apenas testes de unidade e uma “compilação completa”
A história de Lisa
que executa os testes funcionais por trás e por meio da GUI. Quando a “construção completa”
quebras, se um desenvolvedor investigar e resolver o problema imediatamente, como às vezes
acontece, geralmente nenhum bug é registrado. O problema é resolvido rapidamente. Outras
vezes, o fracasso não é simples. Um dos testadores investiga, restringe o problema e registra um
bug que indica o nome do teste com falha ou fornece etapas manuais para recriar o problema.
Em ambos os casos, são escritos testes que reproduzem o bug e o código é corrigido para que os
testes sejam aprovados. Os testes passam a fazer parte de uma das compilações.
—Lisa
Não registre bugs que possam ser corrigidos imediatamente, especialmente se você os registraria em uma
ETED eletrônica. Se sua equipe estiver trabalhando em estreita colaboração com
Machine Translated by Google
Para os programadores e estiver praticando testes em pares assim que uma história for
concluída, recomendamos fortemente que você não registre esses bugs, desde que o
programador os resolva imediatamente. Ao notar problemas, converse sobre eles com o
programador e decida se são problemas reais ou não. Converse com o cliente se precisar,
mas faça algumas anotações para lembrar o que viu e poder ajustar seus testes, se
necessário.
Se você estiver usando fichas para registrar bugs, você pode colocar uma ficha no quadro
de tarefas (ou um cartão no quadro eletrônico) apenas como um lembrete.
Bugs pós-iteração (ou aqueles que não podem ser corrigidos imediatamente)
Registre bugs que não podem ser corrigidos imediatamente. Enfatizamos os testes
antecipadamente para detectar o máximo de bugs possível enquanto os programadores
ainda estão trabalhando na história. Sabemos que é mais barato consertá-los quando
detectados precocemente; no entanto, às vezes simplesmente não os pegamos
imediatamente. O programador passou para outra história e não pode largar tudo para
consertar agora. Esses são os bons candidatos para registro. Às vezes, um “bug” é realmente
um requisito perdido e precisa ser tratado como uma história – estimada e priorizada para
uma iteração futura.
Encontrado em produção
Registre todos os bugs de produção. Quando sua aplicação estiver em produção, todos os
bugs encontrados pelo cliente deverão ser registrados. Dependendo da gravidade, esses
bugs podem ser corrigidos imediatamente, no momento do próximo lançamento, ou serão
estimados, priorizados e colocados no backlog do produto.
bugs na história em que ele está trabalhando. A triagem pode ser uma discussão com o
proprietário do produto para determinar se deve haver outra história para a próxima iteração. A triagem
também pode ser um processo formal com os clientes para priorizar quais bugs corrigir.
Conserte agora
Quanto mais bugs você puder corrigir imediatamente, menos dívida técnica sua aplicação gerará e
menos inventário de “defeitos” você terá. Os defeitos também são
mais barato para consertar quanto mais cedo forem descobertos. Em um artigo na revista iSixSigma,
Mukesh Soni [2008] cita um relatório da IBM de que o custo para consertar um
O erro encontrado após o lançamento do produto foi de quatro a cinco vezes maior do que um erro não
coberto durante o projeto, e até 100 vezes mais do que um identificado no
fase de manutenção (ver Figura 18-5).
A Figura 18-5 mostra uma estatística baseada em metodologia faseada, mas a estatística
ainda vale para o desenvolvimento ágil. É mais barato consertar bugs encontrados
durante o desenvolvimento do que depois.
Se um defeito for encontrado durante o desenvolvimento de um novo recurso ou for um efeito colateral
de outra correção de bug, ele deverá ser corrigido automaticamente. Mas, como sempre, isto deve ser
aplicado com prudência. Por exemplo, se for encontrado um bug que os programadores dizem
será difícil de consertar e poderá desestabilizar o produto, deve-se tomar
os clientes devem priorizar.
120
100x
100
80
60
40
20 15x
1x 6,5x
0
Figura 18-5 Custos relativos para corrigir defeitos de software (Fonte: Sistemas IBM
Instituto de Ciências)
Machine Translated by Google
Se você corrigir os bugs durante o desenvolvimento, diminuirá a presença de bugs posteriormente no processo. A
velocidade da sua equipe pode incluir tempo para corrigir bugs. Com o tempo, os membros da sua equipe terão uma
boa ideia de quanto tempo gastam corrigindo bugs encontrados pelos testadores de uma história. Felizmente, existem
poucos. Se sua equipe for uma nova equipe ágil, pode haver alguns bugs que escapam ao desenvolvimento, mas à
medida que a equipe fica mais confortável com as ferramentas e os processos, o número de bugs encontrados
diminuirá. Para começar, tente fazer uma estimativa para uma história incluir duas horas ou meio dia para corrigir bugs
associados.
Equipes diferentes têm maneiras diferentes de lidar com defeitos. Algumas equipes acreditam que todos os defeitos
encontrados devem ser priorizados pelos clientes antes de serem colocados na lista para correção. Eles acreditam que
cabe inteiramente ao cliente determinar se realmente são defeitos e, em caso afirmativo, se devem ser corrigidos.
Nunca conserte
Sua equipe reconheceu um defeito, mas sabe que ele não será corrigido. Talvez essa seção do código precise de uma
reescrita completa posteriormente porque a funcionalidade mudará, ou talvez seja apenas um problema de baixa
prioridade ou tão obscuro que seus clientes talvez nunca o encontrem. Há uma infinidade de razões pelas quais isso
não será corrigido. Se a sua triagem determinar que este é o caso, sugerimos que você simplesmente feche o bug. Não
Escolha a mídia que você deve usar para registrar um bug Quando falamos sobre
mídia, queremos dizer a variedade de maneiras pelas quais você pode registrar um bug. Pode ser um sistema de
rastreamento de defeitos ou fichas, ou talvez você opte por não ter nenhum registro físico.
Cartões de índice
Os cartões de índice (sejam cartões reais ou virtuais em um sistema de planejamento e rastreamento on-line) não
deixam muito espaço para muitos detalhes administrativos, mas dão grande visibilidade às questões pendentes quando
são fixados no storyboard, especialmente se eles estiverem em outra cor. Algumas equipes usam impressões de tela e
grampeiam-nas no verso do cartão ou escrevem os detalhes em um arquivo de texto, ou até mesmo gravam as etapas
em formato de áudio em um gravador de voz portátil.
Existem muitas opções, mas sugerimos que você escolha uma que contenha informações suficientes para orientar
alguém na reprodução de um problema ou para focar uma discussão quando o programador estiver pronto para corrigi-
lo. O cartão é tangível. Quinhentos bugs em uma ETED são apenas um número. Uma pilha de 500 cartas é
impressionante.
Machine Translated by Google
Você é uma equipe ágil disciplinada e está corrigindo todos os bugs em uma iteração.
Você tem bugs que escapam de uma iteração e precisa se lembrar de corrigi-los mais tarde.
De uma forma ou de outra, você provavelmente desejará ter algum tipo de DTS para registrar
alguns dos erros. Isso não significa que você precise registrar todos eles. Seja esperto
sobre quais você registra.
Nenhum mesmo
Por que você não registraria um bug? A maioria das equipes com as quais trabalhamos definiu
regras para si mesmos que nenhum bug é corrigido sem um teste de unidade. Se você também tem um
suíte de automação funcional, então você pode detectar bugs maiores com eles.
O argumento é que se houver um teste que detecte o bug, você não tem
precisa registrar o bug. Qualquer coisa aprendida com a correção do bug foi capturada em
o teste e o código. No entanto, você precisa reconhecer que nem todos os testes são
fácil de automatizar.
quadros e pendências de projetos. Eles usam testes de forma eficaz e aprendem quais bugs
registrar e quais métricas fazem sentido para sua equipe. Nesta seção, compartilharemos
algumas ideias que outras equipes encontraram que funcionam para elas.
Defina as regras
Estabeleça regras como: “O número de cartas rosa (bugs) nunca deve ultrapassar
dez de cada vez.” Revise-os sempre que tiver uma retrospectiva da equipe. Se
sua taxa de defeitos está diminuindo, não se preocupe. Se a tendência for oposta, gaste
tempo analisando a causa raiz dos bugs e criando novas regras para mitigá-los.
Não se esqueça de corrigir bugs de baixa prioridade encontrados durante a iteração também, porque
eles afetam o desenvolvimento futuro. Em nossa experiência, há
parece haver uma forte correlação entre “baixa prioridade” e “rápida solução”, embora não tenhamos
fatos concretos para apoiar isso. Sugerimos parar pequenos,
insetos isolados antes que se tornem insetos grandes e emaranhados.
Combinar insetos
Se você encontrar muitos bugs em uma área, pense em combiná-los em uma melhoria ou história.
Quando comecei a trabalhar na WestJet, encontrei vários pequenos problemas com o aplicativo móvel.
A história de Janete
O aplicativo funcionou corretamente, mas fiquei confuso quanto ao fluxo.
Só encontrei esses problemas porque era novo e não tinha percepções anteriores.
A equipe decidiu agrupar as questões que eu havia levantado e encarar toda a questão como uma
nova história. Depois de estudar o problema completo com todos os detalhes conhecidos, o resultado final
o resultado foi um recurso sólido. Se os bugs tivessem sido corrigidos aos poucos, o efeito não
teria sido tão bonito.
—Janet
Se uma funcionalidade de “bug” realmente estiver faltando, opte por escrever um cartão para o bug
e programe-o como uma história. Essas histórias são estimadas e priorizadas assim como
qualquer outra história. Esteja ciente de que as histórias de bugs podem não receber tanta atenção
como as novas histórias de usuários no backlog do produto. Também leva tempo para criar o
história, priorizá-la e programá-la.
Machine Translated by Google
O backlog oculto
Antony Marcano, autor de www.TestingReflections.com, ressalta que, embora as histórias de
usuários e seus testes de aceitação descrevam o comportamento desejado, os relatórios de defeitos
descrevem o mau comportamento. Por trás de cada mau comportamento está um comportamento
desejado, muitas vezes não definido previamente. Assim, por trás de cada relatório de defeito pode
haver uma história de usuário oculta. Ele explica suas experiências.
Métricas de bugs são tudo o que resta. As métricas de bugs são tradicionalmente
usadas para ajudar a prever quando o software estará pronto para lançamento ou
para destacar se a qualidade está melhorando ou piorando. Nas abordagens de
teste primeiro, em vez de nos dizer se a qualidade está a melhorar ou a piorar,
diz-nos até que ponto éramos bons a prever os testes – ou seja, quão grandes
eram as lacunas no nosso pensamento original. Esta é uma informação útil
para retrospectivas e pode ser alcançada simplesmente marcando cada teste com
detalhes de quando ele foi identificado – elaboração da história, exploração pós-
implementação ou em produção. Quanto a prever quando seremos capazes de
lançar – quando estivermos completando software de “qualidade liberável” a cada
iteração – esse trabalho é feito por gráficos de burn-down/burn-up e similares.
O “em vez de” foi entendido pelo cliente como significando “isso é algo que acontece
atualmente” – o que é um mau comportamento e não apenas um comportamento ainda a ser
implementado.
Usando essa abordagem apenas de teste para capturar bugs, percebi que histórias
inspiradas em bugs são priorizadas mais como iguais às histórias de usuários de novos
recursos, enquanto antes muitas vezes davam mais atenção aos “novos recursos interessantes”
no backlog do produto do que os maus comportamentos descritos no rastreamento de bugs.
Foi então que percebi que os sistemas de rastreamento de bugs estão essencialmente
ocultos, ou pendências secretas.
Agora, se estou treinando uma equipe no meio do projeto, eu a ajudo a encontrar maneiras
melhores e mais rápidas de escrever testes automatizados. Eu os ajudo a usar essas
melhorias na escrita de testes automatizados derivados de bugs. Eu os ajudo a encontrar
a história apropriada – nova ou existente – e os ajudo a aproveitar as informações agregadas
úteis para retrospectivas. Eventualmente, eles chegam à mesma conclusão que eu: o
rastreamento tradicional de bugs começa a parecer um desperdício e redundante. É quando
eles decidem que não querem mais ou não precisam mais de um backlog oculto.
Se os bugs forem simplesmente registrados em uma DTS, informações importantes poderão ser
efetivamente perdidas do projeto. Quando escrevemos testes de aceitação para impulsionar o
desenvolvimento, tendemos a focar no comportamento desejado. Aprender sobre o comportamento
indesejado de um defeito e transformá-lo em histórias é um acréscimo vital para produzir a
funcionalidade certa.
Cada equipe precisa determinar o processo que funciona para ela e como fazer
esse processo facilmente visível. A história a seguir é sobre um processo que funcionou
para Janete.
Há alguns anos, trabalhei em um sistema legado com muitos bugs já registrados no sistema antes da
A história de Janete
introdução do ágil. Um dos desenvolvedores foi inflexível ao afirmar que não usaria um sistema de
rastreamento de defeitos. Ele acreditava firmemente que eles
Machine Translated by Google
foram uma perda de tempo. No entanto, os testadores precisavam dos defeitos registrados porque
eram muitos.
A equipe chegou a um acordo que funcionou para todos. Bugs encontrados durante testes em
pares com os programadores não foram registrados, pois foram corrigidos imediatamente. Todos os
outros foram registrados na ETED. Os bugs que precisavam ser corrigidos na iteração atual foram
registrados em cartões rosa com o resumo e o número do bug e depois colocados no storyboard.
Todos os outros passaram a fazer parte do backlog do produto.
Os testadores fecharam bugs e fizeram a maior parte da administração, porque o DTS era seu
requisito. Depois de um tempo, os programadores começaram a inserir o que consertaram
no sistema de rastreamento de defeitos porque era mais fácil do que escrever no cartão. A equipe
ainda continuou a usar os cartões por causa da visibilidade. Foi fácil ver rapidamente quantos bugs
pendentes havia na iteração ou no backlog.
—Janet
Essa abordagem funcionou para esta equipe porque havia muita disciplina
a equipe, e a maioria dos novos bugs foram corrigidos na iteração se fizessem parte
a funcionalidade nova ou alterada. Os únicos bugs que entraram no backlog
eram bugs legados considerados de baixo risco.
Comece simples
Outra ideia poderia ser criar uma lista contínua de “iniciar, parar, continuar” para que
Mais sobre retro-
você pode se lembrar de alguns dos problemas durante a retrospectiva da iteração.
perspectivas no
Capítulo 19,
“Concluir a Iteração”.
FACILITAR A COMUNICAÇÃO
O stand-up é um bom momento para observar o progresso. Use gráficos grandes e visíveis, como
como storyboards, gráficos burndown e outras dicas visuais para ajudar a manter o foco
e conheça seu status. Se o fim da iteração estiver próximo e a codificação
em uma história parece “travada”, levante uma bandeira vermelha e pergunte à equipe o que pode ser feito
sobre isso. Talvez algum emparelhamento ou ajuda extra faça as coisas andarem. Lisa sempre notou
quando ainda há muitos testes a fazer e o tempo está se esgotando. Ela
pede ajuda para compensar a folga. Toda a equipe se concentra no que precisa
ser feito para completar cada história e fala sobre a melhor abordagem.
Os testadores podem ajudar a manter o progresso da iteração sem problemas, ajudando a fazer
certeza de que todos estão se comunicando o suficiente. Converse com os programadores quando eles
comece a trabalhar em uma história e certifique-se de que eles a entendam. Lisa descobre que
ela pode escrever todos os testes e exemplos que quiser no wiki da equipe, mas se
ninguém se preocupa em lê-los, eles não ajudam. Na dúvida, ela vai até lá
requisitos e testes com o programador que pega os cartões de tarefas.
Os programadores sempre terão dúvidas enquanto desenvolvem uma história, mesmo que
entender bem o negócio e a história. É melhor se um cliente estiver disponível
Machine Translated by Google
Estávamos tendo problemas para fazer com que os desenvolvedores conversassem com os
empresários sobre suas suposições. Quando eles conversavam, o testador muitas vezes
ficava de fora. O testador às vezes discutia algo com a empresa, mas nunca repassava ao
desenvolvedor. Nossa gerente de projeto, Janice, decidiu tentar mudar o comportamento
por meio de uma competição amigável.
Todos os desenvolvedores receberam fichas de pôquer azuis com um “D” escrito nelas.
Todos os testadores receberam uma ficha vermelha com um “T” e os empresários receberam
fichas amarelas com um “B”. Sempre que alguém se encontrasse com alguém de outra
área, ele poderia trocar uma ficha com cada pessoa. O objetivo era obter os conjuntos de chips
mais completos: TBD. O vencedor ganhou um troféu TBD personalizado, decorado com os
três tipos de fichas. O resultado final foi que todos ficaram muito mais interessados em se
encontrarem porque ganhariam mais fichas!
A história de Lisa
Quando os participantes de planos de aposentadoria desejam sacar dinheiro de suas contas, muitas
regras complexas de aquisição de direitos e regulamentações governamentais entram em jogo. Piora
se o participante já retirou dinheiro no passado. Trabalhando em uma história para calcular o saldo
adquirido de um participante, todos os membros da minha equipe tinham ideias diferentes sobre o algoritmo
correto, embora o proprietário do produto tivesse trabalhado
Machine Translated by Google
vários exemplos no início da iteração. Meu colega testador, Mike, pediu ao proprietário do produto
que trabalhasse em um novo exemplo, e vários programadores e testadores participaram da
sessão. Foram necessárias algumas horas tortuosas escrevendo números e fluxogramas em um
quadro branco, mas finalmente eles chegaram à fórmula correta e todos estavam na mesma página.
—Lisa
Trabalhe com quantos exemplos forem necessários até que a equipe entenda
aspectos bastante diferentes do sistema. Tente um formato diferente se não estiver funcionando. Por
exemplo, se as imagens desenhadas no quadro branco não forem suficientes para entender a história,
experimente planilhas ou algum outro formato que seja familiar para você.
os especialistas em negócios.
Capítulo 9, “Kit de
ferramentas para negócios
Equipes Distribuídas
Enfrentando testes que
Apoiar o Como observamos em outros capítulos, ter membros de equipe em locais diferentes
Equipe”, fala sobre
e fusos horários diferentes significam que você terá que trabalhar mais na comunicação.
algumas ferramentas
A história de Lisa Um dos programadores da nossa equipe, que também é gerente, mudou-se para a Índia.
Nanda trabalha lá até tarde da noite, então ele está disponível para o time de Denver no período da
manhã. Ele tem um celular com um número local de Denver, então é fácil falar com ele por telefone,
bem como por mensagem instantânea e e-mail. Agendamos reuniões onde discutimos histórias,
como reuniões de estimativas, sessões de brainstorming e planejamento de iterações, no início
da manhã para que ele possa participar. Embora a equipe não possa ser tão produtiva quanto
éramos quando estávamos co-localizados, ainda podemos nos beneficiar da experiência de domínio
e do profundo conhecimento da Nanda sobre o software.
Se Nanda contratar mais membros para a equipe na Índia, poderemos ter que abordar questões
mais complexas, como coordenação de integração e construção. Podemos considerar soluções
técnicas mais sofisticadas para problemas de comunicação.
—Lisa
Você precisará experimentar para ver o que funciona para sua equipe distribuída. Usar
retrospectivas para avaliar se a colaboração e a comunicação precisam
melhorar e debater maneiras de melhorar. Você, como testador, pode ter muito
de experiência em ajudar em projetos de melhoria de processos. Basta pensar
melhorar a comunicação como uma dessas necessidades de melhoria contínua.
Machine Translated by Google
Como Erika começa a trabalhar algumas horas antes da reunião diária da equipe, ela precisa de
um trabalho que possa fazer sozinha durante esse período. Ela trabalha com qualquer membro da
equipe que chega cedo em Denver e conversa com outros programadores no final do dia sobre
o trabalho que fará na manhã seguinte.
Erika consegue visualizar as tarefas da equipe por meio de uma ferramenta na intranet que mostra
cada tarefa, seu status e percentual concluído. Com algumas acomodações extras, a equipe (que
conta com outros membros remotos) consegue manter uma boa comunicação.
Mesmo à distância, Erika conseguiu transferir habilidades de teste para os programadores, mas
descobriu que eles pensam de forma diferente dos testadores. Sua equipe usa essas perspectivas
variadas a seu favor, alternando todos os tipos de tarefas entre todos os membros da equipe.
Todos nós precisamos ser capazes de nos comunicar bem uns com os outros em nossos projetos
ter sucesso. Quando as equipes estão em locais geográficos diversos, elas podem ter
trabalhar duas vezes mais para manter contato constante.
TESTES DE REGRESSÃO
A menos que você faça parte de uma equipe que está apenas começando seus esforços de automação, você tem
testes de regressão automatizados cobrindo histórias de iterações anteriores. Esperançosamente, eles estão
sendo executados como parte de um processo de construção contínuo, ou pelo menos parte de
um processo de construção diário. Se não estiverem, peça à sua equipe para implementar isso
infraestrutura crítica uma prioridade e debater com eles como isso pode
ser feito. Planeje o tempo na próxima iteração para iniciar um processo de construção.
Machine Translated by Google
Os programadores devem executar todos os testes de unidade automatizados antes de fazer check-
in do novo código. No entanto, os testes de unidade podem falhar na construção contínua, seja
porque alguém se esqueceu de executá-los antes do check-in ou devido a uma diferença no
ambiente de tempo de execução ou IDE. Temos testes de unidade por um motivo, então sempre
que um falhar, a maior prioridade da equipe (além de um problema de produção que atrapalha a
produção) deve ser consertá-lo e fazer a compilação funcionar novamente.
As equipes adotam abordagens diferentes para garantir que sua construção permaneça “verde”. A
equipe de Lisa tem um processo de construção que envia resultados por e-mail após cada
construção. Se a compilação falhar, a pessoa que verificou a falha geralmente a corrige
imediatamente. Se não estiver claro por que a compilação falhou, os membros da equipe se reunirão para inve
O ScrumMaster deles tem um brinquedo de pelúcia que ela coloca na mesa da pessoa que
“quebrou a construção”, como um lembrete visual de que ele precisa ser consertado imediatamente.
Em casos extremos, você pode ter que comentar temporariamente um teste que falhou até que
ele possa ser diagnosticado, mas esta é uma prática perigosa, especialmente para uma equipe
novata. Todos na equipe devem parar o que estão fazendo, se necessário, até que a compilação
funcione novamente.
A compilação precisa fornecer feedback imediato, portanto, seja breve. Se a compilação demorar
mais do que a frequência média de check-ins de código, as compilações começarão a se acumular
e os testadores não conseguirão obter o código que precisam testar. A diretriz do XP para o tempo
de construção é de dez minutos [Fowler, 2006]. A equipe de Lisa tenta manter a construção em
menos de oito minutos, porque eles fazem check-in com frequência.
Testes que demoram muito, como testes que atualizam o banco de dados, testes funcionais acima
do nível de unidade ou scripts de teste de GUI, devem ser executados em um processo de
construção separado. Se a equipe estiver limitada em hardware, talvez seja necessário executar a
compilação “completa” com o conjunto completo de testes à noite e a compilação “contínua” que
possui apenas testes de unidade continuamente durante o horário de trabalho. Ter uma construção
“completa” separada e contínua com todos os conjuntos de testes de regressão vale o investimento.
A equipe de Lisa recebe feedback a cada 90 minutos de sua construção “completa”, e isso tem
Machine Translated by Google
Durante a iteração, você automatiza novos testes. Assim que passarem, adicione
para o conjunto de regressão, conforme apropriado. Você pode não precisar de todas as arestas
caso ou permutação incluída no conjunto de regressão e você deseja manter
os conjuntos de regressão são rápidos o suficiente para fornecer feedback oportuno. Como cada história é
concluído, os testes que confirmam sua funcionalidade devem ser incluídos no conjunto de regressão e
fazer parte do ciclo regular de construção.
Os próprios testes de regressão devem estar sob alguma forma de controle de versão.
É melhor mantê-los no mesmo sistema de controle de código-fonte que o código de produção. Dessa
forma, quando você marca o código para lançamento de produção, a tag
também contém todas as versões dos testes que funcionaram com o código. No
no mínimo, mantenha um backup diário do código de teste.
Esperançosamente, você escreveu cartões de tarefas para testar a história no contexto da aplicação
maior e testar a regressão de outras partes do sistema para garantir que a nova história
não teve um efeito negativo. Você pode ter automatizado alguns desses testes ponta a ponta, como o
exemplo do Capítulo 12, “Resumo dos quadrantes de teste”.
Mas às vezes, mesmo que você tenha um grande conjunto de testes de regressão, testes exploratórios
manuais podem ser apropriados. A história não estará “pronta” até que você também tenha concluído
essas tarefas.
RECURSOS
Ao iniciar a iteração, certifique-se de que os ambientes de teste, os dados de teste e
ferramentas de teste estão disponíveis para acomodar o teste das histórias desta iteração. Ter esperança-
Machine Translated by Google
você antecipou totalmente essas necessidades, mas alguns requisitos só podem se tornar óbvios quando
você começar a trabalhar em uma história. Colabore com banco de dados
especialistas, administradores de sistema e outros membros da equipe para configurar qualquer
infraestrutura adicional necessária.
Você pode ter trazido recursos externos para esta iteração para ajudar no desempenho, usabilidade,
segurança ou outras formas de teste. Inclua-os em
stand-ups e discussões com os clientes conforme necessário. Combine com eles e
ajudá-los a compreender os objetivos da equipe. Esta é uma oportunidade para escolher
desenvolver novas habilidades.
MÉTRICAS DE ITERAÇÃO
de lançamento ou tema” aqui. Saiba qual problema você está tentando resolver antes de começar a medir
fala sobre métricas pontos de dados e passando por todo o trabalho de análise dos resultados. Nesta secção,
úteis a serem mantidas.
abordaremos algumas das medições típicas que as equipes coletam através do
iteração.
Medindo o Progresso
Você precisa saber de alguma forma quanto trabalho sua equipe concluiu em
qualquer ponto da iteração e uma ideia de quanto trabalho ainda falta fazer. Você
preciso saber quando fica óbvio que algumas histórias não podem ser concluídas
e a equipe precisa de um Plano B. Gráficos de burndown de iteração e estimativa versus
o tempo real para tarefas são exemplos usados para medir o progresso da equipe. Eles podem
ou pode não agregar valor para sua equipe específica.
Painéis de histórias ou tarefas são uma boa maneira visual de saber o status da iteração, especialmente
se for usado código de cores. Se muitos cartões de tarefas de teste ainda estiverem na área “para
coluna fazer” ou cartões de tarefas de codificação insuficientes foram movidos para “Concluído” ou
“Testado”, é hora da equipe pensar em maneiras de garantir que todos os testes
está completo. Talvez alguns membros da equipe precisem parar de codificar e começar a realizar tarefas
de teste, ou talvez uma história ou parte menos crítica de uma história precise
ser adiado até a próxima iteração para que o teste de todas as outras histórias possa
estar terminado.
Machine Translated by Google
Isso pode ser conseguido tanto com storyboards virtuais quanto físicos.
Seja criativo com seus efeitos visuais para que os problemas fiquem instantaneamente visíveis.
Lembre-se de que nenhuma história está “pronta” até ser testada em todos os níveis apropriados.
As equipes podem ter outros critérios para determinar quando uma história está “pronta”, como se
foi revisado por pares ou os testes de regressão automatizados foram concluídos. Sobre
o storyboard mostrado na Figura 18-6, a coluna “Concluído” para cada linha da história
é a coluna mais à direita. A coluna logo à esquerda é a coluna “Verificar”. A história não é
considerada “terminada” até que todas as cartas, incluindo os testes
cartões de tarefas, estão na coluna “Concluído”. Uma olhada no quadro é suficiente para
saber quais histórias terminaram.
Mesmo as equipes que não acompanham o burndown no nível da tarefa podem fazê-lo na história
nível. Saber quanto trabalho a equipe pode realizar em cada iteração (sua velocidade)
ajuda com o plano geral de lançamento e com a redefinição de prioridades para cada iteração.
Simplesmente saber o número de histórias concluídas em uma iteração pode ser suficiente se
elas tenderem a ter o mesmo tamanho médio. Embora os planos sejam, na melhor das hipóteses,
provisórios, é útil ter uma ideia de quantas histórias podem ser
concluído até uma data de lançamento definitiva ou quais histórias poderão ser concluídas no
próximo trimestre.
Métricas de Defeito
A contenção de defeitos é sempre uma métrica favorita para capturar. Quando o defeito foi
encontrado? Em projetos tradicionais, é muito mais fácil porque você tem requisitos e fases de
codificação “difíceis”. Quando toda a equipe é responsável por
qualidade, e todos estão trabalhando juntos o tempo todo, é muito mais difícil
determinar “quando” o defeito foi injetado no sistema.
Quaisquer que sejam as métricas que você escolher medir, opte pela simplicidade.
Este gráfico foi usado para mostrar aos clientes que a equipe estava se tornando
consistente com seus testes e lançamentos. Depois que a equipe e os clientes
acreditaram que os números não aumentariam, as métricas não eram mais
necessárias e foram abandonadas.
—Janet
Não tenha medo de parar de usar métricas quando elas não forem mais úteis. Se o
problema pelo qual foram inicialmente reunidos não existe mais, não há razão para
continue reunindo-os.
Sua equipe pode ter que fornecer métricas aos gerentes superiores ou a um Escritório de
Gerenciamento de Projetos (PMO), especialmente se você trabalha para uma grande organização. Patrício
Fleisch, consultor da Accenture que trabalhava como analista funcional em uma
Machine Translated by Google
Coni Tartaglia, gerente de teste de software da Primavera Systems, Inc., explica algumas maneiras
que encontrou para obter métricas de iteração úteis.
A coleta de métricas no final da iteração é particularmente útil quando muitas equipes diferentes
estão trabalhando no mesmo lançamento de produto. Isso ajuda a garantir que todas as
equipes terminem a iteração com o mesmo padrão de “pronto”. As equipes devem concordar
sobre o que deve ser medido. A seguir estão alguns padrões para software potencialmente
distribuível [Schwaber 2004] e diferentes maneiras de julgar o estado de cada um.
Use uma ferramenta de análise estática. Concentre-se em dados que sejam úteis e acionáveis.
Decida cada sprint se uma ação corretiva é necessária. Por exemplo, use uma ferramenta de
código aberto como FindBugs e procure um aumento a cada sprint no número de problemas
de prioridade um. Corrija-os adequadamente.
Por exemplo, observe os resultados da cobertura de código de cada sprint. Conte o número de
pacotes com cobertura de teste de unidade dentro de intervalos de 0% a 30%
(baixa cobertura), 31%–55% (cobertura média) e 56%–100% (alta) cobertura. Os pacotes legados
podem cair na faixa de cobertura baixa, enquanto a cobertura para novos pacotes deve cair na
faixa de 56% a 100%, se você estiver praticando o desenvolvimento orientado a testes. É desejável
um aumento na faixa de cobertura alta.
Verifique os resultados do teste de construção de integração contínua para garantir que eles
estão passando. Execute outros testes de integração durante o sprint. Faça correções antes do
início da próxima iteração. Hesite em iniciar uma nova iteração se os testes de integração falharem.
Simplesmente faça esta pergunta a si mesmo no final de cada iteração e prossiga para a
próxima iteração de acordo com a resposta.
Métricas como essa são fáceis de coletar e analisar e podem fornecer oportunidades valiosas para
ajudar as equipes a corrigir seu rumo. Eles também podem confirmar
os padrões de engenharia que as equipes implementaram para criar software potencialmente distribuível
em cada iteração.
empresa de software durante o tempo em que escrevemos este livro, nos deu o seguinte
exemplos de métricas que sua equipe fornece ao PMO.
A coleta e o relatório de métricas como essas podem resultar em custos indiretos significativos. Procure as
maneiras mais simples de satisfazer as necessidades da sua organização.
RESUMO
Neste ponto da nossa iteração de exemplo, nosso testador ágil trabalha em estreita colaboração com
programadores, clientes e outros membros da equipe para produzir histórias em pequenos formatos.
incrementos de teste-codificação-revisão-teste. Alguns pontos a ter em mente são:
RESUMO 441
desenvolvimento.
Determine qual é a melhor opção de “correção de bugs” para sua equipe, mas um bom
objetivo é tentar não ter bugs até o momento do lançamento.
Adicione novos testes automatizados ao conjunto de regressão e programe-o para execução
com frequência suficiente para fornecer feedback adequado.
O teste exploratório manual ajuda a encontrar requisitos ausentes depois que todo o
aplicativo foi codificado.
Colabore com outros especialistas para obter os recursos e a infraestrutura necessários para
concluir os testes.
Considere quais métricas você precisa durante a iteração; métricas de progresso e defeito
são dois exemplos.
Machine Translated by Google
Capítulo 19
CONCLUIR A ITERAÇÃO
Demonstração de Iteração
Embrulhar
a Iteração
Concluímos uma iteração. O que os testadores fazem enquanto a equipe conclui esta iteração e se
prepara para a próxima? Gostamos de nos concentrar em como nós e o restante da nossa equipe
podemos melhorar e entregar um produto melhor na próxima vez.
DEMONSTRAÇÃO DE ITERAÇÃO
443
Machine Translated by Google
Ouvindo os Clientes
Pierre Veragen explica como sua equipe usa demonstrações de iteração.
“Nós nos calamos e ouvimos nossos clientes. É tudo uma questão de química da apresentação
do grupo. De alguma forma, compartilhar o momento une os cérebros – olhamos as coisas de
uma perspectiva diferente. O evento dá origem a ideias e conceitos. Alguns morrem enquanto a
próxima pessoa fala; alguns sobrevivem e se tornam aquela grande ideia que diferencia o produto.”
A demonstração é uma oportunidade de mostrar as novas histórias, mas o feedback fornecido pelos
clientes é o maior motivo para fazê-las.
Qualquer pessoa pode anotar os comentários feitos pelos clientes enquanto participam de
a demonstração, mas os testadores são bons candidatos. Eles podem notar inconsistências
anteriormente não detectadas à medida que a demonstração avança. À medida que surgem
dúvidas, os clientes podem decidir que desejam alterar algo menor, como texto de ajuda,
ou algo maior, como o comportamento de um recurso. Pequenas alterações geralmente podem
ser feitas em tarefas e tratadas na próxima iteração, mas algumas alterações
são grandes o suficiente para se transformarem em histórias para planejar lançamentos futuros.
Demonstrações de iteração (chamadas de revisões de sprint no mundo Scrum) são uma super
oportunidade para fazer com que todos falem e pensem sobre o aplicativo. Pegar
vantagem disso. As reuniões de revisão são geralmente curtas e podem durar menos de meia hora.
hora. Se sobrar tempo depois de demonstrar novas histórias, pergunte aos clientes
se eles tiveram algum problema com a versão anterior que não tenham
relatado. Eles têm alguma preocupação geral, precisam de ajuda para entender como usar um
recurso ou surgiram novos problemas? Claro que você pode
converse com os clientes a qualquer hora, mas tenha a maioria das partes interessadas na sala
com a equipe de desenvolvimento pode levar a ideias interessantes.
RETROSPECTIVAS
Desenvolvimento ágil significa melhorar continuamente a maneira como você trabalha, e
retrospectivas são um excelente lugar para começar a identificar o que e como você pode
Faça melhor. Recomendamos reservar um tempo no final de cada iteração e lançamento
ciclo para olhar para trás e falar sobre o que deu certo, o que não deu e o que você
talvez você queira tentar na próxima iteração. Existem diferentes abordagens para a realização de
sessões retrospectivas. Não importa qual abordagem você use, é fundamental que
cada membro da equipe se sente seguro, todos são respeitados e não há acusações ou acusações.
Machine Translated by Google
RETROSPECTIVAS 445
Algumas equipes iniciam esse processo com antecedência. Todos os membros da equipe escrevem “início”,
Ágil
Retrospectivas: “parar” e “continuar” em post-its e depois, durante a reunião retrospectiva, eles colocam
Tornando boas equipes excelentes os post-its no quadro e os agrupam por tópico.
[2006] tem ideias “Iniciar, parar, continuar” é apenas um exemplo dos termos que você pode usar. Alguns
imaginativas
outras ideias são: “Coisas que correram bem”, “Coisas para melhorar”, “Agradável”,
para tornar as
retrospectivas
“Frustrante” e “Para tentar”. Use os nomes que funcionarem para você. Pode ser
mais produtivas
(ver bibliografia).
difícil lembrar das últimas duas semanas, muito menos de um lançamento inteiro, se é isso que sua retrospectiva
cobre. Pesquise diferentes abordagens criativas para refletir sobre as experiências da sua equipe.
Começar:
Parar:
Continuar:
Se a lista de itens “iniciar, parar, continuar” for longa, é uma boa ideia escolher um ou dois para focar na nova
iteração. Para priorizar os itens, dê a cada membro da equipe “n” votos que eles possam atribuir aos itens. Cada
uma das dez pessoas da equipe de Lisa recebe três votos e podem aplicá-los todos a um item, se acharem que
isso é mais importante, ou podem votar em dois ou três itens diferentes. Os itens com mais votos são considerados
itens em foco. Janet também teve sucesso com essa forma de priorizar.
Além dos itens “iniciar, parar, continuar”, a equipe pode simplesmente escrever cartões de tarefas para ações a
serem realizadas na próxima iteração. Por exemplo, se a construção em andamento for muito lenta, escreva um
cartão para “obter a construção em andamento em menos de dez minutos”.
Na próxima iteração, reserve um tempo para examinar um ou dois itens de foco que você deseja melhorar. No
final dessa iteração, faça um checkpoint para ver se você melhorou. Se não, pergunte por quê. Você deveria
tentar algo diferente? Ainda é importante? Pode ser que tenha perdido importância ou realmente não fosse
importante no quadro geral. Se você pensou que melhorou em uma área problemática e ela ressurgiu, você terá
que decidir fazer algo a respeito ou então parar de falar sobre isso.
Machine Translated by Google
RETROSPECTIVAS 447
A equipe pode decidir que os programadores não estão cobrindo código suficiente com
testes unitários. Eles podem escrever um item de ação para executar a ferramenta de cobertura de código
antes de fazer check-in do novo código ou começar a escrever um cartão de tarefa de “testes de unidade” para cada
história para ter certeza de que eles estão concluídos. Talvez a equipe não tenha terminado todos os
testar tarefas de automação antes do término da iteração. Ao discutir o problema, a equipe descobre que
os testes executáveis iniciais eram muito complexos e
eles precisam primeiro se concentrar em escrever e automatizar um teste simples ou formar pares para um
melhor design de teste. Certifique-se de que os itens de ação sejam concretos.
As equipes ágeis tentam resolver seus próprios problemas e definir diretrizes para ajudá-las a melhorar.
Itens de ação direcionados a um problema podem ajudar em outros.
Quando a equipe de Lisa teve problemas para terminar histórias e testá-las durante cada iteração, ela
criou várias regras ao longo de alguns
retrospectivas:
Conclua os casos de teste de alto nível para todas as histórias até o quarto dia da
iteração.
Essas regras fizeram mais do que ajudar a equipe a concluir as tarefas de teste. Eles facilitaram
um fluxo e ritmo que ajudou a equipe a trabalhar em um ritmo constante e sustentável
ao longo de cada iteração.
Comece a próxima reunião retrospectiva revisando os itens de ação para ver o que
itens foram benéficos. A equipe de Lisa coloca rostos felizes, tristes ou neutros ao lado
Machine Translated by Google
Consulte suas ideias para melhorias e itens de ação durante a iteração. Publicar
coloque-os em um local (na parede ou online) onde todos os vejam com frequência. Lisa
a equipe às vezes analisa a lista durante uma reunião stand-up no meio da iteração.
Se você pensar em novas ideias de melhoria durante a iteração, anote-as,
possivelmente até na lista existente, então você não esquecerá na próxima iteração.
É uma boa ideia acompanhar as coisas que atrapalham durante a iteração. Mantenha
uma lista de pendências de impedimentos em algum gráfico grande e visível. Falar sobre
os impedimentos em cada iteração e escrever cartões de tarefas ou tomar medidas para
eliminá-los.
Eles também fazem mapeamento do fluxo de valor para encontrar o maior “tempo de espera” e
Consulte a bibliografia
usam os “cinco porquês” da Toyota para entender qual impedimento é o maior ou qual restrição
para obter bons
precisa ser abordada.
recursos para o
desenvolvimento enxuto Um exemplo compartilhado foi que em uma equipe com três programadores e um testador, o
práticas. maior problema era um gargalo nos testes. Rafael perguntou à equipe o que o testador faz e
escreveu esses itens em um quadro branco. Então ele perguntou aos programadores quais das
coisas no quadro eles não poderiam fazer. Havia apenas um item que eles achavam que não
conseguiriam resolver. Isso ajudou os programadores
Machine Translated by Google
Abordagens criativas como essa ajudam novas equipes ágeis a enfrentar desafios
difíceis de testes. Retrospectivas são um bom ambiente para experimentação.
Use retrospectivas como uma oportunidade para levantar questões relacionadas aos testes e obter o
toda a equipe pensando em possíveis soluções. Ficamos agradavelmente surpresos com as ideias
inovadoras que surgem de uma equipe inteira focada em
como melhorar a forma como funciona.
CELEBRAR SUCESSOS
As práticas de desenvolvimento ágil tendem a moderar os altos e baixos que existem
em processos mais tradicionais ou caóticos. Se sua equipe em cascata finalmente conseguir lançar um
lançamento após um ciclo de um ano que termina em um estressante ciclo de correção e teste de dois
meses, todos podem estar prontos para comemorar o sucesso.
evento com uma grande festa - ou eles podem simplesmente entrar em colapso por algumas semanas.
Equipes ágeis que lançam lançamentos a cada duas semanas tendem a permanecer na codificação normal e
testando o groove, começando no próximo conjunto de histórias depois de desenhar apenas o suficiente
fôlego para realizar uma revisão e retrospectiva da iteração. Isso é legal, mas você
sei o que dizem sobre todo trabalho e nenhuma diversão.
Certifique-se de que sua equipe reserve pelo menos um tempinho para dar tapinhas nas costas e
reconhecer suas conquistas. Mesmo pequenos sucessos merecem uma recompensa. O prazer é um valor
ágil vital, e um pouco de motivação ajuda sua equipe a continuar
em seu caminho de sucesso. Por alguma razão, isso pode ser difícil de fazer. Muitos ágeis
as equipes têm dificuldade em reservar tempo para comemorar o sucesso. Às vezes você está ansioso
para prosseguir com a próxima iteração e não perca tempo para parabenizar-se pelas realizações anteriores.
A equipe de Lisa termina uma iteração todas as quintas-feiras alternadas e conduz sua retrospectiva, revisão
da iteração e lançamento no dia seguinte. Depois de suas reuniões
Para concluir, eles geralmente se envolvem em algo que chamam de “Diversão de sexta-feira”. Esse
às vezes consiste em jogar um jogo de curiosidades ou de tabuleiro bobo, sair para um
beber ou jogar uma partida de minigolfe. Ter a oportunidade de relaxar e
dar boas risadas traz um benefício colateral para a formação de equipes.
Para marcos maiores, como um grande lançamento ou atingir uma meta de cobertura de testes, o
toda a empresa tem uma festa para comemorar, trazendo comida servida ou saindo
Machine Translated by Google
Comemore seus sucessos individuais também. Parabenize seu colega de trabalho por
completando a primeira linha de base de teste de desempenho do projeto. Dê ao seu DBA um
estrela de ouro pela implementação de um sistema de backup de produção. Dê a si mesmo um
tratar para resolver esse difícil problema de automação de testes. Leve biscoitos para o seu
próxima reunião com os clientes. Reconheça o programador que lhe deu um
Chicote de JavaScript que acelerou o teste de algumas validações de GUI. Use o seu
imaginação.
Adoramos a ideia de celebração que recebemos de Megan Sumrell, uma treinadora e treinadora
ágil. Ela compartilhou isso com uma sessão de testes ágeis do Open Space no Agile
2007.
Comemorar conquistas é algo que me apaixona muito nas equipes. Num projeto recente,
implementámos a caixa de sapatos Shout-Out. Peguei uma caixa de sapatos velha e
decorei. Depois, fiz apenas uma fenda na parte superior da tampa para que as pessoas
pudessem colocar suas mensagens na caixa. A caixa é aberta a toda a equipe durante o
sprint.
Pode ser um clichê, mas pequenas coisas podem significar muito. A Shout-Out Shoebox é uma
ótima maneira de reconhecer o valor que os diferentes membros da equipe contribuem.
Machine Translated by Google
RESUMO 451
Reservar um tempo para comemorar os sucessos permite que sua equipe dê um passo atrás e tenha uma nova
perspectiva e renovar sua energia para que possa continuar melhorando seu produto.
Dê aos membros da equipe a oportunidade de apreciar as contribuições uns dos outros. Não
caia em uma rotina onde todo mundo fica de cabeça baixa trabalhando o tempo todo.
experimente uma nova ferramenta de teste, pense em maneiras melhores de extrair exemplos dos clientes ou
identifique a necessidade de um tipo específico de experiência em testes.
RESUMO
Neste capítulo, examinamos algumas atividades para encerrar a iteração ou lançamento.
A revisão da iteração é uma excelente oportunidade para obter feedback e sugestões da equipe
do cliente.
Retrospectivas são uma prática crítica para ajudar sua equipe a melhorar.
Observe todas as áreas onde a equipe pode melhorar, mas concentre-se em uma ou duas de cada
vez.
Aproveite a oportunidade após cada iteração para identificar obstáculos relacionados aos
testes e pensar em maneiras de superá-los.
Machine Translated by Google
Capítulo 20
Teste de instalação
Entregáveis
Comunicação
UAT
Teste do cliente
Teste Alfa/Beta
Neste capítulo, compartilhamos o que você, como testador, pode fazer para ajudar sua equipe
e sua organização a entregar com sucesso um produto de alta qualidade. O mesmo processo
e ferramentas podem ser usados para produtos embalados, soluções personalizadas ou
produtos de desenvolvimento interno. Os testadores ágeis podem fazer contribuições
exclusivas que ajudam tanto o cliente quanto a equipe de desenvolvedores a definir e
produzir o valor que o negócio precisa.
453
Machine Translated by Google
feito. É como comprar algo em uma loja: se houver um ótimo serviço para ir
com a compra, qual é a probabilidade de você voltar e comprar lá
de novo?
Eu estava conversando com meu amigo Ron, que compra e vende moedas. Ao longo dos anos, ele
A história de Janete
desenvolveu uma reputação muito boa no setor e recusou clientes em potencial porque está muito
ocupado.
Quando perguntei qual era o seu segredo, ele disse: “Não é segredo. Eu apenas trabalho com meus
clientes para que se sintam confortáveis e estabeleça uma relação de confiança com eles.
No final das contas, tanto eu quanto meu cliente precisamos estar satisfeitos com o negócio. Basta
um cliente insatisfeito para quebrar minha reputação.”
As equipes ágeis podem aprender com a experiência de Ron. Se tratarmos nossos clientes com
respeito e entregarmos um produto que os satisfaça, teremos um bom relacionamento com eles,
esperamos que por muitos anos.
—Janet
Nosso objetivo é entregar valor ao negócio em tempo hábil. Nós não queremos
apenas para atender às necessidades, mas também para encantar nossos clientes. Antes
de lançarmos, queremos ter certeza de que todas as entregas estão prontas e polidas
adequadamente. Felizmente, você começou a planejar cedo para conhecer não apenas o
requisitos de código, mas para planejar treinamento, documentação e tudo mais
isso é necessário para fazer um produto de alto valor.
Ajustar e finalizar
Coni Tartaglia, gerente de testes de software da Primavera Systems, Inc., explica os resultados
de “ajuste e acabamento”.
É útil ter uma lista de verificação de “Ajuste e Acabamento”. Às vezes ajuste e termine
os itens não estão prontos para serem incluídos no produto até perto do fim. Pode ser
necessário reconstruir partes do produto para incluir itens como nova arte, licença ou
acordos legais, assinaturas digitais para executáveis, datas de direitos autorais, marcas
registradas e logotipos.
O valor do negócio é o objetivo do desenvolvimento ágil. Isso pode incluir muito além do código
de produção. As equipes precisam planejar todos os aspectos da entrega do produto.
Machine Translated by Google
Se você é uma daquelas equipes que pensa que pode deixar bugs até o fim para
correção, você provavelmente não está em tão boa forma e pode precisar introduzir uma iteração
para “endurecimento” ou correção de bugs. Não recomendamos isso, mas se o seu
equipe tem muitos bugs pendentes que foram introduzidos durante o ciclo de desenvolvimento,
você precisa resolvê-los antes de chegar ao final
jogo. Descobrimos que novas equipes tendem a cair nessa armadilha.
Além disso, existem muitos componentes variados para qualquer versão, alguns no
software, alguns não. Você tem clientes que precisam instalar e aprender a usar
os novos recursos. Pense em todos os elementos que são críticos para um lançamento bem-
sucedido, porque é hora de resolver todas essas pontas soltas e aprimorar seu
produtos.
Bob Galen, coach ágil e especialista em end-game, observa que o desenvolvimento ágil pode não
ter se infiltrado em todos os cantos da organização. Ele
observa: “Os testadores ágeis podem servir como um canal ou facilitador quando se trata de
entrega física do software.”
A maioria das equipes acumula alguma dívida técnica, apesar das melhores intenções,
especialmente se estiverem trabalhando com código legado. Para manter a velocidade, sua equipe pode
precisa planejar uma iteração de refatoração em intervalos regulares para adicionar testes, atualizar
ferramentas e reduzir a dívida técnica. A equipe de Lisa conduz um sprint de refatoração
aproximadamente a cada seis meses. Embora a empresa normalmente não receba nenhum benefício direto
benefícios no final de um sprint de refatoração, os especialistas de negócios entendem
que esses sprints especiais resultem em melhor cobertura de testes, uma base sólida para futuros
desenvolvimento, redução do débito técnico e maior velocidade geral da equipe.
Machine Translated by Google
Algumas equipes recorrem a iterações de “endurecimento”, onde gastam tempo apenas encontrando
e corrigindo bugs, e não introduzem nenhuma funcionalidade nova. Este é o último recurso para
manter a aplicação e sua infraestrutura sólidas. Novas equipes podem precisar de uma iteração extra
para concluir as tarefas de teste e, nesse caso, reservam tempo para isso no plano de lançamento.
Use retrospectivas e outras práticas de melhoria de processos para aprender maneiras de integrar
testes e codificação para que o código produzido em cada iteração esteja pronto para produção.
Quando esse objetivo for alcançado, trabalhe para garantir que uma compilação estável que possa
ser liberada para produção esteja disponível todos os dias. Os membros da equipe de Lisa pensaram
que essa era uma meta inatingível na época em que lutavam para obter qualquer compilação estável
antes do lançamento, mas demorou apenas alguns anos para que quase todas as compilações
valessem a pena ser lançadas.
Quando sua construção estiver estável, você estará pronto para entrar no “Jogo Final”.
O FIM DO JOGO
Qual é o jogo final? Ouvimos muitas pessoas avisarem o momento antes da entrega, mas o “fim do
jogo” parece ser o mais adequado. É o momento em que a equipe dá os retoques finais no produto.
Você está pontilhando seus i e cruzando seus t. É o último trecho antes da linha de chegada da
entrega. Não foi feito para ser um ciclo de correção de bugs, porque você não deverá ter nenhum
bug pendente até então, mas isso não significa que você não tenha um ou dois para corrigir.
Talvez você tenha grupos em sua organização que não envolveu em seu planejamento anterior.
Agora é hora de trabalhar em estreita colaboração com as pessoas que administram os ambientes
de preparação e produção, os gerentes de configuração, os administradores de banco de dados fora
de sua equipe e todos que desempenham um papel na movimentação do software do desenvolvimento
para a preparação e produção. Se você não trabalhou com eles antes desta vez, considere conversar
com essas pessoas durante as próximas sessões de planejamento de lançamento e mantenha
contato com elas durante todo o ciclo de desenvolvimento.
Bob Galen nos conta que os testadores de sua equipe fizeram parceria com o grupo de operações
que gerencia os ambientes de teste e produção. Como o grupo de operações é remoto, a orientação
da equipe ágil é particularmente valiosa.
Sempre há testes em nível de sistema que não podem ser automatizados ou que não valem a pena
automatizar. Na maioria das vezes, seu ambiente de teste é o único lugar
Machine Translated by Google
onde você pode fazer alguns testes de integração em nível de sistema ou carga em nível de sistema
e testes de estresse. Sugerimos que você reserve algum tempo após o desenvolvimento para
esses tipos de tarefas de acabamento. Não codifique até o fim.
Planeje quanto tempo você precisar para o final do jogo. Janet descobriu que o
o tempo necessário para o final do jogo varia de acordo com a maturidade da equipe
e o tamanho do aplicativo. Pode ser que seja necessário apenas um dia para terminar
as tarefas extras, mas pode levar uma semana ou às vezes até o total
iteração de duas semanas. A equipe do exemplo usado no Capítulo 12, “Resumo dos Quadrantes
de Teste”, programou duas semanas, porque era uma tarefa complexa.
sistema que exigia bastante configuração e testes do sistema.
Quando trabalhei em uma equipe desenvolvendo aplicativos para um cliente, tínhamos que seguir
A história de Lisa
o cronograma de lançamento do cliente. Os testes com outras partes do sistema maior só foram
possíveis durante determinados períodos de duas semanas, a cada seis ou oito semanas.
Nossa equipe completou duas ou três iterações, finalizando todas as histórias de cada uma
como se estivessem lançando cada iteração.
—Lisa
Se você tiver uma organização grande, poderá ter dez ou quinze equipes desenvolvendo software
para produtos individuais ou para áreas separadas de funcionalidade para
o mesmo aplicativo. Todas essas áreas ou produtos podem precisar ser lançados juntos, portanto,
é necessário um jogo final integrado. Isso não significa que você
deixe a integração até o final. Coordenação com as outras equipes
será crítico ao longo de todo o seu ciclo de desenvolvimento, e se você tiver um sistema de
integração de teste, recomendamos que você tenha certeza de ter tentado a integração muito
antes do final do jogo.
Você também pode ter considerações além da sua equipe, por exemplo, trabalhar
com software fornecido por equipes externas em nível empresarial.
Use esse tempo final do jogo para fazer alguns testes exploratórios finais. Dê um passo para trás e
observe todo o sistema e faça alguns cenários de ponta a ponta. Tais testes irão
confirmar se o aplicativo está funcionando corretamente, proporcionando mais confiança
no produto e fornecer informações para a próxima iteração ou lançamento.
Machine Translated by Google
Embora o Agile promova a integração contínua, muitas vezes é difícil integrá-lo com produtos de
terceiros ou outras aplicações fora do âmbito do seu projeto.
ao controle. Os ambientes de teste podem ter melhores controles para que aplicativos externos
possam se conectar e ter acesso a ambientes de teste de terceiros. Ambientes de teste também
podem ser usados para testes de carga e desempenho, simulações
implantações, testes de failover e testes de regressão manuais e testes funcionais exploratórios.
Sempre há diferenças de configuração entre ambientes, portanto seu ambiente de teste é um bom
lugar para testá-las.
A essa altura, você deverá ser capaz de realizar testes de confiabilidade de longa duração em todos
funcionalidade do produto. Verifique se há falhas e degradação do desempenho
com carga normal. Quando feito no momento do lançamento, deverá ser apenas uma confirmação
final.
Machine Translated by Google
Os testes de tolerância a falhas e recuperação são melhor realizados em seu ambiente de teste
também, porque os ambientes de teste geralmente não possuem a configuração necessária. Para
pelos mesmos motivos, talvez você só consiga testar determinados aspectos da segurança.
Um exemplo é https, uma conexão http segura através de conexões seguras criptografadas.
tomadas. Algumas organizações podem optar por ter os certificados necessários em
apenas seu ambiente de teste. Outros exemplos são clustering ou replicação de dados. Certifique-
se de envolver todas as partes que precisam ser incluídas neste teste.
Em uma organização com a qual trabalhei, o parceiro terceirizado que aprovou cartões
A história de Janete
de crédito tinha uma conta de teste que podia ser usada, mas só era acessível no
ambiente de teste.
Para testar durante o desenvolvimento, foram criados stubs de teste para retornar
resultados específicos dependendo do número do cartão de crédito utilizado. No
entanto, isso não foi suficiente porque o terceiro às vezes alterava funcionalidades que não estávamos
ciente de. Testar com terceiros foi fundamental para o sucesso do projeto e é uma
parte fundamental do jogo final.
—Janet
Ferramentas como simuladores e objetos simulados usados para testes durante o desenvolvimento
pode ajudar a aliviar alguns dos riscos, mas quanto mais cedo você puder testar com
aplicações, menor será o risco.
À medida que desenvolvemos uma aplicação, alteramos campos, adicionamos colunas no banco
de dados ou removemos colunas obsoletas. Equipes diferentes abordam isso de maneiras diferentes.
Algumas equipes recriam o banco de dados a cada nova construção. Isso funciona para novos
aplicativos, porque não há dados existentes. Contudo, após uma aplicação
existe em produção e tem dados associados, esta abordagem não funcionará.
Machine Translated by Google
Uma aplicação precisa considerar os dados que fazem parte do produto. Como com
tanto no desenvolvimento ágil, é necessário um esforço conjunto de especialistas em banco de dados,
programadores e testadores da equipe para garantir a liberação bem-sucedida das alterações no banco
de dados. Janet viu algumas táticas diferentes para lidar com dados
conversão e compatibilidade com versões anteriores. Os scripts de banco de dados podem ser criados por
os desenvolvedores ou administradores de banco de dados à medida que a equipe faz alterações. Esses
os scripts tornam-se parte da construção e são continuamente testados. Outra opção é
para a equipe executar “diffs” no banco de dados após todas as alterações no banco de dados
tem sido feito.
Se você for um testador, peça ao seu administrador/desenvolvedor de banco de dados para ajudar seu
A equipe garante que os esquemas sejam mantidos consistentes entre os ambientes de produção, teste
e preparação. Encontre uma maneira de garantir que todas as alterações
feitos nos ambientes de teste serão feitos na preparação e produção
ambientes durante a liberação. Mantenha os esquemas correspondentes (exceto para o
novas mudanças ainda em desenvolvimento) em termos de nomes de colunas, gatilhos,
restrições, índices e outros componentes. A mesma disciplina aplicada
codificação e testes também devem ser aplicados ao desenvolvimento de banco de dados e
manutenção.
A história de Lisa
Recentemente, tivemos um bug lançado para produção porque alguns dos esquemas de teste,
incluindo aquele usado pelos testes de regressão, não tinham uma restrição. Sem a restrição
estabelecida, o código não falhou. Isso desencadeou um esforço para garantir que exatamente os
mesmos scripts de atualização sejam executados em cada esquema para fazer alterações em
uma determinada versão.
Descobriu-se que diferentes esquemas de teste tinham pequenas diferenças, como colunas
antigas que ainda permaneciam em alguns ou colunas em ordem diferente em esquemas diferentes,
portanto não era possível executar o mesmo script em todos os ambientes. Nosso administrador
de banco de dados liderou um grande esforço para recriar todos os esquemas de teste para
serem perfeitamente compatíveis com a produção. Ele cria um script em cada iteração com todas
as alterações necessárias no banco de dados e executa esse mesmo script no ambiente de
preparação e produção quando lançamos. Isso parece simples, mas é fácil ignorar diferenças
sutis quando você está focado em fornecer novos recursos.
—Lisa
Não importa como os scripts de atualização e conversão do banco de dados são criados ou
mantidos, eles precisam ser testados. Uma das melhores maneiras de garantir todos os
alterações foram capturadas nos scripts de atualização é usar os dados do cliente
se estiver disponível. Os clientes têm o hábito de usar o aplicativo de maneiras estranhas e
maneiras maravilhosas, e os dados nem sempre são tão limpos quanto gostaríamos. Se o
equipe de desenvolvimento limpa o banco de dados e coloca restrições extras em um
coluna, o aplicativo no site do cliente pode explodir assim que um
consulta toca um dado que não corresponde às novas restrições. Você
precisa ter certeza de que todas as alterações feitas ainda são compatíveis com os dados
existentes.
A história de Lisa
Minha equipe usa o ambiente de teste para testar os scripts de atualização do banco de dados. Após
a execução dos scripts, fazemos testes manuais para verificar se todas as alterações e conversões
de dados foram concluídas corretamente. Alguns de nossos scripts de teste de GUI cobrem um
subconjunto de cenários de regressão. Isso nos dá confiança quanto ao lançamento para produção,
onde nossa capacidade de teste é mais limitada.
—Lisa
Nem todos conseguem fazer uma simulação suficientemente boa dos dados de produção no
ambiente de preparação. Se os dados de um cliente não estiverem disponíveis, uma estratégia
de mitigação é ter um UAT nas instalações do cliente. Outra forma de mitigar o risco é
tente evitar atualizações em grande escala e lançamentos em etapas menores. Desenvolva novos
funcionalidade em paralelo com a funcionalidade antiga e usar uma propriedade do sistema
para “ligar” um ou outro. A funcionalidade antiga pode continuar funcionando em
produção até que a nova funcionalidade seja concluída. Enquanto isso, os testes podem
ser feito no novo código em cada iteração. Novas colunas e tabelas podem ser
adicionados às tabelas de produção sem afetar o código antigo para que os dados
a migração ou conversão para a versão final é minimizada.
Teste de instalação
As organizações geralmente têm uma equipe separada que implanta a produção ou cria o
conjunto de produtos. Esses membros da equipe devem ter a oportunidade de
Machine Translated by Google
Tive uma experiência há algum tempo que não foi tão agradável e me levou a desejar que alguém tivesse
A história de Janete
testado e corrigido o problema antes de eu encontrá-lo. Comprei um laptop novo e queria transferir minha
licença de um dos meus aplicativos para o novo computador. Ele veio com uma versão de teste do mesmo
aplicativo, então a transferência deveria ter sido fácil, mas o novo PC não reconheceu a chave do produto –
ele dizia que era inválida. Liguei para o suporte e após alguns diagnósticos, fui informado que eram
considerados produtos diferentes, portanto a chave não funcionava.
Mais duas horas de suporte e o problema foi resolvido. A versão de teste teve que ser removida, uma versão
antiga teve que ser reinstalada, a chave teve que ser digitada novamente e todas as atualizações desde a
compra original tiveram que ser carregadas. Teria sido muito mais fácil para a equipe de desenvolvimento testar
esse cenário e oferecer ao cliente uma mensagem informativa dizendo: “A versão de teste não é compatível
com sua chave de produto”. Uma mensagem como essa teria me permitido descobrir o problema e resolvê-lo
sozinho, em vez de tomar o tempo da pessoa de apoio.
—Janet
Reserve o tempo necessário para determinar quais são seus requisitos para teste
instalação. No final valerá a pena se você satisfazer seus clientes.
Comunicação
Minha equipe lança após cada iteração. Geralmente fazemos uma rápida reunião na última tarde do sprint para
A história de Lisa
entrar em contato e identificar quaisquer pontas soltas. Antes de a equipe ter muita prática com
lançamentos, escrevemos cartões de tarefas de lançamento, como “executar
script de atualização do banco de dados em teste” e “verificar atualizações do banco de dados em produção”.
Machine Translated by Google
Com mais experiência em implantação, não precisaremos mais desses cartões, a menos que
tenhamos um novo membro da equipe que precise de um lembrete extra. No entanto, nunca é
demais ter cartões para tarefas de liberação.
—Lisa
Se o seu ciclo de lançamento for mais longo, cerca de três meses, você deve saber em
antecipadamente se sua libertação estiver em perigo. Você provavelmente planejou um fim
jogo de pelo menos duas semanas, que será apenas para validação final. Quando você
tiver um ciclo de lançamento mais longo, você terá mais tempo para determinar o que deseja
deveria fazer, seja eliminando funcionalidades ou alterando a programação.
Nas raras ocasiões em que a nossa equipa enfrentou o problema de obstáculos de última hora,
A história de Lisa
utilizámos abordagens diferentes de acordo com a situação. Se houver
nada crítico que precise ser lançado agora, às vezes pulamos o lançamento e lançamos duas
iterações no próximo dia de lançamento. Se algo crítico precisar ser feito, adiaremos o lançamento
um ou dois dias. Às vezes podemos ir em frente e liberar o que temos e lançar um patch no dia
seguinte. Em uma ocasião, decidimos fazer uma iteração especial de uma semana para corrigir
os problemas, lançar e depois voltar ao cronograma normal de iteração de duas semanas.
Depois de mais de quatro anos praticando desenvolvimento ágil, temos uma compilação estável
quase 100% do tempo e nos sentimos confiantes em poder lançar sempre que necessário.
Precisávamos de muita disciplina e melhoria contínua em nosso processo para sentir que uma
abordagem mais flexível poderia funcionar para nós. Isso é
também é bom poder lançar uma funcionalidade valiosa antecipadamente, se pudermos. O que
temos trabalhado duro para evitar é cair em uma espiral mortal onde nunca poderemos lançar no
prazo e estamos sempre tentando recuperar o atraso.
Não se culpe se não conseguir liberar a tempo. Sua equipe está fazendo o seu melhor. Passe algum
tempo analisando por que você atrasou ou se comprometeu demais e tome medidas para evitar que
isso aconteça novamente.
—Lisa
Trabalhe para evitar uma situação de “não avançar” com bom planejamento, estreita colaboração,
conduzindo a codificação com testes e testando enquanto você codifica. Se o seu rastreamento mostrar o
lançamento pode estar em perigo, remova a funcionalidade que não pode ser concluída, se
possível. Se algo ruim e inesperado acontecer, não entre em pânico. Envolva o
toda a equipe e a equipe do cliente e debater sobre a melhor solução.
TESTE DE CLIENTE
Existem algumas maneiras diferentes de envolver seus clientes para obter
sua aprovação ou feedback. O teste de aceitação do usuário pode ser bastante formal,
com aprovações da empresa. Significa aceitação de uma liberação. Alfa ou
o teste beta é uma forma de obter feedback sobre um produto que você deseja lançar
mas que ainda não está pronto.
UAT
O Teste de Aceitação do Usuário (UAT) é importante em grandes aplicações personalizadas
bem como aplicativos internos. É realizado por todos os departamentos de negócios afetados para
verificar a usabilidade do sistema e para confirmar a funcionalidade de negócios existente e nova (ênfase
em novas) do sistema. Seus clientes são os
Machine Translated by Google
aqueles que têm que conviver com o aplicativo, então eles precisam ter certeza de que
funciona em seu sistema e com seus dados.
Nos capítulos anteriores, falamos muitas vezes sobre como envolver os clientes
cedo, mas nesses momentos, os testes são feitos em recursos específicos em desenvolvimento. O UAT
geralmente é feito depois que a equipe decide que a qualidade é boa o suficiente para
liberar. Às vezes, porém, o cronograma dita o ciclo de lançamento. Se esse for o
caso, tente mover o ciclo UAT para cima para funcionar paralelamente ao seu jogo final.
O aplicativo deve ser estável o suficiente para que sua equipe possa implantar no
sistema de teste do cliente ao mesmo tempo em que são implantados no teste.
Em uma equipe da qual entrei, os clientes eram muito exigentes. Na verdade, o mais exigente que eu já
A história de Janete
vi. Eles sempre pediam uma semana inteira de UAT só para ter certeza de que teriam tempo de testar
tudo. Eles prepararam casos de teste e verificaram todos, inclusive todo o conteúdo, tanto em inglês
quanto em francês. Os bugs do Showstopper incluíam erros de ortografia, como falta de sotaque no
conteúdo em francês. Com o tempo, à medida que ganharam mais confiança em nossos lançamentos
e encontraram cada vez menos erros, eles relaxaram suas exigências, mas ainda queriam uma semana,
caso não conseguissem fazer isso imediatamente.
Seu grupo empresarial estava muito ocupado.
A boa notícia foi que, mais uma vez, o UAT não encontrou problemas que não pudessem esperar até o
próximo lançamento.
—Janet
Trabalhe com os clientes para que eles entendam o processo, sua função e o que
é esperado deles. Se o UAT não for tranquilo, então é provável que haja
ser necessário um elevado nível de apoio. Uma equipe experiente de testes de clientes pode
definiram casos de teste, mas na maioria das vezes seus testes são ad hoc. Os clientes podem
abordar seus testes como se estivessem fazendo seu trabalho diário, mas provavelmente irão
concentre-se na nova funcionalidade. Esta é uma oportunidade para observar como as pessoas
Machine Translated by Google
Cronograma de lançamento
Sistema UAT
Código e Teste Código e Teste
Teste
Iter 1 Iter 2
... Lançamento 2
usar o sistema e obter feedback deles sobre o que funciona bem e o que
melhorias os ajudariam.
Os testadores podem fornecer suporte aos clientes que estão fazendo o UAT, revisando os testes
executados e os defeitos registrados, e rastreando os defeitos até a conclusão.
Nós dois achamos útil fornecer aos clientes envolvidos na realização do UAT
com um relatório de todos os testes feitos durante o desenvolvimento, junto com o
resultados. Isso os ajuda a decidir onde concentrar seus próprios testes.
Teste Alfa/Beta
Se você é uma organização que distribui software para uma grande base de clientes,
você pode não ter um UAT formal. É muito mais provável que você incorpore testes alfa ou beta.
Sua equipe desejará receber feedback sobre novos recursos de
seus clientes reais, e este é um mecanismo para fazer isso. O teste alfa é
distribuição antecipada de novas versões de software. Porque é provável que haja
alguns bugs importantes, você precisa escolher seus clientes com sabedoria. Se você escolher isso
método de feedback do cliente, certifique-se de que seus clientes entendam seus
papel. O teste Alpha serve para obter feedback sobre os recursos – não para relatar bugs.
O teste beta está mais próximo do UAT. Espera-se que o lançamento seja bastante estável e
realmente pode ser usado. Pode não estar “pronto para o horário nobre” para a maioria dos
clientes, mas muitos clientes podem achar que os novos recursos valem o risco. Cus-
Machine Translated by Google
os clientes devem entender que não é um comunicado formal e que você está
pedindo-lhes para testar seu produto e relatar bugs.
versões de todos os sistemas de produção podem estar disponíveis apenas para pequenas e programadas
janelas do tempo. Talvez seja necessário coordenar sessões de teste com equipes que trabalham
em outros aplicativos que interagem com o seu. Seja qual for o motivo, você precisa
tempo extra de teste que não inclui toda a equipe de desenvolvimento.
A equipe de desenvolvimento trabalhou em iterações de duas semanas. Ele poderia ser lançado no
ambiente de teste somente após cada terceira iteração. Naquela época, houve um ciclo de
integração de sistema e teste de aceitação do usuário de duas semanas, seguido pelo lançamento.
A equipe teve que fazer um esforço especial para garantir que alguém na função de testador
acompanhasse cada versão do início ao fim. Por exemplo, trabalhei do início ao fim
na versão 1. Shauna assumiu a função de testador quando a equipe começou a trabalhar na
primeira iteração da versão 2, enquanto eu coordenava os testes do sistema e o UAT na versão
1. Shauna permaneceu como testador principal na versão 2, enquanto eu presumi que papel para o
lançamento 3.
—Lisa
A Figura 20-2 mostra um exemplo de cronograma em que o UAT foi estendido. Esse
pode acontecer por uma série de razões, e o problema pode nem sempre ser
UAT. A maior parte da equipe está pronta para começar a trabalhar no próximo lançamento, mas muitas vezes
Machine Translated by Google
Cronograma de lançamento
Iter 0 Iter 1
... Versão 2 – Alternativa 2
um testador ainda está trabalhando com os clientes, concluindo os testes finais. Às vezes, um
programador também estará envolvido. Há um par de opções. Se a equipe for grande o
suficiente, você provavelmente poderá iniciar a próxima versão enquanto alguns membros da
equipe trabalham com a versão existente (Versão 2 – Alternativa 2 na Figura 20-2). Se você
tiver uma equipe pequena, talvez seja necessário considerar uma Iteração 0 com
programadores fazendo refatoração ou picos (experimentos) em novas funcionalidades para
que o testador que trabalha com o cliente não fique para trás (Versão 2 – Alternativa 1 na
Figura 20-2).
Seja criativo ao lidar com as circunstâncias impostas à sua equipe pelas realidades do seu
projeto. Embora os planos raramente funcionem conforme o esperado, planejar com
antecedência ainda pode ajudá-lo a garantir que as pessoas certas estejam no local para
entregar o produto em tempo hábil.
ENTREGAS
Na primeira seção deste capítulo falamos sobre o que constitui um produto. A resposta
dependerá, na verdade, do público: quem está aceitando o produto e quais são suas
expectativas?
Machine Translated by Google
ENTREGAS 469
Se seus clientes precisarem atender aos requisitos de conformidade da SOX (Sarbanes-Oxley), algumas
entregas serão necessárias. Por exemplo, uma cliente Janet trabalhou com resultados de testes de feltro
que deveriam ser minuciosamente documentados,
e fez dos resultados dos testes um de seus pontos de medição de conformidade com a SOX, enquanto um
clientes diferentes não mediram os resultados dos testes. Trabalhe com conformidade e
pessoal de auditoria para identificar necessidades de relatórios quando você inicia um projeto.
As entregas nem sempre são para o cliente final e nem sempre estão em
a forma de software. Existem muitos clientes internos, como os membros da equipe de suporte à produção.
O que eles precisarão para tornar seu trabalho mais fácil?
Os diagramas de fluxo de trabalho podem ajudá-los a compreender novos recursos. Eles iriam
provavelmente gostaria de saber se existem soluções alternativas para que possam ajudar
clientes através de problemas.
Janet costuma ser questionada sobre a cobertura de testes de código, geralmente pela gerência.
Quanto do aplicativo está sendo testado pelos testes de unidade ou regressão
testes? O problema é que o número por si só é apenas um número, e há
tantas razões pelas quais pode ser alto ou baixo. Além disso, a cobertura do código não informa
você sobre recursos que podem ter sido perdidos, para os quais ainda não existe código.
O público para uma entrega como a cobertura de código não deve ser o gerenciamento, mas a própria
equipe. Pode ser usado para ver quais áreas do código não são
sendo testado.
O treinamento também pode ser considerado um resultado final. Muitas aplicações exigem
sessões de treinamento personalizadas para clientes. Outros podem precisar apenas online
ajuda ou um manual do usuário. O treinamento pode determinar o sucesso do seu produto,
então é importante considerar. A equipe de Lisa costuma escrever cartões de tarefas para um
testador ou proprietário do produto para garantir que os materiais e sessões de treinamento sejam
arranjado. Algumas pessoas podem achar que o treinamento não é tarefa dos testadores ou de qualquer outra pessoa
na equipe de desenvolvimento. No entanto, as equipes ágeis pretendem trabalhar o mais próximo possível
possível com o negócio. Os testadores geralmente têm experiência no domínio para poder
para pelo menos identificar o treinamento que pode ser necessário para recursos novos ou atualizados.
Mesmo que o treinamento não seja de responsabilidade do testador, ele poderá levantar a questão se o
a empresa não está planejando sessões de treinamento.
Muitas equipes ágeis têm redatores técnicos como parte da equipe que escreve online
ajuda ou formulários eletrônicos de documentação. Um aplicativo ainda incluído
Machine Translated by Google
Coni Tartaglia, gerente de testes de software da Primavera Systems, Inc., reflete sobre o que
funcionou para sua equipe na entrega de itens que não são códigos, mas são necessários para um
lançamento bem-sucedido.
Além do software, o que a equipe está entregando? É útil conversar com pessoas fora da equipe
de desenvolvimento que possam estar preocupadas com esta questão. Grupos como Jurídico,
Marketing de Produto, Treinamento e Suporte ao Cliente desejarão contribuir para a lista de
resultados.
Após haver acordo sobre o que está sendo entregue, a montagem dos componentes pode
começar, e a função de Gerenciamento de Liberação pode fornecer a confirmação da entrega
através da execução de um check-list de liberação. Se a versão for uma atualização de um
produto existente, os testadores poderão verificar os resultados das versões anteriores para
garantir que nada crítico seja deixado de fora do pacote de atualização. Os resultados podem
incluir avisos legais, documentação, traduções e software de terceiros que são fornecidos como
cortesia aos clientes.
As equipes ágeis estão agregando valor, não apenas software. Trabalhamos em conjunto com a equipe
do cliente para melhorar todos os aspectos do produto.
Não existem regras rígidas e rápidas sobre o que deve ser entregue com o produto. Pense nas entregas
como algo que agrega valor ao seu produto. Quem deve ser o destinatário da entrega e quando faz mais
sentido entregá-la?
LIBERANDO O PRODUTO
Quando falamos em lançar o produto, queremos dizer disponibilizá-lo para
o cliente em qualquer formato que possa assumir. Sua organização pode
ter um site que é atualizado ou um aplicativo personalizado que é entregue a um
poucos grandes clientes. Talvez o produto seja embalado e entregue em
milhões de PCs em todo o mundo ou baixados da Internet.
para ser atendido. Nós os capturamos para cada história no início de cada iteração e
também podemos especificá-los para conjuntos de recursos maiores quando iniciamos um tema ou
épico. Os clientes podem definir critérios de qualidade, como uma certa porcentagem de código
cobertos por testes automatizados ou que determinados testes devem ser aprovados. Itens de linha como
ter zero bugs críticos ou zero bugs com sério impacto no sistema são
muitas vezes parte dos critérios de liberação. Os clientes precisam decidir como irão
saiba quando há valor suficiente no produto. Os testadores podem ajudá-los a definir
liberar critérios que cumpram seus objetivos.
As equipes ágeis trabalham para atingir o espírito das metas de qualidade, não apenas a letra.
Eles não rebaixam a gravidade dos bugs para médio, então podem dizer que
atingiu o critério de ausência de bugs de alta gravidade. Em vez disso, eles frequentemente olham
nas tendências de bugs e pense em maneiras de garantir que bugs de alta gravidade não ocorram
em produção.
Seu nível de qualidade deve ser negociado antecipadamente com seu cliente para que
não há surpresas desagradáveis. A aceitação testa sua equipe e seu
clientes definidos, usando exemplos reais, devem servir como marcos para
progresso em direção à liberação. Se o seu cliente tem uma tolerância muito baixa a bugs,
e 100% desses testes de aceitação devem ser aprovados, sua velocidade de iteração
deveria levar isso em consideração. Se novos recursos são mais importantes do que
correções de bugs, bem, talvez você envie com bugs.
Bob Galen, treinador ágil e autor de suas Jogos Finais de Software, explica como
equipes define critérios de aceitação de lançamento e avalia se eles
perna com.
Participei de várias novas equipes ágeis nos últimos anos e tenho visto um padrão
comum nessas equipes. Minha equipe atual faz um trabalho maravilhoso ao
estabelecer critérios em nível de história de usuário ou recurso - basicamente
definição de critérios de aceitação. Trabalhamos muito para refinar nossos critérios
de aceitação. Inicialmente eles foram desenvolvidos a partir dos Product Owners
perspectiva, e muitas vezes eram bastante ambíguos e mal definidos. Os testadores
decidiram que poderiam realmente ajudar os clientes a refinar seus testes para
torná-los muito mais relevantes, claros e testáveis. Essa colaboração provou ser
uma vitória significativa no nível da história, e os Product Owners realmente
valorizaram o envolvimento e a ajuda.
Um problema que tivemos, porém, foi conseguir que o mesmo nível de clareza de
“prontidão” no nível da história se estendesse além das histórias individuais. Descobrimos
que muitas vezes, quando nos aproximamos do final de um Sprint ou do jogo final de um
lançamento, tínhamos expectativas abertas sobre o que a equipe deveria realizar dentro do
sprint. Por exemplo, entregaríamos histórias que foram exaustivamente testadas “nos
pequenos”; isto é, a funcionalidade dessas histórias foi testada, mas as histórias não
foram integradas em nosso ambiente de teste para testes mais amplos. Isso não fazia
parte do nosso “entendimento”, mas as partes interessadas externas tinham essa expectativa
em relação aos resultados das equipes.
A forma como as equipes resolveram esse problema foi encarar nossos critérios como
um conjunto de metas orientadoras de vários níveis que envolvem cada fase, por assim
dizer, do desenvolvimento ágil. Um exemplo disso é mostrado na Tabela 20-1.
Definir o cozimento nesses níveis individuais provou funcionar para nossas equipes e
melhorou significativamente nossa capacidade de quantificar e atender a todas as diversas
expectativas dos clientes. Tenha em mente que existe uma conexão entre todos os
critérios, portanto definir um nível realmente ajuda a definir os outros. Muitas vezes
começamos no nível dos Critérios de Liberação e trabalhamos “de trás para frente”.
Sprint ou Iteração Critérios de cozimento Definir uma meta do Sprint que esclareça o
Nível desenvolvimento de recursos e todas as dependências
externas associadas a um sprint
Nível de liberação Critérios de liberação Definir um amplo conjunto de condições
(artefatos, atividades de teste ou níveis de cobertura,
resultados/métricas, colaboração com outros
grupos, cumprimento de níveis de conformidade, etc.)
que, se atendidas, significariam que a liberação
poderia ocorrer
Machine Translated by Google
Cada projeto, cada equipe, cada negócio é único. Equipes ágeis trabalham com
especialistas em negócios decidam quando estarão prontos para entregar software para produção. Se o
prazo de lançamento for definitivo, a empresa terá que modificar
escopo. Se houver flexibilidade suficiente para lançar quando o software tiver o suficiente
valor, as equipes podem decidir quando os critérios de qualidade foram atendidos e o
o software pode ir para produção.
• Inclui todos os recursos que agregam valor comercial ao lançamento, incluindo arte, logotipos,
acordos legais e documentação
• Atende todos os critérios de aceitação de
construção • Tem prova de que todos os testes acordados (aceitação, integração, regressão
missão, não funcional, UAT) passaram
• Não possui relatórios de defeitos abertos
A equipe de Coni desafia o software que eles podem enviar com um conjunto final de inspeções e “testes
de aceitação de lançamento” ou “RATS” acordados. Ela explica:
Combine antecipadamente quais testes serão repetidos se um RAT conseguir causar a falha de
uma versão release candidate. Se o software sobreviveu a várias iterações de testes de
regressão automatizados executados continuamente, passar nesses desafios finais deverá ser
muito fácil.
A definição dos critérios de aceitação depende, em última análise, dos clientes. Os testadores estão em
uma posição única para ajudar o cliente e as equipes de desenvolvimento a chegarem a um acordo
sobre os critérios que otimizam a qualidade do produto.
Gerenciamento de Liberação
Muitas organizações têm uma equipe de gerenciamento de lançamento, mas se você não tiver, alguém
ainda fará o trabalho. Muitas vezes, em uma organização pequena, é o gerente de controle de qualidade
quem cumpre essa função. A pessoa que lidera a liberação pode realizar uma liberação
reunião de preparação com as partes interessadas para avaliar a preparação.
Uma lista de verificação de preparação para lançamento é uma ótima ferramenta para analisar o que é
importante para sua equipe. A intenção desta lista de verificação é ajudar a equipe a determinar
objetivamente o que foi concluído e identificar os riscos associados
não completar uma tarefa.
Por exemplo, se o treinamento não for necessário porque as alterações feitas no produto foram
transparentes para o usuário final, o risco será baixo. No entanto, se houver
houve mudanças significativas no processo de como um novo usuário é criado no
sistema, o risco seria muito alto para as equipes de suporte ou ajuda à produção,
e pode justificar um atraso. As necessidades de todas as partes interessadas devem ser consideradas.
As notas de versão são importantes para qualquer lançamento de produto. A formalidade destes
depende do público. Se o seu produto é voltado para desenvolvedores, então uma “leitura
me” provavelmente está bom. Em outros casos, você pode querer torná-los
mais formal. Qualquer que seja a mídia, ela deve atender às necessidades do público. Não forneça
muitas informações adicionais que não sejam necessárias.
Quando Janet recebe um novo lançamento, uma das primeiras coisas que ela faz é verificar o
versão e todos os componentes. “Recebi o que eles disseram que me deram?
Há instruções especiais que preciso considerar antes da instalação, como dependências ou scripts de
atualização?” Essas são boas perguntas simples de responder
nas notas de lançamento. Outras coisas a incluir são os novos recursos que o cliente deve procurar.
As notas de versão devem dar atenção especial aos componentes que não são
parte do que sua equipe de desenvolvimento entregou, como um arquivo de ajuda ou usuário
manuais preparados por uma equipe diferente. Às vezes, notas de lançamento antigas são deixadas
a mídia de liberação, que pode ou não ser útil para o usuário final. Considerar
o que é certo para sua equipe e sua aplicação.
Embalagem
no UAT e é a versão que lançamos para produção. Isso é fundamental para um lançamento bem-
sucedido.
EXPECTATIVAS DO CLIENTE
Antes de lançarmos um novo software para nossos clientes, é melhor termos certeza de que eles
estão prontos para isso. Devemos ter certeza de que eles sabem quais novas funcionalidades esperar
e que eles tenham alguns meios para lidar com os problemas que surgirem.
Suporte à Produção
Muitas organizações têm uma equipe de suporte à produção ou operações que
mantém o código e oferece suporte aos clientes após sua produção. Se seu
empresa possui uma equipe de suporte à produção, esse grupo é seu primeiro cliente.
Faça dele seu parceiro também. As equipes de suporte à produção recebem relatórios de defeitos
e solicitações de melhorias dos clientes, e eles podem trabalhar com seu
equipe para identificar áreas de alto risco.
Considerações Internacionais
Markus Gärtner, líder do grupo de testes “afetados pelo ágil”, explica a abordagem de sua equipe para
cronometrar seus lançamentos:
Construímos software de telecomunicações para celulares, por isso geralmente instalamos nosso
software à noite, quando é provável que ninguém faça chamadas. Isso pode ocorrer durante
nosso horário comercial, quando atendemos um cliente na Austrália, mas geralmente é durante a
noite.
Meus colegas que fazem a instalação propriamente dita (há três em nossa equipe) provavelmente
chegarão atrasados durante o horário comercial do dia seguinte porque não temos um grupo
separado para essas tarefas.
Novos lançamentos devem ser o mais transparentes possível para o cliente. Quanto menos
lançamentos de emergência ou patches necessários após um lançamento, mais confiança
seu cliente terá tanto no produto quanto na equipe de desenvolvimento.
Aprenda com cada lançamento e tome medidas para fazer com que o próximo seja mais produtivo
suavemente. Envolva todas as funções, como administradores de sistema e de banco de dados,
o planejamento. Avalie cada lançamento e pense em maneiras de melhorar o próximo.
RESUMO
Este capítulo abordou os seguintes pontos:
A entrega bem-sucedida de um produto inclui mais do que apenas a aplicação que você
está construindo. Planeje as entregas que não sejam de software, como documentação, avisos
legais e treinamento.
O jogo final é uma oportunidade de dar brilho e polimento, os retoques finais, ao seu produto.
Machine Translated by Google
RESUMO 477
Parte VI
RESUMO
Capítulo 21
Sucesso chave
Fatores
Integração contínua
Automatize testes de regressão
Ambientes de teste
Construir um
Gerenciar dívida técnica Fundação Fornecer e obter feedback
Trabalhando incrementalmente
do Núcleo Ágil
Práticas
Codificação e teste fazem parte de um processo
Tendo viajado por uma iteração e além, acompanhando um testador ágil enquanto ele se envolve
em muitas atividades, podemos agora escolher alguns fatores-chave que ajudam os testadores a ter
sucesso em equipes ágeis e ajudam as equipes ágeis a ter sucesso no fornecimento de um produto
de alta qualidade. Acreditamos que os testadores ágeis têm algo especial a oferecer. Testadores
“infectados pelo Agile” aprendem como aplicar práticas e princípios ágeis para ajudar toda a equipe
a produzir um produto melhor. Programadores “infectados por testes” em equipes ágeis aprendem
como usar testes para produzir um trabalho melhor. As linhas entre os papéis são confusas, mas
isso é uma coisa boa. Todos estão focados na qualidade.
Reunimos algumas diretrizes críticas de testes para equipes ágeis e testadores a partir de
nossas próprias tentativas e erros, bem como de equipes com as quais trabalhamos.
Essas diretrizes são construídas na matriz de testes ágeis, em nossa experiência de aprender a
superar obstáculos culturais e organizacionais, em nossas aventuras no desempenho da função de
testador em equipes ágeis e em nossa experiência em descobrir a melhor forma de usar a
automação de testes. Gostamos de números da sorte, por isso neste capítulo apresentamos sete
fatores-chave que ajudam um testador ágil a ter sucesso.
Pedimos a um pequeno grupo de pessoas que estava revisando alguns de nossos capítulos
que sugerissem a ordem de apresentação desses fatores de sucesso. Os resultados variaram
bastante, embora muitos (mas não todos) concordassem com os dois primeiros. Escolha o fator
de sucesso que lhe proporcionará o maior retorno do investimento e comece a trabalhar nisso hoje.
481
Machine Translated by Google
Se você gerencia uma equipe ágil, use as sugestões da Parte II, “Organizacional
Desafios”, para ajudar sua equipe a adotar a abordagem de equipe inteira. Lembrar
que a qualidade, e não a velocidade, é o objetivo do desenvolvimento ágil. Sua equipe precisa
testadores para ajudar os clientes a esclarecer os requisitos, transformá-los em testes que orientam
desenvolvimento e fornecer um ponto de vista único que promoverá a entrega de um
produto sólido. Certifique-se de que os testadores possam transferir suas habilidades e conhecimentos para
o resto da equipe. Certifique-se de que eles não sejam classificados em uma função como apenas
fazendo testes manuais. Certifique-se de que, quando eles pedirem ajuda (o que pode exigir muita coragem
da parte deles), os membros da equipe a ajudem. O
o inverso também é verdadeiro; um testador deve intervir sempre que alguém precisar de assistência que
possa fornecer.
abordagem.
Não queremos dizer que você deva colocar sua capa de Super Tester e ir se proteger
o mundo de insetos. Não há espaço para grandes egos em equipes ágeis. Seu
colegas de equipe compartilham sua paixão pela qualidade. Concentre-se nos objetivos da equipe e faça
o que você puder para ajudar todos a fazerem seu melhor trabalho.
Use princípios e valores ágeis para orientá-lo. Sempre tente a abordagem mais simples para atender a
uma necessidade de teste. Seja corajoso ao procurar ajuda e experimentar novas ideias. Concentre-se
em entregar valor. Comunique-se diretamente
e tão frequentemente quanto possível. Seja flexível ao responder às mudanças. Lembre-se disso
o desenvolvimento ágil é centrado nas pessoas e que todos devemos gostar do nosso trabalho.
Na dúvida, volte aos valores e princípios para decidir o que fazer.
Se você gerencia testadores ágeis ou uma equipe ágil, dê-lhes tempo para aprender e forneça suporte
para o treinamento necessário. Remova os obstáculos para que eles possam fazer
seu melhor trabalho.
Quando você se deparar com problemas que afetam os testes, traga esses problemas
para a equipe. Peça à equipe que pense em maneiras de superar esses obstáculos.
As retrospectivas são um lugar para falar sobre problemas e como resolvê-los.
Mantenha um backlog de impedimentos e resolva um ou dois em cada iteração. Usar
grandes gráficos visíveis, ou seus equivalentes virtuais, para garantir que todos estejam
ciente dos problemas que surgem e que todos podem acompanhar o progresso da codificação e dos
testes.
Machine Translated by Google
O desenvolvimento ágil usa testes para orientar o desenvolvimento. Para escrever código para
para passar no teste, você precisa de uma maneira rápida e fácil de executá-lo. Sem o
curto ciclo de feedback e regressão da rede de segurança que as suítes fornecem, sua equipe
em breve ficará atolado em dívidas técnicas, com uma fila crescente de defeitos e
Consulte a Parte II para obter
velocidade cada vez mais lenta.
mais informações sobre os
para obter mais informações Quadrantes e pirâmide de automação de testes para ajudá-lo a automatizar diferentes
sobre a pirâmide de
tipos de testes de forma eficaz.
automação de testes.
Lembre-se de começar de forma simples. Você ficará surpreso com o valor de alguns itens básicos
testes automatizados de fumaça ou testes unitários automatizados podem fornecer.
A automação de testes é um esforço de equipe. Também é difícil, pelo menos no início. Muitas vezes há um
Consulte a bibliografia para
grande “corcunda de dor” a superar. Se você gerencia um projeto de desenvolvimento ou teste
recursos sobre promoção de
mudanças. equipe, certifique-se de fornecer suporte suficiente na forma de tempo, treinamento e motivação. Se você
é um testador em uma equipe sem automação e o
os programadores estão muito frenéticos tentando escrever código de produção para parar e
pense em testar, você tem um grande desafio pela frente. Experimente com
diferentes maneiras de obter apoio da gestão e dos membros da equipe
para iniciar algum pequeno esforço de automação.
Os métodos ágeis permitem que sua equipe obtenha feedback sobre o software que você
está construindo. Essa é a questão. O feedback funciona em vários níveis.
A programação em pares oferece aos desenvolvedores feedback instantâneo sobre seu
código. As histórias representam unidades de trabalho onde testadores e analistas
podem fornecer feedback aos desenvolvedores. As versões de iteração facilitam o
feedback de fora da equipe. A maioria das práticas ágeis são valiosas porque criam
ciclos de feedback que permitem que as equipes se adaptem.
Muitas equipes adotam o Agile com uma abordagem de sacola sem perceber o objetivo das
práticas. Eles programam em pares sem discussão ou mudança de drivers. Eles enviam ao
controle de qualidade código que os testadores não podem testar porque os limites da
história são arbitrários; eles não sabem dizer se encontraram um bug ou apenas o fim
da história. As iterações tornam-se marcos do cronograma, em vez de oportunidades
reais para melhorar o alinhamento e ajustar os objetivos.
A razão pela qual as equipes ágeis podem fazer isso com menos planejamento é porque o
feedback permite que você tenha certeza de que está no caminho certo. Se você não
tiver feedback significativo, então você não é ágil. Você está apenas em uma nova forma de caos.
No meu último projeto, definimos nossas histórias para que fizessem sentido para todos
da equipe. Nossos analistas, testadores e desenvolvedores puderam compreender e
revisar histórias individuais. Mas descobrimos que precisávamos criar um agrupamento
maior, que chamamos de recursos, para facilitar uma revisão significativa de fora da nossa
equipe. Garantimos que todas as histórias de um recurso estivessem completas antes de
solicitar feedback de fora da equipe.
Ser capaz de dar e receber feedback significativo costuma ser um desafio para as pessoas.
No entanto, é crucial para o sucesso com o Agile.
O Agile não é mais rápido por si só. Agile é apenas um benefício em um mundo que
reconhece o valor da adaptação. E essa adaptabilidade precisa chegar até quem está
financiando o projeto. Não basta a equipe ser ágil. Os patrocinadores também precisam ser
ágeis. Todos os requisitos são realmente necessários? Sabemos exatamente como o
software precisa ser desde o início?
Machine Translated by Google
O Agile é mais rápido porque o feedback permite que você encontre e se concentre nos
recursos mais valiosos. Se você tem certeza de que sabe o que precisa ser construído, não
use o Agile. Se você não tem tempo para reunir e agir de acordo com o feedback dos clientes,
não use o Agile. Se você tem certeza de que todos entendem exatamente o que precisa ser feito
desde o início, então não
use Ágil.
As práticas ágeis constroem uma infraestrutura técnica e organizacional para facilitar a obtenção
e a ação de feedback. Se você não for se adaptar ao feedback, então essa infraestrutura
será um desperdício que só irá atrasá-lo.
Para nós, o valor do desenvolvimento ágil não é ser mais rápido, mas sim entregar valor com rapidez
suficiente para ajudar o negócio a crescer e ter sucesso. Os testadores desempenham um papel
fundamental no fornecimento do feedback que permite que isso aconteça.
Os testadores também precisam de feedback. Como você sabe que tem os exemplos certos de
comportamento desejado por parte dos clientes? Como saber se o teste
casos que você escreveu refletiram esses exemplos corretamente? Podem os programadores
entenda o que codificar observando os exemplos que você capturou e o
testes que você criou?
Uma das habilidades mais valiosas que você pode aprender é como pedir feedback sobre
seu próprio trabalho. Pergunte aos programadores se eles obtêm informações suficientes para
compreender os requisitos e se essas informações orientam sua codificação.
Pergunte aos clientes se eles acham que seus critérios de qualidade estão sendo atendidos. Reserve um tempo
tanto as reuniões de planejamento da iteração quanto as retrospectivas para falar sobre esses
questões e sugerir maneiras de melhorar.
Um velho ditado no ramo de testes diz: “Você não pode testar a qualidade do produto”. É claro que
isso também se aplica ao desenvolvimento ágil. Nós sentimos que você não pode
entregar software de alta qualidade sem seguir algumas práticas fundamentais.
Embora pensemos nelas como práticas ágeis, elas existem há mais de
o termo “desenvolvimento ágil” e são simplesmente práticas centrais de sucesso
desenvolvimento de software.
Integração contínua
Toda equipe de desenvolvimento precisa de gerenciamento de código-fonte e integração contínua
para ter sucesso. Você não pode testar com eficácia se não souber exatamente
Machine Translated by Google
o que você está testando e não poderá testar se não tiver nenhum código que possa implantar. Todos
os membros da equipe precisam verificar seu trabalho pelo menos uma vez por dia. Todo
a integração deve ser verificada por uma construção automatizada que inclua testes para fornecer
feedback rápido sobre o estado do software.
Ambientes de teste
Você não pode testar de forma produtiva sem um ambiente de teste controlado. Você
precisa saber qual compilação está implantada, qual esquema de banco de dados está sendo usado,
se alguém está atualizando esse esquema e quais outros processos estão
rodando na máquina.
O hardware está cada vez mais barato e há mais software de código aberto
está disponível e pode ser usado para ambientes de teste. Sua equipe deve fazer o
investimento para que você possa realizar testes exploratórios automatizados e manuais com eficácia,
de forma rápida e eficiente. Se houver um problema com o ambiente de teste, fale e deixe que seja
um problema para a equipe resolver de forma criativa.
As pessoas costumam dizer: “Nossa administração não nos dá tempo para fazer as coisas direito, nós
não temos tempo para refatorar e estamos com prazos apertados.” No entanto, é
não é difícil apresentar um caso de negócios claro mostrando o quão crescente é a dívida técnica
está custando à empresa. Existem muitas maneiras de medir código e defeito
taxas que podem traduzir a dívida técnica no seu impacto nos resultados financeiros.
Apenas apontar para sua velocidade decrescente pode ser suficiente. As empresas precisam
Machine Translated by Google
Uma boa cobertura de testes de regressão automatizados é fundamental para minimizar problemas técnicos.
dívida. Se estes estiverem faltando, reserve tempo em cada iteração para construir os testes automatizados,
planeje uma “iteração de refatoração” para atualizar ou adicionar as ferramentas necessárias,
e escrever testes e fazer grandes esforços de refatoração. Em cada iteração, pegue o
hora de guiar o código com testes, refatorar o código que você está tocando conforme necessário e
adicione testes automatizados onde eles estão faltando. Aumente suas estimativas para contabilizar
para este trabalho. No longo prazo, a equipe poderá ir muito mais rápido.
Trabalhando incrementalmente
Uma das razões pelas quais as equipes ágeis são capazes de criar um produto de qualidade é que elas trabalham
em pequena escala. As histórias representam alguns dias de trabalho, e cada história pode ser
quebrado em várias fatias finas ou fios de aço e construído passo a passo. Isso permite testar cada peça
pequena e, em seguida, testar gradativamente à medida que as peças são
coloque junto.
Se os membros da sua equipe ficarem tentados a assumir uma grande quantidade de funcionalidades
Leia mais sobre
imediatamente, incentive-os a adotar uma abordagem gradual. Pergunte:
pequenos pedaços
e fatias finas no “Qual é o valor comercial central nesta história? Qual é o caminho mais básico
Capítulo 8, através deste pedaço de código? O que viria a seguir? Sugerir tarefa de escrita
“Testes voltados cartões para codificar e testar as pequenas peças, obter uma prova de conceito para o seu design,
para os
e confirme sua estratégia de testes e automação de testes.
negócios que apoiam a equipe”.
Pessoas que são novas no Agile geralmente perguntam aos testadores ágeis: “O que vocês fazem até que todos
as histórias terminaram e você pode testar?” Praticantes ágeis experientes dizem:
“Os testadores devem estar envolvidos em toda a iteração, em todo o processo de desenvolvimento. Caso
contrário, não funciona.”
Os testadores escrevem testes, com base em exemplos fornecidos pelos clientes, para ajudar os programadores
a entender a história e começar. Testes e exemplos fornecem uma linguagem comum que todos os envolvidos
na produção do software entendem.
Testadores e programadores colaboram estreitamente à medida que a codificação avança, e ambos
também colaborar estreitamente com os clientes. Os programadores mostram aos testadores o
funcionalidade que escreveram, e os testadores mostram aos programadores o inesperado
comportamentos que encontraram. Os testadores escrevem mais testes à medida que a codificação prossegue, a programação
Machine Translated by Google
os participantes os fazem passar e os testadores fazem mais testes exploratórios para saber se
o valor certo foi entregue. Cada iteração ágil consiste em dezenas de
iterações constantes, rápidas e incrementais de teste-código-teste-código-teste.
Quando esse ciclo de colaboração e feedback é perturbado e os testes são separados do desenvolvimento,
coisas ruins acontecem. Se uma história for testada na iteração após a qual foi codificada e bugs forem
encontrados, o programador terá que
pare de trabalhar na nova história, lembre-se de como o código funcionou no último
história da iteração, corrija-a e espere que alguém teste a correção. Existem poucos fatos
no desenvolvimento de software, mas sabemos com certeza que bugs são mais baratos de corrigir
mais cedo eles serão encontrados.
Algumas práticas não funcionam bem isoladamente. A refatoração é impossível sem testes automatizados.
É possível fazer pequenos lançamentos em estilo mini-cascata e evitar todos os benefícios do
desenvolvimento ágil. Se o seu cliente no local não estiver
com poderes para tomar decisões, seu valor para a equipe é limitado.
As práticas ágeis foram projetadas para se complementarem. Reserve um tempo para entender o
propósito de cada um, considere o que é necessário para aproveitar ao máximo
cada prática e tome decisões ponderadas sobre o que funciona para sua equipe.
Esse ponto de vista geral é uma grande contribuição para a equipe. Orientado a testes
desenvolvimento, bem feito, entrega código sólido que pode, isoladamente, estar livre de
defeitos. E se esse novo recurso causar alguma parte aparentemente não relacionada do
o aplicativo para quebrar? Alguém tem que considerar o impacto para o maior
sistema e trazer isso à atenção da equipe. E se tivermos esquecido alguns
pequeno detalhe que irritará os clientes? A nova IU pode ser perfeita
codificado, mas se a cor de fundo dificultar a leitura do texto, é isso que
o usuário final notará.
Use os quadrantes de testes ágeis como um guia para ajudá-lo a planejar testes que irão
A Parte III explica
cubra todos os ângulos. Use a ideia da pirâmide de teste para garantir um bom ROI do seu
como usar os
Quadrantes de automação de testes. Orientar o desenvolvimento com testes ajuda a garantir que você não
Teste Ágil. sinto falta de algo grande, mas não é perfeito. Use testes exploratórios para aprender
mais sobre como o aplicativo deve funcionar e que direção seu teste precisa tomar. Torne
seus ambientes de teste o mais semelhantes possível à produção, usando dados que
reflitam o mundo real. Seja diligente ao recriar
uma situação de estilo de produção para atividades como testes de carga.
Machine Translated by Google
RESUMO 491
RESUMO
O teste e a qualidade são responsabilidade de toda a equipe, mas os testadores trazem
um ponto de vista especial e habilidades únicas. Como testador, sua paixão por entregar
um produto que encante seus clientes o ajudará a superar as frustrações que você e sua
equipe podem encontrar. Não tenha medo de ser um agente de melhoria contínua. Deixe
que os princípios e valores ágeis o guiem enquanto você trabalha com o cliente e as
equipes de desenvolvimento, agregando valor ao longo de cada iteração.
Neste capítulo final, analisamos sete fatores-chave para testes ágeis bem-sucedidos:
GLOSSÁRIO
Este glossário contém as definições dos autores dos termos usados ao longo deste
livro.
Teste de aceitação Os testes de aceitação são testes que definem o valor comercial que cada
história deve oferecer. Eles podem verificar requisitos funcionais ou não funcionais, como
desempenho ou confiabilidade. Embora sejam usados para ajudar a orientar o
desenvolvimento, eles estão em um nível mais alto do que os testes de nível de unidade usados
para design de código no desenvolvimento orientado a testes. Teste de aceitação é um termo
amplo que pode incluir testes voltados para negócios e para tecnologia.
Componente Um componente é uma parte maior do sistema geral que pode ser implantada
separadamente. Por exemplo, na plataforma Windows, bibliotecas vinculadas dinâmicas
(DLLs) são usadas como componentes, arquivos Java (arquivos JAR) são componentes na
plataforma Java e uma arquitetura orientada a serviços (SOA) usa serviços da Web como
componentes.
493
Machine Translated by Google
494 GLOSSÁRIO
o código entregue para uma determinada história. Condições de satisfação são critérios
pelos quais o resultado de uma história pode ser medido. Eles evoluem durante conversas
com o cliente sobre critérios de aceitação de alto nível para cada história.
Discutir as condições de satisfação ajuda a identificar suposições arriscadas e aumenta a
confiança da equipe em escrever e estimar corretamente todas as tarefas para completar a
história.
Teste Exploratório O teste exploratório é um teste interativo que combina o design do teste
com a execução do teste e se concentra no aprendizado sobre o aplicativo.
Machine Translated by Google
GLOSSÁRIO 495
Consulte o Capítulo 10, “Testes voltados para os negócios que criticam o produto”, para obter
uma definição abrangente de testes exploratórios.
Java Messaging Service (JMS) A API Java Messaging Service (JMS) é um padrão de
mensagens que permite que componentes de aplicativos baseados na Java 2 Platform,
Enterprise Edition (J2EE) criem, enviem, recebam e leiam mensagens.
Sistema legado Um sistema legado é aquele que não possui nenhum (ou poucos) testes de
regressão automatizados. Introduzir alterações no código legado ou refatorá-lo pode ser
arriscado porque não há testes para detectar alterações não intencionais no comportamento
do sistema.
Machine Translated by Google
496 GLOSSÁRIO
Objeto simulado Um objeto simulado simula as respostas de um objeto existente. Ajuda a projetar
e testar interações entre objetos, substituindo um componente real para que um teste possa
verificar suas saídas indiretas.
Product Backlog Product Backlog é um termo Scrum para a lista mestre priorizada de todas as
funcionalidades desejadas no produto. Esse backlog aumenta com o tempo, à medida que a
organização pensa em novos recursos de que pode precisar.
Product Owner Product Owner é um termo Scrum para a pessoa responsável por priorizar o
backlog do produto, ou histórias. Ele ou ela normalmente é alguém com função de marketing ou
um importante especialista em negócios envolvido com desenvolvimento.
Equipe de Garantia de Qualidade (QA) A Garantia de Qualidade, ou QA, pode ser definida como
ações tomadas para garantir a conformidade com um padrão de qualidade. No desenvolvimento
de software, o termo “Equipe de controle de qualidade” é frequentemente usado para se referir à
equipe que faz testes de software. As equipes de teste (consulte Equipe de Teste) fornecem às
partes interessadas informações relacionadas à qualidade do produto de software. Eles realizam
atividades para aprender como o sistema em teste deve se comportar e verificar se ele se comporta
conforme o esperado. No desenvolvimento ágil, essas atividades são totalmente integradas às
atividades de desenvolvimento. Os testadores geralmente fazem parte da equipe de
desenvolvimento junto com todos os demais envolvidos no desenvolvimento do software.
Código de produção Código de produção é o código do sistema que é, ou será, usado na produção,
diferentemente do código escrito para testá-lo. O código de teste invoca ou opera no código de
produção para verificar seu comportamento.
Refatoração Refatoração é alterar o código, sem alterar sua funcionalidade, para torná-lo mais
fácil de manter, mais fácil de ler, mais fácil de testar ou mais fácil de estender.
GLOSSÁRIO 497
Release Candidate Um release candidate é uma versão ou compilação do produto que pode
potencialmente ser lançada para produção. O release candidate pode ser submetido a mais
testes ou ser complementado com documentação ou outros materiais.
SOAP SOAP é um protocolo para troca de mensagens baseadas em XML através de redes,
normalmente usando HTTP/HTTPS. Ele forma a camada base da pilha de protocolos de
serviços da Web, fornecendo uma estrutura básica de mensagens sobre a qual camadas
abstratas podem ser construídas. Um padrão de mensagens SOAP comum é o padrão Remote
Procedure Call (RPC), no qual o nó da rede cliente envia uma mensagem de solicitação ao
nó do servidor e o servidor envia imediatamente uma resposta ao cliente.
História Uma história de usuário é uma breve descrição de uma funcionalidade contada da
perspectiva do usuário que é valiosa para ele ou para a equipe do cliente.
As histórias são tradicionalmente escritas em fichas. O cartão normalmente contém uma descrição
do recurso em uma linha. Por exemplo, “Como comprador, posso colocar itens no meu
carrinho de compras para poder finalizá-los mais tarde” é uma história.
Os cartões só podem ser usados em combinação com conversas subsequentes entre a
equipe do cliente e a equipe de desenvolvimento e alguma verificação de que a história foi
implementada por meio da escrita e execução de testes.
Story Board O storyboard, também chamado de quadro de tarefas, é usado para rastrear o
trabalho que a equipe realiza durante uma iteração. Cartões de tarefas, que podem ter
cores coordenadas para o tipo de tarefa, são escritos para cada história. Esses cartões,
junto com algum tipo de dica visual, fornecem um mecanismo fácil para ver o status atual do
progresso de uma iteração. Pode usar colunas ou
Machine Translated by Google
498 GLOSSÁRIO
adesivos de cores diferentes em cartões para diferentes estados, como “A fazer”, “Trabalho em
andamento”, “Verificar” e “Concluído”. O storyboard pode ser um quadro físico na parede ou um
quadro virtual online.
Tarefa Tarefas são peças de trabalho necessárias para terminar uma história. Uma tarefa pode
ser uma ação necessária para implementar uma pequena parte de uma história, ou pode ser para
construir uma infraestrutura ou testar que abrange mais de uma história. Geralmente deve
representar um dia ou menos de trabalho.
Dívida Técnica Ward Cunningham introduziu pela primeira vez esta metáfora. Quando uma
equipe produz software sem utilizar boas práticas como TDD, integração contínua e refatoração,
ela pode incorrer em dívida técnica. Assim como a dívida financeira, a dívida técnica rende juros
que custarão mais à equipe posteriormente. Às vezes, essa dívida pode valer a pena, como
para aproveitar uma oportunidade repentina de negócio. Normalmente, porém, a dívida técnica
aumenta e diminui a velocidade da equipe. Cada vez menos valor comercial pode ser produzido
em cada iteração porque o código carece de uma rede de segurança de testes de regressão
automatizados ou se tornou difícil de entender e manter.
Stub de teste Um stub de teste é um objeto que substitui um componente real necessário ao
sistema em teste por um objeto específico de teste que alimenta entradas indiretas desejadas no
sistema em teste. Isso permite que o teste verifique a lógica independentemente dos outros
componentes.
Equipe de Teste Uma equipe de teste executa atividades que ajudam a definir e posteriormente
verificar o comportamento desejado do sistema em teste. A equipe de teste fornece informações
às partes interessadas sobre a qualidade externa do sistema, os riscos que podem estar presentes
e possíveis estratégias de mitigação de riscos. Em desenvolvimento ágil
Machine Translated by Google
GLOSSÁRIO 499
Testador Um testador fornece informações às partes interessadas sobre o software que está sendo
desenvolvido. Um testador ajuda os clientes a definir requisitos funcionais e não funcionais e critérios
de qualidade, e ajuda a transformá-los em testes que orientam o desenvolvimento e verificam o
comportamento desejado. Os testadores realizam uma ampla variedade de atividades relacionadas ao
fornecimento de software de alta qualidade, como automação de testes e testes exploratórios. No
desenvolvimento ágil, todos da equipe de desenvolvimento realizam atividades de teste. Os
membros da equipe que se identificam como testadores trabalham em estreita colaboração com outros
membros das equipes de desenvolvedores e clientes.
Tema Um tema é o mesmo que um épico ou recurso. É uma funcionalidade descrita pelo cliente e colocada
no backlog do produto para ser dividida em histórias dimensionadas e estimadas.
Teste de Unidade Um teste de unidade verifica o comportamento de uma pequena parte do sistema
geral. Pode ser tão pequeno quanto um único objeto ou método que é consequência de uma ou mais
decisões de projeto.
Velocidade A velocidade de uma equipe de desenvolvimento é a quantidade de valor que ela entrega em
cada iteração, medida em pontos da história, dias ideais ou horas. Geralmente, apenas histórias concluídas
são incluídas na velocidade. O Velocity é útil para os negócios no planejamento de recursos e lançamentos
futuros. As equipes ágeis usam a velocidade da iteração anterior para ajudar a determinar a quantidade
de trabalho que podem realizar na próxima iteração.
BIBLIOGRAFIA
Alles, Micah, David Crosby, Carl Erickson, Brian Harleton, Michael Marsiglia, Greg Pattison
e Curt Stienstra. “Presenter First: Organizing Complex GUI Applications for Test-Driven
Development,” Agile 2006, Minneapolis, MN, julho de 2006.
Astels, David. Desenvolvimento Orientado a Testes: Um Guia Prático, Prentice Hall, 2003.
501
Machine Translated by Google
502 BIBLIOGRAFIA
Bos, Erik e Cristo Vriens. “An Agile CMM,” em Extreme Programming and Agile Methods–XP/Agile
Universe 2004, 4th Conference on Extreme Programming and Agile Methods, Calgary,
Canadá, 15–18 de agosto de 2004, Pro-ceedings, ed. Carmen Zannier, Hakan Erdogmus,
Lowell Lindstrom, pp.
129–138, Springer, 2004.
Buwalda, Hans. “Soap Opera Testing,” Better Software Magazine, fevereiro de 2004,
www.logigear.com/resources/articles_lg/soap_opera_testing.asp.
Clark, Mike. Automação pragmática de projetos: como construir, implantar e monitorar aplicativos
Java, The Pragmatic Programmers, 2004.
Crispin, Lisa. Artigos “Contratando um testador ágil”, “Uma estratégia de seleção de ferramentas
ágeis para ferramentas de teste da Web”, “Conduzindo a qualidade do software: como o
desenvolvimento orientado a testes afeta a qualidade do software”, http://lisa.crispin.home.att .líquido.
DeMarco, Tom e Timothy Lister. Gerenciando Riscos em Projetos de Software, Dor-set House,
2003.
Derby, Esther e Larsen, Diana. Retrospectivas ágeis: tornando boas equipes excelentes,
Pragmatic Bookshelf, 2006.
Derby, Esther e Rothman, Johanna. Atrás de portas fechadas: segredos de uma grande gestão,
Pragmatic Bookshelf, 2006.
Machine Translated by Google
BIBLIOGRAFIA 503
Dustin, Elfriede, Chris Wysopal, Lucas Nelson e Dino Dia Zovi. A arte dos testes de
segurança de software: identificando falhas de segurança de software, Symantec Press,
2006.
Dustin, Elfriede. “Teamwork Tackles the Quality Goal”, Teste e desempenho de software,
Volume 2, Edição 200, março de 2005.
Penas, Michael. Trabalhando Efetivamente com Código Legado, Prentice Hall, 2004.
504 BIBLIOGRAFIA
Kaner, Cem, James Bach e Bret Pettichord. Lições aprendidas em testes de software,
Wiley, 2001.
Koenig, Dierk, Andrew Glover, Paul King, Guillaume Laforge e Jon Skeet.
Groovy em ação, Manning Publications, 2007.
Kohl, Jonathan. “Man and Machine”, revista Better Software , dezembro de 2007.
BIBLIOGRAFIA 505
Manns, Mary Lynn e Linda Rising. Mudança destemida: padrões para introdução de novas
ideias, Addison-Wesley, 2004.
MARICK, Brian. Scripting diário com Ruby: para equipes, testadores e você,
Estante Pragmática, 2007.
MARICK, Brian. “Uma alternativa ao TDD voltado para negócios”, www.exampler .com/
blog/categoria/aa-ftt, 2008.
Meszaros, Gerard, Ralph Bohnet e Jennitta Andrea. “Teste de regressão ágil usando
gravação e reprodução”, XP/Agile Universe 2003, Nova Orleans, LA, 2003, http://
agileregressiontestpaper.gerardmeszaros.com.
Meszaros, Gerard. “Usando Storyotypes para dividir histórias inchadas de XP”, http://
storyotypespaper.gerardmeszaros.com.
506 BIBLIOGRAFIA
Pettichord, Bret. “Sete etapas para testar o sucesso da automação”, www.io .com/
~wazmo/papers/seven_steps.html, 2001.
Schwaber, Ken. Gerenciamento Ágil de Projetos com Scrum, Microsoft Press, 2004.
Shore, James e Shane Warden. A Arte do Desenvolvimento Ágil, O'Reilly Media, 2007.
Machine Translated by Google
BIBLIOGRAFIA 507
Sutherland, Jeff, Carsten Ruseng Jakobsen e Kent Johnson. “Scrum e CMMI Nível 5:
A Poção Mágica para Guerreiros do Código”, Agile 2007, Washington, DC, 2007, http://
jeffsutherland.com/scrum/
Sutherland-ScrumCMMI6pages.pdf.
Thomas, Mike. “Strangling Legacy Code”, revista Better Software , outubro de 2005, http://
samoht.com/wiki_downloads/StranglingLegacyCodeArticle.pdf.
VRIENS, Cristo. “Certificando para CMM Nível 2 e ISO9001 com XP@Scrum”, em ADC 2003:
Proceedings of the Agile Development Conference, 25–28 de junho de 2003, Salt Lake City,
UT, EUA, 120–124, IEEE, 2003.
REFERÊNCIAS DE FERRAMENTAS
508 BIBLIOGRAFIA
Hower, Rick, Informações sobre controle de qualidade de software e ferramentas de teste, www.softwareqatest.com/
qattls1.html.
ÍNDICE
GUI, 127 testes de aceitação. Veja também testes voltados para negócios Testadores ágeis. Veja também Testadores
definição, 501 mentalidade de teste ágil, 482–483
Exemplo de sistema de monitoramento remoto de dados, definição, 4 dar
245 peso igual a todos os membros da equipe, 31
UAT (teste de aceitação do usuário) em comparação contratações, 67–
com 130 69 o que eles são, 19–20
Testes ad hoc, 198 definição de
Adaptabilidade, habilidades e, 39–40 teste ágil, 6
ADEPT (Monitores AS400 para Externos como mentalidade, 20–
Prototipagem e Teste), 117–118 21 o que queremos dizer,
Clientes com maior 4 –7 valores Agile, 3–
clareza falando em uma só voz, 4 FIT IssueTrack da Alcea, 84
373–374 testes Alpha, 466–467 ant,
determinar o tamanho da história, 375– 284 como
376 reunir todos os pontos de vista sobre os ferramenta de
requisitos, 374–375 visão geral construção, 126 compilações contínuas
de, 140–142, 373 Desvantagens e, 175, 291
da preparação antecipada AnthillPro, 126 ANTS Profiler
de, 373 quanto é Pro, 234 Apache JMeter. Consulte
necessário, 372–373 Desenvolvimento ferramentas de teste funcional da camada API
ágil Manifesto ágil e, 3–4 JMeter, 168–170 Fit e FitNesse,
barreiras para. Consulte Barreiras 168–170 visão geral
para adotar a orientação da equipe de desenvolvimento de, 168 testes de serviços da
ágil de, 6 Agile web, 170
Estimating and Planning automação de testes
(Cohn), 331, 332 Manifesto ágil foco nas pessoas, 30 declaração de API, 282 visão geral de,
de, 4 declarações de 205–206 APIs (interfaces de programação de aplicativos),
valor em, 21 501
509
Machine Translated by Google
510 ÍNDICE
impulsionando o desenvolvimento com, 262– dedicar tempo para fazer tudo certo, 301–303
263 de testes exploratórios, 201 pirâmide de automação de testes, 276–279
medo de, 269–270 categorias de testes, 274–276
feedback de, 262 seleção de ferramentas, 294–298, 313–316
liberando pessoas para outro trabalho, 259–261 de compreender o propósito dos testes e, 310–311 o que pode
estrutura de teste funcional, 245–247 casa - ser automatizado, 279–285 o que pode ser
teste fabricado, 175 difícil de automatizar,
investimento necessário, 267–268 287–288
Machine Translated by Google
ÍNDICE 511
o que não deve ser automatizado, 285–287 abordagem fatores-chave de sucesso, 490–491
de toda a equipe, 300–301 perigo de esquecimento, 148
Ferramentas de automação, 164–177 testes de regressão e 434
Ferramentas de teste funcional da camada API, 168– Bolton, Miguel, 195
170 compilações e 126 Chefe, Erik, 114
Ferramentas de teste de GUI, visão Condições limite
geral 170–176 de, 164–165 Testes de API e, 205
ferramentas de teste em nível de unidade, automação e, 11
165–168 ferramenta de teste de serviços da web, 170 ferramentas de geração de dados e, 304
identificando variações de teste, 410
B escrevendo casos de teste para, 137
Bach, James, 195, 200, 212 Boyer, Erika, 140, 163, 372, 432
Bach, Jônatas, 201 Automação de
Teste de back-end por brainstorming proporcionando melhor trabalho aos testadores,
trás da GUI, 282 testes não 260
culturais entre funções, 48–49 falta de treinamento, 45 linha de base de teste de quebra, 363
falta de compreensão dos navegadores, testes de compatibilidade e, 230 limites
conceitos ágeis, de orçamento, 55
45–48 rastreamento de bugs. Consulte Bugs de
perda de identidade, 44-45 rastreamento de
visão geral de, 44 defeitos.
Os testadores 291
ágeis de visão geral se Poder de Três e 482 ferramentas
512 ÍNDICE
250 testes exploratórios, 195–202, 248–249 Dados canônicos, automatizando bancos de dados e,
geração de dados de teste, 212 308–309
ferramentas para. Consulte Teste de serviços IC. Consulte Integração contínua (CI)
da Web do Toolkit (Quadrante 2), 247–248 Fábrica de CI, 126
Impacto nos negócios, 475–476 CMMI (Integração de Modelo de Maturidade
de Capacidade), 90–91
Machine Translated by Google
ÍNDICE 513
escolhendo quando corrigir bugs, 421–423 voltados para os negócios e, definição 142–
colaborando com programadores, 413–414 lidando 143, 501–502
com bugs, 416–419 decidindo quais Definição de teste orientado
bugs registrar, 420 –421 impulsionando o ao contexto, 502
desenvolvimento e, 406 facilitando a quadrantes e 106–107
comunicação, 429–432 focando em uma história, Processo de construção contínuo
411–412 identificando variações, 410 notificação de falha e, 112 feedback
métricas de iteração, 435–440 e, 119
mídia para registrar bugs, 423– Testes FitNesse e, 357
424 visão geral de, 405 implementação, 114
ferramentas de integração com, 175,
Poder de Três para resolver diferenças de ponto de 311 controle de código-fonte e, 124,
vista, 411 testes o que os testadores podem fazer, 121
de regressão e, 432–434 recursos, 434– Princípio de feedback contínuo, 22
435 avaliação de risco, Princípio de melhoria contínua, 27–28
407–409 como processo Automação de integração contínua
simultâneo, 409–410, (CI), 280–282 como prática
488–489 principal, 486–487 instalabilidade
começando de forma simples, 406, e, 231–232
428–429 conversando com clientes, Exemplo de sistema de monitoramento remoto de dados,
414–415 testes que criticam o produto, 412–413 244 testes em execução e, 111–112
Cohn, Mike, 50, 155, 276, 296, 331, 332 Conversão, migração de dados e, 460–461
Colaboração com Práticas básicas
clientes, 396–397 fatores-chave de codificação e teste como um processo, 488–489
de sucesso, 489–490 integração contínua, 486–487
Machine Translated by Google
514 ÍNDICE
Ward, 106, 168, 506 Expectativas do cliente, dados evitando acesso durante a execução de testes, 306–
impacto nos negócios e, 475– 310 dados canônicos e automação, 308–309
476 suporte à produção, 475 capacidade de manutenção e
228 entrega e atualizações de produtos, 459–461
Teste voltado para o cliente. Consulte testes voltados para dados e automação semelhantes à produção,
negócios Suporte ao cliente, DTS (Defect Tracking 309–310
ÍNDICE 515
bugs registrar, 420–421 mídia para registrar bugs, arte e ciência da escrita, 178 abordagem
423–424 métricas e, 79 geral e, 148–149 design com, 401
de produto, 470 ambiente de teste e 458 testes testes automatizados como fonte de, 263–264
de automação de projeto e, 292–294 projeto escolha de mídia para registrar bugs, 424
com testes em mente, 115–118 documentação de problemas e correções, 417
Machine Translated by Google
516 ÍNDICE
padrões de design de teste, 181 Everyday Scripting with Ruby barreiras à automação, 269–270 mudanças
for Teams, Testers, and You (Marick), 297, 303 Desenvolvimento e, 49–50
orientado a exemplos, 378–380 Mudança Destemida (Manns and Rising), 121
Exemplos para elicitar requisitos, 136–137 Penas, Michael, 117, 288
ferramentas Características
ÍNDICE 517
ilustradas com, 205 testes funcionais por trás da Galeno, Bob, 455–456, 471
GUI, 291, Gärtner, Markus, 395, 476
300 Equipes geograficamente dispersas
scripts desenvolvidos internamente e, lidando com, 376–378
305 JUnit em comparação com, facilitando a comunicação e,
299 palavras-chave ou palavras de ações para 431–432
automatizar testes, Gheorghiu, Grig, 225–226, 234
182–183 testes manuais vs. automatizados, Glover, André, 166
210 demandas de memória de, Teste de código de
306 testes de organização e, 319–320 projetos Greenfield e,
visão geral de, 168–170 definição 116, 502–503
testes remotos e, 432 lista Estratégia de automação GUI (interface
“iniciar, parar, continuar”, 446 suporte gráfica do usuário) e, 293 fluxo de
para ferramentas de controle de código-fonte, código e, 269 padrões,
320 227
pirâmide de automação de teste e, 278 Testes de fumaça GUI
518 ÍNDICE
ÍNDICE 519
tarefas, 389–392 K
considerando todos os pontos de vista, 385–389 feedback, 484–486 base de práticas básicas, 486
controlando a carga de trabalho, abordagem incremental
393 aprendendo detalhes do projeto, 384– (fatias finas, pequenos pedaços), 488 visão
385 visão geral de, 383–384 geral de, 481 sinergia entre práticas, 489 gerenciamento
escrevendo cartões de tarefas, 389–392 técnico de
Reunião de revisão de iteração, 415 dívidas, 487–488
Conclusão da iteração, 443–451 ambientes de teste, 487 abordagem de
celebrando sucessos, 449–451 equipe inteira, 482
demonstração de iteração, 443–444
ideias para melhoria, 447–449 retrospectivas,
444–445 exercício “iniciar, Testes baseados em palavras-chave, 182–183
520 ÍNDICE
ÍNDICE 521
522 ÍNDICE
memória, 237– 238 visão geral clientes falando a uma só voz, 373–374 determinando
de, 234 entrega de produto e, o tamanho da história, 375–376
458 testes de escalabilidade, avaliando a quantidade de preparação antecipada
233–234 ambiente de necessária, 372–373
teste, 237 ferramentas exemplos, 378–380
para, 234–235 quando executar, 223 reunindo todos os pontos de vista sobre
quem realiza o teste, 220–221 os requisitos, 374–375
equipe geograficamente dispersa e,
Desempenho, recompensas e, 70–71 376–378
ÍNDICE 523
Python, 126
considerando todos os pontos de vista durante o planejamento
da iteração, 386–389 Q
524 ÍNDICE
à equipe (1º e 2º trimestre), 100–101 tecnologia voltada compilações desafiadoras de release candidate,
(1º e 4º trimestre), 97–98 473
ÍNDICE 525
Tarefas repetitivas, automação, 284 Rogers, Paulo, 242, 310, 388, 398
Automação de ROI (retorno sobre o
Documentação de relatórios e, 208–210 investimento) e, 264
Exemplo de sistema de monitoramento remoto de dados, definição, 505
251 medição enxuta e, 75 métricas e,
Repositório, 124 78–79 falando a linguagem
Abordagem de do gerente, 55
testes voltados para o negócio de requisitos, 130 Função, função, padrão de valor comercial, 155
documentação de, 402 coleta
de todos os pontos de vista sobre requisitos, Funções conflitantes ou múltiplas, 45
374–375 como elicitar, 135– diferenças culturais entre, 48–49 equipe do
140 não funcionais, 218–219 cliente, 7 equipe de
dilemas, 132–134 ferramentas desenvolvedores, 7–8
para elicitar exemplos e interação de, 8
requisitos, Unidade RPG, 118
155–156 Rspec, 165, 318
Recursos Teste Ruby::Unidade, 170
completando histórias e, 381 Teste funcional Ruby
contratando testador ágil, 67–69 com Watir, 247
visão geral de, 66 Teste de GUI, 285
proporção testador-desenvolvedor, 66– identificando defeitos com, 212
67 testes e, 434–435 palavras-chave ou palavras de ação para automatizar
Tempo de resposta testes, 182
API, 411 visão geral de, 172–174
testes de carga e 234–235 metas automação de teste com, 186
mensuráveis e 76 serviços da RubyMock, 127
web e 207 Regras, gerenciamento de bugs e, 425
Retrospectivas de
melhoria contínua e, 28 ideias para melhoria, S
526 ÍNDICE
Scripts Simplicidade,
que automatizam comparações, 283 como automação e, 298–299 codificação,
ferramentas de automação, 297 406 registro de
scripts de conversão, 461 bugs e, 428–429 princípio de “manter
ferramentas de geração de dados, a simplicidade”, 26–27 Ferramentas do simulador,
305 testes exploratórios e, 211–212 testes incorporados
Scrum e, 248 visão geral de, 213 Tamanho,
função de proprietário do produto, 141, 373 organizacional, 42–43
ÍNDICE 527
528 ÍNDICE
T logística, 59
tail-f, 212 resolução de problemas e, 123
Tartaglia, Coni, 439, 454, 470, 473 Quadros de Exemplo de sistema de monitoramento remoto de dados,
tarefas. Consulte Storyboards Cartões de 243-244
tarefas responsabilidade compartilhada e, 105–106
automatizando testes e, 394–395 planejamento tradicional, 9–10 usando
7–8 capacitando, 44
facilitando a comunicação e, 429–432 geograficamente
dispersos , 376–378, 431–432 dando peso igual a todos os Testes voltados para a tecnologia, equipe de suporte
membros da equipe, 31 dando propriedade a, 50 (Quadrante 1)
para, 67–69 interação entre equipes de construção, 126 projetando com testes em mente, 115–
clientes e desenvolvedores, 8 planejamento de iteração e, 384– 118 facilidade de realizar tarefas, 114–115
385 IDEs para suporte de
ÍNDICE 529
testes de unidade, 244–245 o que fazer se a equipe não 350–354 planos de teste, amostra leve
realizar esses de plano de teste 350, 351 estratégia
testes, 121–123 onde/quando parar, 119–121 de teste vs., 86– 88
Abordagem multicamadas da rastreabilidade e 88 tipos de
pirâmide de automação de testes para automação e, testes e 346 por onde
290–291 começar, 345 comunicação
visão geral de, 276-279 de resultados de testes,
padrões baseados em tempo, atividades e eventos, 181 Equipes de teste, 506–507. Consulte também ferramentas de
(desenvolvimento orientado a testes) comparado com, 113– testes de desempenho, 234–235 testes
114 Gerenciamento de segurança, 225 testes
de testes, 186 Kit de em nível de unidade, 126–127, 165–168 testes
530 ÍNDICE
usabilidade, teste de aceitação do usuário. Consulte 458 avaliação de risco e, 407–409 ritmo
código e design de teste e, 184–185 visão geral de, 183 de teste GUI TestNG, 127 testes
de histórias, 393–396 que nunca falham, 286 matrizes
testadores de texto, 350–353 The Grinder,
234 Themes. Consulte
dimensionamento, 333–334
Machine Translated by Google
ÍNDICE 531
Ferramentas de teste funcional da camada API, 168–170 aberto, 172, 314–315 testes de
ferramentas de automação, 164–165 desempenho, 234–235 para proprietários de
testes de construção incremental, 178–179 listas de produtos e especialistas de negócios, 134 testes de segurança, 225
verificação, 156 simuladores, 213 baseados
modelos, 160
ferramentas baseadas em software, Ferramentas, automação
estratégias para escrever testes, 177–178 padrões de ferramenta por vez, 312–313 fabricado em casa, 175
185 estratégia de ferramentas, 153– ferramentas, 311–312 código aberto, 314–315 selecionando,
213 testes de aceitação do usuário, 250 Transição de processos tradicionais para ágeis Equipes
Linhas de base do kit de tradicionais, 9–10 Testes tradicionais
automação, 164–165 geração para ágeis, 73–93 rastreamento de defeitos. Consulte Rastreamento de
requisitos de obtenção, 155–156, 159–163 ferramentas métricas e, 74–79 visão geral de, 73
532 ÍNDICE
de personalidade, 202 –204 o que não deve ser Pontos de vista de controle
automatizado, 285–286 Casos de uso, 398 Testes de de código-fonte. Consulte também Panorama
aceitação do geral considerando todos os pontos de vista durante o
usuário. Consulte UAT (teste de aceitação do usuário) planejamento da iteração,
385–389 reunindo todos os pontos de vista em
Documentação do usuário, 207–208 relação aos requisitos, 374–
Interface do usuário (IU). Consulte também Estratégia de 375 Potência de Três e, 411
automação usando vários pontos de vista na obtenção de
GUI (interface gráfica do usuário) e 293 requisitos, 137–138
modelagem e 399 História Visibilidade, 354–366
do usuário. Consulte História cobertura de código, 360–364
Cartão de história do usuário. Consulte o comunicar resultados de testes, 357–358 métricas
cartão de história Histórias de usuários aplicadas de defeitos, 364–366 número de
ÍNDICE 533
Web em Ruby), 163, 172–174, 320. Consulte também Ruby maquetes, 160, 380
com descrição de serviços da Web Watir Idioma requisitos, 402 listas de
(WSDL), verificação de histórias e 156
507 casos de teste,
diagrama de planejamento,
371 revisão de testes de alto nível com programadores, X
400–401 XP (Programação Extrema)
alternativas de plano de teste, 353–354 equipe ágil abraçando, 10–11 coragem
Abordagem de equipe inteira, 325 como valor central em, 25 xUnit, 126–
vantagens de, 26 127