O documento discute o desenvolvimento da ferramenta REfacTool para realizar refatorações em códigos de linhas de produto de software através de expressões regulares. O objetivo é disciplinar anotações introduzidas pelo pré-processador C para melhorar a qualidade e manutenção do código. A ferramenta foi avaliada em benchmark com casos de teste e comparada com outra ferramenta existente.
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...Antonio Correia
O projeto envolverá o desenvolvimento de uma ferramenta de refactoring e
transformação de programas, que receberá como entrada o código de um sistema
(possivelmente) contendo anotações não disciplinadas e produzirá como saída o código
do sistema com todas as anotações disciplinadas. Serão utilizadas técnicas de análise estática
e transformação de programas para implementar os refactorings.
O documento discute a linguagem de programação C. Descreve que C é uma linguagem imperativa de uso geral de nível médio, popular desde sua criação e influente em outras linguagens. Também explica que C foi criada por Dennis Ritchie nos anos 1970 e deriva de linguagens anteriores como CPL e BCPL.
O documento discute a modularização de código C, apresentando as vantagens da modularização, regras para modularização e exemplos de módulos como "rectangle", "vector" e "framebuffer". O apresentador explica como estruturar módulos em C usando interfaces, implementações e dados privados para manter o código organizado e desacoplado.
Este documento apresenta um programa sobre a Semana da Computação da UFJF que inclui informações preliminares, conteúdo sobre a linguagem R, análise de casos e interface com outras linguagens. O documento discute a filosofia e objetivos do R, como invocar o R na linha de comando, sintaxe básica incluindo vetores, caracteres e números, e estruturas de dados.
Linguagem C e Dev-C++ Algumas Explicaçõesnataferraz
O documento explica os conceitos básicos da linguagem C, incluindo o que é C, sua sintaxe e tipos de dados. C foi criada em 1972 por Dennis Ritchie para facilitar a criação de programas extensos com menos erros utilizando programação procedural. A sintaxe de C define regras para identificadores, variáveis e tipos de dados como inteiros, reais e caracteres.
O documento apresenta conceitos básicos da linguagem de programação C, incluindo sua história, características, estrutura básica de um programa, comentários e diretivas. É destinado a estudantes da Universidade Federal de Uberlândia para introduzi-los à linguagem C.
O documento apresenta uma introdução sobre a linguagem C, abordando seu histórico, características, aplicações e tipos de dados básicos. É descrita a estrutura de um programa em C e os principais operadores, incluindo atribuição, aritméticos, relacionais, lógicos e de bits.
The document provides a bill of materials and bill of labor for manufacturing a penlight. It lists 10 parts needed including plastic, an LED light, battery, and switch. It describes 7 assembly operations involving 2 operators each and inspection. It also lists 7 supplier companies providing the materials.
REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linha...Antonio Correia
O projeto envolverá o desenvolvimento de uma ferramenta de refactoring e
transformação de programas, que receberá como entrada o código de um sistema
(possivelmente) contendo anotações não disciplinadas e produzirá como saída o código
do sistema com todas as anotações disciplinadas. Serão utilizadas técnicas de análise estática
e transformação de programas para implementar os refactorings.
O documento discute a linguagem de programação C. Descreve que C é uma linguagem imperativa de uso geral de nível médio, popular desde sua criação e influente em outras linguagens. Também explica que C foi criada por Dennis Ritchie nos anos 1970 e deriva de linguagens anteriores como CPL e BCPL.
O documento discute a modularização de código C, apresentando as vantagens da modularização, regras para modularização e exemplos de módulos como "rectangle", "vector" e "framebuffer". O apresentador explica como estruturar módulos em C usando interfaces, implementações e dados privados para manter o código organizado e desacoplado.
Este documento apresenta um programa sobre a Semana da Computação da UFJF que inclui informações preliminares, conteúdo sobre a linguagem R, análise de casos e interface com outras linguagens. O documento discute a filosofia e objetivos do R, como invocar o R na linha de comando, sintaxe básica incluindo vetores, caracteres e números, e estruturas de dados.
Linguagem C e Dev-C++ Algumas Explicaçõesnataferraz
O documento explica os conceitos básicos da linguagem C, incluindo o que é C, sua sintaxe e tipos de dados. C foi criada em 1972 por Dennis Ritchie para facilitar a criação de programas extensos com menos erros utilizando programação procedural. A sintaxe de C define regras para identificadores, variáveis e tipos de dados como inteiros, reais e caracteres.
O documento apresenta conceitos básicos da linguagem de programação C, incluindo sua história, características, estrutura básica de um programa, comentários e diretivas. É destinado a estudantes da Universidade Federal de Uberlândia para introduzi-los à linguagem C.
O documento apresenta uma introdução sobre a linguagem C, abordando seu histórico, características, aplicações e tipos de dados básicos. É descrita a estrutura de um programa em C e os principais operadores, incluindo atribuição, aritméticos, relacionais, lógicos e de bits.
The document provides a bill of materials and bill of labor for manufacturing a penlight. It lists 10 parts needed including plastic, an LED light, battery, and switch. It describes 7 assembly operations involving 2 operators each and inspection. It also lists 7 supplier companies providing the materials.
A Academia do Programador é um programa de treinamento completo para formação de profissionais de desenvolvimento de softwares, desde os fundamentos até a prática. O curso é composto por 5 módulos que ensinam lógica de programação, hardware, banco de dados, redes e desenvolvimento prático, preparando os alunos para carreiras como programação web e robótica. Ao final os alunos estarão aptos a se especializarem em linguagens como Java, C, C# e Python.
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
Este documento apresenta uma introdução aos métodos ágeis para desenvolvimento de software, descrevendo alguns métodos como Scrum, Kanban e Extreme Programming, além de práticas como TDD, programação pareada e refatoração. O documento também discute objetivos de aprendizagem, exemplos, literatura científica e não-científica sobre o tema e oportunidades para pesquisa futura em métodos ágeis.
O documento apresenta uma solução chamada PipeConf para automatizar a configuração de ativos de rede heterogêneos usando infraestrutura como código. A solução integra diferentes ferramentas para gerenciar switches e roteadores de forma automatizada, versionada e segura. O documento descreve a motivação, objetivos, arquitetura, fluxo de trabalho e funcionalidades da PipeConf.
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09Daniel Moraes
Este documento descreve o uso do Eclipse Process Framework (EPF) como repositório de um processo de desenvolvimento de software (PDS) para atender aos requisitos do MPS.BR. Ele discute a motivação, conceitos básicos do MPS.BR, EPF e OpenUP, instalação do EPF, fatores de sucesso e lições aprendidas.
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...Erivan de Sena Ramos
Este documento apresenta os resultados de um mapeamento sistemático sobre padrões de software para reengenharia de sistemas publicados em conferências especializadas. O estudo catalogou 23 padrões, classificou-os de acordo com as disciplinas do RUP e levantou informações sobre os processos de reengenharia, linguagens de programação e conferências abordadas nos padrões.
Refatoração refere-se à reestruturação do código-fonte de um software sem alterar seu comportamento externo, visando melhorar aspectos como legibilidade, manutenibilidade e design. O documento descreve os princípios e origens da refatoração, exemplos de técnicas como renomear variáveis e extrair métodos, além de discutir vantagens como redução de duplicação e aumento da simplicidade do código.
Práticas de Desenvolvimento de SoftwareTiago Barros
O curso aborda os seguintes tópicos:
1) Construção de software, incluindo o que é construção de software e como ela se encaixa no processo de desenvolvimento;
2) Paradigmas de programação e como eles afetam a construção de software;
3) Arquiteturas de software e padrões de projeto.
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Fernando Geraldo Mantoan
Este documento descreve uma proposta de arquitetura de desenvolvimento web baseada em PHP utilizando padrões de projeto. O objetivo é propor uma arquitetura que forneça maior estrutura organizacional, padronização de programação, facilidade de manutenção e menos repetição de código. O documento discute conceitos como arquiteturas de software, padrões de projeto como Singleton, Factory e MVC e as tecnologias envolvidas como PHP, Apache, HTML e MySQL.
Automação de Aplicativos: Scripting com PythonFabio Spanhol
O documento discute linguagens de script e o uso de Python para automatizar aplicativos. Python pode ser usado para controlar o aplicativo de edição de imagem GIMP, através de plug-ins registrados na base de dados procedural do GIMP. Os plug-ins em Python podem acessar as ferramentas e funcionalidades do GIMP para automatizar tarefas.
O documento discute técnicas para estimar o custo de projetos de software, incluindo a Análise de Pontos de Função. Este método mede o tamanho de aplicações através da contagem de características do software. O documento também aborda frameworks, que fornecem estruturas reutilizáveis para desenvolvimento de software, e padrões de projeto, que promovem a reutilização através de soluções comuns a problemas recorrentes.
O documento discute técnicas para estimar o custo de projetos de software, incluindo a Análise de Pontos de Função. Este método mede o tamanho de aplicações através da contagem de características do software. O documento também aborda frameworks, que fornecem estruturas reutilizáveis para desenvolvimento de software, e padrões de projeto, que descrevem soluções comuns a problemas recorrentes.
Este documento fornece um resumo de uma aula introdutória sobre programação em C. Ele descreve:
1) As informações gerais sobre a disciplina, incluindo carga horária, pré-requisitos e objetivos;
2) O conteúdo programático, dividido em 12 unidades cobrindo tópicos como introdução à linguagem C, variáveis, funções, estruturas de dados e depuração;
3) A metodologia de ensino, que inclui aulas expositivas, atividades práticas e avaliações como provas,
Este documento apresenta uma aula introdutória sobre engenharia de software. Apresenta brevemente o que é engenharia de software, para que serve e discute alguns modelos de ciclo de vida de desenvolvimento de software como cascata e ágil. Também menciona brevemente métodos como SCRUM e desenvolvimento open source.
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...Tarcísio Couto
Os processos estão se tornando cada vez mais complexos e heterogêneos, inseridos em
ambientes onde as mudanças são constantes, sendo influenciados por fatores geográficos,
climáticos, dentre outros. As empresas precisam manter seus processos atualizados e
funcionando adequadamente, sem desprezar os requisitos de qualidade. Baseado neste
cenário, foi proposto na literatura uma abordagem de configuração de processos chamada
BVCCoN.
Esta abordagem possui como objetivo oferecer suporte a configuração de processos
baseada em NFRs e informações contextuais. A abordagem possui três perspectivas
na configuração de processo de negócio: a descrição de variabilidade, os requisitos
não-funcionais e o contexto. Durante as etapas desta abordagem, é necessário realizar
a modelagem destas três perspectivas. Contudo, modelar as três perspectivas é uma
atividade que requer tempo e que está propensa a erros.
Assim, esta dissertação propõe o desenvolvimento de uma ferramenta que apoia a
modelagem dos requisitos não-funcionais, da variabilidade e das regras de contexto. Para
construir a ferramenta, foi realizada a integração de três metamodelos, com algumas
alterações, sendo cada um referente a uma perspectiva da abordagem BVCCoN. Além
disso, foi utilizado o framework Epsilon e seu conjunto de linguagens integrado no
ambiente Eclipse para o desenvolvimento da ferramenta. Para ilustrar a utilização da
ferramenta, foi realizado um estudo de caso em um cenário de check-in em aeroporto, bem
como uma avaliação de usabilidade com potenciais usuários, visando avaliar os seguintes
fatores: satisfação geral, utilidade do sistema, qualidade da informação e qualidade da
interface.
O documento discute os vários níveis de reutilização na perspectiva de frameworks e padrões de projeto. Aborda a reutilização nos paradigmas funcional e orientado a objetos, conceitos como classe, herança, composição e componentes. Também discute frameworks, tipos, vantagens e desvantagens, além de padrões de projeto comuns em frameworks como Template Method e Abstract Factory.
O documento discute a avaliação de qualidade de linha de produto de software baseada em arquitetura e métricas. Apresenta definições de linha de produto de software e suas características, etapas de desenvolvimento e abordagens de gerenciamento de variabilidades. Também descreve diferentes momentos e técnicas para avaliação de qualidade de linha de produto de software, com foco na avaliação arquitetural por meio de métricas.
Mais conteúdo relacionado
Semelhante a REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linhas de produto de software (Apresentação)
A Academia do Programador é um programa de treinamento completo para formação de profissionais de desenvolvimento de softwares, desde os fundamentos até a prática. O curso é composto por 5 módulos que ensinam lógica de programação, hardware, banco de dados, redes e desenvolvimento prático, preparando os alunos para carreiras como programação web e robótica. Ao final os alunos estarão aptos a se especializarem em linguagens como Java, C, C# e Python.
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
Este documento apresenta uma introdução aos métodos ágeis para desenvolvimento de software, descrevendo alguns métodos como Scrum, Kanban e Extreme Programming, além de práticas como TDD, programação pareada e refatoração. O documento também discute objetivos de aprendizagem, exemplos, literatura científica e não-científica sobre o tema e oportunidades para pesquisa futura em métodos ágeis.
O documento apresenta uma solução chamada PipeConf para automatizar a configuração de ativos de rede heterogêneos usando infraestrutura como código. A solução integra diferentes ferramentas para gerenciar switches e roteadores de forma automatizada, versionada e segura. O documento descreve a motivação, objetivos, arquitetura, fluxo de trabalho e funcionalidades da PipeConf.
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09Daniel Moraes
Este documento descreve o uso do Eclipse Process Framework (EPF) como repositório de um processo de desenvolvimento de software (PDS) para atender aos requisitos do MPS.BR. Ele discute a motivação, conceitos básicos do MPS.BR, EPF e OpenUP, instalação do EPF, fatores de sucesso e lições aprendidas.
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...Erivan de Sena Ramos
Este documento apresenta os resultados de um mapeamento sistemático sobre padrões de software para reengenharia de sistemas publicados em conferências especializadas. O estudo catalogou 23 padrões, classificou-os de acordo com as disciplinas do RUP e levantou informações sobre os processos de reengenharia, linguagens de programação e conferências abordadas nos padrões.
Refatoração refere-se à reestruturação do código-fonte de um software sem alterar seu comportamento externo, visando melhorar aspectos como legibilidade, manutenibilidade e design. O documento descreve os princípios e origens da refatoração, exemplos de técnicas como renomear variáveis e extrair métodos, além de discutir vantagens como redução de duplicação e aumento da simplicidade do código.
Práticas de Desenvolvimento de SoftwareTiago Barros
O curso aborda os seguintes tópicos:
1) Construção de software, incluindo o que é construção de software e como ela se encaixa no processo de desenvolvimento;
2) Paradigmas de programação e como eles afetam a construção de software;
3) Arquiteturas de software e padrões de projeto.
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Fernando Geraldo Mantoan
Este documento descreve uma proposta de arquitetura de desenvolvimento web baseada em PHP utilizando padrões de projeto. O objetivo é propor uma arquitetura que forneça maior estrutura organizacional, padronização de programação, facilidade de manutenção e menos repetição de código. O documento discute conceitos como arquiteturas de software, padrões de projeto como Singleton, Factory e MVC e as tecnologias envolvidas como PHP, Apache, HTML e MySQL.
Automação de Aplicativos: Scripting com PythonFabio Spanhol
O documento discute linguagens de script e o uso de Python para automatizar aplicativos. Python pode ser usado para controlar o aplicativo de edição de imagem GIMP, através de plug-ins registrados na base de dados procedural do GIMP. Os plug-ins em Python podem acessar as ferramentas e funcionalidades do GIMP para automatizar tarefas.
O documento discute técnicas para estimar o custo de projetos de software, incluindo a Análise de Pontos de Função. Este método mede o tamanho de aplicações através da contagem de características do software. O documento também aborda frameworks, que fornecem estruturas reutilizáveis para desenvolvimento de software, e padrões de projeto, que promovem a reutilização através de soluções comuns a problemas recorrentes.
O documento discute técnicas para estimar o custo de projetos de software, incluindo a Análise de Pontos de Função. Este método mede o tamanho de aplicações através da contagem de características do software. O documento também aborda frameworks, que fornecem estruturas reutilizáveis para desenvolvimento de software, e padrões de projeto, que descrevem soluções comuns a problemas recorrentes.
Este documento fornece um resumo de uma aula introdutória sobre programação em C. Ele descreve:
1) As informações gerais sobre a disciplina, incluindo carga horária, pré-requisitos e objetivos;
2) O conteúdo programático, dividido em 12 unidades cobrindo tópicos como introdução à linguagem C, variáveis, funções, estruturas de dados e depuração;
3) A metodologia de ensino, que inclui aulas expositivas, atividades práticas e avaliações como provas,
Este documento apresenta uma aula introdutória sobre engenharia de software. Apresenta brevemente o que é engenharia de software, para que serve e discute alguns modelos de ciclo de vida de desenvolvimento de software como cascata e ágil. Também menciona brevemente métodos como SCRUM e desenvolvimento open source.
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...Tarcísio Couto
Os processos estão se tornando cada vez mais complexos e heterogêneos, inseridos em
ambientes onde as mudanças são constantes, sendo influenciados por fatores geográficos,
climáticos, dentre outros. As empresas precisam manter seus processos atualizados e
funcionando adequadamente, sem desprezar os requisitos de qualidade. Baseado neste
cenário, foi proposto na literatura uma abordagem de configuração de processos chamada
BVCCoN.
Esta abordagem possui como objetivo oferecer suporte a configuração de processos
baseada em NFRs e informações contextuais. A abordagem possui três perspectivas
na configuração de processo de negócio: a descrição de variabilidade, os requisitos
não-funcionais e o contexto. Durante as etapas desta abordagem, é necessário realizar
a modelagem destas três perspectivas. Contudo, modelar as três perspectivas é uma
atividade que requer tempo e que está propensa a erros.
Assim, esta dissertação propõe o desenvolvimento de uma ferramenta que apoia a
modelagem dos requisitos não-funcionais, da variabilidade e das regras de contexto. Para
construir a ferramenta, foi realizada a integração de três metamodelos, com algumas
alterações, sendo cada um referente a uma perspectiva da abordagem BVCCoN. Além
disso, foi utilizado o framework Epsilon e seu conjunto de linguagens integrado no
ambiente Eclipse para o desenvolvimento da ferramenta. Para ilustrar a utilização da
ferramenta, foi realizado um estudo de caso em um cenário de check-in em aeroporto, bem
como uma avaliação de usabilidade com potenciais usuários, visando avaliar os seguintes
fatores: satisfação geral, utilidade do sistema, qualidade da informação e qualidade da
interface.
O documento discute os vários níveis de reutilização na perspectiva de frameworks e padrões de projeto. Aborda a reutilização nos paradigmas funcional e orientado a objetos, conceitos como classe, herança, composição e componentes. Também discute frameworks, tipos, vantagens e desvantagens, além de padrões de projeto comuns em frameworks como Template Method e Abstract Factory.
O documento discute a avaliação de qualidade de linha de produto de software baseada em arquitetura e métricas. Apresenta definições de linha de produto de software e suas características, etapas de desenvolvimento e abordagens de gerenciamento de variabilidades. Também descreve diferentes momentos e técnicas para avaliação de qualidade de linha de produto de software, com foco na avaliação arquitetural por meio de métricas.
Semelhante a REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linhas de produto de software (Apresentação) (20)
4. CIn.ufpe.br
Contextualização
• No mercado de tecnologia atual empresas devem ser capazes de
produzir softwares com features variadas, levando em consideração
as necessidades dos clientes e sem superfaturar o preço de seus
produtos.
• Uma nova abordagem de reuso de software tem ganhado atenção
tanto pela indústria quanto pela academia, Linhas de Produtos de
Software ou LPS.
5. CIn.ufpe.br
Contextualização
• Grandes organizações e mesmo projetos menores e open source
têm usado a abordagem de sistemas configuráveis em suas linhas
de produto para o desenvolvimento de softwares complexos.
• Com a utilização do CPP para lidar com portabilidade e variabilidade
(SPENCER,1992) surgem alguns problemas, como a introdução de
anotações não disciplinadas (ou incompletas) no código, o que é
criticado por alguns estudos por dificultar manutenção, entendimento
e assim prejudicar a qualidade do código.
7. CIn.ufpe.br
Motivação
• Catálogo de refactorings para disciplinar anotações
– Aumentar a qualidade do código
– Ajuda na manutenção e desenvolvimento no geral
• Não se tem conhecimento de ferramentas de refatoração automática
para disciplinar anotações em LPS.
9. CIn.ufpe.br
Objetivos
• Implementar uma ferramenta de refactoring para disciplinar
anotações em linhas de produto de software.
• Benchmark com casos de testes
• Comparar com ferramenta existente em projeto real.
11. CIn.ufpe.br
Linhas de Produto de Software
• Sistemas configuráveis
– Sistemas voltados ao desenvolvimento para composição por configurações ou
features. Como em Apel et al. (2013) Features são uma noção fundamental na
engenharia de software moderna, definidas como unidades incrementais de
funcionalidade.
• Variabilidade
– Variabilidade é a habilidade de derivar diferentes produtos de um conjunto
comum de artefatos (APEL et al., 2013, Chapter 3)
12. CIn.ufpe.br
Pré-processador C
• O Pré-Processador C ou CPP, é um pré-processador usado em
quase todos os projetos C e C++. Disponibiliza facilidades como
inclusão de arquivos com diretivas #include, geralmente para reuso
de arquivos .h ou headers, macros e compilação condicional
(KERNIGHAN; RITCHIE, 1988).
14. CIn.ufpe.br
Catálogo de refatorações
• Refactoring 1 – else if wrappers
Fonte: MEDEIROS, F. et al. A Catalogue of Refactorings to Remove Incomplete Annotations.
15. CIn.ufpe.br
Catálogo de refatorações
• Refactoring 3 – case wrappers
Fonte: MEDEIROS, F. et al. A Catalogue of Refactorings to Remove Incomplete Annotations.
16. CIn.ufpe.br
Expressões Regulares
Uma Expressão Regular (ER) define um padrão de busca ou substituição de
strings. É um meio preciso de se fazer buscas em textos.
Exemplo de utilização em Python
33. CIn.ufpe.br
Conclusão
• Principais contribuições
– Benchmark utilizando os casos de testes disponibilizados;
– Definição de ERs para identificar e, posteriormente, transformar código, com
base nos refactorings do catálogo Medeiros et al. (2014);
– REfacTool, com interface gráfica e por linha de código.
34. CIn.ufpe.br
Conclusão
• Trabalhos futuros
– Avaliação sistemática da ferramenta, comparando precisão, acurácia, e
desempenho com a ferramenta Colligens, aplicando a ferramenta em mais
projetos reais;
– Aperfeiçoar a implementação da ERs, para reconhecer mais parâmetros,
assim melhorando a precisão da ferramenta;
– Acoplar ferramenta para indentar código depois de transformado;
– Desenvolver padrões para identificar diretivas aninhadas;
– Destacar a linha do código de uma ocorrência de refactoring.
Notas do Editor
Inicio a apresentação pela agenda. A seguir apresento a contextualização, a motivação e os objetivos deste trabalho. Partindo para fundamentação teórica, explicando melhor os conceitos para entendimento da proposta. Depois falarei sobre o projeto em si, seu desenvolvimento, uso e uma avaliação preliminar realizada. No final serão apresentadas as contribuições e falarei sobre trabalhos futuros.
Inicio a apresentação pela agenda. A seguir apresento a contextualização, a motivação e os objetivos deste trabalho. Partindo para fundamentação teórica, explicando melhor os conceitos para entendimento da proposta. Depois falarei sobre o projeto em si, seu desenvolvimento, uso e uma avaliação preliminar realizada. No final serão apresentadas as contribuições e falarei sobre trabalhos futuros.
No mercado de tecnologia atual empresas devem ser capazes de produzir softwares com features variadas, levando em consideração as necessidades dos clientes e sem superfaturar o preço de seus produtos. Com esse desafio cada vez mais empresas investem em políticas de reuso de código para evitar retrabalho e consequentemente o repasse desse custo para os preços finais. Uma nova abordagem de reuso de software tem ganhado atenção tanto pela indústria quanto pela academia, Linhas de Produtos de Software ou LPS.
Grandes organizações e mesmo projetos menores e open source têm usado a abordagem de sistemas configuráveis em suas linhas de produto para o desenvolvimento de softwares complexos. Muitos desses softwares utillizam a linguagem C e suas diretivas de pré-processamento (com o uso do CPP ou Pré-Processador C). Com a utilização do CPP para lidar com portabilidade e variabilidade (SPENCER,1992) surgem alguns problemas, como a introdução de anotações não disciplinadas (ou incompletas) no código, o que é criticado por alguns estudos por dificultar manutenção, entendimento e assim prejudicar a qualidade do código
Anotações disciplinadas são alinhadas com a estrutura do código fonte, envolvem blocos sintáticos completos.
A maioria dos formalismos utiliza pelo menos três operações para construir ERs. A primeira é a alternância, uma barra vertical ’|’ separa alternativas como em
(if|else|endif). A segunda é a concatenação, representada por ’ab’, onde ’a’ e ’b’ são também expressões regulares. Por fim, a operação de quantificação (ou repetição),
quantificadores representam a quantidade de vezes que um caractere ou grupo pode ocorrer, por exemplo, a ER (ab*c), representa as cadeias “ac”, “abc”, “abbc”, ou seja, o
quantificador ’*’ indica que o ’b’ pode ocorrer zero ou mais vezes.