• Nenhum resultado encontrado

Aula 7Ferramentas de desenvolvimento

N/A
N/A
Protected

Academic year: 2022

Share "Aula 7Ferramentas de desenvolvimento"

Copied!
30
0
0

Texto

(1)

Aula 7

Ferramentas de desenvolvimento

Alessandro Garcia LES/DI/PUC-Rio

Abril 2019

(2)

Especificação

• Objetivo dessa aula

– Apresentar algumas das ferramentas utilizadas ao desenvolver programas modulares

• Referência básica:

– Capítulo 7

• Referências complementares

– Ierusalimschy, R.; Programming in Lua; Rio de Janeiro:

Lua.org; 2004

– Staa, A.v.; Utilitário GMAKE: Gerador de diretivas MAKE; LES - Laboratório de Engenharia de Software, Departamento de

Informática, PUC-Rio; 2006

(3)

Sumário

• Ambientes de engenharia de software

• Atividades do desenvolvimento modular

• A ferramenta MAKE

• A ferramenta GMAKE

• Ferramentas “feitas em casa”

(4)

Ambientes de engenharia de software

• Processos de desenvolvimento

– documentos descrevendo, passo a passo, o que e quando deve ser realizado

• Procedimentos (métodos)

– documentos descrevendo como devem ser realizadas as atividades do processo

• Padrões

– conjuntos de regras, recomendações e diretrizes a serem obedecidas ao desenvolver determinada classe de

artefatos

• Técnicas

– formas de apresentar ou habilidades de fazer algo

(5)

Ambientes de engenharia de software

• Plataformas de desenvolvimento

– hardware – rede

– sistema operacional – software de suporte – . . .

• Repositórios

– arquivos organizados contendo todas as informações relativas aos sistemas objetivo

• Ferramentas

– software de apoio ao desenvolvimento

– CASE – Computer aided software engineering

(6)

Ambientes de engenharia de software

• Papéis

– descrições das funções a serem desempenhadas por pessoas

• Pessoas com

– proficiência

• experiência profissional

• formação

know how

• habilitação

(7)

Atividades do desenvolvimento modular

Especificar programa

Arquitetar programa

Implementar módulo Desenvolver casos de teste

Completar a especificação

do módulo Especificar

interfaces dos módulos Revisar

especificação

Revisar arquitetura

Testar módulo Revisar

especificação de módulos Repositório

de artefatos aprovados

Para todos construtos

Para todos construtos

Para todos construtos

Para todos módulos do

construto

Revisar código do

módulo

Integrar construto

Testar construto

Revisar teste do construto

OK

OK OK

OK OK

OK OK OK

Módulo

Script de teste Laudo do teste

Revisar teste do módulo

(8)

Ferramentas básicas

• Editor de texto

– editor convencional

– editor sensível à sintaxe

• Editor de linguagens de representação gráficas

– editor de diagramas

• Processador de linguagem

– compilador de programas, pode gerar:

• linguagem nativa

byte code

• Interpretador

– puro, ex. batch; printf

byte code

(9)

Exemplo: Interpretador de expressões

Atr =

Var x Bin /

Bin + Bin *

Cte 12 Fun RQ

Var y

Var y Cte 4 Tabela

X Y

X = ( 12 + RQ( Y ) ) / ( Y * 4 )

(10)

Ferramentas básicas

• Bibliotecas e frameworks

Framework de apoio aos testes

• Compositor de bibliotecas (LIB)

– compõe uma biblioteca de módulos objeto

• Ligador (LINK)

MAKE

– controla a reconstrução de artefatos compostos

• Depurador (debugger)

– executa um programas compilado de modo que se possa controlar, visualizar e modificar o progresso da execução

Backup

(11)

Make

• Problema

– tenho 1000 módulos, altero o módulo m512 o que fazer para reconstruir o programa?

• Recompilar tudo é

– muito caro

– desnecessário: grande parte dos componentes não varia de

uma compilação para outra

(12)

Make

• Problema

– tenho 1000 módulos, altero o módulo m512.c o que fazer para reconstruir o programa?

• recompilar m512

