Enhancing Embedded Software in the Internet of Things Domain: Exploring JavaScript on Resource-Constrained Devices
Resumen
O desenvolvimento de software embarcado para a Internet das Coisas (IoT) tem se concentrado predominantemente em linguagens de programação compi ladas, como C e C++, sendo C a mais utilizada. No entanto, a linguagem C tem desvantagens, incluindo falta de orientação a objetos, ausência de tratamento de exceções, sem mecanismo automatizado para alocal e liberar memória (garbage colletor), gerenciamento manual de memória e outros aspectos que podem tornar o desenvolvimento de software desafiador, considerando o aumento da complexidade dos requisitos de software embarcado. Em contrapartida, linguagens interpretadas como Python e JavaScript (JS) surgem como alternativas para melhorar a qualidade do software e o nível de abstração das aplicações. Embora linguagens interpretadas possam trazer vantagens para software embarcado, como flexibilidade e facilidade de uso, seu modelo de execução (interpretação) pode demandar maior consumo de recursos, restringindo seu uso em dispositivos com recursos limitados. Este estudo investiga métodos para melhorar o desempenho do software embarcado para reduzir o consumo de recursos no contexto IoT, com foco em dispositivos com recursos limitados. Em particular, escolhemos o JavaScript como alternativa à linguagem C e realizamos investigações para melhorar seu desempenho. Para fazer isso, começamos com uma revisão sistemática da literatura para entender a relação entre JS e IoT. Em seguida, analisamos a linguagem JavaScript para entender seu impacto em dispositivos restritos e realizamos experimentos usando benchmarks e aplica tivos reais. Como resultado, produzimos um conjunto de diretrizes para melhorar a qualidade do código, uma ferramenta (JSGuide) para detecção de code smells e desenvolvemos uma estrutura baseada em funções assíncronas (JSEVAsync) para ajudar os desenvolvedores a criar melhores soluções embarcadas. Nossas descobertas mostram que o uso de uma linguagem interpretada no desenvolvimento de software embarcado é viável e melhora as métricas de tempo de design, como manutenibilidade, legibilidade e reutilização de código.