Então, dos conceitos mais importantes da atividade de teste de softwares são as técnicas e seus critérios e é isso que a gente vai verificar neste vídeo. De forma geral, vamos iniciar considerando cenário típico da atividade de teste. Então, considerando programa qualquer, que eu estou chamando de P, esse programa tem domínio de entrada, que está representado aqui por essas bolinhas por exemplo. O que é domínio de entrada? O conjunto de todos os valores que podem ser usados para executar o programa. A partir desse domínio de entrada, a gente pode selecionar alguns dados de teste e o quê que é o dado de teste? Elemento do domínio de entrada do programa, que no caso a gente está chamando de P. Então, cada dado de teste desse pode ser utilizado para compor caso de teste. E o quê que é caso de teste? Par contendo dado de teste como entrada e a saída esperada, o resultado esperado. Se eu tenho vários casos de teste, a gente chama isso de conjunto de casos de teste. E é esse conjunto de casos de teste que vai ser submetido ao programa para execução, a fim de verificar se existem defeitos no mesmo, está certo? E aí no final quê que a gente tem após executar o programa com esses casos de teste? A gente tem que verificar se para cada caso de teste a saída obtida era igual à saída esperada que foi definida anteriormente aqui no caso de teste. Então este é cenário típico de atividade de teste. Agora a gente precisa pensar algumas questões, porque tendo programa e tendo domínio de entrada para esse programa, o ideal seria testar esse programa com todos os elementos do domínio de entrada. Então, supondo que o meu domínio de entrada é essa piscina de bolinhas, eu deveria testar todas as bolinhas da piscina de bolinhas. O que é inviável para grandes domínios ou domínios infinitos. Isso é praticamente teste exaustível que é infactível, como foi colocado aqui, para grandes ou infinitos domínios. E o quê que a gente pode fazer nesse caso? O ideal seria selecionar subdomínios, a partir desse domínio de entrada, para garantir, mas garantindo ainda assim, mesmo dividindo, garantindo alta probabilidade revelar defeitos no software. E, a partir desses subdomínios, a gente poderia selecionar, como a gente tinha verificado aqui antes, dados de teste que representam cada subdomínio desse para depois compor caso de teste e aí o percurso é o mesmo. Agora, como identificar esses subdomínios? Porque no exemplo anterior a regra que a gente usou para criar os subdomínios, olha só foi a cor. Então a partir da cor a gente criou os subdomínios aqui das bolinhas. Agora como fazer isso com o software si? Então, são definidas regras chamadas técnicas e essas técnicas possuem critérios que são utilizados para quê? Para identificar quando dados de teste devem estar no mesmo subdomínio ou subdomínios diferentes. Então, basicamente é isso que essas técnicas fazem, a partir do domínio de entrada que a gente usa, as técnicas para separar domínios e a partir daí identificar os casos de teste revelantes. Então, aqui a gente tem resumo das principais técnicas de teste, da atividade de teste. A primeira delas é o teste funcional, depois a gente tem o teste estrutural, teste baseado defeitos que inclusive são os testes tratados neste curso. O quê que diferencia uma técnica da outra? O tipo de informação utilizada para derivar os requisitos de teste. O teste funcional usa a especificação do software; o teste estrutural usa a implementação, o código-fonte para derivar requisitos de teste; e a técnica baseada defeitos utiliza defeitos típicos do processo de implementação de software, uma técnica que trabalha pouquinho diferente. E aí cada uma tem alguns passos principais que a gente precisa identificar. De forma geral, o teste funcional a gente precisa identificar as funções e, a partir dessas funções, criar casos de teste capazes de verificar se essas funções estão corretas. Já no teste estrutural a maioria dos critérios trabalha com a representação do programa, que a gente chama de grafo de programa e a técnica baseada defeitos trabalha criando uma implementação alternativa e força o testador a projetar casos de teste que revelam os defeitos que foram introduzidos nessas implementações alternativas. E aí aqui a gente tem exemplos, alguns exemplos de critérios para cada uma dessas técnicas. Os principais do teste funcional é o particionamento classes de equivalência, análise do valor limite, combinatorial, dentre outros. Os critérios da técnica teste estrutural são critérios baseados complexidade, fluxo de controle, fluxo de dados e a técnica baseada defeitos, o principal é realmente o teste de mutação e aí a gente tem aqui a análise de mutantes e a mutação de interface si. Também é importante considerar quais técnicas podem ser aplicadas quais fases da atividade de teste. Então, por exemplo, o teste funcional de forma geral pode ser aplicado todas as fases de teste: unidade, progressão, sistema. Já o estrutural de mutação é mais focado na parte de unidade e na parte de integração. Aqui a gente tem resuminho sobre as técnicas de teste da atividade de teste. Então, de forma geral essas técnicas existem para ajudar a estabelecer subdomínios, considerando que a ideia de domínios de entrada muito grandes ou infinitos, onde o teste exaustível é inviável. A diferença entre elas é o tipo de informação utilizada. Então algumas usam a especificação, por exemplo, o teste funcional, enquanto outras usam a implementação, o código si, no caso na estrutural e de defeitos. As técnicas principais, o teste funcional, o teste estrutural e o de defeitos. E aqui a gente tem resuminho dos critérios de cada uma delas. O funcional, o particionamento classes de equivalência, análise do valor limite, combinatorial, grafo causa-efeito, dentre outros. O estrutural baseado na complexidade, no fluxo de controle ou no fluxo de dados. e o defeito a gente tem como critério principal o teste de mutação. É importante que você verifique as fases de teste, quais técnicas podem ser aplicadas cada fase: unidade, integração, sistema. E também é importante identificar pesquisas, porque essas técnicas estão sendo evoluídas, têm sido criados novos critérios, novas técnicas, então é importante ficar atento na questão das pesquisas recentes nessa área também. Então, para terminar eu deixo para você algumas dicas de próximos passos na sua aprendizagem. É importante que você compreenda, busque compreender e aplicar as técnicas que a gente acabou de verificar. Aqui foi esboço geral, mas então você tente entender como que funciona e como que a técnica de teste funcional, estrutural e de defeitos podem ser aplicadas no contexto real e exercitar os conhecimentos adquiridos até agora por meio de exercícios e também de casos.