De Ciências Matemáticas e de Computação), enfoque em Engenharia de Software (2019) • Contribuições no campo de modularização, testes de software e Computação em Nuvem (ICSME 2020, CCGrid 2019, SSBSE 2019, CLOSER 2018 e outras) • Na Zup: pesquisas avançadas envolvendo práticas para melhorar a experiência dos devs e redução de custos/esforço com manutenção e testes de software
princípios do CDD em refatoração de software • Resultados preliminares sobre as refatorações • Reflexões sob um olhar dos testes estatísticos • Lições e aprendizados que podem contribuir com a forma que produzimos software • Onde queremos chegar?
medida que novas features são incorporadas • Desenvolvedores muitas vezes são surpreendidos com código mais complexo do que deveria • Na maioria dos casos damos mais atenção em resolver os problemas do negócio e esquecemos de gerenciar a complexidade (é possível?) 4
ser criado sob uma perspectiva da cognição • Expansão contínua do software vs. ameaças ao nível de entendimento • Como desenvolver aplicações com alta-qualidade se não conseguimos lidar de forma eficiente com sua complexidade? 5
limite viável para a complexidade do software com base na Cognição Humana 7 SOUZA, ALBERTO. L. O. T. ; PINTO, VICTOR HUGO SANTIAGO C. . Toward a Definition of Cognitive-Driven Development. In: 2020 IEEE International Conference on Software Maintenance and Evolution (ICSME), 2020, Adelaide, Austrália, p. 776-778.
2010) and Medidas de complexidade cognitiva • Reconhecimento de uma limitação humana ◦ Um alto número de itens em nossa “memória de curto prazo” pode contribuir para uma excessiva carga cognitiva • Complexidade intrínseca ◦ O número de elementos que pode ser simultaneamente processado na memória de trabalho ◦ Processamos apenas 7 + ou - 2 unidades de informação na memória de curto prazo (Miller, 1956) J. Sweller. Cognitive load during problem solving: Effects on learning.Cognitive science, 12(2):257–285, 1988. J. Sweller. Cognitive load theory: Recent theoretical advances. 2010. G. A. Miller. The magical number seven, plus or minus two: Some limits on our capacity for processing information. Psychological review,63(2):81, 1956 8
Wang, 2003; Misra et al., 2018) ◦ Estruturas básicas de controle (BCS) e pesos Uma proposta inicial para medir Pontos de Complexidade Intrínseca (ICP) [não limitado] J. Shao and Y. Wang. A new measure of software complexity based on cognitive weights.Canadian Journal of Electrical and Computer Engineering, 28(2):69–74, 2003. S. Misra, A. Adewumi, L. Fernandez-Sanz, and R. Damasevicius. A suite of object oriented cognitive complexity metrics.IEEE Access,6:8782–8796, 2018. 9
estratégias • CDD não se restringe a métricas específicas (LOC, Complexidade ciclomática, … ) • Manter um limite do número de pontos de complexidade intrínseca para as unidades de implementação • Adaptável considerando a natureza dos projetos e nível de experiência dos membros do time • CDD pode guiar o desenvolvimento do software reduzindo “cognitive overload” Cognitive-Driven Development (CDD) 10
2002) ◦ Student Success Plan (SSP) - https:/ /github.com/Jasig/SSP.git ◦ 18 Engenheiros de software ◦ Atividade: refatorar duas classes da aplicação • Objetivo: Comparar a qualidade das versões refatoradas com base no CDD e usando métodos convencionais • Métricas ◦ CBO (Coupling between objects) ◦ WMC (Weight Method Class) ◦ RFC (Response for a Class) ◦ LCOM (Lack of Cohesion of Methods) and LOC (Lines of code) Uma visão experimental 12 Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., and Wesslén, A. (2012). Experimentation in Software Engineering. Springer Berlin Heidelberg. Van Solingen, R., Basili, V., Caldiera, G., and Rombach, H. D. (2002). Goal Question Metric (GQM) approach. Encyclopedia of software engineering.
olhar de métricas de qualidade para as refatorações que seguiram a estratégia baseada no CDD e métodos convencionais? ◦ QP2: A produtividade é diferente ao empregar uma estratégia baseada no CDD e métodos convencionais para refatoração? • Hipóteses Uma visão experimental 13
Dig, D. (2018). Accurate and efficient refactoring detection in commit history. In Proceedings of the 40th International Conference on Software Engineering, ICSE ’18, pages 483–494, New York, NY, USA. ACM. https:/ /github.com/tsantalis/RefactoringMiner Tipos de refatorações identificadas (Tsantalis et al., 2018)
Java • Ainda sob a perspectiva de viabilidade, queremos coletar indicativos de produtividade e qualidade do código em: ◦ Projetos reais iniciados com CDD e outros que foram refatorados com esse método • Os resultados preliminares sugerem que o CDD pode orientar o processo de reestruturação visando uma separação balanceada de responsabilidades Lições e Aprendizados 19
e redução de esforço com testes e manutenção • Impactar positivamente a experiência dos devs com a redução da complexidade das partes que compõem o software Onde queremos chegar? 20