Análise e Transformação de Software
Sumários
31 Maio de 2010
- Apresentação do Laboratório online GamaSlicer para verificação de componentes Java anotados em JML e realização de Slicing Semântico (specification-based, assertion-based e contract-based): arquitectura, discussão da abordagem e exemplificação.
- Apresentação do sistema integrado para edição, análise, transformação e slicing de programas em C-- desenvolvido pelo aluno José Luis Freitas, usando a representação intermédia como uma hierarquia de classes discutida na aula anterior.
24 Maio de 2010
- Apresentação do sistema genérico para análise, visualização e exploração de documentos anotados em XML, eXVisXML: arquitectura, discussão da abordagem e exemplificação.
- Discussão da resolução do exercício prático da última aula backward slice de um programa em C--: representação intermédia como uma hierarquia de classes.
17 Maio de 2010
- Apresentação do sistema genérico para visualização e animação de programas, Alma: arquitectura, discussão da abordagem e demonstração.
- Proposta de exercício prático: backward slice de um programa em C--
- Formulação de um exemplo:
Em relação ao programa C-- abaixo
0 void fun() {
1 int a, b, flag;
2 float res;
3 scanf("%d",&flag);
4 scanf("%d %d",&a,&b);
5 if (flag)
6 { res = a/2; }
7 else
8 { res = b/2; }
9 printf("%f",res);
10 printf("%f",res++)
}
Faço o slice em relação aos critérios:
SC1: ( i8, {b} )
SC2: ( i8, {res} )
SC3: ( i9, {res} )
SC4: ( i10,{res} )
03 Maio de 2010
- Aula ocupada com a apresentação, discussão e avaliação do Projecto Integrado (PI) -- 3ªfase.
26 de Abril de 2010
- Introdução formal ao Slicing:
- o conceito de Slicing Estático clássico, Backward e Forward.
- Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas:
- System Dependence Graph (SDG) --- construção de exemplos
19 de Abril de 2010
- Introdução informal ao Slicing:
- o papel do Slicing na Análise de Programas -- como instrumento de debug; como instrumento de cálculo incremental.
- Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas:
- Control Flow Graph (CFG); construção de um exemplo.
- Program Dependence Graph (PDG); construção de um exemplo.
- System Dependence Graph (SDG).
12 de Abril de 2010
- Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
- FermaT: pelos alunos André Santos e Miguel Regedor --- PDF.
- Discussão (à laia de balanço dos trabalhos práticos e estudos anteriores) em torno dos requisitos desejáveis para uma Ferramentas de Transformação de Programas (FTP, ou PTT) tendo sido identificados os seguintes:
- Existem duas abordagens possíveis que podem ser integradas no mesmo ambiente de transformação:
- 1 - Filtro de texto para pequenas transformações dirigidas ao padrão. Neste caso era importante poder integrar a definição de gramaticas incompletas (fuzzy?) no filtro, tipo:
X -> ... (Decls) ...
- 2 - Processador de linguagens com a definição da gramática da linguagem do programa que se tenciona transformar. Neste caso, a transformação poderá ocorrer caso a regra seja verificada sintacticamente e também semanticamente (a pensar) e deve ser especificada na forma:
Padrão(regra) -> Acção
- Deve haver a possibilidade de integrar transformações pre-definidas (standard?); por exemplo:
- substituição sistemática de palavras-chave;
- troca de ordem de sub-árvores.
15 de Março de 2010
- Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
- Distribuição de novas tarefas pelos 4 grupos, na sequência das apresentações feitas; desenvolvimento de uma solução para a transformação de C-- nas 3 primeiras ferramentas e procura de uma alternativa para o último caso.
- Resolução de exercícios:
- Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos alunos José Luis Freitas (inserção na escrita) e Daniel Rocha (inserção na árvore).
08 de Março de 2010
- Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
01 de Março de 2010
- Resolução de exercícios:
- Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
- Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos: definição clara dos objectivos a atingir com este estudo (comparação de "filosofias" de trabalho e de capacidades oferecidas); discussão da possibilidade de esrita de um artigo conjunto sobre esta temática, para submissão ao CoRTA2010.
22 de Fevereiro de 2010
- Resolução de exercícios:
- Ficha II -- o 2ª requisito: detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
- Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos:
- Jorge + Daniel: Stratego
- José Luís + Hélder: TXL
- André + Miguel: DMS
- André + Márcio: Meta-Environment/Rascal
25 de Janeiro de 2010
- Cont. da Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas": discussão de tipos de transformação; ferramentas.
- Introdução à novidade do AnTLR para transformação de programas por Tree Pattern Matching: conceito básico e exemplo.
18 de Janeiro de 2010
- Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas".
- Discussão de tipos de transformação:
- Translation: nesta categoria incluem-se os seguintes processos - program synthesis, program migration, reverse engineering e program analysis.
- Rephrasing: nesta categoria incluem-se os seguintes processos - Program Normalization, Program Optimization, Program Refactoring, Program Reflection e Software Renovation.
- Discussão dos paradigmas introduzidos pelos alunos Márcio Coelho e André Rocha:
- Mesmo input, diferentes outputs;
- Diferentes inputs, mesmo outputs;
- Mesmo input, mesmo outputs;
- Diferentes inputs, diferentes outputs.
11 de Janeiro de 2010
- Continuação da Resolução da Ficha da aula anterior.
04 de Janeiro de 2010
- Resolução de exercícios:
- Ficha II -- continuação da discussão sobre o 1ª requisito: implementação em AnTLR da construção de uma Tabela de Identificadores para a linguagem C--; análise e discussão das propostas apresentadas por todos os grupos que, de uma forma geral:
- implementaram a TabId como uma HashMap em Java indexado por uma chave dupla formada pelo Id e pelo seu Scope, recorrendo a um VectorArray para guardar os respectivos atributos;
- usaram uma Tree-Grammar (GA Abstracta);
- recorreram a atributos herdados para fazer descer na árvore a TabId actual e o Scope;
- recorreram a atributos sintetizados para trazer para a raiz da árvore a nova TabId e as características de cada identificador (de variável, de parâmetro, ou de função) encontrado.
- Para continuar a resolver a Ficha II (transformação do código fonte, para reorganizar declarações de variáveis face ao seu uso), foi apreentada a nova, muito recente, funcionalidade do AntLR (3ª estratégia disponível) que permite implementar a transformação usando Tree-Patterns.
14 de Dezembro de 2009
- Resolução de exercícios:
- Ficha II -- continuação da discussão sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, possíveis implementações deste mapping em Java; implementação em AnTLR, possíveis estratégias clássicas (usando apenas 1 GA concreta, ou usando uma Tree-Grammar abstracta com atributos).
07 de Dezembro de 2009
- Transformação e manipulação de Programas usando gramáticas de atributos; sistematização das diferentes abordagens possíveis (cálculo durante o parsing e cálculo em fase posterior, sobre a AST).
- Resolução de exercícios:
- Ficha II -- discussão muito profunda e detalhada sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, conceito, atributos a armazenar e estrutura; aproximação conceptual/abstracta e estratégia de implementação em AnTLR.
30 de Novembro de 2009
- Transformação e manipulação de Programas usando gramáticas de atributos; implementação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
- GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
- Resolução de exercícios:
- Ficha I -- Discussão/comparação das soluções já desenvolvidas por alguns dos alunos e continuação do trabalho nesse problema.
- Ficha II -- apresentação do enunciado.
23 de Novembro de 2009
- Transformação e manipulação de Programas usando gramáticas de atributos; implentação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
- GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
- Resolução de exercícios:
- Ficha I: Conversão de um programa de SQL1 (sem UPDATES) para SQL2 (substituindo sequências de REMOVE/INSERT na mesma chaves por UPDATE).
16 de Novembro de 2009
- Classificação das Gramáticas de Atributos e sua relação com o cálculo---*PureS, LAG, OAG*; o impacto das classes no Grafo de Dependências Global e o problema da determinação de uma ordem topológica (e total); as classes e os Geradores de Compiladores (Calculadores de Atributos); manuseamento de gramáticas OAG em AntLR -- as TreeGrammars.
- Resolução de exercícios sobre gramáticas de atributos em AnTLR:
- Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai (conclusão deste exerc+icio da aula anterior).
- Processar uma Declaração de Variáveis em Pascal (lista de identificadores seguidos do seu tipo) inserindo na Tabela de Identificadores os pares (IdVar? ,IdTipo).
9 de Novembro de 2009
- Resolução de exercícios sobre gramáticas de atributos em AnTLR:
- Processar uma lista de items (números inteiros ou palavras) e calcular a soma dos números encontrados na respectiva lista. Porém o somatório só deve iniciar-se após surgir a 1ª ocorrência da palavra "agora"; a resolução em AnTLR deste exercício pode ser encontrada aqui: (listaAgora.g). No fim da aula foi proposta, como trabalho para casa, uma alteração a este exercício em que a palavra "agora" actuasse como "toggle", i. é, começa a adicionar quando aparece a palavra "agora" e deixa de adicionar quando chega ao fim ou aparece de novo a palavra "agora" e assim sucessivamente para as próximas corrências dessa palavra.
- Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai. Para cada um dos filhos na lista, gerar uma instrução SQL para adionar a uma base de dados um registo para o filho compondo o seu nome próprio com o apelido do pai seguido do apelido da mãe (à espanhola).
2 de Novembro de 2009
- Introdução à construção de Árvores de Sintaxe Abstractas (AST, Abstract Syntax Tree) em ANTLR. Construção da gramática em AnTLR com ouput AST para o exemplo da aula anterior: (declarations.g)
- Introdução à utilização de Tree Grammars em AnTLR. Introdução dos operadores ->, ^ e !
- Construção da respectiva Tree Grammar para o exemplo anterior: (declarationsAST.g)
- Introdução de atributos, na Tree Grammar, para cálculo da Tabela de Identificadores.
26 de Outubro de 2009
- Resolução das alínea f1-4) do Exercício 2 com recurso às Gramáticas de Atributos.
- Discussão com os alunos das diferenças em relação às Gramáticas Tradutoras.
19 de Outubro de 2009
- Resolução da alínea f1,2) do Exercício 2 ( a alínea f3) ficou como trabalho de casa e f4) será desenvolvida na próxima aula):
- criação de uma Gramática Tradutora, juntando Acções Semânticas (com um ou mais atributos sintetisados associados ao LHS) à GIC optimizada escrita pelo Daniel (ver aqui GICexe2) para calcular e imprimir diversos resultados que se podem extrair de frases concretas da linguagem-fonte;
- exploração de todas as facetas do ambiente AnTLR-Works.
12 de Outubro de 2009
- Resolução do Exercício 1 (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
- Ficheiro com resolução em AnTLR: black.g
- Resolução das alíneas a), b) e c) do Exercício 2.
28 de Setembro de 2009
- A. Apresentação da disciplina
- I.1 Introdução e Motivação para a área de Análise e Transformação de SW; sua inserção no contexto da Engenharia de Software:
- noção de análise de código-fonte (outras hipóteses para análise de código intermédio ou máquina);
- avaliação do software analisado -- métricas;
- transformação como meio para melhorar o software avaliado.
- I.2 As quatro grandes componentes envolvidas na disciplina:
- extracção de informação do código (fase de análise);
- armazenamento da informação extraída;
- visualização (paradigmas/exemplos);
- transformação.
- B. Apresentação dos Temas de Tese paa os alunos do 2ºano do MI/MEI (edic. 2008/09)
|
|
 Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors. Ideas, requests, problems regarding TWiki? Send feedback
|
|