Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Defesa de Mestrado - PPGSC UFRN

19 vues

Publié le

Defesa de Mestrado - PPGSC UFRN

ECSFlow: Implementação de um modelo de
tratamento de exceção para C#

Publié dans : Technologie
  • Soyez le premier à commenter

Defesa de Mestrado - PPGSC UFRN

  1. 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. 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. 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. 4. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Introdução
  5. 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. 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. 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. 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. 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. 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. 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. 12. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow
  13. 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. 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. 15. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow – Exemplo de Uso
  16. 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. 17. Canal_1 Canal Excepcional Explícito ( explicit exception channels ) ECSFlow
  18. 18. Local de Lançamento para a exceção ArgumentNullException Canal_1 ECSFlow
  19. 19. Local de Lançamento para a exceção ArgumentNullException Canal_1 ECSFlow
  20. 20. Local de Tratamento Canal_1 ECSFlow
  21. 21. Local de Tratamento Locais Intermediários Canal_1 ECSFlow
  22. 22. Tratadores Conectáveis Canal_1 Local de Tratamento ECSFlow
  23. 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. 24. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow - Especificação
  25. 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. 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. 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. 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. 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. 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. 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. 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. 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. 34. ECSFlow: Implementação de um modelo de tratamento de exceção para C# ECSFlow - Detalhes da implementação
  35. 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. 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. 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. 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. 39. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Avaliação do ECSFlow
  40. 40. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Definição do Estudo
  41. 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. 42. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Coleta e Análise dos Dados
  43. 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
  44. 44. Suíte de Métricas
  45. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 56. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Ameaças à Validade do Experimento
  57. 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. 58. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Considerações Finais
  59. 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. 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. 61. ECSFlow: Implementação de um modelo de tratamento de exceção para C# Referências
  62. 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. 63. Frederico Nunes do Pranto Filho fredericopranto@ppgsc.ufrn.br fredericopranto@gmail.com Obrigado!!

×