Componentes de Software Baseados em Engenharia de



Documentos relacionados
5º Congresso de Pós-Graduação

5º Congresso de Pós-Graduação

Desenvolvimento de Software

INF1013 MODELAGEM DE SOFTWARE

Metamodelos para Banco de Dados. Carlos Julian Menezes Araújo Prof. Dr. Robson do Nascimento Fidalgo

Model Driven Development (MDD)

Engenharia de Software II

BibIme - Um Software Gerenciador de Bibliotecas Produzido de Forma Cooperativa

Ferramenta MVCase Uma Ferramenta Integradora de Tecnologias para o Desenvolvimento de Componentes Distribuídos

IA346 M Métodos de Pesquisa Para Engenharia de Computação. Atividade 07

Proposta de elaboração de linha de produtos de software utilizando desenvolvimento orientado a modelos

Arquitetura de Software

Prof. Fábio Lúcio Meira

Engenharia de Domínio e Desenvolvimento Baseado em Componentes. Processo DBC-Arch-DE Apoio do Ambiente Odyssey no Processo Considerações Finais

Webmedia 06 Diego Fiori de Carvalho Júlio Cézar Estrella Renata Pontin de Mattos Fortes Rudinei Goularte

Proposta de Trabalho de Conclusão de Curso

Visões Arquiteturais. Visões Arquiteturais

Um Sistema de Arquivos para o EPOS

Integração de Ontologia com Modelagem de Processo: Um Método para Facilitar a Elicitação de Requisitos

FUNDAMENTOS DA ANÁLISE E PROJETO DE SISTEMAS. Projeto de Programas PPR0001

Pesquisa de Iniciação Científica desenvolvida no Grupo de Pesquisa em Computação Aplicada (GCA) da UNIJUI 2

Uma Abordagem para Engenharia de Requisitos no Domínio de Software Embarcado

Ferramenta de Suporte ao Projeto Automatizado de Sistemas Computacionais Embarcados

USANDO XML PARA CARGA AUTOMÁTICA DE DADOS EM BANCOS DE DADOS DE PROJETO INDUSTRIAL DE MAQUETE ELETRÔNICA PROPOSTA DE TRABALHO DE GRADUAÇÃO

Ferramentas CASE. CASE fornece ao engenheiro de software a habilidade de automatizar atividades manuais e de aperfeiçoar o conhecimento de engenharia.

Contexto. Motivação. variabilidade. variabilidade

Introdução à Engenharia de Software

MODELOS DE PROCESSO TÉCNICAS INTELIGENTES QUE APOIAM A CONSTRUÇÃO DE UM SOFTWARE

Fundamentos de Teste de Software

Bibliografia. Quais são os problemas? capacidade de construção. acompanha a demanda por novos programas. ameaçada por projetos ruins.

Análise de Sistemas. Aula 5

NextFlow: Um Framework para Mapeamento de Processos de Negócio e Objetos

Falta Erro Falha. Motivação. Teste de Software. Falha, Falta e Erro. Falha, Falta e Erro. Falha, Falta e Erro. Falha, Falta e Erro 6/6/11

Estratégias de Teste para Modelos Baseados no Simulink

Versão 3.1br. Foundation Level Model Based Tester

Engenharia de Software para Sistemas Embarcados

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Ambientes de Execução

MANUAL PARA DESENVOLVIMENTO DE SOFTWARE TRABALHO DE CONCLUSAO DE CURSO EM SISTEMAS DE INFORMAÇÃO

Utilização de uma estratégia para identificação de fontes de informação na fase de elicitação

MODELAGEM DE TRANSISTORES E DE CIRCUITOS ANALÓGICOS CMOS USANDO VERILOG-AMS

Reduzindo mudanças de requisitos no desenvolvimento de software usando Modelagem Independente de Computação e UX Design

Engenharia de Software II

UNIVERSIDADE FEDERAL DO PARANÁ - UFPR Bacharelado em Ciência da Computação

Real-Time Dynamic Voltage Scaling for the EPOS Operating System

Introdução à Análise e Projeto de Sistemas

APLICANDO A INTEGRAÇÃO DE PORTAIS EDUCACIONAIS COM APLICAÇÕES MÓVEIS ATRAVÉS DA INFRAESTRUTURA SAAS-RD.

UNIVERSIDADE FEDERAL DA BAHIA

Ciclo de vida: fases x atividades

Deswik.Sched. Sequenciamento por Gráfico de Gantt

