Frederico Nunes do Pranto Filho está defendendo seu mestrado sobre a implementação de um modelo de tratamento de exceção chamado ECSFlow para a linguagem C#. O ECSFlow visa melhorar a manutenibilidade e robustez dos sistemas ao separar explicitamente o código normal do código excepcional. A avaliação do ECSFlow é realizada por meio de métricas e análise de impacto de mudanças em versões de uma aplicação real chamada AscGenerator.
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
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
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
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
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
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
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
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
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
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
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
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
Lesson descriptions should be brief.
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.
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.
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.
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.
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.
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.