Avanços em tecnologias voltadas para Ciência de Dados e Inteligência Artificial, a grande quantidade de dados, iniciativas de dados abertos bem como a crescente disponibilidade de poder computacional têm incentivado investimentos para o desenvolvimento de sistemas suportados por Ciência de Dados. Em particular, diversos setores têm usufruído destes avanços, tais como: redes sociais (e.g., reconhecimento de fake news), Internet das Coisas (e.g., serviços como a Alexa, da Amazon), Cidades Inteligentes (e.g., gerenciamento inteligente de sinais para controle de trânsito), e saúde (e.g., reconhecimento de doenças a partir de imagens em exames de radiologia). No entanto, há evidências acerca de diversas dificuldades técnicas para dar suporte à Ciência de Dados bem como ao desenvolvimento desses sistemas, além de pequenos programas que auxiliam o tratamento de dados, a transformação de dados e a mineração dos mesmos. Essas dificuldades podem causar problemas no fluxo de desenvolvimento, aumentando custos, diminuindo a produtividade e reduzindo a qualidade das entregas. Para minimizar esses problemas, técnicas de Engenharia de Software têm se tornado cada vez mais essenciais nesse contexto. Por exemplo, pode-se trabalhar em revisões sistemáticas, estudos empíricos e controlados e questionários para levantar e melhor entender as demandas e problemas dos desenvolvedores em ambientes de notebooks como o Jupyter ou o Google Colaboratory, por exemplo, para em seguida (i) propor técnicas para o levantamento de requisitos em tais sistemas; (ii) propor e estudar arquiteturas considerando opções e formas de implantação de modelos; (iii) propor a aplicação de princípios de projeto de software, e.g., modularidade, information hiding, princípios SOLID, etc; (iv) propor melhorias de usabilidade (UI/UX) em ambientes de desenvolvimento; (v) propor a utilização de técnicas para melhoria de manutenção de códigos escritos em tais notebooks (e.g., busca e refatoração de smells, busca e refatoração para deixar o código mais limpo e fácil de ler e entender etc); e (vi) propor técnicas para melhor testar esses sistemas e tentar evitar, por exemplo, testes não determinísticos. Dado esse contexto, o objetivo deste painel é discutir algumas das dificuldades que desenvolvedores de sistemas suportados por Ciência de Dados têm levantado. Adicionalmente, o perfil de tais desenvolvedores será discutido, já que muitas pessoas sem formação em computação têm trabalhado no contexto de Ciência de Dados. Ademais, o painel visa discutir metodologias e técnicas da Engenharia de Software que possam ajudar na tarefa de implementar tais sistemas. Além de discutir como a Engenharia de Software pode ajudar, os painelistas irão compartilhar algumas de suas experiências no tópico supracitado.
Painelistas:
Moderador:
Márcio Ribeiro
Universidade Federal de Alagoas
Marcos Kalinowski
PUC-Rio
Leonardo Murta
Universidade Federal Fluminense
Eduardo Almeida
Universidade Federal da Bahia