• ligar tudo

– tenho 1000 módulos, altero o módulo m512.h o que fazer para reconstruir o programa?

• procurar todos os clientes de m512 e recompilá-los

• recompilar m512

• ligar tudo

– Risco: não recompilar todos que deveriam ser recompilados – Risco: recompilar vários que não deveriam ser recompilados – Custo: trabalho para descobrir quem deve ser recompilado

• Que tal desenvolver uma ferramenta?

(13)

Make

• O make é uma ferramenta que interpreta um arquivo (.make) de diretivas (script file) contendo instruções de

como deve ser regerado um determinado artefato composto

• Exemplo de um conjunto de diretivas

modulo1.obj: modulo1.c modulo1.h modulo2.h tabdef1.inc compilaC modulo1.c

tabdef1.inc: tabdef1.def

GeraDefinicoes /X /Y /Z tabdef1.def linha em branco

linha em branco

Coluna 1 da linha

Coluna > 1 da linha

(14)

Make

modulo1.obj : modulo1.c modulo1.h modulo2.h \ tabdef1.inc

compilaC modulo1.c

• Elementos de uma diretiva

– arquivo objetivo

• é o arquivo a ser gerado

– arquivos dependentes

• é a lista dos arquivos usados para gerar o objetivo

– uma ou mais linhas de comandos que realizam a geração – terminado com linha em branco

• A partir do script, o make cria uma árvore de dependências e ao final interpreta esta árvore de dependências

indica que a lista

continua na próxima

linha

(15)

Exemplo de um arquivo make 1 / 3

### Nomes globais

NOME = TesteArvore

### Nomes de paths

Pinc = ..\Tabelas Ph = ..\Fontes Pobj = ..\Objetos Perr = ..\Produto PDEFAULT = ..\Fontes Pc = ..\Fontes

### Nomes de diretórios para geração Finc = ..\Tabelas Fh = ..\Fontes Fobj = ..\Objetos Ferr = ..\Produto FDEFAULT = ..\Fontes Fc = ..\Fontes

diretórios onde procura por um arquivo

diretório onde grava

(16)

Exemplo de um arquivo make 2 / 3

### Macros da plataforma

O = /D_CRT_SECURE_NO_DEPRECATE

OD = /Zi /Od /D_CRT_SECURE_NO_DEPRECATE L =

LD = /DEBUG /DEBUGTYPE:CV

!IFDEF PRD

O = /Ox /D_CRT_SECURE_NO_DEPRECATE

!ENDIF

OPT = /c /J /W4 /nologo

INCLUDE = $(INCLUDE);$(PDEFAULT)

### Regras de geração all : limpa \

$(Fobj)\arvore.obj $(Fobj)\testarv.obj \ Construto

### Limpar arquivos limpa :

..\..\Ferramnt\CompileBanner /c$(NOME)

..\..\Ferramnt\CompileBanner /c$(NOME) >$(Ferr)\$(NOME).err

(17)

Exemplo de um arquivo make 3 / 3

### Dependências de módulos objeto a compilar

$(Fobj)\arvore.obj : {$(Pc)}\arvore.c \

..\tabelas\idtiposespaco.def {$(Ph)}arvore.h {$(Ph)}cespdin.h \

{$(Ph)}conta.h {$(Ph)}generico.h ${(Pdef)}tiposespacosarvore.def \ {$(Ph)}tst_espc.h

cl $(O) $(OPT) /Fo$(Fobj)\ $(Fc)\$(@B).c >> $(Ferr)\$(NOME).err

$(Fobj)\testarv.obj : {$(Pc)}\testarv.c \

{$(Ph)}arvore.h {$(Ph)}cespdin.h {$(Ph)}generico.h \ {$(Ph)}lerparm.h {$(Ph)}tst_espc.h

cl $(O) $(OPT) /Fo$(Fobj)\ $(Fc)\$(@B).c >> $(Ferr)\$(NOME).err

### Terminação Construto : \

$(Fobj)\arvore.obj $(Fobj)\testarv.obj cd $(Fobj)

