• Nenhum resultado encontrado

Os mecanismos de tratamentos de exceção vêm sendo utilizados como uma forma de auxiliar os desenvolvedores a construir aplicações mais robustas (PARNAS; WÜRGES, 1976). Estudos têm mostrado que, embora uma grande quantidade código seja dedicada à descoberta e tratamento de erros, as manifestações de erros e exceções tem recebido pouca atenção. Os desenvolvedores tendem a concentrar suas atividades no design do comportamento normal da aplicação e esquecem-se do design do comportamento do tratamento de exceções (SHAH; GÖRG; HARROLD, 2008).

Neste trabalho nós apresentamos uma abordagem que permiti a especificação e ve- rificação de regras de design voltadas para o comportamento excepcional de aplicações Java. Essa abordagem se constitui na seguinte sequência de atividades que visa garantir que as regras de design de comportamento excepcional não sejam degradadas em relação ao que está implementado na aplicação: (i) definir as regras de design excepcionais da aplicação; (ii) escrever as regras de design na linguagem ECL; (iii) executar a aplicação a fim de exercitar os fluxos excepcionais; (iv) avaliar os resultados.

Para apoiar a abordagem foi desenvolvida uma ferramenta, a DAEH (Dynamic Analysis Of Exception Handling), que permite realizar a verificação das regras de design excepcionais enquanto a aplicação é executada. Permite também enviar as violações das regras a um servidor remoto. Para não degradar o desempenho da aplicação monitorada a DAEH possui um mecanismo que paraleliza a verificação das regras.

Foi proposto e realizado três estudos de caso preliminar para comprovar a eficácia da ferramenta, no primeiro estudo avaliou-se dois grandes sistemas WEB, no segundo estudo de caso avaliou-se um conjunto de versões do framework JUnit e no terceiro avaliou o aplicativo mobile do SIGAA. Nossos resultados indicam que a abordagem pode ser usada para especificar e dinamicamente verificar a política de tratamento de condições excepcionais de um sistema Java.

6.1

Contribuições

As principais contribuições desta dissertação são as seguintes:

∙ avaliação crítica de ferramentas e estratégias de verificação do fluxo excepcional. Essa avaliação serviu para levantar os requisitos para desenvolver este trabalho;

∙ projeto da linguagem ECL que possibilita a definição de regras design referentes ao fluxo excepcional;

∙ implementação da ferramenta DAEH. Com o intuito de avaliar a aplicabilidade da solução, foi implementado um protótipo de uma ferramenta, chamada DAEH, que verifica se uma aplicação obedece as regras definidas pela ECL;

∙ estudos de caso para avaliar a linguagem ECL e a ferramenta DAEH. As ferramentas foram aplicadas a dois grandes sistemas WEB (SIGRH e SIGAA), utilizados pela UFRN. Também foi aplicado ao framework JUnit e a um aplicativo mobile.

6.2

Limitações

A grande limitação deste trabalho para identificar as violações às regras de design é a necessidade de execução dos fluxos excepcionais da aplicação. Dessa forma uma aplicação só será cem por porcento analisada pela nossa abordagem se todos os seus fluxos excepcionais forem exercitados. Porém essa limitação é inerente à técnica adotada que é a análise dinâmica.

Por fim, acredita-se que é necessário realizar mais estudos de casos para ser mais confiante da eficiência e benefícios da DAEH e da ECL, em garantir que a implementação do sistema segue a política de tratamento de exceções previamente definida.

6.3

Trabalhos futuros

Embora a ferramenta esteja funcional e já tenha sido utilizada em um ambiente de desenvolvimento real, ela ainda precisa passar por melhorias, para se tornar uma ferramenta robusta pronta para o uso. Portanto listamos as melhorias e trabalhos futuros possíveis.

∙ estudo para avaliar a compreensão da ECL pelos desenvolvedores. Aplicar a ECL a um grupo de desenvolvedores e verificar se é aderente ao seu dia dia no trabalho;

∙ permitir na ECL definir todas as exceções que um handler pode capturar, caso capture um exceção diferente das especificadas, deve ser notificado uma violação.

∙ realizar um levantamento do que é feito na maioria dos blocos catch do SIGRH e SIGAA, já que possuem uma grande quantidade desse tipo de construções.

∙ desenvolver para a ECL mecanismo que identifique inconsistência nas regras de design criadas. Um exemplo de inconsistência seria definir em regras distindas do tipo full para a mesma combinação signaler e exception dois handler distintos.

∙ fazer estudo para avaliar adoção de melhor estética para a ECL.

∙ análise da ECL com o intuito de definir novas construções para a linguagem ECL, a fim de torná-la ainda mais prática para definição das regras de design. Essa análise será feita com base nos comentários dos usuários e dos arquitetos de software experientes;

∙ permitir que a ECL seja utilizada também para realizar análise estática do trata- mento de exceções, possibilitando assim que as regras definidas na ECL possam ser verificadas de forma dinâmica e estática. Para isso deverá ser desenvolvida uma outra ferramenta de verificação para a análise estática e a DAEH continuará realizando a análise de forma dinâmica.

