METODOLOGIA UNIFUNCIONAL DE
DESENVOLVIMENTO DE SOFTWARE
Akeo Tanabe
[email protected]
Agenda
• A motivação
• A metodologia
• Exemplos
• Conclusão
[email protected] © LES/PUC-Rio
2
A Motivação
• Desenvolver sem conhecer os requisitos
– Flexibilidade no desenvolvimento
• Sensação permanente do “já programado”
– “desacoplar” função desejada de programa existente
• Acesso permanente(“on-line”) a multi-arquivos
• Bom conhecimento de utilitários e ferramentas
• Analogia com base vetorial da “Álgebra Linear”
•  Unifuncionais - Funções “ortogonais”
– Funções independentes – facilidade de composição
[email protected] © LES/PUC-Rio
3
A Metodologia: etapas do desenvolvimento
• Escolha do domínio de aplicação
– Processamento da Linguagem Natural (PLN)
– Língua Portuguesa - Brasil
• Construção da base unifuncional
– Bases de conhecimento por categoria gramatical
• Tecnologia das mini-transformações
– Programa como transformador de arquivos
– Aplicativo como seqüência de transformações
• Composição da aplicação
– Arquivo de entrada de um programa = arquivo de saida do
programa precedente (estilo do “pipeline” UNIX)
– Ordenação das transformações numa seqüência
– Execução da aplicação prescrita
[email protected] © LES/PUC-Rio
4
Construção da base unifuncional
• Bases de conhecimentos por categoria gramatical
• Ferramentas utilizadas na plataforma WINDOWS
– Linguagem C/C++ e AWK
– ULTRAEDIT – editor de textos
• Classes de aplicativos unifuncionais básicos
– Ordenação alfabética e numérica
– Conversor para letras minúsculas
– ç e vogais acentuadas
– Freqüência das palavras
– ordem descrescente das freqüências
– Reconhecedores/filtros
– Categorizadores gramaticais
– Filtro das palavras mais freqüentes
[email protected] © LES/PUC-Rio
5
Bases unifuncionais - categoria gramatical
• Bases flexionadas (codificadas):
– Substantivos,adjetivos
– Verbos
• Bases invariantes (não flexionadas)
– Abreviaturas
– Conjunções/preposições/pronomes/interjeições
– Advérbios
– (incluidos por baixo volume): artigos/numerais
– Palavras mais freqüentes
• Para cada uma das bases, programas:
– ”framework” de reconhecedores/filtros
– ”framework” de categorizadores gramaticais
– ”framework” de reconhecedores genéricos
[email protected] © LES/PUC-Rio
6
Bases unifuncionais • Bases em letras minúsculas
–  programa conversor de texto em minúsculas
• Para PLN – Língua Portuguesa:
– construção dos vocabulários
– ”SORT” – especial (ç e vogais acentuadas)
– filtro das palavras mais freqüentes
– reconhecimento das flexões
• Substantivos e adjetivos
• Verbos
• Ferramentas para facilitar desenvolvimento
– AWK como gerador de estruturas para programas em C/C++
• Transformador de arquivos
– AWK – ferramenta para as mini-transformações
• Super utilitário para PLN
[email protected] © LES/PUC-Rio
7
Tecnologia das Mini-Transformações
• Matéria prima: compartilhamento de arquivos textos
• Ferramenta de trabalho: AWK(programa interpretado)
• AWK: linguagem ideal para transformações em PLN
– ”pattern matching” – “regular expression”
– ”customização” do parser
– ”character string” como índice de “arrays”
– comandos para manipulação de tabela de símbolos
• Programas como seqüência de mini-transformações
– Domando a complexidade (“dividir para conquistar”)
• Agregação de funcionalidade a programas “fechados”
– pré e pós processamento de arquivos
– integração de aplicativos
[email protected] © LES/PUC-Rio
8
Agregar funcionalidade por transformaçao
-Programa
“SORT” como exemplo
• Estratégias: pré e pós processamento e
– Transformação dos arquivos de entrada/saida
• Funcionalidades do meu “SORT”:
– só ordem alfabética crescente(vogais acentuadas e ç)
– só ordem numérica crescente (valor numérico do byte)
• Exemplo 1: Chave no meio de registro
• prefixar chave de ordenação ao registro e ordenar
• restaurar registro original após ordenação
• Exemplo 2: Ordem numérica decrescente
• complementar valor numérico e ordenar
• descomplementar valor numérico
• Outros exemplos:
– ordenação em condições especiais
– tratamento do ç e de vogais acentuadas
– alinhamento das ordenações pelos diferentes instrumentos
[email protected] © LES/PUC-Rio
9
Caso 1: Transformação estilo XSLT - input
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
goal_model (Confidentiality)(GM9){
softgoal = (Confidentiality)(S9.1)(and){
softgoal = (Confidentiality[task])(S9.1.1)(and){}
softgoal = (Confidentiality[settings])(S9.1.2)(and){}
task = (Login)(T9.1.3)(help) {}
task = (Logout)(T9.1.4)(help) {}
softgref = (Performance[time])(S6.1.1)(and)
softgoal = (Confidentiality[events])(S9.1.5)(and){}
softgoal = (Confidentiality[category])(S9.1.6)(and){}
}
goax = (Manage[account])(G9.4)(and){
goax = (Edit[account])(G9.4.1)(and){
task = (Edit[user account])(T9.4.1.1)(or){
task = (Edit[administrator account])(T9.4.1.2)(or){
task = (Edit[e-mail])(T9.4.1.2.1)(and){}
}
task = (Edit[username])(T9.4.1.3)(and){}
task = (Edit[password])(T9.4.1.4)(and){}
task = (Edit[full name])(T9.4.1.5)(and){}
task = (Reset[password])(T9.4.1.6)(and){}
task = (Change[password])(T9.4.1.7)(and){}
}
goax = (There is always at least one[administrator account])(G9.4.2)(and){}
goax = (Manage[access])(G9.4.3)(and){}
}
crosscutting{
[email protected] © LES/PUC-Rio
10
Caso 1: Transformação estilo XSLT - output
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
<?xml version="1.0" encoding="UTF-8"?>
DOCTYPE aspect_oriented_model SYSTEM "d:\Lyrene\Tese\Language_New\DTD\goal_AspectOrientedModel.dtd">
<aspect_oriented_model>
<goal_model id="GM9">
<name>Confidentiality</name>
<softgoal id="S9.1">
<name>Confidentiality</name>
<softgoal id="S9.1.1"><name>Confidentiality[task]</name></softgoal>
<softgoal id="S9.1.2"><name>Confidentiality[settings]</name></softgoal>
<task id="T9.1.3" decomposition_label="help"><name>Login</name></task>
<task id="T9.1.4" decomposition_label="help"><name>Logout</name></task>
<softgoal_ref id="S6.1.1"></softgoal_ref>
<softgoal id="S9.1.5"><name>Confidentiality[events]</name></softgoal>
<softgoal id="S9.1.6"><name>Confidentiality[category]</name></softgoal>
</softgoal>
<goal id="G9.4">
<name>Manage[account]</name>
<goal id="G9.4.1">
<name>Edit[account]</name>
<task id="T9.4.1.1" decomposition_label="or"><name>Edit[user account]</name>
<task id="T9.4.1.2" decomposition_label="or"><name>Edit[administrator account]</name>
<task id="T9.4.1.2.1" decomposition_label="and"><name>Edit[e-mail]</name></task>
</task>
<task id="T9.4.1.3" decomposition_label="and"><name>Edit[username]</name></task>
<task id="T9.4.1.4" decomposition_label="and"><name>Edit[password]</name></task>
<task id="T9.4.1.5" decomposition_label="and"><name>Edit[full name]</name></task>
<task id="T9.4.1.6" decomposition_label="and"><name>Reset[password]</name></task>
<task id="T9.4.1.7" decomposition_label="and"><name>Change[password]</name></task>
</task>
<goal id="G9.4.2"><name>There is always at least one[administrator account]</name></goal>
<goal id="G9.4.3"><name>Manage[access]</name></goal>
</goal>
[email protected] © LES/PUC-Rio
11
Caso 2: Análise de requisitos
<documento do sistema>
<termos a pesquisar>
<documento do sistema>
[geraprog.awk]
[xec.awk]
<xec.awk>
<palloc>
[indexRF.awk]
<outindex>
(getline)
[definesegmento.awk]
<praver>
Localiza palavras nos
segmentos
[ordenar.exe]
<tosee>
[delduplicados.awk]
in ..\parcerias\miriam (set/2005)
[email protected] © LES/PUC-Rio
<miruni>
(pag. seguinte)
12
Caso 2 : Análise de requisitos
<miruni>
<arq02>
[consolidasegmento.awk]
[locfirst.awk]
<documento do sistema>
<arq03>
<arq01>
[trazsegmentorelevante.awk]
[ordenar.exe]
[ordenar.exe]
<arq02>
<arq05>
<arq04>
(getline)
Palavras no contexto
dos segmentos
[email protected] © LES/PUC-Rio
13
Caso 2 : Resultados
•
************ ==> fornecedor#RF11 Visualizar Viagem Actual
•
3.2.10 RF11 Visualizar Viagem Actual
•
Um produto passa a integrar a Viagem Actual depois de esco ...
•
A Viagem Actual tem um nome padrão criado pelo sistema que...
•
Depois de escolher todos os produtos de sua viagem, o clie...
•
A figura abaixo ilustra o conteúdo da Viagem Actual durant...
•
•
Os produtos aparecem na lista com um resumo das principais...
•
Para cada item da lista, é possível visualizar mais inform...
•
As informações sobre produtos são obtidas através de casos...
•
Note-se que a Viagem Actual só existe durante uma sessão a...
•
•
•
************ ==> pagamento,reserva#RF172 Visualizar Minha ...
•
3.2.12 RF172 Visualizar Minha Viagem
•
Este caso de uso disponibiliza ao cliente uma listagem de...
•
Cada item da lista possui um status associado (planeada, p...
•
Apresenta, ainda, um link para o Histórico de Viagens.
•
Além disso é possível obter +detalhes destas viagens.
•
[email protected] © LES/PUC-Rio
14
Caso 2: Resultados em negrito
•
************ ==> pagamento,reserva#RF17 Visualizar Viagens Futuras
•
3.2.17 RF17 Visualizar Viagens Futuras
•
Uma viagem passa a fazer parte das Viagens Futuras quando o cliente confirma e paga a
==>reserva<==.
•
A lista de viagens futuras do cliente aparece no caso de uso Visualizar Minha Viagem, com
•
uma opção para visualização de detalhes sobre cada viagem da lista. Incluem-se nesta lista
•
as viagens que foram confirmadas pelo cliente mas ainda estão pendentes de alguma confirmação
•
via Back Office como por exemplo confirmação de ==>pagamento<==, confirmação de voo que
•
não pôde ser obtida on-line, etc.
•
Este caso de uso (Visualizar Viagens Futuras) permite que o cliente veja os detalhes de
•
uma viagem futura.
•
A visualização de Viagens Futuras é semelhante à visualização da Viagem Actual, ou seja,
•
para cada viagem é disponibilizada uma lista de produtos com descrição resumida e existe
•
a possibilidade de visualização da descrição detalhada.
•
Além disso, as Viagens Futuras possuem as seguintes características:
•
* Produtos de Viagens Futuras não podem ser excluídos, e uma Viagem Futura não pode ser
cancelada on-line.
•
* Existe um status associado às Viagens Futuras.
•
* Existe uma opção de visualização de Dados de Pagamento para cada Viagem Futura que, caso
•
seleccionada, executa o caso de uso Visualizar Dados de Pagamento de Viagem.
•
* Dependendo do status da viagem, o cliente pode Efectuar Pagamento Complementar, caso
•
tenha pago apenas 25% da viagem ao confirmar e pagar a ==>reserva<==.
•
... ... ...
Akeo Tanabe - [email protected] © LES/PUC-Rio
15
Caso 3: Extração de nomes próprios
<entrada>
<saida>
executar
[categorizgram.bat]
<saida>
[seltoclaudia.awk]
<arq01>
(reuso)
[maybenomeproprio.awk]
Extração de
Nomes Próprios
(versão 0)
<nomesproprios>
[email protected] © LES/PUC-Rio
16
Caso 3: Extração de nomes próprios
<nomes.ued>
[ordenar.exe]
<nombyleng>
[genstructnames.awk]
<name01>
[delduplicados.awk]
<name02>(**)
<names.h>
UEDIT
para “#include” in
catgramaticalnom
es.c
[historyparticnom.awk]
<name03>
[gerabatpartic.awk]
Obs1:
<xec.bat>
<name03> informa
partição ausente
executar
xec.bat
NOMES PRÓPRIOS
gerar estrutura para
programa em “C”
Obs2: (**)
acrescentar partições
ausentes em <name02>
in ..\parcerias\claudia
<nombyleng>
[email protected] © LES/PUC-Rio
17
Caso 3: Extração de nomes próprios
<entrada
>
<arq01>
[seltoclaudia.awk]
executar
[categorizgram.bat]
<arq02>
[maybenomeproprio.awk]
<saida>
<arq03>
[gsubprep.awk]
[gsubprep.awk]
<arq01>
(pré)
[limparprep.awk]
(pós)
<nomesproprios>
Extração de
Nomes Próprios
(versão 1)
Processo para extração de nomes próprios
[batchnomes.bat]
[email protected] © LES/PUC-Rio
18
Caso 3: Batch para extração nomes próprios
rem
rem batchnome.bat (%1)=(entrada) (%2)=(saida)
rem
del arq01
del arq02
del arq03
gawk -f gsubprep.awk %1 >arq00
gawk -f seltoclaudia.awk arq00 >arq01
gawk -f maybenomeproprio.awk arq01 >arq02
gawk -f indexnomeproprio.awk arq02 >arq03
gawk -f smartmontanome.awk arq00 >acum
gawk -f limparprep.awk acum >out01
gawk -f deletaprimo.awk out01 >out02
gawk -f deletalast.awk out02 >%2
[email protected] © LES/PUC-Rio
19
Caso 3: Texto com os nomes próprios
Herbert von Karajan conducted the Berlin Philharmonic Orchestra for many years
Golbery do Couto e Silva, chefe do Gabinete Civil do governo de Ernesto Geisel.
O chefe de Gabinete do Ministro da Fazenda, Juscelino Dourado,...
Os promotores denunciaram em abril do ano passado o empresário
Sérgio Gomes da Silva,o Sombra ex-segurança do prefeito,
como o mandante do crime
O relator da matéria, ministro Marco Aurélio de Mello, afirmou que o direito
ao silêncio é assegurado constitucionalmente a todo aquele que sob
a custódia ou não do Estado é convocado para depor e vê-se alvo de
investigação
[email protected] © LES/PUC-Rio
20
Caso 3: Resultados intermediários
<com
(gsubprep.awk) original>
<com (gsubprep.awk) modificado>
=================================================================
000001#Herbert?**********
000001#Herbert?**********
000003#Karajan?**********
000002#Von:von?**********
000006#Berlin?**********
000003#Karajan?**********
000007#Philharmonic?**********
000006#Berlin?**********
000008#Orchestra?**********
000007#Philharmonic?**********
000012#Golbery?**********
000008#Orchestra?**********
000013#DO:do?PREP
000012#Golbery?**********
000014#Couto?**********
000013#DO:do?PREP
000015#E:e?CONJ
000014#Couto?**********
000016#Silva?NOME:VERB
000015#E:e?CONJ
000018#DO:do?PREP
000016#Silva?NOME:VERB
000021#DO:do?PREP
000018#DO:do?PREP
000023#DE:de?PREP
000021#DO:do?PREP
000024#Ernesto?**********
000023#DE:de?PREP
000025#Geisel?**********
000024#Ernesto?**********
000028#DE:de?PREP
000025#Geisel?**********
000030#DO:do?PREP
000028#DE:de?PREP
000032#DA:da?PREP
000030#DO:do?PREP
000034#Juscelino?**********
000032#DA:da?PREP
000035#Dourado?ADJ:NOME:VERB
000034#Juscelino?**********
000041#DO:do?PREP
000035#Dourado?ADJ:NOME:VERB
000046#Sérgio?**********
000041#DO:do?PREP
000047#Gomes?NOME:VERB
000046#Sérgio?**********
000048#DA:da?PREP
000047#Gomes?NOME:VERB
000049#Silva?NOME:VERB
000048#DA:da?PREP
000053#DO:do?PREP
000049#Silva?NOME:VERB
. . .
. . .
=================================================================
[email protected] © LES/PUC-Rio
21
Caso 3: Resultados
<nomes extraídos>
----------------------------Berlin Philharmonic Orchestra
Golbery do Couto e Silva
Ernesto Geisel
Juscelino Dourado
Sérgio Gomes da Silva
Marco Aurélio de Mello
<gsubprep.awk - original>
-----------------------------------/#e\?/{gsub(/#e\?/,"#E:e?")}
/#de\?/{gsub(/#de\?/,"#DE:de?")}
/#da\?/{gsub(/#da\?/,"#DA:da?")}
/#das\?/{gsub(/#das\?/,"#DAS:das?")}
/#dos\?/{gsub(/#dos\?/,"#DOS:dos?")}
/#do\?/{gsub(/#do\?/,"#DO:do?")}
{print $0}
========================================================================
<nomes extraídos>
-----------------------------Herbert von Karajan
Berlin Philharmonic Orchestra
Golbery do Couto e Silva
Ernesto Geisel
Juscelino Dourado
Sérgio Gomes da Silva
Marco Aurélio de Mello
<gsubprep.awk - modificado >
------------------------------------/#e\?/{gsub(/#e\?/,"#E:e?")}
/#de\?/{gsub(/#de\?/,"#DE:de?")}
/#da\?/{gsub(/#da\?/,"#DA:da?")}
/#das\?/{gsub(/#das\?/,"#DAS:das?")}
/#dos\?/{gsub(/#dos\?/,"#DOS:dos?")}
/#do\?/{gsub(/#do\?/,"#DO:do?")}
# para nomes germanicos
/#von\?/{gsub(/#von\?/,"#Von:von?")}
{print $0}
========================================================================
[email protected] © LES/PUC-Rio
22
Conclusões
• Domando a complexidade
• Facilidade em agregar funcionalidades
– Transformação do programa ou do arquivo
• Arquivos temporários são logs (para debug)
• Agregar funcionalidades criando novas bases, em
nível mais elevado (biblioteca de componentes)
• Ferramentas para o domínio da reprodutibilidade
do processo / sincronismo bases x programas
• Melhoria na qualidade do software
• Não sou “Matte Leão”, mas use e abuse
[email protected] © LES/PUC-Rio
23
Download

Media:unifuncional - (LES) da PUC-Rio