Como incentivar o cliente a fazer alguns testes internos de controle de qualidade?

14

Atualização / Esclarecimento Meu cliente entende a necessidade dos testes internos e sempre jura que "fará melhor" (ou seja, fará alguma coisa), mas isso simplesmente não acontece. Eles não têm orçamento para testes externos. Acho que estou perguntando (vagamente, reconheço) sobre o que poderia instilar um "teste precoce, teste frequentemente, teste no ethos das máquinas-alvo?

Pergunta: como incentivar os usuários a testarem e reportarem explicitamente problemas com novos lançamentos, a não "testar conforme o uso" em projetos de produção.

Antecedentes: Tenho um cliente pequeno para quem escrevi um conjunto de ferramentas de apresentação multimídia. Eles são um bom cliente e temos um bom relacionamento. O projeto está em andamento, adicionando recursos à medida que avançamos.

Existem dois problemas que tenho:

  1. A definição dos recursos é feita on-the-fly, geralmente por telefone, sujeita a alterações, revisões, reversões. (um pouco como o de Kennedy "Vamos para a lua e fazemos as outras coisas" - sempre me diverti com a parte "outras coisas")

  2. Praticamente nenhum teste de controle de qualidade é realizado.

Eu posso lidar com o número 1, mais ou menos. Este não é um cliente que leria uma especificação antes de uma reunião, muito menos escreva uma. Estou acostumado com isso. É o item 2 que eu tenho o problema: eles não testam ou não testam novos lançamentos. O que eles fazem é usá-los para produção, para que, quando surgirem os bugs, eles encontrem uma solução alternativa e não a relatem, ou estejam com pressa de continuar o projeto, para que os relatórios de bugs sejam vagos.

Tivemos muitas discussões sobre tudo isso, mas só consegui cutucá-las um pouco (por exemplo, usamos o github para rastrear problemas - embora na maioria das vezes eu o usei). Os motivos principais são duplos: eles são uma pequena empresa de consultoria e não têm (ou não acham que têm) os recursos para testes (nem o orçamento para terceirizá-los). E cultural: embora se considerem "desenvolvedores", na verdade são apenas usuários de um pacote de software multimídia. (por exemplo, eles não têm a atenção da neurose obsessiva aos detalhes dos desenvolvedores "reais").

Isso me afeta como você esperaria: sem feedback, não sei dizer se um recurso está completo (consulte o item 1) ou se há outras consequências. Também está me deixando um pouco preguiçoso.

Não Agarrar
fonte
3
Se um bug é tão pequeno que os próprios usuários parecem não se importar se é corrigido ou não, por que você insiste?
Kamilk
2
@ kamilk - a resposta curta é que eu investi no meu cliente indo bem, sendo produtivo etc. A resposta longa é que muitas vezes não é apenas uma questão de "bug" pequeno - também pode ser um problema de usabilidade, falta de implementação de recursos, etc. Se eu não souber, não posso consertá-lo. Além disso, as "soluções alternativas" que eles inventam costumam ser uma grande perda de tempo para eles ou até mesmo permanecer com versões anteriores do software.
Não agarre
18
Se você investiu no seu cliente, indo bem; você deve fazer testes muito sólidos antes de liberá-los. Clientes não são testadores. Contrate um testador ou faça seus próprios testes ou escreva testes codificados, mas se você quiser ter certeza absoluta de que suas coisas funcionam para seus clientes, teste antes de entregá-las.
Jimmy Hoffa
4
@ djechlin - trata-se de testes (e relatórios). E um desenvolvedor só pode testar tanto: não o uso como os usuários.
Não agarrando

Respostas:

18

eles não têm a atenção da neurose obsessiva aos detalhes dos desenvolvedores "reais"

Prefácio : O tipo de idioma que você usou aqui geralmente é uma bandeira vermelha para mim. Quando ouço as pessoas falarem sobre desenvolvedores "reais" ou a (única) maneira "correta" de fazer as coisas, começo a pensar em desenvolvedores de cultos de carga com visão de túnel .

Agora, não estou dizendo que você é definitivamente um desses desenvolvedores (não tenho evidências suficientes para afirmar isso), mas se for, poderá se beneficiar dessa resposta.

Responda

Parece que você e seu cliente estão otimizando para coisas diferentes. É um fato infeliz na engenharia de software que muitas vezes as necessidades dos negócios e os desejos dos desenvolvedores não necessariamente se alinham.