VINICIUS MIANA BEZERRA TDRRC - TÉCNICA PARA DOCUMENTAÇÃO E RECUPERAÇÃO DE REQUISITOS NO CÓDIGO- FONTE ATRAVÉS DO USO DE ANOTAÇÕES

Visões Arquiteturais. Arquitetura de Software Thaís Batista

Sistemas Embarcados (embutidos) Paulo C. Masiero

Geração semi-automática de massas de testes funcionais a partir da composição de casos de uso e tabelas de decisão

Universidade Federal de Pernambuco Centro de Informática Departamento de Sistemas de Computação. Graduação em Ciência da Computação

CRIAÇÃO DE UM APLICATIVO DA USESKILL PARA O AMBIENTE MOBILE

ONTOBRAS Seminário de Pesquisa em Ontologia do Brasil

UNIVERSIDADE FEDERAL DO PARANÁ UFPR BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

Arquitetura de Software: Documentação

Arquitetura de Aplicações J2EE. Jorge Fernandes Outubro de 2003

Engenharia de Software

Acadêmico: Mateus Artur Schneiders Prof. Orientador: Dr. Mauro Marcelo Mattos

Um Método para Melhoria de Dados Estruturados de Imóveis

Product Integration. INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS - INPE Pós-Graduação em Engenharia e Tecnologia Espaciais - ETE.

UML Unified Modeling Language Linguagem de Modelagem Unificada

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

6º Congresso de Pós-Graduação AUTOMATIZAÇÃO DO PROCESSO DE CRIAÇÃO DE VISÕES PARA MODELAGEM DE DW

Mineração de Textos na Web

Diagrama de Componentes e Implantação

Apresentação do Capítulo 4 MDA (Model-Driven Archtecture) ALUNO: DOMENICO SCHETTINI FILHO NÚMERO USP:

Engenharia de Software I: Introdução. Graduação em Informática 2009 Profa. Itana Gimenes

CK119: Engenharia de Software

Elicitação de requisitos de software através da utilização de questionários

Uma Abordagem para o Controle da Evolução de Software no Desenvolvimento Orientado a Modelos

INF1404 MODELAGEM DE SISTEMAS

Infraestrutura e Aplicações de Redes Sociais Móveis para Colaboração em Saúde

RUP RATIONAL UNIFIED PROCESS PRÁTICAS RECOMENDADAS. Prof. Fabiano Papaiz IFRN

Ontologias de Engenharia de Software

UNIVERSIDADE PRESBITERIANA MACKENZIE Faculdade de Computação e Informática. 5 a ETAPA

4 Processo de Transformação

MAPEAMENTO E MODELAGEM DE PROCESSOS COM NOTAÇÃO BPMN

Professor Emiliano S. Monteiro

Módulo I Princípios e Padrões de Projeto de SW em Java

Rational Unified Process (RUP)

Engenharia de Software. Prof. Me. Clodoaldo Brasilino

UNIVERSIDADE PRESBITERIANA MACKENZIE Faculdade de Computação e Informática. 5th SEMESTER

Análise e Projeto Orientado a Objetos. Nazareno Andrade Baseado no material dos profs. Hyggo Almeida e Jacques Sauvé

Utilização de técnicas de Process Mining em Sistemas de Middleware Adaptativos Proposta de Trabalho de Graduação

Curso de Sistemas de Informação. Karla Donato Fook DESU / DComp. Modelagem de Dados UML

06/10/16 Ademir Santos EVANCE PLATAFORMA NA NUVEM

FUNDAMENTOS DE ENGENHARIA DE SOFTWARE. Professor: Paulo Vencio

Modelos em Sistemas de Informação. Aula 2

3ª Aula. Processo de Projeto em SE Exemplo de projeto: Sistema de Mapa GPS. Introdução. PSI3441 Arquitetura de Sistemas Embarcados

UML e seus diagramas

Análise de Desempenho de Plataformas para Desenvolvimento com o Sistema Operacional Android

Métricas de Software Importância e Aplicação

Autor 1 Orientador: 1. dia de mês de ano

Transcrição:

