Como posso iniciar o teste em uma anticultura de teste? [fechadas]

20

Tenho uma confissão a fazer: O teste automatizado formalizado nunca fez parte do meu plano de programação. Agora eu trabalho em uma grande empresa com muitos desenvolvedores (a maioria deles web desenvolvedores de um tipo ou outro), e é evidente que a maioria deles não fazer test * também. (* Não vou continuar dizendo formalmente ; por favor, deduza.)

Se eu esperar o apoio da minha organização para começar a testar, isso nunca acontecerá. Se eu tentar "mudar as coisas de dentro" pressionando os testes na gerência, ficarei sem energia antes que as mudanças aconteçam. Preciso começar a testar agora.

Porém, com o TDD e seu tipo, vou acabar com muitos códigos de teste junto com o código de produção. Nossos sistemas de controle de versão (todos centralizados) não estão organizados para armazenar o código de teste. Vou ter que encontrar um lugar para tudo isso na minha estação de trabalho.

É possível iniciar uma prática pessoal de teste de software em uma cultura que não valoriza ou fornece as ferramentas para isso? Quais técnicas e ferramentas você usa para permitir que você teste quando as ferramentas e a organização oficiais não têm lugar para testes, estruturas e automações?

kojiro
fonte
14
Por que você não pode armazenar o código de teste no VCS da sua empresa? Eu imagino que em um projeto que tenha um srcdiretório para código de produção, seria possível adicionar um testdiretório também - ou é explicitamente proibido por algum motivo?
Péter Török 25/10
@ PéterTörök Você nos superestima. Não temos um srcdiretório, temos raízes na web. Para verificar meu código no VCS central, eu o verificaria na raiz da web.
Kojiro # 25/11
Se você não tem controle de origem em sua cultura de anti-teste, eu tentaria fazer isso primeiro (ou também), pois isso resolverá muitos outros problemas que tenho certeza de que sua equipe está tendo. Em seguida, estabelece as bases para o que você deseja fazer para o teste.
Scott Wylie
@ScottWylie Eu não disse isso direito. Temos VCS, apenas não o organizamos para testes (ou muito mais do que edições simples e coisas de raiz da web). Acho que o sobrinho de alguém criou o CVS em 1998 e ninguém o mudou desde então.
Kojiro # 25/11

Respostas:

22

Eu pessoalmente fiz isso com um sucesso considerável. Os principais fatores para o sucesso:

  • Obtenha suporte (provisório) de gerenciamento. As vantagens dos testes de automação estão bem documentadas e devem convencer qualquer gerente a pelo menos experimentá-lo. Isso inclui encontrar um ponto no VCS e um servidor de compilação, porque
  • Os testes automatizados somente fornecem seu valor total se forem executados com frequência e automaticamente, para que você saiba sobre os problemas em breve e não precise confiar nas pessoas que não se esquecem de executá-los. Você precisa de um servidor de construção que os execute pelo menos diariamente. Esta pode ser uma estação de trabalho antiga. Jenkins leva muito pouco trabalho para correr.
  • Lidere pelo exemplo. Faça testes, fale sobre o benefício que eles estão fornecendo a você e, quando revelarem erros introduzidos por outros desenvolvedores, falem sobre isso em termos de como eles foram protegidos de vergonha potencialmente muito maior.
  • Vá para a fruta baixa. Algumas partes do aplicativo serão difíceis de testar, outras fáceis. Alguns serão robustos, outros frágeis. Escrever testes para peças quebradiças, mas fáceis de testar, oferece o maior valor no menor tempo possível.
  • Veja se você pode escrever testes reutilizáveis, por exemplo, convenções ou recursos de teste que todos os módulos (páginas da web, serviços REST, qualquer que seja) devem ter, mas que geralmente são esquecidos.
Michael Borgwardt
fonte
7

Sem suporte de gerenciamento, você está morto na água. A gerência alegará que você não está fazendo um trabalho que vale a pena, será penalizado em suas avaliações e, por fim, será demitido. Existem maneiras de levar a gerência a ver que os testes iniciais custam menos e tudo isso. É possível mudar a cultura, mas você está colocando o pescoço no bloco de corte.

