Propostas de Dissertação em Engenharia do Software Rodrigo Serafim ([email protected]) João Paulo Carvalho ([email protected]) www.quidgest.com | [email protected] Agradecimento Departamento de Engenharia Informática Núcleo de Parcerias Empresariais www.quidgest.com | [email protected] Alguns factos sobre a Quidgest • 30% do Orçamento dedicado à I&D em Engenharia do Software. 60 técnicos com responsabilidades de I&D • I&D financiada pelo Sifide, pelo QREN, pelo H2020 e em colaboração com IST/INOV ou com FCTUNL • I&D reconhecida pelo mercado, nomeadamente pelas grandes corporações, governos e entidades supranacionais (Nações Unidas, Banco Mundial, IADB, BAD, etc) • 804 diferentes sistemas em produção gerados com Genio www.quidgest.com | [email protected] Bill Gates vision: “a computer on every desk and in every home” www.quidgest.com | [email protected] Our vision: A unique management system*, for every company * Source of competitive advantage www.quidgest.com | [email protected] Model Driven Development = Independência da tecnologia Rapid Application Development = Simulação Genio Software Prodution Line = Personalização em massa Code Generation = Automatização Em qualquer plataforma Automatic MFC Code Generation Add-in T-SQL www.quidgest.com | [email protected] PL / SQL Fórmula • 98% automático + 2% manual Automático + Novos Padrões do Genio + Manual (em último recurso) • Canalizar a criatividade para novos padrões. O que é um perfil difícil de encontrar. www.quidgest.com | [email protected] http://www.quidgest.pt/it_Trends2020.asp www.quidgest.com | [email protected] Cadeira relevante no programa do IST: https://fenix.tecnico.ulisboa.pt/disciplinas/TVS/2015-2016/2-semestre/programa (Teste e Validação de Software) Objetivos: Desenvolvimento de processos e automatismos que integrem técnicas de verificação de software em ambiente de Continuous Integration e geração de software com Genio. Contexto: Aplicação prática da validação como processo automático de garantia da qualidade do código produzido, por via automática (geração) ou manual. Os novos processos automáticos de validação podem ser integrados em Genio, sendo aplicados a todos os sistemas produzidos pela empresa. Resultados esperados: 1. Integração de uma solução tecnológica de validação adaptada ao ambiente de 2. Continuous Integration e geração de software com Genio. Escalabilidade e sustentabilidade da tecnologia escolhida, para aplicação prolongada e generalizada nas soluções da empresa; Competências necessárias (ou a desenvolver): C#, Java, C++, Genio, Jenkins. Qualidade em ambientes industriais (Juran, Deming), CMMI A programação de testes unitários capazes de automatizar tarefas de verificação de aplicações traz indiscutíveis benefícios, desde a capacidade de detetar regressões de funcionalidade, de ajudar a documentar os casos de uso do código até otimizar o processo de qualidade de integração continua. A referência ao termo “unitário” aqui é entendida no sentido lato, ou seja, qualquer elemento que possa correr de forma isolada dados determinado Setup inicial, dados parâmetros de input e cujas expectativas de output sejam determinísticas. Pretende-se que o projeto seja desenvolvido no contexto da plataforma Genio. O Genio é uma plataforma de desenvolvimento baseada em modelos e geração de código. Os seus modelos determinam regras de negócio, validações, integridade de dados entre outros comportamentos complexos. Cada declaração possível neste modelo é considerada de padrão. Pretende-se aplicar a abordagem de testes unitários já existente nos sistemas gerados pelo Genio à automatização de testes de interface gráfica, já replicáveis através da ferramenta Q-CRT. Componentes a realizar: • Desenvolvimento da execução de scripts Q-CRT através da biblioteca de testes unitários Google Test já em funcionamento • Desenvolvimento de um modelo genérico de comparação automática de resultados em base de dados relacional • Desenvolvimento do parsing de ficheiros de log Q-CRT para Jenkins; • Desenvolvimento do gerador de scripts de testes de interface a partir do modelo do Genio. Opcional/Avançado: Invocação por job Jenkins de baterias de testes registadas em QAM e recolha automática de resultados para QAM Interligação dos requisitos registados em Genio ao QAM para rastreamento dos erros detetados Competências necessárias (ou a desenvolver): Google Test – biblioteca de testes usada para a invocação e análise de testes unitários QAM – Quality Assurance Management – ferramenta de gestão de testes Q-CRT – Quidgest Capture, Reproduction and Tutorial tool - ferramenta de recolha e execução de sequências de operações na interface gráfica Jenkins – ferramenta de integração contínua e automatização de processos (aplicada à geração de código, compilação, instalação e execução de testes unitários) Transact-SQL http://www.quidgest.pt/ITO_sense.asp Identificação de Padrões para aquisição inteligente de dados, através de • sensores (Internet of Things), • identificadores (Internet of People), • interfaces máquina-máquina • Big Data. Monitorização e recolha de dados provenientes de sensores, com capacidade de atuação automática e controlo remoto. Integração de sensores com sistemas de informação de gestão, com toda a comunicação, de e para os sensores, a obedecer a padrões bem definidos. Estes padrões são análogos aos padrões Genio, já desenvolvidos pela Quidgest em outros projetos de I&D, o que vai permitir que os sensores sejam integrados em qualquer sistema Quidgest sem especiais necessidades de adaptação. Controlador único e modularidade: cada sensor terá um módulo individual, permitindo adicionar módulos consoante as necessidades, sem alteração do controlador. Conectividade: 3G, wi-fi, Ethernet Integração de qualquer tipo de sensor analógico: temperatura, humidade, proximidade, pH, luminosidade, índice UV, vento, deteção de gases, deteção de caudal. Racionalidade económica e modularidade para possibilitar investimentos faseados, por parte dos potenciais clientes. O Genio é um modelo declarativo que recorre sobretudo (98%) a atributos mas requer pontualmente (2%) a utilização de fórmulas, validações e rotinas manuais. O objetivo do projeto é a criação de uma linguagem de alto nível para integração na plataforma Genio (geração automática de software), tornando possível, a partir de uma só codificação de fórmulas ou validações, a geração em diversas linguagens de programação. Criação de uma gramática para a linguagem Genio Criação de um parser a partir dessa gramática Criação de compilador para uma linguagem de destino Inferência de tipos Integração de chamadas e processamento de queries Validação de compatibilidade entre variáveis Embora o objetivo de uma base de dados seja manter os dados normalizados, numa perspetiva de performance e de simplificação das aplicações que têm de interagir com essa base de dados, a redundância controlada de dados é fundamental. O Genio é uma plataforma de desenvolvimento baseada em geração de código. Parte dos seus padrões tira partido desta redundância para manter cálculos intermédios de regras de negócio e ajudar o consultor a geri-las automaticamente garantido ao nível aplicacional a integridade dos dados. Pretende-se formalizar as vantagens e desvantagens deste tipo de modelação e criar regras de boas práticas de quando usar e não usar. Pretende-se também que seja desenvolvido, durante o projeto, um sistema de gestão de redundância modular que permita de forma síncrona ou assíncrona desencadear mecanismos que verificam e corrigem informação incoerente. Um sistema empresarial é normalmente constituído por vários componentes lógicos e físicos, ou seja, várias aplicações e múltiplos servidores. Cada um destes sistemas consome recursos com diferentes perfis de necessidade e também produz outputs a diferente ritmo. No entanto, por vezes surgem situações anómalas que vão levar ou a um aumento dos recursos necessários ou a um diferente ritmo de produção de outputs. Podem também emitir erros por variadas razões, desde inputs inesperados, entrada num estado inconsistente ou até defeitos que originaram no código fonte do sistema. Pretende-se criar um módulo de monitorização da execução de sistemas capaz de analisar através de regras sinais de vida relevantes (uso de CPU, inserts por segundo na BD, log de erros, etc). Estas regras devem ser parametrizadas pelo administrador de sistema de forma a detetar situações anómalas e devem acionar notificações ou até ações automáticas em reação a elas. O projeto tem como objetivo refletir sobre os conteúdos, as metodologias, os requisitos, os perfis de docentes e de alunos, os cenários de aprendizagem que vão tornar competitivas as universidades que ensinarão engenharia do software durante a década de 2020 Que interações devem ter com a indústria de software, com outros setores económicos, com outras universidades? Que aposta fazer no empreendedorismo e na chegada ao mercado? Qual a dimensão previsível de projetos bem sucedidos? Que enquadramento de suporte a esta dinâmica? Como atrair e potenciar o talento? O que deixar de ensinar? Como garantir a formação ao longo de toda a vida profissional, face a tecnologias que mudam a cada 5 anos? Como fazer face à escassez brutal de programadores? Como reconverter especialistas de outras áreas? Onde se encontram as universidades mais avançadas nestes domínios? O recente (janeiro 2016) relatório do Banco Mundial “Digital Dividends”, para além de um muito bem documentado panorama global sobre os dividendos que se têm obtido desta revolução digital, alerta para a possibilidade – não desejada – de captura das vantagens das tecnologias de informação pelas elites. A favor dos países em desenvolvimento, a presente revolução tecnológica é mais acessível, porque requer menores investimentos do que as anteriores vagas de industrialização. Em particular, a criação de um emprego na indústria de criação de software exige um milésimo do investimento requerido pela criação de um emprego em outros setores industriais. Em contrapartida, é cada vez mais complexa a aprendizagem de linguagens de programação tradicionais, a um nível de domínio suficiente para permitir dar origem a soluções transacionáveis internacionalmente. Que processos podem contribuir para a transferência de tecnologias de desenvolvimento de software a um nível mais elevado de abstração, menos dependentes de programação manual e mais eficazes, como a modelação e geração automática? A evolução para sistemas de informação dotados de capacidades cognitivas e preditivas constituirá uma vantagem competitiva para qualquer empresa do setor de desenvolvimento de sistemas de gestão empresarial. E terá um impacto disruptivo na gestão dos seus potenciais utilizadores, nomeadamente nas grandes empresas e organismos governamentais. Durante anos, os sistemas de gestão empresarial (nomeadamente, ERP, CRM, BPM) limitaram-se a recolher dados a posteriori e a agregá-los, fornecendo-os aos decisores num momento em que já não é possível alterar decisões ou reverter tendências não desejadas. Deste modo, organizações de grande dimensão (BES, BPN, BANIF, Estado Português, Estado Grego, Lehman Brothers) acumularam decisões erradas, que as inviabilizam, causando verdadeiras catástrofes sociais, que levam décadas a serem corrigidas – quando o são – em todos os seus múltiplos efeitos (falência, recessão, desemprego, défices insustentáveis, programas de austeridade, perda de independência, fluxos migratórios, fuga de cérebros, destruição de competências, etc.) O grande desafio científico e tecnológico resulta de nunca vir a ser possível antecipar totalmente o futuro. A imprevisibilidade existirá sempre. Porém, pela incorporação de novos conceitos e metodologias (tornados também acessíveis, pelo grande aumento da capacidade de computação ao dispor dos decisores) em cada época aproximamonos mais deste objetivo. O projeto consiste na avaliação e exploração das possibilidades da linguagem R para dotar os sistemas de informação desenvolvidos automaticamente em Genio de capacidades cognitivas e preditivas A integração em Genio potencia os resultados obtidos, sendo exemplo do impacto que se pede a um engenheiro de software, que não deve ser confundido com um beta-tester ou um developer. As vulnerabilidades, os casos de crimes que aproveitam essas vulnerabilidades e o impacto brutal em qualquer empresa (hoje em dia, as empresas são, essencialmente, organizações digitais) constituem a motivação científica/tecnológica para o projeto proposto. Mas, na verdade, o grande choque da tomada de consciência desta tendência vai fazer-se por via da regulação, pelo menos no espaço da União Europeia. Mais conscientes do elevado perigo da ausência de segurança digital do que a opinião pública e do que os próprios potenciais lesados, o Parlamento Europeu, o Conselho e a Comissão Europeia têm vindo a alertar, a criar diretivas e a impor prazos muito curtos de concretização de medidas neste domínio. O objetivo do projeto é criar roadmaps e soluções aplicáveis às grandes empresas, em menos de 2 anos, para cumprir com esta regulamentação Continuous requirements – a deteção contínua de necessidades Continuous development – o desenvolvimento imediato Continuous integration – a integração contínua Continuous delivery – a entrega contínua Continuous deployment – a utilização contínua Compromisso da Quidgest em • Apoiar as teses, através de conselhos, referências, sugestões e casos práticos, por parte de um orientador experiente • Delimitar os temas, de modo a que estes sejam – exequíveis e realizáveis no tempo previsto – inovadores e motivantes – relevantes para a Engenharia do Software • • • • • • Integrar os mestrandos nos projetos de I&D em curso na Quidgest Proporcionar Bolsas de I&D Completar a formação nas matérias que o requeiram Colaborar com o orientador por parte do IST Dar espaço à inovação Criar oportunidades para a continuação da carreira profissional do mestrando, em projetos da Quidgest, com integração nos seus quadros www.quidgest.com | [email protected]