SlideShare uma empresa Scribd logo
1 de 63
Frederico Nunes do Pranto Filho
Exame de Defesa de Mestrado
PPgSC - Programa de Pós-graduação em Sistemas e Computação
Banca Examinadora:
Nélio Alessandro Azevedo Cacho, Dr.
Roberta de Souza Coelho, Dra.
Francisco Dantas de Medeiros Neto, Dr.
Frederico Nunes do Pranto Filho
Natal-RN, 12 de Dezembro de 2016.
ECSFlow: Implementação de um modelo de
tratamento de exceção para C#
• Introdução
▫ Problema
▫ Objetivo
• ECSFlow
▫ Apresentação
▫ Objetivos
▫ Especificação
▫ Detalhes da implementação
Roteiro • Análise do ECSFlow
▫ Definição do Estudo
▫ Coleta e Análise dos Dados
▫ Ameaças à Validade do Experimento
• Considerações Finais
▫ Trabalhos Futuros
• Referências
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Introdução
• Confiabilidade
▫ capacidade de um sistema de software entregar as suas funcionalidades
sob condições normais e errôneas [1]
▫ Robustez
 capacidade de um sistema para reagir a falhas de componentes [2]
▫ Manutenibilidade
 refere-se à facilidade com a qual um produto de software pode ser modicado
para correção de defeitos [3]
Introdução
• Como manter um sistema confiável?
▫ Técnicas de tolerância a falhas
 implementadas através de mecanismos de tratamento de exceções
• Mecanismos de tratamento de exceção
▫ Incorporar uma clara separação entre comportamento excepcional e
comportamento normal
Introdução
• Mecanismos de tratamento de exceções dirigidos à robustez
▫ impõem a declaração de interfaces excepcionais nas assinaturas de
métodos
• Mecanismos de tratamento de exceções dirigidos à manutenção
▫ menos rígidos em relação à declaração de interfaces excepcionais
▫ busca facilitar a manutenção e evolução do comportamento normal e
excepcional
Introdução
• O uso de mecanismos de tratamento de exceção dirigidos à
manutenção, como em C#, mostra-se frágil e frequentemente leva a um
decréscimo na robustez dos programas [4]:
▫ (i) a maioria das falhas são introduzidas durante o aprimoramento do
código normal;
▫ (ii) falhas são introduzidas durante o aprimoramento do código
excepcional;
▫ (iii) falhas são introduzidas devido a flexibilidade do mecanismo de
tratamento de exceção dirigido à manutenção;
Problema
• Causas:
▫ há um forte acoplamento entre o código normal e excepcional
▫ observação sintática do relacionamento entre os comportamentos
▫ realização de checagens estáticas
▫ perspectiva geral do fluxo excepcional
▫ controle de fluxo excepcional implícito
Problema
• O modelo EFlow [5]
▫ define uma separação explícita entre os comportamentos normal e excepcional
• A implementação ECSFlow
▫ uma concretização do modelo EFlow
▫ propõe melhorar a manutenibilidade e robustez na evolução do tratamento de
exceção para a linguagem C#
Problema
• Apresentar uma proposta de implementação de um modelo de
tratamento de exceção, chamado ECSFlow, para a linguagem C#, que
promova o aumento da robustez, da manutenibilidade e da
modularização
▫ Definir mecanismos para representar os canais excepcionais globais
 propagação excepcional de forma explícita
▫ Definir mecanismos para representar os tratadores conectáveis
 reuso do código excepcional
 separação explícita entre os códigos normal e excepcional
▫ Avaliar o ECSFlow por meio de um estudo de caso de uma aplicação real.
Objetivos
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
ECSFlow
• O modelo EFlow apresenta duas principais abstrações:
▫ Canais Excepcionais Explícitos
 Locais de Lançamento
 Locais Intermediários
 Locais dos Tratadores de Exceções
