Improving parallel programming assessment : challenges, methods, and opportunities in coding productivity - Andrade, Gabriella Lopes (2023)
O desenvolvimento de aplicações paralelas não é uma tarefa fácil, pois os desenvolvedores devem lidar com várias questões como a implementação da sincronização de dados, a divisão do problema de computação entre as threads e a exploração da concorrência. Para facilitar essa tarefa, surgiram novas Interfaces de Programação Paralela (IPPs). Ao avaliar essas IPPs, a maioria dos estudos na área de programação paralela se concentra na avaliação do tempo de execução e desempenho dessas IPPs. Entretanto, a produtividade é um fator importante que, juntamente com a eficácia e a satisfação do usuário, são indicadores de usabilidade. A partir da avaliação da produtividade e da usabilidade, é possível continuar aumentando as abstrações do paralelismo e criar IPPs melhores e simples de usar sem comprometer o desempenho das aplicações. Logo, o principal objetivo dessa tese de doutorado é prover metodologias e técnicas para melhorar e suportar a avaliação da produtividade na área de programação paralela. Para atingir esse objetivo, inicialmente conduzimos uma revisão da literatura para descobrir como a usabilidade e produtividade tem sido avaliada na área de programação paralela. A partir dessa revisão identificamos que a fim de avaliar a produtividade na programação paralela, alguns pesquisadores estão realizando estudos envolvendo pessoas, geralmente desenvolvedores de aplicações, os quais demandam certo tempo para serem planejados e executados. Por outro lado, alguns pesquisadores têm se concentrado no uso de métricas de Engenharia de Software (por exemplo, CCN, COCOMO II e Halstead), as quais não foram projetadas para avaliar especificamente o desenvolvimento de aplicações paralelas. Em relação ao processo de experimentação, nessa tese de doutorado, apresentamos uma metodologia para orientar outros pesquisadores de programação paralela durante o planejamento, execução e análise dos resultados dos experimentos. Para validar essa metodologia, conduzimos experimentos com iniciantes em programação paralela ao explorar o paralelismo em aplicações de processamento de stream em ambientes multi-core e o paralelismo de dados em arquiteturas com GPU. Em relação às métricas de codificação, realizamos um estudo com o objetivo de verificar a eficácia dessas métricas ao avaliar a produtividade de IPPs. A partir desse estudo, identificamos uma série de métricas populares na área de Engenharia de Software ainda não exploradas na área de programação paralela, incluindo o modelo de Putnam, Pontos de Função, Pontos de Casos de Uso e Planning Poker. Para identificar as limitações e oportunidades de melhorias dessas métricas, verificamos a acurácia ao estimar o tempo de desenvolvimento de aplicações paralelas. Além disso, conduzimos uma pesquisa de opinião com desenvolvedores de aplicações paralelas para identificar os fatores que impactam na produtividade de desenvolvimento. Nosso objetivo era propor melhorias para as métricas de codificação com base nos fatores identificados. Os resultados dos experimentos com desenvolvedores iniciantes mostraram que, conforme o esperado, IPPs com um nível mais alto de abstração tendem a aumentar a produtividade do desenvolvedor em ambientes multi-core e GPU. Esse resultado também foi confirmado através da pesquisa de opinião realizada. Além disso, os resultados desta pesquisa de opinião confirmaram que a experiência do desenvolvedor é um dos principais fatores que influenciam o desenvolvimento de aplicações paralelas. Os resultados da avaliação das métricas de codificação mostraram que o Planning Poker se mostrou uma métrica promissora, pois considera as opiniões de desenvolvedores experientes ao estimar o esforço de desenvolvimento. Nesse sentido, nós propusemos uma modificação à métrica Planning Poker ao considerar a opinião de apenas um desenvolvedor ao invés de uma equipe de desenvolvimento. Os resultados mostraram que o Planning Poker é um método eficaz e que exige menos esforço para ser utilizado na prática em comparação com experimentos controlados com estudantes que visam coletar dados de tempo de desenvolvimento. Logo concluímos, que essa métrica pode ser usado como um substituto para medir o tempo de desenvolvimento de aplicações paralelas