Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cognitive-Driven Development e resultados preliminares sobre refatoração de software

Cognitive-Driven Development e resultados preliminares sobre refatoração de software

Apresentação no TDC 2020.

Victor Hugo Santiago

October 29, 2020
Tweet

More Decks by Victor Hugo Santiago

Other Decks in Research

Transcript

  1. Cognitive-Driven Development e resultados preliminares sobre refatoração de software Victor

    Hugo Santiago e Alberto Souza Zup Innovation - Zup EDU São Paulo, SP. Brasil
  2. https:/ /www.linkedin.com/in/victorhugosantiago/ Victor Hugo Santiago • Doutor pelo ICMC-USP (Instituto

    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
  3. Agenda • Cognitive-Driven Development (CDD) • Uma visão experimental dos

    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?
  4. Contexto & Problema • A complexidade do software aumenta à

    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
  5. Motivação • Faltam estudos empíricos explorando como o código poderia

    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
  6. Nossa sugestão: Enfoque na Simplicidade e mais importante… definir um

    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.
  7. Cognitive-Driven Development (CDD) Teoria da Carga Cognitiva (Sweller, 1988; Sweller,

    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
  8. Cognitive-Driven Development (CDD) Complexidade cognitiva em aplicações OO (Shao and

    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
  9. Características essenciais: • Enfoque na Simplicidade e complementar a outras

    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
  10. Contextual coupling A function as an argument if statement Exemplo

    ilustrativo: Total of Intrinsic Complexity Points 10
  11. • Planejamento (Wohlin et al., 2012; Van Solingen et al.,

    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.
  12. • Questões de pesquisa: ◦ QP1: Existe diferença sob o

    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
  13. Resultados preliminares sobre as refatorações 14 JournalEntryServiceImpl (CBO=23; WMC=20; RFC=27;

    LCOM=15; LOC=82) Análise dos clusters (média): Code metrics for Java code by means of static analysis https:/ /github.com/mauricioaniche/ck
  14. Resultados preliminares sobre as refatorações 16 Ex.: Análise das classes

    (S8 - CDD) JournalEntryServiceImpl e EarlyAlertServiceImpl + unidades criadas VS versões originais
  15. 17 Tsantalis, N., Mansouri, M., Eshkevari, L. M., Mazinanian,D., and

    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)
  16. Reflexões sob um olhar dos testes estatísticos 18 JournalEntryServiceImpl CBO

    Aceita h0 CDD = Convencional WMC Rejeita h0 CDD ≄Convencional RFC Rejeita h0 LCOM Rejeita h0 LOC Rejeita h0 • Após testes de normalidade, Teste de variância, Teste Two sample t, Mann-Whitney U Test…. para a QP1 EarlyAlertServiceImpl CBO Aceita h0 CDD = Convencional WMC Aceita h0 RFC Aceita h0 LCOM Aceita h0 LOC Aceita h0
  17. • Precisamos realizar um experimento com mais projetos e devs

    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
  18. • Percepção de melhor legibilidade do código para os devs

    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