Identificação de Interesses Transversais: Uma Visão Geral



Documentos relacionados
2 Desenvolvimento de Software Orientado a Aspectos

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo

Paradigmas de Linguagens de Programação

Separação de Interesses Programação Estruturada e Programação Orientada a Objetos Entrelaçamento de Código Espalhamento de Código

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Projeto Demoiselle. Para perguntas e respostas, utilizem a lista de discussões de usuários da comunidade: demoiselle-users@lists.sourceforge.

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Introdução às Linguagens de Programação

Introdução a Java. Hélder Nunes

ISO/IEC 12207: Gerência de Configuração

O modelo do computador

Programação Orientada a Objeto

LINGUAGEM C UMA INTRODUÇÃO

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC TurmaBC TurmaBC TurmaBC

CURSO DE PROGRAMAÇÃO EM JAVA

Comandos Sequenciais if else, e Switch

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Curso Técnico em Redes

Orientação a Objetos

Implementando uma Classe e Criando Objetos a partir dela

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

LINGUAGEM ORIENTADA A OBJETOS

9 Comandos condicionais


Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

Aula 1 Tipo Abstrato de Dados

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Padrões de projeto 1

Estruturas de entrada e saída

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Tipo Abstrato de Dados

Uma Abordagem de Engenharia de Requisitos Para Linhas de Produtos de Software

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, MODELAGEM DE DADOS. Aula 1. Prof. Rafael Dias Ribeiro. M.Sc.

UML - Unified Modeling Language

Requisitos de Software

PROGRAMA DE DISCIPLINA

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

PROGRAMA DE DISCIPLINA

José Romildo Malaquias

Análise de Sistemas. Visão Geral: Orientação a Objetos. Prof. José Honorato Ferreira Nunes honorato.nunes@bonfim.ifbaiano.edu.br

Padrão Arquitetura em Camadas

Programação Orientada a Aspectos

Engenharia de software para desenvolvimento com LabVIEW: Validação

Programação de Computadores - I. Profª Beatriz Profº Israel

Dadas a base e a altura de um triangulo, determinar sua área.

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

Processamento da Informação Teoria. Algoritmos e Tipos de dados

Introdução a POO. Introdução a Linguagem C++ e POO

Engenharia de Requisitos

Conceitos de Banco de Dados

Metodologia e Gerenciamento do Projeto na Fábrica de Software v.2

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

O Processo de Engenharia de Requisitos

Aspectos técnicos do desenvolvimento baseado em componentes

Docente: Éberton da Silva Marinho

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Wilson Moraes Góes. Novatec

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Análise e Projeto Orientados por Objetos

EVOLUÇÃO DE SOFTWARE

Programação Orientada a Objetos. Introdução à Análise Orientada a Objetos (AOO)

Requisitos de Software. Teresa Maciel DEINFO/UFRPE

Introdução à Programação

Tópicos da Aula. Que é são requisitos? Tipos de Requisitos. Requisitos Funcionais. Classificação de Requisitos. Requisitos de Software.

POO Programação Orientada a Objetos. Classes em Java

Histórico de Revisão Data Versão Descrição Autor

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Requisitos de Software

ALP Algoritmos e Programação. . Linguagens para Computadores

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

Introdução a Linguagem C

UML 2. Guia Prático. Gilleanes T.A. Guedes. Novatec. Obra revisada e ampliada a partir do título Guia de Consulta Rápida UML 2

Engenharia de Requisitos Estudo de Caso

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Prof. Esp. Adriano Carvalho

Processos de Desenvolvimento de Software. Prof. Hélio Engholm Jr

Engenharia de Software III

TÉCNICAS DE PROGRAMAÇÃO

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

Pontos de Função. André Chastel Lima Andréia Ferreira Pinto Diego Souza Campos. Engenharia de Software Mestrado Ciência da Computação - UFMS

Projeto de Sistemas I

Introdução. Aulas. ltodi.est.ips.pt/es. Detalhes administrativos Definição de engenharia de software Contexto Relação com outras áreas e disciplinas

Persistência e Banco de Dados em Jogos Digitais

Algoritmos e Programação. Curso de Engenharia de Produção Prof. Ms. Rogério Cardoso rogerio.cardoso@aedu.com professor@rogeriocardoso.com.

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Transcrição:

Identificação de Interesses Transversais: Uma Visão Geral Paulo Afonso Parreira Júnior paulojunior@jatai.ufg.br 24 de Maio de 2013

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 2

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 3

Breve Histórico sobre Desenvolvimento de Software O que é linguagem? Conjunto de palavras que podem ser geradas a partir de um alfabeto. Alfabeto da língua portuguesa: A, B, C, D... Algumas palavras: laranja, porta, cadeira, universidade... 4

Breve Histórico sobre Desenvolvimento de Software Para que serve uma linguagem? Resposta: para se comunicar. 5

Breve Histórico sobre Desenvolvimento de Software Linguagem de Programação: conjunto de palavras derivadas de um alfabeto e utilizadas para expressar nossas ideias e intenções de forma clara e objetiva ao computador. 6

Breve Histórico sobre Desenvolvimento de Software Alguns tipos de linguagens: Imperativas: o programador conhece a solução para o problema que ele deve resolver e diz ao computador como resolvê-lo. Declarativas: o programador simplesmente descreve o problema que ele deve resolver e o computador o resolve. 7

Breve Histórico sobre Desenvolvimento de Software Instruções comuns em linguagens imperativas: comandos de entrada e saída de dados, estruturas condicionais e de repetição, procedimentos, funções... scanf, printf, if..else, while,do..while, switch,... 8

Breve Histórico sobre Desenvolvimento de Software Programação Estruturada vs. Programação Estruturada 9

Breve Histórico sobre Desenvolvimento de Software Programação desestruturada: uso indiscriminado do comando GOTO (desvio incondicional); dificulta o entendimento e a manutenção do código do programa. 10: read x; 20: if x > 2 GOTO 10 else GOTO 30; 30: if x < 0 GOTO 10 else GOTO 40; 40: write x; 10

Breve Histórico sobre Desenvolvimento de Software Programação estruturada: evita-se o uso do comando GOTO; o desvio de fluxo passa a ser realizado apenas por meio das estruturas condicionais. if ((x >= 0) and (x <= 2)) write x; 11

Breve Histórico sobre Desenvolvimento de Software Programação estruturada: o uso de GOTO pode continuar acontecendo, por baixo dos panos código compilado; porém, o programador não precisará entender, nem manter o código compilado. if ((x >= 0) and (x <= 2)) write x; 10: read x; 20: if x > 2 GOTO 10 else GOTO 30; 30: if x < 0 GOTO 10 else GOTO 40; Compilação 40: write x; 12

Breve Histórico sobre Desenvolvimento de Software A Programação Estruturada trouxe avanços consideráveis para organização do código fonte de um programa. Mas ainda havia um problema central: o foco estava nas funções e não nos dados. Os dados não eram protegidos contra acessos indevidos, por isso, havia problemas de garantia de integridade dos mesmos. 13

