um podcast de divulgação científica
[Host: Adolfo Neto (UTFPR)]{.mark}
[Co-host: Maria Claudia Emer (UTFPR)]{.mark}
Equipe: Danilo Ribeiro (Zup), Leonardo Fernandes (IFAL), Fabio Petrillo (ETS Montreal), Myrian Rodrigues da Silva (USES/UFAM), Italo Santos (Northern Arizona University, USA), Diego Andrade (UFC)
[https://fronteirases.github.io/]{.underline}
+———————————————————————–+
| Título: Sistemas Altamente Configuráveis, com Márcio Ribeiro (UFAL) |
| |
| Resumo para Anchor e YouTube: |
| |
| Márcio Ribeiro é professor Associado do Instituto de Computação da |
| Universidade Federal de Alagoas (UFAL). |
| |
| [Roteiro deste episódio: |
| [https://bit.ly/RoteiroMar |
| cioRibeiro]{.underline}]{.mark} |
| |
| Página: |
| [https://sites.google.com/a/ic.ufal.br |
| /marcio/]{.underline} |
| |
| Lattes: |
| [http://lattes.cnpq.br/9 |
| 300936571715992]{.underline} |
| (Bolsista de Produtividade em Pesquisa do CNPq - Nível 1D) |
| |
| Orcid |
| [https://orcid.org/000 |
| 0-0002-4293-4261]{.underline} |
| |
| Scholar: |
| [http |
| s://scholar.google.com/citations?hl=pt-BR&user=-eYOaGwAAAAJ]{.underli |
| ne} |
| |
| [Três recados:]{.mark} |
| |
| - [Márcio Ribeiro não é mais]{.mark} coordenador da Comissão |
| > Especial de Engenharia de Software (CEES) |
| > [http://comissoes.sbc.org.br/ce-es/comite.php?lang=pt-br]{ |
| .underline} |
| |
| {=html} |
| <!-- --> |
|
|
| - [Playlist do CBSOFT 2022 |
| > [https://www.youtube.co |
| m/playlist?list=PLq1I6GEIwH6cHGPdQr3wsfufg-JGlbKTp]{.underline} |
| > e Painel "Research in Software Engineering at Academia, |
| > Industry, Brazil and/or abroad" com Joana Santos (que |
| > entrevistamos no episódio 22), Márcio Ribeiro e Gustavo Pinto |
| > (cofundador e nosso co-host nos episódios 1 a 12) |
| > [h |
| ttps://www.youtube.com/watch?v=tFLSqGSEAjM&list=PLq1I6GEIwH6cHGPdQr3w |
| sfufg-JGlbKTp&index=10]{.underline}]{.mark} |
| |
| - [Formulário de interesse em receber e-mail sobre o Fronteiras da |
| > Engenharia de Software |
| > [https://forms.gle/m22bX1r |
| roRXZF2Lk7]{.underline}]{.mark} |
| |
| Ganhou prêmios internacionais (como o ACM John Vlissides Award) e |
| nacionais (como o Concurso de Teses de Dissertações (CTD) do |
| Congresso Brasileiro da Sociedade Brasileira de Computação (CSBC |
| 2013)). |
| |
| [https://www.sigplan.o |
| rg/Awards/Other/]{.underline} |
| |
| Já publicou diversos artigos em periódicos e conferências top-ranked |
| do mundo na área de Engenharia de Software, como TSE, TOSEM, EMSE, |
| JSS, IST, ICSE e FSE. |
| |
| Em 2014, foi um dos Coordenadores Gerais do maior congresso de |
| software do país organizado pela Sociedade Brasileira de Computação |
| (SBC), i.e., o Congresso Brasileiro de Software (CBSoft 2014), |
| realizado em Maceió-AL. |
| |
| Em 2024, estará na organização do ESEC/FSE. |
| |
| Idealizador, criador e desenvolvedor de um aplicativo pioneiro no |
| Brasil para cadastro, identificação e rastreamento de aglomerações de |
| pessoas. O aplicativo foi utilizado por pessoas de todo o Brasil |
| (exceto do estado de Rondônia) bem como por autoridades, que |
| afirmaram que o mesmo foi útil para ajudar a polícia a identificar |
| aglomerações e enviar contingente policial para dispersá-las, |
| ajudando, dessa forma, no combate ao COVID-19. O projeto ganhou |
| grande notoriedade na imprensa local, regional e nacional (TV e |
| internet). |
+=======================================================================+
| QUESTÕES: |
| |
| FOTO |
| |
| {width=”3.1407742782152233in” |
| height=”2.7031255468066493in”} |
+———————————————————————–+
| |
+———————————————————————–+
[[ADOLFO]]{.mark} Olá, eu sou Adolfo Neto, professor da UTFPR Curitiba.
Hoje temos aqui, como co-host do Fronteiras, Maria Claudia Emer, também professora da UTFPR Curitiba. Tudo bem, Maria Claudia?
[[MARIA]]{.mark} (responde e dá oi aos ouvintes)
[[ADOLFO]]{.mark} Hoje iremos conversar com Márcio Ribeiro, professor da Universidade Federal de Alagoas. O tema do episódio de hoje será “Sistemas Altamente Configuráveis''. Tudo bem, Márcio?
Você pode se apresentar para as pessoas que nos escutam?
Márcio Ribeiro
Maceió-AL
vocês, que sou ouvinte do Podcast e que é uma honra poder contribuir!
a orientação dos professores Paulo Borba (UFPE) e Claus Brabrand (IT University of Copenhagen)
mais especificamente Estruturas de Dados e disciplinas de Engenharia de Software, como testes de software
CBSoft 2014
Atual coordenador da CEES
[[MARIA]]{.mark} Márcio, você pode começar explicando pra gente o que são sistemas altamente configuráveis?
configurações (conhecidas por features) para adaptar propriedades funcionais e não funcionais às necessidades de um usuário ou conjunto de usuários.
Em outras palavras…
configurações
E aí, podemos…
… habilitar ou desabilitar essas features
Atendendo necessidades específicas de usuários
usuário quer várias outras features habilitadas (podendo, inclusive, pagar mais caro por isso).
configurações (features): A, B e C, é possível gerar 8 diferentes sistemas: {}, {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}.
Temos 8 potenciais configurações
Exemplos:
Nível de funcionalidades: Office
Nível de hardware: Impressoras
Nível de plataforma e sistema operacional: 32 bits versus 64
bits
Possuem suporte ferramental para lidar com as features…
texto), opcionais (corretor em determinada língua), alternativas (sistema do posto só funciona com uma impressora por vez; escolhendo a impressora A implica que não se pode escolher a impressora B etc)
conjunto de features etc
antigos, na verdade
[[ADOLFO]]{.mark} E como são implementados estes sistemas?
Existem muitas técnicas
Padrões de projetos, arquivos de configuração, leitura de bibliotecas de forma dinâmica, pré-processadores etc
Técnica bastante utilizada: pré-processadores
O que são esses pré-processadores?
Marcação do código com anotações
int x = 0; para o Windows
int x = 1; para o Linux
#ifdef WIN int x = 0;
#ifdef LINUX int x = 1;
Antes de compilar, há um pré-processamento
Se for WIN, o código será compilado com x = 0; se for LINUX, o
código será compilado com x = 1.
usar. Fácil e rápido! É um comando parecido com um if, só que em vez de ser exercitado em tempo de execução, é em tempo de pré-compilação
exemplo do kernel do Linux), servidores web como o Apache, editores de texto (como o vim), SGBDs como o postgresql etc.
[[MARIA]]{.mark} Como você falou acima, os #ifdefs representam uma técnica muito simples para implementar variabilidade em sistemas configuráveis. Mas há desvantagens? Se sim, poderia comentar um pouco sobre isso?
Usos isolados, OK
legibilidade e entendimento
{width=”4.8236843832020995in”
height=”3.6718755468066493in”}
"Vim is a highly configurable text editor built to make creating and changing any kind of text very efficient. It is included as "vi" with most UNIX systems and with Apple OS X."
Manutenção bem difícil para este caso
Para piorar: pessoas usam de forma não disciplinada
Explicar o que é isso em um exemplo
{width=”1.9166666666666667in” height=”2.40625in”}
Em suma:
Heaven:
Simples
Sem overhead
Resolve problemas de portabilidade
Hell:
Susceptibilidade a erros
Problemas de entendimento e legibilidade
Problemas de manutenção
{width=”4.723958880139983in”
height=”1.3626804461942257in”}
[[ADOLFO]]{.mark} A indústria e o mundo open source estão cientes do que são anotações não disciplinadas?
Open source:
Falar que com outra terminologia, aparentemente sim
Falar do manual do Linux:
{width=”6.5in” height=”0.5416666666666666in”}
TODO list: Refactor preprocessor conditionals to compile entire statements.”
<!-- -->
Academia:
Artigo do AOSD 2011, Jorg Liebig, Christian Kästner e Sven Apel
Anotações disciplinadas e não disciplinadas
Vários exemplos
Estudo de 40 sistemas configuráveis
84% disciplinadas e 16% não disciplinadas
mais antigos: Artigo do ASE 2003, Alejandra Garrido e Ralph Johnson…
Anotações completas e incompletas
A definição parece que possui a mesma essência
preliminares…
número de anotações disciplinadas
Libssh aumento de 5%
Fazendo uma média geral… aumento para 90%
[[MARIA]]{.mark} Como é feita a manutenção de sistemas configuráveis?
não está mais dando manutenção em apenas um sistema para apenas um cliente; mas sim para um conjunto (que pode ser enorme) de sistemas para vários clientes diferentes com suas especificidades e peculiaridades
(sintático ou semântico) só poderá ser identificado caso a configuração exata em que o problema existe seja exercitada (compilada, por exemplo)
proibidas)
2\^33 = 8 bilhões
2\^(mais de 12.000) = ?
Em um sistema grande, inviável…
(clientes)
falou:
{width=”4.994792213473316in”
height=”1.056590113735783in”}
mas não era!
{width=”6.5in” height=”1.6111111111111112in”}
[[ADOLFO]]{.mark} Parece que as anotações não disciplinadas que você comentou têm relação com code smells. O que você acha sobre isso? Já foram sugeridas refatorações para a remoção desses smells?
Sim, de acordo
potencialmente, podem levar a problemas futuros, como introdução de bugs
definição. Elas não estão cheirando bem e, devido a problemas de legibilidade e entendimento que elas podem trazer, os desenvolvedores podem introduzir bugs
Para tentar minimizar esses problemas, tem-se as refatorações.
a refatoração gera um lado direito com uma anotação disciplinada
Return
Chamadas de funções
While, if…
Arrays, enums
[CORTE 34:50]{.mark}
[[MARIA]]{.mark} Mas como avaliar essas refatorações? Como saber se elas realmente trouxeram ou podem trazer ganhos?
Estudos controlados diversos
Estudos controlados com medição de tempo e número de erros cometidos
pelos participantes
{width=”3.72338801399825in”
height=”2.29548665791776in”}
Survey com desenvolvedores
Lado esquerdo
Lado direito
A gente sempre fez de forma aleatória os lados
{width=”4.608906386701662in”
height=”2.889339457567804in”}
Eye tracking
Mapa de calor
AOI
{width=”6.5in” height=”1.8611111111111112in”}
{width=”4.119792213473316in”
height=”2.9506616360454943in”}
[(EXCLUÍDOS PARA NÃO FICAR MUITO LONGO)]{.mark}
[[ADOLFO]]{.mark} Quais são os pontos positivos e negativos em trabalhar com Sistemas Altamente Configuráveis, o que você sugere que precisa ser mais investigado na área?
Certamente, um ponto positivo é a grande variedade de produtos que você pode oferecer. Com isso, você pode atingir vários clientes, usuários etc. Além disso, seu produto de software pode atingir diversos ambientes (sistemas operacionais, por exemplo).
Acho que seria importante investigar e trazer mais suporte ferramental. Existe um conjunto de ferramentas juntas em um só ambiente de desenvolvimento, que é a FeatureIDE, inclusive com contribuições nossas da UFAL. Seria importante tentar difundir mais essa e outras ferramentas, criar e avaliar novas.
[[MARIA]]{.mark} Que dificuldades você enfrenta ao conduzir estudos experimentais em suas pesquisas e como você resolve?
Primeiramente, eu diria que é recrutar as pessoas corretas para o estudo. Mas um outro grande desafio é escolher as tarefas corretas de forma que elas, de fato, avaliem as hipóteses do seu estudo.
Isso me lembra um keynote do Professor Fernando Castor da UFPE no workshop VEM do CBSoft. Naquele workshop, Castor mencionou importantes pontos nesse sentido no contexto de entendimento de programas. Qual é a melhor tarefa para, de fato, avaliar seu estudo?
Dizer a saída de um determinado código?
Adicionar uma linha faltando em um código ou algoritmo qualquer?
Dizer o valor quer será impresso de uma determinada variável?
Parece-me que definir bem isso é um grande desafio!
[[ADOLFO]]{.mark} Você e coautores tiveram um artigo publicado na IEEE Transactions on Software Engineering, em 2022, chamado "Refatorando Maus Cheiros de Teste com JUnit 5: Por que os desenvolvedores devem se manter atualizados". ([“Refactoring Test Smells With JUnit 5: Why Should Developers Keep Up-to-Date”]{.underline}). Você pode falar um pouco sobre este artigo?
{width=”4.824663167104112in”
height=”1.9870811461067366in”}
utilizando refatorações já propostas. Por exemplo, para remover código de teste duplicado, aplicar um extract method
conjunto de anotações em que é super rápido e prático remover os smells
\@ParametizedTest
\@EnableIf
\@RepeatedTest
do JUnit 5
com as nossas refatorações
aceitou as nossas propostas
[[MARIA]]{.mark} Você teve um artigo aceito, em colaboração com outras pessoas como o nosso colega de Fronteiras Leo Fernandes, no (Simpósio Brasileiro de Engenharia de Software SBES 2022):
“Ponha suas mãos no ar! Reduzindo o esforço manual nos testes de mutação”.
Você pode falar um pouco para nós sobre este artigo?
Artigo que está no contexto de testes de mutação
indecidível
não
Suscetível a erros e demanda muito tempo
executamos no programa original e no mutante
matar o mutante, quer dizer que o mutante não é equivalente
como equivalentes ou não
disse que era equivalente ou não equivalente, realmente era.
equivalência e foi 25 vezes mais rápida para indicar não equivalência
[[ADOLFO]]{.mark} Você é atualmente coordenador da Comissão Especial de Engenharia de Software (CEES) da Sociedade Brasileira de Computação (SBC). Quais são os desafios atuais como coordenador da CEES?
memórias das pessoas
Criamos:
Regimento da CEES
Alguns manuais de organização de eventos (CBSoft, SBES etc)
Drive para agrupar todas as informações
Indexação do SBES 2006, 2007 e 2008 (faltam 22 anos!)
Dados dos eventos de ES para a quadrienal da CAPES
Carta para ajudar a trazer o ICSE 2026 para o Brasil
Organização presencial do CBSoft 2023
[[ADOLFO]]{.mark} Para você, qual é a próxima fronteira da engenharia de software? (pode ser algo que você acha que vai acontecer ou que você gostaria que acontecesse em nossa área)
estão cada vez mais complexas
Indústria 4.0
Inteligência Artificial, modelo, flaky…
[[ADOLFO]]{.mark} Agradece e passa para o(a) entrevistado(a).
[[MARIA]]{.mark} Fecha o episódio.