Os desenvolvedores de software geralmente são pessoas apaixonadas, com foco na melhoria. Eles gostam de melhorar o desempenho do software, o processo de desenvolvimento, processos de negócios, métodos de comunicação etc. E isso é ótimo. Focar nessas coisas é o que separa os artesãos e as artesãs dos pressionadores de teclado irracionais.

Mas, seu cliente não é um especialista em software. Seu cliente é um negócio com um conjunto de prioridades completamente diferente. E, às vezes, essas prioridades parecem ridículas para nós, especialistas em software ... mas isso é apenas porque estamos otimizando para coisas diferentes.

As empresas freqüentemente desejam otimizar itens como liberação antecipada para o mercado e economia de custos a curto prazo. Ao fazer isso, eles podem precisar sacrificar coisas como controle de qualidade, experiência do usuário, economia de custos a longo prazo e outras coisas que estimulam os desenvolvedores.

Isso é uma coisa ruim? Bem, não necessariamente. Não posso falar por todas as empresas, mas, na minha experiência, meus clientes fazem essas coisas para aumentar seu próprio ROI (retorno do investimento). Fazer coisas como controle de qualidade, refinamento de UX e planejamento a longo prazo oferece menor retorno sobre o investimento. Pior ainda, muitas empresas têm estruturas de investimento que apenas recompensam vitórias de curto prazo em oposição a abordagens sustentáveis ​​e vitórias de longo prazo.

Portanto, enquanto você pode tentar vender a idéia de controle de qualidade para seu cliente, pode estar perdendo seu tempo e pressionando seu relacionamento com eles. Na melhor das hipóteses, você terá alguém ansioso para experimentar suas idéias (improvável). Na pior das hipóteses, você terá que convencer toda a empresa a refazer suas estruturas de incentivo, para que investimentos de longo prazo, como o controle de qualidade, sejam recompensados. Em ambos os casos, suas chances de sucesso são baixas.

MetaFight
fonte
4
+1, tentando alterar o funcionamento interno de uma empresa completamente diferente , porque não parece correto para você normalmente interrompe um relacionamento. Um profissional deve aconselhar se ele pode prever problemas sérios, especialmente se eles também podem aconselhar sobre como mitigá-los. No entanto, se os problemas são tão pequenos que a empresa nem se importa em denunciá-los, a melhor coisa a fazer é enviar de vez em quando um lembrete amigável de que pode haver tempo economizado se X ou Y sem insistir.
Ordous
-1, pois, embora seja um post bem escrito, isso realmente não aborda a questão de como você o faria. A resposta é que você faz isso de uma maneira muito semelhante, convencendo os desenvolvedores regulares a testar: mostre que o teste ajuda a reduzir o risco. Menos risco == menos problemas de produção no meio de uma demonstração do cliente.
David diz Reinstate Monica
Não - fora da base, mas obrigado por responder.
Não agarrando
@DavidGrinberg, tudo bem, a menos que reduzir o número de problemas de produção não valha o esforço / custo / tempo para o cliente. Nesse caso, nenhuma lógica do desenvolvedor os convencerá a sacrificar seu ROI apenas para satisfazê-lo. E foi por isso que não respondi o como da pergunta e, em vez disso, foquei em uma falha potencial em sua premissa.
MetaFight
craftspeople :-)
Toni Leigh
10

A questão interessante é quando você é pago, e não se o seu cliente faz algum teste por conta própria.

  • se você for pago com base no seu tempo, não há problema.
  • se você for pago antecipadamente, não há problema.
  • se você é pago quando o cliente declara o projeto "concluído", grande problema.

O problema é como você pode saber quando o cliente aceita o software e o pagará. Isso claramente não funciona quando o cliente altera continuamente o projeto com novas solicitações vagamente definidas. Se isso significa que o dia de pagamento é sempre diferido - e se torna mais improvável a cada solicitação - isso se torna insustentável para você.

Um contrato fixo que especifica cuidadosamente todos os recursos e define sob quais condições o cliente aceitará esses recursos é claramente muito desconfortável, mas permite planejar o projeto com antecedência (também no próximo projeto). Também garante que você receberá seu dinheiro pelo software entregue, se corresponder às especificações. Nesse cenário, a única responsabilidade de um cliente é durante a fase de definição do contrato e no final do teste de aceitação .

Esse teste de aceitação feito por um cliente é separado de outras formas de teste:

  • testes de unidade
  • testes de integração de sistemas
  • testes de usabilidade
  • testes de carga
  • testes de pré-lançamento