∙ investigar técnicas que permitam extrair as regras do fluxo excepcional de forma automática ou semi-automática através da análise do código fonte. Dessa forma um conjunto inicial de regras seria criado e poderia ser aprimorado pelo arquiteto de software. Diminuindo assim o maior esforço da abordagem que é a criação das regras;

∙ investigar e desenvolver técnica para minerar a base de violações geradas pela DAEH a fim de descobrir padrões e extrair informações úteis ao arquiteto do sistema;

∙ analisar como os mecanismos de tratamento de exceções evolui com o passar do tempo.

∙ outra melhoria seria possibilitar que a definição e verificação das regras da ECL sejam feitas no servidor da DAEH, deixando assim a ferramenta de monitoramento com a opção de apenas interceptar todos os tratamentos das exceções e envia-los ao servidor. Com essa melhoria é possível realizar a verificação das regras de design com a ECL de qualquer ferramenta de monitoramento que esta enviado os dados para o servidor. Assim poderiam existir outros monitores de terceiros.

∙ a longo prazo, no campo mobile, seria interessante também oferecer suporte a outras plataformas como iOS e Windows Phone.

A longo prazo, caso a adoção da ferramenta pelas equipes de desenvolvimento seja satisfatória pode se modificar a ECL e a ferramenta DAEH para definir e verificar regras de design que não estejam vinculadas somente com o tratamento de exceções. Essa alteração teria um impacto grande na ferramenta e grandes desafios a serem superados, o maior seria o impacto causado por instrumentar e interceptar todo o fluxo de execução de um sistema.

Referências

AVIŽIENIS, A. et al. Basic concepts and taxonomy of dependable and secure computing. Dependable and Secure Computing, IEEE Transactions on, IEEE, v. 1, n. 1, p. 11–33, 2004.

BALDWIN, C. Y.; CLARK, K. B. Design rules: The power of modularity. [S.l.]: MIT press, 2000.

BARBOSA, E. et al. Enforcing exception handling policies with a domain-specific language. IEEE.

BERNARDO, R. D. et al. Agile testing of exceptional behavior. In: IEEE. Software Engineering (SBES), 2011 25th Brazilian Symposium on. [S.l.], 2011. p. 204–213. BRUNET, J.; GUERRERO, D.; FIGUEIREDO, J. Design tests: An approach to programmatically check your code against design rules. In: IEEE. Software Engineering-Companion Volume, 2009. ICSE-Companion 2009. 31st International Conference on. [S.l.], 2009. p. 255–258.

BRUNTINK, M.; DEURSEN, A. V.; TOURWÉ, T. Discovering faults in idiom-based exception handling. In: ACM. Proceedings of the 28th international conference on Software engineering. [S.l.], 2006. p. 242–251.

CABRAL, B.; MARQUES, P. Exception handling: A field study in java and. net. In: ECOOP 2007–Object-Oriented Programming. [S.l.]: Springer, 2007. p. 151–175.

COELHO, R. et al. Assessing the impact of aspects on exception flows: An exploratory study. In: ECOOP 2008–Object-Oriented Programming. [S.l.]: Springer, 2008. p. 207–234.

COELHO, R. et al. Unveiling and taming liabilities of aspects in the presence of exceptions: A static analysis based approach. Information Sciences, Elsevier, v. 181, n. 13, p. 2700–2720, 2011.

CORNELISSEN, B. et al. A systematic survey of program comprehension through dynamic analysis. Software Engineering, IEEE Transactions on, IEEE, v. 35, n. 5, p. 684–702, 2009.

CRISTIAN, F. Exception handling and software fault tolerance. Computers, IEEE Transactions on, IEEE, v. 100, n. 6, p. 531–540, 1982.

ECLIPSE. 2016. https://eclipse.org/. Accessed: 2016-01-10.

ECLIPSE - AspectJ. 2016. http://www.eclipse.org/ajdt/. Accessed: 2016-01-10.

ELRAD, T.; FILMAN, R. E.; BADER, A. Aspect-oriented programming: Introduction. Communications of the ACM, ACM, v. 44, n. 10, p. 29–32, 2001.

FIELDING, R. T. Architectural styles and the design of network-based software architectures. Tese (Doutorado) — University of California, Irvine, 2000.

FOWLER, M. Patterns of enterprise application architecture. [S.l.]: Addison-Wesley Longman Publishing Co., Inc., 2002.

FU, C.; RYDER, B. G. Exception-chain analysis: Revealing exception handling architecture in java server applications. In: IEEE. Software Engineering, 2007. ICSE 2007. 29th International Conference on. [S.l.], 2007. p. 230–239.

GARCIA, A.; RUBIRA, C. M. F. et al. Extracting error handling to aspects: A cookbook. In: IEEE. Software Maintenance, 2007. ICSM 2007. IEEE International Conference on. [S.l.], 2007. p. 134–143.

GARCIA, A. F. et al. A comparative study of exception handling mechanisms for building dependable object-oriented software. Journal of systems and software, Elsevier, v. 59, n. 2, p. 197–222, 2001.

