Ágil sem testes de unidade

27

Faz sentido falar sobre "desenvolvimento ágil" ou afirmar que você está aplicando uma "metodologia ágil" se a base de código em que você está trabalhando tem 0% de cobertura de teste de unidade? (E você, como equipe, não está fazendo nada a respeito).

Para deixar claro: para mim, não faz sentido. Na minha experiência pessoal, descobri que os testes de unidade são a única ferramenta que permite que você seja realmente "ágil" (ou seja, responda a mudanças, aprimore seu design, compartilhe conhecimento, etc ...) e o TDD é a única prática que leva você até lá .

Talvez haja outras maneiras, mas ainda não consigo ver como elas podem funcionar.

Sapo Malvado
fonte
14
O Agile tem uma chance muito maior de ter sucesso com os testes automatizados para fazer o backup. Fui forçado a aplicar o Agile sem testes antes e é uma armadilha. É apenas uma maneira conveniente de acumular dívidas técnicas mais rapidamente do que antes.
MetaFight
5
TDD não é necessariamente a única prática que leva você até lá. É comum, no entanto. Pessoalmente, considero o BDD uma abordagem mais pragmática.
MetaFight
6
"O Agile tem uma chance muito maior de ter sucesso com o teste automatizado para fazer o backup": o mesmo acontece com os projetos não ágeis. Eu acho que o teste automatizado é bastante ortogonal à metodologia usada: isso deixa você mais confiante de que seu código está correto e ajuda a mantê-lo limpo.
Giorgio
A propósito, nesta questão, teste de unidade misto e TDD, você pode fazer um teste de unidade sem TDD.
Walfrat
Lendo as respostas aqui, estou surpreso com o quanto as coisas mudaram desde que aprendi ágil em meados dos anos 2000. TDD e programação de pares foram consideradas práticas ágeis essenciais para manter um código de alta qualidade em um ritmo acelerado.
nomen

Respostas:

37

Para ser pedante, nada no Agile Manifesto ou no Scrum Guide faz qualquer referência a práticas técnicas, como testes de unidade ou TDD. Portanto, sim, em teoria, você pode entregar cedo e com frequência, com foco na colaboração e no valor sem eles e se chamar Agile; pode até ter agilidade .

Na prática, porém, é quase impossível fornecer valor ( em produção ) de forma consistente a cada poucas semanas sem um bom conjunto de testes. Isso inclui testes de integração e também testes de unidade. Os testes de unidade só vão tão longe. Há uma razão para ser a pirâmide e não um retângulo, afinal.

Sem os testes como rede de segurança, você introduzirá muitos erros de regressão em cada versão ou ficará com medo de refatorar. Ambos terão um grande impacto na sua capacidade de continuar em um ritmo sustentável . Se você não conseguir manter o ritmo ou mudar de rumo (reprojeto) quando necessário, não terá agilidade. Afinal, a agilidade é o objetivo que estamos buscando.

Pato de borracha
fonte
Você precisa seguir o Manifesto Ágil para ser ágil?
JeffO
Não @JeffO. Você não, mas certamente ajuda. Eu editei para esclarecer minha intenção.
precisa
1
Na IMO, os programadores mais ágeis são aqueles que são muito pragmáticos, mesmo que nunca tenham ouvido falar do manifesto ágil.
Giorgio
1
Não posso discordar de você lá @Giorgio. Eu estava em uma equipe ágil anos antes de qualquer um de nós ouvir falar em Agile.
precisa
2
@CortAmmon - Se você deseja definir Agile (grande "A" ágil como na sua metodologia), eu concordo com você, mas se você deseja ser ágil (pequeno "a" como na verdade é ágil para poder lidar melhor com as mudanças ), não é necessário seguir nenhuma metodologia específica. Se você pode fazer cascata e ainda lidar com mudanças (difíceis, mas não impossíveis), quem se importa?
Jeffo
30

O manifesto ágil simplesmente declara:

Indivíduos e interações sobre processos e ferramentas

Software de trabalho sobre documentação abrangente

Colaboração do cliente sobre negociação de contrato

