Linhas de Pesquisa
Modularização de Software:
Esta linha de pesquisa foi grandemente motivada pela experiência do grupo em Desenvolvimento de Software Orientado a Aspectos. Trata-se de investigar quaisquer técnicas que visem a modularizar adequadamente um software de forma que ele se torne mais claro, legível, manutenível e coeso. Técnicas inclusive já conhecidas, são também formas de se modularizar adequadamente um sistema: Padrões, Componentes, Camadas, Pipes and Filters, etc.
Sistemas Adaptativos:
Essa linha de pesquisa envolve investigações acerca de i) arquitetura para sistemas adaptativos; ii) desenvolvimento de sistemas adaptativos; iii) análise de anomalias típicas em sistemas adaptativos, etc.
Modernização de Sistemas:
Essa linha estuda técnicas, métodos e ferramentas que facilitem a realização de modernização de sistemas legados existentes. Uma vertente forte dessa linha é o uso de modelos ao longo do processo. Essa linha é bastante similar aos processos de engenharia reversa e reengenharia.
Arquitetura de Software:
Linha que se aprofunda em todos os aspectos de arquitetura de software. Alguns dos principais itens são: smells arquiteturais, padrões arquiteturais, qualidade de arquiteturas,checagem de conformidade arquitetural, etc.
IA e Aprendizado de Máquina Aplicado na Engenharia de Software:
Essa linha tem como objetivo descobrir quais são as práticas tradicionais de engenharia de software que podem ser beneficiadas com o uso de IA e suas variações. Um exemplo é o emprego de Machine Learning para detecção de anomalias de código, outro exemplo é o uso de Deep Learning para recomendação de refatorações. Também estuda-se aqui o tema de explicabilidade.
Computação Quântica:
Linha de pequisa nova. O objetivo aqui averiguar como as técnicas tradicionais de engenharia de software podem ser adaptadas para o contexto de desenvolvimento de software quântico.
Model-Driven Engineering (MDE):
A Engenharia Orientada a Modelos (MDE) é uma abordagem que utiliza modelos abstratos de alto nível como artefatos principais no desenvolvimento de sistemas de software. A ideia central do MDE é aumentar a produtividade, melhorar a qualidade e reduzir os erros, automatizando grande parte do processo de desenvolvimento. Em vez de programar diretamente em código, os desenvolvedores criam e manipulam modelos que podem ser automaticamente transformados em código executável. Essa abordagem se aplica a diversas áreas, como sistemas embarcados, software corporativo e até mesmo sistemas para a nuvem, promovendo maior flexibilidade e manutenção simplificada.
Programação Generativa:
A Programação Generativa é uma técnica de desenvolvimento de software que busca automatizar a criação de programas ou trechos de código através de ferramentas e linguagens especializadas. A principal vantagem dessa abordagem é a possibilidade de gerar código de forma dinâmica, com base em um conjunto de regras ou parâmetros fornecidos pelo desenvolvedor. Isso permite que sistemas complexos sejam criados rapidamente, reduzindo a necessidade de codificação manual repetitiva e aumentando a eficiência. A programação generativa é particularmente útil em áreas como a criação de sistemas de grande escala, design de interfaces e desenvolvimento de software personalizado.
Desenvolvimento Web/Móvel:
O desenvolvimento Web e Móvel envolve a criação de aplicativos que operam em navegadores ou em dispositivos móveis. Essa linha de pesquisa aborda as melhores práticas, ferramentas e frameworks para criar experiências de usuário ricas e funcionais, seja para a web, seja para plataformas móveis como Android e iOS. O foco está em garantir que os aplicativos sejam responsivos, escaláveis e de alto desempenho, levando em consideração as particularidades de cada plataforma. Com o crescimento das tecnologias como Progressive Web Apps (PWAs) e frameworks híbridos e cross-platform, essa área tem sido cada vez mais relevante para a criação de soluções universais que atendem a diferentes dispositivos e sistemas operacionais.
Engenharia de Software para a Nuvem:
A Engenharia de Software para a Nuvem concentra-se no desenvolvimento de sistemas que são projetados para operar em ambientes de computação em nuvem, como a AWS, Microsoft Azure ou Google Cloud. Essa linha de pesquisa envolve a criação de arquiteturas distribuídas, escaláveis e resilientes, que aproveitam os recursos da nuvem, como o armazenamento elástico, computação sob demanda e serviços gerenciados. A ênfase está na automação, orquestração e gerenciamento de recursos, além da adaptação das práticas de desenvolvimento para suportar características específicas da nuvem, como a alta disponibilidade e a necessidade de monitoramento constante.
Engenharia de Software para Bancos de Dados Não Relacionais:
Com o crescimento de dados não estruturados e a diversidade de fontes de informação, os bancos de dados não relacionais (NoSQL) têm se tornado cada vez mais populares. A Engenharia de Software para Bancos de Dados Não Relacionais foca em como projetar e implementar sistemas que utilizam essas tecnologias, como MongoDB, Cassandra, e Redis. Diferente dos bancos de dados relacionais, que utilizam tabelas e relações fixas, os bancos NoSQL são mais flexíveis e adequados para lidar com grandes volumes de dados, baixa latência e escalabilidade horizontal. Essa linha de pesquisa explora as melhores práticas para modelar dados, otimizar consultas e garantir a integridade em sistemas distribuídos e de grande escala.
MLOps:
MLOps (Machine Learning Operations) é uma disciplina emergente que combina práticas de DevOps com o ciclo de vida do aprendizado de máquina. Seu objetivo é automatizar e otimizar a implantação, monitoramento e manutenção de modelos de machine learning em produção. A abordagem MLOps visa reduzir o tempo de entrega dos modelos e melhorar a colaboração entre as equipes de desenvolvimento, operações e análise de dados. Isso envolve práticas como controle de versão de modelos, testes contínuos, e a utilização de pipelines automatizados para garantir que os modelos sejam atualizados e mantidos de forma eficiente ao longo do tempo, especialmente em ambientes dinâmicos e de grande escala.