A downloadable game

Escola Politécnica – Universidade Do Vale Do Itajaí (UNIVALI)

Florianópolis - SC - Brasil

Tatiana Liz Piscke

Resumo.   A busca incessante pela excelência no desenvolvimento de software tem colocado a qualidade no centro das atenções. Dentro deste contexto, a Garantia de Qualidade (QA) surge como uma pedra angular para garantir que os produtos de software atendem aos mais altos padrões de desempenho, confiabilidade e usabilidade. Neste artigo, exploraremos algumas das melhores práticas em testes de software, com foco especial em automação, testes de regressão e estratégias ágeis.

Introdução 

Ao discutir testes, é essencial destacar que a metodologia empregada é mais ou menos a mesma em todos os softwares, variando apenas em pequenos detalhes. Independentemente da aplicação do software - seja em aviões, dispositivos médicos, aplicativos móveis ou jogos - a abordagem metodológica é semelhante. Embora cada setor tenha suas particularidades e processos específicos, como na indústria médica, na aviação ou na indústria de defesa, a decisão é crítica devido ao impacto potencial na vida humana. Casos de mau funcionamento de software em aviões ou sistemas de defesa já resultaram em perdas graves de vidas humanas.

Os testes para esses tipos de software são, portanto, muito mais minuciosos e rigorosos, seguindo processos mais rigorosos. Em contrapartida, ao testar jogos e aplicativos, os problemas podem resultar em transtornos e perdas financeiras, mas geralmente não afetam diretamente a vida humana. Além disso, não há uma regra única ou processo padrão para testar jogos ou aplicativos; cada empresa adota suas próprias abordagens, que podem variar de acordo com a plataforma e os processos internos. No entanto, há uma ênfase comum na repetição e na busca por diferentes maneiras de interagir com o jogo, incluindo a tentativa de quebrá-lo de diversas formas. Essa sobreposição entre os testes gerais de software e os testes de jogos ilustra como as práticas são intercambiáveis. Por exemplo, uma transição de software "sério" para jogos é relativamente direta, mas o caminho inverso, dos testes de jogos para software sério, pode ser mais desafiador devido às semelhanças metodológicas, embora existam diferenças nas expectativas e nos contextos de uso.

Quanto à Garantia de Qualidade (QA), é fundamentalmente o processo de verificar se um produto atende às especificações e expectativas do cliente. Existem várias metodologias para realizar essa verificação, e os resultados são frequentemente expressos na forma de "bugs" - defeitos no código ou falhas no desempenho do software que não atendem às expectativas do cliente. A realização de QA ao longo de todas as fases do desenvolvimento do software é ideal, desde o teste da unidade até o lançamento do produto. Mesmo após o lançamento, na medida em que o software continua sendo desligado e atualizado, o controle de qualidade é necessário para garantir a integridade e o desempenho contínuo do produto. No entanto, na prática, o momento em que o QA é iniciado pode variar de acordo com a equipe, a empresa e os processos internos, podendo começar mais cedo ou mais tarde no ciclo de desenvolvimento. A escolha do momento adequado para iniciar o controle de qualidade depende das necessidades e das contribuições específicas de cada projeto.

Temos um exemplo de como mostrar a importância de um controle de qualidade é no caso do “ World Of Warcraft Cria Literalmente Vírus de Computador”

Um debuff chamado "Sangue Corrompido", originado na masmorra de Zul'Gurub, foi eventualmente lançado no mundo aberto, tornando-se a primeira doença a afetar servidores inteiros. Infligindo danos periódicos aos jogadores afetados, a doença também poderia ser crônica para outros jogadores próximos. Originalmente confinado à instância de Zul'Gurub, renomeado para fora através de animais de caça. A doença desapareceria com o tempo ou após a morte do personagem infectado, mas os jogadores a trouxeram para grandes cidades, que também se repetiram nos NPCs, causando mais de 1000 mil mortes entre os jogadores, e tornando algumas áreas impossíveis de jogar. A Blizzard corrigiu o problema no patch 1.8.0, impedindo que a doença existisse fora da instância do Zul'Gurub. A reação positiva dos fãs influenciou eventos futuros do jogo.

 Técnicas e Objetivos do Teste de Software: Garantindo Qualidade e Rentabilidade

O teste é uma das etapas do desenvolvimento de software, na maioria das vezes esses testes são feitos pelos próprios desenvolvedores e usuários do sistema, que servem apenas para garantir que o que foi pedido no software foi realmente implantado [Mauro Pezze, Michal Young]. Mas esse não é o objetivo principal de testar um software, esse processo possui três objetivos:

  • Melhorar o processo de software (Prevenção, detecção e remoção de erros)
  • Avaliar a qualidade do produto (Metas de qualidade)
  • Melhorar a qualidade e rentabilidade do produto