Na medida do possível, você anteciparia os testes de aceitação e os executaria antes de fornecer a funcionalidade, para evitar constrangimentos. Além dos testes de aceitação (que medem apenas o cumprimento do contrato , não a qualidade do software ), toda a Garantia da Qualidade é de sua responsabilidade. Em particular, seu cliente não possui necessariamente uma mentalidade de controle de qualidade, a formação técnica necessária ou a obrigação contratual de fazer o controle de qualidade. Além disso, acho que a terceirização de bugs para o cliente é pouco profissional.

Isso não quer dizer que erros não acontecessem. Supondo que você tenha um relacionamento baseado em projeto com seu cliente, você desejará estabelecer uma linha entre ser cortês e fornecer correções rapidamente e explicar que eles aceitaram a versão atual como suficiente para suas necessidades - grandes mudanças exigem um novo contrato. Se você tem um contrato de suporte em andamento, é claro que precisará manter o nível de serviço acordado.

Em um ambiente ágil, responder às necessidades do cliente é mais valioso do que seguir a letra do contrato, mas você ainda deseja receber o pagamento. Portanto, muitas metodologias de projeto orientadas para o ágil valorizam a interação próxima do cliente, a ponto de o cliente se tornar parte da equipe. Você pode sempre conversar com esse "proprietário do produto" para esclarecer os pontos necessários. Como o OP tem autoridade para conceder a você tempo para trabalhar em qualquer recurso que julgue valioso, isso pode funcionar mesmo quando se inicia com necessidades vagas do cliente. Se você não tiver uma comunicação tão estreita, precisará seguir uma abordagem mais formal.

  • Quando você souber das novas necessidades do cliente, trabalhe com ele para convertê-las em requisitos. Isso ajuda o cliente a conseguir o que realmente deseja.
  • Os requisitos são objetivamente mensuráveis ​​- são cumpridos ou não. Isso economiza o cliente de meias soluções que apenas funcionam.
  • Todas as solicitações de clientes devem ser fornecidas por escrito para que você possa cobrá-las. Isso os impede de serem cobrados por coisas que você apenas queria trabalhar - como reescrever toda a interface ao solicitar que um botão seja alinhado de maneira diferente.

    Muita comunicação pode ser feita pessoalmente ou por telefone, mas no final, você precisará de um pedaço de papel para documentar que o cliente deseja que você trabalhe nesses requisitos. Em casos simples, pode ser suficiente recapitular uma ligação e enviar um e-mail para verificar o que eles pediram para você fazer.

Relatórios de erros são sempre difíceis. Se seus clientes são desenvolvedores, isso deve ajudar, pois eles podem entender suas necessidades: ter etapas claras para se reproduzir. Uma maneira simples de obter informações poderosas é habilitar o log no software implantado. Desde que os problemas de privacidade de dados possam ser resolvidos, exigir que todos os relatórios de erros tenham o log atual anexado não apenas garante alguma comunicação por escrito, mas também informa o que o usuário realmente fez (em contraste com o que eles pensavam que estavam tentando fazer) .

amon
fonte
1
O dinheiro não é o problema (estou em um retentor mensal - sou pago independentemente de codificar ou não). É como cutucar a cultura do escritório ... ou algo que eu não entendo.
Não agarrando
2

A maneira de incentivar a comunicação de bugs é incentivar a comunicação granular frequente de recursos. Se você treina uma empresa que pode pedir qualquer coisa com cerimônia zero, eles também usarão esse recurso para pequenos erros. Desista de mudar o fluxo de trabalho do seu cliente, a menos que essas mudanças facilitem a vida deles.

Fazer com que seu cliente faça testes internos é difícil, mas fazê-lo realmente relatar erros não é tão difícil quanto parece. A maneira de obter mais feedback é reduzir o atrito do usuário ... mesmo que isso signifique transferir parte desse atrito para si mesmo.

  1. Use ferramentas mais simples, mesmo que sejam inadequadas e inadequadas. Por exemplo, o BaseCamp é um rastreador de erros bastante horrível (porque é destinado ao gerenciamento de projetos), mas as pessoas estão realmente dispostas a usá-lo.

  2. Como os rastreadores de bugs que estávamos usando não suportavam copiar e colar imagens, na verdade, escrevi um programa trivial que copia a imagem atual da área de transferência para o disco (como um Guid) e depois copia o Guid para a área de transferência. Após um treinamento mínimo, um usuário pode anexar imagens da área de transferência a problemas apenas pressionando a tela de impressão, clicando em um botão e colando na caixa de diálogo do seletor de arquivos da ferramenta de envio de erros.

