Neste capítulo foram discutidos alguns conceitos da área de testes e de outros assuntos que serão abordados ao longo desta tese. Foram também detalhadas algumas técnicas utilizadas para espera quando se tem testes envolvendo assincronia e foi mais claramente definido o problema tratado por este trabalho. A principal observação a destacar é que o uso de téc- nicas inadequadas pode levar a baterias de teste que demoram muito para executar (devido a intervalos de espera exagerados) ou a falhas desnecessárias nos testes, tornando-os menos
2.7 Conclusões Parciais 26
confiáveis. A principal consequência de testes não confiáveis é o aumento do risco do desen- volvimento, em especial quando se tem um processo fortemente baseado em testes, como é o caso de vários processos ágeis.
Capítulo 3
Trabalhos Relacionados
Neste capítulo são apresentados os principais trabalhos que se relacionam a esta tese, com o intuito de identificar em que pontos se diferenciam deste. Além disso, esse capítulo visa também dar uma idéia geral destes trabalhos uma vez que alguns deles podem ser utilizados em conjunto com o que é apresentado nesta tese.
Os trabalhos apresentados a seguir foram encontrados tanto através de buscas exaustivas utilizando principalmente o engenho de busca Google, o Google Acadêmico e bibliotecas digitais da ACM e IEEE, quanto varrendo as referências dos principais trabalhos que eram encontrados e que apresentavam maior relação com o tema desta tese. Além disso, parte dos trabalhos apresentados neste capítulo surgiram através de questionamentos e sugestões dadas em apresentações deste trabalho em congressos e na avaliação da proposta de qualificação desta tese. Outra parte dos artigos aqui apresentados foi extraída através da análise de artigos produzidos nas principais conferências da área de testes e engenharia de software.
Foram considerados mais relacionados os trabalhos que tratavam de falsos positivos em testes envolvendo assincronia, por ser este o principal problema atacado por esta tese. Além destes, foram investigados trabalhos que tratam de mecanismos de sincronização, monitora- ção de threads e controle durante os testes, por estarem relacionados à solução que é proposta nesta tese. Além disso, foram analisados também trabalhos que tratam de ferramentas para auxiliar na identificação de defeitos de concorrência, algo complementar ao que é proposto nesta tese, uma vez que tais trabalhos têm o objetivo complementar de aumentar a confiança nos resultados de testes tendo principalmente o foco de mais facilmente expor defeitos de concorrência e não considerando a questão dos falsos positivos por problemas com os testes
3.1 Uso do Padrão Humble Object para Evitar Testes Assíncronos 28
em si.
Os trabalhos selecionados foram agrupados segundo suas características principais, em- bora alguns possam pertencer a mais de um grupo. Em cada seção apresentada a seguir será descrito o porquê daquele grupo de trabalhos ser considerado nesta revisão bibliográfica e são dados maiores detalhes sobre os trabalhos do grupo e sua relação com os resultados obtidos neste trabalho. Alguns trabalhos apresentam relação com o problema atacado neste trabalho de doutorado e com seus objetivos, outros apresentam diferentes propósitos do aqui descrito, mas se relacionam ao teste de sistemas concorrentes e podem em alguns casos ser utilizados conjuntamente com este, sendo complementares. Alguns outros trabalhos são re- lacionados à solução aqui proposta de monitoração e controle das threads e por isso serão também discutidos a seguir.
De maneira geral, considerando esses critérios, os trabalhos apresentados nas seções a seguir podem ser organizados conforme apresentado na Tabela 3.1.
3.1
Uso do Padrão Humble Object para Evitar Testes As-
síncronos
Quando se trata do problema de se testar aplicações envolvendo assincronia, um trabalho relacionado ao que é apresentado nesta tese é o livro de Meszaros [66]. Neste livro são discutidos diversos problemas detectados na implementação de testes de unidade e são pro- postos padrões com boas práticas para o desenvolvimento desses testes.
Alguns dos problemas apontados se referem à dificuldade em desenvolver testes que envolvem código assíncrono e o problema de testes que demoram muito devido a fases de espera baseadas em atrasos explícitos. Além de apresentar estes problemas, esse trabalho sugere que testes com operações assíncronas devem ser evitados no nível de testes de unidade e de componentes, através do uso de padrões como o Humble Object [66] (p. 695). A idéia desse padrão é que seja realizada no código a separação entre a lógica e os mecanismos assíncronos, permitindo assim que os testes possam ser realizados diretamente sobre a parte do código que trata da lógica, que seria acessada via testes síncronos. Dessa forma, os testes não precisarão de qualquer espera a não ser a da execução síncrona da lógica que antes era executada por uma thread diferente da do teste. Entretanto, tal estratégia pode ser onerosa
3.1 Uso do Padrão Humble Object para Evitar Testes Assíncronos 29
Tabela 3.1: Visão Geral dos Trabalhos Relacionados
TIPOS DE TRABALHOS TRABALHOS NESTA RELACIONADOS CATEGORIA
Trabalhos com o mesmo Padrão Humble Object [66]
objetivo/problema Problemas com Asserções em Projeto por Contrato (DBC) [82] [73]
Trabalhos relacionados Mecanismos de Sincronização
à solução proposta mas em Testes (ex: PNUnit [84] e TETware [96])
com objetivos ortogonais Controle de Testes [13] [62] [7]
ou complementares Controle de Testes utilizando Máquinas de Estado Finitas(FSMs) [98] [39]
Monitoração de Threads com Monitor de Referências [70] Monitoração de Threads com
Programação Orientada a Aspectos [19]
Trabalhos com objetivo Trabalhos sobre identificação
complementar de defeitos de concorrência (Seção 3.6): Detecção de Condições de Corrida Análise Estática
Verificação de Modelos em Programas Concorrentes Técnicas de Re-execução (Replay)
Técnicas para forçar
determinados escalonamentos Geradores de Ruído