Respondendo a mudanças após seguir um plano

Nenhuma menção de testes de unidade lá. Mesmo os 12 princípios não mencionam testes.

Portanto, tecnicamente, é possível ser uma equipe ágil sem escrever testes de unidade. Na prática, é realmente difícil ver como uma equipe pode manter o software em funcionamento em um ambiente ágil sem testes para ajudá-los a fazer alterações constantes.

David Arno
fonte
4
É difícil ver como uma equipe pode manter o software funcionando em qualquer ambiente sem testes.
Bryan Oakley
6
Só porque algo é difícil de ver não torna isso impossível #
31/05
8

Mesmo que não haja uma palavra direta declarando sobre teste de unidade ou TDD ou qualquer tipo de teste no manifesto ágil, como outros já responderam aqui, acredito que um bom Scrum Master ou Desenvolvedor seria capaz de discernir uma das declarações no manifesto.

Software de trabalho  sobre documentação abrangente.

Como alguém saberia se o software está funcionando? O manifesto não precisa declarar explicitamente o termo teste. É sucinto.

O teste de unidade (no contexto do tópico) tornará sua fase de codificação lenta no estágio anterior, mas valerá a pena à medida que você progride, tornando o desenvolvimento muito mais rápido. Ele oferece controle fino dos testes no nível do código, além de tornar o design escalável, dando a você a confiança de que seu software está funcionando e pode lidar facilmente com a regressão; para qual tornaria seu desenvolvimento ágil.

Axel
fonte
3
Você pode testá-lo manualmente. Você não precisa de testes de unidade para isso. Eles ajudam. MUITO. Eles são a principal coisa que pode melhorar um processo. Mas eles não são essenciais para fornecer software.
T. Sar - Restabelece Monica
Sim, claro. Eu não disse que você não pode fazer isso manualmente. Eu disse qualquer tipo de teste. Eu não estava declarando nenhuma forma de desacordo nos testes. E, quanto ao seu teste manual, você tem uma perspectiva diferente de como você pode continuar sendo ágil enquanto enfrenta regressões.
Axel
Eu entendo seu ponto de vista. No entanto, a pergunta é sobre testes de unidade em especial, e não exatamente sobre testes em geral. Ler sua resposta no contexto da pergunta faz com que você considere seu teste como "teste de unidade"!
T. Sar - Restabelece Monica
Lá, desculpe por isso.
Axel
2
@ThalesPereira, um teste de unidade que informa se a alteração que você fez quarenta segundos atrás quebrou algo é muito mais ágil do que o relatório que você recebe do departamento de controle de qualidade, dizendo que algo que alguém mudou há três dias quebrou.
Solomon Slow
2

Isso faz absolutamente sentido. Agile não se refere a testes, como já foram mencionados por outros, mas para responder especificamente à sua pergunta:

Não, você não precisa de nenhum teste de unidade.

Você pode executar um processo ágil apenas com teste de integração. Você pode executar um teste de integração automatizado todas as noites, por exemplo, e corrigir erros encontrados no dia seguinte. Você pode ter um testador manual executando testes de integração continuamente, se desejar. Independentemente do sistema, o teste de unidade é totalmente opcional.

Você pode achar que o teste de unidade o ajuda a desenvolver, e é justo o suficiente para isso, mas há muitas coisas que podem ajudar no desenvolvimento que você pode não ter.

Você precisa de alguma forma de teste, mesmo que sejam os antigos 'testadores beta do cliente'. Se o seu cliente estiver muito envolvido no processo e não se importar em encontrar bugs, isso poderá funcionar - pois eles tendem a encontrar bugs que ninguém mais pensou que fossem bugs!

gbjbaanb
fonte
Você pode executar um processo ágil apenas com teste de integração. Isso é teórico ou é falado por experiência própria?
precisa saber é o seguinte
1

Não é necessário. O teste é ótimo quando você tem pessoas que realmente sabem como usá-lo. Quando você não o faz, não apenas não é necessário, mas também se torna um passivo. Eu diria que existem muitos programadores que não são muito hábeis nisso.

