QtModeling permite a criação, manipulação e transformação de modelos em diversas linguagens de modelagem. Ele também permite a criação de novas linguagens de modelagem específicas de domínio. Ferramentas como DuSE-MT usam QtModeling para fornecer funcionalidades como edição de propriedades, plugins e sintaxes concretas para modelos. QtModeling continua em desenvolvimento ativo com foco em geração de código, redes sociais e estilos arquiteturais.
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→ → →
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;
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
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
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
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