Candidato:
João Pedro Matos Teixeira Dias
Data, Hora e Local
1 de abril, às 09:00, por videoconferência com transmissão em direto em: https://www.youtube.com/channel/UCvsg2ymeaHLRLbsGt67JmKw
Presidente do Júri
Doutor Rui Filipe Lima Maranhão de Abreu, Professor Catedrático da Faculdade de Engenharia da Universidade do Porto
Vogais
Doutor Dariusz Mrozek, Professor Associado do Department of Applied Informatics da Silesian University of Technology, Poland;
Doutor Pedro Nicolau Faria da Fonseca, Professor Auxiliar do Departamento de Eletrónica, Telecomunicações e Informática da Universidade de Aveiro;
Doutor André Monteiro de Oliveira Restivo, Professor Auxiliar do Departamento de Engenharia Informática da Faculdade de Engenharia da Universidade do Porto;
Doutor Hugo José Sereno Lopes Ferreira, Professor Auxiliar do Departamento de Engenharia Informática da Faculdade de Engenharia da Universidade do Porto (Orientador).
Resumo:
A ubiquidade da computação, conhecida como Internet-of-Things (IoT), tem moldado a maneira como as pessoas interagem com o mundo físico. No entanto, a escala, distribuição lógica e geográfica, densidade, heterogeneidade, interdependência, e os requisitos de segurança, fazem com que estes sistemas sejam complexos, criando vários desafios operacionais e de desenvolvimento. Embora exista um consenso alargado de que as práticas de engenharia de software amplamente utilizadas são inadequadas para o desenvolvimento de IoT, estas continuam a ser as soluções mais usadas. Este aspeto tem vindo a comprometer a confiabilidade destes sistemas, centralizando a maior parte da computação em infraestruturas cloud. Adicionalmente, a larga-escala destes sistemas em termos de dispositivos e aplicações supera os recursos técnicos existentes para a sua gestão e operação, sendo crucial torná-los o mais self-managed possível. No entanto, tem de ser dada a capacidade aos operadores do sistema (incluindo utilizadores finais) de configurá-los e entendê-los — principalmente usando soluções que não requerem alto conhecimento técnico, viz. soluções de desenvolvimento de low-code — incluindo a capacidade de configuração de medidas de resiliência em caso de falhas.
O foco principal desta dissertação é investigar como melhorar o status quo da confiabilidade em sistemas IoT. Este é um esforço multifacetado sendo necessário (1) perceber quais são as melhores práticas para desenvolver IoT de forma confiável e qual é sua solidez científica, (2) perceber se as soluções atuais fornecem mecanismos fundamentais que permitem desenhar e construir sistemas confiáveis, e, se não, que contribuições são necessárias para superar as limitações existentes e, por último, (3) dado que esses sistemas são operados por humanos com conhecimento técnico limitado, é necessário que os seus utilizadores sejam capazes de usar e configurar os sistemas sem comprometer o correto funcionamento dos mesmos. Enquanto nos propomos a enfrentar os desafios acima mencionados, afirmamos que:
É possível enriquecer os ambientes de desenvolvimento de IoT focados em utilizadores finais de tal forma que os sistemas resultantes têm um maior grau de confiabilidade, reduzindo o impacto no know-how destes utilizadores.
Para se melhor entender o que (e como) os utilizadores finais desejam automatizar os seus sistemas de IoT foi realizado um estudo para reunir cenários de automação, como pesquisa preliminar. De seguida, uma extensa pesquisa bibliográfica foi realizada de forma a extrair um conjunto de padrões que podem ser usados para melhorar os sistemas IoT do ponto de vista da sua confiabilidade. Estes padrões foram documentados em formconfiabilidadea sucinta, expondo problemas particulares dentro de um contexto específico. As relações de um subconjunto desses padrões foram estudadas, resultando numa linguagem de padrão de self-healing, endereçando as preocupações de confiabilidade em tempo de execução de forma autonómica.
A adoção destes padrões depende de aspetos arquiteturais e funcionais dos sistemas. Um dos aspetos limitadores é que a maioria dos sistemas e soluções atuais não fornece nenhum mecanismo para reajustar o comportamento do sistema durante o tempo de execução. Dado isto, os paradigmas de computação fog e edge foram explorados de forma a aproveitar os recursos computacionais em todas as camadas do sistema, com o objetivo de tornar os sistemas mais confiáveis e mais escaláveis. Com estas contribuições de base, exploramos e afirmamos a viabilidade de usar funções serverless no contexto de IoT, otimizando a escolha de contextos de execução de acordo com preferências, restrições e latências.
Para melhor entender como é que estes paradigmas podem ser potencializados para soluções amplamente utilizadas, selecionamos Node-RED como caso de estudo, dado ser um dos sistemas de desenvolvimento open-source mais utilizados. Este fornece uma interface de programação visual que potencia que utilizadores com diferentes níveis de conhecimento técnico o possam usar. E, tal como outras soluções, o Node-RED não fornece mecanismos para orquestrar tarefas entre dispositivos nem lidar com falhas de partes do sistema dinamicamente, limitando a confiabilidade dos sistemas construídos.
Começamos por avaliar empiricamente, tanto em configurações virtuais como físicas, a viabilidade de usar o Node-RED como um orquestrador, onde as tarefas computacionais são alocadas para os recursos disponíveis e as falhas de dispositivos são mitigadas com re-orquestrações. Também foi desenvolvido um conjunto de extensões para Node-RED que permitem enriquecer os programas existentes (flows) com mecanismos de self-healing — permitindo a deteção de diferentes erros durante o tempo de execução e reajustando o comportamento do sistema para este manter a sua operação dentro de níveis aceitáveis de Qualidade de Serviço.
Dado que os utilizadores de IoT têm diferentes níveis de conhecimento técnico, tentamos melhorar a interação com os ambientes de desenvolvimento destes sistemas para que os utilizadores pudessem melhor entender quais são as automações configuradas (viz. inspeção), como estas se estão a comportar (viz. observabilidade e feedback), e aumentar a sua capacidade de perceber qual foi a possível causa por trás de certos eventos (viz. causalidade). No primeiro estudo, começamos por estender as notações visuais e as funcionalidades do Node-RED para que pudéssemos melhorar o processo de desenvolvimento. De seguida avaliamos empiricamente o desempenho da solução desenvolvida em relação a uma versão do Node-RED sem modificações, observando melhorias estatisticamente significativas na capacidade dos utilizadores de evoluir sistemas de IoT existentes. Por fim, exploramos o uso de assistentes de voz como maneira alternativa de configurar, compreender e interagir com ambientes IoT, focando-nos particularmente na capacidade de um utilizador perceber a causa por trás de alguns eventos.
Verificamos a viabilidade do uso de sistemas de voz como forma alternativa de desenvolvimento de sistemas IoT, cobrindo todas as diferentes possibilidades de automação que o Node-RED suporta, com uma extensão considerável das possibilidades de interação devido ao suporte de diálogos multimensagem. Passamos a validar a viabilidade dos utilizadores usarem o assistente de voz para realizar diferentes tarefas, verificando que todos os utilizadores foram capazes de terminar as tarefas. Enquanto algumas frases válidas foram incorretamente reconhecidas pelo mecanismo de reconhecimento de voz, o que forçou alguns participantes a repetir a sua intenção, os participantes expressaram uma preferência por interfaces de voz preterindo interfaces visuais em termos de perceção subjetiva.
Essas contribuições materializam-se num conjunto básico de blocos de construção que, em conjunto, podem ser usados para melhorar a confiabilidade dos sistemas de IoT, ao mesmo tempo que potencializam a capacidade do utilizador de os configurar, usar e desenvolver sistemas deste tipo. As contrapartes experimentais destas contribuições fornecem evidências empíricas que sustentam a plausibilidade da hipótese.