Fico feliz que você tenha reconhecido em sua pergunta que ser ágil é como você realmente lança o software em vez de seguir alguma metodologia. O Manifesto Ágil é uma boa referência, mas não é o guia definitivo. O Agile existia antes dele. Existem maneiras de desenvolver software para ser "mais ágil", mas combinações diferentes podem ser usadas em vários projetos.

Se você estiver lançando um novo software em um ritmo aceitável para o cliente, provavelmente estará ágil. Eu também incluiria não ter muita repercussão e reclamar de alterações de recursos pelos desenvolvedores. Consertar uma coisa apenas para quebrar outra também não é o ideal. Quando os usuários estão com várias versões atrasadas na atualização, você provavelmente não é muito ágil, testando ou não.

JeffO
fonte
1

Eu gostaria de contestar (outras respostas) que o manifesto Agile afirma claramente algo sobre isso, a saber:

A atenção contínua à excelência técnica e ao bom design aumenta a agilidade.

Eu realmente gosto da definição de excelência técnica do LeSS e inclui testes de unidade e TDD. Agora você pode argumentar que pode não precisar de testes de unidade e / ou TDD para conseguir isso, mas é a maneira mais comum e provavelmente recomendada.

A agilidade organizacional é limitada pela agilidade técnica

Em outras palavras, quando você demora a fazer alterações em seu produto, não importa como você estrutura suas equipes, sua organização ou qual estrutura você adota, será lento em responder às mudanças.

Se você pode impedir que seu produto resista a mudanças de outra maneira, você pode estar no caminho certo, mas:

Eu inventei a Extreme Programming para tornar o mundo seguro para programadores. - Kent Beck

O Scrum não possui práticas técnicas, mas Jeff disse o seguinte sobre isso:

Eu nunca vi uma equipe Scrum hiper produtiva que não usava práticas de desenvolvimento de programação extrema. - Jeff Sutherland

Citado neste artigo: http://ronjeffries.com/articles/017-02ff/gathering2017/

Eu esperaria que as equipes Scrum sem práticas técnicas, eventualmente, usando retrospectivas, apresentassem uma prática semelhante. Você quer ser hiper produtivo também, não é?

O modelo de fluência ágil o menciona no nível de duas estrelas:

Técnicas úteis incluem integração contínua, desenvolvimento orientado a testes , programação de pares e propriedade coletiva.

Se você segmentar apenas o primeiro nível de fluência ágil, poderá ignorar a prática, mas qualquer produto maior e com maior duração deve tentar atingir um nível de duas estrelas.

Portanto, o consenso geral é que sim, sem boas práticas de teste de unidade, código limpo e refatoração, atualmente não é possível ser verdadeiramente ágil. Isso pode mudar no futuro, à medida que novas práticas técnicas surgirem.

Qual você acha que a resposta seria se perguntássemos a alguns signatários do manifesto como Robert C. Martin, Martin Fowler ou Kent Beck? Talvez eles digam que depende, mas geralmente é algo que você deve fazer.

Niels van Reijmersdal
fonte
1
O fato é que ele não precisa ser um "teste de unidade"; você pode apenas executar o teste de integração e considerar o suficiente. No entanto, se você não tiver nada e testar tudo manualmente, provavelmente ficará lento para responder rapidamente às alterações ou fornecer bastante regressão regularmente.
Walfrat
2
Tecnicamente, concorda que não, mas os testes em níveis mais altos geralmente são mais frágeis, mais difíceis de manter e, provavelmente, o tornam mais lento se você tiver muitos deles. Gosto da maneira como Martin Fowler coloca: "Se você falha em um teste de alto nível, não apenas possui um bug no seu código funcional, como também um teste de unidade ausente ou incorreto". de martinfowler.com/bliki/TestPyramid.html
Niels van Reijmersdal,
Teste em nível superior não testa as mesmas coisas, então você deixa buracos, mas considera que atualmente o risco é digno o suficiente. Para algum site que seja suficiente, para um sistema financeiro crítico -> de jeito nenhum.
precisa saber é o seguinte