SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
   
QtModeling: Metamodelagem e
Model-Driven Software Engineering
com Qt5
Sandro S. Andrade
sandroandrade@kde.org / @andradesandro
FISL 15 – Fórum Internacional de Software Livre – Porto Alegre – Maio/2014
   
Introdução
● Motivos para uso de modelos na Engenharia de
Software:
● Documentação
● Geração automática de código / sincronização modelo-
artefatos
● Recuperação Arquitetural e Verificação de Conformidade
● Gerência de Qualidade e Integração Contínua
● Predição de Atributos de Qualidade / Simulação
● Domain-Specific Languages (DSLs)
● Models@run.time
   
Introdução
● Diferentes notações diferentes propósitos→ →
diferentes graus de formalidade:
– Linguagem natural, gráficos informais, UML, Architecture
Description Languages (ADLs)
● Linguagens de modelagem baseadas em
metamodelos:
– Metamodelo Linguagem de Modelagem Modelo→ →
– MOF MOF {UML, CWM, DuSE} seu modelo→ → →
   
Introdução
● Exemplo de
stack de
metamodelagem:
   
Introdução
● Model-Driven Software Engineering (MDSE)
● Uma plataforma para MDSE deve ser capaz de:
– Permitir a criação, manipulação e transformação de
modelos descritos em diversas linguagens de
modelagem
– Permitir a criação de novas linguagens de modelagem
(de domínio específico)
– Viabilizar a integração do uso de modelos nas atividades
que compõem o processo de desenvolvimento
   
Introdução
● Cenário exemplo 1:
– Configuração de um exemplar de uma linha de produto
(ex: novo sistema embarcado para smartphones) a partir
do uso de modelos
– Análise da arquitetura resultante (teste arquitetural
antecipado)
– Subsequente geração de código ou artefatos de
integração
   
Introdução
● Cenário exemplo 2:
– Uma arquitetura prescrita foi projetada pelo arquiteto
– Constantes evoluções/manutenções podem degradar a
arquitetura
– Deseja-se integrar o uso de modelos nos scripts de
Integração Contínua de modo a detectar
antecipadamente possíveis desvios/erosões
arquiteturais
   
Qt5
● Lançado oficialmente em Dezembro de 2012
● Qt-project.org
● Amplo conjunto de features:
– Widgets, Multimídia, Network, Banco de Dados, OpenGL,
Sensors, XML, dentre outras
● Plataformas suportadas:
– Windows, Linux/X11, Max OS X, QNX, VxWorks, Android,
iOS
● Nenhum suporte a uso de modelos (até então)
   
Qt5
   
QtModeling
● Conjunto de módulos add-on do Qt5 para MDSE
● Desenvolvido upstream
● http://qt-project.org/wiki/QtModeling
● git clone git://gitorious.org/qt/qtmodeling.git
   
QtModeling
● Objetivos:
– Alta conformidade com os padrões do Object
Management Group (OMG)
– API Qt-ish para criação e manipulação de modelos:
● Fácil compreensão
● Boa produtividade
– Excelente desempenho em múltiplas plataformas
– Suporte por ferramenta (DuSE-MT):
● Extensibilidade
   
QtModeling - API
QUmlModel *model = new QUmlModel("MyModel");
QUmlPackage *package = new QUmlPackage("Package1");
QUmlPrimitiveType *stringType = new QUmlPrimitiveType("String");
QUmlClass * class_ = new QUmlClass("Student");
class_->setAbstract(false);
QUmlProperty *property = new QUmlProperty(“name”);
property->setType(stringType);
property->setFinal(true);
… (cont.)
   
QtModeling - API
… (cont.)
package->addOwnedType(class_);
model->addPackagedElement(package);
model->addOwnedType(primitiveType);
// query model or
// perform 'well-formed/sanity/architectural conformance'
// checks
delete model;
   
QtModeling – Serialização XMI
QFile file("test.xmi");
if (!file.open(QFile::WriteOnly | QFile::Text)) {
qDebug() << "Cannot write file !";
return 1;
}
QXmiWriter writer(model);
writer.writeFile(&file);
file.close();
   
QtModeling
● Módulos disponíveis:
– QtModeling
– QtModelingWidgets
– QtMof + metamodel plugin
– QtUml + metamodel plugin
– QtDuSE + metamodel plugin
– QtSADuSEProfile + metamodel plugin
   
