Um M´etodo Para Modelagem de Exce¸c˜oes Em Desenvolvimento Baseado em Componentes
Patrick Henrique da Silva Brito Disserta¸c˜ao de Mestrado
Um M´
etodo Para Modelagem de Exce¸c˜
oes Em
Desenvolvimento Baseado em Componentes
Patrick Henrique da Silva Brito
Outubro de 2005
Banca Examinadora:
• Profa. Dra. Cec´ılia Mary Fischer Rubira (Orientadora) • Prof. Dr. Paulo Cesar Masiero
ICMC – USP S˜ao Carlos • Profa. Dra. Eliane Martins
IC – UNICAMP
• Profa. Dra. Ariadne Maria Brito Rizzoni Carvalho (Suplente) IC – UNICAMP
Este exemplar corresponde `a reda¸c˜ao final da Disserta¸c˜ao devidamente corrigida e defendida por Patrick Henrique da Silva Brito e aprovada pela Banca Examinadora.
Campinas, 14 de Outubro de 2005.
Profa. Dra. Cec´ılia Mary Fischer Rubira (Orientadora)
Disserta¸c˜ao apresentada ao Instituto de Com-puta¸c˜ao, unicamp, como requisito parcial para a obten¸c˜ao do t´ıtulo de Mestre em Ciˆencia da Computa¸c˜ao.
c
Patrick Henrique da Silva Brito, 2005. Todos os direitos reservados.
Devido `a grande populariza¸c˜ao do Desenvolvimento Baseado em Componentes (DBC), ele vem sendo empregado inclusive no desenvolvimento de sistemas computacionais cr´ıticos. O emprego do DBC na constru¸c˜ao de sistemas confi´aveis evidencia a necessidade de se desenvolver componentes de software que sejam robustos e que possuam uma garantia maior do seu funcionamento correto.
Tratamento de exce¸c˜oes ´e uma t´ecnica bastante conhecida para a verifica¸c˜ao e tra-tamento de erros em sistemas de software. Por´em, apesar da sua popularidade, o seu projeto e a implementa¸c˜ao s˜ao constitu´ıdos de tarefas muito complexas que n˜ao recebem uma aten¸c˜ao adequada dos processos de desenvolvimento existentes. A situa¸c˜ao ´e ainda mais cr´ıtica se levarmos em considera¸c˜ao os m´etodos para DBC.
Este trabalho prop˜oe um m´etodo para auxiliar a modelagem do comportamento excep-cional de sistemas baseados em componentes, chamado MDCE+. Baseado no refinamento da metodologia MDCE, o MDCE+ apresenta dois diferenciais importantes, que refor¸cam o seu aspecto robusto: (i) o fato dele combinar as abordagens top-down e botton-up para o desenvolvimento de sistemas confi´aveis; e (ii) o fato dele ser centrado na arquitetura. O foco na arquitetura de software contribui para uma melhor defini¸c˜ao e an´alise do fluxo de exce¸c˜oes entre os componentes do sistema. Essa maneira estruturada de detectar e tratar exce¸c˜oes no contexto da ocorrˆencia de falhas ´e particularmente relevante para sistemas que apresentam requisitos de confiabilidade extrema.
O m´etodo MDCE+ ´e um m´etodo gen´erico que pode ser aplicada a processos de desen-volvimento modernos. Em particular, nesta disserta¸c˜ao o m´etodo MDCE+ foi adaptado ao processo UML Components e a uma metodologia de testes. Como maneira de ava-liar esse m´etodo, foi desenvolvido um estudo de caso de um sistema financeiro real, com requisitos de tolerˆancia a falhas. Dada a sua importˆancia, o processo de avalia¸c˜ao do m´etodo MDCE+ foi dividido em trˆes etapas: (i) prepara¸c˜ao; (ii) execu¸c˜ao; e (iii) an´alise dos resultados. Nesse estudo foi necess´ario tratar exce¸c˜oes na arquitetura do sistema, com o intuito de aumentar a disponibilidade dos servi¸cos.
Abstract
Due to the large adoption of the Component-Based Development (CBD), it has also been employed in the development of critical software systems. The development of depen-dable systems using the CBD paradigm evidences the necessity of developing software components that are robust and dependable.
Exception handling is a well known technique for verify and treat errors in software systems. However, despite its popularity, its design and implementation are constitu-ted of very complex tasks that do not receive the adequate attention from the existing development processes. This is still more critical in the context of CBD processes.
This work presents the MDCE+, a method that assists the modeling of the excepti-onal behavior in component-based software development. Based in the refinement of the MDCE methodology, the MDCE+ presents two important differentials, that strengthen its robustness: (i) it combines the top-down and bottom-up strategies for the development of dependable systems; and (ii) it is centered in the software architecture. As a conse-quence of the focus given to the software architecture, the exceptions that flow between the system components are better defined and analyzed. This structured way to detect and to treat exceptions in the context of the occurrence of imperfections is particularly needed for developing dependable systems.
The MDCE+ is a generic method that can be applied together with modern develop-ment processes. In particular, in this master thesis MDCE+ was adapted to the UML Components process and to a software test methodology. In order to evaluate this method, a case study of a real financial system with fault-tolerance requirements was developed. Given its importance, the evaluation process of the MDCE+ method was decomposed in three stages: (i) preparation; (ii) execution; and (iii) results analysis. In order to increase the services availability, in this study it was necessary to deal with exceptions in the software architecture.
Primeiramente, gostaria de agradecer a Deus, por todas as oportunidades, maravilhas e experiˆencias que Ele me proporcionou durante a minha vida e por ter me sustentado nessa ´ardua jornada. Devo a Ele cada um dos meus passos.
Aos meus Pais (Maria Lucia da Silva Brito e Neusvaldo Henrique de Brito), por todo amor, dedica¸c˜ao, incentivo e exemplo que serviram como motiva¸c˜ao fundamental para prosseguir caminhando e superar as dificuldades.
Aos meus irm˜aos (Papy, Boy e Piu), pela nossa cumplicidade e admira¸c˜ao m´utua, que aumenta cada vez mais a minha vontade de melhorar e assim me assemelhar a eles.
`
A Margareth (Nem), minha namorada, a quem amo e admiro e que ser´a sempre a minha inspira¸c˜ao. Obrigado por ter aceitado com tanta compreens˜ao os sacrif´ıcios da distˆancia e da saudade. Espero sempre retribuir tudo isso com muita dedica¸c˜ao e amor.
`
A minha fam´ılia que a Nem me presenteou: D. Margareth, Sr. Pedro, Peu, Pedrinho, Iann (meu afilhado), Ilanne, Tiaguinho, Urˆania, Maelson, D. Ester e Vozinha. Muito obrigado pelo apoio, confian¸ca, torcida, e pelo carinho e admira¸c˜ao rec´ıprocos.
A todos os meus familiares: av´os, tios, primos, padrinhos e cunhados (Gesse, Diran, Dinho, Peu e Pedrinho), em especial ao meu primo Marcos Henrique. N˜ao sei se ele sabe, mas devo a ele a minha voca¸c˜ao pela ciˆencia da computa¸c˜ao.
Em mem´oria dos meus familiares que descansaram eternamente no decorrer do meu mestrado: V´o J´ulia, D. Ester, Vovˆo Z´e Henrique, Fabinho e Fl´avio (primos).
Em mem´oria ao tio Zezinho, a quem devo a alegria de torcer pelo glorioso ASA de Arapiraca :-)
Um agradecimento mais que especial `a Cec´ılia Rubira, minha orientadora, pelos ensi-namentos, companheirismo e verdadeira amizade. Obrigado pelas conversas, dicas, pro-jetos, corre¸c˜oes de textos, exigˆencias por prazos :-), ... tudo isso foram tijolos impor-tant´ıssimos na constru¸c˜ao do nosso objetivo. Com essa convivˆencia t˜ao saud´avel, me ensina a amadurecer cada vez mais.
A todos os meus professores de gradua¸c˜ao, em especial ao Coradine, meu orientador de inicia¸c˜ao cient´ıfica. O exemplo e o incentivo de vocˆes nortearam a minha decis˜ao em continuar estudando e pesquisando. Muito obrigado!
Aos meus amigos da terra dos marechais (Alagoas): David, Medeiros, Jos´e Ricardo, Rosemeire, T´ulio, Moacy, Katiane, Andr´e Atanasio, H´ıtalo, Fernando Rezende, Gilberto, Carlos Alberto... . As minhas sinceras desculpas pela minha ausˆencia total. Espero que ainda lembrem de mim :-)
Aos meus amigos que conheci na Unicamp, que s˜ao os principais frutos do meu mes-trado, em especial `a galera do grupo de pesquisa em engenharia de software (SED), do laborat´orio de sistemas distribu´ıdos (LSD) e ao Augusto, um dos meus revisores oficiais de inglˆes :-) Gra¸cas a vocˆes, a jornada se tornou ainda mais gratificante e prazerosa. Muito obrigado mesmo!
Aos companheiros de rep´ublica e convivˆencia: Eduardo, Felipe, Javier, M´arcio, Mar-cos, al´em de Clayton e Matias (vizinhos). Por toda amizade, descontra¸c˜ao, e como n˜ao podia esquecer, hor´arios pol´ıticos e novelas assistidas e comentadas ao vivo :-)
Gostaria de agradecer especialmente a cada um dos professores do curso de espe-cializa¸c˜ao em Engenharia de Software, onde fui monitor: Ariadne, Arnaldo, Buzatto, Cec´ılia, C´elio, Eliane, Hans, M´ario Cortes, Thelma e Vanini. Foram dois anos e meio de um conv´ıvio sensacional, com muito conhecimento e experiˆencia adquiridos. Eu n˜ao poderia deixar de agradecer de maneira especial `as secret´arias do curso: Cl´audia Regina e Ol´ıvia. Obrigado pelas conversas amigas e por toda ajuda dentro e fora do curso. Tamb´em gostaria de agradecer ao curso em si, na pessoa da coordenadora, a profa. Thelma Chi-ossi. Obrigado pelo aux´ılio material fundamental para a melhor condu¸c˜ao da pesquisa. Obrigado tamb´em ao IC, ao FINEP e ao projeto CompGov, pelos aux´ılios em viagens.
N˜ao tem como deixar de agradecer aos professores e funcion´arios do IC que me acom-panharam mais de perto: professores Eliane Martins, Ariadne, Jo˜ao Meidanis, Ricardo Anido, Paulo Centoducatte, Edmundo Madeira e Cl´audia Bauzer; Fl´avio (secretaria), Nelson (portaria), Fl´avio (portaria), Mirian (patrimˆonio), e Eliane (financeiro). Muito obrigado a todos!
Para fechar com chave de ouro, agrade¸co tamb´em aos professores da banca e a to-dos que colaboraram diretamente com o trabalho, tanto durante a condu¸c˜ao da pesquisa, quanto com a melhoria da qualidade do texto escrito. Ao pessoal da Autbank, em espe-cial ao Paulo Kato, Tomohiro, Michele e Denise. Aos professores Cec´ılia Rubira, Eliane Martins e Paulo Masiero. Aos meus companheiros de pesquisa e amigos: Camila Rocha (companheira insepar´avel de pesquisa e estudo de caso), Paulo Asterio, Fernando Castor Filho, Rodrigo Tomita, Tiago Moronte, Leonardo Tizzei, Maria Antˆonia, Regina, Bruno, Leonel Gayard, Ana Elisa, Jana´ına, Helder, Ivan, Eduardo Gon¸calves, Vin´ıcius, Moacir Caetano e Ricardo.
Finalmente, o meu muito obrigado a todos aqueles que trabalham nos bastidores, cujo nome eu desconhe¸co. Um obrigado especial´ıssimo a todos aqueles que esqueci injustamente de citar o nome aqui. Minhas sinceras desculpas e o meu agradecimento.
seu caminho um tra¸co da sua imagem.”
(Neusvaldo J´unior)
“Comece pelo necess´ario, fa¸ca o que for poss´ıvel, ao final vocˆe ter´a feito o imposs´ıvel.”
(S˜ao Francisco de Assis)
“Quem nunca errou nunca experimentou nada novo.”
(Albert Einstein)
“Sabemos o que somos, mas n˜ao o que podemos ser.”
(Willian Shakespeare)
“O mundo ´e um livro e quem fica sentado em casa lˆe somente uma p´agina.” (Santo Agostinho)
Sum´
ario
Resumo vii Abstract ix Agradecimentos xi 1 Introdu¸c˜ao 1 1.1 Objetivos . . . 3 1.2 A Solu¸c˜ao Proposta . . . 4 1.2.1 Especifica¸c˜ao de Requisitos . . . 61.2.2 Defini¸c˜ao dos Aspectos Gerenciais . . . 6
1.2.3 Projeto Arquitetural . . . 6
1.2.4 Especifica¸c˜ao do Sistema . . . 7
1.2.5 Provisionamento dos Componentes . . . 7
1.2.6 Montagem do Sistema . . . 8
1.3 Trabalhos Relacionados . . . 8
1.4 Organiza¸c˜ao deste Trabalho . . . 9
2 Fundamentos de DBC, Arquitetura de Software e Tolerˆancia a Falhas 11 2.1 Desenvolvimento Baseado em Componentes . . . 11
2.1.1 Processos de Desenvolvimento de Software . . . 13
2.1.2 Processos de Desenvolvimento Baseado em Componentes . . . 16
2.2 Arquitetura de Software . . . 17
2.2.1 Conceito e Terminologia . . . 17
2.2.2 Modelo COSMOS . . . 18
2.2.3 O M´etodo de Avalia¸c˜ao de Arquitetura ATAM . . . 21
2.3 Tolerˆancia a Falhas e Tratamento de Exce¸c˜oes . . . 23
2.3.1 Falha, Erro e Defeito . . . 23
2.3.2 Dimens˜oes da confiabilidade de sistemas de software . . . 24
2.3.3 Fases da Tolerˆancia a Falhas . . . 26 xv
2.3.7 Componente Tolerante a Falhas Ideal . . . 31
2.3.8 O M´etodo MDCE . . . 32
2.4 Uma Estrutura¸c˜ao do Comportamento Excepcional para DBC . . . 34
2.4.1 Hierarquia de Exce¸c˜oes . . . 34
2.4.2 Abordagem Intra-Componente . . . 36
2.4.3 Abordagem Inter-Componentes . . . 38
2.5 Uma Arquitetura Confi´avel Baseada em Tratamento de Exce¸c˜oes . . . 40
2.5.1 Componente Exception . . . 42 2.5.2 Componente Handler . . . 42 2.5.3 Componente ExceptionHandlingStrategy . . . 43 2.5.4 Componente ConcurrentExceptionHandlingAction . . . 44 2.6 Resumo . . . 45 3 O M´etodo MDCE+ 47 3.1 Vis˜ao Geral do M´etodo . . . 47
3.2 Fase 1: Especifica¸c˜ao e An´alise dos Requisitos . . . 53
3.2.1 Compreender o Problema Atrav´es de Descri¸c˜oes . . . 54
3.2.2 Analisar e Representar o Dom´ınio do Problema . . . 54
3.2.3 Definir o Escopo do Sistema . . . 55
3.2.4 Especificar os Requisitos Funcionais . . . 56
3.2.5 Especificar o Comportamento Excepcional . . . 57
3.2.6 Construir/Atualizar o Diagrama de Casos de Uso . . . 62
3.3 Fase 2: Defini¸c˜ao dos Aspectos Gerenciais . . . 62
3.3.1 Definir as Restri¸c˜oes para o Desenvolvimento . . . 63
3.3.2 Identificar as Funcionalidades Cr´ıticas . . . 64
3.3.3 Definir as Releases para Itera¸c˜oes . . . 65
3.4 Fase 3: Projeto Arquitetural . . . 67
3.4.1 M´etodo para a Especifica¸c˜ao da Arquitetura do Sistema . . . 68
3.5 Fase 4: An´alise do Sistema . . . 71
3.5.1 Especificar as Interfaces da Aplica¸c˜ao . . . 73
3.5.2 Processar as Exce¸c˜oes Agendadas . . . 73
3.5.3 Identificar as Interfaces de infra-estrutura . . . 75
3.5.4 Criar os Componentes e Posicion´a-los na Arquitetura . . . 75
3.6 Fase 5: Projeto do Sistema . . . 77
3.6.1 Analisar a Intera¸c˜ao entre os Componentes . . . 77 xvi
3.6.2 Formaliza¸c˜ao da Especifica¸c˜ao dos Componentes . . . 92
3.7 Fase 6: Materializa¸c˜ao dos Componentes . . . 93
3.7.1 Atividades Comuns (reutiliza¸c˜ao ou implementa¸c˜ao) . . . 93
3.7.2 Escolher a Forma de Materializa¸c˜ao . . . 96
3.7.3 Reutilizar Componentes . . . 98
3.7.4 Implementar Componentes Novos . . . 99
3.8 Fase 7: Integra¸c˜ao dos Componentes do Sistema . . . 101
3.8.1 Montar os Componentes Arquiteturais . . . 101
3.8.2 Materializar a Configura¸c˜ao do Sistema . . . 103
3.9 Materializa¸c˜ao da Arquitetura Confi´avel Adotada . . . 105
3.9.1 Componente Exception . . . 106
3.9.2 Componente Handler . . . 107
3.9.3 Componente ExceptionHandlingStrategy . . . 107
3.9.4 Componente ConcurrentExceptionHandlingAction . . . 108
3.10 Resumo . . . 108
4 M´etodo MDCE+ Aplicado ao Processo UML Components 111 4.1 O Processo UML Components . . . 112
4.1.1 Especifica¸c˜ao de Requisitos . . . 113
4.1.2 Especifica¸c˜ao dos Componentes . . . 114
4.1.3 Provisionamento dos componentes . . . 115
4.1.4 Montagem do sistema . . . 116
4.1.5 Testes . . . 116
4.1.6 Implanta¸c˜ao . . . 117
4.2 O Processo Adaptado . . . 117
4.3 Fase 1: Especifica¸c˜ao e An´alise dos Requisitos . . . 120
4.4 Fase 2: Defini¸c˜ao dos Aspectos Gerenciais . . . 122
4.5 Fase 3: Projeto Arquitetural . . . 123
4.6 Fase 4: Identifica¸c˜ao dos Componentes . . . 124
4.7 Fase 5: Intera¸c˜ao Entre os Componentes . . . 125
4.8 Fase 6: Especifica¸c˜ao Final do Sistema . . . 129
4.9 Fase 7: Provisionamento dos Componentes . . . 129
4.10 Fase 8: Montagem do Sistema . . . 131
4.11 Resumo . . . 134
5 Estudo de Caso: Sistema de Controle Banc´ario 135 5.1 Descri¸c˜ao do Problema . . . 135
5.2 Descri¸c˜ao do Estudo de Caso . . . 136
5.3 Prepara¸c˜ao do Estudo de Caso . . . 138 xvii
5.4.1 Especifica¸c˜ao de Requisitos . . . 140
5.4.2 Defini¸c˜ao dos Aspectos Gerenciais . . . 142
5.4.3 Projeto Arquitetural . . . 144
5.4.4 Identifica¸c˜ao dos Componentes . . . 145
5.4.5 Intera¸c˜ao entre os Componentes . . . 148
5.4.6 Especifica¸c˜ao Final dos Componentes . . . 153
5.4.7 Provisionamento dos Componentes . . . 153
5.4.8 Montagem do Sistema . . . 156
5.5 An´alise dos Resultados . . . 159
5.5.1 Avalia¸c˜ao do Produto . . . 160
5.5.2 Avalia¸c˜ao do Processo Adaptado . . . 162
5.6 Resumo . . . 164
6 Conclus˜oes 167 6.1 Contribui¸c˜oes . . . 168
6.2 Trabalhos Futuros . . . 170
6.3 Publica¸c˜oes . . . 172
A Question´arios de Avalia¸c˜ao do Estudo de Caso 175 A.1 Question´ario das Fases . . . 175
A.2 Question´ario Geral . . . 177
Bibliografia 179
Lista de Tabelas
2.1 Pontos de Vista de um Componente . . . 13
2.2 Principais entidades do modelo COSMOS . . . 21
2.3 Abordagens para a implementa¸c˜ao de sistemas confi´aveis . . . 25
2.4 Diretrizes para o Mapeamento entre Exce¸c˜oes de Componentes Distintos . 40 3.1 Especifica¸c˜ao Normal de um Caso de Uso . . . 57
3.2 Especifica¸c˜ao Excepcional de um Caso de Uso . . . 61
3.3 Principais Focos de Restri¸c˜oes . . . 64
3.4 Principais Restri¸c˜oes Ligadas ao Reuso de Componentes . . . 64
3.5 Custos das Formas de Materializa¸c˜ao . . . 97
4.1 Caso de Uso Normal: Efetuar Venda . . . 121
4.2 Cen´arios Excepcionais do Caso de Uso Efetuar Venda . . . 122
4.3 Caso de Uso Excepcional: Tratar Estoque Baixo . . . 122
4.4 Formaliza¸c˜ao das Assertivas do Caso de Uso Efetuar Venda . . . 129
5.1 Atividades para a Execu¸c˜ao do Estudo de Caso . . . 140
5.2 Especifica¸c˜ao do Caso de Uso Cancelar Contrato da Conta . . . 143
5.3 Um Cen´ario Excepcional do Caso de Uso Cancelar Contrato da Conta . . . 143
5.4 Itera¸c˜oes Definidas . . . 144
5.5 Especifica¸c˜ao do Caso de Uso Tratar Erro de Cancelamento de Contrato . . . 151
5.6 Classifica¸c˜ao das Exce¸c˜oes de Acordo com a Propaga¸c˜ao . . . 153
5.7 An´alise das Fases da Especifica¸c˜ao (valores de 1 a 5) . . . 161
5.8 An´alise Geral do Processo Adaptado (valores de 1 a 5) . . . 161
5.9 Crit´erios de Avalia¸c˜ao do M´etodo MDCE+ . . . 163
1.1 Interferˆencia do M´etodo MDCE+ nas fases do UML Components . . . 5
2.1 Modelo de Especifica¸c˜ao do COSMOS . . . 19
2.2 Modelo de Implementa¸c˜ao do COSMOS . . . 20
2.3 Modelo de Conectores do COSMOS . . . 20
2.4 Ciclo entre a ocorrˆencia de Falhas, Erros e Defeitos . . . 23
2.5 Funcionamento de um Mecanismo de Tratamento de Exce¸c˜oes (MTE) . . . 28
2.6 Opera¸c˜ao de Dep´osito em Cheque (Colabora¸c˜ao) . . . 29
2.7 Grafo de Resolu¸c˜ao da Colabora¸c˜ao agˆencia-agˆencia . . . 30
2.8 Estrutura do Componente Tolerante a Falhas Ideal . . . 32
2.9 Hierarquia Excepcional Proposta . . . 35
2.10 Estrutura¸c˜ao Interna do Componente . . . 36
2.11 Estrutura¸c˜ao Interna do Componente com Reuso . . . 39
2.12 Estrutura¸c˜ao de um Tratador CLE . . . 39
2.13 Arquitetura de Componentes Gen´erica para Tratamento de Exce¸c˜oes . . . 41
2.14 Meta-modelo da Estrutura¸c˜ao de uma Colabora¸c˜ao . . . 44
3.1 Fases do M´etodo MDCE+ . . . 51
3.2 Fase de Especifica¸c˜ao de Requisitos . . . 54
3.3 Atividades da Especifica¸c˜ao dos Requisitos Funcionais . . . 56
3.4 Verifica¸c˜ao de Assertivas . . . 58
3.5 Agendamento de Exce¸c˜oes Candidatas . . . 59
3.6 Especifica¸c˜ao do Comportamento Excepcional . . . 62
3.7 Defini¸c˜ao das Releases do Sistema . . . 66
3.8 Especifica¸c˜ao da Arquitetura do Sistema . . . 69
3.9 Arvore de Precedˆencia dos Requisitos N˜ao-Funcionais . . . 70´
3.10 ´Arvore de Precedˆencia de Requisitos N˜ao-Funcionais com Cen´arios . . . 70
3.11 Workflow da Fase de An´alise . . . 72
3.12 Processamento das Exce¸c˜oes Agendadas . . . 74
3.13 Cria¸c˜ao dos Componentes (Normais e Excepcionais) . . . 76 xxi
3.14 Analisar a Intera¸c˜ao entre os Componentes . . . 78
3.15 Detalhamento dos Tratadores . . . 80
3.16 Workflow de Estrutura¸c˜ao dos Componentes Arquiteturais do Sistema . . . 82
3.17 Workflow da Verifica¸c˜ao de Tratamento ou Propaga¸c˜ao . . . 85
3.18 Workflow de Especifica¸c˜ao do Grafo de Resolu¸c˜ao . . . 88
3.19 Encapsulamento dos Participantes Atrav´es do Coordenador . . . 90
3.20 Uma Arquitetura em Quatro Camadas . . . 92
3.21 Exemplo do Componente A . . . 92
3.22 Atividades Comuns (reutiliza¸c˜ao e implementa¸c˜ao) . . . 94
3.23 Novo Modelo de Implementa¸c˜ao do COSMOS . . . 95
3.24 Modelagem de Classes de Exce¸c˜oes Simples e Compostas . . . 96
3.25 Ilustra¸c˜ao do Papel do Wrapper . . . 98
3.26 Implementa¸c˜ao de um Componente no COSMOS . . . 100
3.27 Estrutura do Componente Ideal Projetado . . . 102
3.28 Implementa¸c˜ao do Conector Interno ALE . . . 102
3.29 Exemplo em Java da Liga¸c˜ao entre dois Componentes . . . 103
3.30 Simula¸c˜ao de uma Reconfigura¸c˜ao Permanente do Sistema . . . 105
3.31 Simula¸c˜ao de uma Reconfigura¸c˜ao Tempor´aria do Sistema . . . 106
4.1 Arquitetura Adotada pelo UML Components [CD00] . . . 112
4.2 Fases do UML Components [CD00] . . . 113
4.3 Especifica¸c˜ao dos Componentes no UML Components [CD00] . . . 114
4.4 Fases do Processo Adaptado . . . 118
4.5 Modelo Conceitual de Neg´ocio de um Sistema de Vendas [CD00] . . . 121
4.6 Interfaces Identificadas e Componentes Criados . . . 125
4.7 Colabora¸c˜ao da opera¸c˜ao Efetuar Venda . . . 126
4.8 Colabora¸c˜ao da opera¸c˜ao Tratar Estoque Baixo . . . 126
4.9 Atualiza¸c˜ao das Interfaces (Neg´ocio e Sistema) . . . 127
4.10 Estrutura¸c˜ao do Componente Arquitetural Efetuar Venda . . . 127
4.11 Arquitetura Refinada do Sistema . . . 128
4.12 Novas Entidades Cr´ıticas Identificadas . . . 128
4.13 Interfaces Requeridas do Componente operacoesVendasArq . . . 129
4.14 Modelagem do Componente gerenciamentoVendas . . . 130
4.15 Modelagem do Componente operacoesVendas . . . 131
4.16 Materializa¸c˜ao do Componente Arquitetural operacoesVendas . . . 132
4.17 Simula¸c˜ao de Uma Reconfigura¸c˜ao Permanente do Sistema . . . 133
4.18 Arquitetura do Sistema Materializada com Conectores . . . 133
5.1 Etapas do Estudo de Caso . . . 138 xxii
5.5 Modelo de Tipos de Neg´ocio . . . 145
5.6 Interfaces Identificadas . . . 146
5.7 Exce¸c˜oes Identificadas . . . 146
5.8 Componentes Identificados . . . 147
5.9 Intera¸c˜ao da Opera¸c˜ao cancelarContrato() . . . 148
5.10 Intera¸c˜ao da Opera¸c˜ao cancelarContrato() com Detec¸c˜ao de Exce¸c˜oes . . . . 149
5.11 Interfaces Refinadas com a Colabora¸c˜ao . . . 150
5.12 Tipos de Dados Necess´arios . . . 151
5.13 Componente Arquitetural operacoesContaArq . . . 152
5.14 Interfaces Requeridas do Componente operacoesContaArq . . . 152
5.15 Modelo de Informa¸c˜ao da Interface ICancelamentoContratoMgt . . . 154
5.16 Estrutura¸c˜ao Interna do Componente gerenciamentoContas . . . 155
5.17 Estrutura¸c˜ao Interna do Componente operacoesConta . . . 155
5.18 Comportamento do Tratador de TETransacaoNaoFoiConcluidaException 157 5.19 Estrutura¸c˜ao do Componente Arquitetural operacoesContaArq . . . 157
5.20 Parte da Arquitetura do Sistema . . . 158
5.21 Simula¸c˜ao da Reconfigura¸c˜ao do Servi¸co cancelarContrato(...) . . . 158
5.22 Distribui¸c˜ao do Custo Total Durante as Fases do Desenvolvimento . . . 159
5.23 Distribui¸c˜ao do Custo da Fase nos Est´agios da Especifica¸c˜ao . . . 159
Cap´ıtulo 1
Introdu¸c˜
ao
Sistemas de software s˜ao intrinsicamente complexos e esta complexidade ´e agravada ainda mais com os requisitos impostos pelas aplica¸c˜oes modernas, como por exemplo, confia-bilidade, disponibilidade e seguran¸ca. Apesar das exigˆencias em se produzir sistemas confi´aveis, esse aumento da complexidade, aliado `as restri¸c˜oes de tempo de desenvol-vimento, comprometem o funcionamento correto do sistema, uma vez que induzem a inser¸c˜ao de um maior n´umero de falhas durante o seu desenvolvimento [AL90]. A fim de lidar com essa complexidade e de reduzir o tempo e o custo de desenvolvimento, a ind´ustria de software vem adotando cada vez mais o desenvolvimento baseado em com-ponentes (DBC), que modulariza o sistema em comcom-ponentes e a partir dessas unidades b´asicas, outros sistemas s˜ao constru´ıdos recursivamente [Szy98].
Com a populariza¸c˜ao do DBC, ´e inevit´avel a cria¸c˜ao de sistemas baseados em compo-nentes para desempenhar atividades cr´ıticas, quer seja com requisitos de disponibilidade, como sistemas web1 e banc´arios; quer seja com requisitos de confiabilidade cr´ıtica, como
sistemas m´edicos ou embarcados. Por esse motivo, ´e necess´ario se preocupar em produzir sistemas baseados em componentes que sejam robustos.
Apesar do avan¸co das pesquisas em ciˆencia da computa¸c˜ao, ainda n˜ao existem meios para garantir a ausˆencia de falhas em sistemas de software [Som01]. Sendo assim, para a constru¸c˜ao de sistemas confi´aveis, devem ser utilizadas t´ecnicas de tolerˆancia a fa-lhas [AL90], que visam manter o sistema em funcionamento mesmo na ocorrˆencia de falhas. Essas t´ecnicas podem ser implementadas atrav´es de mecanismos de tratamento de exce¸c˜oes [Fer01], os quais oferecem um arcabou¸co para a cria¸c˜ao de tratadores adequados para cada tipo de exce¸c˜ao, possibilitando o tratamento de poss´ıveis inconsistˆencias, ou at´e mesmo a continua¸c˜ao da execu¸c˜ao das funcionalidades do sistema. Devido `a popularidade dos mecanismos de tratamento de exce¸c˜oes, as falhas que podem ser detectadas no sistema tamb´em s˜ao conhecidas como situa¸c˜oes excepcionais, enquanto o comportamento
cor-1
do inglˆes World Wide Web
retivo mediante a ocorrˆencia de situa¸c˜oes excepcionais ´e chamado de comportamento excepcional. O comportamento que implementa a execu¸c˜ao esperada do sistema ´e co-nhecido como comportamento normal.
A incorpora¸c˜ao efetiva de detec¸c˜ao e tratamento de exce¸c˜oes, visando a implanta¸c˜ao de tolerˆancia a falhas, aumenta consideravelmente a complexidade do sistema [Cri89], uma vez que o n´umero de linhas de c´odigo adicionais necess´ario para a execu¸c˜ao dessas ativi-dades pode representar mais de dois ter¸cos do total [Cri89]. Devido a essa complexidade extra, os desenvolvedores de software sentem dificuldade tanto para utilizar corretamente os mecanismos, quanto para reconhecer e tratar adequadamente as exce¸c˜oes, o que gera sistemas com tratamento excepcional deficiente, com baixa manutenibilidade e baixa ca-pacidade de reutiliza¸c˜ao.
Um fator agravante na qualidade do tratamento excepcional ´e o fato de um componente isolado n˜ao possuir os recursos necess´arios para detectar e tratar as exce¸c˜oes de uma maneira efetiva [dLR99]. Sendo assim, ´e necess´ario considerar as colabora¸c˜oes entre os componentes do sistema. Essa necessidade de se conhecer o fluxo interativo entre os componentes contribui para que a arquitetura de software assuma um papel fundamental para a melhoria da qualidade e da confiabilidade final dos programas. Isso se deve ao fato da arquitetura de software [SG96] explicitar as restri¸c˜oes de comunica¸c˜ao entre os componentes do sistema, uma vez que o representa de maneira abstrata, atrav´es dos seus componentes arquiteturais e das regras de intera¸c˜ao entre eles.
Para se ter uma id´eia dessa importˆancia, com a manipula¸c˜ao sistem´atica desses fluxos de informa¸c˜oes, os tratadores excepcionais localizados na arquitetura, chamados aqui de tratadores arquiteturais [IB01], s˜ao capazes por exemplo, de isolar componentes fa-lhos do sistema em tempo de execu¸c˜ao, desviando o fluxo de requisi¸c˜ao para componentes redundantes. Outra vantagem de se conhecer a estrutura do sistema ´e a possibilidade de executar um tratamento excepcional de maneira coordenada, envolvendo diferentes com-ponentes (tratamento colaborativo coordenado [dLR99]). Al´em disso, o tratamento de exce¸c˜oes no contexto da arquitetura de software possibilita o uso de componentes COTS2 na constru¸c˜ao de sistemas confi´aveis.
Apesar da necessidade de lidar com o comportamento excepcional de maneira sis-tem´atica, por falta de metodologias e ferramentas adequadas, os desenvolvedores cos-tumam adiar essa preocupa¸c˜ao para a fase de projeto ou at´e mesmo para a fase de implementa¸c˜ao, executando-a de maneira “ad hoc”, guiados apenas pela sua intui¸c˜ao. Por´em, a antecipa¸c˜ao dessa preocupa¸c˜ao para as fases iniciais do desenvolvimento acar-reta benef´ıcios consider´aveis para o aumento da confiabilidade dos sistemas [RdLeFCF04]. Os principais benef´ıcios alcan¸cados s˜ao: (i) evita-se a perda de contexto, devido `a identi-fica¸c˜ao antecipada do erro; (ii) melhora-se o tratamento excepcional, tendo em vista o maior
2
1.1. Objetivos 3
n´umero de informa¸c˜oes contextuais dispon´ıveis; (iii) diminui-se o re-trabalho, uma vez que uma fase pode delimitar restri¸c˜oes `as fases seguintes; (iv) facilita-se o gerenciamento do desenvolvimento, tendo em vista que a garantia da confiabilidade ´e distribu´ıda ao longo do processo.
Este trabalho prop˜oe um m´etodo para o projeto e implementa¸c˜ao do comportamento excepcional no DBC, denominado MDCE+. Nossa solu¸c˜ao ´e um refinamento de um m´etodo proposto anteriormente chamado Metodologia para Defini¸c˜ao do Comportamento Excepcional (MDCE) [RdLeFCF04], que ´e uma extens˜ao do processo de DBC Cataly-sis [DW99]. O m´etodo MDCE apresenta diretrizes para a especifica¸c˜ao do comportamento excepcional de um sistema nas fases de identifica¸c˜ao de requisitos, an´alise e projeto. O foco do nosso refinamento est´a principalmente nas fases de projeto arquitetural e imple-menta¸c˜ao, atividades nas quais o MDCE ´e deficiente.
Al´em do refinamento, o MDCE+ foi adaptado ao processo de DBC UML Compo-nents [CD00]. A escolha desse processo se deve principalmente ao fato de possuir uma es-trutura¸c˜ao simples, de f´acil compreens˜ao e utiliza¸c˜ao pr´atica; ao contr´ario do processo Ca-talysis, que ´e bem complexo. Essa caracter´ıstica torna o UML Components mais acess´ıvel ao mercado corporativo, principalmente quando comparado a outros processos de DBC, como o Catalysis.
1.1
Objetivos
O objetivo principal deste trabalho ´e a defini¸c˜ao de um m´etodo para auxiliar a cons-tru¸c˜ao de sistemas de software com requisitos de confiabilidade ligados `a tolerˆancia a falhas. Esse m´etodo ´e chamado de MDCE+. Isso deve ser feito atrav´es da utiliza¸c˜ao sistem´atica dos mecanismos de tratamento de exce¸c˜oes existentes nas principais lingua-gens de programa¸c˜ao atuais. Esse m´etodo deve estruturar a identifica¸c˜ao de exce¸c˜oes e a especifica¸c˜ao dos seus tratadores durante todas as fases de desenvolvimento do software. Outra caracter´ıstica importante do MDCE+ ´e a preocupa¸c˜ao com a informa¸c˜ao contex-tual dos fluxos interativos entre os componentes do sistema. Aproveitando esse enfoque na arquitetura, o m´etodo deve guiar o desenvolvedor na especifica¸c˜ao de tratadores de exce¸c˜oes localizados na arquitetura de software, a partir de uma an´alise sistem´atica das propaga¸c˜oes excepcionais.
Al´em de sistematizar a modelagem das exce¸c˜oes e do comportamento excepcional do sistema, o MDCE+ prop˜oe diretrizes para a estrutura¸c˜ao das hierarquias de tipos de exce¸c˜oes. Essas diretrizes devem orientar tamb´em sobre a utiliza¸c˜ao de pol´ıticas de logging, com o intuito de beneficiar as atividades de manuten¸c˜ao do sistema.
de modelagem UML3[RJB99, BRJ99], uma vez que desde o seu lan¸camento em 1997, tem
se mostrado um padr˜ao de fato na ind´ustria de desenvolvimento de software.
De forma complementar ao m´etodo MDCE+, ´e apresentada uma arquitetura para estruturar o comportamento excepcional para sistemas confi´aveis. Baseado nessa ar-quitetura, o m´etodo comp˜oe o sistema de maneira estruturada, a fim de, no final do desenvolvimento, se ter todos os componentes arquiteturais materializados.
Ap´os a defini¸c˜ao do m´etodo, ele ´e incorporado ao processo UML Components. Esse processo adaptado distribui as atividades relativas `a modelagem excepcional do sistema em todas as suas fases. Sendo assim, o processo resultante dessa adapta¸c˜ao sistema-tiza tanto a modelagem dos requisitos funcionais do sistema, quanto dos requisitos n˜ao-funcionais relativos a tolerˆancia a falhas, atrav´es do uso disciplinado dos mecanismos de tratamento de exce¸c˜oes.
Al´em de utilizar a linguagem UML como nota¸c˜ao para os seus artefatos produzidos,as atividades do processo UML Components adaptado com tratamento de exce¸c˜oes s˜ao repre-sentadas atrav´es de diagramas de atividades UML. Essa representa¸c˜ao espec´ıfica dever´a proporcionar uma melhor documenta¸c˜ao de suas atividades e diretrizes, al´em de uma distin¸c˜ao clara entre as atividades originais e as incorporadas ao processo adaptado. A principal vantagem decorrente dessa distin¸c˜ao ´e o aumento da facilidade de adapta¸c˜ao do m´etodo MDCE+ para outros processos de desenvolvimento de software.
Como um estudo da viabilidade do m´etodo MDCE+, foi feito um estudo de caso real baseado no desenvolvimento de um sistema financeiro com requisitos de confiabilidade4.
O estudo de caso foi conduzido por terceiros e consistiu na aplica¸c˜ao do processo UML Components adaptado com o m´etodo MDCE+ para a especifica¸c˜ao e implementa¸c˜ao do sistema citado. A especifica¸c˜ao foi realizada desde a fase de engenharia de requisitos, passando pelo projeto arquitetural e especifica¸c˜ao interna dos componentes, culminando na sua implementa¸c˜ao e na montagem do sistema.
1.2
A Solu¸c˜
ao Proposta
O m´etodo MDCE+ sistematiza a especifica¸c˜ao e a implementa¸c˜ao do comportamento excepcional nas fases de desenvolvimento do software com ˆenfase no projeto da arquite-tura de componentes. Na especifica¸c˜ao de requisitos, que ´e baseada no m´etodo MDCE (Se¸c˜ao 2.3.8), ´e feita a antecipa¸c˜ao das atividades excepcionais relacionadas ao dom´ınio do problema. J´a nas fases de an´alise e projeto s˜ao especificadas as exce¸c˜oes relacionadas `as intera¸c˜oes entre os componentes, enfatizando os aspectos arquiteturais do sistema.
3
do inglˆes Unified Modeling Language
4
1.2. A Solu¸c˜ao Proposta 5
Para facilitar o entendimento durante as atividades do desenvolvimento, o m´etodo MDCE+ apresenta uma distin¸c˜ao entre os conceitos de componente arquitetural e componente de implementa¸c˜ao. Os componentes arquiteturais do sistema s˜ao es-truturados segundo o modelo do componente tolerante a falhas ideal, apresentado na Se¸c˜ao 2.3.7. Dessa forma, mesmo no n´ıvel arquitetural do sistema, se faz uma separa¸c˜ao expl´ıcita entre os comportamentos normal e excepcional, n˜ao adiando apenas para a fase de implementa¸c˜ao.
O comportamento de um componente tolerante a falhas ideal, ou simplesmente com-ponente ideal, ´e categorizado em dois tipos: normal, que produz respostas corretas, e excepcional (ou anormal), que ´e executado quando um erro ´e detectado.
Pelo fato da solu¸c˜ao proposta ser centrada na arquitetura de software, ´e destacada a importˆancia dos conectores [SG96], que materializam as intera¸c˜oes entre os componentes arquiteturais. Por esse motivo, eles s˜ao os principais respons´aveis pelo tratamento das exce¸c˜oes no n´ıvel da arquitetura.
A incorpora¸c˜ao do MDCE+ ao processo UML Components consistiu na distribui¸c˜ao das atividades do m´etodo proposto nas fases do processo de DBC. O produto final dessa extens˜ao ´e um processo iterativo que cont´em basicamente trˆes novas atividades, ortogonais `as etapas definidas pelo processo (Figura 1.1): (i) defini¸c˜ao dos cen´arios excepcionais dos casos de uso e identifica¸c˜ao de exce¸c˜oes durante a an´alise dos requisitos; (ii) an´alise do fluxo excepcional e detalhamento dos tratadores durante a especifica¸c˜ao dos componentes; e (iii) diretrizes para a estrutura¸c˜ao excepcional, implementa¸c˜ao dos componentes e montagem do sistema. Especificação/Análise de Requisitos Início Identificação dos Componentes Interação entre os Componentes Especificação final dos Componentes Provisionamento dos Componentes Montagem do Sistema Fim Definição dos cenários excepcionais dos casos de uso e Identificaçao de Exceções Separação de interesse entre os os componentes Normal e Excepcional Análise do Fluxo Excepcional e
Refinamento dos tratadores.
Formalização das Assertivas
Implementaçao dos Componentes e Criação de "wrappers" para os componentes reutilizados Implementação dos conectores [existem casos de uso a especificar] [senão]
As sub-se¸c˜oes seguintes apresentam as fases do processo UML Components adaptado ao m´etodo MDCE+. Mais detalhes dessa adapta¸c˜ao est˜ao dispon´ıveis no Cap´ıtulo 4 desta disserta¸c˜ao.
1.2.1
Especifica¸c˜
ao de Requisitos
Nesta fase, os requisitos do sistemas s˜ao mapeados atrav´es de casos de uso, cujas restri¸c˜oes s˜ao especificadas atrav´es de assertivas, isto ´e, pr´e-, p´os-condi¸c˜oes, invariantes e outras restri¸c˜oes de neg´ocio. A partir da viola¸c˜ao dessas assertivas, s˜ao identificadas exce¸c˜oes, que s˜ao agendadas nesta fase, a fim de serem especificadas na fase de an´alise (Se¸c˜ao 1.2.4). Al´em de especificar e analisar os requisitos, ´e elaborado o modelo conceitual do neg´ocio, que representa as principais entidades do neg´ocio e o relacionamento entre elas. Esse mo-delo ´e ´util para promover a compreens˜ao do dom´ınio que ´e necess´aria para a especifica¸c˜ao do sistema. Ap´os a elabora¸c˜ao desse modelo, s˜ao identificadas as entidades cr´ıticas, isto ´e, as entidades consideradas essenciais para a execu¸c˜ao das principais atividades do neg´ocio. Nas fases seguintes da especifica¸c˜ao, essas entidades ser˜ao o foco central para o tratamento de exce¸c˜oes na arquitetura do sistema, atrav´es da utiliza¸c˜ao de componentes redundan-tes [IB01, SDUV03].
1.2.2
Defini¸c˜
ao dos Aspectos Gerenciais
Ap´os a defini¸c˜ao dos requisitos desejados para o sistema, o processo MDCE+ apresenta uma fase para a defini¸c˜ao de algumas quest˜oes gerenciais do desenvolvimento. As prin-cipais quest˜oes definidas s˜ao: (i) an´alise inicial dos riscos; e (ii) defini¸c˜ao das itera¸c˜oes do desenvolvimento. Durante a an´alise dos riscos s˜ao identificadas algumas restri¸c˜oes poss´ıveis para o desenvolvimento. Essas restri¸c˜oes podem interferir no projeto da arqui-tetura do sistema (Se¸c˜ao 1.2.3) ou at´e mesmo nas decis˜oes relacionadas `a reutiliza¸c˜ao de componentes (Se¸c˜ao 1.2.5).
Com a defini¸c˜ao de itera¸c˜oes para o desenvolvimento, espera-se compensar o overhead esperado para o desenvolvimento de sistemas robustos. Essa compensa¸c˜ao ´e decorrente da entrega5 gradativa do sistema, priorizando as funcionalidades de acordo com a necessidade
do cliente.
1.2.3
Projeto Arquitetural
Na fase de projeto arquitetural ´e especificada a arquitetura adotada para o sistema. De-vido ao direcionamento dado pelo processo UML Components, a escolha da arquitetura
5
1.2. A Solu¸c˜ao Proposta 7
deve obedecer a restri¸c˜oes. Recomenda-se a existˆencia de duas camadas espec´ıficas: (i) camada de sistema, que trata de particularidades do sistema em quest˜ao; e (ii) camada de neg´ocio, constitu´ıda por componentes que implementam as funcionalidades b´asicas e por isso s˜ao candidatos a serem reutilizados. Al´em das restri¸c˜oes impostas pelo UML Components, a arquitetura final adotada deve obedecer `as restri¸c˜oes comuns ao ambiente de desenvolvimento utilizado, que s˜ao definidas pelo arquiteto.
1.2.4
Especifica¸c˜
ao do Sistema
Na fase de especifica¸c˜ao s˜ao realizadas as atividades relativas `a an´alise e projeto dos componentes do sistema. Essa fase ´e dividida em 3 sub-fases: (i) identifica¸c˜ao dos com-ponentes, na qual os componentes s˜ao identificados a partir de suas interfaces providas; (ii) intera¸c˜ao entre os componentes, na qual s˜ao identificadas as opera¸c˜oes requeridas pelos componentes de sistema, a partir das intera¸c˜oes entre os componentes das camadas de neg´ocio e de sistema; e (iii) especifica¸c˜ao final dos componentes, onde s˜ao formalizadas as especifica¸c˜oes dos componentes.
1.2.5
Provisionamento dos Componentes
A fase de Provisionamento dos componentes tem como objetivo garantir a materializa¸c˜ao dos componentes especificados. Isso pode ocorrer de trˆes formas: (i) reutiliza¸c˜ao de componentes j´a existentes; (ii) aquisi¸c˜ao de componentes de prateleira; (iii) implementa¸c˜ao de componentes novos.
Em rela¸c˜ao `a reutiliza¸c˜ao de componentes, ´e necess´ario realizar um mapeamento entre as suas opera¸c˜oes e as opera¸c˜oes requeridas especificadas. Esse mapeamento ´e materi-alizado atrav´es de adaptadores [dCGFPR04], como mostrado na Se¸c˜ao 2.4, cuja fun¸c˜ao ´e mascarar a assinatura real das opera¸c˜oes reutilizadas, a fim de tornar a reutiliza¸c˜ao transparente para o componente cliente. Al´em disso, os adaptadores podem identificar a ocorrˆencia de situa¸c˜oes excepcionais e conseq¨uentemente executar o tratamento adequado. J´a no caso dos componentes implementados, ´e necess´ario especificar as suas estruturas internas de acordo com algum modelo de componentes dispon´ıvel. O modelo de mate-rializa¸c˜ao utilizado para os componentes foi o modelo COSMOS [JGR03], apresentado na Se¸c˜ao 2.2.2, que utiliza estruturas dispon´ıveis em linguagens orientadas a objetos e explicita as abstra¸c˜oes da arquitetura do sistema.
Quanto `as exce¸c˜oes, elas devem ser definidas como classes e organizadas de acordo com uma hierarquia predefinida, baseada na proposta apresentada na Se¸c˜ao 2.4. O obje-tivo principal dessa hierarquia excepcional ´e relacionar de maneira consistente as exce¸c˜oes internas e as exce¸c˜oes que fluem entre diferentes componentes arquiteturais. Dessa forma,
o m´etodo MDCE+ oferece diretrizes para o mapeamento entre os tipos de exce¸c˜oes apre-sentados na hierarquia e a classifica¸c˜ao dada pelo modelo do componente ideal.
1.2.6
Montagem do Sistema
Por se tratar de um m´etodo centrado na arquitetura, a fase de montagem ´e dividida em duas etapas: (i) montagem dos componentes arquiteturais; e (ii) montagem do sistema em si. Na primeira etapa ´e feita a montagem dos componentes arquiteturais. Dessa forma, os componentes de implementa¸c˜ao, que implementam os comportamentos relativos `a implementa¸c˜ao das funcionalidades e do tratamento de exce¸c˜oes s˜ao estruturados de acordo com o modelo do componente tolerante a falhas ideal.
A segunda etapa da fase de montagem do sistema consiste na implementa¸c˜ao dos co-nectores do sistema e na constru¸c˜ao do programa principal, que instancia e “monta” os componentes arquiteturais do sistema em tempo de execu¸c˜ao. Apesar dos conectores se-rem refinados nesta fase, eles s˜ao especificados gradativamente desde a fase de especifica¸c˜ao dos componentes, mais especificamente na sub-fase de intera¸c˜ao entre os componentes. A principal atividade excepcional desempenhada pelos conectores ´e a implementa¸c˜ao dos tratadores de exce¸c˜oes na arquitetura do sistema.
1.3
Trabalhos Relacionados
Utilizar um mecanismo de tratamento de exce¸c˜oes ´e uma das formas mais importan-tes de detec¸c˜ao e recupera¸c˜ao de erros e estrutura¸c˜ao de atividades de tolerˆancia a fa-lhas [AL90, Cri89, GRRX01]. Apesar da complexidade desses mecanismos motivar o uso de metodologias de desenvolvimento espec´ıficas, h´a poucos trabalhos nessa ´area [Avi97, dLR99, dLR00, Fer01]. O m´etodo MDCE, descrito na Se¸c˜ao 2.3.8, orienta o desenvolvi-mento excepcional desde a especifica¸c˜ao dos requisitos, passando pela an´alise e projeto do sistema. Por´em, o MDCE n˜ao apresenta diretrizes para tratar as exce¸c˜oes na arquitetura do software, o que impossibilita, entre outras coisas, a reutiliza¸c˜ao de componentes COTS no desenvolvimento de sistemas confi´aveis. Dessa forma, enquanto o MDCE busca espe-cificar sistemas confi´aveis a partir do desenvolvimento de componentes tolerantes a falhas (abordagem botton-up), o m´etodo MDCE+ tamb´em possibilita a especifica¸c˜ao das ativi-dades de tratamento de exce¸c˜oes durante a liga¸c˜ao entre os componentes, n˜ao exigindo que eles possuam esses mecanismos implementados internamente (abordagem combinada botton-up e top-down).
Tolerˆancia a falhas na arquitetura de software ´e uma ´area que vem se destacando pela sua relevˆancia [GRdL03, FdCGR03, SDUV03]. O m´etodo MECE [Pag04] prop˜oe uma sistem´atica com enfoque arquitetural para a especifica¸c˜ao do comportamento excepcional
1.4. Organiza¸c˜ao deste Trabalho 9
em sistemas baseados em componentes. Sua abordagem prop˜oe o uso conjunto e seq¨ uen-cial da MDCE, descrita anteriormente, e do processo UML Components. Al´em disso, o MECE sugere um refinamento da arquitetura do sistema atrav´es da ado¸c˜ao de conectores expl´ıcitos. Apesar dessa melhoria no car´ater arquitetural do MDCE, o MECE n˜ao sis-tematiza a especifica¸c˜ao dos tratadores arquiteturais [IB01]. Outra deficiˆencia existente nesse m´etodo ´e o fato dela n˜ao lidar com o tratamento colaborativo de exce¸c˜oes, isto ´e, situa¸c˜oes onde um conjunto de componentes precisam agir de forma coordenada para a recupera¸c˜ao do estado normal do sistema. Outro diferencial do m´etodo MDCE+ ´e a preo-cupa¸c˜ao com aspectos gerenciais, tais como a defini¸c˜ao de releases para o desenvolvimento incremental e a identifica¸c˜ao e prioriza¸c˜ao de componentes cr´ıticos do sistema.
CO-Actions [dLR99] ´e uma abstra¸c˜ao de modelagem para representa¸c˜ao de compor-tamento colaborativo nas diversas fases da especifica¸c˜ao de um sistema. Apesar de ser voltado para sistemas orientados a objetos, seus conceitos podem ser mapeados dire-tamente para o DBC. Al´em do comportamento colaborativo, CO-Actions considera a necessidade de se especificar o comportamento excepcional desde as fases iniciais do de-senvolvimento do software, propondo uma classifica¸c˜ao das exce¸c˜oes entre: (i) exce¸c˜oes relativas `a aplica¸c˜ao6; (ii) exce¸c˜oes relativas ao projeto7; e (iii) exce¸c˜oes relativas ao suporte
& implementa¸c˜ao8. Por´em, apesar de oferecer formas de modelar e estruturar melhor o
comportamento excepcional, essa abordagem n˜ao ´e apoiada por um processo, isto ´e, ela n˜ao oferece diretrizes para a descoberta e modelagem das exce¸c˜oes e dos seus tratadores.
1.4
Organiza¸c˜
ao deste Trabalho
Este documento foi dividido em seis cap´ıtulos e dois apˆendices, organizados da seguinte forma:
• Cap´ıtulo 2 – Fundamentos de DBC, Arquitetura de Software e Tolerˆancia
a Falhas: O segundo cap´ıtulo apresenta os fundamentos te´oricos necess´arios para embasar este trabalho. Esses conceitos est˜ao classificados em cinco categorias: (i) desenvolvimento baseado em componentes; (ii) arquitetura de software; (iii) tolerˆancia a falhas e tratamento de exce¸c˜oes; (iv) uma estrutura¸c˜ao do comportamento excepcional para DBC; e (v) uma arquitetura confi´avel baseada em tratamento de exce¸c˜oes.
• Cap´ıtulo 3 – O M´etodo MDCE+: Neste cap´ıtulo ´e apresentado o m´etodo
para modelagem do comportamento excepcional MDCE+, que utiliza a arquitetura
6
do inglˆes Application-related
7
do inglˆes Design-related
8
proposta na Se¸c˜ao 2.5 e apresenta diretrizes e atividades importantes a serem consi-deradas no desenvolvimento de sistemas confi´aveis. S˜ao abordados tanto aspectos do desenvolvimento interno dos componentes quanto aspectos arquiteturais do sistema, distribu´ıdos em todas as fases propostas pelo m´etodo.
• Cap´ıtulo 4 – M´etodo MDCE+ Aplicado ao Processo UML Components:
Neste cap´ıtulo, o m´etodo MDCE+ apresentado no cap´ıtulo 3 foi aplicado ao pro-cesso de DBC UML Components. As fases de desenvolvimento espec´ıficas desse processo foram estendidas de forma a sistematizar a identifica¸c˜ao das exce¸c˜oes e a especifica¸c˜ao do comportamento excepcional.
• Cap´ıtulo 5 – Estudo de Caso: Sistema de Controle Banc´ario Neste cap´ıtulo, o processo UML Components modificado, apresentado no Cap´ıtulo 4, foi aplicado num estudo de caso real de um sistema financeiro [dSBRMR05].
• Cap´ıtulo 6 – Conclus˜oes: Neste cap´ıtulo s˜ao apresentadas as conclus˜oes deste trabalho. Al´em disso, s˜ao apontadas as principais contribui¸c˜oes e alguns direciona-mentos para trabalhos futuros.
• Apˆendice A – Question´ario de Avalia¸c˜ao do Estudo de Caso: Neste apˆendice s˜ao apresentados os question´arios utilizados para a avalia¸c˜ao do m´etodo MDCE+, descrito no Cap´ıtulo 5.
Cap´ıtulo 2
Fundamentos de DBC, Arquitetura
de Software e Tolerˆ
ancia a Falhas
Este cap´ıtulo apresenta os fundamentos te´oricos necess´arios para embasar este trabalho. Esses conceitos est˜ao agrupados em cinco se¸c˜oes. As Se¸c˜oes 2.1 e 2.2 tratam de aspectos necess´arios para o sucesso de um projeto baseado em componentes, tais como o pr´oprio conceito de desenvolvimento baseado em componentes (DBC), arquitetura e processos de desenvolvimento de software. A Se¸c˜ao 2.3 apresenta os princ´ıpios de confiabilidade, to-lerˆancia a falhas e tratamento de exce¸c˜oes. Essa se¸c˜ao discute as terminologias utilizadas no decorrer do trabalho e como os mecanismos de tolerˆancia a falhas podem ser imple-mentados em sistemas de software. A Se¸c˜ao 2.4 apresenta uma maneira de estruturar o comportamento excepcional no DBC. Essa estrutura¸c˜ao contempla tanto as exce¸c˜oes internas aos componentes, quanto as exce¸c˜oes que fluem entre diferentes componentes do sistema. A Se¸c˜ao 2.5 mostra a arquitetura adotada pelo MDCE+ para a estrutura¸c˜ao do comportamento excepcional do software.
2.1
Desenvolvimento Baseado em Componentes
A id´eia de utilizar o conceito de DBC na produ¸c˜ao de software data de 1976 [McI76]. Ape-sar desse tempo relativamente longo, o interesse pelo DBC s´o foi intensificado vinte anos depois, ap´os a realiza¸c˜ao do Primeiro Workshop Internacional em Programa¸c˜ao Orientada a Componentes, o WCOP’96 [WCO].
Hoje em dia, a populariza¸c˜ao do DBC est´a sendo motivada principalmente pelas press˜oes sofridas na ind´ustria de software por prazos mais curtos e produtos de maior qualidade. No DBC, uma aplica¸c˜ao ´e constru´ıda a partir da composi¸c˜ao de componen-tes de software que j´a foram previamente especificados, constru´ıdos e componen-testados, o que proporciona um ganho de produtividade e qualidade no software produzido.
Esse aumento da produtividade ´e decorrente da reutiliza¸c˜ao de componentes existentes na constru¸c˜ao de novos sistemas. J´a o aumento da qualidade ´e uma conseq¨uˆencia do fato dos componentes utilizados j´a terem sido empregados e testados em outros contextos. Por´em, vale a pena ressaltar que apesar desses testes pr´evios serem ben´eficos, a reutiliza¸c˜ao de componentes n˜ao dispensa a execu¸c˜ao dos testes no novo contexto onde o componente est´a sendo reutilizado.
Apesar da populariza¸c˜ao atual do DBC, n˜ao existe um consenso geral sobre a defini¸c˜ao de um componente de software, que ´e a unidade b´asica de desenvolvimento do DBC. Por´em, um aspecto muito importante ´e sempre ressaltado na literatura: um componente deve encapsular dentro de si seu projeto e implementa¸c˜ao, al´em de oferecer interfaces bem definidas para o meio externo. O baixo acoplamento decorrente dessa pol´ıtica proporciona muitas flexibilidades, tais como: (i) facilidade de montagem de um sistema a partir de componentes COTS1; e (ii) facilidade de substitui¸c˜ao de componentes que implementam
interfaces equivalentes.
Uma defini¸c˜ao complementar de componentes, adotada na maioria dos trabalhos pu-blicados atualmente, foi proposta em 1998 [Szy98]. Segundo Szyperski, um componente de software ´e uma unidade de composi¸c˜ao com interfaces especificadas atrav´es de contra-tos e dependˆencias de contexto expl´ıcitas. Sendo assim, al´em de explicitar as interfaces com os servi¸cos oferecidos (interfaces providas), um componente de software deve de-clarar explicitamente as dependˆencias necess´arias para o seu funcionamento, atrav´es de suas interfaces requeridas.
Al´em dessa distin¸c˜ao clara entre interfaces providas e requeridas, os componentes seguem trˆes princ´ıpios fundamentais, que s˜ao comuns `a tecnologia de objetos [CD00]:
1. Unifica¸c˜ao de dados e fun¸c˜oes: Um componente deve encapsular o seu estado (dados relevantes) e a implementa¸c˜ao das suas opera¸c˜oes oferecidas, que acessam esses dados. Essa liga¸c˜ao estreita entre os dados e as opera¸c˜oes ajudam a aumentar a coes˜ao do sistema;
2. Encapsulamento: Os clientes que utilizam um componente devem depender so-mente da sua especifica¸c˜ao, nunca da sua implementa¸c˜ao. Essa separa¸c˜ao de inte-resse2 reduz o acoplamento entre os m´odulos do sistema, al´em de melhorar a sua
manuten¸c˜ao;
3. Identidade: Independentemente dos valores dos seus atributos de estado, cada componente possui um identificador ´unico que o difere dos demais.
1
do inglˆes Common-Off-The-Shelf
2
2.1. Desenvolvimento Baseado em Componentes 13
A fim de contextualizar o componente em rela¸c˜ao aos diferentes n´ıveis de abstra¸c˜ao que ele pode ser analisado, um componente pode ser observado atrav´es de diferentes pontos de vista [CD00]. Em outras palavras, dependendo do papel que o interessado3 exerce no
processo de desenvolvimento, a abstra¸c˜ao como o componente ´e analisado pode variar. A Tabela 2.1 descreve os diferentes pontos de vista de um componente [CD00].
Tabela 2.1: Pontos de Vista de um Componente
Ponto de Vista Descric¸ ˜ao
Especifica¸c˜ao E constitu´ıdo da especifica¸c˜` ao de uma unidade de software que descreve o compor-tamento de um componente. Esse comporcompor-tamento ´e definido como um conjunto de interfaces providas e requeridas.
Plataforma S˜ao definidas restri¸c˜oes que o componente deve seguir a fim de ser utilizado em al-guma plataforma espec´ıfica de desenvolvimento. As principais plataformas comerciais existentes s˜ao Enterprise Java Beans [MH99], Corba [MM00] e COM+ [Ses98]. Implementa¸c˜ao E a realiza¸c˜´ ao de uma especifica¸c˜ao. Sendo assim, a implementa¸c˜ao de um
compo-nente est´a para a sua especifica¸c˜ao, assim como uma classe est´a para a sua interface. Esse ponto de vista ´e compartilhado por todos os componentes j´a implementados em alguma linguagem de programa¸c˜ao. Ele representa componentes prontos para serem instalados, como por exemplo, os componentes COTS.
Instala¸c˜ao E uma instala¸c˜´ ao ou c´opia de um componente implementado. Esse ponto de vista ´e utilizado na an´alise do ambiente de execu¸c˜ao. Neste caso, pode ser feita uma analogia `
as classes localizadas no classpath do Java. O classpath ´e a lista de diret´orios onde a m´aquina virtual procura as classes a serem instanciadas.
Instancia¸c˜ao E uma instˆ´ ancia de um componente instalado. Esta ´e a vis˜ao de execu¸c˜ao do com-ponente, com os seus dados encapsulados e um identificador ´unico. ´E semelhante ao conceito de objetos no paradigma de orienta¸c˜ao a objetos.
2.1.1
Processos de Desenvolvimento de Software
O objetivo de um processo de desenvolvimento de software ´e sistematizar as atividades de constru¸c˜ao de programas, distribuindo a sua complexidade em trˆes grupos de ativi-dades gerais [Pre01]: (i) defini¸c˜ao do problema; (ii) desenvolvimento do sistema; e (iv) manuten¸c˜ao. O uso de processos disciplinados de desenvolvimento reduz o n´umero de falhas introduzidas no sistema [Avi97, AL90]. A fim de atingir a sistem´atica necess´aria para isso, os processos devem possuir um conjunto de m´etodos estruturados que detalhem e auxiliem o desenvolvimento de sistemas nas suas fases [Pre01]. Esses m´etodos s˜ao pro-cedimentos sistem´aticos que usam nota¸c˜oes bem definidas para alcan¸car seus objetivos. Assim, os m´etodos s˜ao compostos de atividades e diretrizes de desenvolvimento, normal-mente orientadas a um processo espec´ıfico. De uma maneira geral, os m´etodos devem incluir informa¸c˜oes sobre [Som01]: (i) os modelos produzidos; (ii) as restri¸c˜oes aplicadas a esses modelos; (iii) diretrizes de projeto; e (iv) a seq¨uˆencia de atividades a ser seguida. A maioria dos processos de desenvolvimento de software atuais mapeiam o desen-volvimento do sistema em fases, que detalham os quatro grupos de atividades gerais
3
apresentados anteriormente: Grupo 1: Definic¸˜ao do problema:
• Fase de Especifica¸c˜ao de Requisitos. O objetivo principal desta fase ´e a identifica¸c˜ao dos servi¸cos que devem ser automatizados pelo sistema. Al´em disso, outras informa¸c˜oes e restri¸c˜oes importantes devem ser igualmente docu-mentadas. De acordo com a sua natureza, esses requisitos podem ser classi-ficados em duas categorias: (i)requisitos funcionais, que representam os com-portamentos que um sistema deve apresentar diante de certas a¸c˜oes de seus usu´arios; e (ii) requisitos n˜ao-funcionais, que quantificam determinados aspec-tos do comportamento do sistema [Som01].
Grupo 2: Desenvolvimento do Sistema:
• Fase de An´alise - Nesta etapa, os desenvolvedores se concentram na iden-tifica¸c˜ao das entidades principais para a implementa¸c˜ao dos requisitos do sis-tema. As entidades identificadas s˜ao representadas a partir das suas informa¸c˜oes de estado (dados internos) e das principais opera¸c˜oes a serem oferecidas. • Fase de Especifica¸c˜ao da Arquitetura - Baseado principalmente nos
re-quisitos n˜ao-funcionais especificados na fase de especifica¸c˜ao de rere-quisitos, se d´a in´ıcio `a especifica¸c˜ao da arquitetura do sistema. Normalmente, essa fase consiste na escolha da arquitetura que melhor ofere¸ca as propriedades arquite-turais desejadas para satisfazer os requisitos n˜ao funcionais.
• Fase de Projeto - A etapa de projeto consiste no refinamento dos modelos gerados na an´alise. Esse refinamento visa a aplica¸c˜oes de padr˜oes, por exemplo, os padr˜oes de projetos4 sugeridos por Gamma et.al. [GHJV95]. Ainda nessa
etapa, a forma como as entidades interagem entre si ´e detalhada e especificada. • Fase de Implementa¸c˜ao - Esta etapa consiste na materializa¸c˜ao dos mode-los especificados e detalhados no projeto em uma linguagem de programa¸c˜ao. Normalmente ´e feito um mapeamento direto das estruturas da modelagem para a linguagem de programa¸c˜ao. Quando isso n˜ao ´e poss´ıvel, se faz necess´ario a utiliza¸c˜ao de um modelo de mapeamento. Alguns exemplos de modelos para a implementa¸c˜ao de componentes de software em linguagens orientadas a ob-jetos podem ser os modelos EJB5 [MH99], CCM6 [MM00], DCOM7 [Ses98] e
4
do inglˆes Design patterns
5
do inglˆes Enterprise Java Beans
6
do inglˆes Corba Component Model
7
2.1. Desenvolvimento Baseado em Componentes 15
COSMOS8 [JGR03].
• Fase de Testes - Na etapa de testes, o sistema ´e verificado para se certificar de que os requisitos especificados est˜ao implementados de maneira satisfat´oria. • Fase de Distribui¸c˜ao9- Esta etapa consiste na entrega e instala¸c˜ao do sistema
nos diversos ambientes onde ser˜ao utilizados pelos clientes. Grupo 3: Manutenc¸˜ao:
• Fase de Manuten¸c˜oes Corretivas - As atividades desta fase consistem de a¸c˜oes com o objetivo de corrigir inconsistˆencias entre os requisitos especificados e o sistema implementado;
• Fase de Manuten¸c˜oes Evolutivas (ou perfectivas) - As a¸c˜oes de manu-ten¸c˜oes evolutivas adicionam novas funcionalidades aos sistemas j´a desenvol-vidos. Sendo assim, com a aplica¸c˜ao dessas atividades, o tempo de vida dos sistemas costumam aumentar;
• Fase de Manuten¸c˜oes Adaptativas - Esse tipo de manuten¸c˜ao ´e decorrente de mudan¸cas no ambiente tecnol´ogico onde o software atua. Exemplos desse tipo de mudan¸ca pode ser a utiliza¸c˜ao de um novo sistema operacional ou um novo sistema gerenciador de banco de dados [HHK+99];
• Fase de Manuten¸c˜oes Preventivas - As atividades de manuten¸c˜oes preven-tivas s˜ao decorrentes de modifica¸c˜oes realizadas para melhorar a confiabilidade ou a manutenibilidade futura [Pfl01]. Dessa forma, esse tipo de manuten¸c˜ao tem o intuito de aumentar a vida do software, facilitando futuras evolu¸c˜oes do sistema.
Essas fases apresentadas constituem as etapas de execu¸c˜ao do desenvolvimento de um software. Por´em, al´em do processo de desenvolvimento, que especifica e implementa o sistema a partir dos seus requisitos, para se desenvolver um sistema de software ´e ne-cess´ario seguir ao mesmo tempo um processo gerencial [CD00]. Um processo gerencial ´e respons´avel por esquematizar atividades, planejar libera¸c˜oes, alocar recursos e monitorar os progressos do desenvolvimento. Na literatura encontramos alguns exemplos de aborda-gens que incluem um dos processos ou ambos. Por exemplo, o processo Catalysis [DW99] e o processo UML Components [CD00] s˜ao basicamente processos de desenvolvimento; enquanto que o processo unificado (RUP10) [JBR99] trata tanto do processo gerencial
quanto do processo de desenvolvimento.
8
do inglˆes Component Structuring Model dor Object-oriented Systems
9
do inglˆes Deployment
10
Este trabalho est´a concentrado em processos de desenvolvimento de software e para facilitar a leitura, quando o termo simples processo for utilizado, se trata de uma referˆencia a um processo de desenvolvimento.
2.1.2
Processos de Desenvolvimento Baseado em Componentes
Com a populariza¸c˜ao do DBC, a necessidade de novos processos voltados para esse para-digma ´e uma realidade. Isso acontece porque os processos de desenvolvimento tradicionais n˜ao se adequam totalmente ao desenvolvimento de sistemas baseados em componentes. Mais especificamente, esses processos devem conter fases e m´etodos que tamb´em ofere¸cam t´ecnicas que permitam o empacotamento de componentes com o objetivo espec´ıfico de se-rem reutilizados [Som01]. Essa reutiliza¸c˜ao sistem´atica deve levar em considera¸c˜ao a captura de abstra¸c˜oes que facilitem o entendimento do sistema tanto para seu desenvolvi-mento, quanto para a reutiliza¸c˜ao de componentes [Szy98, Som01]. Os m´etodos tamb´em devem auxiliar na defini¸c˜ao de como os componentes devem ser conectados uns aos outros para atender aos requisitos especificados. Em outras palavras, processos de DBC devem auxiliar na constru¸c˜ao da arquitetura do software [CD00].
Uma t´ecnica bastante utilizada para a estrutura¸c˜ao de componentes prop´ıcios a serem reutilizados ´e a de an´alise de dom´ınio11 [KCH+90, FH95]. O fundamento b´asico dessa
t´ecnica ´e a an´alise da l´ogica do neg´ocio no qual os componentes se inserem. Sendo assim, os componentes que contˆem as funcionalidades das entidades b´asicas do dom´ınio s˜ao considerados candidatos `a reutiliza¸c˜ao.
As principais particularidades dos processos de DBC podem ser observadas tanto no acr´escimo de est´agios t´ecnicos ao processo convencional, quanto no enfoque dado a algumas pr´aticas j´a realizadas. Um processo de desenvolvimento de software baseado em componentes geralmente inclui a defini¸c˜ao de estrat´egias para [JBR99, CD00]:
• Defini¸c˜ao expl´ıcita da arquitetura do sistema. A explicita¸c˜ao da arquitetura tem o objetivo principal de enfatizar os aspectos de intera¸c˜ao entre os componentes do sistema, com os seus fluxos e restri¸c˜oes;
• Separa¸c˜ao de contextos a partir do modelo de dom´ınios. Com essa
se-para¸c˜ao, pretende-se classificar os componentes mais prop´ıcios `a reutiliza¸c˜ao, de acordo com a l´ogica do neg´ocio de cada sistema em desenvolvimento;
• Identifica¸c˜ao das interfaces dos componentes. Um dos objetivos principais do DBC ´e a constru¸c˜ao de sistemas facilmente modific´aveis [CD00]. O baixo acopla-mento proporcionado pela defini¸c˜ao de interfaces providas e requeridas ´e um meio de alcan¸car esse objetivo;
11
2.2. Arquitetura de Software 17
• Identifica¸c˜ao do comportamento interno dos componentes. A etapa de
projeto, comum a todos os processos de desenvolvimento, consiste na modelagem dos servi¸cos oferecidos pelo componente. Por ser uma estrutura altamente encapsulada, deve haver transparˆencia em rela¸c˜ao `a tecnologia utilizada para a sua implementa¸c˜ao interna;
• Montagem dos componentes do sistema. Nesta etapa ocorre a materializa¸c˜ao da configura¸c˜ao da arquitetura do sistema final. Devido `a sua autonomia, um com-ponente de software implementa seus servi¸cos utilizando unicamente as suas interfa-ces requeridas. Sendo assim, a fase de montagem consiste na indica¸c˜ao dos objetos reais que implementam essas interfaces; e
• Manuten¸c˜ao de um reposit´orio de componentes. O objetivo principal da utiliza¸c˜ao de reposit´orios ´e maximizar a reutiliza¸c˜ao de componentes. Isso acon-tece atrav´es do oferecimento de mecanismos de busca sistem´aticos que auxiliam o desenvolvimento do software. Normalmente, essas t´ecnicas s˜ao utilizadas em dois momentos principais: (I) no in´ıcio da especifica¸c˜ao; e (ii) antes do projeto interno dos componentes do sistema.
2.2
Arquitetura de Software
2.2.1
Conceito e Terminologia
A arquitetura de software, atrav´es de um alto n´ıvel de abstra¸c˜ao, define o sistema em termos de seus componentes arquiteturais, que representam unidades abstratas do sistema; a intera¸c˜ao entre essas entidades, que s˜ao materializadas explicitamente atrav´es dos conectores; e os atributos e funcionalidades de cada um [Som01]. Por conhecerem o fluxo interativo entre os componentes do sistema, ´e poss´ıvel nos conectores, estabelecer protocolos de comunica¸c˜ao e coordenar a execu¸c˜ao dos servi¸cos que envolvam mais de um componente do sistema.
Essa vis˜ao estrutural do sistema em um alto n´ıvel de abstra¸c˜ao proporciona benef´ıcios importantes, que s˜ao imprescind´ıveis para o desenvolvimento de sistemas de software com-plexos. Os principais benef´ıcios s˜ao: (i) a organiza¸c˜ao do sistema como uma composi¸c˜ao de componentes l´ogicos; (ii) a antecipa¸c˜ao da defini¸c˜ao das estruturas de controle globais; (iii) a defini¸c˜ao da forma de comunica¸c˜ao e composi¸c˜ao dos elementos do projeto; e (iv) o aux´ılio na defini¸c˜ao das funcionalidade de cada componente projetado. Al´em disso, uma propriedade arquitetural representa uma decis˜ao de projeto relacionada a algum requisito n˜ao-funcional do sistema, que quantifica determinados aspectos do seu comportamento, como confiabilidade, reusabilidade e modificabilidade [CK03, Som01].
A presen¸ca de uma determinada propriedade arquitetural pode ser obtida atrav´es da utiliza¸c˜ao de estilos arquiteturais que possam garantir a preserva¸c˜ao dessa propriedade durante o desenvolvimento do sistema [SG96, MKMG97]. Um estilo arquitetural ca-racteriza uma fam´ılia de sistemas que s˜ao relacionados pelo compartilhamento de suas propriedades estruturais e semˆanticas. Esses estilos definem inclusive restri¸c˜oes de comu-nica¸c˜ao entre os componentes do sistema. A maneira como os componentes de um sistema ficam dispostos ´e conhecida como configura¸c˜ao.
As propriedades arquiteturais s˜ao derivadas dos requisitos do sistema e influenciam, direcionam e restringem todas as fases do seu ciclo de vida. Sendo assim, a arquitetura de software ´e um artefato essencial no processo de desenvolvimento de softwares modernos, sendo ´util em todas as suas fases [CWMY02]. A importˆancia da arquitetura fica ainda mais clara no contexto do desenvolvimento baseados em componentes. Isso acontece, uma vez que na composi¸c˜ao de sistemas, os componentes precisam interagir entre si para ofe-recer as funcionalidades desejadas. Al´em disso, devido `a diferen¸ca de abstra¸c˜ao entre a arquitetura e a implementa¸c˜ao de um sistema, um processo de desenvolvimento baseado em componentes deve apresentar uma distin¸c˜ao clara entre os conceitos de componente arquitetural, que ´e abstrato e n˜ao ´e necessariamente instanci´avel; e componente de imple-menta¸c˜ao, que representa a materializa¸c˜ao de uma especifica¸c˜ao em alguma tecnologia espec´ıfica e deve necessariamente ser instanci´avel.
2.2.2
Modelo COSMOS
Para que os benef´ıcios proporcionados pela arquitetura de software sejam efetivamente v´alidos, ´e necess´ario que as abstra¸c˜oes produzidas no projeto arquitetural do sistema sejam consideradas nas v´arias fases do desenvolvimento, vistas na Se¸c˜ao 2.1.1: an´alise, projeto arquitetural, projeto, implementa¸c˜ao, testes e distribui¸c˜ao [CWMY02]. Por´em, as linguagens de programa¸c˜ao atuais n˜ao oferecem a abstra¸c˜ao necess´aria para o mapeamento direto das estruturas b´asicas da arquitetura para o c´odigo [JGR03]. Sendo assim, se faz necess´ario o uso de um modelo capaz de viabilizar a implementa¸c˜ao dos componentes, conectores e configura¸c˜oes.
O modelo COSMOS [JGR03] ´e um modelo gen´erico e independente de plataforma, que utiliza estruturas dispon´ıveis na maioria das linguagens de programa¸c˜ao orientadas a objetos, para a implementa¸c˜ao de componentes de software. Os principais objetivos do COSMOS s˜ao (i) garantir que a implementa¸c˜ao do sistema esteja em conformidade com a sua arquitetura e (ii) facilitar a evolu¸c˜ao dessa implementa¸c˜ao.
Para oferecer esses objetivos, o modelo COSMOS incorpora um conjunto de direti-vas de projeto que facilita a evolu¸c˜ao dos componentes implementados. Essas diretidireti-vas incluem: (i) materializa¸c˜ao dos elementos arquiteturais, isto ´e, componentes, conectores