19 a 21 de mar o de 2010 117 Componentes de Software Baseados em Engenharia de Domínio Leonardo Ciocari, Rafael Cancian 1 Centro de Ciências Tecnológicas da Terra e do Mar (CTTMar) Universidade do Vale do Itajaí (UNIVALI) Email:{leonardociocari,cancian}@univali.br Abstract. Embedded systems are usually designed using a repository of reusable components. To be reusable, however, components must be designed for that. A common technique used to identify and design reusable components is the domain engineering. This paper presents the development of a software tool that starts from a domain model and generates a repository of components in a semiautomatic way. The repository includes the source-code and testers structure of components and the meta data for their characterization. As a study case a domain model for embedded operating system was used to generate a repository. Results show that a well done domain model with an adequate detail level allows the code generation and characterization of components and families of components that can really be used for automatically component selection and for designing several applications. Resumo. Sistemas embarcados são comumente desenvolvidos a partir de um conjunto ou repositório de componentes reusáveis. Entretanto, para serem reusáveis, esses componentes precisam ser projetados com esse objetivo. Uma técnica utilizada para identificar e projetar componentes reusáveis é a engenharia de domínio. Este artigo apresenta o desenvolvimento de uma ferramenta que, a partir de um modelo de domínio gerado pelo usuário, realiza a geração semi-automática de um repositório de componentes, incluindo a infra-estrutura dos componentes, testadores e seus metadados para caracterização dos componentes e posterior seleção. Como estudo de caso utilizou-se um modelo de domínio que representa sistemas operacionais embarcados. Os resultados demonstram que uma boa modelagem do domínio com o nível de detalhamento adequado permite a geração de código e a caracterização de componentes e famílias de componentes que, efetivamente, podem ser utilizados por uma ferramenta para seleção automática de componentes e geração de diferentes aplicações embarcadas. 1. Introdução Por integrarem hardware e software, desenvolvedores de aplicações embarcadas costumam se preocupar não apenas com as próprias aplicações, mas também com o suporte de execução de sua aplicação e com a arquitetura de hardware na qual a aplicação executará. Entretanto, essa necessidade costuma levar a menos reusabilidade e portabilidade e ainda maior tempo de desenvolvimento. Algumas técnicas auxiliam no aumento da reusabildiade de artefatos de software, como o Projeto Baseado em Componentes (CbD), em que se desenvolvem componentes que possam ser reaproveitados em outros projetos. Entretanto para que um componente seja reusável, técnicas como a Engenharia de Domínio

19 a 21 de mar o de 2010 118 devem preceder seu desenvolvimento, pois é nessa etapa que se faz o mapeamento das características do domínio da aplicação e a extração de componentes reusáveis. Com um repositório de componentes reusáveis, desenvolvedores de aplicações podem utilizar os componentes como infra-estrutura básica para o desenvolvimento de novas aplicações. Além disso, projetistas precisam que os componentes sejam anotados com metadados que permitam sua seleção adequada e a estimativa de características como energia consumida, área de memória e tempo de execução. Este artigo apresenta o desenvolvimento de uma ferramenta capaz de fazer a geração semi-automática de um repositório de componentes a partir de um modelo de domínio. Assim, o desenvolvedor de aplicação terá à sua disposição um repositório de componentes comuns ao modelo de domínio (e, portanto, reusáveis), preocupando-se apenas com a aplicação, e o desenvolvedor da infra-estrutura terá a estrutura básica dos componentes. Esta estrutura básica inclui arquivos com metadados, a estrutura em C++ do código dos componentes e de seus testadores. Como estudo de caso foi utilizado um modelo de domínio de sistemas operacionais embarcados para a geração de um repositório de componentes. A escolha do domínio de sistemas operacionais embarcados justifica-se pois sistemas embarcados estão se tornando mais complexos e é necessário que haja o suporte adequado a aplicações complexas, como gerenciamento de processos, temporização, sincronização, gerenciamento de dispositivos e outros aspectos tipicamente encontrados nos sistemas operacionais. Este artigo está organizado da seguinte forma: na Seção 2 é apresentada a fundamentação teórica, focando técnicas de projeto de sistemas embarcados. Na Seção 3 é apresentada a ferramenta a ser desenvolvida, sua arquitetura, funcionamento básico, requisitos e um estudo de caso. A seção 4 apresenta as considerações finais, incluindo as próximas etapas do desenvolvimento. 2. Fundamentação Teórica O Desenvolvimento Baseado em Componentes (Component-based Design - CbD) melhora a produtividade e qualidade no desenvolvimento de um software, pois visa usar blocos de códigos ou serviços já existentes. Isto também facilita a atualização do software, pois basta substituir os componentes existentes por atualizados [YAU and DONG 2000]. Os componentes devem ser claramente caracterizados para permitir posterior seleção e exploração do espaço de projeto. Utilizando o CbD é possível criar componentes adequados à aplicação e disponibilizá-los num repositório de componentes. O repositório de componentes é basicamente uma biblioteca de componentes de software/hardware reusáveis que devem ser suficientes às necessidades dos desenvolvedores de aplicações. Para que o repositório de componentes seja realmente útil na criação de aplicações, é preciso caracterizar seus componentes com informações (metadados) que incluem dependências entre componentes e a descrição de suas interfaces. Para sistemas baseados em componentes, o fluxo de projeto de sistemas embarcados pode ser dividido em fluxo de projeto da infra-estrutura e fluxo de projeto da aplicação (que utiliza a infraestrutura já desenvolvida). No fluxo de projeto da infra-estrutura faz-se a modelagem do domínio, e para isso utilizam-se metodologias como a Engenharia de Domínio. A Engenharia de Domínio é a base para o desenvolvimento de sistemas de soft-

