O documento descreve a implementação do modelo ECSFlow para tratamento de exceções na linguagem C#. O ECSFlow fornece canais excepcionais explícitos e tratadores conectáveis para melhorar a robustez, manutenibilidade e modularização do código. A especificação do ECSFlow define os componentes desse modelo, como canais excepcionais, locais de lançamento e tratamento de exceções.
1. Frederico Nunes do Pranto Filho
Exame de Qualificação
PPgSC - Programa de Pós-graduação em Sistemas e Computação
Banca Examinadora:
Prof. Dr. Nélio Alessandro Azevedo Cacho
Prof. Dr. Fernando Figueira Filho
Prof. Dr. Carlos Eduardo da Silva
2. Frederico Nunes do Pranto Filho
ECSFlow: Implementação de um modelo de
tratamento de exceção para C#
3. • Introdução
▫ Problema
▫ Objetivo
• Defeito, Erro, Falha
• Tratamento de Exceções
• Mecanismos de tratamento
de exceção
• Abordagens de tratamento
de exceção
Roteiro
• ECSFlow
▫ Apresentação
▫ Objetivos
▫ Especificação
▫ Detalhes da implementação
Plataforma .NET
Análise estática
Ferramentas utilizadas
4. • Um sistema confiável precisa garantir que seus serviços continuarão
executando corretamente mesmo na presença de situações errôneas
• Confiabilidade
▫ Confiabilidade diz respeito à capacidade de um sistema de software entregar as
suas funcionalidades sob condições normais e errôneas [1].
▫ Robustez
Caracteriza a capacidade de um sistema para reagir a falhas de componentes [2]
▫ Manutenabilidade
Refere-se à facilidade com a qual um produto de software pode ser modicado para
correção de defeitos, para atender novos requisitos, para tornar mais fácil futuras
manutenções, ou adaptação para mudanças de ambiente [3]
Introdução
5. • Técnicas de tolerância a falhas visam manter o sistema em
funcionamento mesmo diante da ocorrência de falhas
▫ Implementadas através de mecanismos de tratamento de exceções
• Mecanismos de tratamento de exceção foram originalmente concebidos
para, principalmente, incorporar uma clara separação entre
comportamento excepcional e comportamento normal
Problema
6. • Linguagens de programação como C#, C++, Ruby e Python, têm
defendido mecanismos de tratamento de exceção cada vez menos
rígidos, que tem por objetivo, facilitar a modificação e reutilização do
comportamento normal.
▫ Mecanismos de tratamento de exceções dirigidos à manutenção
• Esses mecanismos não impõem declarações de interfaces excepcionais
nas assinaturas de métodos.
▫ Mecanismos de tratamento de exceções dirigidos à robustez
Problema
7. • Mesmo assim, 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. Conforme (CACHO, N. et al,
2014) :
▫ (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
8. • Há um forte acoplamento entre o código normal e excepcional no
tratamento de exceção da linguagem C#.
• Este relacionamento é dificil de ser observado sintaticamente pelos
programadores.
• Além do forte acoplamento, a falta de checagem estática colabora na
introdução de falhas no código de tratamento de exceção.
• O suporte ao tratamento de exceção dos modelos dirigidos à
manutenção, como em C#, precisa ser aprimorado.
Problema
9. • Apresentar uma implementação do 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 canais excepcionais globais
▫ Definir mecanismos para fornecer suporte ao reuso do código excepcional
e que permitam a separação explícita entre os códigos normal e
excepcional.
• ECSFlow é uma concretização do modelo EFlow [5]
Objetivos
11. Defeito, Erro, Falha
• Um sistema de software consiste de um conjunto de componentes que
interagem de acordo com o especificado em um projeto de software
• O sistema de software tem como objetivo entregar o serviço de acordo
com as especificações do projeto, mantendo-se em um estado
consistente.
• Caso na entrega do serviço, o estado sofra alguma alteração que o torne
inconsistente, ocorreu um erro.
12. Defeito, Erro, Falha
• Uma falha é a manifestação de um ou mais erros e é de percepção
externa.
• Defeito é o problema ou causa hipotética que pode ter originado o erro.
Um defeito pode ser originado internamente pelo sistema ou algum de
seus componentes (código-fonte), ou de forma externa ao sistema
(falha de hardware)
14. • Torna as aplicações mais robustas e confiáveis
▫ Um tratamento de exceções deve permitir que o sistema seja capaz de
reagir apropriadamente diante de condições excepcionais, garantindo a
integridade do estado atual dos sistema
• A atividade de um sistema pode ser dividida em: normal e excepcional
Tratamento de Exceções
15. • Se o sistema não conseguir
responder uma requisição
de serviço, ele irá retornar
uma exceção.
• Classificação de exceções
• Exceções de interface
• Exceções de falha
• Exceções internas
Tratamento de Exceções
16. ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
Mecanismos de Tratamento de Exceções
17. • Fornece meios de detecção, sinalização e tratamento de erros [6]
▫ (i) detecção de uma ocorrência de exceção
▫ (ii) desvio do fluxo normal do programa para o fluxo excepcional
▫ (iii) localização do código de tratamento da exceção
▫ (iv) execução do código que irá lidar com a exceção.
• Elementos dos mecanismos de tratamento de exceção
▫ sinalizador de exceção (exception signaler)
▫ tratador de exceção (exception handler)
▫ contexto de tratamento de exceções (exception handling contexts - EHC)
Mecanismos de Tratamento de Exceções
18. • Hieraquia de classes
▫ Na maioria das linguagens de programação,
uma exceção é um objeto que herda de um
tipo excepcional, por exemplo, em .NET as
exceções são subtipos de System.Exception
em Java as exceções são subtipos
de java.lang.Throwable
• Subsumption
▫ Quando uma exceção é sinalizada e não
existe um tratador específico, ela pode
ser capturada por um tratador que é um
supertipo da mesma
Mecanismos de Tratamento de Exceções
19. • Interface de Exceção
▫ A interface de exceção é utilizada em algumas linguagens de programação
para explicitar quais exceções podem ser lançadas por um método
▫ As exceções são divididas em
(i) exceções checadas
(ii) exceções não-checadas
▫ A linguagem C# não possui
interface excepcional
Documentação
Mecanismos de Tratamento de Exceções
20. • Vinculação de Tratadores
▫ Há vários tipos de contexto de tratamento de exceções:
instrução, bloco,
método, objeto, classe
e exceção
Mecanismos de Tratamento de Exceções
try {S}
catch (E1 x) {T}
catch (E2 x) {T}
21. • Ligação de Tratador
▫ Determina como o mecanismo de tratamento de exceções procura o
tratador
▫ Filtros de exceção
Mecanismos de Tratamento de Exceções
static void Main ()
{
try {
Foo.DoSomethingThatMightFail ( null );
} catch ( MyException mex) when (mex. Code == 42) {
Console . WriteLine (" Error 42 occurred ");
} catch (Exception ex) {
Console . WriteLine (" Error occurred ");
}
}
23. • Os mecanismos de tratamento de exceção existentes tornam difícil a
implementação de um tratamento de erro robusto, manutenível e
modular na presença de mudanças.
• interface excepcional
• separação de responsabilidades (comportamento normal e excepcional)
• espalhamento do código excepcional
• dependência entre módulos
• reuso do comportamento normal e excepcional
• Neste contexto, este trabalho apresenta uma implementação de um modelo
de tratamento de exceção para a linguagem C#
ECSFlow
24. • O ECSFlow apresenta duas principais abstrações :
▫ Canais Excepcionais Explícitos ( explicit exception channels )
Locais de Lançamento ( raising sites )
Locais intermediários (intermediate sites)
Locais dos Tratadores de Exceções ( handlers )
▫ Tratadores Conectáveis ( pluggable handlers )
ECSFlow
25. • Objetivos
▫ fornecer suporte completo para canais excepcionais explícitos e tratadores
conectáveis em uma linguagem de programação (C#);
▫ abordar as limitações do modelo tradicional de tratamento de exceção da
linguagem de programação C#.
• Especificação do ECSFlow
▫ definição dos canais excepcionais explícitos;
▫ definição dos tratadores conectáveis dos canais excepcionais;
▫ especificação das interfaces dos canais excepcionais;
▫ resolução de possíveis conflitos na definição de canais excepcionais;
ECSFlow
26. • Exemplo de um fluxo de controle de
exceção de uma aplicação open source
chamada Emby [7], um servidor de
mídia que converte e disponibiliza, via
streaming, vários tipos de mídia para
vários tipos de dispositivos
ECSFlow – Na prática
28. ECSFlow – Na prática
ECC1
Local de Lançamento (raising site)
para a exceção ArgumentNullException
29. ECSFlow – Na prática
ECC1
Local de Lançamento (raising site)
para a exceção ArgumentNullException
30. ECSFlow – Na prática
ECC1
Local de Tratamento
( handling site )
31. ECSFlow – Na prática
ECC1
Local de Tratamento
( handling site )
Locais Intermediários
( intermediate sites )
32. ECSFlow – Na prática
ECC1
Local de Tratamento
( handling site )
Tratadores Conectáveis
(pluggable handlers)
• Reusabilidade do tratamento de exceção
• Evita a dispersão do código excepcional em toda
a cadeia de chamada dos métodos
• Contextos de tratamento de exceção (exception
handling contexts)
▫ Componentes, métodos, classes, namespaces e
instruções
34. • Determinam como as exceções podem fluir através dos Locais de
Lançamentos, Locais Intermediários e Locais de Tratamento.
• Especificação ECSFlow
▫ ExceptionChannel
• Exemplos
▫ [assembly : ExceptionChannel ("EEC1", "ArgumentNullException")]
▫ [assembly : ExceptionChannel ("EEC1", new string []
{"ArgumentNullException","OperationCanceledException","Exception"})]
▫ [assembly : ExceptionChannel("EEC1", "SystemException", true)]
ECSFlow – Definindo Canais Excepcionais Explícitos
35. • É 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
• Exemplos:
▫ [ assembly : ExceptionChannelComposite ("EECComposite", new string []
{"EEC1"," EEC2"})]
ECSFlow – Composição de Canais
36. • É possível especificar o Local de Lançamento do canal excepcional
explícito
• Especificação ECSFlow
▫ ExceptionRaiseSite
• Exemplos:
▫ [assembly : ExceptionRaiseSite ("rSite1","MediaBrowser . Model .*")]
▫ [assembly : ExceptionChannel ("EEC1"," SystemException",true ,"rSite1")]
ECSFlow – Definindo Local de Lançamento
37. • O componente ExceptionRaiseSiteExclude representa o Local de
Lançamento que deve ser excluídos do canal excepcional
• Especificação ECSFlow
▫ ExceptionRaiseSiteExclude
• Exemplos:
▫ [ assembly : ExceptionRaiseSite ("rSite1 "," MediaBrowser . Model .*")]
▫ [ assembly : ExceptionRaiseSiteExclude ("iSite1","Post ()")]
▫ [ assembly : ExceptionChannel ("EEC1",new string [] {"SystemException"},
• true , new string [] {"rSite1","iSite1"})]
ECSFlow - Excluindo Local de Lançamento
38. • Este componente encapsula o código de tratamento de exceções que é
executado quando um determinado ponto em um canal excepcional explícito é
atingido. Especifica o Local de Tratamento.
• Especificação ECSFlow
▫ ExceptionHandler
• Exemplo:
▫ [assembly: ExceptionHandler("EEC1","ArgumentNullException","Save()",
handlerEEC1)]
ECSFlow – Definindo Tratadores Conectáveis
39. • O componente ExceptionInterface trata todas as exceções que fluem
através de um canal excepcional explícito
• Especificação ECSFlow
▫ ExceptionInterface
• Exemplos:
▫ [assembly : ExceptionInterface (" EEC2 ", " MediaBrowser . Controller .*",
typeof ( ControllerException ))]
▫ [assembly : ExceptionInterface (" EEC1 ", " MediaBrowser . Model .*")]
ECSFlow - Especificando Interfaces Excepcionais
40. • 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
41. • Exemplos:
//---- Arquivo de Configuração 1 ----
[assembly: ExceptionRaiseSite("rSite1", "SaveDisplayPreferences()")]
[assembly: ExceptionChannel("EEC1", new string[] { "ArgumentNullException"}, true, "rSite1")]
[assembly: ExceptionHandler("EEC1","Save()", ...)]
[assembly: ExceptionHandler("EEC1","GetDisplayPreferences()", ...)]
//---- Arquivo de Configuração 2 ----
[assembly: ExceptionRaiseSite("rSite2", "SaveDisplayPreferences()")]
[assembly: ExceptionChannel("EEC2", new string[] { "ArgumentNullException"}, false, "rSite2")]
[assembly: ExceptionHandler("EEC2","Save()", ...)]
[assembly: ExceptionHandler("EEC2","GetDisplayPreferences()", ...)]
▫ [assembly: ExceptionChannelPrecedence("GetDisplayPreferences()", new string[] { "EEC2","EEC1"})]
▫ [assembly: ExceptionChannelPrecedence("Save()", new string[] { "EEC1","EEC2"})]
ECSFlow - Resolvendo Conflitos entre Canais
42. ECSFlow: Implementação de um modelo de tratamento de exceção para
C#
ECSFlow - Detalhes da implementação
43. • Um ambiente é composto de ferramentas, framework para execução,
linguagens de programação e biblioteca de classes que suportam a
construção de aplicações desktop, mobile, sistemas distribuídos,
componentes, páginas dinâmicas para Web e XML Web Services.
• A plataforma .NET foi construída para suportar o paradigma multi-linguagem
• O código é compilado para uma linguagem intermediaria (Intermediate
Language – IL)
Plataforma .NET
44. • Componentes da arquitetura .NET:
• Linguagem de programação;
• VB.NET, C#, F#, J#
• Metadata;
• Definições internas
• Assembly;
• unidade de código resultante (.exe, .dll)
• CLR - Common Language Runtime;
• máquina virtual, gerencia recursos
• Biblioteca de classes (Base Class Library)
• classes básicas
Plataforma .NET
45. • Análise estática consiste no processo de extração de informação sobre a
semântica do código em tempo de compilação.
• A extração pode ser feita diretamente no código-fonte ou no código objeto
(ILCode)
• Tipos de análise estática:
• Análise de código;
• Verificação estrutural;
• Análise de dados;
• Verificação de sequência
Análise Estática
46. • Ferramentas utilizadas
▫ Fody - uma ferramenta open source para modicar o IL dos assemblies .NET
em tempo de compilação.
▫ Mono.Cecil - uma biblioteca para gerar e inspecionar bibliotecas .NET
▫ Custom Attributes (anotações) – são metadados que podem ser associados a
estruturas no código e posteriormente avaliadas em tempo de compilação ou
execução do programa.
▫ ILMerge – é um utilitário que pode ser usado para realizar a união (merge) de
múltiplos assemblies em um único assembly.
ECSFlow - Detalhes da implementação
47. • Code weaving – é o processo de injetar código em uma aplicação
existente.
▫ (i) ler as informações de metadados dos módulos .NET;
▫ (ii) decodica as instruções IL em um formato mais amigável;
▫ (iii) detecta os pontos onde as novas instruções que serão injetadas;
▫ (iv) reestrutura os métodos em que o tratamento excepcional será alterado;
(v) injeta as novas instruções IL;
▫ (vi) reescreve o assembly em memória para uma representação em arquivo
binário.
▫ (vii) reescreve o assembly em disco
ECSFlow - Detalhes da implementação
49. [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.
Referências
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.