Melhorar a qualidade e rentabilidade do produto. Esses três objetivos do teste sendo feitos apenas por desenvolvedores e usuários não são suficientes, por mais que sejam desenvolvedores de software, muitas vezes são necessários profissionais capacitados que utilizam métodos e processos detestados claramente definidos. O processo de teste deve começar junto com o desenvolvimento do software, pois quanto antes é detectado um problema, mais barato será o custo para resolvê-lo, e o custo total de um software se torna mais barato quando bem testado [Anderson Bastos].

As melhores práticas em testes de software são fundamentais para garantir a qualidade e o sucesso dos produtos de software. Abordagens como automação de testes, testes de regressão, estratégias de envelhecimento, teste de estresse e BAT (Teste de Facilidades Básicas). À medida que as organizações podem aumentar a eficiência, reduzir riscos e melhorar a satisfação do cliente.

 2.2 Automatização de Testes

A automação de testes é uma prática de verificar e validar automaticamente um produto de software, como um aplicativo da Web, para garantir que ele atenda aos padrões de qualidade predefinidos de estilo de código, funcionalidade (lógica de negócios) e experiência do usuário.

As práticas de teste em geral envolvem os seguintes estágios:

  • Teste de : Processo feito em fase de desenvolvimento, em que se testam as menores unidades ou trechos de código do software, sendo preciso que essas unidades estejam prontas em algum estágio. Existe uma ferramenta de automação, conhecida como J.UNIT, que facilita este teste.
  • Teste de integração : Tem início após o término do teste unitário. Seu objetivo é garantir que um ou mais componentes que já passaram pelo teste de unidade de forma individual sejam
  • Foco e Produtividade: Os sprints apresentam um período de tempo delimitado para que a equipe se concentre nas tarefas prioritárias, promovendo a produtividade e minimizando distrações.
  • Entrega Iterativa: O Scrum enfatiza a entrega incremental de funcionalidades, o que significa que o produto é desenvolvido e entregue em partes, permitindo feedback contínuo das partes atendidas.
  • Adaptabilidade: Ao final de cada sprint, uma revisão é realizada para avaliar o progresso e ajustar as próximas etapas de acordo com as necessidades e feedback recebidos.
  • Transparência: O Scrum promove a transparência ao tornar o progresso do projeto visível para toda a equipe e partes envolvidas, por meio de reuniões regulares e equilibradas como o quadro de tarefas (Kanban) e as reuniões diárias de acompanhamento (Daily Scrum).
  • Engajamento da Equipe: Ao permitir que a equipe tenha autonomia e responsabilidade sobre o planejamento e execução das tarefas durante o sprint, o Scrum promove o engajamento e a motivação dos membros da equipe.
  • A planilha de teste de fumaça é uma ferramenta fundamental para verificar a estabilidade inicial do software. Ela contém testes básicos para garantir que as principais funcionalidades operacionais. Os resultados indicam se o software está pronto para testes mais aprofundados ou se precisa de ajustes adicionais

Encontrar problemas mais cedo no processo de desenvolvimento, economizando perda de tempo e gastos além do previsto. O teste na unidade pode ser reaproveitado em outro software.

cumprindo com suas finalidades de forma integrada [Bastos L., Emerson R., Base de conhecimento em testes de Software, 2007].

Esse teste se concentra em verificar a menor unidade do projeto do software, ele testa cada componente e caminho para descobrir e mostrar cada erro do sistema. Esse teste pode ser feito paralelamente para vários componentes e testes [Pressman]

  • Teste de ponta a ponta : valida se o aplicativo atende às expectativas do usuário
  • Testes exploratórios : adota uma abordagem não estruturada para analisar diversas áreas de um aplicativo pela perspectiva do usuário, para descobrir problemas funcionais ou visuais

  Testes de Regressão : Garantindo a Integridade

O teste de regressão é crucial para garantir a integridade do software. Esse tipo de teste envolve verificar se as correções de bugs anunciados foram iniciadas sendo inovadoras. Cada vez que um desenvolvedor afirma ter corrigido um bug, é necessário revisar o jogo para confirmar se a correção foi aplicada conforme o esperado. Às vezes, a correção pode não funcionar como o planejado ou até mesmo explicar novos problemas. Esse é um risco particular em sistemas mais complexos, nos quais uma alteração pode afetar outros componentes.