19 a 21 de mar o de 2010 119 ware reusáveis, pois identifica e documenta o que há em comum entre várias aplicações de um mesmo domínio, permitindo um curto ciclo de desenvolvimento para futuras aplicações [Subramanian 1997]. Trata-se de uma técnica que se concentra em produzir uma série de artefatos que possam ser reaproveitados em outros projetos [Pressman 2000], e recomenda-se que essa engenharia seja realizada em pelo menos três etapas: análise de domínio, especificação da infra-estrutura e a implementação desta infra-estrutura [Arango and Prieto-Diaz 1989]. A Engenharia de Domínio permite extrair a interface dos componentes, e estes, então, podem ser representados adequadamente utilizando o CbD. Por fim, os componentes irão popular um repositório, formando assim o repositório de componentes que será utilizado na geração de aplicações. Sistemas operacionais embarcados fornecem o suporte de execução a aplicações. Eles abstraem a arquitetura de hardware em que estão executando e permitem que aplicações possam executar utilizando a interface provida pelo sistema operacional. De modo geral, sistemas operacionais projetados adequadamente permitem que aplicações possam acompanhar a evolução do hardware sem necessidade de grande esforço de desenvolvimento [Polpeta and Fröhlich 2004]. Para se atingir reusabilidade e portabilidade em um sistema embarcado, a separação em camadas com interfaces bem definidas é essencial. 3. Desenvolvimento A figura 1 apresenta a arquitetura geral da ferramenta. Um modelo de domínio é representado utilizando um ou mais diagramas UML, que são lidos e analisados pela ferramenta para extrair seus componentes e disponibilizá-los no repositório de componentes, que é formado por componentes, seus testadores e metadados. Figura 1. Arquitetura geral da ferramenta Como estudo de caso, utilizou-se um modelo de domínio correspondente ao domínio dos sistemas operacionais embarcados para a geração de um repositório de componentes. A modelagem do domínio utilizada como entrada para a ferramenta foi feita com base no código-fonte do sistema operacional EPOS (Embedded and Parallel Operating System) [Fröhlich 2001], que não possuía repositório formal com metadados. Um modelo composto por diagramas de classe foi gerado através do software Enterprise Architecture (EA), usando a função de engenharia reversa sobre o código de componentes do sistema operacional EPOS. Esse modelo inicial foi adaptado e estruturado para tornarse um modelo de domínio, representando as famílias de componentes e os níveis de abstração apresentados anteriormente. Esse modelo final foi exportado em XML e utilizado como parâmetro de entrada na ferramenta de geração de repositório. O repositório gerado inclui cerca de 50 componentes de software, dispostos em 21 pastas e em 71 arquivos.

