Resumen:
A carga cognitiva refere-se ao esforço mental que os usuários aplicam ao desempenhar tarefas cognitivas tais como interpretar artefatos de software com diferentes níveis de abstração. A carga cognitiva na engenharia de software e importante devido ao potencial de considerar fatores humanos através de sinais fisiológicos enquanto desenvolvedores estão em sua rotina de trabalho. Por exemplo, enquanto estão trabalhando, desenvolvedores dedicam grande parte de seu tempo na compreensão de código. Mensurar a carga cognitiva através de indicadores psicofisiológicos possibilitaria uma correlação coerente da percepção dos desenvolvedores com as tarefas de compreensão de código. Enquanto indicadores psicofisiológicos refletem instantaneamente os estímulos dos desenvolvedores, métricas tradicionais apenas são consolidadas após a conclusão das tarefas. Por isso, abordagens de carga cognitiva são apontadas por ter potencial preditivo nas tarefas de engenharia de software. Para investigar a carga cognitiva na engenharia de software, pesquisadores combinam abordagens a partir de variados tipos de dispositivos psicofisiológicos. Por exemplo, a partir do eletroencefalograma (EEG) pesquisadores ja utilizaram diretamente abordagens tais como o Assymetry Ratio (ASR), o Event-Related Desyncronization (ERD), e as potencias de banda das ondas alfa (α), beta (β), delta (δ), e theta (θ). A partir do sensor fMRI, pesquisadores também utilizaram o Blood Oxygen Level Dependent (BOLD) para realçar quais áreas cerebrais são ativas durante a compreensão de código. Porém, apesar dessas técnicas serem relacionadas a carga cognitiva, ainda falta uma abordagem para mensurar a carga cognitiva em tarefas de compreensão de código. Isto implica em uma série de problemas identificados nesta área: (1) ausência de uma classificação do estado da arte sobre medidas da carga cognitiva na engenharia de software; (2) falta de abordagem para mensurar a carga cognitiva na engenharia de software; (3) escassez de analises de correlação de abordagens utilizadas para mensurar a carga cognitivas em tarefas de compreensão de código; (4) ausência da avaliação da efetividade para a utilização de dados EEG para classificar a compreensão de código utilizando técnicas de machine learning. Por isso, esta pesquisa busca: (1) realizar um estudo de mapeamento sistemático para classificar as pesquisas sobre medidas da carga cognitiva na engenharia de software; (2) desenvolver uma tecnica para mensurar a carga cognitiva atraves de dados EEG em tarefas de compreensao de software, chamada de CogEff; (3) analise da correlação entre abordagens de EEG tradicionais, e da abordagem CogEff em relação a tarefas de compreensão de codigo; (4) analise da efetividade ao utilizar abordagens tradicionais de EEG para classificar compreensão de código. Os principais resultados são: (1) a partir da classificacao dos estudos foi constatado que 37% (23/63) dos estudos adotaram dispositivos multimodais; e 59% (37/63) dos estudos analisaram a carga cognitiva em tarefas de programação, tais como, compreensão de código; (2) abordagem CogEff possui potencial de medir a carga cognitiva através da conectividade dos canais EEG; (3) os testes de correlação apresentaram que as abordagens de EEG tradicionais, e a CogEff possuem correlação com a compreensão de código; (4) o classificador K-Nearest Neighbors obteve uma media de f-measure de 86% para classificar a compreensão do código.