SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
Métricas e Heurísticas para 
Detecção de Problemas em 
Aplicações Web 
Maurício Aniche 
aniche@ime.usp.br
Quem sou eu? 
● Graduado em CC pelo Mackenzie (2007) 
● Mestre em CC pelo IME/USP (2012) 
Orientador: Marco Aurélio Gerosa 
● Aluno de doutorado pelo IME/USP (2012-?) 
Orientador: Marco Aurélio Gerosa 
● Líder técnico na Caelum
Motivação 
● Nos últimos anos, tenho trabalhado com 
desenvolvimento de aplicações Web de todos 
os tamanhos, em diferentes linguagens. 
○ De 80 a 1000 classes 
○ Java, C#, Ruby 
● Mas os problemas são os mesmos.
Problemas que vejo no dia-a-dia 
● Controllers acoplados. 
● Controllers com regras de negócio. 
● Modelos confusos/complexos. 
● JSPs e Taglibs com scriptlet. 
● Testes de aceitação instáveis. 
● DAOs com métodos inúteis ou em lugares errados. 
● E por aí vai...
Como avaliar qualidade? 
● Métricas de código 
○ Úteis. 
○ São baratas e executam rápido. 
○ Eu, em particular, acho a ideia sensacional. 
● Meu problema com elas? 
○ Pouco contextuais. 
○ Estudos na área só querem saber de benchmarking.
Falta contexto, como assim? 
● Estudos que buscam por números mágicos. 
○ Mas quem disse que o número mágico (digamos, 20 
linhas por método) é bom para TODAS as classes do 
meu sistema? 
○ E as minhas decisões arquiteturais? 
● Não quero o melhor código do mundo, quero 
o código que facilite manutenção.
Você já olhou a fundo? 
● Todas as vezes que usei a mesma massa 
gigantesca de dados que outro artigo e fui 
analisar, encontrei problemas. 
○ Exemplo atual: artigo do ICSME sobre testes 
funcionais em aplicações Web de código aberto. 
Quando olhei a massa, vi que colocaram dois 
projetos nossos, que NÃO ERAM web. 
○ Outro exemplo: Meu artigo no CSMR sobre asserts 
em testes de unidade.
Minha proposta 
● Proponho a criação de métricas e heurísticas 
para identificação de problemas em 
aplicações Web. 
○ Todas elas serão extraídas de questionários e 
entrevistas com desenvolvedores do mundo real. 
○ Serão analisadas em projetos de código aberto, para 
fins exploratórios, e depois estudos de caso em 
projetos da indústria. 
○ Projetos de código aberto escolhidos manualmente.
Já temos algo? 
● Primeiro estudo sobre métodos em DAOs 
ambíguos foi publicado no MTD2014, co-locado 
com o ICSME2014. 
○ Bolamos uma heurística para identificar esses 
métodos e fizemos um pequeno estudo em 3 projetos 
da Caelum.
Project # of DAO 
methods 
# of right 
methods 
# of wrong 
methods 
% of wrong 
methods 
Caelumweb 590 511 79 13.38% 
Codesheriff 70 57 13 18.57% 
Gnarus 233 200 33 14.16%
Project # of inspected 
methods 
# of 
agreement 
% of 
agreement 
Caelumweb 79 59 74.68% 
Codesheriff 13 8 61.53% 
Gnarus 33 16 48.48%
Dúvidas 
● Como validar essas heurísticas? 
○ Opinião dos desenvolvedores + estudos em projetos 
de código aberto são suficientes. 
● Vale a pena criar métricas genéricas? 
○ Ao invés de definir um número mágico, usar um 
número calculado para o projeto em particular?
Obrigado! 
aniche@ime.usp.br 
www.aniche.com.br 
@mauricioaniche

Mais conteúdo relacionado

Mais procurados

Testes de software automatizados
Testes de software automatizadosTestes de software automatizados
Testes de software automatizadosMarcelo Andrade
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDJony Ferreira dos Santos
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Igor Abade
 
