| Nome: | Descrição: | Tamanho: | Formato: | |
|---|---|---|---|---|
| 1.6 MB | Adobe PDF |
Orientador(es)
Resumo(s)
Nos últimos anos têm sido debatidos soluções relativas ao facto de o consumo de energia elétrica mundial estar a aumentar e com isso ser necessário produzir mais energia. Com a necessidade de se produzir mais energia, usinas hidroelétricas e usinas nucleares têm sido construídas e algumas reativadas. As usinas hidroelétricas não poluem o ar, mas causam um enorme impacto ambiental, enquanto que as usinas nucleares apesar de poderem ser uma solução para a produção de mais energia, estas produzem lixo radioativo, que é extremamente perigoso e que tem de ser armazenado em locais específicos, podendo causar grandes catástrofes, como por exemplo aconteceu em Chernobyl. Como solução à utilização de usinas, têm sido desenvolvidos novas opções com base em energias renováveis, como por exemplo, utilizando o vento para a produção de energia eólica, sendo esta considerada pura. O sol tem sido utilizado para produzir energia solar, outras soluções têm sido desenvolvidas, mas até ao momento, estas energias renováveis, não são
suficientemente eficientes para conseguirmos depender exclusivamente delas. Enquanto que se desenvolvem novas tecnologias para conseguir tornar o uso de energias renováveis mais eficientes que possivelmente no futuro podemos depender 100% delas e melhorar o ambiente do nosso planeta, é necessário tentar otimizar em termos energéticos quer os os produtos que já foram desenvolvidos anteriormente para estes serem mais eficientes em termos energéticos, quer os novos produtos que vão sendo introduzidos. Nos últimos anos, em diversas áreas de tecnologias, uma das grandes prioridades, tem sido sempre a eficiência energética. Sempre que sai um produto novo que já teve versões anteriores, como, por exemplo, um novo IPhone ou um novo Samsung, umas das prioridades para estas empresas é sempre que o novo smartphone seja mais eficiente em termos energéticos para que bateria deste novo telefone consiga aguentar mais tempo que a versão anterior. Nos últimos anos, a indústria de desenvolvimento de software verificou que a introdução de testes de software no início de um projeto tem contribuindo para um melhor desenvolvimento do mesmo. A realização de testes no início do projeto contribui para a identificação de problemas numa fase mais precoce que previne que estes se estendem ao longo do projeto. O alastrar dos problemas a uma fase mais posterior causaria bastantes mais problemas ainda a corrigir devido ao estado avançado do projeto e seria necessário
recuar para corrigir esses erros que possivelmente afetariam outras áreas do projeto. O desenvolvimento normal de testes de software costuma ser realizado através de duas opções, ou pessoas são escolhidas para desenvolver testes, ou automaticamente utilizando ferramentas que geram esses testes de forma automática. O desenvolvimento de testes de software manuais é tedioso, demorada e desafiadora porque estes exigem alguém com profundo conhecimento dos testes de software que terá de utilizar o seu tempo para produzir estes testes em vez de estar a desenvolver novas funcionalidades. Por outro lado, o desenvolvimento de testes de software automaticamente tem evoluindo bastante nos últimos anos, com a introdução de ferramentas que dispõem de novas técnicas que permitem gerar esses testes automaticamente em pouco tempo. Algumas ferramentas como, por exemplo, RestTestGen, RESTler, EvoMaster, permitem gerar testes de forma automática, utilizando algoritmos evolucionários desenvolvidos com intuito de gerar conjuntos de testes com uns certos objetivos. Estas ferramentas permitem criar uma quantidade enorme de testes de software com uma velocidade que nenhum humano conseguiria criar, o que não só permite testar melhor o projeto/aplicação que seja necessário testar e, em simultâneo, liberta o tempo à pessoa que não necessita de utilizar o seu tempo a criar este tipo de testes e pode continuar a desenvolver novas features para o projeto/aplicação. Os testes de software podem ser definidos por diversos tipos de testes de software, os
testes unitários, sendo o tipo de testes mais simples e menos complicados que permitem testar individualmente uma só feature de forma independente e rápida. De seguida temos os testes de integração que são um tipo de testes mais complexo que os unitários que permitem testar a integração de várias features de uma aplicação/projeto e a interligação dessas features entre si. Por fim temos os testes de sistema, sendo estes, o tipo de testes mais complexo, e que por padrão, demoram muito mais para serem gerados do que outros tipos de testes devido à necessidade de criar uma configuração no software que está a ser testado. As aplicações que são testadas muitas das vezes são muito grandes, complexas, com recursos enormes, causando um tempo ainda maior para ser testadas, o que leva aos testes a demorarem muito tempo a ser gerados, o que faz com que o consumo de energia necessário para gerar estes testes seja muito superior aos outros tipos de teste. Esta tese visa a tentar conciliar dois problemas numa só solução, primeiramente,
vivemos numa altura em que o consumo de energia é elevado e a própria energia é cara, então tentar otimizar o consumo de energia em qualquer software é sempre benéfico. Por outro lado, a criação de testes automaticamente tem diversas vantagens, como foi visto anteriormente, permitindo um desenvolvimento mais rápido do software que futuramente poderá ajudar a desenvolver novas tecnologias mais eficientes em termos energéticos que possam substituir as menos eficientes. Com a utilização de uma ferramenta que gera testes automaticamente, chamada EvoMaster, estes testes são otimizados para serem energeticamente mais eficientes por design, tentando otimizar o consumo de energia da geração desses testes, sem prejudicar a
eficácia e a eficiência dos mesmos, ajudando assim a combater o grave problema apresentado anteriormente, o elevado consumo de energia. A geração de testes na ferramenta EvoMaster é baseada em alguns tipos de critérios, primeiramente, e como critério mais importante, temos um conjunto de métricas relacionadas com a coverage, que mede a quantidade de código verificado por um conjunto de testes. Esta métrica é uma das mais importantes em qualquer tipo de testes de software porque permite identificar que quantidade de código está a ser verificado. Se existirem dois conjuntos de testes com o critério principal igual é necessário através de critérios secundários diferenciar qual dos conjuntos de testes é melhor segundo um determinado critério secundário. Como o critério secundário base do EvoMaster verifica o tamanho do conjunto de testes gerados, então se existirem dois conjuntos de testes que verifiquem a mesma quantidade de código, mas um dos conjuntos de testes for menor, em termos de quantidade de código para verificar o mesmo pedaço de código, o EvoMaster vai escolher o conjunto de testes menor e descartar o conjunto maior. Para integrar a eficiência energética no conjunto de testes gerados pelo EvoMaster, a nossa solução foi incluir um novo critério secundário que permita definir qual o conjunto de testes que desperdiça menos energia. Este novo critério irá
substituir o critério secundário base do EvoMaster, que verifica o tamanho do conjunto de testes gerados, com a finalidade de ser possível criar um conjunto de testes que tenha a mesma eficácia e a eficiência que o conjunto de testes criado pela ferramenta, mas que consuma menos energia. Os resultados do nosso estudo mostram que com a nossa abordagem, utilização do novo critério secundário, que têm em conta o consumo energético de um conjunto de testes teve, em média, uma melhoria relativa de 29.05% no consumo de energia em comparação com a configuração Vanilla, com o critério secundário base, o tamanho do conjunto de testes, sem afetar a eficácia dos testes gerados.
In recent years, the software development industry is becoming more favored for two things. The first and more critical one is energy efficiency due to the global increase in energy consumption, so the industry is trying to help reduce the consumption by developing more energy-efficient software. The second is software testing due to the importance of the software working correctly and having as few bugs as possible. Software testing is used in various activities throughout a project’s development, aiming to find and reduce problems in the different phases of a project’s development cycle as quickly as possible so that these discovered errors do not impact the project in the future. Software tests can be created by two options, manually or automatically, using tools for the automatic generation of tests. The creation of manual tests is tedious, timeconsuming, and challenging because they require someone with deep knowledge of the software under test. Instead, recently some tools with new techniques have been developed to generate tests automatically, for example, EvoMaster, an open-source tool that automatically generates system-level test cases for REST APIs. Exist different types of software tests, unit tests, integration tests and system tests. System tests, by default, take much longer to be created than other software tests due to the need to create a setup on software under test to be tested. Some features are enormous, causing a longer time to be tested. Everything together causes a significant amount of time to run them down, so the energy used is also massively compared with other types of software tests. This thesis aims to optimize the tests automatically generated by the EvoMaster to be energy efficient by design, an archive that we include on EvoMaster as a new criterion to help define the best test suite which wastes less energy. Our study results show that our Energy-based Optimization configuration has, on average, a relative improvement of 29.05% compared with vanilla configuration without affecting the effectiveness of the generated tests.
In recent years, the software development industry is becoming more favored for two things. The first and more critical one is energy efficiency due to the global increase in energy consumption, so the industry is trying to help reduce the consumption by developing more energy-efficient software. The second is software testing due to the importance of the software working correctly and having as few bugs as possible. Software testing is used in various activities throughout a project’s development, aiming to find and reduce problems in the different phases of a project’s development cycle as quickly as possible so that these discovered errors do not impact the project in the future. Software tests can be created by two options, manually or automatically, using tools for the automatic generation of tests. The creation of manual tests is tedious, timeconsuming, and challenging because they require someone with deep knowledge of the software under test. Instead, recently some tools with new techniques have been developed to generate tests automatically, for example, EvoMaster, an open-source tool that automatically generates system-level test cases for REST APIs. Exist different types of software tests, unit tests, integration tests and system tests. System tests, by default, take much longer to be created than other software tests due to the need to create a setup on software under test to be tested. Some features are enormous, causing a longer time to be tested. Everything together causes a significant amount of time to run them down, so the energy used is also massively compared with other types of software tests. This thesis aims to optimize the tests automatically generated by the EvoMaster to be energy efficient by design, an archive that we include on EvoMaster as a new criterion to help define the best test suite which wastes less energy. Our study results show that our Energy-based Optimization configuration has, on average, a relative improvement of 29.05% compared with vanilla configuration without affecting the effectiveness of the generated tests.
Descrição
Tese de Mestrado, Engenharia Informática, 2022, Universidade de Lisboa, Faculdade de Ciências
Palavras-chave
Consumo de Energia Ajudar Ambiente Software Testing Critério Secundário EvoMaster Teses de mestrado - 2023
