Pontos Principais
- Teste de software é um esforço de processamento de dados semelhante ao modo como a IA está sendo usada
- Criamos um bot de controle de qualidade, o BAIT-Bot para testes de IA, capacitado pela AI, que ajuda os testadores fazendo as tarefas de teste chatas, difíceis, e tediosas
- Os testes BAIT processam muito bem problemas como texturas ausentes, sequências de caracteres ausentes, elementos gráficos sobrepostos, e renderização de artefatos
- A criação de bots com inteligência artificial exige que as empresas introduzam o desenvolvedor de aprendizado de máquina como uma nova função
- Bots capacitam as empresas de teste a ter um exército de testadores virtuais, levando os esforços de teste para um novo nível
Os sucessos da King incluem o Candy Crush Saga e seu jogo irmão Candy Crush Soda Saga, o principal fator sendo a cultura criativa e inovadora que faz com que pessoas engajadas e motivadas a criem jogos divertidos que encantam nossos usuários usando soluções de ponta.
Um ambiente com muita liberdade e confiança - com espaço para experimentos, exploração, e aprendizado - deixa as pessoas felizes, e pessoas felizes são mais propensas a novas ideias, mais cooperativas, e mais criativas. Isso é crucial para uma empresa como a King.
Para poder melhorar os recursos em jogos em constante evolução, o desafio será dimensionar os testes para se equipararem ao desenvolvimento de novos recursos. Os testes automatizados são vitais para acompanharmos o ritmo, portanto, estamos constantemente procurando novas maneiras aprimoradas de testar.
O que nos fez decidir usar a IA nos testes e quais problemas esperávamos resolver
A King é uma empresa orientada a dados. Todas as decisões de negócios são baseadas nas informações dos dados coletados do desempenho de nossos jogadores. Com o crescimento da inteligência artificial (IA) nos últimos anos, há oportunidades para o uso desses dados em testes. Nossa conclusão é que existe uma correlação entre testes e IA, onde ambos usam entradas (dados de treinamento/ casos de teste) consumidos por modelos (modelos de IA / heurísticas de teste) e geram uma saída (previsões / resultados de testes).
Para tornar esse esforço atraente para os testadores, nos concentramos no desenvolvimento de um bot de controle de qualidade chamado BAIT - Bot for AI Testing (robô para teste com IA), desenvolvido pela AI, que daria suporte aos testadores com tarefas tediosas e entediantes de teste, e também para cobrir áreas não testadas devido à falta de recursos, e testar áreas que antes eram consideradas impraticáveis ou impossíveis de testar manualmente.
Como usamos robôs nos testes
Começamos com um ponto complicado do teste: a localização, onde usamos o BAIT para testar mais de 20 idiomas. O BAIT foi projetado para percorrer nossos jogos fazendo uma captura de tela de uma nova tela e, com um modelo de IA treinado, deve reconhecer todos os elementos, como botões, sequências de texto, e ícones relevantes do jogos.
Exemplo de elementos detectados (retângulos verdes) pelo modelo de classificação de elementos da IA.
Depois disso, ele cria uma lista de todos os elementos detectados e clica em cada um deles. O BAIT usa um algoritmo de similaridade para verificar se alcançamos uma nova tela após um clique e, nesse caso, um gráfico é atualizado com um novo nó que representa o novo estado identificado. O BAIT clicará em todos os elementos identificados em todas as novas telas de maneira aleatória até que não haja mais novas telas, tornando-o ideal para testes exploratórios, detectando funcionalidades, falhas, e problemas de desempenho.
Um gráfico gerado após o BAIT atravessar alguns níveis no jogo Candy Crush Saga
Um gráfico do BAIT atravessando +4500 níveis no jogo Candy Crush Saga
Outra área em que vimos que a BAIT pode ajudar é testar problemas de renderização, como texturas ausentes, sequências de caracteres ausentes, elementos gráficos sobrepostos, e artefatos de renderização devido a diferentes resoluções ou orientações de telefones celulares.
Um exemplo de textura ausente (retângulo rosa) detectada pelo algoritmo de área de contorno semelhante e uma sequência de texto ausente (ID da sequência entre colchetes) detectada usando a API do Google Vision.
Que desafios encontramos e como os enfrentamos
Eu diria que, para começar o teste com IA, tivemos vários desafios. Primeiro, não tínhamos o conjunto de habilidades necessário para desenvolver nosso bot, portanto, recrutamos dois estudantes de aprendizado de máquina para criar uma prova do conceito de uma vaga ideia de que um bot de controle de qualidade poderia ajudar nos testes. Penso que nos primeiros meses, os estudantes não tinham certeza de que o que estavam construindo funcionaria, porque era um conceito não testado.
O segundo desafio que descobrimos foi que é importante envolver pessoas que tenham a determinação de fazê-lo funcionar. Nos projetos de IA, facilmente se pega um problema grande demais, o que atrasa o tempo necessário para ver os resultados reais para determinar se o problema foi resolvido. Para evitar isso, aplicamos uma abordagem de mini ciclo ágil, quando iteramos com pequenas metas alcançáveis em iterações de 2 a 3 dias, para que pudéssemos avaliar se estávamos progredindo. Se um algoritmo não mostrou resultados promissores após um ou dois dias, tentamos outro. Aqui é importante ser crítico. Queríamos usar algoritmos capazes de resolver problemas em geral, a fim de remover a supervisão manual. Após 2-3 meses, tínhamos um protótipo capaz de atravessar um jogo da maneira que queríamos.
O terceiro desafio foi escolher um problema que o BAIT pudesse resolver para provar que poderia agregar valor aos nossos testes. Depois de discutir isso com nossas equipes de jogo, um problema com o qual eles queriam ajuda - que é difícil de testar manualmente ou automatizar de maneira tradicional - era detectar as texturas ausentes. Percebemos que os artefatos visuais eram ideais para a BAIT detectar - existem algoritmos adequados para essa tarefa que implementamos como recurso de teste e também usamos a API do Google vision para detectar cadeias de texto, ajudando nos testes de localização.
Os algoritmos de IA / ML que tentamos e quais funcionaram para nós
Inicialmente, usamos o Maximally Stable Extremal Regions (MSER), um algoritmo de detecção de blob para detectar elementos da interface do usuário e regiões interativas (por exemplo, clicáveis). O MSER não era muito confiável: mostrou comportamentos diferentes em dispositivos diferentes, com cores e resoluções diferentes, e era muito difícil de ajustar.
Então, decidimos treinar um modelo de rede neural para detectar e categorizar os elementos de interface do usuário desejados (por exemplo, botões) em uma cena do jogo. Usamos transferência de aprendizado e redes SSD. Os dados do treinamento consistem em uma coleção de imagens de cenas de jogos de vários jogos para celular (jogos que não eram da King) que coletamos e rotulamos manualmente (especificando uma caixa delimitadora em torno das áreas interativas)
Um desafio que enfrentamos foi detectar botões renderizados em uma cena cobrindo diferentes origens. Um botão fechar (X) que cobre a caixa de diálogo pop-up e a cena principal ao mesmo tempo foi difícil de detectar com alta precisão em comparação com um botão de OK que cobre apenas um fundo de cor única. Para solucionar esse problema, primeiro treinamos os botões de fechar separadamente, adicionando mais dados de treinamento para tentar tornar o algoritmo de detecção mais forte, encontrando botões renderizados em vários fundos.
Botão com fundo simples Botão Fechar com fundo complexo
Mas ainda tínhamos problemas com casos em que os botões Fechar não eram detectados devido a uma ampla variedade de cenários dinâmicos e percebemos que tínhamos muito pouco dados de treinamento para resolver esse problema com essa abordagem. Como complemento para melhorar ainda mais a precisão das regiões detectadas, treinamos um modelo R-CNN masked no qual definimos as áreas interativas com uma máscara em vez de uma caixa delimitadora, e isso ajudou a resolver problemas de detecção anteriores por que o algoritmo passou a detectar botões em um fundo mais simples.
Um modelo R-CNN mascarado usado para definir uma máscara em vez de uma caixa delimitadora para botões com vários fundos
Treinamos outro modelo de rede neural para a classificação de cenas de jogos em diferentes tipos (por exemplo, cena do mapa de estradas, cena de nível e etc.) para que pudéssemos executar ações adequadas em cada cena do jogo (por exemplo, ganhar um nível, rolar o mapa de estradas e etc.) Para isso, usamos um modelo pré-treinado MobileNet V2 e adicionamos mais algumas camadas para o ajuste fino.
Detalhes técnicos sobre as diferentes tecnologias que usamos no framework do nosso robô
Para comparar imagens e evitar nós duplicados no gráfico que o bot produz, usamos uma combinação de semelhança visual e semelhança de texto. Utilizamos um algoritmo misto por causa da existência de cenas dinâmicas com animações, então a similaridade de texto foi combinada para ter um melhor julgamento da similaridade entre as cenas do jogo.
Usamos a API de visão do Google (Google vision API) para extrair texto das imagens e usamos o Opencv para semelhança visual entre as imagens.
Atualmente, não usamos um gráfico NoSQL, mas salvamos as informações do gráfico no formato JSON, que é acessível através de uma API REST. Isso é algo que definitivamente mudaremos e melhoraremos no futuro.
Tensorflow e Keras foram utilizados na implementação de redes neurais.
O Opencv foi usado em algumas etapas de manipulação de imagem para identificar cenas de bugadas.
Benefícios que obtivemos ao testar o Candy Crush usando IA
Foram descobertos vários benefícios que não eram claros para nós quando começamos. Ser capaz de testar problemas visuais é uma grande vitória, pois isso pode liberar recursos para se concentrar em testes em outras áreas. Devido à natureza de executar um bot, podemos aumentar nossos esforços de teste executando vários bots cobrindo diferentes áreas em paralelo, ajudando-nos a aumentar a cobertura do teste.
Com a automação tradicional, é complicado testar áreas como áudio, cobertura de código, e problemas de renderização, e agora podemos cobrir essas áreas mais facilmente.
O que há de errado com essa tela?
O BAIT pode detectar facilmente esse efeito de partícula à direita renderizado na frente da camada de fundo transparente em vez de atrás dela
Qual o futuro do BAIT
Estamos começando a analisar questões como: "Se executarmos uma instância do BAIT e ele encontrar uma falha após a execução por algumas horas, o que acontecerá se 1000 instâncias do BAIT estiverem em execução no mesmo período de tempo? Vamos encontrar mais falhas? "
Ter um bot de controle de qualidade com inteligência artificial nos permite ter esses tipos de discussões estratégicas de teste e fazer tentativas/ testes. Meu pressentimento é que isso nos beneficiará no futuro, e acho que isso pode mudar o controle de qualidade, levando os testes a um novo nível com essa abordagem de tecnologia de ponta.
Conclusão
Acho que os robôs substituirão todos os testes preditivos que existem hoje. Questões importantes com as quais continuaremos lutando e onde os humanos continuarão a desempenhar um papel importante são: isso parece bom? Isso é divertido? Isso é saudável? Acho que a função do testador no futuro exigirá um conjunto de habilidades mais humanas do que técnicas, e atuará mais como treinador de teste para bots de teste inteligentes.
Nós gostaríamos de contribuir para uma comunidade global de IA de controle de qualidade que nos beneficiará a todos. Fico feliz em ajudar se alguém tiver dúvidas sobre como começar o teste com IA ou, em geral, sobre o BAIT. Não hesite em contactar-me através do LinkedIn.
Sobre o autor
Alexander Andelkovic is working as senior agile testing lead at Sweden-based King, developer of the popular mobile game Candy Crush Saga. Andelkovic has worked on multiple complex test projects, ranging from using session-based test management for quality assuring MED-Tech devices for life critical systems, to establishing a world class approval process for Spotify apps used by Fortune 500 companies. Now he teams up with developers in testing big data, business analytics, and game level regression testing using AI. Andelkovic performs both system testing and exploratory testing, with a focus on assisting teams with high-quality deliveries.