Metodologias de desenvolvimento de software
Metodologias de desenvolvimento de softwareMetodologias de desenvolvimento de software
Metodologias de desenvolvimento de softwareLetícia Elaine Krauss
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017Ismael
 
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing Ariane Izac
 
TDD e sua influência no design
TDD e sua influência no designTDD e sua influência no design
TDD e sua influência no designFelipe Benevides
 
Teste de software e suas áeras de pesquisa
Teste de software e suas áeras de pesquisaTeste de software e suas áeras de pesquisa
Teste de software e suas áeras de pesquisaLucas Gomes
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Raphael Paiva
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorotminastestingconference
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 
SEMINFO 2014 - Teste de software, uma área, uma carreira, um novo perfil.
SEMINFO 2014 -  Teste de software, uma área, uma carreira, um novo perfil.SEMINFO 2014 -  Teste de software, uma área, uma carreira, um novo perfil.
SEMINFO 2014 - Teste de software, uma área, uma carreira, um novo perfil.João Clineu - CTFL, CSM, CSD
 
TDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesNetto Cavalcante
 

Mais procurados (20)

Testes de software automatizados
Testes de software automatizadosTestes de software automatizados
Testes de software automatizados
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDD
 
BDD em Ação
BDD em AçãoBDD em Ação
BDD em Ação
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
 
Metodologias de desenvolvimento de software
Metodologias de desenvolvimento de softwareMetodologias de desenvolvimento de software
Metodologias de desenvolvimento de software
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017
 
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
 
O teste atualmente
O teste atualmenteO teste atualmente
O teste atualmente
 
Por que aplicações falham
Por que aplicações falham Por que aplicações falham
Por que aplicações falham
 
TDD e sua influência no design
TDD e sua influência no designTDD e sua influência no design
TDD e sua influência no design
 
Teste de software e suas áeras de pesquisa
Teste de software e suas áeras de pesquisaTeste de software e suas áeras de pesquisa
Teste de software e suas áeras de pesquisa
 
Metodos ageis thinkingdifferent
Metodos ageis thinkingdifferentMetodos ageis thinkingdifferent
Metodos ageis thinkingdifferent
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
SEMINFO 2014 - Teste de software, uma área, uma carreira, um novo perfil.
SEMINFO 2014 -  Teste de software, uma área, uma carreira, um novo perfil.SEMINFO 2014 -  Teste de software, uma área, uma carreira, um novo perfil.
SEMINFO 2014 - Teste de software, uma área, uma carreira, um novo perfil.
 
TDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a Testes
 

Destaque

DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?Maurício Aniche
 
Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?Maurício Aniche
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...Maurício Aniche
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016Maurício Aniche
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Maurício Aniche
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017Maurício Aniche
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID PrinciplesIsmael
 
ASP.NET MVC - Vinicius Quaiato
ASP.NET MVC - Vinicius QuaiatoASP.NET MVC - Vinicius Quaiato
ASP.NET MVC - Vinicius QuaiatoVinicius Quaiato
 
Aprendendo solid com exemplos
Aprendendo solid com exemplosAprendendo solid com exemplos
Aprendendo solid com exemplosvinibaggio
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetossoncino
 
Orientação a Objetos e Design Patterns
Orientação a Objetos e Design PatternsOrientação a Objetos e Design Patterns
Orientação a Objetos e Design PatternsVinicius Quaiato
 
Conheça a nova arquitetura do compilador do C# (DNAD 2015)
Conheça a nova arquitetura do compilador do C# (DNAD 2015)Conheça a nova arquitetura do compilador do C# (DNAD 2015)
Conheça a nova arquitetura do compilador do C# (DNAD 2015)Giovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com dockerGiovanni Bassi
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?Maurício Aniche
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Maurício Aniche
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Maurício Aniche
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureGiovanni Bassi
 
TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?Maurício Aniche
 
ASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETEduardo Pires
 

Destaque (20)

DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?
 
Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?Você tem um xerife olhando seu código?
Você tem um xerife olhando seu código?
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
ASP.NET MVC - Vinicius Quaiato
ASP.NET MVC - Vinicius QuaiatoASP.NET MVC - Vinicius Quaiato
ASP.NET MVC - Vinicius Quaiato
 
