Verificação Estática de Arquiteturas de Software utilizando Restrições de Dependência
Resumo
Este artigo descreve um sistema para verificação estática de arquiteturas de software que permite a arquitetos restringir o espectro de dependências possíveis em um dado sistema. O objetivo principal é permitir a definição de dependências aceitáveis e inaceitáveis de acordo com a arquitetura planejada de um sistema. Uma vez definidas, tais restrições são automaticamente verificadas por uma ferramenta, evitando assim erosões silenciosas na arquitetura. O artigo também apresenta resultados da aplicação da linguagem de restrição de dependência proposta em um sistema de gerenciamento de recursos humanos, com cerca de 240 KLOC. Como resultado, a abordagem proposta foi capaz de detectar diversas violações na arquitetura desse sistema.
Referências
Deepak Alur, John Crupi, and Dan Malks. Core J2EE Patterns: Best Practices and Design Strategies. Prentice Hall, 2nd edition, 2003.
Martin Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley, 2002.
David Garlan and Mary Shaw. Software Architecture Perspectives on an Emerging Discipline. Prentice Hall, 1996.
Jens Knodel, Dirk Muthig, Matthias Naab, and Mikael Lindvall. Static evaluation of software architectures. In 10th European Conference on Software Maintenance and Reengineering (CSMR), pages 279–294, 2006.
Jens Knodel and Daniel Popescu. A comparison of static architecture compliance checking approaches. In 6th Working Conference on Software Architecture (WICSA), pages 1–12, 2007.
Nenad Medvidovic and Richard N. Taylor. A classification and comparison framework for software architecture description languages. IEEE Transactions on Software Engineering, 26(1):70–93, 2000.
Kim Mens, Roel Wuyts, and Theo D’Hondt. Declaratively codifying software architectures using virtual software classifications. In 29th International Conference on Technology of Object-Oriented Languages and Systems (TOOLS), pages 33–45, 1999.
Paulo Merson. Using aspect-oriented programming to enforce architecture. Technical report, Software Engineering Institute, September 2007.
Hausi A. Muller and K. Klashinsky. Rigi a system for programming-in-the-large. In 10th International Conference on Software Engineering (ICSE), pages 80–87, 1988.
Gail C. Murphy, David Notkin, and Kevin J. Sullivan. Software reflexion models: Bridging the gap between source and high-level models. In Symposium on the Foundations of Software Engineering (FSE), pages 18–28, 1995.
Dewayne E. Perry and Alexander L. Wolf. Foundations for the study of software architecture. Software Engineering Notes, 17(4):40–52, 1992.
Neeraj Sangal, Ev Jordan, Vineet Sinha, and Daniel Jackson. Using dependency models to manage complex software architecture. In 20th Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), pages 167–176, 2005.
Ricardo Terra and Marco Tulio de Oliveira Valente. Towards a dependency constraint language to manage software architectures. In 2nd European Conference on Software Architecture (ECSA), pages 1–8, 2008.
Hong Yan, David Garlan, Bradley R. Schmerl, Jonathan Aldrich, and Rick Kazman. DiscoTect: A system for discovering architectures from running systems. In 26th International Conference on Software Engineering (ICSE), pages 470–479, 2004.