DuSE-MT
● Nasceu como um exemplo de uso do QtModeling
● Evoluiu para uma ferramenta de MDSE (duse.sf.net)
● Objetivos de design:
– Metamodel-agnostic (metamodelos/linguagens são
plugins)
– Acesso e manipulação de modelos via linguagens
interpretadas
– Amplo editor de propriedades
– Implementação declarativa de sintaxes concretas
   
DuSE-MT
   
DuSE-MT – Model Inspector
   
DuSE-MT – Plugins
   
DuSE-MT – Sintaxe Concreta
   
DuSE-MT – Interpretador JavaScript
   
DuSE-MT – Property Editor
   
QtModeling - Desafios
● O metamodelo da UML possui 239 metaclasses
● Destas, 193 são classes concretas
● Muitas heranças múltiplas e dreaded diamonds
– Estaria tudo ok se estivéssemos implementando em C++
(heranças virtuais) …
– … mas QObject's não gostam de heranças múltiplas
(muito menos virtuais)
– Solução: QObject-free implementation + QObject-based
wrappers
   
QtModeling - Desafios
● 91.83% do código do metamodelo UML foi gerado
automaticamente:
– OMG XMI Perl Template Toolkit QtModeling templates→ →
QtUml/QtMof/Qt<your-language> implementation→
● Exceções: propriedades derivadas e operações
(sendo implementadas sob demanda)
● Futuro: Grantlee para suportar geração automática
de implementações de metamodelos
– Ex: definição de DSLs
   
QtModeling - Desafios
● A implementação atual possui suporte completo a:
– Propriedades do tipo Derived (sob demanda) e Derived
Union (já implementadas)
– Propriedades opposite, subsetted e redefined
– Operações (sob demanda)
– Enumerações
– Clonagem de elementos de modelagem
– Memory ownership para agregações do tipo composite
– Serialização XMI (metamodel-agnostic)
   
DuSE-MT - Desafios
● Amplo uso de reflexão computacional, de modo a
não depender de um metamodelo particular
● QtScript para viabilização de um Interpretador
JavaScript para acesso e manipulação de modelos:
– Criação de regras de boa-formação pelo próprio usuário
– Plugins escritos em JavaScript (ou Python, Ruby, etc
com o KDE Kross)
● Novos models e views do Qt para acesso aos
elementos e propriedades de um elemento
   
DuSE-MT - Desafios
● Sintaxe concreta:
– QML to the rescue
– Porque QML:
● Linguagem declarativa (boa produtividade, boa compreensão)
● Execução suportada por hardware (OpenGL)
● Amplamente utilizada para construção de GUIs/UXs em
diversos form factors
● Tecnologia de preferência para construção de novos widgets
para o KDE Plasma
   