Aprendendo solid com exemplos
Aprendendo solid com exemplosAprendendo solid com exemplos
Aprendendo solid com exemplos
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
O que é código bonito?
O que é código bonito?O que é código bonito?
O que é código bonito?
 
Orientação a Objetos e Design Patterns
Orientação a Objetos e Design PatternsOrientação a Objetos e Design Patterns
Orientação a Objetos e Design Patterns
 
Conheça a nova arquitetura do compilador do C# (DNAD 2015)
Conheça a nova arquitetura do compilador do C# (DNAD 2015)Conheça a nova arquitetura do compilador do C# (DNAD 2015)
Conheça a nova arquitetura do compilador do C# (DNAD 2015)
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com docker
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e Azure
 
TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?TDD depois do mainstream. E agora?
TDD depois do mainstream. E agora?
 
ASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NET
 

Semelhante a Detecção de Problemas em Aplicações Web

Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisAgile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisSuelen Carvalho
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Maurício Aniche
 
Como encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-endComo encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-endJean Carlo Emer
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareEmerson Henrique
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareLuciano Almeida
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
Ferramentas Case de Teste
Ferramentas Case de TesteFerramentas Case de Teste
Ferramentas Case de TesteBeatriz Marques
 
Application Lifecycle Management - Campus Party Brasil 2009
Application Lifecycle Management -  Campus Party  Brasil 2009Application Lifecycle Management -  Campus Party  Brasil 2009
Application Lifecycle Management - Campus Party Brasil 2009Ramon Durães
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorMarcos Pereira
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Rodrigo Vieira
 
Desenvolvendo a REDEPESQ utilizando uma abordagem ágil
Desenvolvendo a REDEPESQ utilizando uma abordagem ágilDesenvolvendo a REDEPESQ utilizando uma abordagem ágil
Desenvolvendo a REDEPESQ utilizando uma abordagem ágilRafael França
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceCarolina Karklis
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
Quando utilizar Crowdsourcing em Testes | Crowdtest no DevDay
Quando utilizar Crowdsourcing em Testes | Crowdtest no DevDayQuando utilizar Crowdsourcing em Testes | Crowdtest no DevDay
Quando utilizar Crowdsourcing em Testes | Crowdtest no DevDayBase2 Tecnologia
 

Semelhante a Detecção de Problemas em Aplicações Web (20)

Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisAgile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
 
Como encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-endComo encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-end
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Ferramentas Case de Teste
Ferramentas Case de TesteFerramentas Case de Teste
Ferramentas Case de Teste
 
Application Lifecycle Management - Campus Party Brasil 2009
Application Lifecycle Management -  Campus Party  Brasil 2009Application Lifecycle Management -  Campus Party  Brasil 2009
Application Lifecycle Management - Campus Party Brasil 2009
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
E xtreme programming
E xtreme programmingE xtreme programming
E xtreme programming
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 
Rup e metodos ágies
Rup e metodos ágiesRup e metodos ágies
Rup e metodos ágies
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Desenvolvendo a REDEPESQ utilizando uma abordagem ágil
Desenvolvendo a REDEPESQ utilizando uma abordagem ágilDesenvolvendo a REDEPESQ utilizando uma abordagem ágil
Desenvolvendo a REDEPESQ utilizando uma abordagem ágil
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Quando utilizar Crowdsourcing em Testes | Crowdtest no DevDay
Quando utilizar Crowdsourcing em Testes | Crowdtest no DevDayQuando utilizar Crowdsourcing em Testes | Crowdtest no DevDay
Quando utilizar Crowdsourcing em Testes | Crowdtest no DevDay
 
Design Patterns - Com Java
Design Patterns  - Com JavaDesign Patterns  - Com Java
Design Patterns - Com Java
 

Mais de Maurício Aniche

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Maurício Aniche
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeMaurício Aniche
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Maurício Aniche
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsMaurício Aniche
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Maurício Aniche
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013Maurício Aniche
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMaurício Aniche
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?Maurício Aniche
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Maurício Aniche
 
Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Maurício Aniche
 
Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Maurício Aniche
 
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introduçãoMétodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introduçãoMaurício Aniche
 