Eu sugeriria a leitura do capítulo Maquiavel O Príncipe sobre como introduzir mudanças antes de fazer qualquer coisa.

Sardathrion - Restabelecer Monica
fonte
A sua é a segunda resposta, sugerindo que o teste custará tempo que de outra forma não seria gasto. Mas testar evangelistas (me parece) lhe dirá que testar economiza tempo. Não apenas a longo prazo, mas até mesmo em um projeto de tamanho médio, porque você não gastará tanto tempo depurando seu código de produção, e os testes forçam você a adaptar o código para passá-los, o que (no meu compreensão da teoria) tudo serve para reduzir o tempo total gasto em codificação. Você achou que não era esse o caso?
Kjiro # 25/11
1
@kojiro: Sim, o teste geral reduzirá tempo e custos. No entanto, não o fará a curto prazo. Alguns gerentes vêem o curto prazo como mais importante. Afinal, o que é um bom software, se não aquele pelo qual a empresa é paga e pode cobrar do cliente por correções de bugs?
Sardathrion - Restabelece Monica
2
Os testes economizam tempo, mas quando você precisa refazer metade do código para poder ser testado, você está perdendo tempo a princípio, fazendo todo esse trabalho apenas para, meses depois, ser capaz de fazer testes e depois acelerar. Os gerentes não pensam em "meses seguintes", pensam em "este mês", então tudo o que veem é o "desperdício de tempo", porque esse desenvolvedor não está criando um novo código que está jogando com os testes que podemos ' t vender ou, mais provavelmente, refatoração de código que "já trabalha"
Wayne Molina
Geralmente, mesmo a curto prazo, isso economiza tempo. Quando você está trabalhando em algo, é muito mais rápido poder exercitar um pedaço de código por meio de um teste, depois ter que executar o aplicativo inteiro e convencê-lo a executar esse pedaço de código específico.
Stefan Billiet
3

Na minha experiência, se a cultura é anti-teste, você não pode apresentá-la razoavelmente. Os testes serão vistos como uma perda de tempo e você será repreendido por "perder tempo" ou "levar muito tempo", ou o código apodreceu após anos de não ter sido escrito de maneira testável (por exemplo, sem interfaces, tudo fortemente acoplados) e você precisará gastar muito tempo refatorando e / ou reescrevendo o código (correndo o risco de "levar muito tempo" e "desperdiçar tempo") para torná-lo testável para que você possa escrever testes em primeiro lugar .

Você pode ter uma chance se estiver fazendo coisas novas, que só precisam interagir com coisas existentes (criar um bom invólucro em torno das áreas ruins) ou se você puder fazê-lo em pequenas quantidades, onde não causará problemas ou exija que você "trabalhe em tarefas não atribuídas a você", que podem colocá-lo na casinha.

Wayne Molina
fonte
1

Eu não acho que você vá muito longe até que você possa argumentar suficientemente bem que há um problema (que atualmente não seja reconhecido) que o teste automatizado possa resolver.

Se houver uma cultura de teste manual em relação aos scripts definidos, haverá um custo de execução desses scripts, associado ao risco de resultados incompletos ou imprecisos. Pode haver uma história (documentada ou na forma de "história de guerra") disso. Sugira um projeto piloto para automatizar alguns desses testes manuais com o objetivo de proporcionar uma economia de custos a longo prazo.

Se não houver sequer uma função de teste manual, sugiro que a empresa não perceba que qualquer tipo de teste formal, automatizado ou não, tenha valor. Nesse caso, consideraria o caminho a seguir longo e íngreme, mas novamente é provável que precise de uma demonstração clara de que os negócios podem se beneficiar da adoção de uma abordagem menos casual da qualidade do software. Se você não pode fazer isso, é difícil ver como pode haver algum suporte para a ideia em termos comerciais.

Mike Woodhouse
fonte
0

Uma idéia é que você tente escrever um teste que comprove que o código que outra pessoa escreveu está com defeito. Deve vender o conceito.

Anders Lindén
fonte