LINK $(L) @$(NOME).build >> $(Ferr)\$(NOME).err

### Fim de diretivas MAKE para o construto: TesteArvore

(18)

Exemplo de um arquivo make: .build

• Diretivas .build são utilizadas pelo linker

• Exemplo

/OUT:..\produto\TesteArvore.exe /INCREMENTAL:NO

/MACHINE:IX86

arvore.obj testarv.obj

ArcaboucoTeste.lib

(19)

GMAKE - Gerador de script de make

• Redigir um script de make tende a ser enfadonho e sujeito a erros

• Solução:

– desenvolver uma ferramenta que gere o script make a partir de:

• um script de composição

– específico para um construto

• um script de plataforma de desenvolvimento

– genérico para todos os construtos de um projeto

(20)

GMAKE exemplo de composição

[Diretorios]

Nome = TesteArvoreDebug PathDefault = ..\Fontes

err = ..\Produto obj = ..\Objetos h = ..\Fontes espstr = ..\Tabelas lista = ..\Tabelas [Modulos]

TabelaString.lista g TesteTabelaString.espstr g Arvore /D_DEBUG

TestArv /D_DEBUG [BuildInicio]

/OUT:..\produto\TesteArvoreDebug.exe /INCREMENTAL:NO

/MACHINE:IX86 [BuildFim]

ArcaboucoTeste.lib

(21)

GMAKE Exemplo plataforma

[Comandos]

c => obj

cl $(O) $(OPT) /Fo$(Fobj)\ $(Fc)\$(@B).c >> $(Ferr)\$(NOME).err lista => tab

geratab /L$(Ftab)\$(@B).lista /T$(Ftab)\$(@B).tab >> $(Ferr)\$(NOME).err espstr => inc

geratbdf /E$(Ftab)\$(@B).espstr /T$(Ftab)\$(@B).inc >> $(Ferr)\$(NOME).err [MacrosGerais]

O = /D_CRT_SECURE_NO_DEPRECATE L =

!IFDEF PRD

O = /Ox /D_CRT_SECURE_NO_DEPRECATE

!ENDIF

OPT = /c /J /W4 /nologo

INCLUDE = $(INCLUDE);$(PDEFAULT) [Limpa]

CompileBanner /c$(NOME)

CompileBanner /c$(NOME) >$(Ferr)\$(NOME).err [DefaultLink]

cd $(Fobj)

LINK $(L) @$(NOME).build >> $(Ferr)\$(NOME).err [Fim]

(22)

Exemplo de script make gerado

##################################################

###

### Diretivas de MAKE para o construto: ExemploTabela

### Gerado a partir de: ExemploTabela.comp

###

### --- Arquivo gerado, NÃO EDITE!!! ---

###

##################################################

### Nomes globais

NOME = ExemploTabela

### Nomes de paths

Pobj = . Ptab = . Pinc = . Ph = . Perr = . PDEFAULT = . Pespstr = . Plista = .

(23)

Exemplo de script make gerado

### Nomes de diretórios para geração Fobj = .

Ftab = . Finc = . Fh = . Ferr = . FDEFAULT = . Fespstr = . Flista = . Fc = .

### Macros da plataforma

O = /D_CRT_SECURE_NO_DEPRECATE

OD = /Zi /Od /D_CRT_SECURE_NO_DEPRECATE L =

LD = /DEBUG /DEBUGTYPE:CV

!IFDEF PRD

O = /Ox /D_CRT_SECURE_NO_DEPRECATE

!ENDIF

OPT = /c /J /W4 /nologo

INCLUDE = $(INCLUDE);$(PDEFAULT)

(24)

Exemplo de script make gerado

### Regras de geração

all : limpa \

$(Ftab)\TabelaString.tab $(Finc)\TesteTabelaString.inc $(Fobj)\Tabstr.obj \

$(Fobj)\TestTbs.obj \ Construto

### Limpar arquivos

limpa :

CompileBanner /c$(NOME)

CompileBanner /c$(NOME) >$(Ferr)\$(NOME).err

(25)

Exemplo de script make gerado

### Dependências de módulos objeto a compilar

