Tutorial 1: Cidades Inteligentes: Tecnologias, Aplicações e Desafios
Fabio Kon (USP)
Segunda-feira (19/09)
11:00-12:30
14:30-16:30
Resumo:
Com o crescimento da população urbana, problemas de infraestrutura e de acesso limitado a recursos em diversas cidades ao redor mundo afetam negativamente a vida de bilhões de pessoas. Tornar as cidades mais inteligentes pode ajudar a melhorar os serviços urbanos aumentando a qualidade de vida de seus cidadãos. As Tecnologias da Informação e Comunicação (TIC) são meios fundamentais para esse objetivo. Uma plataforma de software pode ser usada para facilitar enormemente a criação e integração de aplicações robustas para cidades inteligentes. Entretanto, ainda existem desafios técnicos e científicos significativos que necessitam ser enfrentados antes que essas plataformas possam ser amplamente utilizadas. Este tutorial apresenta o estado da arte e o estado da prática em iniciativas e ambientes de cidades inteligentes. Para isso, analisamos iniciativas internacionais de cidades inteligentes e projetos científicos para a criação de plataformas de software para cidades inteligentes. Descrevemos as tecnologias mais utilizadas por esses projetos e seus requisitos funcionais e não-funcionais. Finalmente, apresentamos os desafios de pesquisa ainda em aberto e discutimos a nossa visão para a área no futuro.
Instrutor
Fabio Kon, professor titular de ciência da computação do IME-USP, coordenador adjunto de pesquisa para inovação da FAPESP e Editor-Chefe do SpringerOpen Journal of Internet Services and Applications, atua nas áreas de Empreendedorismo Digital, Software Livre, Sistemas Distribuídos e Cidades Inteligentes. Além de forte atuação como pesquisador, tendo publicado vários artigos internacionais de alto impacto e recebido o ACM Middleware 10-Year Best Paper Award, Fabio é conselheiro voluntário de várias startups de software, inclusive na área de Cidades Inteligentes.
Tutorial 2: Sustentabilidade e longevidade em Sistemas de Software
Rodrigo Santos (UNIRIO)
Sabrina Marczak (PUCRS)
Elisa Yumi Nakagawa (ICMC/USP)
Terça-feira (20/09)
11:00-12:30
14:30-16:30
Resumo:
O desenvolvimento de software tem envolvido uma comunidade de indivíduos, equipes e organizações distribuídas, integrados por uma ou mais plataformas de software central, formando ecossistemas, como iOS e SAP. Essa comunidade tem desenvolvido e mantido produtos e serviços construídos sobre diferentes tecnologias para atender a diferentes domínios de aplicação. A construção e a sustentabilidade dessas plataformas e ecossistemas envolvem aspectos relacionados às questões técnicas (por exemplo, arquitetura), econômicas (por exemplo, governança) e sociais (por exemplo, colaboração). Diversos temas de pesquisa surgiram para tratar tais sistemas de software complexos e, por vezes críticos, que precisam existir a longo prazo. Nessa perspectiva, Desenvolvimento Distribuído de Software (DDS), Ecossistemas de Software (ECOS) e Sistemas-de-Sistemas (SoS) são temas que devem ser tratados de maneira complementar a fim de cobrir as dimensões técnica, econômica e social da Engenharia de Software. Em conjunto, esses temas podem contribuir para a sustentabilidade e longevidade em sistemas de software, sendo que sustentabilidade refere-se ao uso desses sistemas em longo prazo, bem como à sua evolução em um ambiente de constante mudança, visando assegurar a sua longevidade. Neste tutorial, introduziremos sustentabilidade e longevidade em sistemas de software e discutiremos abordagens e tecnologias de DDS, ECOS e SoS nesse cenário, utilizando inclusive casos reais da indústria.
Instrutor
- Rodrigo Santos é Professor do Departamento de Informática Aplicada da UNIRIO. É pesquisador no LENS/Reuse (COPPE/UFRJ), tendo como temas de pesquisa: ecossistemas de software (ECOS), engenharia de requisitos e aquisição. Consultor em processos de software e monitoramento de ECOS pela Fundação Coppetec (clientes: CEPEL, MPOG e CAPGov). Foi co-chair do CBSoft/WDES 2015 e é co-chair do SBQS/WASHES 2016. Ministrou tutoriais no SBQS (2015/09), CBSOFT (2013/12), SBSI (2013/11/10), CIbSE (2012), SBIE (2010) e ICTAC (2010). Realiza Pós-doutorado no Programa de Engenharia de Sistemas e Computação da COPPE/UFRJ, Rio de Janeiro/RJ, onde obteve o título de doutor no tema "Ecossistemas de Software", com período sanduíche na University College London (UCL).
- Sabrina Marczak é Professora Adjunta da Faculdade de Informática da PUCRS, Porto Alegre/RS. É pesquisadora do grupo MUNDDOS, tendo como temas de pesquisa: desenvolvimento distribuído de software (DDS), desenvolvimento colaborativo e engenharia de requisitos. É também colaboradora do grupo de pesquisa CRADL, da University of California, Irvine, EUA, e do SINTEF, Noruega. Tem organizado eventos nacionais e internacionais da área de DDS, como WDDS 2012, ICGSE 2012 e ICGSE 2017. Membro do comitê de periódicos da área, tais como IEEE Software, Information and Software Technology e The Journal of Software and Systems. É coordenadora do convênio de pesquisa e desenvolvimento Dell/PUCRS. Possui doutorado pela University of Victoria, Canadá. CV Lattes: http://lattes.cnpq.br/9458496222461501.
- Elisa Yumi Nakagawa é Professora Associada do Departamento de Sistemas de Computação da Universidade de São Paulo – ICMC/USP, São Carlos/SP. É coordenadora de projetos de pesquisa nacionais e internacionais nas áreas de arquitetura de software, arquitetura de referência e SoS. É também orientadora de alunos de mestrado, doutorado e pós-doutorado no ICMC/USP e em programas de pós-graduação internacionais. Tem organizado eventos nacionais e internacionais nas áreas de arquitetura de software e SoS, tais como o ICSE/SESoS 2015- 2016, ECSA/SESoS 2013-2014, ECSA/WSA 2016, ICSE/CoBRA 2015 e CBSoft/WDES 2014. Realizou o pós-doutorado no Fraunhofer IESE, Alemanha, em 2011-2012, e na Université de Bretagne Sud, França, em 2014-2015, e o doutorado na USP em 2006. CV Lattes: http://lattes.cnpq.br/7494142007764616.
Tutorial 3: Mining Software Repositories
Ahmed Hassan (Queens University/Canada)
Quarta-feira (21/09)
10:15-1200
13:30-15:30
Resumo:
Source control repositories, bug repositories, archived communications, deployment logs, and code repositories are examples of software repositories that are commonly available for most software projects. The Mining Software Repositories (MSR) field analyzes and cross-links the rich data available in these repositories to uncover interesting and actionable information about software systems. By transforming these static record-keeping repositories into active ones, we can guide decision processes in modern software projects. For example, data in source control repositories, traditionally used to archive code, could be linked with data in bug repositories to help practitioners propagate complex changes and to warn about risky code based on prior changes and bugs. In this tutorial, I will present a brief history of the MSR field, then discuss several achievements and results of using MSR techniques to support software research and practice. I will highlight the various opportunities and challenges that lie in the road ahead for this important field. Finally, I will give an overview of best practices for building statistical and machine learning models from mined data, as well as presenting the results of such models in papers.
Instrutor
Ahmed E. Hassan is the Canada Research Chair (CRC) in Software Analytics, and the NSERC/BlackBerry Software Engineering Chair at the School of Computing at Queen’s University, Canada. His research interests include mining software repositories, empirical software engineering, load testing, and log mining. Hassan received a PhD in Computer Science from the University of Waterloo. He spearheaded the creation of the Mining Software Repositories (MSR) conference and its research community. Hassan also serves on the editorial boards of IEEE Transactions on Software Engineering, Springer Journal of Empirical Software Engineering, Springer Journal of Computing, and PeerJ Computer Science. Contact ahmed@cs.queensu.ca. More information at: http://sail.cs.queensu.ca/
Tutorial 4: Identificação e Classificação de Interesses de Software no Contexto da Engenharia de Requisitos Orientada a Aspectos (EROA)
Paulo Afonso Parreira Júnior (UFLA)
Rosângela Aparecida Dellosso Penteado (UFSCar)
Quinta-feira (22/09)
11:00-12:30
14:30-16:30
Resumo:
Um interesse de software (concern) consiste em um conjunto de requisitos relacionados a um mesmo propósito. Quando um interesse possui requisitos que se encontram entrelaçados com requisitos de outros interesses, trata-se de um “Interesse Transversal” e a modularização inadequada desse tipo de interesse pode dificultar o desenvolvimento e a evolução do software. A área de Engenharia de Requisitos Orientada a Aspectos (EROA) oferece estratégias mais adequadas para identificação, representação e composição de Interesses Transversais (ITs). Um problema comumente relatado nos estudos experimentais sobre abordagens para EROA é a baixa efetividade proporcionada por elas, com relação à identificação e classificação de interesses do software. Isso ocorre por duas causas principais: (i) a falta de uma compreensão mais ampla a respeito do domínio de interesses de software; e (ii) a escassez de recursos apropriados para apoiar Engenheiros de Software durante a identificação e classificação dos interesses do software. Neste sentido, este tutorial tem como objetivo trazer luz às causas descritas anteriormente, bem como apresentar uma proposta de solução para as mesmas, por meio de uma abordagem para EROA, denominada ObasCId. ObasCId (Ontologically-based Concern Identification) é uma abordagem ontologicamente fundamentada para EROA, que descreve um conjunto de atividades necessárias para identificação e classificação de interesses a partir de requisitos de software, bem como para detecção e análise de conflitos entre os interesses identificados. Além disso, ObasCId possui um apoio computacional, denominado ObasCId-Tool, que automatiza algumas das atividades da abordagem ObasCId. A expressão ontologicamente fundamentada refere-se ao fato de que a abordagem ObasCId foi desenvolvida com base nos conceitos e relacionamentos descritos em uma ontologia de domínio para interesses de software, denominada O4C (Ontology for Concerns).
Instrutores
- Paulo Afonso Parreira Júnior. Possui graduação em Ciência da Computação pela Universidade Federal de Lavras (2009), mestrado (2011) e doutorado (2015) em Ciência da Computação (área: Engenharia de Software) pelo Programa de Pós-Graduação em Ciência da Computação da Universidade Federal de São Carlos (PPGCC/UFSCar). Atualmente é professor do Departamento de Ciência da Computação da Universidade Federal de Lavras (DCC/UFLA) e integrante do Grupo de Pesquisa em Engenharia de Software (PEQS). Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software e Informática na Educação.
- Rosângela Aparecida Dellosso Penteado. É professora titular da Universidade Federal de São Carlos com graduação em Licenciatura Em Matemática pela Universidade Estadual Paulista Júlio de Mesquita Filho (1976), mestrado em Ciências da Computação pela Universidade de São Paulo (1984) e doutorado em Ciências, área de engenharia de software pela Universidade de São Paulo (1996). Atua na área de Engenharia de Software, principalmente em pesquisas que envolvem: modernização e reengenharia de software, reúso de software, frameworks de aplicação, padrões de projeto, requisitos e orientação a aspectos. Foi chefe e vice-chefe do Departamento de Computação da UFSCar, proponente e tutora do Programa de Educação Tutorial (PET-BCC) vice-coordenadora do Programa de Pós-Graduação em Ciência da Computação, coordenadora e vice-coordenadora do curso de Bacharelado em Ciência da Computação.
Tutorial 5: Identificação de Problemas de Design em Código Fonte
Alessandro Garcia, Diego Cedrim, Leonardo Sousa e Roberto Oliveira (Departamento de Informática, PUC-Rio)
Sexta-feira (23/09)
11:00-12:30
14:30-16:30
Resumo:
Problemas de projeto (design) afetam quase todo sistema de software, fazendo com que a sua manuten ção seja difícil ou impeditiva. Como documentos de projeto raramente estão atualizados ou mesmo disponí veis, desenvolvedores frequentemente precisam identi ficar problemas de projeto através de análise estática de programas. Entretanto, tal identifi cação é custosa e sujeita a erros por diversas razões. Por exemplo, a materializa ção de problemas de projeto tende a estar espalhada por diversos elementos de código anômalos na implementa ção. Infelizmente, trabalhos existentes frequentemente assumem erroneamente que cada anomalia de código individual -- popularmente conhecida como "code smell" -- pode ser usada como um bom indicador da existência de um problema de projeto. As centenas ou milhares de anomalias de código que ocorrem em um único programa, quando analisadas individualmente, frequentemente dizem muito pouco sobre os problemas críticos de projeto em um sistema de software. Evidências recentes mostram que diversos tipos de problemas de projeto são frequentemente relacionados a um agrupamento de anomalias de c ódigo inter-relacionadas. O raciocínio sobre as relações sintáticas ou semânticas de aglomerados de anomalias de código pode ser determinante para auxiliar programadores em localizarem, de forma eficiente, problemas de projeto relevantes em seu sistema.
Neste contexto, este tutorial irá apresentar um arcabouço terminológico de conceitos relacionados a anomalias de código e problemas de projeto. Ademais, iremos discutir técnicas baseadas em análise estática para identificar cada tipo de anomalia de código, bem como suas limitações. Estas duas primeiras partes do tutorial são particularmente interessantes para iniciantes no assunto. Em seguida, apresentaremos uma série de estudos que demonstram as dificuldades que desenvolvedores enfrentam ao identificar, priorizar e refatorar anomalias relevantes para a qualidade do seu software. Finalmente, iremos discutir: (i) técnicas para síntese de aglomera ções de anomalias de c ódigo, e (ii) as vantagens e desvantagens das mesmas para ajudarem desenvolvedores a localizarem e diagnosticarem problemas de projeto relevantes de forma eficiente. Estasdiscussões nos permitirão apresentar uma agenda de pesquisa para pesquisadores interessados em assunto.
Instrutores
- Alessandro Garcia possui doutorado em Informática pela Pontifícia Universidade Católica do Rio de Janeiro (2004), mestrado em Ciência da Computação pela Universidade Estadual de Campinas (2000) e graduação em Ciência da Computação pela Universidade Estadual de Maringá (1998). Atuou como Professor Assistente da Universidade de Lancaster (Inglaterra) de Fevereiro 2005 a Janeiro 2009. Atualmente é Professor Associado do Departamento de Informática da Pontifícia Universidade Católica do Rio de Janeiro. Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: gestão informatizada da saúde, modularidade, tratamento de exceções, linhas de produtos, medição de software, arquitetura de software e desenvolvimento de software dirigido por modelos. Ele tem sido convidado frequentemente nos últimos 10 anos para os Comitês de Programa e/ou Comitês de Organização das principais conferências internacionais de Engenharia de Software e áreas afins, tais como ICSE, FSE, AOSD/Modularity, MODELS, ICPC, ESEM, SPLC, SANER, AAMAS e várias outras. Ele também publica com frequência nestas conferências. É Bolsista Produtividade do CNPq (nível 1D). Ele recebeu vários prêmios, distinções e reconhecimentos, tais como Melhor Dissertação de Mestrado de 2000 (Sociedade Brasileira de Computação), Melhor Pesquisador do Ano (Lancaster University, 2006), Jovem Cientista do Nosso Estado (FAPERJ, 2009 e 2013), Distinção em Produtividade (PUC-Rio, 2009 and 2012) e Membro Afiliado da Academia Brasileira de Ciências (ABC, 2009 a 2014). Vários de seus artigos receberam distinções nas principais conferências internacionais da sua área, tais como o "ACM Distinguished Paper Award" do ICSE 2014 (conferência Qualis A1). Ele é membro do Corpo Editorial de dois dos principais periódicos da sua área: IEEE Transactions on Software Engineering (Qualis A1) e Journal of Systems and Software (Qualis A2). Ele lidera o grupo de pesquisa Opus, do Laboratório de Engenharia de Software da PUC-Rio, possuindo várias parcerias com outros grupos de pesquisa internacionais nos EUA, Inglaterra, Alemanha, França, Espanha, Portugal e Argentina. Seus projetos de pesquisa são financiados por agências de fomento -- CNPq, CAPES, FAPERJ e Newton Fund -- e por parceiros da Indústria de Software, tais como Petrobras e Minds@Work.
- Diego Cedrim, Leonardo Sousa e Roberto Oliveira são Doutorandos em Ciência da Computação pela PUC-Rio.