Geração de código e criação de designers visuais com o Domain Specific Language Tools
André Furtado
01.
02.
03.
04.
05.
O Insucesso de Software
Software Factories
Domain-Specific Languages
Demo: QuizLanguage
Conclusões
O Insucesso de Software
Qual o sucesso de projetos de desenvolvimento de software hoje?
Reflexão
Pesquisa do The Standish Group:
desfecho de projetos de diferentes portes
no EUA, 2004
Failed: 18%
Challenged: 53%
Succeeded: 29%
O sucesso não vem fácil...
© The Standish Group 2004
Taxa de sucesso de projetos de software
Successful: 29%
“Red tape” development
Tarefas rotineiras erepetitivas consomem
tempo e recursos valiososdo projeto!
Cenário de Desenv. de Software
Como permitir que tempo e Como permitir que tempo e recursos sejam alocados ao que recursos sejam alocados ao que
realmente está precisando?realmente está precisando?
Ainda mais em um cenário com Ainda mais em um cenário com tendência a aumento tendência a aumento
exponencial da demanda por exponencial da demanda por software?software?
Questões a serem respondidas
Software Factories
Desenv. de Software como Artesanato
Trabalho intensivo
Ferramentas genéricas
Processos genéricos
Um tipo de aplicação por vez
Feita a mão do zero
Reuso mínimo
Objetivo: aumentar o nível de abstração no desenvolvimento...
... levando para software conceitos já praticados em outras indústrias
Documentação
Padrões
Frameworks
Ferramentas
Linguagensautomaçãoautomação
linhas de linhas de produçãoprodução
cadeias de cadeias de abastecimentoabastecimento
previsibilidadprevisibilidadeereuso!reuso!
Industrialização de Software
Reuso de designs & componentes
Construção de protótipos similares mas distintos
A chave está em suportar a variabilidade
Defina apenas as peças únicas de cada
sistema
Explorando o que há de comum
Evolução do paradigma de desenvolvimento de software:
Foco em:
Famílias de aplicações
Abordagem sistemática
Reuso e empacotamento (assembling) de componentes
Automatizar trabalho rotineiro
artesanal artesanal manufatura manufatura
Fundamentos de Software Factories
Customizam Word/Excel para uma tarefa específica
Analogia: templates do Office
Software Factories não são novidade
Conceito já usado no Japão em 1980 Mas o que está sendo mais enfatizado agora?
Domínios específicos suportados Domínios específicos suportados por ambientes de por ambientes de
desenvolvimento (IDEs)desenvolvimento (IDEs)
Fundamentos de Software Factories
Domain-Specific Languages (DSLs)
Abordagens de pesquisa / desenvolvimento
Quais as principais diferenças de cada abordagem?
Reflexão
Em computação:
Dilema Genérico X Específico
CobolCobol FortranFortran LispLisp
businessbusinessprocessingprocessing
numericnumericcomputationcomputation
symbolicsymbolicprocessingprocessing
CC
(Visual) Basic(Visual) Basic
C#C#
??????
JogosJogos
MedicinaMedicina MúsicaMúsica
Banco de dadosBanco de dados
Device driversDevice drivers
Manipulação deManipulação deimagensimagens Agentes móveisAgentes móveisProtocolos deProtocolos de
comunicaçãocomunicação
?????? ??????
Um pouco de história...
?????? ??????
Frameworks orientados a objeto /Frameworks orientados a objeto /Frameworks de componentesFrameworks de componentes
Domain SpecificDomain SpecificLanguagesLanguages
Bibliotecas de subrotinas /Bibliotecas de subrotinas /APIs (Application Program Interface)APIs (Application Program Interface)
Endereçando domínios específicos
Definição formal:
Linguagem que oferece, através deLinguagem que oferece, através denotações e abstrações adequadas,notações e abstrações adequadas,um poder de expressão focado emum poder de expressão focado em
(e geralmente restrito a)(e geralmente restrito a)um domínio particularum domínio particular
Domain Specific Languages
Exemplos de DSLs
LEX
YACC
SQL
BNF
HTML
JavaDoc
TeX
Linguagens para comandos na shell do sistema operacional
DSLs estão em todos os lugares
A própria linguagens de fórmulas do Excel é uma DSL!
Exemplos de DSLs
Construtores de GUI também podem ser vistos como manipuladores de DSLs?
Sim, mas a Sim, mas a experiência do experiência do
usuáriousuário, , entretanto, é entretanto, é
diferente (pois a diferente (pois a DSL é visual!)DSL é visual!)
DSL Visuais
Utiliza DSLs visuais para modelar a solução em um domínio
Exemplo: linguagem para aplicações de smart phones
Modelagem visual
Outro exemplo: modelagem no VS Team System for Architects
Modelagem Visual
Modelagem, diagramas, etc. para documentação são de pouco uso
Proposta: agregar geradores ao processo
[Tolvanen 2003][Tolvanen 2003]
Modelagem Visual
[Tolvanen 2003][Tolvanen 2003]
Feito várias Feito várias vezes, pelos vezes, pelos
desenvolvedordesenvolvedoreses
+ abstração e + abstração e poder de poder de
expressão!expressão!
Feito Feito apenas uma apenas uma
vez, pelo vez, pelo projetista da projetista da linguagemlinguagem
Modelagem Visual
DSLs (principalmente as visuais) são poderosas e ao mesmo tempo custosas... como melhorar isso?
Através de programas Através de programas de suporte à criação de suporte à criação de DSLs:de DSLs: “language “language
workbenches”workbenches”
Reflexão
Plug in para a IDE Visual Studio .NET
Suporte à criação de DSLs visuais
Captura dos conceitos do domínio
Definição de um editor gráfico
Criação de transformadores (ex.: gerador de código)
VS Team System DSL Tools
Exemplo do DSL Tools: SharpLudus
VÍDEOModelagem visual com o SharpLudus
DEMOUltimate Berzerk - SharpLudus
Estudo de caso:QuizLanguage
Objetivo
Criar uma DSL visual para a modelagem e construção automática de jogos de pergunta e resposta (quiz games)
QuizLanguage
Aonde queremos chegar...
Conceitos do domínio podem ser arrastados da Toolbox
1. Projetista modela DSL
Aos poucos, a DSL visual vai sendo construída...
Propriedades são adicionadas a conceitos
Relacionamentos entre conceitos são criados
1. Projetista modela DSL
A janela DSL Explorer permite criar novos tipos de dados
1. Projetista modela DSL
1. Projetista modela DSL
Da Toolbox são adicionadas ao diagrama formas gráficas (imagens, compartimentos, etc.)
2. Projetista define sintaxe visual da DSL
Mapeamento da sintaxe para os conceitos também é realizado
2. Projetista define sintaxe visual da DSL
Decoradores textuais e gráficos podem ser associados às formas gráficas, através da janela DSL Details
2. Projetista define sintaxe visual da DSL
O gerador é feito em linguagem de script semelhante a C#
Tags <# ... #> delimitam lógica de processamento
Tags <#= ... #> jogam expressões no output
Texto fora das tags é copiado diretamente
3. Projetista implementa gerador de código
4. Projetista implementa framework a ser consumido pelo código gerado
5. Desenvolvedor consome a DSL visual
Código que consome o framework é gerado
Código próprio do desenvolvedor é implementado em classes parciais
6. Desenvolvedor constrói produto final
7. Usuário final consome aplicação
Conclusões
SFs permitem uma melhor solução de problemas por aproximar desenvolvedores do domíno
Language workbenches como o VS DSL Tools facilitam e suportam o processo
A proposta atual sozinha jamais garantirá o sucesso na criação de software
A indústria precisa amadurecer primeiroFábricas de software, DSLs, etc., são um meio, jamais um fim
Considerações Finais
LINKS ÚTEIS
MSDNhttp://www.msdn.com.br
Certificações Microsofthttp://www.microsoft.com/brasil/certifiquehttp://www.microsoft.com/learning
VS 2005 Team System DSL Tools
Projeto SharpLudus
AFurtado - websites pessoais
http://lab.msdn.microsoft.com/teamsystem/workshop/dsltools/default.aspx
http://www.cin.ufpe.br/~sharpludus
http://www.cin.ufpe.br/~awbfhttp://thespoke.net/blogs/afurtado
PERGUNTAS E RESPOSTAS
http://www.cin.ufpe.br/~sharpludushttp://thespoke.net/blogs/afurtado
Top Related