▫ Tratadores Conectáveis
ECSFlow
• Objetivos da ferramenta proposta
▫ fornecer suporte completo para os canais excepcionais explícitos e
tratadores conectáveis em uma linguagem de programação (C#);
▫ reduzir as limitações do modelo tradicional de tratamento de exceção da
linguagem de programação C#.
ECSFlow
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
ECSFlow – Exemplo de Uso
• Emby[7], um servidor de mídia open
source
• Exemplo de um controle de fluxo
excepcional
▫ Salvando alguma configuração de
preferências do usuário
ECSFlow
Canal_1
Canal Excepcional Explícito
( explicit exception channels )
ECSFlow
Local de Lançamento
para a exceção ArgumentNullException
Canal_1
ECSFlow
Local de Lançamento
para a exceção ArgumentNullException
Canal_1
ECSFlow
Local de Tratamento
Canal_1
ECSFlow
Local de Tratamento
Locais Intermediários
Canal_1
ECSFlow
Tratadores Conectáveis
Canal_1
Local de Tratamento
ECSFlow
ECSFlow Tratadores Conectáveis
• Vantagens:
▫ reusabilidade do tratamento de exceção (tratadores
conectáveis)
▫ evita a dispersão do código excepcional em toda a
cadeia de chamada dos métodos (locais intermediários)
▫ contextos de tratamento de exceção (locais de
lançamento)
 componentes, métodos, classes, namespaces e
instruções
• Desvantagens:
▫ troca de contexto manual entre arquivos
Canal_1
Local de Tratamento
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
ECSFlow - Especificação
• Determina como as exceções podem fluir através dos Locais de
Lançamentos, Locais Intermediários e Locais de Tratamento.
• Especificação ECSFlow: ExceptionChannel
• Exemplo:
▫ ExceptionChannel (“Canal1", "ArgumentNullException")
▫ ExceptionChannel ("Canal1",
"ArgumentNullException, OperationCanceledException","Exception"})
▫ ExceptionChannel("Canal1 ", "SystemException+")
ECSFlow – Canal Excepcional Explícito
• É possível realizar a composição de vários canais excepcionais em uma
representação de canal excepcional simples, tendo cada especificação um
único local de lançamento
• Especificação ECSFlow: ExceptionChannelComposite
• Exemplo:
▫ ExceptionChannelComposite (“CanalComposto“, “Canal1, Canal2"})
ECSFlow – Composição de Canais
• Determina a região do código que será o monitorada pelo canal
excepcional explícito no caso do lançamento de uma exceção
• Especificação ECSFlow: ExceptionRaiseSite
• Exemplos:
▫ ExceptionRaiseSite (“Local1”, "MediaBrowser . Model .*")
▫ ExceptionChannel (“Canal1", "SystemException+“, “Local1”)
ECSFlow – Local de Lançamento
• É possível excluir do escopo de um determinado canal excepcional
alguma região definida em um Local de Lançamento específico
• Especificação ECSFlow: ExceptionRaiseSiteExclude
• Exemplos:
▫ ExceptionRaiseSite (“Local1", "MediaBrowser.Model.*")
▫ ExceptionRaiseSiteExclude ("LocalExcluido", "Post")
▫ ExceptionChannel (“Canal1", "SystemException+, "Local1, LocalExcluido")
ECSFlow - Excluindo um Local de Lançamento
• O componente ExceptionHandler encapsula o código de tratamento de
exceções que é executado quando um determinado ponto em um canal
excepcional explícito é atingido.
• Define a codificação da ação do comportamento excepcional.
• Especificação ECSFlow: ExceptionHandler
ECSFlow – Tratadores Conectáveis
• Exemplo:
▫ ExceptionHandler(“Canal1", "Save", nameof(MethodInjectionCodeProvider.
ArgumentExceptionException)))
public static void ArgumentExceptionException(State state)
{
Console.WriteLine("Foi identificado um argumento inválido. Info: " + arg.Message);
}
ECSFlow – Tratadores Conectáveis
• Determina uma forma comum para tratar todas as exceções que fluem
através de um canal excepcional explícito
• Especificação ECSFlow: ExceptionInterface
• Exemplos:
▫ ExceptionInterface (“Canal2", "MediaBrowser.Controller.*",
typeof ( ControllerException ))
▫ ExceptionInterface (“Canal1", "MediaBrowser.Model.*")
ECSFlow - Interfaces Excepcionais
• Dois canais diferentes podem, eventualmente, compartilhar o mesmo
tipo de exceção, o mesmo local lançamento e o mesmo local de
tratamento.
• O conflito é descrito pela necessidade de definir qual tratador deverá ser
executado pela primeira vez.
• Especificação ECSFlow: ExceptionChannelPrecedence
ECSFlow - Resolvendo Conflitos entre Canais
• Exemplo:
// Configuração 1
ExceptionRaiseSite(“Local1", "SaveDisplayPreferences")
ExceptionChannel(“Canal1", "ArgumentNullException+", "Local1")
ExceptionHandler("Canal1","Save", ...)
ExceptionHandler("Canal1","GetDisplayPreferences", ...)
// Configuração 2
ExceptionRaiseSite("Local2", "SaveDisplayPreferences")
ExceptionChannel(“Canal2", "ArgumentNullException", "Local2")
ExceptionHandler("Canal2","Save", ...)
ExceptionHandler("Canal2","GetDisplayPreferences", ...)
▫ ExceptionChannelPrecedence("GetDisplayPreferences", “Canal1, Canal2”)
▫ ExceptionChannelPrecedence("Save", “Canal1, Canal2”)
ECSFlow - Resolvendo Conflitos entre Canais
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
ECSFlow - Detalhes da implementação
• Plataforma .NET
• um ambiente é composto de ferramentas, framework para execução, linguagens
de programação e biblioteca de classes
• plataforma multilinguagem
• o código é compilado para uma linguagem intermediaria
• Common Intermediate Language (CIL)
• instrumentação de código por linguagem intermediária
• alteração do código em tempo de compilação
Ferramentas
• ILSpy
• Mono.Cecil
• baseada no projeto Mono
• realiza a leitura, manipulação
e escrita de assembly .NET
• define uma camada
de abstrações para manipulação
de operadores IL
Ferramentas
• Mono.Cecil
• define um conjunto de classes
estruturais que representam a
composição de um assembly
• Fody
▫ Desenvolvimento de um add-in
Ferramentas
• A linguagem de especificação do ECSFlow permite ao desenvolvedor configurar as
abstrações do modelo de tratamento de exceção.
• A especificação da linguagem é definida a partir de uma sintaxe natural ao
desenvolvedor pois utiliza construções da linguagem C#
• [assembly: ExceptionChannel("Canal1 ", "SystemException+") ]
• Uso de Caracteres-Curinga
• Validação do Arquivo de Especificação das abstrações ECSFlow
• verificação do framework
• verificação do ECSFlow
Definição da linguagem de especificação do ECSFlow
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Avaliação do ECSFlow
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Definição do Estudo
• Critérios para a seleção da aplicação avaliada:
▫ seleção realizada por Cabral[8]
▫ facilidade de execução
▫ facilidade de construção do projeto
▫ comportamento excepcional
▫ complexidade do projeto
• AscGenerator
▫ 5 últimas versões
▫ 12.659 linhas de código, em média, por versão
Definição do Estudo
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Coleta e Análise dos Dados
• RQ1.
▫ O uso do ECSFlow para modularizar o tratamento de exceções melhora a
manutenibilidade do software?
• RQ2
▫ O uso do ECSFlow para modularizar o tratamento de exceções melhora a robustez
do software?
• Foi realizada uma comparação de métricas entre as implementações da
aplicação em C# e ECSFlow
Questões de Pesquisa
Suíte de Métricas
Métricas de Interesses Transversais
• Difusão dos Interesses Transversais
sobre os Componentes
▫ No ECSFlow há somente um
componente é responsável por
manipular o comportamento
excepcional
Métricas de Interesses Transversais
• Difusão dos Interesses Transversais
sobre Operações
▫ No ECSFlow a quantidade de
operações (métodos) responsável pela
manipulação do comportamento foi
reduzida
 reuso do comportamento excepcional
 na versão 2.0.0 alguns componentes
foram movidos em projetos separados
Métricas de Interesses Transversais
• Difusão dos Interesses Transversais
sobre LOC
▫ conta o número de pontos de
transição para cada interesse
transversal através das linhas de
código
Métricas de Interesses Transversais
• Difusão dos Interesses Transversais
sobre LOC
▫ devido a separação explícita entre
os comportamentos normal e
excepcional, não há pontos de
transição
 na versão 2.0.0 alguns componentes
foram movidos em projetos
separados
Métricas de Tamanho
• Tamanho do Vocabulário
▫ No ECSFlow devido à adição de
mais um componente a métrica foi
acrescida em mais 1.
Métricas de Tamanho
• Linhas de código
▫ Em média, a redução da quantidade
de linhas de código do ECSFlow foi
de 17,6%
 reuso do comportamento
excepcional
 na versão 2.0.0 alguns componentes
foram movidos em projetos
separados
Métricas de Acoplamento e Coesão
• Acoplamento entre Componentes
▫ esta métrica realiza a contagem do
número de componentes acessados
por outros componentes
 a diferença deveu-se principalmente
pela redução do número de
referências à classes de exceção em
consequência da remoção dos
blocos catch
Análise de Impacto de Mudanças
• Variação de mudanças (classes e
métodos) entre as versões da
aplicação
▫ análise manual da evolução entre
versões
▫ analisa em que medida cada cenário
de manutenção entre as versões
analisadas envolveu alguma alteração
no tratamento de exceção
ClassesMétodos
Análise de Impacto de Mudanças
Variação das mudança de LOC entre as versões da aplicação
• Variação das mudança de LOC
entre as versões da aplicação
▫ alterações na evolução entre as
versões 0.9.5 e 0.9.6 estão
relacionadas à alterações no código
normal, situação esta que é
reduzida com a clara separação
entre os comportamentos normal e
excepcional
Robustez do Comportamento Excepcional
Percentual dos Fluxos Excepcionais por Tipo
(Não Tradada, Subsumption, Mesma Exceção)
• Percentual dos Fluxos Excepcionais
por Tipo
▫ 92,15% dos fluxos excepcionais não-
tratados encontrados foram causados
pelas exceções ArgumentException e
seus subtipos
▫ o gráfico mostra uma consequência
direta dos benefícios trazidos pelos
conceitos de canais excepcionais
explícitos e tratadores conectáveis
Robustez do Comportamento Excepcional
• neste trecho de código a
exceção ArgumentException
não é tratada pela aplicação
• no ECSFlow há como
representar um canal
excepcional global para
representar todas as exceções
do tipo e subtipo de
ArgumentException
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Ameaças à Validade do Experimento
• Participantes dos envolvidos na refatoração das aplicações
• Escolha das aplicações de análise
• Avaliação em outras linguagens da plataforma .NET
Ameaças à Validade do Experimento
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Considerações Finais
• Há limitações sobre o ponto de vista da robustez e manutenibilidade no
mecanismo de tratamento de exceção da linguagem C#
• O modelo EFlow propõe um mecanismo de tratamento de exceção que seja ao
mesmo tempo robusto e manutenível
• O ECSFlow é uma proposta de implementação do modelo EFlow para a
linguagem C#
• Através da coleta e análise de métricas foi realizada uma avaliação positiva do
uso do ECSFlow sobre o ponto de vista da robustez e manutenibilidade
Considerações Finais
• Implementar um add-in para a IDE Visual Studio para visualizar
rapidamente os canais excepcionais de uma determinada região do
código
• Replicar o estudo com aplicações de outros domínios
• Avaliar o nível de usabilidade do ECSFlow por meio de um experimento
controlado
• Validar a compatibilidade do ECSFlow com versões anteriores do .NET
Trabalhos Futuros
ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Referências
[1] RANDELL, B.; LEE, P.; TRELEAVEN, P. C. Reliability Issues in Computing System Design. ACM Computing Surveys, v. 10, n. 2, p. 123165, 1978.
ISSN 03600300.
[2] LEE, P.; ANDERSON, T. Dependable computing and fault-tolerant systems, vol. 3. Fault Tolerance: Principles and Practice. Springer Verlag,
New York, v. 753, 1990.
[3] RADATZ, J.; GERACI, A.; KATKI, F. Ieee standard glossary of software engineering terminology. IEEE Std, v. 610121990, n. 121990, p. 3, 1990.
[4] CACHO, N. et al. Trading robustness for maintainability: an empirical study of evolving C# programs. Proceedings of the 36th International
Conference on Software Engineering - ICSE 2014, n. iii, p. 584595, 2014.
[5] CACHO, N. A. A. Supporting Maintainable Exception Handling with Explicit Exception Channels. Tese (Doutorado) Lancaster University,
2008.
[6] GOODENOUGH, J. B. Exception handling: issues and a proposed notation. Communications of the ACM, ACM, v. 18, n. 12, p. 683 696,
1975.
[7] PULVERENTI, L. Emby. jun. 2016. Disponível em: <https://github.com/MediaBrowser/Emby>. Acesso em Junho 21, 2016.
[8] CABRAL, B.; MARQUES, P. Exception handling: A field study in java and. net. In: SPRINGER. European Conference on Object-
Oriented Programming. [S.l.], 2007. p. 151-175.
Referências
Frederico Nunes do Pranto Filho
fredericopranto@ppgsc.ufrn.br
fredericopranto@gmail.com
Obrigado!!

Mais conteúdo relacionado

Semelhante a Defesa de Mestrado - PPGSC UFRN

Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...Renato Groff
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeAdriano Tavares
 
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...Renato Groff
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipseFilipe Bezerra Sousa
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)Leandro Daniel
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Renato Groff
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Renato Groff
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Renato Groff
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...Renato Groff
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 

Semelhante a Defesa de Mestrado - PPGSC UFRN (20)

Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
Docker + Kubernetes: orquestrando containers e escalando rapidamente aplicaçõ...
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
 
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
1213 java
1213 java1213 java
1213 java
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Manual
ManualManual
Manual
 
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
 
ANTLR & ANTTLRWorks
ANTLR & ANTTLRWorksANTLR & ANTTLRWorks
ANTLR & ANTTLRWorks
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Csharp
CsharpCsharp
Csharp
 
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 

Defesa de Mestrado - PPGSC UFRN

  • 1. Frederico Nunes do Pranto Filho Exame de Defesa de Mestrado PPgSC - Programa de Pós-graduação em Sistemas e Computação Banca Examinadora: Nélio Alessandro Azevedo Cacho, Dr. Roberta de Souza Coelho, Dra. Francisco Dantas de Medeiros Neto, Dr.
  • 2. Frederico Nunes do Pranto Filho Natal-RN, 12 de Dezembro de 2016. ECSFlow: Implementação de um modelo de tratamento de exceção para C#
  • 3. • Introdução ▫ Problema ▫ Objetivo • ECSFlow ▫ Apresentação ▫ Objetivos ▫ Especificação ▫ Detalhes da implementação Roteiro • Análise do ECSFlow ▫ Definição do Estudo ▫ Coleta e Análise dos Dados ▫ Ameaças à Validade do Experimento • Considerações Finais ▫ Trabalhos Futuros • Referências
  • 4. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Introdução
  • 5. • Confiabilidade ▫ capacidade de um sistema de software entregar as suas funcionalidades sob condições normais e errôneas [1] ▫ Robustez  capacidade de um sistema para reagir a falhas de componentes [2] ▫ Manutenibilidade  refere-se à facilidade com a qual um produto de software pode ser modicado para correção de defeitos [3] Introdução
  • 6. • Como manter um sistema confiável? ▫ Técnicas de tolerância a falhas  implementadas através de mecanismos de tratamento de exceções • Mecanismos de tratamento de exceção ▫ Incorporar uma clara separação entre comportamento excepcional e comportamento normal Introdução
  • 7. • Mecanismos de tratamento de exceções dirigidos à robustez ▫ impõem a declaração de interfaces excepcionais nas assinaturas de métodos • Mecanismos de tratamento de exceções dirigidos à manutenção ▫ menos rígidos em relação à declaração de interfaces excepcionais ▫ busca facilitar a manutenção e evolução do comportamento normal e excepcional Introdução
  • 8. • O uso de mecanismos de tratamento de exceção dirigidos à manutenção, como em C#, mostra-se frágil e frequentemente leva a um decréscimo na robustez dos programas [4]: ▫ (i) a maioria das falhas são introduzidas durante o aprimoramento do código normal; ▫ (ii) falhas são introduzidas durante o aprimoramento do código excepcional; ▫ (iii) falhas são introduzidas devido a flexibilidade do mecanismo de tratamento de exceção dirigido à manutenção; Problema
  • 9. • Causas: ▫ há um forte acoplamento entre o código normal e excepcional ▫ observação sintática do relacionamento entre os comportamentos ▫ realização de checagens estáticas ▫ perspectiva geral do fluxo excepcional ▫ controle de fluxo excepcional implícito Problema
  • 10. • O modelo EFlow [5] ▫ define uma separação explícita entre os comportamentos normal e excepcional • A implementação ECSFlow ▫ uma concretização do modelo EFlow ▫ propõe melhorar a manutenibilidade e robustez na evolução do tratamento de exceção para a linguagem C# Problema
  • 11. • Apresentar uma proposta de implementação de um modelo de tratamento de exceção, chamado ECSFlow, para a linguagem C#, que promova o aumento da robustez, da manutenibilidade e da modularização ▫ Definir mecanismos para representar os canais excepcionais globais  propagação excepcional de forma explícita ▫ Definir mecanismos para representar os tratadores conectáveis  reuso do código excepcional  separação explícita entre os códigos normal e excepcional ▫ Avaliar o ECSFlow por meio de um estudo de caso de uma aplicação real. Objetivos
  • 12. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow
  • 13. • O modelo EFlow apresenta duas principais abstrações: ▫ Canais Excepcionais Explícitos  Locais de Lançamento  Locais Intermediários  Locais dos Tratadores de Exceções ▫ Tratadores Conectáveis ECSFlow
  • 14. • Objetivos da ferramenta proposta ▫ fornecer suporte completo para os canais excepcionais explícitos e tratadores conectáveis em uma linguagem de programação (C#); ▫ reduzir as limitações do modelo tradicional de tratamento de exceção da linguagem de programação C#. ECSFlow
  • 15. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow – Exemplo de Uso
  • 16. • Emby[7], um servidor de mídia open source • Exemplo de um controle de fluxo excepcional ▫ Salvando alguma configuração de preferências do usuário ECSFlow
  • 17. Canal_1 Canal Excepcional Explícito ( explicit exception channels ) ECSFlow
  • 18. Local de Lançamento para a exceção ArgumentNullException Canal_1 ECSFlow
  • 19. Local de Lançamento para a exceção ArgumentNullException Canal_1 ECSFlow
  • 21. Local de Tratamento Locais Intermediários Canal_1 ECSFlow
  • 23. ECSFlow Tratadores Conectáveis • Vantagens: ▫ reusabilidade do tratamento de exceção (tratadores conectáveis) ▫ evita a dispersão do código excepcional em toda a cadeia de chamada dos métodos (locais intermediários) ▫ contextos de tratamento de exceção (locais de lançamento)  componentes, métodos, classes, namespaces e instruções • Desvantagens: ▫ troca de contexto manual entre arquivos Canal_1 Local de Tratamento
  • 24. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow - Especificação
  • 25. • Determina como as exceções podem fluir através dos Locais de Lançamentos, Locais Intermediários e Locais de Tratamento. • Especificação ECSFlow: ExceptionChannel • Exemplo: ▫ ExceptionChannel (“Canal1", "ArgumentNullException") ▫ ExceptionChannel ("Canal1", "ArgumentNullException, OperationCanceledException","Exception"}) ▫ ExceptionChannel("Canal1 ", "SystemException+") ECSFlow – Canal Excepcional Explícito
  • 26. • É possível realizar a composição de vários canais excepcionais em uma representação de canal excepcional simples, tendo cada especificação um único local de lançamento • Especificação ECSFlow: ExceptionChannelComposite • Exemplo: ▫ ExceptionChannelComposite (“CanalComposto“, “Canal1, Canal2"}) ECSFlow – Composição de Canais
  • 27. • Determina a região do código que será o monitorada pelo canal excepcional explícito no caso do lançamento de uma exceção • Especificação ECSFlow: ExceptionRaiseSite • Exemplos: ▫ ExceptionRaiseSite (“Local1”, "MediaBrowser . Model .*") ▫ ExceptionChannel (“Canal1", "SystemException+“, “Local1”) ECSFlow – Local de Lançamento
  • 28. • É possível excluir do escopo de um determinado canal excepcional alguma região definida em um Local de Lançamento específico • Especificação ECSFlow: ExceptionRaiseSiteExclude • Exemplos: ▫ ExceptionRaiseSite (“Local1", "MediaBrowser.Model.*") ▫ ExceptionRaiseSiteExclude ("LocalExcluido", "Post") ▫ ExceptionChannel (“Canal1", "SystemException+, "Local1, LocalExcluido") ECSFlow - Excluindo um Local de Lançamento
  • 29. • O componente ExceptionHandler encapsula o código de tratamento de exceções que é executado quando um determinado ponto em um canal excepcional explícito é atingido. • Define a codificação da ação do comportamento excepcional. • Especificação ECSFlow: ExceptionHandler ECSFlow – Tratadores Conectáveis
  • 30. • Exemplo: ▫ ExceptionHandler(“Canal1", "Save", nameof(MethodInjectionCodeProvider. ArgumentExceptionException))) public static void ArgumentExceptionException(State state) { Console.WriteLine("Foi identificado um argumento inválido. Info: " + arg.Message); } ECSFlow – Tratadores Conectáveis
  • 31. • Determina uma forma comum para tratar todas as exceções que fluem através de um canal excepcional explícito • Especificação ECSFlow: ExceptionInterface • Exemplos: ▫ ExceptionInterface (“Canal2", "MediaBrowser.Controller.*", typeof ( ControllerException )) ▫ ExceptionInterface (“Canal1", "MediaBrowser.Model.*") ECSFlow - Interfaces Excepcionais
  • 32. • Dois canais diferentes podem, eventualmente, compartilhar o mesmo tipo de exceção, o mesmo local lançamento e o mesmo local de tratamento. • O conflito é descrito pela necessidade de definir qual tratador deverá ser executado pela primeira vez. • Especificação ECSFlow: ExceptionChannelPrecedence ECSFlow - Resolvendo Conflitos entre Canais
  • 33. • Exemplo: // Configuração 1 ExceptionRaiseSite(“Local1", "SaveDisplayPreferences") ExceptionChannel(“Canal1", "ArgumentNullException+", "Local1") ExceptionHandler("Canal1","Save", ...) ExceptionHandler("Canal1","GetDisplayPreferences", ...) // Configuração 2 ExceptionRaiseSite("Local2", "SaveDisplayPreferences") ExceptionChannel(“Canal2", "ArgumentNullException", "Local2") ExceptionHandler("Canal2","Save", ...) ExceptionHandler("Canal2","GetDisplayPreferences", ...) ▫ ExceptionChannelPrecedence("GetDisplayPreferences", “Canal1, Canal2”) ▫ ExceptionChannelPrecedence("Save", “Canal1, Canal2”) ECSFlow - Resolvendo Conflitos entre Canais
  • 34. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow - Detalhes da implementação
  • 35. • Plataforma .NET • um ambiente é composto de ferramentas, framework para execução, linguagens de programação e biblioteca de classes • plataforma multilinguagem • o código é compilado para uma linguagem intermediaria • Common Intermediate Language (CIL) • instrumentação de código por linguagem intermediária • alteração do código em tempo de compilação Ferramentas
  • 36. • ILSpy • Mono.Cecil • baseada no projeto Mono • realiza a leitura, manipulação e escrita de assembly .NET • define uma camada de abstrações para manipulação de operadores IL Ferramentas
  • 37. • Mono.Cecil • define um conjunto de classes estruturais que representam a composição de um assembly • Fody ▫ Desenvolvimento de um add-in Ferramentas
  • 38. • A linguagem de especificação do ECSFlow permite ao desenvolvedor configurar as abstrações do modelo de tratamento de exceção. • A especificação da linguagem é definida a partir de uma sintaxe natural ao desenvolvedor pois utiliza construções da linguagem C# • [assembly: ExceptionChannel("Canal1 ", "SystemException+") ] • Uso de Caracteres-Curinga • Validação do Arquivo de Especificação das abstrações ECSFlow • verificação do framework • verificação do ECSFlow Definição da linguagem de especificação do ECSFlow
  • 39. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Avaliação do ECSFlow
  • 40. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Definição do Estudo
  • 41. • Critérios para a seleção da aplicação avaliada: ▫ seleção realizada por Cabral[8] ▫ facilidade de execução ▫ facilidade de construção do projeto ▫ comportamento excepcional ▫ complexidade do projeto • AscGenerator ▫ 5 últimas versões ▫ 12.659 linhas de código, em média, por versão Definição do Estudo
  • 42. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Coleta e Análise dos Dados
  • 43. • RQ1. ▫ O uso do ECSFlow para modularizar o tratamento de exceções melhora a manutenibilidade do software? • RQ2 ▫ O uso do ECSFlow para modularizar o tratamento de exceções melhora a robustez do software? • Foi realizada uma comparação de métricas entre as implementações da aplicação em C# e ECSFlow Questões de Pesquisa
  • 45. Métricas de Interesses Transversais • Difusão dos Interesses Transversais sobre os Componentes ▫ No ECSFlow há somente um componente é responsável por manipular o comportamento excepcional
  • 46. Métricas de Interesses Transversais • Difusão dos Interesses Transversais sobre Operações ▫ No ECSFlow a quantidade de operações (métodos) responsável pela manipulação do comportamento foi reduzida  reuso do comportamento excepcional  na versão 2.0.0 alguns componentes foram movidos em projetos separados
  • 47. Métricas de Interesses Transversais • Difusão dos Interesses Transversais sobre LOC ▫ conta o número de pontos de transição para cada interesse transversal através das linhas de código
  • 48. Métricas de Interesses Transversais • Difusão dos Interesses Transversais sobre LOC ▫ devido a separação explícita entre os comportamentos normal e excepcional, não há pontos de transição  na versão 2.0.0 alguns componentes foram movidos em projetos separados
  • 49. Métricas de Tamanho • Tamanho do Vocabulário ▫ No ECSFlow devido à adição de mais um componente a métrica foi acrescida em mais 1.
  • 50. Métricas de Tamanho • Linhas de código ▫ Em média, a redução da quantidade de linhas de código do ECSFlow foi de 17,6%  reuso do comportamento excepcional  na versão 2.0.0 alguns componentes foram movidos em projetos separados
  • 51. Métricas de Acoplamento e Coesão • Acoplamento entre Componentes ▫ esta métrica realiza a contagem do número de componentes acessados por outros componentes  a diferença deveu-se principalmente pela redução do número de referências à classes de exceção em consequência da remoção dos blocos catch
  • 52. Análise de Impacto de Mudanças • Variação de mudanças (classes e métodos) entre as versões da aplicação ▫ análise manual da evolução entre versões ▫ analisa em que medida cada cenário de manutenção entre as versões analisadas envolveu alguma alteração no tratamento de exceção ClassesMétodos
  • 53. Análise de Impacto de Mudanças Variação das mudança de LOC entre as versões da aplicação • Variação das mudança de LOC entre as versões da aplicação ▫ alterações na evolução entre as versões 0.9.5 e 0.9.6 estão relacionadas à alterações no código normal, situação esta que é reduzida com a clara separação entre os comportamentos normal e excepcional
  • 54. Robustez do Comportamento Excepcional Percentual dos Fluxos Excepcionais por Tipo (Não Tradada, Subsumption, Mesma Exceção) • Percentual dos Fluxos Excepcionais por Tipo ▫ 92,15% dos fluxos excepcionais não- tratados encontrados foram causados pelas exceções ArgumentException e seus subtipos ▫ o gráfico mostra uma consequência direta dos benefícios trazidos pelos conceitos de canais excepcionais explícitos e tratadores conectáveis
  • 55. Robustez do Comportamento Excepcional • neste trecho de código a exceção ArgumentException não é tratada pela aplicação • no ECSFlow há como representar um canal excepcional global para representar todas as exceções do tipo e subtipo de ArgumentException
  • 56. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Ameaças à Validade do Experimento
  • 57. • Participantes dos envolvidos na refatoração das aplicações • Escolha das aplicações de análise • Avaliação em outras linguagens da plataforma .NET Ameaças à Validade do Experimento
  • 58. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Considerações Finais
  • 59. • Há limitações sobre o ponto de vista da robustez e manutenibilidade no mecanismo de tratamento de exceção da linguagem C# • O modelo EFlow propõe um mecanismo de tratamento de exceção que seja ao mesmo tempo robusto e manutenível • O ECSFlow é uma proposta de implementação do modelo EFlow para a linguagem C# • Através da coleta e análise de métricas foi realizada uma avaliação positiva do uso do ECSFlow sobre o ponto de vista da robustez e manutenibilidade Considerações Finais
  • 60. • Implementar um add-in para a IDE Visual Studio para visualizar rapidamente os canais excepcionais de uma determinada região do código • Replicar o estudo com aplicações de outros domínios • Avaliar o nível de usabilidade do ECSFlow por meio de um experimento controlado • Validar a compatibilidade do ECSFlow com versões anteriores do .NET Trabalhos Futuros
  • 61. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Referências
  • 62. [1] RANDELL, B.; LEE, P.; TRELEAVEN, P. C. Reliability Issues in Computing System Design. ACM Computing Surveys, v. 10, n. 2, p. 123165, 1978. ISSN 03600300. [2] LEE, P.; ANDERSON, T. Dependable computing and fault-tolerant systems, vol. 3. Fault Tolerance: Principles and Practice. Springer Verlag, New York, v. 753, 1990. [3] RADATZ, J.; GERACI, A.; KATKI, F. Ieee standard glossary of software engineering terminology. IEEE Std, v. 610121990, n. 121990, p. 3, 1990. [4] CACHO, N. et al. Trading robustness for maintainability: an empirical study of evolving C# programs. Proceedings of the 36th International Conference on Software Engineering - ICSE 2014, n. iii, p. 584595, 2014. [5] CACHO, N. A. A. Supporting Maintainable Exception Handling with Explicit Exception Channels. Tese (Doutorado) Lancaster University, 2008. [6] GOODENOUGH, J. B. Exception handling: issues and a proposed notation. Communications of the ACM, ACM, v. 18, n. 12, p. 683 696, 1975. [7] PULVERENTI, L. Emby. jun. 2016. Disponível em: <https://github.com/MediaBrowser/Emby>. Acesso em Junho 21, 2016. [8] CABRAL, B.; MARQUES, P. Exception handling: A field study in java and. net. In: SPRINGER. European Conference on Object- Oriented Programming. [S.l.], 2007. p. 151-175. Referências
  • 63. Frederico Nunes do Pranto Filho fredericopranto@ppgsc.ufrn.br fredericopranto@gmail.com Obrigado!!

Notas do Editor

  1. Lesson descriptions should be brief.
  2. Example objectives At the end of this lesson, you will be able to: Save files to the team Web server. Move files to different locations on the team Web server. Share files on the team Web server.
  3. Example objectives At the end of this lesson, you will be able to: Save files to the team Web server. Move files to different locations on the team Web server. Share files on the team Web server.
  4. Example objectives At the end of this lesson, you will be able to: Save files to the team Web server. Move files to different locations on the team Web server. Share files on the team Web server.
  5. Example objectives At the end of this lesson, you will be able to: Save files to the team Web server. Move files to different locations on the team Web server. Share files on the team Web server.
  6. Example objectives At the end of this lesson, you will be able to: Save files to the team Web server. Move files to different locations on the team Web server. Share files on the team Web server.
  7. Example objectives At the end of this lesson, you will be able to: Save files to the team Web server. Move files to different locations on the team Web server. Share files on the team Web server.