$(Ftab)\TabelaString.tab : {$(Plista)}\TabelaString.lista \

{$(PDEFAULT)}STR_APIC.DEF {$(PDEFAULT)}STR_SEGL.DEF {$(Pespstr)}TesteTabelaString.espstr

geratab /L$(Ftab)\$(@B).lista /T$(Ftab)\$(@B).tab >> $(Ferr)\$(NOME).err

$(Finc)\TesteTabelaString.inc : {$(Pespstr)}\TesteTabelaString.espstr

geratbdf /E$(Ftab)\$(@B).espstr /T$(Ftab)\$(@B).inc >> $(Ferr)\$(NOME).err

$(Fobj)\Tabstr.obj : {$(Pc)}\Tabstr.c \

{$(PDEFAULT)}TabStr.H {$(Ptab)}TabelaString.tab

cl $(O) $(OPT) /Fo$(Fobj)\ $(Fc)\$(@B).c >> $(Ferr)\$(NOME).err

$(Fobj)\TestTbs.obj : {$(Pc)}\TestTbs.c \

{$(Ph)}TST_Espc.h {$(Ph)}TabStr.h {$(Ph)}generico.h

\

{$(Ph)}lerparm.h {$(Ph)}tst_espc.h

cl $(O) $(OPT) /Fo$(Fobj)\ $(Fc)\$(@B).c >> $(Ferr)\$(NOME).err

(26)

Exemplo de script make gerado

### Terminação

Construto : \

$(Fobj)\Tabstr.obj $(Fobj)\TestTbs.obj cd $(Fobj)

LINK $(L) @$(NOME).build >> $(Ferr)\$(NOME).err

##################################################

###

### Fim de diretivas MAKE para o construto: ExemploTabela

###

##################################################

(27)

Ferramentas “feitas em casa”: .bat

• Exemplo de batch file

@ECHO OFF

REM Gera script de make

REM Sintaxe GeraMake <NomeArquivoComposicao>

pushd .

if ""=="%1" goto erro cd ..\composicao

gmake /c%1 /b..\composicao goto sai

:erro

echo Falta nome do arquivo de diretivas de composicao :sai

popd

(28)

Ferramentas “feitas em casa”: .lua

function main( )

if arg[ 1 ] == nil then

io.write( "\n\nModo de usar: lua geramake.lua <composicao> " ) io.write( "\n <composicao> - nome do script de composicao" ) return

end -- if

os.execute( "cd ..\\composicao" )

comando = "gmake /c" .. arg[ 1 ] .. " /b..\\composicao"

io.write( "\n!!! => " , comando , "\n" ) os.execute( comando )

end

main( )

(29)

FIM

(30)

Aula 7

Ferramentas de desenvolvimento

Alessandro Garcia LES/DI/PUC-Rio

Abril 2019

Referências

Documentos relacionados

PAUL – Moi, je prends du café au lait, du pain au beurre, de la marmelade et des gâteaux.. ROSE – Moi, je ne prends pas

Para atingir este fim, foram adotados diversos métodos: busca bibliográfica sobre os conceitos envolvidos na relação do desenvolvimento de software com

Já o Ministério do Turismo (2010), divulga não apenas as atribuições gerais que o guia deve cumprir, mas também as atribuições específicas de acordo com a

Além de serem gravados no cartão, os dados são transmitidos através de um módulo de rádio frequência transmissor para um receptor do modelo, onde há um outro PIC capaz de

São muitos os problemas ambientais causados pelo crescimento urbano, o poder público não acompanha esse crescimento com investimentos em obras de infraestrutura, são ocupados

Na Nova Zelândia em sistemas pastoris as vacas produzem em média 17 litros de leite ao dia, enquanto nos produtores analisados neste estudo a média de

de 2 (duas), por acordo individual, convenção coletiva ou acordo coletivo de trabalho. Agora a CLT passa a contar com 3 espécies de compensação de horas; 1) Banco de horas

Este estudo, assim, aproveitou uma estrutura útil (categorização) para organizar dados o que facilitou a sistematização das conclusões. Em se tratando do alinhamento dos