Breve Histórico sobre Desenvolvimento de Software Como saber quando o valor de uma variável dentro de um programa abaixo sofreu alguma alteração? int idade; char nome[80]; int main() { idade = 26; Agravante: qualquer módulo do sistema poderia ter acesso direto às variáveis idade e nome. 14

Breve Histórico sobre Desenvolvimento de Software Programação Orientada a Objetos (POO): novo paradigma de desenvolvimento de software; o mundo real é composto de objetos, portanto, a POO trouxe uma perspectiva mais humana de observação da realidade, para o contexto da programação; um dos princípios básicos da POO: separação de interesses. 15

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 16

Separação de Interesses Separação de Interesses (Separation of Concerns - SoC, Dijkstra, 1976). ( ) the separation of concerns (...) is what I mean by "focusing one's attention upon some aspect": it does not mean ignoring the other aspects, it is just doing justice to the fact that from this aspect's point of view, the other is irrelevant. 17

O que são interesses? Separação de Interesses são as diferentes preocupações que se tem ao desenvolver um software. Exemplos: requisitos funcionais, persistência, distribuição, segurança, desempenho, entre outros. 18

Exemplo automóvel... Motor Separação de Interesses 19

Exemplo automóvel... Separação de Interesses Direção 20

Exemplo automóvel... Separação de Interesses Tração 21

Separação de Interesses Como a POO visa a contemplar esse princípio? Por meio dos mecanismos de abstração disponíveis na linguagem: encapsulamento e visibilidade, classes, objetos, entre outros. Entretanto, problemas começam a surgir quando tentamos separar alguns tipos específicos de interesses. 22

Separação de Interesses Qual o componente responsável pelo desempenho? Motor Tração Transmissão 23

Separação de Interesses public class Conta { private double saldo; private int numero; public void sacar(double valor) { saldo = saldo valor; Legenda Cor Interesses * Lógica de Negócios * Interesses a serem implementados no software. 24

Separação de Interesses public class Conta { private double saldo; private int numero; private Logger log; public void sacar(double valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); Legenda Cor Interesses * Lógica de Negócios Logging * Interesses a serem implementados no software. 25

Separação de Interesses public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); Legenda Cor Interesses * Lógica de Negócios Logging Persistência * Interesses a serem implementados no software. 26

Separação de Interesses public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) throws SaldoInsuficienteException { if (saldo >= valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); else { throw new SaldoInsuficienteException(this); Cor Legenda Interesses * Lógica de Negócios Logging Persistência Tratamento de Exceções * Interesses a serem implementados no software. 27

Separação de Interesses O que acontece no exemplo anterior é amplamente conhecido como: entrelaçamento e espalhamento de interesses. Entrelaçamento de interesses é o resultado da inserção de código de um determinado interesse em módulos relacionados a outros tipos de interesses. Espalhamento de interesses é o resultado da inserção de código de um determinado interesse em vários pontos do software. 28

Separação de Interesses Os interesses apresentados no exemplo anterior (logging, persistência e tratamento de exceções) são conhecidos como Interesses Transversais. se entrelaçados e espalhados Interesse Transversal (crosscutting concern) é o nome dado aos interesses que apresentam-se entrelaçados e espalhados com outros interesses do sistema. 29

Separação de Interesses Entrelaçamento e espalhamento em um software real. Registro de Logging do servidor de aplicações Tomcat. 30

Separação de Interesses Quais impactos o entrelaçamento e espalhamento de interesses pode trazer? Redução da legibilidade do software; Aumento do acoplamento e redução da coesão entre os módulos; Redução da manutenibilidade e reusabilidade do software. 31

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 32

Orientação a Aspectos Solução para minimizar tais impactos negativos: encapsular interesses transversais em módulos independentes. Uma alternativa é utilizar Orientação a Aspectos (OA). 33

Orientação a Aspectos A OA foi proposta por Gregor Kiczales em 1997. Objetivo: encapsular Interesses Transversais em módulos fisicamente separados, denominados aspectos, de outros módulos do software. 34

Orientação a Aspectos Como ficaria o código abaixo em OA? public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) throws SaldoInsuficienteException { if (saldo >= valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); else { throw new SaldoInsuficienteException(this); 35

Orientação a Aspectos public class Conta { private double saldo; private int numero; public void sacar(double valor) { saldo = saldo valor; public aspect AspectoLogging { // código relacionado ao logging. public aspect AspectoPersistencia { // código relacionado à persistência. public aspect AspectoExcecao { // código relacionado ao tratamento // de exceções. Legenda Cor Interesses * Lógica de Negócios Logging Persistência Tratamento de Exceções 36

Orientação a Aspectos Registro de Logging do servidor de aplicações Tomcat implementado em OA. 37

Orientação a Aspectos Sem Separação de Interesses vs. Com Separação de Interesses 38

Orientação a Aspectos Exemplo de código em AspectJ: uma extensão da linguagem Java para Orientação a Aspectos. Veja como configurar o ambiente para executar o exemplo acima em: http://www.eclipse.org/ajdt/ 39

Orientação a Aspectos Na realidade, por baixo dos panos, os interesses continuam entrelaçados e espalhados. Porém, mais uma vez isso é abstraído do trabalho do programador. 40

Orientação a Aspectos Ponto de Vista do Programador public class Conta { private double saldo; private int numero; public void sacar(double valor) { saldo = saldo valor; public aspect AspectoLogging { // código relacionado ao logging. public aspect AspectoPersistencia { // código relacionado à persistência. public aspect AspectoExcecao { // código relacionado ao tratamento // de exceções. Ponto de Vista da Máquina public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) throws SaldoInsuficienteException { if (saldo >= valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); else { throw new SaldoInsuficienteException(this); 41

Orientação a Aspectos Onde OA está sendo utilizada? No meio acadêmico: AOSD (International Conference on Aspect-Oriented Software Development) LA-WASP (Latin American Workshop on Aspect-Oriented Software Development) AOM (Aspect Oriented Modeling) Na indústria: JBOSS/AOP Spring/AOP Framework Demoiselle 42

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 43

Identificação de Interesses Transversais Antes de separar interesses transversais, o engenheiro de software precisa saber: Quais são os interesses transversais existentes no software? Onde eles se encontram implementados? Como identificá-los? 44

Identificação de Interesses Transversais O problema é que, no mundo real, o código legado apresenta-se assim: public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) throws SaldoInsuficienteException { if (saldo >= valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); else { throw new SaldoInsuficienteException(this); 45

Identificação de Interesses Transversais Nesse contexto aparece a área denominada Identificação (ou Mineração) de Interesses Transversais. Consiste em identificar trechos de código que contribuem para implementação de determinados interesses transversais. public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) throws SaldoInsuficienteException { if (saldo >= valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); else { throw new SaldoInsuficienteException(this); Identificação de Interesses Transversais public class Conta { private double saldo; private int numero; private Logger log; private BD bd; public void sacar(double valor) throws SaldoInsuficienteException { if (saldo >= valor) { saldo = saldo valor; log.exitlog( Saque efetuado na conta: + numero); bd.salvar(this); else { throw new SaldoInsuficienteException(this); 46

Identificação de Interesses Transversais Técnicas para Identificação de Interesses Transversais: Baseada em Texto (tokens): por exemplo, encontrar todas as classes cujos nomes iniciam com SQL. Baseada em Tipos: por exemplo, encontrar todas as classes que utilizam algum objeto do tipo java.util.connection. Baseadas em Métricas: por exemplo, encontrar todos os métodos cujo valor da métrica X seja maior do que 3. 47

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 48

Filiação: Pesquisas: Mestrado e Doutorado Advanced research group on Software Engineering (AdvanSE) Programa de Pós-Graduação em Ciência da Computação (PPGCC) Universidade Federal de São Carlos (UFSCar) 49

Pesquisas: Mestrado e Doutorado Mestrado: Uma das atividades desenvolvidas: adaptação de uma ferramenta para identificação de interesses transversais em código fonte Java. ComSCId: Computational Support for Concern Identification. Plug-in do Eclipse. Permite o gerenciamento de regras para identificação de interesses transversais. 50

Pesquisas: Mestrado e Doutorado Mestrado: ComSCId: resultado da identificação de interesses transversais. Os trechos de código identificados são anotados com o símbolo de uma prancheta. Esses são os indícios identificados a partir do cadastramento da interface Connection no conjunto de regras do ComSCId. 51

Pesquisas: Mestrado e Doutorado Doutorado: Desenvolvimento de um processo para identificação e classificação de interesses em nível de requisitos. No contexto da Engenharia de Requisitos Orientada a Aspectos (EROA), interesses transversais são conhecidos como early aspects. 52

Pesquisas: Mestrado e Doutorado Doutorado: A EROA objetiva promover melhorias quanto à Separação de Interesses durante as fases iniciais do desenvolvimento do software. quanto mais tarde no ciclo de desenvolvimento do software se encontrar um erro, maior será o custo de sua correção quanto mais tarde ocorrer a identificação dos interesses transversais, maior será o esforço necessário para sua modularização 53

Pesquisas: Mestrado e Doutorado Doutorado: Desafios: baixa qualidade do documento de requisitos (incompleto, ambíguo, inconsistente); baixa qualidade dos conjuntos de palavras-chaves utilizados para identificação dos interesses; e dificuldade de se identificar certos tipos de interesses, por meio de palavras-chaves no texto. Exemplo: interesse de concorrência. 54

Agenda Breve Histórico sobre Desenvolvimento de Software Separação de Interesses Orientação a Aspectos Identificação de Interesses Transversais Pesquisas: Mestrado e Doutorado Ideias para Projetos Comentários & Dúvidas 55

Ideias para Projetos Propor novas estratégias e ferramentas para identificação de interesses transversais. Utilização de repositórios de projetos anteriores; Utilização de técnicas da área de Inteligência Artificial; Entre outros; Realização de estudos comparativos de estratégias já existentes na literatura. 56

57 Comentários & Dúvidas

Obrigado! Paulo Afonso Parreira Júnior paulojunior@jatai.ufg.br 24 de Maio de 2013