Research Themes

Research themes 2014 for students (in Portuguese only)


Teste baseado em modelos e técnicas de análise de software
  • Nível: Mestrado.
  • Orientação: Wilkerson Andrade e Adalberto Cajueiro.
  • Breve Descrição: Teste baseado em modelo é uma estratégia que lida com ferramentas e técnicas que tornam possível aplicar testes em artefatos mais abstratos antes da implementação real. Devido ao maior nível de abstração, as técnicas de geração de dados de teste precisam utilizar técnicas recentes como SAT solving, SMT solving, execução simbólica, abstração de dados, etc. O objetivo desta linha é investigar como essas técnicas podem ser utilizadas para permitir a execução automática de casos de teste gerados a partir de modelos abstratos. O estudo permitirá o conhecimento de técnicas recentes utilizadas na área de Ciência da Computação e uma aplicabilidade prática que tem sido muito valorizada pela comunidade de Engenharia de Software.


Teoria e Prática em Pensamento Computacional
  • Nível: Mestrado/Doutorado.
  • Orientação: Dalton Serey, Lívia Sampaio e Wilkerson Andrade.
  • Breve Descrição: Tem sido muito discutido na literatura sobre “pensamento computacional”. A ideia geral é explorar a computação como ciência transversal a outras ciências e não somente como ferramenta. Por exemplo, existem algumas iniciativas em programação de computadores onde é muito estimulado o aprendizado nesse contexto, em diferentes áreas e idades. Essa linha de pesquisa tem o objetivo de investigar, propor e aplicar mecanismos que promovam o pensamento computacional por meio do aprendizado em desenvolvimento de sistemas usando tecnologias distribuídas, com aplicações na cidade de Campina Grande. 


Modelos e Arquiteturas de Teste para Computação em Nuvem
  • Nível: Mestrado/Doutorado.
  • Orientação: Patrícia Machado e Wilkerson Andrade.
  • Breve Descrição: Computação em nuvem (cloud computing), baseado no princípio da computação em grade, é hoje uma das áreas mais promissoras para a computação distribuída em larga escala. Devido a complexidade de compartilhar recursos em uma grade, além dos desafios normalmente presentes em sistemas distribuídos convencionais, a computação em nuvem gera grandes desafios para o teste de sistemas. Em particular, a necessidade de uma infraestrutura adequada e confiável para a execução automática de teste tanto em ambientes de desenvolvimento quanto em monitoração em ambientes reais de execução. Tal infraestrutura precisa ser confiável a fim de garantir a ausência de falsos vereditos bem como viabilizar o processo de teste.


Geração Automática de Casos de Teste para Sistemas Críticos Embarcados
  • Nível: Mestrado/Doutorado.
  • Orientação: Wilkerson Andrade e Patrícia Machado.
  • Breve Descrição: Desenvolvimento de software crítico com alto nível de confiança (dependability) é ainda um grande desafio. Em particular, sistemas embarcados possuem limitações severas de recursos e usualmente operam sob restrições de tempo, onde comportamentos indesejáveis podem gerar falhas catastróficas. Durante a fase inicial do desenvolvimento muitos modelos são gerados, principalmente com a utilização de ferramentas de simulação como o Simulink, UML, Time Automata, etc. Este projeto visa tornar a etapa de validação mais eficiente através da investigação de soluções para a geração automática de testes a partir de modelos, considerando plataformas de execução tais como Java for Real-Time e ambientes embarcados baseados em C/C++. 


Teste de Aplicações Paralelas em Arquiteturas Multicore
  • Nível: Mestrado/Doutorado.
  • Orientação: Wilkerson Andrade e Patrícia Machado.
  • Breve Descrição: Com o advento de arquiteturas multicore, desenvolvimento de aplicações paralelas passou a receber um interesse maior na comunidade de desenvolvimento de software dado o potencial de se poder explorar de forma direta o paralelismo intríseco destas aplicações. Neste sentido, linguagens de programação modernas tais como Java 7, Scala, etc, apresentam diversos recursos para a implementação destas aplicações. Devido a complexidade inerente destas aplicações, as atividades de teste se tornam cada vez mais desafiadoras, visto que a composições de processos/threads pode produzir comportamentos emergentes não esperados. Neste sentido, o objetivo deste projeto é desenvolver soluções/padrões para a geração automática de casos de teste de integração a partir da composição de aplicações paralelas.


Modelos Não-Determinísticos para a Geração de Casos de Teste em Sistemas de Tempo Real
  • Nível: Doutorado.
  • Orientação: Wilkerson Andrade e Patrícia Machado.
  • Breve Descrição: Sistemas computacionais com requisitos temporais são conhecidos como Sistemas de Tempo Real. O correto comportamento desse tipo de sistema não depende somente da integridade dos resultados obtidos, mas depende também do momento em que são produzidos. Nos últimos anos, várias teorias e técnicas de geração de testes têm sido desenvolvidas para testar sistemas de tempo real. A grande maioria das técnicas é baseada em modelos que não consideram explicitamente os dados do sistema sendo testado, mas, na prática, casos de teste podem ser programas reais com parâmetros e variáveis. Nesse sentido, modelos mais poderosos foram propostos, em que parâmetros e variáveis são modelados explicitamente e tratados de maneira simbólica. No entanto, usualmente apenas modelos determinísticos são considerados. O objetivo deste projeto é investigar propriedades e limitações de modelos não-determinísticos neste contexto e propor soluções para a geração automática de casos de teste. 


Teste de Software no Contexto de Manutenção e Evolução
  • Nível: Mestrado.
  • Orientação: Wilkerson Andrade e Dalton Serey.
  • Breve Descrição: Mudanças em software são inevitáveis, seja pelo acréscimo de novas funcionalidades ou pela correção de defeitos. Nesse contexto, teste de software tem sido muito utilizado na prática como forma de validação de mudanças, contudo, o custo da manutenção de conjuntos de testes ainda é muito alto. Essa linha de pesquisa visa desenvolver técnicas e ferramentas para auxiliar o processo de teste no contexto de evolução de software.