Uma captura de tela (possivelmente editada no MS Paint com anotações) e 1-2 sentenças são suficientes para identificar a maioria dos recursos / bugs.

Ambas as sugestões são dirigidas pontos de atrito que eu experientes, e ambas as sugestões aumentou relatórios por um fator de mais de 10. No entanto, você vai precisar para segmentar os seus próprios pontos de atrito.

Brian
fonte
Esta resposta chega ao ponto. Você deseja que eles implementem protocolos de teste rigorosos: é muito improvável que isso aconteça, especialmente se vier de fora da organização (por exemplo, você). A melhor coisa a se fazer nesse caso, já que você é pago de qualquer maneira, é tornar o mais simples possível relatar erros para você. Se você está realmente preparado para testes completos, faça você mesmo e aprenda mais sobre os processos de negócios, se precisar ... É uma realidade infeliz que muitas empresas nunca priorizem os testes.
DrewJordan
1

Facilite o teste para o seu cliente, mas dificulte muito o uso de novos recursos em uma versão não testada na produção. Isso pode ser feito da seguinte maneira:

Sempre que você entrega um novo recurso, você o implementa primeiro em uma "versão beta", claramente marcada com um sinal "não para produção". Você disponibiliza esta versão beta ao cliente para teste. Você também fornece a "versão de produção" mais recente que ele usará para produção real (sem os novos recursos, mas com as correções de bugs mais recentes) e se recusa a transferir os novos recursos beta para a versão de produção até receber um feedback de que alguém em o lado do cliente, pelo menos, tentou primeiro.

Se o cliente começar a usar a versão beta em seus dados reais de produção, embora sempre mostre uma grande mensagem "Não para uso em produção" sempre que ele iniciar o programa, você não poderá ajudá-lo, mas pelo menos você deixou claro que sempre que perde a produção trabalho, porque ele usou o beta para fins errados que é claramente culpa dele. Se o cliente não aprender com isso, considere desativar a capacidade do cliente de usar o "beta" na produção desativando algumas funções cruciais como salvar os resultados em disco no "beta", se necessário.

O fornecimento de um "beta" separado forçará você a estabelecer o gerenciamento adequado de controle / configuração de versão, para que você possa gerenciar uma ramificação de produção e uma ramificação de teste beta lado a lado sem problemas. Mas como você está trabalhando com o Github, acho que você já usa algo como o GIT, o que torna esse tipo de gerenciamento muito simples.

Doc Brown
fonte
Eu realmente não concordo com o primeiro parágrafo. Muitas vezes, as pessoas realmente percebem que algo é importante, mas deixam de fazê-lo (parar de fumar, por exemplo). O teste é um exemplo clássico de algo assim: mesmo que você perceba que é realmente importante, é preciso muita disciplina para não usar atalhos ao enfrentar prazos, etc. No entanto, a ideia do beta é boa, considerando o desejo declarado do cliente de melhorar os testes.
Eu também usaria isso como uma oportunidade para abordar o ponto 1. Propor um processo inteiro para o cliente em que novos requisitos sejam anotados, acordados, testados em um ambiente de não produção e liberados.
Eu identifico novos lançamentos como "alpha" ou "pré-lançamento - não para produção", além de fazer toda a coisa "marco" do github com problemas (bugs, novos recursos a serem testados etc.), mas ele não fez diferença. Toda a situação meio que me confunde. Eu propus coisas como um teste mensal de "dia da pizza" para focar a equipe (2-3 pessoas) dos testes, um "vote no seu problema favorito / mais irritante". É meio estranho - mas eles usam meu software para grandes apresentações o tempo todo, então não entendo por que não há mais empecilhos. Suponho que se enquadre em "outra coisa a fazer / não ao meu trabalho"
No Grabbing
@TOMATO: você se recusa estritamente a transferir recursos da versão de pré-lançamento para a versão de produção, até que o cliente informe que ele testou o recurso? Seu cliente tenta contornar essa recusa?
Doc Brown
2
+1 para a versão beta claramente marcada: se você distribuir a versão de teste em roxo berrante, com uma enorme faixa verde piscando na parte superior da tela principal, gritando "VERSÃO DE TESTE - NÃO PARA USO DE PRODUÇÃO - NÃO SEGURO - AAARGH! ", eles não o usarão para apresentações ou mesmo em qualquer lugar onde um cliente possa vê-lo. Você pode reter a versão de produção limpa (tome-a como refém, se desejar) até que eles dêem algum tipo de feedback útil.
Christian Severin