DuSE-MT - Desafios
● Exemplo de sintaxe concreta em QML:
import QtQuick 2.0
UmlElement {
UmlSlot { id: nameSlot; anchors.top: parent.top
Text { id: label, text: element.name,
anchors.centerIn: parent
}
}
… (cont.)
   
DuSE-MT - Desafios
● Exemplo de sintaxe concreta em QML:
UmlSlot { id: attributeSlot
anchors { top: nameSlot.bottom; topMargin: -1 }
height: (parent.height - nameSlot.height)/2
ListView { model: element.ownedAttributes
anchors { fill: parent; margins: 4 }
delegate: Text {
text: visibility(modelData.visibility) + modelData.name + ": " +
modelData.type
}
   
DuSE-MT - Desafios
● Resultado:
   
DuSE
● Processo para projeto arquitetural automatizado de
arquiteturas de software
● Linguagem para criação de design spaces
arquiteturais específicos de domínio
● Objetivos:
– Representar conhecimento refinado de design de uma
maneira mais sistemática e estruturada
– Suportar o (re)design automatizado de arquiteturas
– Suportar otimização multi-objetivo de arquiteturas
   
DuSE - metamodelo
   
DuSE - otimização
● Otimizando arquiteturas de software:
– Trade-offs entre atributos de qualidade são inevitáveis
– Otimização multi-objetivo com articulação a posteriori de
preferências é uma boa forma de abordar o problema
● Novo módulo: QtOptimization
– Influenciado pelo JMetal
– Disponibiliza o algoritmo evolucionário para otimização
multi-objetivo NSGA-II
– Retorna um Pareto-front de arquiteturas (near-)optimal
   
DuSE - aplicações
● SA:DuSE
– Design Space concreto, especificado em DuSE, que
captura as principais dimensões de design no domínio de
Sistemas Self-Adaptive
– Aplicado para gerar automaticamente arquiteturas de
controladores para arquiteturas MapReduce e
WebServers
● SO:DuSE (em andamento)
– Idem, para Sistemas Self-Organizing
   
QtModeling – o futuro
● Comunidade em formação:
– 1 professor, 3 alunos de pós-graduação, 2 bolsistas PIBIC,
2 alunos de graduação
– 2 contribuidores iniciantes na Europa e Asia
● Ainda não temos um release :(
   
QtModeling – o futuro
● Trabalhos futuros:
– Framework para geração flexível de código
– Redes sociais para modelagem de software
– Estilos arquiteturais, recuperação, métricas, model@RT
(em andamento)
– Boost no Umbrello ?
– Suporte a MDSE no QtCreator e KDevelop ?
   
QtModeling – o futuro
● O QtModeling é um projeto Qt
● Contribuições são sempre bem-vindas
● Há muito a ser feito !!!
   
Obrigado ! Perguntas ?
Sandro S. Andrade
sandroandrade@kde.org / @andradesandro
FISL 15 – Fórum Internacional de Software Livre – Porto Alegre – Maio/2014

Mais conteúdo relacionado

Mais procurados

Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweightMateus Amaral
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singletonWendel Moreira
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Julian Correa
 
Criando jogos digitais em java
Criando jogos digitais em javaCriando jogos digitais em java
Criando jogos digitais em javaMichel Montenegro
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 

Mais procurados (7)

Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweight
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1
 
Criando jogos digitais em java
Criando jogos digitais em javaCriando jogos digitais em java
Criando jogos digitais em java
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 

Destaque

Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...
Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...
Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...Sandro Andrade
 
QtModeling - bringing metamodeling features into the KDE world
QtModeling - bringing metamodeling features into the KDE worldQtModeling - bringing metamodeling features into the KDE world
QtModeling - bringing metamodeling features into the KDE worldSandro Andrade
 
Minuet - the KDE approach to music education
Minuet - the KDE approach to music educationMinuet - the KDE approach to music education
Minuet - the KDE approach to music educationSandro Andrade
 
SASO2013 - PechaKucha version
SASO2013 - PechaKucha versionSASO2013 - PechaKucha version
SASO2013 - PechaKucha versionSandro Andrade
 
Desenvolvendo Widgets QML para o KDE Plasma
Desenvolvendo Widgets QML para o KDE PlasmaDesenvolvendo Widgets QML para o KDE Plasma
Desenvolvendo Widgets QML para o KDE PlasmaSandro Andrade
 
Práticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDEPráticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDESandro Andrade
 
KDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e Sociais
KDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e SociaisKDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e Sociais
KDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e SociaisSandro Andrade
 
Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...
Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...
Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...Sandro Andrade
 
Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...
Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...
Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...Sandro Andrade
 
Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...
Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...
Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...Sandro Andrade
 
Software Livre e Novas Formas de Trabalho - InfoUNEB 2016
Software Livre e Novas Formas de Trabalho - InfoUNEB 2016Software Livre e Novas Formas de Trabalho - InfoUNEB 2016
Software Livre e Novas Formas de Trabalho - InfoUNEB 2016Sandro Andrade
 
Desenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtDesenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtSandro Andrade
 
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataArquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataSandro Andrade
 

Destaque (14)

Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...
Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...
Apresentação no 4o Workshop de Sistemas Distribuídos Autonômicos - WoSiDA 201...
 
O KDE no mundo
O KDE no mundoO KDE no mundo
O KDE no mundo
 
QtModeling - bringing metamodeling features into the KDE world
QtModeling - bringing metamodeling features into the KDE worldQtModeling - bringing metamodeling features into the KDE world
QtModeling - bringing metamodeling features into the KDE world
 
Minuet - the KDE approach to music education
Minuet - the KDE approach to music educationMinuet - the KDE approach to music education
Minuet - the KDE approach to music education
 
SASO2013 - PechaKucha version
SASO2013 - PechaKucha versionSASO2013 - PechaKucha version
SASO2013 - PechaKucha version
 
Desenvolvendo Widgets QML para o KDE Plasma
Desenvolvendo Widgets QML para o KDE PlasmaDesenvolvendo Widgets QML para o KDE Plasma
Desenvolvendo Widgets QML para o KDE Plasma
 
Práticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDEPráticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDE
 
KDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e Sociais
KDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e SociaisKDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e Sociais
KDE de 2008 a 2018: Retrospectivas e Perspectivas Técnicas e Sociais
 
Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...
Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...
Do Search-Based Approaches Improve the Design of Self-Adaptive Systems ? A Co...
 
Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...
Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...
Software Livre: Estruturalismo, Impactos no Processo de Ensino-Aprendizagem e...
 
Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...
Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...
Architectural Design Spaces for Feedback Control in Self-Adaptive Systems Con...
 
Software Livre e Novas Formas de Trabalho - InfoUNEB 2016
Software Livre e Novas Formas de Trabalho - InfoUNEB 2016Software Livre e Novas Formas de Trabalho - InfoUNEB 2016
Software Livre e Novas Formas de Trabalho - InfoUNEB 2016
 
Desenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtDesenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com Qt
 
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataArquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigData
 

Semelhante a Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Engineering com Qt5

Validação de Transformações e Model-Driven Engineering (MDE)
Validação de Transformações e Model-Driven Engineering (MDE)Validação de Transformações e Model-Driven Engineering (MDE)
Validação de Transformações e Model-Driven Engineering (MDE)Alexandre Augusto Giron
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
Machine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produçãoMachine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produçãoMarlesson Santana
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Camilla Gomes
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Automatizando mudanças na Engenharia Dirigida a Modelos
Automatizando mudanças na Engenharia Dirigida a ModelosAutomatizando mudanças na Engenharia Dirigida a Modelos
Automatizando mudanças na Engenharia Dirigida a ModelosRaquel Machado
 
Web Development em 2015
Web Development em 2015Web Development em 2015
Web Development em 2015Emanuel Santos
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_jsgustavobeavis
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010Wagner Reck
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Renato Groff
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoLorival Smolski Chapuis
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Renato Groffe
 

Semelhante a Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Engineering com Qt5 (20)

Validação de Transformações e Model-Driven Engineering (MDE)
Validação de Transformações e Model-Driven Engineering (MDE)Validação de Transformações e Model-Driven Engineering (MDE)
Validação de Transformações e Model-Driven Engineering (MDE)
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Machine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produçãoMachine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produção
 
Apresentação Drupal como LMS
Apresentação Drupal como LMSApresentação Drupal como LMS
Apresentação Drupal como LMS
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Automatizando mudanças na Engenharia Dirigida a Modelos
Automatizando mudanças na Engenharia Dirigida a ModelosAutomatizando mudanças na Engenharia Dirigida a Modelos
Automatizando mudanças na Engenharia Dirigida a Modelos
 
Web Development em 2015
Web Development em 2015Web Development em 2015
Web Development em 2015
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
FDD
FDDFDD
FDD
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
 
347842.ppt
347842.ppt347842.ppt
347842.ppt
 

Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Engineering com Qt5

  • 1.     QtModeling: Metamodelagem e Model-Driven Software Engineering com Qt5 Sandro S. Andrade sandroandrade@kde.org / @andradesandro FISL 15 – Fórum Internacional de Software Livre – Porto Alegre – Maio/2014
  • 2.     Introdução ● Motivos para uso de modelos na Engenharia de Software: ● Documentação ● Geração automática de código / sincronização modelo- artefatos ● Recuperação Arquitetural e Verificação de Conformidade ● Gerência de Qualidade e Integração Contínua ● Predição de Atributos de Qualidade / Simulação ● Domain-Specific Languages (DSLs) ● Models@run.time
  • 3.     Introdução ● Diferentes notações diferentes propósitos→ → diferentes graus de formalidade: – Linguagem natural, gráficos informais, UML, Architecture Description Languages (ADLs) ● Linguagens de modelagem baseadas em metamodelos: – Metamodelo Linguagem de Modelagem Modelo→ → – MOF MOF {UML, CWM, DuSE} seu modelo→ → →
  • 4.     Introdução ● Exemplo de stack de metamodelagem:
  • 5.     Introdução ● Model-Driven Software Engineering (MDSE) ● Uma plataforma para MDSE deve ser capaz de: – Permitir a criação, manipulação e transformação de modelos descritos em diversas linguagens de modelagem – Permitir a criação de novas linguagens de modelagem (de domínio específico) – Viabilizar a integração do uso de modelos nas atividades que compõem o processo de desenvolvimento
  • 6.     Introdução ● Cenário exemplo 1: – Configuração de um exemplar de uma linha de produto (ex: novo sistema embarcado para smartphones) a partir do uso de modelos – Análise da arquitetura resultante (teste arquitetural antecipado) – Subsequente geração de código ou artefatos de integração
  • 7.     Introdução ● Cenário exemplo 2: – Uma arquitetura prescrita foi projetada pelo arquiteto – Constantes evoluções/manutenções podem degradar a arquitetura – Deseja-se integrar o uso de modelos nos scripts de Integração Contínua de modo a detectar antecipadamente possíveis desvios/erosões arquiteturais
  • 8.     Qt5 ● Lançado oficialmente em Dezembro de 2012 ● Qt-project.org ● Amplo conjunto de features: – Widgets, Multimídia, Network, Banco de Dados, OpenGL, Sensors, XML, dentre outras ● Plataformas suportadas: – Windows, Linux/X11, Max OS X, QNX, VxWorks, Android, iOS ● Nenhum suporte a uso de modelos (até então)
  • 10.     QtModeling ● Conjunto de módulos add-on do Qt5 para MDSE ● Desenvolvido upstream ● http://qt-project.org/wiki/QtModeling ● git clone git://gitorious.org/qt/qtmodeling.git
  • 11.     QtModeling ● Objetivos: – Alta conformidade com os padrões do Object Management Group (OMG) – API Qt-ish para criação e manipulação de modelos: ● Fácil compreensão ● Boa produtividade – Excelente desempenho em múltiplas plataformas – Suporte por ferramenta (DuSE-MT): ● Extensibilidade
  • 12.     QtModeling - API QUmlModel *model = new QUmlModel("MyModel"); QUmlPackage *package = new QUmlPackage("Package1"); QUmlPrimitiveType *stringType = new QUmlPrimitiveType("String"); QUmlClass * class_ = new QUmlClass("Student"); class_->setAbstract(false); QUmlProperty *property = new QUmlProperty(“name”); property->setType(stringType); property->setFinal(true); … (cont.)
  • 13.     QtModeling - API … (cont.) package->addOwnedType(class_); model->addPackagedElement(package); model->addOwnedType(primitiveType); // query model or // perform 'well-formed/sanity/architectural conformance' // checks delete model;
  • 14.     QtModeling – Serialização XMI QFile file("test.xmi"); if (!file.open(QFile::WriteOnly | QFile::Text)) { qDebug() << "Cannot write file !"; return 1; } QXmiWriter writer(model); writer.writeFile(&file); file.close();
  • 15.     QtModeling ● Módulos disponíveis: – QtModeling – QtModelingWidgets – QtMof + metamodel plugin – QtUml + metamodel plugin – QtDuSE + metamodel plugin – QtSADuSEProfile + metamodel plugin
  • 16.     DuSE-MT ● Nasceu como um exemplo de uso do QtModeling ● Evoluiu para uma ferramenta de MDSE (duse.sf.net) ● Objetivos de design: – Metamodel-agnostic (metamodelos/linguagens são plugins) – Acesso e manipulação de modelos via linguagens interpretadas – Amplo editor de propriedades – Implementação declarativa de sintaxes concretas
  • 18.     DuSE-MT – Model Inspector
  • 19.     DuSE-MT – Plugins
  • 20.     DuSE-MT – Sintaxe Concreta
  • 21.     DuSE-MT – Interpretador JavaScript
  • 22.     DuSE-MT – Property Editor
  • 23.     QtModeling - Desafios ● O metamodelo da UML possui 239 metaclasses ● Destas, 193 são classes concretas ● Muitas heranças múltiplas e dreaded diamonds – Estaria tudo ok se estivéssemos implementando em C++ (heranças virtuais) … – … mas QObject's não gostam de heranças múltiplas (muito menos virtuais) – Solução: QObject-free implementation + QObject-based wrappers
  • 24.     QtModeling - Desafios ● 91.83% do código do metamodelo UML foi gerado automaticamente: – OMG XMI Perl Template Toolkit QtModeling templates→ → QtUml/QtMof/Qt<your-language> implementation→ ● Exceções: propriedades derivadas e operações (sendo implementadas sob demanda) ● Futuro: Grantlee para suportar geração automática de implementações de metamodelos – Ex: definição de DSLs
  • 25.     QtModeling - Desafios ● A implementação atual possui suporte completo a: – Propriedades do tipo Derived (sob demanda) e Derived Union (já implementadas) – Propriedades opposite, subsetted e redefined – Operações (sob demanda) – Enumerações – Clonagem de elementos de modelagem – Memory ownership para agregações do tipo composite – Serialização XMI (metamodel-agnostic)
  • 26.     DuSE-MT - Desafios ● Amplo uso de reflexão computacional, de modo a não depender de um metamodelo particular ● QtScript para viabilização de um Interpretador JavaScript para acesso e manipulação de modelos: – Criação de regras de boa-formação pelo próprio usuário – Plugins escritos em JavaScript (ou Python, Ruby, etc com o KDE Kross) ● Novos models e views do Qt para acesso aos elementos e propriedades de um elemento
  • 27.     DuSE-MT - Desafios ● Sintaxe concreta: – QML to the rescue – Porque QML: ● Linguagem declarativa (boa produtividade, boa compreensão) ● Execução suportada por hardware (OpenGL) ● Amplamente utilizada para construção de GUIs/UXs em diversos form factors ● Tecnologia de preferência para construção de novos widgets para o KDE Plasma
  • 28.     DuSE-MT - Desafios ● Exemplo de sintaxe concreta em QML: import QtQuick 2.0 UmlElement { UmlSlot { id: nameSlot; anchors.top: parent.top Text { id: label, text: element.name, anchors.centerIn: parent } } … (cont.)
  • 29.     DuSE-MT - Desafios ● Exemplo de sintaxe concreta em QML: UmlSlot { id: attributeSlot anchors { top: nameSlot.bottom; topMargin: -1 } height: (parent.height - nameSlot.height)/2 ListView { model: element.ownedAttributes anchors { fill: parent; margins: 4 } delegate: Text { text: visibility(modelData.visibility) + modelData.name + ": " + modelData.type }
  • 30.     DuSE-MT - Desafios ● Resultado:
  • 31.     DuSE ● Processo para projeto arquitetural automatizado de arquiteturas de software ● Linguagem para criação de design spaces arquiteturais específicos de domínio ● Objetivos: – Representar conhecimento refinado de design de uma maneira mais sistemática e estruturada – Suportar o (re)design automatizado de arquiteturas – Suportar otimização multi-objetivo de arquiteturas
  • 32.     DuSE - metamodelo
  • 33.     DuSE - otimização ● Otimizando arquiteturas de software: – Trade-offs entre atributos de qualidade são inevitáveis – Otimização multi-objetivo com articulação a posteriori de preferências é uma boa forma de abordar o problema ● Novo módulo: QtOptimization – Influenciado pelo JMetal – Disponibiliza o algoritmo evolucionário para otimização multi-objetivo NSGA-II – Retorna um Pareto-front de arquiteturas (near-)optimal
  • 34.     DuSE - aplicações ● SA:DuSE – Design Space concreto, especificado em DuSE, que captura as principais dimensões de design no domínio de Sistemas Self-Adaptive – Aplicado para gerar automaticamente arquiteturas de controladores para arquiteturas MapReduce e WebServers ● SO:DuSE (em andamento) – Idem, para Sistemas Self-Organizing
  • 35.     QtModeling – o futuro ● Comunidade em formação: – 1 professor, 3 alunos de pós-graduação, 2 bolsistas PIBIC, 2 alunos de graduação – 2 contribuidores iniciantes na Europa e Asia ● Ainda não temos um release :(
  • 36.     QtModeling – o futuro ● Trabalhos futuros: – Framework para geração flexível de código – Redes sociais para modelagem de software – Estilos arquiteturais, recuperação, métricas, model@RT (em andamento) – Boost no Umbrello ? – Suporte a MDSE no QtCreator e KDevelop ?
  • 37.     QtModeling – o futuro ● O QtModeling é um projeto Qt ● Contribuições são sempre bem-vindas ● Há muito a ser feito !!!
  • 38.     Obrigado ! Perguntas ? Sandro S. Andrade sandroandrade@kde.org / @andradesandro FISL 15 – Fórum Internacional de Software Livre – Porto Alegre – Maio/2014