116 research outputs found

    Bio-inspired optimization algorithms for unit test generation

    Get PDF
    Tese de Mestrado, Engenharia Informática (Engenharia de Software), 2021, Universidade de Lisboa, Faculdade de CiênciasNa sociedade atual nós estamos rodeados e usamos todo o tipo de aplicações de software. Problemas no software pode causar todo o tipo de consequências, desde pessoas não conseguirem jogar um jogo como era suposto a uma aeronave despenhar-se matando toda as pessoas a bordo. De modo a que se evite certas consequências, convém que esse software não tenha problemas e funcione como é suposto. Porém, o software é escrito por humanos pelo que está sujeito a ter erros. Para lidar com esta situação, testes de software são feitos, de modo a que se descubra e resolva os problemas no software. Testar software baseado em pesquisa é uma área de teste de software que se tem mostrado bastante bemsucedida na geração de conjuntos de teste unitários otimizados para cobertura de código. Esta abordagem usa algoritmos meta-heurísticos guiados por critérios de cobertura de código para gerar os testes. Neste estudo, foi utilizado um critério de cobertura múltiplo que é composto por oito critérios diferentes: a cobertura de linhas, cobertura de ramos, cobertura de métodos, cobertura de métodos de nível de topo sem exceção, cobertura de ramos direto, cobertura de output, mutação fraca e cobertura de exceções. No que diz respeito aos algoritmos meta-heurísticos, os algoritmos evolucionários são o estado da arte atual, tendo apresentado os melhores resultados em estudos anteriores, superando os algoritmos aleatórios. No entanto, serão os algoritmos evolucionários realmente os melhores algoritmos neste contexto? E quanto aos algoritmos de inteligência de grupo, poderão eles também apresentar bons resultados? Poderá o atual estado da arte ser substituído por um algoritmo de inteligência de grupo? Deste modo, para responder a estas e outras questões, decidimos explorar os algoritmos bio-inspirados, também conhecidos por algoritmos de inteligência de grupo. Estes algoritmos baseiam-se no comportamento de indivíduos que pertencem a grupos na natureza, tais como os enxames de abelhas. Os algoritmos bio-inspirados não são completamente novos na área de testar software. Estudos anteriores mostram que os algoritmos de inteligência de grupo são geralmente melhores que os algoritmos genéticos para testes de estrutura, que na geração de dados para testes o desempenho dos algoritmos depende do tipo de problema e que na geração automática de testes Artificial Bee Algorithm teve o melhor desempenho e o Bat Algorithm é o mais rápido a executar. Nós escolhemos implementar dez algoritmos de inteligência de grupo que possuem várias características diferentes, com diferentes graus de popularidade e que incluem algoritmos antigos e recentes. Os algoritmos escolhidos são: Genetic Bee Colony (GBC) Algorithm, Fish Swarm Algorithm (FSA), Cat Swarm Optimization (CSO), Whale Optimization Algorithm (WOA), Artificial Algae Algorithm (AAA), Elephant Herding Optimization (EHO), Chicken Swarm Optimization Algorithm (CSOA), Moth Flame Optimization (MFO) Algorithm, Grey Wolf Optimization (GWO) Algorithm and Particle Swarm Optimizer (PSO). Para representar os algoritmos evolucionários e servir de comparação contra os algoritmos de inteligência de grupo, escolhemos o Standard Genetic Algorithm (Standard GA), Many-Objective Sorting Algorithm (MOSA) e o Dynamic ManyObjective Sorting Algorithm (DynaMOSA). Este último é o estado da arte atual. Além destes algoritmos, foi implementado mais um algoritmo que é um híbrido (fusão de algoritmos de inteligência de grupo e evolucionários), o Elephant Dynamic Many-Objective Sorting Algorithm (Elephant-DynaMOSA). O EvoSuite foi a ferramenta de geração de testes escolhida para implementar o híbrido e os dez algoritmos de inteligência de grupo por já possuir diversas otimizações, os algoritmos evolucionários já estão implementados e a natureza modular da ferramenta permite facilmente adicionar novos algoritmos ao módulo dos algoritmos. O estudo empírico realizado consiste em duas experiências: a calibração dos parâmetros e a avaliação dos algoritmos. Na primeira experiência, escolhemos vários parâmetros e testámos vários valores destes para cada algoritmo. Foi selecionado um subconjunto de 34 classes e testou-se em 30 seeds diferentes durante 60 segundos para se obter os resultados de cada configuração. De seguida, aplicámos o método estatístico Vargha-Delaney de modo a encontrar a melhor configuração de cada algoritmo. A segunda experiência consistiu em correr a melhor configuração de cada algoritmo em 312 classes com 30 seeds durante 60 segundos. Depois, com o intuito de interpretar os resultados obtidos e conseguir ver qual o melhor algoritmo de inteligência de grupo, se os algoritmos de inteligência de grupo são melhores que os três algoritmos evolucionários e quão boa é a performance do algoritmo híbrido, foram usados os métodos estatísticos de Vargha-Delaney e teste de Friedman. Também se observou a relação entre diversos aspetos dos resultados: a cobertura e o número de gerações, cobertura e a pontuação de mutação, cobertura e diversidade e cobertura e tamanho dos testes. Os nossos resultados revelam que EHO foi o melhor algoritmo de inteligência de grupo e que também superou o Standard GA. Porém, tanto DynaMOSA e MOSA mostram-se superior ao EHO. Em relação ao Elephant-DynaMOSA, que é o híbrido do melhor algoritmo de inteligência de grupo e evolucionário, os resultados foram melhores que o EHO, visto que tem um desempenho semelhante ao MOSA. No final, DynaMOSA foi o algoritmo com maior cobertura média e com os melhores resultados estatísticos nos dois métodos usados. Posteriormente, decidimos discutir outras particularidades dos resultados e propusemos três hipóteses: o melhor algoritmo é superior em todas as classes, qualquer algoritmo consegue atingir pelo menos 50% de cobertura em todas as classes e o desempenho aumenta se o tempo de execução aumentar. A primeira hipótese provou-se falsa visto que houve seis algoritmos estatisticamente melhor que os outros em certas classes: Standard GA, MOSA, DynaMOSA, EHO, Elephant-DynaMOSA e FSA. Isto foi provado ao mostrar-se os valores médios de vários aspetos obtidos nas execuções (número de gerações e testes, tamanho dos testes e cobertura), os resultados do método estatístico Vargha-Delaney e o desempenho de cada algoritmo por critério de cobertura de código. A segunda hipótese também se provou falsa porque 17.5% das classes obtiveram menos de 50% de cobertura independentemente do algoritmo usado. Uma das principais razões é a limitação do EvoSuite como ferramenta de testes, por exemplo não conseguir gerar os inputs necessários para correr a classe. A última hipótese foi a única que se provou ser verdadeira. Para responder a esta hipótese, selecionados a melhor configuração por algoritmo e correu-se 312 classes em uma seed durante uma hora. A cobertura média de todos os algoritmos subiu cerca de 7% e 13 dos 14 algoritmos melhoraram a sua cobertura. Também observámos a evolução dos algoritmos durante a execução e apenas uma minoria dos algoritmos mostrou uma melhoria significativa no desempenho após 60 segundos. Por isso, concluiu-se que apesar da melhoria geral no desempenho, tal melhoria poderá não valer a pena devido ao aumento de recursos necessários com um maior orçamento de tempo. Com isto podemos concluir que apesar do DynaMOSA manter-se como o estado da arte, ele não é o melhor em todas as situações. E que os algoritmos de inteligência de grupo mostraram um certo grau de potencial, principalmente o algoritmo híbrido, Elephant-DynaMOSA. Por isso, nós sugerimos que para trabalho futuro se teste mais algoritmos de inteligência de grupo e algoritmos de múltiplos objetivos, com foco em algoritmos híbridos que combinem os melhores aspetos dos vários algoritmos. Outra iniciativa que pode ser realizada é analisar que algoritmos são melhores para cada critério de cobertura e criar um algoritmo múltiplo capaz de se adaptar e otimizar a procura tendo em conta os critérios de cobertura escolhidos.Search-based software testing is an area of software testing that has shown to be quite successful in generating unit test suites optimized for code coverage. This approach uses meta-heuristic algorithms guided by code coverage criteria (e.g., branch coverage) to generate the tests. When it comes to meta-heuristic algorithms, evolutionary algorithms are the current state-of-the-art, having presented the best results in previous studies. However, are evolutionary algorithms truly the best algorithms in this context? What about bio-inspired algorithms, can they also present good results? Will the current state-of-the-art be replaced with a bio-inspired algorithm? In order to answer these and other questions, we performed an empirical study where we evaluated ten bio-inspired algorithms, three evolutionary algorithms and one hybrid algorithm (a mix of bio-inspired and evolutionary algorithms) on a selection of non-trivial open-source classes. EvoSuite was the test generation tool chosen to implement the ten bio-inspired algorithms and the hybrid since it already has several optimizations and the evolutionary algorithms implemented. Our results show that the Elephant Herding Optimization has the best performance among the bio-inspired algorithms and has surpassed the Standard Genetic Algorithm. However, both the Many-Objective Sorting Algorithm (MOSA) and the Dynamic Many Objective Sorting Algorithm (DynaMOSA) showed superior efficiency compared to all ten bio-inspired algorithms. When it comes to the hybrid algorithm, Elephant Dynamic Many-Objective Sorting Algorithm (Elephant-DynaMOSA), it ended up with a similar performance to MOSA but still worse than the current state-of-the-art, DynaMOSA. We also discussed three hypotheses about the results obtained. Although DynaMOSA remains the state-of-the-art algorithm, it is not the best in all classes. Not only so, but the bio-inspired algorithms showed some potential, especially in the case of the hybrid, Elephant-DynaMOSA. Thus, we suggest future work on hybrid algorithms that fuse the best aspects of several algorithms

    Efficient instance and hypothesis space revision in Meta-Interpretive Learning

    Get PDF
    Inductive Logic Programming (ILP) is a form of Machine Learning. The goal of ILP is to induce hypotheses, as logic programs, that generalise training examples. ILP is characterised by a high expressivity, generalisation ability and interpretability. Meta-Interpretive Learning (MIL) is a state-of-the-art sub-field of ILP. However, current MIL approaches have limited efficiency: the sample and learning complexity respectively are polynomial and exponential in the number of clauses. My thesis is that improvements over the sample and learning complexity can be achieved in MIL through instance and hypothesis space revision. Specifically, we investigate 1) methods that revise the instance space, 2) methods that revise the hypothesis space and 3) methods that revise both the instance and the hypothesis spaces for achieving more efficient MIL. First, we introduce a method for building training sets with active learning in Bayesian MIL. Instances are selected maximising the entropy. We demonstrate this method can reduce the sample complexity and supports efficient learning of agent strategies. Second, we introduce a new method for revising the MIL hypothesis space with predicate invention. Our method generates predicates bottom-up from the background knowledge related to the training examples. We demonstrate this method is complete and can reduce the learning and sample complexity. Finally, we introduce a new MIL system called MIGO for learning optimal two-player game strategies. MIGO learns from playing: its training sets are built from the sequence of actions it chooses. Moreover, MIGO revises its hypothesis space with Dependent Learning: it first solves simpler tasks and can reuse any learned solution for solving more complex tasks. We demonstrate MIGO significantly outperforms both classical and deep reinforcement learning. The methods presented in this thesis open exciting perspectives for efficiently learning theories with MIL in a wide range of applications including robotics, modelling of agent strategies and game playing.Open Acces

    Software Test Case Generation Tools and Techniques: A Review

    Get PDF
    Software Industry is evolving at a very fast pace since last two decades. Many software developments, testing and test case generation approaches have evolved in last two decades to deliver quality products and services. Testing plays a vital role to ensure the quality and reliability of software products. In this paper authors attempted to conduct a systematic study of testing tools and techniques. Six most popular e-resources called IEEE, Springer, Association for Computing Machinery (ACM), Elsevier, Wiley and Google Scholar to download 738 manuscripts out of which 125 were selected to conduct the study. Out of 125 manuscripts selected, a good number approx. 79% are from reputed journals and around 21% are from good conference of repute. Testing tools discussed in this paper have broadly been divided into five different categories: open source, academic and research, commercial, academic and open source, and commercial & open source. The paper also discusses several benchmarked datasets viz. Evosuite 10, SF100 Corpus, Defects4J repository, Neo4j, JSON, Mocha JS, and Node JS to name a few. Aim of this paper is to make the researchers aware of the various test case generation tools and techniques introduced in the last 11 years with their salient features

    Modélisation formelle des systèmes de détection d'intrusions

    Get PDF
    L’écosystème de la cybersécurité évolue en permanence en termes du nombre, de la diversité, et de la complexité des attaques. De ce fait, les outils de détection deviennent inefficaces face à certaines attaques. On distingue généralement trois types de systèmes de détection d’intrusions : détection par anomalies, détection par signatures et détection hybride. La détection par anomalies est fondée sur la caractérisation du comportement habituel du système, typiquement de manière statistique. Elle permet de détecter des attaques connues ou inconnues, mais génère aussi un très grand nombre de faux positifs. La détection par signatures permet de détecter des attaques connues en définissant des règles qui décrivent le comportement connu d’un attaquant. Cela demande une bonne connaissance du comportement de l’attaquant. La détection hybride repose sur plusieurs méthodes de détection incluant celles sus-citées. Elle présente l’avantage d’être plus précise pendant la détection. Des outils tels que Snort et Zeek offrent des langages de bas niveau pour l’expression de règles de reconnaissance d’attaques. Le nombre d’attaques potentielles étant très grand, ces bases de règles deviennent rapidement difficiles à gérer et à maintenir. De plus, l’expression de règles avec état dit stateful est particulièrement ardue pour reconnaître une séquence d’événements. Dans cette thèse, nous proposons une approche stateful basée sur les diagrammes d’état-transition algébriques (ASTDs) afin d’identifier des attaques complexes. Les ASTDs permettent de représenter de façon graphique et modulaire une spécification, ce qui facilite la maintenance et la compréhension des règles. Nous étendons la notation ASTD avec de nouvelles fonctionnalités pour représenter des attaques complexes. Ensuite, nous spécifions plusieurs attaques avec la notation étendue et exécutons les spécifications obtenues sur des flots d’événements à l’aide d’un interpréteur pour identifier des attaques. Nous évaluons aussi les performances de l’interpréteur avec des outils industriels tels que Snort et Zeek. Puis, nous réalisons un compilateur afin de générer du code exécutable à partir d’une spécification ASTD, capable d’identifier de façon efficiente les séquences d’événements.Abstract : The cybersecurity ecosystem continuously evolves with the number, the diversity, and the complexity of cyber attacks. Generally, we have three types of Intrusion Detection System (IDS) : anomaly-based detection, signature-based detection, and hybrid detection. Anomaly detection is based on the usual behavior description of the system, typically in a static manner. It enables detecting known or unknown attacks but also generating a large number of false positives. Signature based detection enables detecting known attacks by defining rules that describe known attacker’s behavior. It needs a good knowledge of attacker behavior. Hybrid detection relies on several detection methods including the previous ones. It has the advantage of being more precise during detection. Tools like Snort and Zeek offer low level languages to represent rules for detecting attacks. The number of potential attacks being large, these rule bases become quickly hard to manage and maintain. Moreover, the representation of stateful rules to recognize a sequence of events is particularly arduous. In this thesis, we propose a stateful approach based on algebraic state-transition diagrams (ASTDs) to identify complex attacks. ASTDs allow a graphical and modular representation of a specification, that facilitates maintenance and understanding of rules. We extend the ASTD notation with new features to represent complex attacks. Next, we specify several attacks with the extended notation and run the resulting specifications on event streams using an interpreter to identify attacks. We also evaluate the performance of the interpreter with industrial tools such as Snort and Zeek. Then, we build a compiler in order to generate executable code from an ASTD specification, able to efficiently identify sequences of events

    Distributing Cognition: A Defense of Collective Mentality

    Get PDF
    While ordinary language allows for the attribution of mental states to collectivities, there is broad agreement among philosophers and cognitive scientists that such attributions should not be taken literally because they are at best explanatorily superfluous and at worst wildly implausible. I argue that the widely shared philosophical assumption that mentality is exclusively a property of individuals is mistaken. One prominent objection to the idea that collectives could be in genuinely mental states is that they lack self-consciousness and the capacity for qualitative consciousness. I argue that neither self-consciousness nor qualitative consciousness is necessary for mentality. But I also show that both collective self-consciousness and qualitative consciousness are possible. Another objection states that collectives cannot possess representations above and beyond the representations in the minds of the individuals that compose them. I counter that representations in individual minds often depend on representations in lower-level subsystems and I argue that collective representations can arise in a similar way. I conclude by demonstrating that collective cognition is not a mere possibility; there are cases of collective cognition in the actual world

    Optimization Techniques for Automated Software Test Data Generation

    Get PDF
    Esta tesis propone una variedad de contribuciones al campo de pruebas evolutivas. Hemos abarcados un amplio rango de aspectos relativos a las pruebas de programas: código fuente procedimental y orientado a objetos, paradigmas estructural y funcional, problemas mono-objetivo y multi-objetivo, casos de prueba aislados y secuencias de pruebas, y trabajos teóricos y experimentales. En relación a los análisis llevados a cabo, hemos puesto énfasis en el análisis estadístico de los resultados para evaluar la significancia práctica de los resultados. En resumen, las principales contribuciones de la tesis son: Definición de una nueva medida de distancia para el operador instanceof en programas orientados a objetos: En este trabajo nos hemos centrado en un aspecto relacionado con el software orientado a objetos, la herencia, para proponer algunos enfoques que pueden ayudar a guiar la búsqueda de datos de prueba en el contexto de las pruebas evolutivas. En particular, hemos propuesto una medida de distancia para computar la distancia de ramas en presencia del operador instanceof en programas Java. También hemos propuesto dos operadores de mutación que modifican las soluciones candidatas basadas en la medida de distancia definida. Definición de una nueva medida de complejidad llamada ``Branch Coverage Expectation'': En este trabajo nos enfrentamos a la complejidad de pruebas desde un punto de vista original: un programa es más complejo si es más difícil de probar de forma automática. Consecuentemente, definimos la ``Branch Coverage Expectation'' para proporcionar conocimiento sobre la dificultad de probar programas. La fundación de esta medida se basa en el modelo de Markov del programa. El modelo de Markov proporciona fundamentos teóricos. El análisis de esta medida indica que está más correlacionada con la cobertura de rama que las otras medidas de código estáticas. Esto significa que esto es un buen modo de estimar la dificultad de probar un programa. Predicción teórica del número de casos de prueba necesarios para cubrir un porcentaje concreto de un programa: Nuestro modelo de Markov del programa puede ser usado para proporcionar una estimación del número de casos de prueba necesarios para cubrir un porcentaje concreto del programa. Hemos comparado nuestra predicción teórica con la media de las ejecuciones reales de un generador de datos de prueba. Este modelo puede ayudar a predecir la evolución de la fase de pruebas, la cual consecuentemente puede ahorrar tiempo y coste del proyecto completo. Esta predicción teórica podría ser también muy útil para determinar el porcentaje del programa cubierto dados un número de casos de prueba. Propuesta de enfoques para resolver el problema de generación de datos de prueba multi-objetivo: En ese capítulo estudiamos el problema de la generación multi-objetivo con el fin de analizar el rendimiento de un enfoque directo multi-objetivo frente a la aplicación de un algoritmo mono-objetivo seguido de una selección de casos de prueba. Hemos evaluado cuatro algoritmos multi-objetivo (MOCell, NSGA-II, SPEA2, y PAES) y dos algoritmos mono-objetivo (GA y ES), y dos algoritmos aleatorios. En términos de convergencia hacía el frente de Pareto óptimo, GA y MOCell han sido los mejores resolutores en nuestra comparación. Queremos destacar que el enfoque mono-objetivo, donde se ataca cada rama por separado, es más efectivo cuando el programa tiene un grado de anidamiento alto. Comparativa de diferentes estrategias de priorización en líneas de productos y árboles de clasificación: En el contexto de pruebas funcionales hemos tratado el tema de la priorización de casos de prueba con dos representaciones diferentes, modelos de características que representan líneas de productos software y árboles de clasificación. Hemos comparado cinco enfoques relativos al método de clasificación con árboles y dos relativos a líneas de productos, cuatro de ellos propuestos por nosotros. Los resultados nos indican que las propuestas para ambas representaciones basadas en un algoritmo genético son mejores que el resto en la mayoría de escenarios experimentales, es la mejor opción cuando tenemos restricciones de tiempo o coste. Definición de la extensión del método de clasificación con árbol para la generación de secuencias de pruebas: Hemos definido formalmente esta extensión para la generación de secuencias de pruebas que puede ser útil para la industria y para la comunidad investigadora. Sus beneficios son claros ya que indudablemente el coste de situar el artefacto bajo pruebas en el siguiente estado no es necesario, a la vez que reducimos significativamente el tamaño de la secuencia utilizando técnicas metaheurísticas. Particularmente nuestra propuesta basada en colonias de hormigas es el mejor algoritmo de la comparativa, siendo el único algoritmo que alcanza la cobertura máxima para todos los modelos y tipos de cobertura. Exploración del efecto de diferentes estrategias de seeding en el cálculo de frentes de Pareto óptimos en líneas de productos: Estudiamos el comportamiento de algoritmos clásicos multi-objetivo evolutivos aplicados a las pruebas por pares de líneas de productos. El grupo de algoritmos fue seleccionado para cubrir una amplia y diversa gama de técnicas. Nuestra evaluación indica claramente que las estrategias de seeding ayudan al proceso de búsqueda de forma determinante. Cuanta más información se disponga para crear esta población inicial, mejores serán los resultados obtenidos. Además, gracias al uso de técnicas multi-objetivo podemos proporcionar un conjunto de pruebas adecuado mayor o menor, en resumen, que mejor se adapte a sus restricciones económicas o tecnológicas. Propuesta de técnica exacta para la computación del frente de Pareto óptimo en líneas de productos software: Hemos propuesto un enfoque exacto para este cálculo en el caso multi-objetivo con cobertura paiwise. Definimos un programa lineal 0-1 y un algoritmo basado en resolutores SAT para obtener el frente de Pareto verdadero. La evaluación de los resultados nos indica que, a pesar de ser un fantástico método para el cálculo de soluciones óptimas, tiene el inconveniente de la escalabilidad, ya que para modelos grandes el tiempo de ejecución sube considerablemente. Tras realizar un estudio de correlaciones, confirmamos nuestras sospechas, existe una alta correlación entre el tiempo de ejecución y el número de productos denotado por el modelo de características del programa

    Using MapReduce Streaming for Distributed Life Simulation on the Cloud

    Get PDF
    Distributed software simulations are indispensable in the study of large-scale life models but often require the use of technically complex lower-level distributed computing frameworks, such as MPI. We propose to overcome the complexity challenge by applying the emerging MapReduce (MR) model to distributed life simulations and by running such simulations on the cloud. Technically, we design optimized MR streaming algorithms for discrete and continuous versions of Conway’s life according to a general MR streaming pattern. We chose life because it is simple enough as a testbed for MR’s applicability to a-life simulations and general enough to make our results applicable to various lattice-based a-life models. We implement and empirically evaluate our algorithms’ performance on Amazon’s Elastic MR cloud. Our experiments demonstrate that a single MR optimization technique called strip partitioning can reduce the execution time of continuous life simulations by 64%. To the best of our knowledge, we are the first to propose and evaluate MR streaming algorithms for lattice-based simulations. Our algorithms can serve as prototypes in the development of novel MR simulation algorithms for large-scale lattice-based a-life models.https://digitalcommons.chapman.edu/scs_books/1014/thumbnail.jp
    corecore