Ao testar uma correção de bug, é fundamental pesquisar não apenas a área afetada, mas também todo o contexto em que o bug foi inserido. Isso é especialmente relevante para bugs complexos. O processo geralmente envolve o desenvolvedor comunicar a correção ao testador, que então realiza o teste de regressão. Durante esse teste, é essencial verificar se o bug foi corrigido sem causar danos colaterais.

É importante ressaltar que o teste de regressão deve ser realizado sob as mesmas condições em que o bug foi originalmente identificado. Isso significa seguir os mesmos passos e testar no mesmo ambiente para garantir resultados precisos e consistentes. Este não é o momento para improvisações, mas sim para seguir procedimentos rigorosos para garantir a estabilidade e a qualidade do software

 Estratégias de Testes Ágeis

No desenvolvimento ágil de software, estratégias de teste devem ser ágeis e adaptáveis para acompanhar o ritmo acelerado das entregas incrementais. A colaboração entre desenvolvedores, testadores e partes interessadas é fundamental para garantir que os requisitos de qualidade sejam compreendidos e atendidos em cada iteração do processo de desenvolvimento.

Sistema de teste scrum

O Scrum é, de fato, um framework ágil amplamente adotado para o desenvolvimento de projetos complexos. Sua estrutura é fundamentada em ciclos denominados sprints, que geralmente têm uma duração de duas a quatro semanas. Durante cada sprint, uma equipe multifuncional se concentra em diversas fases do projeto sem interrupções externas.

Essa abordagem tem várias vantagens:

Essas são apenas algumas das características que tornam o Scrum uma abordagem eficaz para o desenvolvimento ágil de projetos complexos. Sua estrutura flexível e adaptável permite que equipes de diferentes contextos e procedimentos obtenham sucesso na entrega de produtos de alta qualidade.

 Teste de Estresse

O teste de estresse é uma prática autoexplicativa e crucial na indústria dos jogos. Basicamente, consiste em medir os jogos em condições extremas, proporcionando uma dose extra de pressão. Isso pode representar uma série de ações, pressionando botões repetidamente em um controle do console ou tocando freneticamente em diferentes áreas da tela em um dispositivo móvel.

Além disso, o teste de estresse pode incluir a execução simultânea de vários aplicativos ou jogos pesados no plano, o que exige uma alta capacidade de processamento e pode revelar problemas de desempenho. Embora o objetivo não seja apenas encontrar bugs, mas também determinar os limites de desempenho do jogo, é importante ressaltar que esse tipo de teste pode levar o jogo a se comportar de maneira estranha ou até mesmo a falha se realizada em excesso.

Um aspecto fundamental do teste de estresse é avaliar como o jogo responde quando submetido a uma carga pesada, especialmente em relação ao backend. Isso envolve simular um grande número de jogadores ativos simultaneamente ou um aumento arrependido no número de jogadores em um curto período de tempo. Esses testes permitem observar como o jogo se comporta sobrecarregado, identificar possíveis pontos de falha e garantir sua estabilidade, mesmo diante de situações de estresse intenso. É uma etapa essencial no processo de desenvolvimento para garantir que o jogo possa lidar com demandas extremas sem comprometer sua jogabilidade ou desempenho.

BAT (Teste de aceitação básico) 

O teste de facilidades básicas consiste em um pequeno conjunto de casos de teste que verifica as funções essenciais do jogo, garantindo que ele esteja operacional. Geralmente, esse processo dura entre meia hora e duas horas, dependendo do jogo e de outros fatores. O objetivo é verificar se as principais funcionalidades do jogo estão corretas. Às vezes, é chamado de "teste de fumaça", onde aspectos como carregamento do jogo, jogabilidade e tutorial são avaliados. Esse tipo de teste é uma etapa inicial para garantir que a construção do jogo esteja pronta para testes mais aprofundados. Em períodos de pico, esses testes podem servir como requisitos mínimos para o lançamento do jogo.

Metodologia de Garantia de Qualidade (QA) em Desenvolvimento de Software

A metodologia de Garantia de Qualidade (QA) no desenvolvimento de software é um processo estruturado e abrangente que visa garantir a qualidade, confiabilidade e usabilidade dos produtos de software.

  Planejamento e Análise:

   - Identificar os requisitos do projeto e as expectativas do cliente.

   - Definir os critérios de acessibilidade e os casos de uso.

   - Estabelecer os objetivos do QA e os métodos de avaliação da qualidade.

 Estratégia de Testes:

- Ao iniciar o processo de teste, os desenvolvedores precisam organizar os ambientes de teste adequados. Esses ambientes, como desenvolvimento, teste e produção, permitem que diferentes funções no ciclo de vida do software. É crucial ter um ambiente específico para identificar e corrigir erros (bugs). Geralmente, esses ambientes são divididos em dois principais: o ambiente de desenvolvimento, destinado a testes de desenvolvedores e analistas de qualidade, e o ambiente de produção, onde a versão final do software é disponibilizada para os usuários finais.

No contexto do desenvolvimento de aplicativos móveis, é comum lidar com diferentes tipos de builds. Por exemplo, para testes gerais e experimentação durante o desenvolvimento, os desenvolvedores usam o build APK (Android Package). Para distribuição na loja de aplicativos, é utilizada a build AAB (Android App Bundle), que representa a versão de produção do aplicativo.

Além disso, no caso de dispositivos iOS, existe o ambiente de teste TestFlight da Apple. O TestFlight é uma ferramenta poderosa que permite aos desenvolvedores distribuir versões beta de seus aplicativos para testadores externos antes do lançamento na App Store. Essa plataforma oferece aos desenvolvedores a capacidade de coletar feedback e identificar problemas antes do lançamento oficial do aplicativo.

- Selecione e priorize os tipos de testes a serem realizados, com base nos requisitos e nas características do projeto.

- Incorporar testes de automação sempre que possível, especialmente para casos de testes repetitivos e de regressão.

Desenvolvimento de Casos de Teste:

   - Elaborar casos de testes abrangentes e representativos, abrangendo diferentes cenários de uso e funcionalidades do software.

   - Incluir testes de unidade, integração, sistema e facilidades, conforme proteção para o projeto.

 Teste de Caso: Um Guia para Testes Eficazes

Um teste de caso é um conjunto de instruções projetadas que orientam como testes e alcançam os resultados desejados de forma consistente. Estas instruções fornecem direcionamentos sobre como testar um elemento específico e quais resultados esperar. Existem diversas abordagens para realizar esses testes, e é essencial que o processo seja abrangente para identificar problemas nos requisitos ou no design do software em questão.

Planilhas são comumente usadas para facilitar testes de software, registrando o que deveria acontecer e o que realmente acontece no software. Eles descrevem as expectativas de funcionamento, descrevendo ações e resultados esperados. Durante os testes, os resultados reais são comparados com as expectativas e quaisquer desvios são registrados para análise e correção. O uso de planilhas torna o processo de teste mais sistemático.

     Execução de Testes:

   - Implementar automação de testes utilizando ferramentas adequadas, como Selenium e JUnit.

   - Realizar testes de regressão regularmente para detectar possíveis problemas introduzidos por novas implementações ou atualizações.

   - Monitorar e registrar os resultados dos testes, identificando e documentando qualquer defeito encontrado.

 Colaboração e Comunicação:

   - Fomentar a colaboração entre os membros da equipe de desenvolvimento, testes e partes interessadas.

   - Comunicar de forma transparente o progresso, os resultados dos testes e quaisquer questões relacionadas à qualidade do software.

 Análise e Melhoria Contínua:

   - Analisar os resultados dos testes para identificar padrões, tendências e áreas de melhoria.

   - Realizar revisões regulares do processo de QA e ajustar a estratégia conforme necessário para minimizar a eficiência e a eficácia.

   - Incorporar feedback dos usuários e clientes para orientar aprimoramentos futuros do software.

 Documentação e Referências:

   - Manter uma documentação clara e atualizada de todos os colaboradores relacionados ao QA, incluindo casos de teste, resultados de testes e correções de defeitos.

   - Referenciar as melhores práticas e lições aprendidas de projetos anteriores, bem como qualquer documentação ou pesquisa relevante na área de desenvolvimento de software.

 Desafios e Estratégias para Diversidade de Hardware

No contexto do desenvolvimento de jogos, é essencial realizar testes em uma ampla variedade de dispositivos, conhecidos como conjuntos de testes, a fim de garantir uma cobertura de plataforma adequada. Esse requisito é especialmente relevante para jogos do gênero mobile, dada a diversidade de dispositivos móveis disponíveis no mercado. Considerando que existem atualmente mais de 10.000 dispositivos Android, produzidos por diversos fabricantes, e levados em conta a natureza única de cada combinação de hardware e software, torna-se necessário abordar esse aspecto com a devida atenção.