GOODENOUGH, J. B. Exception handling: issues and a proposed notation. Communications of the ACM, ACM, v. 18, n. 12, p. 683–696, 1975.

GOSLING, J. The Java language specification. [S.l.]: Addison-Wesley Professional, 2000.

GURGEL, A. et al. Blending and reusing rules for architectural degradation prevention. In: ACM. Proceedings of the 13th international conference on Modularity. [S.l.], 2014. p. 61–72.

HIGHLEY, T. et al. Aspect oriented programming: A critical analysis of a new programming paradigm. Citeseer, 1999.

JIN, D. et al. Javamop: Efficient parametric runtime monitoring framework. In: IEEE. Software Engineering (ICSE), 2012 34th International Conference on. [S.l.], 2012. p. 1427–1430.

KRUCHTEN, P.; LAGO, P.; VLIET, H. V. Building up and reasoning about architectural knowledge. In: Quality of Software Architectures. [S.l.]: Springer, 2006. p. 43–58.

LADDAD, R. AspectJ in action: practical aspect-oriented programming. [S.l.]: Dreamtech Press, 2003.

LARUS, J. R.; BALL, T. Rewriting executable files to measure program behavior. Softw., Pract. Exper., v. 24, n. 2, p. 197–218, 1994.

MANDRIOLI, D.; MEYER, B. Advances in object-oriented software engineering. [S.l.]: Prentice-Hall, Inc., 1992.

MARINESCU, C. Are the classes that use exceptions defect prone? In: ACM. Proceedings of the 12th International Workshop on Principles of Software Evolution and the 7th annual ERCIM Workshop on Software Evolution. [S.l.], 2011. p. 56–60.

MEDEIROS, W. J. D. RASTHRO: UMA FERRAMENTA ORIENTDA A ASPECTOS PARA MONITORAMENTO DE EXCECOES EM APLICACOES ANDROID. Dissertação (Mestrado) — Universidade Federal do Rio Grande do Norte, 2015.

MILLER, R.; TRIPATHI, A. Issues with exception handling in object-oriented systems. In: ECOOP’97?Object-Oriented Programming. [S.l.]: Springer, 1997. p. 85–103.

OSSHER, H. L.; TARR, P. L. Operation-level composition: A case in (join) point. In: SPRINGER. Object-Oriented Technology: ECOOP?98 Workshop Reader. [S.l.], 1998. p. 406–409.

PARNAS, D. L. Software aging. In: IEEE COMPUTER SOCIETY PRESS. Proceedings of the 16th international conference on Software engineering. [S.l.], 1994. p. 279–287.

PARNAS, D. L. On the criteria to be used in decomposing systems into modules. In: Software pioneers. [S.l.]: Springer, 2002. p. 411–427.

PARNAS, D. L.; WÜRGES, H. Response to undesired events in software systems. In: IEEE COMPUTER SOCIETY PRESS. Proceedings of the 2nd international conference on Software engineering. [S.l.], 1976. p. 437–446.

PETERS, L. J. Software design: Methods and techniques. [S.l.]: Yourdon, 1981.

PINTO, F. A. P. AN AUTOMATED APPROACH FOR PERFORMANCE DEVIATION ANALYSIS OF EVOLVING SOFTWARE SYSTEMS. Dissertação (Mestrado) —

Universidade Federal do Rio Grande do Norte, 2015.

REPS, T. et al. The use of program profiling for software maintenance with applications to the year 2000 problem. [S.l.]: Springer, 1997.

ROBILLARD, M. P.; MURPHY, G. C. Designing robust java programs with exceptions. In: ACM. ACM SIGSOFT Software Engineering Notes. [S.l.], 2000. v. 25, n. 6, p. 2–10.

ROBILLARD, M. P.; MURPHY, G. C. Static analysis to support the evolution of exception structure in object-oriented systems. ACM Transactions on Software Engineering and Methodology (TOSEM), ACM, v. 12, n. 2, p. 191–221, 2003.

SALES, R.; COELHO, R. Preserving the exception handling design rules in software product line context: A practical approach. In: IEEE. Dependable Computing Workshops (LADCW), 2011 Fifth Latin-American Symposium on. [S.l.], 2011. p. 9–16.

SAWADPONG, P.; ALLEN, E. B.; WILLIAMS, B. J. Exception handling defects: An empirical study. In: IEEE. High-Assurance Systems Engineering (HASE), 2012 IEEE 14th International Symposium on. [S.l.], 2012. p. 90–97.

SHAH, H.; GÖRG, C.; HARROLD, M. J. Why do developers neglect exception handling? In: ACM. Proceedings of the 4th international workshop on Exception handling. [S.l.], 2008. p. 62–68.

SUDKAMP, T. A.; COTTERMAN, A. Languages and machines: an introduction to the theory of computer science. [S.l.]: Addison-Wesley Reading, Mass., 1988.

TERRA, R.; VALENTE, M. T. A dependency constraint language to manage object-oriented software architectures. Software: practice & experience, v. 39, n. 12, p. 1073, 2009.

Documentos relacionados