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:
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")
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.
fonte
Respostas:
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.
fonte
A questão interessante é quando você é pago, e não se o seu cliente faz algum teste por conta própria.
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:
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.
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) .
fonte
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.
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.
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.
fonte
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.
fonte