The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)Maurício Aniche
 
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)Maurício Aniche
 

Mais de Maurício Aniche (15)

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to Practice
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019
 
Test Automation Day 2018
Test Automation Day 2018Test Automation Day 2018
Test Automation Day 2018
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and Stroopwafels
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]
 
Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?
 
Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Métricas de código, pra que te quero?
Métricas de código, pra que te quero?
 
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introduçãoMétodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
 
The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)
 
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
 

Detecção de Problemas em Aplicações Web

  • 1. Métricas e Heurísticas para Detecção de Problemas em Aplicações Web Maurício Aniche aniche@ime.usp.br
  • 2. Quem sou eu? ● Graduado em CC pelo Mackenzie (2007) ● Mestre em CC pelo IME/USP (2012) Orientador: Marco Aurélio Gerosa ● Aluno de doutorado pelo IME/USP (2012-?) Orientador: Marco Aurélio Gerosa ● Líder técnico na Caelum
  • 3. Motivação ● Nos últimos anos, tenho trabalhado com desenvolvimento de aplicações Web de todos os tamanhos, em diferentes linguagens. ○ De 80 a 1000 classes ○ Java, C#, Ruby ● Mas os problemas são os mesmos.
  • 4. Problemas que vejo no dia-a-dia ● Controllers acoplados. ● Controllers com regras de negócio. ● Modelos confusos/complexos. ● JSPs e Taglibs com scriptlet. ● Testes de aceitação instáveis. ● DAOs com métodos inúteis ou em lugares errados. ● E por aí vai...
  • 5. Como avaliar qualidade? ● Métricas de código ○ Úteis. ○ São baratas e executam rápido. ○ Eu, em particular, acho a ideia sensacional. ● Meu problema com elas? ○ Pouco contextuais. ○ Estudos na área só querem saber de benchmarking.
  • 6. Falta contexto, como assim? ● Estudos que buscam por números mágicos. ○ Mas quem disse que o número mágico (digamos, 20 linhas por método) é bom para TODAS as classes do meu sistema? ○ E as minhas decisões arquiteturais? ● Não quero o melhor código do mundo, quero o código que facilite manutenção.
  • 7. Você já olhou a fundo? ● Todas as vezes que usei a mesma massa gigantesca de dados que outro artigo e fui analisar, encontrei problemas. ○ Exemplo atual: artigo do ICSME sobre testes funcionais em aplicações Web de código aberto. Quando olhei a massa, vi que colocaram dois projetos nossos, que NÃO ERAM web. ○ Outro exemplo: Meu artigo no CSMR sobre asserts em testes de unidade.
  • 8. Minha proposta ● Proponho a criação de métricas e heurísticas para identificação de problemas em aplicações Web. ○ Todas elas serão extraídas de questionários e entrevistas com desenvolvedores do mundo real. ○ Serão analisadas em projetos de código aberto, para fins exploratórios, e depois estudos de caso em projetos da indústria. ○ Projetos de código aberto escolhidos manualmente.
  • 9. Já temos algo? ● Primeiro estudo sobre métodos em DAOs ambíguos foi publicado no MTD2014, co-locado com o ICSME2014. ○ Bolamos uma heurística para identificar esses métodos e fizemos um pequeno estudo em 3 projetos da Caelum.
  • 10. Project # of DAO methods # of right methods # of wrong methods % of wrong methods Caelumweb 590 511 79 13.38% Codesheriff 70 57 13 18.57% Gnarus 233 200 33 14.16%
  • 11. Project # of inspected methods # of agreement % of agreement Caelumweb 79 59 74.68% Codesheriff 13 8 61.53% Gnarus 33 16 48.48%
  • 12. Dúvidas ● Como validar essas heurísticas? ○ Opinião dos desenvolvedores + estudos em projetos de código aberto são suficientes. ● Vale a pena criar métricas genéricas? ○ Ao invés de definir um número mágico, usar um número calculado para o projeto em particular?