19 a 21 de mar o de 2010 120 A estrutura dos arquivos de metadados corresponde à maior parte da estrutura de componentes de software. Os arquivos basicamente contêm informações sobre componentes de software, como: família, nome da família, sua interface pública, quais são seus membros, seus métodos públicos e arquivo que contêm o código-fonte, entre outras. São gerados dois tipos de arquivos de metadados: (I) um arquivo principal, sempre denominado metadata.xml e armazenado na pasta raiz do repositório de componentes, e que contém informações sobre a estrutura do repositório dos outros arquivos de metadados; e (II) arquivos de metadados de cada família de componentes, e que contêm informações sobre ela e seus membros. No primeiro quadro abaixo pode ser visto um pedaço do arquivo de metadados metadata.xml do repositório de sistemas operacionais embarcados gerado pela ferramenta, contendo informações das famílias de componentes extraídas do domínio e sobre os outros arquivos de metadados do repositório que as representam. O segundo quadro abaixo mostra um trecho do arquivo de metadados da família thread. <repository domain="embedded operating system" version="1.0.0" date=""> <family name="thread" hierarchy="abstraction/process/thread" filename="./abstraction/process/thread/thread.xml" /> <family name="scheduler" hierarchy="abstraction/process/scheduler" filename="./abstraction/process/scheduler/scheduler.xml" /> </repository> <family name="thread" hierarchy="abstraction/process/thread" interface_class="incremental"> <dependencies> <dependency type="requisit" dependency="abstraction/process/scheduler"/> <dependency type="requisit" dependency="hardware_mediator/architecture/cpu" /> </dependencies> <member name="thread"> <source_codes> <local_file author="" filename="thread.h" path="./abstraction/process/thread/thread.h" type="h" /> </source_codes> <public_interface> <virtual_interface> <software_interface> <methods> <method name="join" qualifier="" returntype="int" /> <method name="resume" qualifier="" returntype="void" /> <method name="sleep" qualifier="" returntype="void"> <parameter name="q" defaultvalue="" direction="" isconst="false" type="queue*" /> </method> <method name="switch_threads" qualifier="" returntype="void"> <parameter name="prev" defaultvalue="" direction="" isconst="false" type="thread*" /> <parameter name="next" defaultvalue="" direction="" isconst="false" type="thread*" /> </method> </member> </family> 4. Conclusões Para reduzir o tempo de desenvolvimento e de manutenção do software embarcado é necessário que os componentes sejam reusáveis para diferentes aplicações, o que pode

19 a 21 de mar o de 2010 121 ser conseguido com a prévia engenharia de domínio dessas aplicações para a geração de componentes mais adequados. Nesse sentido, o objetivo principal deste trabalho foi desenvolver uma ferramenta para a geração semi-automática de um repositório de componentes a partir de um modelo de domínio. A versão atual desta ferramenta inclui uma infra-estrutura que permite facilmente sua evolução, devido ao uso de padrões de projeto que separam interface de possível implementações. Ela já possui geradores internos de metadados, código e testadores de componentes, é simples de ser usada e exige poucas diretrizes para que o modelo de domínio possa ser interpretado. Por fim, efetivamente pode auxiliar o desenvolvedor de aplicações gerando de forma semi-automática um repositório de componentes para qualquer aplicação que será desenvolvida. Entretanto, nem todos os metadados podem ser extraídos do modelo de domínio, simplesmente porque o modelo de domínio não possui certos tipos de informações, como o tamanho de memória ocupado por um componente de software. De qualquer modo, esse tipo de metadado é necessário apenas no caso de haver uma outra ferramenta para geração automática do sistema, seleção dos componentes ou exploração do espaço de projeto. Se não for esse o caso, esses metadados não são necessários e pode-se passar diretamente às etapas de implementação dos artefatos reusáveis e das aplicações em si. Desenvolvimentos futuros incluem a representação completa da estrutura de componentes prevista inicialmente, o que contempla componentes de hardware sintetizável (IPs) e de hardware físico (componentes eletrônicos), o sincronismo automático entre a implementação do repositório e o modelo de domínio que o gerou e a manutenção de metadados usados para exploração do espaço de projeto. Referências Arango, G. and Prieto-Diaz, R. (1989). Domain Analysis: Acquisition of Reusable Information for Software Construction, chapter Domain analysis: Concepts and research directions. IEEE Computer Society Press. Fröhlich, A. A. M. (2001). Application-Oriented Operating Systems. PhD thesis, Sankt Augustin: GMD - Forschungszentrum Informationstechnik. 200 pages. Polpeta, F. V. and Fröhlich, A. A. (2004). Hardware mediators: a portability artifact for component-based systems. In Proceedings of the International Conference on Embedded and Ubiquitous Computing, volume 3207 of Lecture Notes in Computer Science, pages 271 280, Aizu, Japan. Springer. Pressman, R. (2000). Software Engineering: A Practitioner s Approach. McGraw-Hill. Subramanian, S. (1997). Software asset management and domain engineering. In COMP- SAC 97: Proceedings of the 21th IEEE Computer Software and Applications Conference, pages 494 495. YAU, S. S. and DONG, N. (2000). Integration in component-based software development using design patterns. In (COMPSAC) 24 o Annual International Computer Software and Applications Conference.