# Crowdtesting

Crowdtesting é uma vertente em engenharia de testes que busca explorar os benefícios, a eficácia e a efetividade do crowdsourcing. A principal diferença em relação ao método tradicional está na realização dos testes através de um expressivo número de Engenheiros de testes espalhados por diferentes lugares, ao contrário de profissionais ou consultores contratados por empresas. O software é imergido em um ambiente mais realista e diverso o qual proporciona um produto final mais confiável, com melhor custo-benefício, e livre de bugs. $^[$ Além disso, Crowdtesting permite executar Teste de usabilidade remotamente, uma vez ser possível recrutar específicos grupos-alvo através da crowd.
Este método de teste é considerado quando o software possui uma dependência maior do feedback do usuário, além de possuir um conjunto de usuários-alvo mais diverso. É comummente empregado em Games, aplicações mobile, em casos onde especialistas podem ser demasiadamente difíceis de serem encontrados para um teste em específico, ou em situações em que a empresa não possui os recursos necessários para arcar com os testes internamente.

## Sistema

Empresas de Crowdtesting disponibilizam suas plataformas para a execução dos ciclos de testes, geralmente livres de custo para aquelas empresas cujos softwares estão sendo testados. A partir daí, eles liberam estes softwares para a comunidades de testers, os quais se registraram voluntariamente. Estes testes são, geralmente, pagos por cada bug encontrado, dependendo ainda do tipo de bug e de seu valor no mercado. Ao time de testers que participam do Crowdtesting é geralmente adicionada uma equipe interna de Qualidade. Dependendo da tarefa, algumas plataformas oferecem acesso à crowd através de um serviço self-service, através de um serviço gerenciado por um promotor ou ambos.

## Vantagens do Crowdtesting

Existem várias vantagens do Crowdtesting:
* O time de teste principal (e.g Testers internos da empresa) podem não possuir todos os recursos necessários para testar o software em ambientes diferentes ou em situações diferentes, como por exemplo diferentes larguras de banda, dispositivos, sistemas operacionais, etc.
* Possui um bom custo-benefício, uma vez que a empresa proprietária do produto apenas paga os bugs válidos reportados. O tempo necessário para realizar testes é, geralmente, menor que o de desenvolvimento, levando a uma melhor produtividade e, com isso, a um custo menor do que contratar engenheiros, designers e especialistas.
* Os testers que executam estes tipo de procedimento são imparciais em seus testes, uma vez que estão isolados do ambiente interno da empresa.
* O conjunto de testers é diverso, com variações de linguagem, localização e conhecimento.
* Uma vez que há um grande número de testers analisando o software simultaneamente, os ciclos de teste podem ser finalizados rapidamente, resultando em um menor tempo até chegar à fase de produção.

## Desvantagens do Crowdtesting

Existem várias desvantagens do Crowdtesting:
* Confidenciabilidade necessita ser administrada rigorosamente a medida que indivíduos não internos à empresa proprietária cresce.
* Comunicação imediata com os grupos de testers pode ser difícil.
* Por serem pagos baseados na quantidade de bugs encontrados, Crowdtesters podem passar a detectar maiores números de bugs irrelevantes, negligenciando outros mais críticos e difíceis de reproduzir.
* Administrar um grupo de Crowdtesters irá gerar um overhead, uma vez que a diferença de fuso horário, idiomas e culturas é intrínseca à esta metodologia de teste.
* Garantir a robustez do ciclo de teste pode ser difícil, já que não há ciclos planejados ou rastreados da mesma maneira que os tradicionais Modelo em cascata ou Testes Ágeis.

## Crowdtesting vs. outsource testing

A principal diferença entre o Crowdtesting e Outsource Testing é que, em Crowdtesting, os engenheiros de teste podem pertencer a diferentes locais de trabalho, enquanto que em Outsource Testing, os engenheiros fazem parte do mesmo local de trabalho ou mesma empresa que disponibiliza o Outsourcing. Em Crowdtesting, pessoas testam software voluntariamente com a possibilidade de não serem pagas (nos casos onde bugs não são encontrados), enquanto que em Outsourcing os testers sempre são pagos por seus trabalhos.
Enquanto que em alguns projetos é possível conseguir um resultado de teste que seja satisfatório utilizando uma abordagem ou outra, uma abordagem mais completa seria utilizar um método holístico de teste de software, o qual utiliza uma equipe de testes dedicada (interna à empresa) juntamente com a Crowd. Crowdtesting é uma melhor escolha para casos de beta ou em testes de compatibilidade, os quais são etapas essenciais antes de iniciar testes; Entretanto, a grande maioria dos softwares são muito complexos, para que este tipo de abordagem possa cobrir todos os possíveis problemas existentes. Uma equipe de testes dedicada será melhor capacitada a testar prováveis defeitos, uma vez que possui melhor idéia a respeito da arquitetura do software, no entanto, nunca será capaz de abranger todo o escopo testado pela Crowd. Portanto, é uma boa solução integrar múltiplos times em qualquer projeto de desenvolvimento (além de desenvolver com princípios de testabilidade em mente desde o início.)
Crowdtesting por si só pode não entregar o melhor feedback a respeito do software em teste. Uma abordagem de teste mais diversa, unindo Crowdtesting e times de teste dedicados pode ser mais favorável. "Possuindo esta diversidade de pessoal permite à empresa aumentar ou diminuir seus recursos de maneira fluida, cumprindo prazos de entrega em períodos de pico, além de cortar gastos em períodos mais tranquilos."