CAPSI 2004 Painel "Desenvolvimento Rápido Baseado em Modelos" Desenvolvimento rápido e rigoroso de aplicações: visão e desafios João Pascoal Faria (FEUP / INESC-Porto) ([email protected], www.fe.up.pt/~jpf ) 4 de Novembro de 2004 Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Desenvolvimento rápido e rigoroso Especificar e verificar é quase tudo, o resto são detalhes de implementação e optimização tratados por ferramentas e especialistas sub-contratados Falar muito da linguagem do negócio e pouco da linguagem da tecnologia Subir os níveis de abstracção, economia de expressão, rigor e reutilização Objectivos: • Combinar modelos visuais, modelos formais, modelos verificáveis, modelos executáveis (DSL’s, OCL, XT-UML, UML, ...) para suportar um desenvolvimento rápido e rigoroso de aplicações empresariais (tipicamente) Áreas de investigação: • • • • • • Engenharia de Software Sistemas de Informação Combinação de métodos formais com métodos tradicionais Model-driven development Geração e verificação automática de código ... Detalhes: • http://www.fe.up.pt/~jpf/talks/CAPSI2004.ppt Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Background Pessoal (1) Desenvolvimento e manutenção de ferramenta de desenvolvimento rápido de aplicações • SAGA – Sistema Assistido de Geração e Gestão de Aplicações • INESC – Porto, desde 1989 • Usada no desenvolvimento e manutenção do pacote SIGMA – Sistema Integrado de Gestão Municipal e Autárquico • Ambiente integrado de desenvolvimento e execução • Aplicações a duas camadas, baseadas em tabelas (BD) e vistas interactivas (formulários e relatórios) Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Background Pessoal (2) Definição e gestão de vistas interactivas (formulários e relatórios) • Definição declarativa, fortemente estruturada e independente de plataforma, totalmente armazenada em repositório relacional • Expressões usadas só para definir - dados e propriedades calculados, incondicional ou condicionalmente validações listas de valores admissíveis valores por defeito triggers evento-acção macro-comandos (associados a botões e/ou opções de menus) • Gestão automática de vistas interactivas - mapeamento para a base de dados - determinação automática de condições de junção - propagação automática de actualizações - navegação nas vistas - relações master-detail - relações lookup-select - validações nas vistas (com transacções e undo nas vistas) - dados calculados nas vistas (paradigma de folha de cálculo) Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Usar modelos visuais, formais, executáveis e traduzíveis Modelação visual (semi-formal) em UML Modelação formal com OCL • Enriquecimento de modelos visuais em UML com especificações formais de invariantes, pré-condições e póscondições em OCL Elaboração de modelos executáveis e traduzíveis em UML executável, XTUML por exemplo • Enriquecimento de modelos visuais em UML com especificações de acções em linguagem de alto nível Verificação e validação baseada em modelos Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Combinar linguagens genéricas com linguagens especializadas para vencer a barreira de complexidade rapidez de desenvolvimento linguagem genérica várias linguagens especializadas "em cima" de uma linguagem genérica (VB, Java, UML, ...) linguagem especializada (4GL, PL/SQL, DSLs, ...), barreira de complexidade complexidade do problema Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Combinar linguagens genéricas com linguagens especializadas para vencer a barreira de complexidade linguagem especializada tecnologia (ex: Crystal Reports) domínio de especialização especificação implementação negócio (ex: apólices) componentes reutilizáveis Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Combinar linguagens genéricas com linguagens especializadas para vencer a barreira de complexidade linguagem especializada formas de expressão propriedades, atributos (XML, formulários, ...) expressões, fórmulas, código (OCL, Java, C#, ...) diagramas, esquemas (UML, ...) Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Dos modelos de processos de negócio aos modelos de casos de utilização do sistema documento do negócio Consulta externa: do pedido até à efectivação Médico Marcar Consulta Funcionário Administrativo sistema ou sub-sistema Manual SGH actor interno Observar Doente EPR Registar Dados Clínicos Prescrever Terapêutica Admitir Doente Carimbar Prescrição EPR SGH Registar Dados Clínicos Marcar Consulta Prescrever Terapêutica Prescrição Médico processo de negócio Admitir Doente Func. Admin. Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Como mapear os diagramas de casos de utilização para a implementação Diagramas de casos de uso Actor (Sub)Pacote de casos de uso Caso de uso Actor – caso de uso Estrutura de menus e permissões de acesso Grupo de utilizadores / Role (Sub)Menu Opção de menu (se aplicação bem desenhada!) Permissão de acesso Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Como mapear a descrição detalhada de um caso de utilização Descrição breve, pré-condições, póscondições, pressupostos, ... Cenários / fluxos de eventos particulares (diagramas de sequência) Manual do utilizador, ajuda on-line Instruções passo a passo no manual do utilizador Wizards, assistentes inteligentes Casos de teste Todos os fluxos de eventos possíveis (diagrama de actividades) Use Case Controller (ex: Apache struts) Diagrama de navegação, storyboard (estados da interface, eventos, transições) Imagens / esboços / protótipos da interface com o utilizador Componentes da interface com o utilizador Exemplos no manual do utilizador Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Representação de conceitos do negócio no modelo de domínio objectos, entidades, eventos (c/ dados) do negócio classes, atributos, relações ciclos de vida restrições e regras do negócio transacções/serviços do negócio estado interno e comportamento do sistema invariantes (OCL) operações, pré e pós-condições (OCL) triggers evento-condição-acção (OCL?) tipos de dados (atributos de classes, parâmetros de operações, ...) estrutura de documentos do negócio (podem ser parâmetros de operações) mapear tipos (classes?) tipos (classes?), atributos, invariantes (elementos derivados, OCL?) inputs e outputs do sistema, vistas Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Relação entre modelo de domínio e modelo de casos de uso Formalizar pré e pós-condições de casos de uso com base no modelo de domínio (parte que modela estado do sistema) Relacionar casos de uso com transacções/serviços no modelo de domínio Acrescentar ao modelo de domínio operações de ajuda à interface (após desenho mais detalhado) Relacionar componentes da interface com documentos do negócio cuja estrutura é descrita no modelo de domínio Execuções de casos de utilização são eventos nos ciclos de vida dos objectos do negócio Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Do modelo de domínio (parte de estado do sistema) à implementação Desenho: refinar modelo de domínio com especificações executáveis do corpo/algoritmo de operações e acções, em linguagem de acções de alto nível (UML action language) • Resulta modelo de domínio executável Teste: testar o modelo de domínio executável antes de gerar código final Implementação: mapeamento automático objecto-relacional Implementação: gerar código automaticamente a partir do modelo de domínio Implementação: manutenção automática de restrições, dados derivados e triggers Implementação: exposição automática em API ou web services Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Implementação de documentos do negócio e componentes de interface Documentos: especificação da estrutura e restrições em XML Scheme Componentes de interface: especificação declarativa e altamente estruturada em linguagem de descrição de interfaces baseada em XML (UIML, XUL, etc.) • linguagem específica de domínio • estrutura, comportamento, estilo, layout, mapeamento para objectos visuais da plataforma, mapeamento para fontes de dados, ... • frequentemente para edição ou visualização de documentos do negócio (formulários, relatórios, folhas de cálculo, documentos semi- estruturados) Edição off-line automática Geração automática de ajudas ao utilizador Mapeamentos automáticos Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Especificar por exemplos Exemplo = caso particular = caso de teste = cenário Obter conjunto suficiente de exemplos que permitem inferir a regra geral • 1, 4, ... (o que vem a seguir?) Generalizar Verificar consistência entre exemplos e a generalização Verificar se os exemplos cobrem a especificação e, se necessário, acrescentar outros Apoiar por ferramentas Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Especificar por regras gerais Colocação de professores (no final da colocação): • Um professor não pode ficar por colocar quando uma escola por ele pretendida tem vaga • Um professor não pode ficar por colocar numa escola por ele pretendida (ficando por colocar, ou ficando colocado numa escola em posição inferior na sua lista de preferências), tendo sido colocado nessa escola um professor em posição inferior no "ranking" • Um professor que já tinha ligar assegurado numa escola e pretende mudar de escola, não pode ficar por colocar (nem que seja na escola original) São regras do negócio Apoio de ferramentas: • exprimir as regras formalmente (OCL?) • analisar as regras: detectar conflitos e ambiguidade (determinam uma e uma só solução?) • analisar algoritmo: demonstrar que satisfaz as regras gerais • analisar implementação: demonstrar que implementa o algoritmo • testar o algoritmo (usando especificação executável): gerar e executar casos de teste • testar a implementação: gerar e executar casos de teste Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#› Referências "SAGA - Uma ferramenta interactiva para o desenvolvimento expedito e fácil manutenção de aplicações de bases de dados", João Pascoal Faria e João Vasco Ranito, Proceedings do ENDIEL’91, ST2 - Indústrias do Software e da Informação, páginas 33-40, Lisboa, Portugal, Junho de 1991 "Aspectos Tecnológicos do SIGMA e do Projecto de Informatização Municipal", João Pascoal Faria, Mário Jorge Leitão, José Manuel Moreira, António Vilela Bouça, Informação e Informática - Revista do Instituto de Informática, Ministério das Finanças (15), páginas 40-46, 1995 Desenvolvimento rápido e rigoroso de aplicações, João Pascoal Faria, CAPSI 2004 ‹#›