Por outro lado, a situação é um tanto simplificada quando se trata do sistema operacional iOS, uma vez que todos os dispositivos são fabricados pela Apple. No entanto, a maturidade do ecossistema iOS, caracterizada por uma ampla variedade de versões de dispositivos iPhone e iPad, implica a necessidade de testar em várias plataformas para garantir uma experiência consistente do usuário.

Além disso, é crucial reconhecer as diferenças fundamentais entre os sistemas operacionais iOS e Android, que se refletem na natureza dos bugs encontrados em cada plataforma. Portanto, a realização de testes abrangentes em uma variedade de dispositivos é uma prática recomendada para identificar e corrigir problemas específicos de cada sistema operacional.

No que diz respeito aos computadores pessoais, é impossível testar todas as configurações possíveis de hardware devido à vasta gama de hardware disponível. Nesse sentido, a seleção dos conjuntos de testes a serem usados geralmente é orientada pelo perfil do público-alvo do jogo, pelas especificações do sistema operacional alvo e pelas especificações do gênero do jogo.

Por fim, os jogos de console selecionados de uma abordagem específica de teste, uma vez que deverão ser concluídos em kits de desenvolvimento fornecidos por fabricantes, como Sony, Microsoft e Nintendo. Esses kits são necessários para garantir a compatibilidade e o desempenho adequado ao jogo no console específico, sendo necessário obter licenças do desenvolvedor e passar por um processo de solicitação junto aos fabricantes. [Nikolina Finska]

Portanto, diante da diversidade e complexidade do cenário de testes em jogos, é imperativo adotar uma abordagem abrangente e criteriosa, que leve em consideração as peculiaridades de cada plataforma e dispositivo, a fim de garantir a melhor experiência possível para os jogadores.

 Conclusão

Em busca da excelência no desenvolvimento de software é necessária uma abordagem rigorosa e meticulosa na Garantia de Qualidade (QA). Ao longo deste artigo, foram exploradas as melhores práticas em testes de software, destacando a automação, os testes de regressão e as estratégias ágeis como pilares fundamentais para garantir produtos de alto desempenho, confiabilidade e usabilidade.

A implementação de uma metodologia de QA bem estruturada, que inclui planejamento, execução e melhoria contínua, permite a identificação precoce de problemas e a correção eficiente de defeitos, resultando em produtos mais robustos e de melhor qualidade. A adoção de testes instáveis e de regressão garante que alterações no código não comprometam as funcionalidades existentes, mantendo a integridade do software ao longo do seu ciclo de vida.

As estratégias ágeis, como o Scrum, promovem uma colaboração estreita entre desenvolvedores, testadores e partes interessadas, garantindo que os requisitos de qualidade sejam atendidos em cada iteração de desenvolvimento. Testes de estresse e de facilidades fáceis (BAT) são essenciais para avaliar o desempenho sob condições extremas e garantir que as funcionalidades principais sejam operacionais antes de lançamentos mais amplos

O desafio da diversidade de hardware, especialmente no desenvolvimento de jogos e aplicativos móveis, destaca a importância de testar em uma ampla gama de dispositivos para garantir uma experiência de usuário consistente e de alta qualidade. A complexidade das diferentes plataformas, sejam elas Android, iOS ou PCs, requer uma abordagem adaptável e minuciosa para identificar e corrigir bugs específicos de cada sistema.

Em suma, a integração de práticas de controle de qualidade ao longo de todas as fases do desenvolvimento de software não só melhora a qualidade e a rentabilidade dos produtos, mas também aumenta a satisfação do cliente e reduz riscos. A aplicação dessas práticas resulta em um software que não apenas atende, mas muitas vezes excede as expectativas, estabelecendo um padrão de excelência na indústria de desenvolvimento de software.

8. Referências

Impressão. RS (2011) Engenharia de Software Uma Abordagem Profissional. McGrawHill Brasil.

Molinari L. (2008) Testes Funcionais de Software. Livros Visuais.

Sommerville I.(2007) Engenharia de Software. Educação Pearson.

Molinari L. (2011) Testes de Software, 4ª edição, Editora Érica.

Molinari L. (2010) Inovação e Automação de testes de Software, Editora Érica, 1ªedição.

Molinari, L. (2011), Teste de software, produz sistemas melhores e mais robustos, editora Erica.

Bastos, A. e Rios, E. e Cristalli, R. e Moreira, T. (2012), Base de conhecimento em teste de software, editora Martins.

Delamaro, ME e Maldonado, JC e Jino, M. (2007), Introdução ao teste de software, editora Campus.

Fala da prof. Nikolina Finska na disciplina de Kick off your gaming QA career: basics of testing for games – curso Udemy, janeiro de 2024.