📑 Table of Contents
Processo de aceitação de testes

O teste de regressão é uma atividade de verificação e validação de sistemas presente na engenharia de software moderna.[1] Ele é responsável por garantir que as funcionalidades de um software não sejam danificadas com futuras atualizações, garantindo o comportamento esperado na especificação do produto. Espera-se que o valor do teste seja mantido se o código-fonte não for alterado. Porém, ele pode variar (e.g. de falso para verdadeiro e vice-versa) em diferentes execuções sem alterações no código. Este evento caracteriza o teste como flaky ou instável.

ATAF

editar

Considerando que instabilidades em testes são inevitáveis, no Facebook propuseram a seguinte abordagem: assumir que todos os testes possuem seu grau de instabilidade é mais seguro para que o desenvolvedor tenha maior atenção durante sua implementação e também reconheça os padrões de instabilidade em cada cenário de teste. Essa abordagem chama-se ATAF.[2]

As fases de testes mais comuns são: testes de unidade, testes de integração e testes de sistema (e.g. interface do usuário). Os testes de unidade geralmente são mais rápidos e testam funcionalidades de maneira isolada. Já os testes end-to-end e GUI podem ser mais lentos e necessitam de maior interação entre componentes e serviços. Existe a hipótese de que testes end-to-end e UI possuem custo mais elevado, principalmente quando aplicadas técnicas de re-execução para identificar flaky tests. Nesse cenário, tornar-se-ia mais relevante a utilização de técnicas mais rápidas, como aqueles que consideram o vocabulário de casos de teste flaky.

GUI Tests

editar

Em GUI os casos de teste são sequências de eventos, em vez de entradas simples. O resultado a ser testado pode ser um estado esperado para aplicação após a sequência de eventos, ou certa interface esperada. Isto possibilita a simulação de ações que são realizadas na interface em uma ordem específica. O estado atual da interface depende da entrada de eventos e da execução de funções assíncronas. Neste cenário, a instabilidade pode ocorrer por dois motivos: ordem incorreta de eventos ou atraso na execução de funções de callback que retornam dados para interface. Existem fatores associados ao flakiness, são eles: versão da linguagem (e.g. Java), sistema operacional, carga do sistema, ordem de execução, threads de cálculos, atrasos de retorno de dados. Todos esses elementos podem variar de certa maneira inesperada, ocasionando um flaky test.[3]

A instabilidade na maioria das vezes é resultado da dificuldade de se manter cenários de testes idênticos durante múltiplas execuções, revelando um grau de flakiness em todos tipos de testes.[4] Em testes GUI e end-to-end é difícil garantir que a disponibilidade da rede se mantenha, que as plataformas de execução sejam idênticas, e que os fatores ambientais envolvidos não interfiram no processo de teste. Este cenário é fértil para instabilidade relacionada a assincronicidade, diferença de plataformas e renderização de recursos.[5]

Referências

  1. Bell, Jonathan; Legunsen, Owolabi; Hilton, Michael; Eloussi, Lamyaa; Yung, Tifany; Marinov, Darko (27 de maio de 2018). «D e F laker: automatically detecting flaky tests». Gothenburg Sweden: ACM (em inglês): 433–444. ISBN 978-1-4503-5638-1. doi:10.1145/3180155.3180164. Consultado em 25 de abril de 2022 
  2. Harman, Mark; O'Hearn, Peter (setembro de 2018). «From Start-ups to Scale-ups: Opportunities and Open Problems for Static and Dynamic Program Analysis». Madrid: IEEE: 1–23. ISBN 978-1-5386-8290-6. doi:10.1109/SCAM.2018.00009. Consultado em 25 de abril de 2022 
  3. Memon, Atif M.; Cohen, Myra B. (maio de 2013). «Automated testing of GUI applications: Models, tools, and controlling flakiness»: 1479–1480. doi:10.1109/ICSE.2013.6606750. Consultado em 25 de abril de 2022 
  4. Morán, Jesús; Augusto, Cristian; Bertolino, Antonia; Riva, Claudio De La; Tuya, Javier (3 de junho de 2020). «FlakyLoc: Flakiness Localization for Reliable Test Suites in Web Applications». Journal of Web Engineering. ISSN 1544-5976. doi:10.13052/jwe1540-9589.1927. Consultado em 25 de abril de 2022 
  5. Romano, Alan; Song, Zihe; Grandhi, Sampath; Yang, Wei; Wang, Weihang (maio de 2021). «An Empirical Analysis of UI-Based Flaky Tests». IEEE. doi:10.1109/icse43902.2021.00141. Consultado em 25 de abril de 2022 

📚 Artikel Terkait di Wikipedia

Cromatografia gasosa bidimensional abrangente GC×GC

(GC×GC–TOFMS) in combination with multivariate analysis,Journal of Pharmaceutical and Biomedical Analysis,Volume 43, Issue 5,2007,Pages 1721-1727. Sampat

Tecnologia educacional

Bari; Tucker, Jan (23 de março de 2012). «Using Technology To Create A Dynamic Classroom Experience». Journal of College Teaching & Learning (TLC). 9

Controvérsia sobre alimentos geneticamente modificados

Jonas; Qaim, Matin (17 de julho de 2012). «Economic impacts and impact dynamics of Bt ( Bacillus thuringiensis ) cotton in India». Proceedings of the National

Ocupação israelense da Cisjordânia

65–80. JSTOR 2536225. doi:10.2307/2536225  De Waart, P. J. I. M (1994). Dynamics of Self-determination in Palestine: Protection of Peoples as a Human Rights

Xi Jinping

Reuters (em inglês). Consultado em 13 de agosto de 2022  Cao, Desheng. «Xi: Dynamic zero-COVID policy works» [Xi: A política dinâmica zero-COVID funciona]

França

Cópia arquivada em 20 de março de 2019  Peter Turchin (2003). Historical dynamics: why states rise and fall. Princenton: Princeton University Press. p. 179

Consciência situacional

situation awareness in dynamic systems. Human Factors, 37(1), 65–84. Endsley, M.R. (1995b). Toward a theory of situation awareness in dynamic systems. Human Factors

Internet

original (PDF) em 22 de dezembro de 2018  Gillis, Alexander S. «What is DHCP (Dynamic Host Configuration Protocol)?». TechTarget: SearchNetworking. Consultado