SlideShare uma empresa Scribd logo
1 de 11
Aplicação de técnicas de processamento de linguagem natural
para ferramenta Pyccuracy
Laís Berlatto ¹, Felipe Haack Schmitz¹
1Curso de Ciência da Computação – ICEG – Universidade de Passo Fundo (UPF)
Campus 1 – BR 285 – Bairro São José – 99.001-970 – Passo Fundo – RS – Brasil
104493@upf.br, 106696@upf.br
Abstract: This article has as its main theme of approach two major areas of computer
science which are: Software Engineering with focus in the area of Software Quality
and Testing and the area of Artificial Intelligence, covering the field of Natural
Language Processing. It is proposed to optimize the automation tool acceptance tests
called Pyccuracy. To this end we suggest the use of natural language processing
rather than the mechanism implemented in the tool to process and convert words in
natural language using regular expressions
Resumo. Este artigo tem como principal tema de sua abordagem duas grandes áreas
da Ciência da Computação que são: a Engenharia de Software com foco na área de
Qualidade e Testes de Software e a área da Inteligência Artificial, abordando o ramo
de Processamento de Linguagem Natural. Propõe-se uma otimização da ferramenta de
automação de testes de aceitação chamada Pyccuracy. Para tanto sugere-se o uso de
processamento de linguagem natural ao invés do mecanismo implementado na
ferramenta para processar e converter palavras em linguagem natural através de
expressões regulares.
1. Introdução
O filósofo Nietzsche, no século passado, alertava: "Com o aumento da competição, a
qualidade se torna mera propaganda. Vence aquele que melhor engana". Esta receita é
atrativa já que é muito simples e fácil de segui-la, entretanto, aquele que toma esse tipo
de postura está fadado ao fracasso. Implantar um processo de garantia da qualidade de
software não é uma opção a ser estudada, mas sim, parte de uma estratégia de
sobrevivência em um mercado cada vez mais exigente. Conclui-se então, que as
empresas mais competitivas são aquelas que trabalham sob a ótica da melhoria contínua
dos processos para aumentar a qualidade dos métodos de desenvolvimento e,
consequentemente, aumentar a qualidade do produto final.
Neste contexto, devemos destacar a adoção crescente de ferramentas e técnicas para dar
suporte ao processo de melhoria evolutiva, relativa a todas as atividades do ciclo de vida
de desenvolvimento de um software, desde sua concepção à até sua
implantação. Segundo a Borland, qualidade de software é a convergência entre
requisitos completos, o código correto e o mínimo de defeitos – todos alinhados para
atingir os objetivos do negócio, e a base de sustentação deste processo são os testes.
Testes de software são elementos críticos da garantia de qualidade de software e
representam a última revisão de especificação, projeto e codificação, caracterizam-se
por ser o processo que executa o software com a intenção de encontrar erros [Myers,
1979]. Testar um software é uma tarefa meticulosa e bastante complexa e geralmente
ela não é realizada de forma sistemática, sem nenhuma base em modelos de garantia de
qualidade, muitas vezes devido a uma série de fatores como limitações de tempo,
recursos e qualificação técnica dos envolvidos. Outros agravantes para a realização
dessa atividade são a alta complexidade dos sistemas sendo desenvolvidos atualmente e
a constante necessidade de sua rápida evolução.
Dentre as diversas técnicas de teste de software destacam-se os testes funcionais
que tem como objetivo medir a qualidade funcional de componentes de um sistema
[Molinari, 2010], avaliando-os conforme seu comportamento externo. Quando se realiza
um teste funcional está na verdade confrontando com o que se espera que o sistema vá
fazer, ou seja, incluindo entrada de dados, processamento e resposta.
A automação de teste de software é atualmente a principal maneira
para proporcionar a entrega de produtos mais confiáveis em menor tempo [Myers 2004;
Fewster 1999; Dustin 2002], e consiste em repassar para o computador tarefas de teste
de software que seriam realizadas manualmente, sendo feitas por meio do uso de
ferramentas de automação de teste, imitando a interação do ser humano com o software.
A partir desta automação, testes de regressão são realizados para verificar se
manutenções realizadas no sistema introduziram efeitos colaterais indesejáveis
[Pressman 2002]. Os testes de regressão automatizados, além de diminuir drasticamente
o tempo total de execução do teste, viabilizam uma cobertura que, de outra forma, não
poderia ser realizada em tempo compatível com a necessidade do mercado atual.
Atualmente, novos paradigmas de teste surgiram para facilitar e agilizar o ciclo
de desenvolvimento de um software. Um exemplo disto é a técnica behavior driven
development conhecida como BDD, que possibilita o planejamento, automação,
execução e documentação dos testes de forma colaborativa. Empresas como o Yahoo
Brasil adotam este tipo de técnica com o uso do framework Pyccuracy. O uso desta
ferramenta e técnica propicia a escrita do teste automatizado em uma linguagem
próxima da humana, com poucas palavras ubíquas facilitando a automação dos testes e
os próprios scripts ficam como documentação. O pyccuracci reconhece as palavras em
linguagem natural dentro de um script de teste através do uso de expressões regulares.
Inteligência Artificial (IA) é um ramo da ciência da computação que se propõe a
elaborar dispositivos que simulem a capacidade humana de raciocinar, perceber, tomar
decisões e resolver problemas, enfim, a capacidade de ser inteligente. Para muitos
pesquisadores em inteligência artificial, o processamento de linguagem natural é um dos
objetivos mais cruciais da IA a ser alcançado, já que possibilita ao computador a
compreensão direta da linguagem natural. Os obstáculos mais difíceis de transpor, nesta
área, são o tamanho e a complexidade da linguagem humana [Schildt, 1989].
Entretanto, os benefícios, que uma aplicação que faça o uso de PLN possa
acarretar sobrepõem-se aos desafios. A proposta deste artigo visa uma extensão, um
aprimoramento da ferramenta livre Piccuraccy no que diz respeito ao reconhecimento,
processamento e execução das palavras encontradas em linguagem natural nos scripts
de teste, uma vez que estas são reconhecidas através do uso de expressões regulares e
um vocábulo previamente definidos e sua execução através de um código-fonte fixo.
Este aprimoramento consiste na substituição do uso das expressões regulares e código
fixo pelo emprego de processamento de linguagem natural.
2. Qualidade de Software
A busca pelo controle e garantia de qualidade é um assunto muito antigo. Egípcios a
quatro mil anos atrás estabeleceram um padrão de medida de comprimento, chamado
cúbito, que correspondia ao comprimento do braço do faraó reinante, com a ideia de que
esta seria a medida perfeita, uma medida real. Naquela época todas as construções
deviam ser realizadas utilizando o cúbito como unidade de medida. Caso houvesse um
erro de medição, o responsável poderia ser punido com a morte [Juran e Gryna, 1988].
O resultado da preocupação com o rigor pode ser visto nas pirâmides, nas quais os
egípcios obtiveram precisões de 0,05 % [Egyptian Organization for Standardization na
Quality Control, 2005].
A história da qualidade prosseguiu com inúmeros marcos extraordinários. Fatos
contemporâneos, como a criação da ABNT (Associação Brasileira de Normas Técnicas)
em 1960 no Brasil e a fundação da ISO (International Standardization Organization) na
mesma época, marcam o inicio de um grande movimento que tornou a qualidade hoje,
como um objetivo de negócio, seja para conquistar metas como a exportação, ou para,
resistir às pressões da concorrência do mercado interno.
Sob a perspectiva de software, o assunto de qualidade é bastante extenso. Para
cada aspecto do ciclo de vida de um produto, existem diversas técnicas, métodos e
ferramentas visando apoiar o negócio. Qualidade de Software segundo a IEEE 629.12-
1990 é o grau para o qual um sistema, componente ou processo vai ao encontro dos
requisitos especificados e com expectativas, ou necessidades, dos usuários ou clientes.
O processo da qualidade possui três objetivos distintos: melhorar um produto de
software (através da prevenção, detecção e remoção de erros), avaliar a qualidade de um
produto de software (em relação a metas explicitas de qualidade) e melhorar e
rentabilidade a longo prazo do processo de qualidade em si [Pezzé e Young, 2008]. Para
alcançar estes objetivos a qualidade de software é apoiada sob três grandes áreas, sendo
elas a gestão de configuração, gestão de requisitos e gestão de testes.
 Gestão de Configuração: trata da gerencia, controle e registro dos artefatos que
compõe o software, incluindo todo o histórico de mudança do software.
 Gestão de Requisitos: trata da gerencia, controle e registros das necessidades do
sistema (requisitos) e dos usuários em todos os níveis, incluindo também a
rastreabilidade das necessidades e suas mudanças.
 Gestão de testes: trata da gerencia, planejamento, controle e execução dos testes
em todos os níveis, de modo a garantir a implementação (projeto,
desenvolvimento e entrega) das necessidades especificadas. Este trabalho tem
por foco a gestão de testes.
3. Testes de Software
Segundo a nomenclatura da IEEE, o processo de testes consiste em operar um sistema
ou componente sob condições especificadas, observando ou registrando os resultados e
avaliando algum aspecto desse sistema ou componente [Paula Filho, 2009]. Conclui-se
então que teste é uma atividade na qual um produto, sistema ou componente é
executado sob um cenário especificado, com observação e registro dos resultados e
avaliação de um ou mais aspectos.
Testes são mais do que meios para detecção e correção de erros, são indicadores
da qualidade de um produto. Segundo [Glass, 2003], a remoção de defeitos é a parte que
mais consome tempo do ciclo de vida de um software. Portanto é importante que testes
sejam realizados e de uma forma correta, sendo bem planejados e desenhados, para
conseguir o melhor proveito possível dos recursos alocados para ele.
Existem muitas maneiras de se testar um software. Apesar dos diversos
paradigmas de desenvolvimento completamente diferentes, o objetivo principal destas
técnicas continua a ser o mesmo, encontrar falhas no software. Algumas das técnicas
mais conhecidas são o teste de caixa-branca e o teste de caixa-preta. O teste de caixa-
branca é uma técnica de teste que usa a perspectiva interna do sistema para modelar
os casos de teste uma perspectiva interna significa basicamente o código fonte, um
exemplo deste tipo de teste seria o teste de sistema. Já o teste de caixa-preta serve para
verificar a saída dos dados usando entradas de vários tipos, exemplo deste tipo de teste
seriam os testes funcionais, foco deste trabalho.
3.1 Testes Funcionais
Teste funcional é uma técnica utilizada para se projetar casos de teste nos quais o
programa ou sistema são considerados como uma caixa preta e, para testá-lo, são
fornecidas entradas e avaliadas as saídas geradas para verificar se estão em
conformidade com os objetivos especificados [Delamaro, Maldonado e Jino, 2007].
O teste funcional avalia o comportamento da aplicação. Dados de entrada são
fornecidos, o teste é executado e o resultado obtido é comparado a um resultado
esperado previamente conhecido. Quanto mais entradas são fornecidas, mais rico será o
teste. Numa situação ideal, todas as entradas possíveis seriam testadas, mas na ampla
maioria dos casos isso é impraticável. Uma abordagem mais realista para o teste
funcional é escolher um subconjunto de entradas que maximize a riqueza do teste.
3.2 Testes de aceitação
O teste de aceitação é a última ação de teste antes da implantação do software e é um
tipo de teste funcional. A meta do teste de aceitação é verificar se o software está pronto
e pode ser usado pelos usuários finais para executar as funções e as tarefas para as quais
foi criado. Este tipo de teste valida a utilidade e satisfação com o produto, sendo
executado pelo grupo de testes com o envolvimento do usuário final para verificar a
adequação com as necessidades do usuário [Pezzé e Young, 2008].
4. Automação de testes
O teste automatizado aumenta a produtividade e atinge em tempo menor aquilo que é
em geral rotineiro no teste, sendo esta a maior razão do uso e disseminação da
automação dos testes de software [Molinari, 2010]. Segundo [Grahan e Fewster,1999],
existe uma diferença clara entre testes e automação de testes. No primeiro realiza-se a
tarefa de testar e na segunda, usa-se um software para imitar a interação humana com o
software a ser testado.
Sendo assim, [Pezzé e Young, 2008] afirmam que a automação pode melhorar a
eficiência de algumas atividades de qualidade e é uma necessidade para a implantação
de outras. Afirmam também, que um grau de automação não pode substituir um
processo racional e bem organizado de qualidade e que se deve investir em um
processo continuo e racional de identificação e instalação de automações visando obter
o melhor resultado á medida que a organização , o processo e a tecnologia evoluem.
O maior poder da automação de testes está na regressão, pois no momento em
que ocorre alguma mudança no software a partir do teste automatizado se é capaz
através da regressão assegurar a integridade do sistema, garantindo que aquilo que
estava funcionando, continua funcionando. A aplicação dos testes de regressão verifica
falhas introduzidas durante a evolução do software.
5. Behavior Driven Development
Behavior Driven Development (BDD) é uma técnica de desenvolvimento ágil que visa
integrar regras de negocio com linguagens de programação, criada em 2003 por Dan
North e tem se expandido bastante nos últimos anos. Possui como foco a linguagem e
interações usadas no processo de desenvolvimento de software, fazendo uso de sua
língua nativa combinadas com a linguagem ubíqua usada no processo de
desenvolvimento de software. Isso permite que os desenvolvedores foquem em por quê
o código deve ser criado, ao invés de detalhes técnicos, e minimiza traduções entre
linguagem técnica na qual o código é escrito possibilitando assim que os scripts sirvam
também como documentação.
No BDD, os testes de aceitação são descritos em linguagens naturais próximas
do domínio do negócio usando DSL (Domain Specific Language). Para testes de
aceitação usamos DSTL (Domain Specific Test Language). E se estes possuírem
formalidade suficiente podem ser interpretados e executados por uma ferramenta
especializada. Os testes descritos em linguagem natural são interpretados por
ferramentas especializadas que, por sua vez, exercitam o código/API do sistema para
demonstrar se o comportamento foi atendido.
Figura 1. Exemplificação do funcionamento da técnica BDD
Fonte:http://www.slideshare.net/cristianocaetano/tdc-2011-automaode-testes-com-bdd-e-
atdd
5. Pyccuracy
Pyccuracy é uma ferramenta Behavior-Driven Development escrita em Python usando
o Selenium, que visa tornar a escrita de testes de aceitação automatizados mais fácil. Ele
melhora a legibilidade dos testes, usando uma linguagem estruturada natural tornando
assim os scripts de testes de fácil compreensão, de modo que desenvolvedores e clientes
acabam podendo colaborar com os testes.
Pyccuracy atualmente suporta múltiplos idiomas, sendo esta uma das maiores
metas do Pyccuracy desde o primeiro lançamento, atualmente suporta
apenas Inglês e Português. Os testes desenvolvidos nesta ferramenta apresentam
características, como facilidade em se escrever e manter os testes, rápida execução e
facilidade de redimensionar os testes. A ferramenta usa expressões regulares para
processar e converter a "linguagem natural" para comandos da máquina, sem nenhum
tratamento semântico.
Um teste Pyccuracy típico seria algo como:
As a Google User
I want to search Google
So that I can test Pyccuracy
Scenario 1 - Searching for Hello
World
Given
I go to "http://www.google.com"
When
I fill "q" textbox with "Hello
World"
And I click "btnG" button and
wait
Then
I see "Hello World - Google
Search" title
Figura 2. Exemplo de testes de aceitação escrito com Pyccuracy
Fonte:https://github.com/heynemann/pyccuracy/wiki/
6. Expressões Regulares
Segundo [Isidoro, 2008], as expressões regulares (ER) são conceitos abstratos da Teoria
da Computação amplamente utilizados nas tarefas de processamento de texto e
casamento de padrão e são aplicadas em diversas áreas, tais como, biologia
computacional, processamento de sinais, recuperação de textos, reconhecimento de
escrita a mão, reconhecimento de padrões, entre outras.
Como o próprio nome diz regular vem de algo que não foge a regra, regra no
caso definida pelas expressões. Algo que é regular só retorna dois valores, verdadeiro
ou falso, não existindo o padrão de meio-termo. Sendo assim podemos fazer
verificações utilizando expressões regulares para saber se determinado texto condiz com
determinado padrão especificado anteriormente.
Entretanto o grande poder das Expressões Regulares pode custar muito caro
na performance de uma solução pois consome bastante tempo e memória, tornando a
navegação lenta, sendo ideal evitar seu uso se existirem alternativas disponíveis, ainda
mais em um contexto que envolve outros tipos de processamento como a execução de
um comando utilizando o framework pyccuracy, sem falar na restrição do vocabulário,
que limita os cenários de teste.
7. Inteligência Artificial
A inteligência artificial é o estudo de como fazer os computadores realizarem coisas
que, no momento, as pessoas fazem melhor [Rich e Knight, 1994]. Segundo [Luger,
2004], a inteligência artificial é advinda do desafio de criar máquinas que possuíssem a
capacidade de pensar. E esta seria inteligente se exibisse um comportamento similar ao
de um ser humano quando confrontado com um problema análogo [Schildt, 1989].
Com passar do tempo, enquanto explorava os mecanismos do pensamento, a
inteligência artificial tornou-se mais pragmática, usando estratégias diferentes para
resolver problemas práticos complexos que surgem na aplicação da tecnologia da
computação, pelo fato de que se referem a domínios dinâmicos e são difíceis de ser
abordados através de uma computação tradicional.
Percebeu-se também, que a inteligência é muito mais complexa para ser descrita
por uma única teoria. Em vez disso, uma constelação de teorias caracterizam o tema a
partir de diferentes níveis de abstração. Em níveis mais baixos, as redes neurais, os
algoritmos genéticos e outras formas de computação ajudam o entendimento da
adaptação, percepção, corporificação e interação com o mundo físico. Em um nível
mais abstrato, projetistas de sistemas especialistas, de agentes inteligentes, de modelos
estocásticos e de programas de compreensão de linguagem natural refletem o papel do
conhecimento e dos processos sociais na criação, transmissão e sustentação do
conhecimento.
8. Processamento de Linguagem Natural
A compreensão da linguagem natural é dita como a principal característica de um ser
que se diz inteligente, pois ela permite a comunicação entre seres da mesma espécie e
consequentemente o seu convívio como uma sociedade o que leva ao aprendizado em
conjunto. Essa característica é fundamental em seres inteligentes, pois permite um dos
fenômenos de maior complexidade que faz parte da natureza e o qual se tornou um dos
principais objetivos dentro da Inteligência Artificial que é a evolução.
A linguagem natural é uma das formas mais humanas de manifestação externa
da atividade mental [Savadovsky,1988]. No momento em que estudamos a linguagem
passamos conhecer mais o mundo. Segundo [Rich e Knight, 1994] podemos testar
nossas teorias sobre o mundo se soubermos que sustentação elas dão a nossa tentativa
de compreender a linguagem. E, se conseguirmos criar uma modelo computacional de
linguagem, teremos uma ferramenta poderosa para comunicação.
Entretanto, a compreensão da linguagem natural de forma artificial é algo que
envolve grande complexidade visto que esta compreensão não aborda somente a
transmissão das palavras e sim a interpretação de seus significados em relação a
contexto geral.
8.2. Princípios de Analisadores Morfológicos e Sintáticos
No que diz respeito à implementação de um programa de PLN é preciso analisar os
aspectos da linguagem em questão, será analisada a compreensão textual. Por tanto é
necessária a utilização de analisadores sintáticos e morfológicos para realização de
comparações com as palavras armazenadas na base de conhecimento do programa e
organizar as sentenças semanticamente de acordo com os graus de importância de cada
expressão.
Através da gramática da linguagem a ser analisada e das informações do
analisador morfológico, o analisador sintático procura construir árvores de derivação
para cada sentença, mostrando como as palavras estão relacionadas.
A análise morfológica deve identificar palavras e expressões que estejam
isoladas em uma sentença por meio de delimitadores como pontuações e espaços em
branco. Dessa forma essas palavras após serem analisadas devem ser classificadas
dentro de uma categoria gramatical. Fica claro que o emprego de um analisador
morfológico torna-se de grande importância, pois para que um programa possa
processar a linguagem natural é necessário que ele compreenda cada uma dessas
palavras.
A análise sintática depende diretamente da análise morfológica, pois ela fará
todo o processo de identificação dos principais aspectos de uma frase, tais como
identificar sujeito e predicado, complemento verbal e nominal, termos acessórios,
composição e por fim a classificação das orações. Este processo é melhor realizado
fazendo uso de expressões livres de contexto, pois são muito úteis no que tange à
descrição de gramáticas em linguagem natural. Em geral, são mais poderosas que as
regulares, permitindo a representação de linguagens com certo grau de complexidade.
O analisador semântico analisa o sentido das estruturas das palavras que foram
reagrupadas pelo analisador sintático, uma vez que o analisador morfológico permitiu
identificar estas palavras individualmente.
A análise pragmática consiste em fazer uma interpretação do todo e não mais
analisar o significado de suas partes, do ponto de vista léxico e gramatical. As ligações
anafóricas e de outros fenômenos de referência merecem resolução, comentários
sarcásticos, crenças e contextos são fatores que interferem uma resolução semântica.
9. Considerações Finais
O Pyccuracy é uma ferramenta desenvolvida para melhorar legibilidade, desempenho,
reuso e capacidade de refatoração dos testes de aceitação. Dentro da perspectiva de
processamento de linguagem natural poderia ser otimizada fazendo uso de gramáticas
livres de contexto para processar e converter a linguagem natural, isto em relação a sua
análise sintática, e adotando também, métodos de análise semântica, adquirindo assim
uma melhor capacidade de representação e aumento das possibilidades dos cenários de
teste.
10. Referências
GEORGE F. LUGER, Inteligência Artificial Estruturas e Estratégias Para a Solução de
Problemas Complexos, 4.ed. Porto Alegre: Bookmann 2004, tradução Paulo Engel.
FABIO ABREU DIAS DE OLIVEIRA, Processamento de linguagem natural:
princípios básicos e a implementação de um analisador sintático de sentenças da língua
portuguesa, UFRGS Instituto de Informática.
KOSCIANSKI, A., Soares, M. S.. Qualidade de Software. Editora Novatec, Segunda
Edição, 2007.
SAVADOVSKY, P. A construção de interpretadores para linguagem natural. Edição
EBAI, 1988.
MOLINARI, Leonardo. Gerência de Configuração - Técnicas e Práticas no
Desenvolvimento do Software, Editora Visual Books, 2007, Florianópolis, 85-7502-
210-5.
MOLINARI, Leonardo. Testes de Software - Produzindo Sistemas Melhores e Mais
Confiáveis, Editora Èrica, 2006, 3a Edição, São Paulo.
PRESSMAN, R. S. Engenharia de Software. McGraw Hill, 2002
MOLINARI, Leonardo. Teste de Software. Produzindo Sistemas Melhores e Mais
Confiáveis. 1. ed. São Paulo: Érica, 2003.
[RIC 93] RICH, E.; KNIGHT, K. Inteligência Artificial. Makron Books, 1993, 722p.
ISIDORO, C.R.G. Uma abordagem quântica para o uso de expressões regulares.
Campina Grande, 2008.
BARTIÉ, A. Garantia da Qualidade de Software. Elsevier, 2002.
MOLINARI, Leonardo. Inovação e Automação de Testes de Software. São
Paula: Editora Érica LTDA, 2010.
PEZZÉ, M.; YOUNG, M. Teste e Análise de Sofware: processos, princípios
e técnicas. Porto Alegre: Bookman, 2008.
ROCHA, A. R., MALDONADO, J. C., WEBER, K. C. Qualidade de Software
Teoria e Prática. São Paulo: Pearson, 2004.
PRESSMAN, R. S. Engenharia de Software. McGraw Hill, 2002.

Mais conteúdo relacionado

Mais procurados

Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de softwareLeonardo Melo Santos
 
Gerenciamento da Qualidade de Software 5.pptx
Gerenciamento da Qualidade de Software 5.pptxGerenciamento da Qualidade de Software 5.pptx
Gerenciamento da Qualidade de Software 5.pptxRoberto Nunes
 
Engenharia de Testes
Engenharia de TestesEngenharia de Testes
Engenharia de TestesUFPA
 
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De ProcessoUma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processocrc1404
 
Banco de questões qualidade de software
Banco de questões qualidade de softwareBanco de questões qualidade de software
Banco de questões qualidade de softwareBruno Nascimento
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareCamilo Almendra
 
Qualidade de Software
Qualidade de SoftwareQualidade de Software
Qualidade de SoftwareJoão Rolim
 
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...Luiz Ladeira
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidaderzauza
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IJoão Lourenço
 
Testes de software
Testes de softwareTestes de software
Testes de softwareteste
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareCamilo Ribeiro
 
Papéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwareCamilo Ribeiro
 
3 engenharia de software
3   engenharia de software3   engenharia de software
3 engenharia de softwareFelipe Bugov
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareAlexandreBartie
 

Mais procurados (20)

Testes de software
Testes de softwareTestes de software
Testes de software
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Gerenciamento da Qualidade de Software 5.pptx
Gerenciamento da Qualidade de Software 5.pptxGerenciamento da Qualidade de Software 5.pptx
Gerenciamento da Qualidade de Software 5.pptx
 
Engenharia de Testes
Engenharia de TestesEngenharia de Testes
Engenharia de Testes
 
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De ProcessoUma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
 
Banco de questões qualidade de software
Banco de questões qualidade de softwareBanco de questões qualidade de software
Banco de questões qualidade de software
 
Qualidade de Software
Qualidade de SoftwareQualidade de Software
Qualidade de Software
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Qualidade de Software
Qualidade de SoftwareQualidade de Software
Qualidade de Software
 
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 
Testes de software
Testes de softwareTestes de software
Testes de software
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de Software
 
Papéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de Software
 
3 engenharia de software
3   engenharia de software3   engenharia de software
3 engenharia de software
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de Software
 
Testes Funcionais
Testes FuncionaisTestes Funcionais
Testes Funcionais
 

Semelhante a NLP para Pyccuracy

UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...
UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...
UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...Fábio Pio
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
 
Trabalho qualidade de_software
Trabalho qualidade de_softwareTrabalho qualidade de_software
Trabalho qualidade de_softwarestefaniak2004
 
Introdução Qualidade de Software
Introdução Qualidade de SoftwareIntrodução Qualidade de Software
Introdução Qualidade de SoftwareWellington Oliveira
 
11 1 --teste_de_software_motivação_e_conceitos_basicos
11 1 --teste_de_software_motivação_e_conceitos_basicos11 1 --teste_de_software_motivação_e_conceitos_basicos
11 1 --teste_de_software_motivação_e_conceitos_basicosFabricio Guimaraes Soares
 
Artigo-Alex_Warmling
Artigo-Alex_WarmlingArtigo-Alex_Warmling
Artigo-Alex_WarmlingChaordic
 
Implantacao.Processo.Fabrica.SL
Implantacao.Processo.Fabrica.SLImplantacao.Processo.Fabrica.SL
Implantacao.Processo.Fabrica.SLAnnkatlover
 
Visão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKVisão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKMário Pravato Junior
 
Processos de software
Processos de softwareProcessos de software
Processos de softwareDann Volpato
 
TechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerTechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerAlan Carlos
 
XII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do MestreXII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do MestreCloves da Rocha
 
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...Vanilton Pinheiro
 
Cenartec 2014 - Teste de software, uma área, uma carreira, um novo perfil
Cenartec 2014 - Teste de software, uma área, uma carreira, um novo perfilCenartec 2014 - Teste de software, uma área, uma carreira, um novo perfil
Cenartec 2014 - Teste de software, uma área, uma carreira, um novo perfilJoão Clineu - CTFL, CSM, CSD
 
O uso de metodos ageis no desenvolvimento de software
O uso de metodos ageis no desenvolvimento de softwareO uso de metodos ageis no desenvolvimento de software
O uso de metodos ageis no desenvolvimento de softwareEverton vitor
 
Falando de Testes de Desempenho - por Evandro Grezeli
Falando de Testes de Desempenho - por Evandro GrezeliFalando de Testes de Desempenho - por Evandro Grezeli
Falando de Testes de Desempenho - por Evandro GrezeliJoao Galdino Mello de Souza
 
Cmg falando de testes de desempenho
Cmg falando de testes de desempenhoCmg falando de testes de desempenho
Cmg falando de testes de desempenhoEvandro Grezeli
 

Semelhante a NLP para Pyccuracy (20)

UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...
UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...
UM ESTUDO SOBRE ABORDAGENS DE TESTE E SUAS CONTRIBUIÇÕES PARA A QUALIDADE NO ...
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
Dba Testes Gerentes B2
Dba Testes Gerentes B2Dba Testes Gerentes B2
Dba Testes Gerentes B2
 
Trabalho qualidade de_software
Trabalho qualidade de_softwareTrabalho qualidade de_software
Trabalho qualidade de_software
 
Introdução Qualidade de Software
Introdução Qualidade de SoftwareIntrodução Qualidade de Software
Introdução Qualidade de Software
 
11 1 --teste_de_software_motivação_e_conceitos_basicos
11 1 --teste_de_software_motivação_e_conceitos_basicos11 1 --teste_de_software_motivação_e_conceitos_basicos
11 1 --teste_de_software_motivação_e_conceitos_basicos
 
Artigo-Alex_Warmling
Artigo-Alex_WarmlingArtigo-Alex_Warmling
Artigo-Alex_Warmling
 
Implantacao.Processo.Fabrica.SL
Implantacao.Processo.Fabrica.SLImplantacao.Processo.Fabrica.SL
Implantacao.Processo.Fabrica.SL
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Teste de software
Teste de software Teste de software
Teste de software
 
Visão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKVisão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOK
 
Aula 8 - Plano de Teste.pptx
Aula 8 - Plano de Teste.pptxAula 8 - Plano de Teste.pptx
Aula 8 - Plano de Teste.pptx
 
Processos de software
Processos de softwareProcessos de software
Processos de software
 
TechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerTechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test Manager
 
XII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do MestreXII Café e CODE - Provocações do Mestre
XII Café e CODE - Provocações do Mestre
 
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
 
Cenartec 2014 - Teste de software, uma área, uma carreira, um novo perfil
Cenartec 2014 - Teste de software, uma área, uma carreira, um novo perfilCenartec 2014 - Teste de software, uma área, uma carreira, um novo perfil
Cenartec 2014 - Teste de software, uma área, uma carreira, um novo perfil
 
O uso de metodos ageis no desenvolvimento de software
O uso de metodos ageis no desenvolvimento de softwareO uso de metodos ageis no desenvolvimento de software
O uso de metodos ageis no desenvolvimento de software
 
Falando de Testes de Desempenho - por Evandro Grezeli
Falando de Testes de Desempenho - por Evandro GrezeliFalando de Testes de Desempenho - por Evandro Grezeli
Falando de Testes de Desempenho - por Evandro Grezeli
 
Cmg falando de testes de desempenho
Cmg falando de testes de desempenhoCmg falando de testes de desempenho
Cmg falando de testes de desempenho
 

Mais de Laís Berlatto

Cucumber - Um breve Review
Cucumber - Um breve ReviewCucumber - Um breve Review
Cucumber - Um breve ReviewLaís Berlatto
 
Testes de usabilidade
Testes de usabilidade Testes de usabilidade
Testes de usabilidade Laís Berlatto
 
Specificationby example
Specificationby example Specificationby example
Specificationby example Laís Berlatto
 
Programação Diversitária
Programação DiversitáriaProgramação Diversitária
Programação DiversitáriaLaís Berlatto
 
Cucumber: um breve review
Cucumber: um breve reviewCucumber: um breve review
Cucumber: um breve reviewLaís Berlatto
 
Specification By Example: Estudo de caso em uma software house
Specification By Example: Estudo de caso em uma software houseSpecification By Example: Estudo de caso em uma software house
Specification By Example: Estudo de caso em uma software houseLaís Berlatto
 
Data encryption standard DES & 3DES
Data encryption standard DES & 3DESData encryption standard DES & 3DES
Data encryption standard DES & 3DESLaís Berlatto
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber FuncionaLaís Berlatto
 
Histórico da informática
Histórico da informáticaHistórico da informática
Histórico da informáticaLaís Berlatto
 
Especificações da ISO para gestão de Segurança da Informação
Especificações da ISO para gestão de Segurança da InformaçãoEspecificações da ISO para gestão de Segurança da Informação
Especificações da ISO para gestão de Segurança da InformaçãoLaís Berlatto
 
Modelos de Previsão para sistemas de turbulência
Modelos de Previsão para sistemas de turbulênciaModelos de Previsão para sistemas de turbulência
Modelos de Previsão para sistemas de turbulênciaLaís Berlatto
 

Mais de Laís Berlatto (20)

Cucumber - Um breve Review
Cucumber - Um breve ReviewCucumber - Um breve Review
Cucumber - Um breve Review
 
Testes de usabilidade
Testes de usabilidade Testes de usabilidade
Testes de usabilidade
 
Specificationby example
Specificationby example Specificationby example
Specificationby example
 
Ruby
RubyRuby
Ruby
 
E-business
E-businessE-business
E-business
 
Programação Diversitária
Programação DiversitáriaProgramação Diversitária
Programação Diversitária
 
Cucumber: um breve review
Cucumber: um breve reviewCucumber: um breve review
Cucumber: um breve review
 
Specification By Example: Estudo de caso em uma software house
Specification By Example: Estudo de caso em uma software houseSpecification By Example: Estudo de caso em uma software house
Specification By Example: Estudo de caso em uma software house
 
Bluetooth
BluetoothBluetooth
Bluetooth
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Data encryption standard DES & 3DES
Data encryption standard DES & 3DESData encryption standard DES & 3DES
Data encryption standard DES & 3DES
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Amostragem
AmostragemAmostragem
Amostragem
 
Estudo de caso
Estudo de casoEstudo de caso
Estudo de caso
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
Ética hacker
Ética hackerÉtica hacker
Ética hacker
 
Histórico da informática
Histórico da informáticaHistórico da informática
Histórico da informática
 
Especificações da ISO para gestão de Segurança da Informação
Especificações da ISO para gestão de Segurança da InformaçãoEspecificações da ISO para gestão de Segurança da Informação
Especificações da ISO para gestão de Segurança da Informação
 
Modelos de Previsão para sistemas de turbulência
Modelos de Previsão para sistemas de turbulênciaModelos de Previsão para sistemas de turbulência
Modelos de Previsão para sistemas de turbulência
 
Arm Cortex
Arm CortexArm Cortex
Arm Cortex
 

NLP para Pyccuracy

  • 1. Aplicação de técnicas de processamento de linguagem natural para ferramenta Pyccuracy Laís Berlatto ¹, Felipe Haack Schmitz¹ 1Curso de Ciência da Computação – ICEG – Universidade de Passo Fundo (UPF) Campus 1 – BR 285 – Bairro São José – 99.001-970 – Passo Fundo – RS – Brasil 104493@upf.br, 106696@upf.br Abstract: This article has as its main theme of approach two major areas of computer science which are: Software Engineering with focus in the area of Software Quality and Testing and the area of Artificial Intelligence, covering the field of Natural Language Processing. It is proposed to optimize the automation tool acceptance tests called Pyccuracy. To this end we suggest the use of natural language processing rather than the mechanism implemented in the tool to process and convert words in natural language using regular expressions Resumo. Este artigo tem como principal tema de sua abordagem duas grandes áreas da Ciência da Computação que são: a Engenharia de Software com foco na área de Qualidade e Testes de Software e a área da Inteligência Artificial, abordando o ramo de Processamento de Linguagem Natural. Propõe-se uma otimização da ferramenta de automação de testes de aceitação chamada Pyccuracy. Para tanto sugere-se o uso de processamento de linguagem natural ao invés do mecanismo implementado na ferramenta para processar e converter palavras em linguagem natural através de expressões regulares. 1. Introdução O filósofo Nietzsche, no século passado, alertava: "Com o aumento da competição, a qualidade se torna mera propaganda. Vence aquele que melhor engana". Esta receita é atrativa já que é muito simples e fácil de segui-la, entretanto, aquele que toma esse tipo de postura está fadado ao fracasso. Implantar um processo de garantia da qualidade de software não é uma opção a ser estudada, mas sim, parte de uma estratégia de sobrevivência em um mercado cada vez mais exigente. Conclui-se então, que as empresas mais competitivas são aquelas que trabalham sob a ótica da melhoria contínua dos processos para aumentar a qualidade dos métodos de desenvolvimento e, consequentemente, aumentar a qualidade do produto final. Neste contexto, devemos destacar a adoção crescente de ferramentas e técnicas para dar suporte ao processo de melhoria evolutiva, relativa a todas as atividades do ciclo de vida de desenvolvimento de um software, desde sua concepção à até sua implantação. Segundo a Borland, qualidade de software é a convergência entre requisitos completos, o código correto e o mínimo de defeitos – todos alinhados para atingir os objetivos do negócio, e a base de sustentação deste processo são os testes.
  • 2. Testes de software são elementos críticos da garantia de qualidade de software e representam a última revisão de especificação, projeto e codificação, caracterizam-se por ser o processo que executa o software com a intenção de encontrar erros [Myers, 1979]. Testar um software é uma tarefa meticulosa e bastante complexa e geralmente ela não é realizada de forma sistemática, sem nenhuma base em modelos de garantia de qualidade, muitas vezes devido a uma série de fatores como limitações de tempo, recursos e qualificação técnica dos envolvidos. Outros agravantes para a realização dessa atividade são a alta complexidade dos sistemas sendo desenvolvidos atualmente e a constante necessidade de sua rápida evolução. Dentre as diversas técnicas de teste de software destacam-se os testes funcionais que tem como objetivo medir a qualidade funcional de componentes de um sistema [Molinari, 2010], avaliando-os conforme seu comportamento externo. Quando se realiza um teste funcional está na verdade confrontando com o que se espera que o sistema vá fazer, ou seja, incluindo entrada de dados, processamento e resposta. A automação de teste de software é atualmente a principal maneira para proporcionar a entrega de produtos mais confiáveis em menor tempo [Myers 2004; Fewster 1999; Dustin 2002], e consiste em repassar para o computador tarefas de teste de software que seriam realizadas manualmente, sendo feitas por meio do uso de ferramentas de automação de teste, imitando a interação do ser humano com o software. A partir desta automação, testes de regressão são realizados para verificar se manutenções realizadas no sistema introduziram efeitos colaterais indesejáveis [Pressman 2002]. Os testes de regressão automatizados, além de diminuir drasticamente o tempo total de execução do teste, viabilizam uma cobertura que, de outra forma, não poderia ser realizada em tempo compatível com a necessidade do mercado atual. Atualmente, novos paradigmas de teste surgiram para facilitar e agilizar o ciclo de desenvolvimento de um software. Um exemplo disto é a técnica behavior driven development conhecida como BDD, que possibilita o planejamento, automação, execução e documentação dos testes de forma colaborativa. Empresas como o Yahoo Brasil adotam este tipo de técnica com o uso do framework Pyccuracy. O uso desta ferramenta e técnica propicia a escrita do teste automatizado em uma linguagem próxima da humana, com poucas palavras ubíquas facilitando a automação dos testes e os próprios scripts ficam como documentação. O pyccuracci reconhece as palavras em linguagem natural dentro de um script de teste através do uso de expressões regulares. Inteligência Artificial (IA) é um ramo da ciência da computação que se propõe a elaborar dispositivos que simulem a capacidade humana de raciocinar, perceber, tomar decisões e resolver problemas, enfim, a capacidade de ser inteligente. Para muitos pesquisadores em inteligência artificial, o processamento de linguagem natural é um dos objetivos mais cruciais da IA a ser alcançado, já que possibilita ao computador a
  • 3. compreensão direta da linguagem natural. Os obstáculos mais difíceis de transpor, nesta área, são o tamanho e a complexidade da linguagem humana [Schildt, 1989]. Entretanto, os benefícios, que uma aplicação que faça o uso de PLN possa acarretar sobrepõem-se aos desafios. A proposta deste artigo visa uma extensão, um aprimoramento da ferramenta livre Piccuraccy no que diz respeito ao reconhecimento, processamento e execução das palavras encontradas em linguagem natural nos scripts de teste, uma vez que estas são reconhecidas através do uso de expressões regulares e um vocábulo previamente definidos e sua execução através de um código-fonte fixo. Este aprimoramento consiste na substituição do uso das expressões regulares e código fixo pelo emprego de processamento de linguagem natural. 2. Qualidade de Software A busca pelo controle e garantia de qualidade é um assunto muito antigo. Egípcios a quatro mil anos atrás estabeleceram um padrão de medida de comprimento, chamado cúbito, que correspondia ao comprimento do braço do faraó reinante, com a ideia de que esta seria a medida perfeita, uma medida real. Naquela época todas as construções deviam ser realizadas utilizando o cúbito como unidade de medida. Caso houvesse um erro de medição, o responsável poderia ser punido com a morte [Juran e Gryna, 1988]. O resultado da preocupação com o rigor pode ser visto nas pirâmides, nas quais os egípcios obtiveram precisões de 0,05 % [Egyptian Organization for Standardization na Quality Control, 2005]. A história da qualidade prosseguiu com inúmeros marcos extraordinários. Fatos contemporâneos, como a criação da ABNT (Associação Brasileira de Normas Técnicas) em 1960 no Brasil e a fundação da ISO (International Standardization Organization) na mesma época, marcam o inicio de um grande movimento que tornou a qualidade hoje, como um objetivo de negócio, seja para conquistar metas como a exportação, ou para, resistir às pressões da concorrência do mercado interno. Sob a perspectiva de software, o assunto de qualidade é bastante extenso. Para cada aspecto do ciclo de vida de um produto, existem diversas técnicas, métodos e ferramentas visando apoiar o negócio. Qualidade de Software segundo a IEEE 629.12- 1990 é o grau para o qual um sistema, componente ou processo vai ao encontro dos requisitos especificados e com expectativas, ou necessidades, dos usuários ou clientes. O processo da qualidade possui três objetivos distintos: melhorar um produto de software (através da prevenção, detecção e remoção de erros), avaliar a qualidade de um produto de software (em relação a metas explicitas de qualidade) e melhorar e rentabilidade a longo prazo do processo de qualidade em si [Pezzé e Young, 2008]. Para alcançar estes objetivos a qualidade de software é apoiada sob três grandes áreas, sendo elas a gestão de configuração, gestão de requisitos e gestão de testes.
  • 4.  Gestão de Configuração: trata da gerencia, controle e registro dos artefatos que compõe o software, incluindo todo o histórico de mudança do software.  Gestão de Requisitos: trata da gerencia, controle e registros das necessidades do sistema (requisitos) e dos usuários em todos os níveis, incluindo também a rastreabilidade das necessidades e suas mudanças.  Gestão de testes: trata da gerencia, planejamento, controle e execução dos testes em todos os níveis, de modo a garantir a implementação (projeto, desenvolvimento e entrega) das necessidades especificadas. Este trabalho tem por foco a gestão de testes. 3. Testes de Software Segundo a nomenclatura da IEEE, o processo de testes consiste em operar um sistema ou componente sob condições especificadas, observando ou registrando os resultados e avaliando algum aspecto desse sistema ou componente [Paula Filho, 2009]. Conclui-se então que teste é uma atividade na qual um produto, sistema ou componente é executado sob um cenário especificado, com observação e registro dos resultados e avaliação de um ou mais aspectos. Testes são mais do que meios para detecção e correção de erros, são indicadores da qualidade de um produto. Segundo [Glass, 2003], a remoção de defeitos é a parte que mais consome tempo do ciclo de vida de um software. Portanto é importante que testes sejam realizados e de uma forma correta, sendo bem planejados e desenhados, para conseguir o melhor proveito possível dos recursos alocados para ele. Existem muitas maneiras de se testar um software. Apesar dos diversos paradigmas de desenvolvimento completamente diferentes, o objetivo principal destas técnicas continua a ser o mesmo, encontrar falhas no software. Algumas das técnicas mais conhecidas são o teste de caixa-branca e o teste de caixa-preta. O teste de caixa- branca é uma técnica de teste que usa a perspectiva interna do sistema para modelar os casos de teste uma perspectiva interna significa basicamente o código fonte, um exemplo deste tipo de teste seria o teste de sistema. Já o teste de caixa-preta serve para verificar a saída dos dados usando entradas de vários tipos, exemplo deste tipo de teste seriam os testes funcionais, foco deste trabalho. 3.1 Testes Funcionais Teste funcional é uma técnica utilizada para se projetar casos de teste nos quais o programa ou sistema são considerados como uma caixa preta e, para testá-lo, são fornecidas entradas e avaliadas as saídas geradas para verificar se estão em conformidade com os objetivos especificados [Delamaro, Maldonado e Jino, 2007].
  • 5. O teste funcional avalia o comportamento da aplicação. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido. Quanto mais entradas são fornecidas, mais rico será o teste. Numa situação ideal, todas as entradas possíveis seriam testadas, mas na ampla maioria dos casos isso é impraticável. Uma abordagem mais realista para o teste funcional é escolher um subconjunto de entradas que maximize a riqueza do teste. 3.2 Testes de aceitação O teste de aceitação é a última ação de teste antes da implantação do software e é um tipo de teste funcional. A meta do teste de aceitação é verificar se o software está pronto e pode ser usado pelos usuários finais para executar as funções e as tarefas para as quais foi criado. Este tipo de teste valida a utilidade e satisfação com o produto, sendo executado pelo grupo de testes com o envolvimento do usuário final para verificar a adequação com as necessidades do usuário [Pezzé e Young, 2008]. 4. Automação de testes O teste automatizado aumenta a produtividade e atinge em tempo menor aquilo que é em geral rotineiro no teste, sendo esta a maior razão do uso e disseminação da automação dos testes de software [Molinari, 2010]. Segundo [Grahan e Fewster,1999], existe uma diferença clara entre testes e automação de testes. No primeiro realiza-se a tarefa de testar e na segunda, usa-se um software para imitar a interação humana com o software a ser testado. Sendo assim, [Pezzé e Young, 2008] afirmam que a automação pode melhorar a eficiência de algumas atividades de qualidade e é uma necessidade para a implantação de outras. Afirmam também, que um grau de automação não pode substituir um processo racional e bem organizado de qualidade e que se deve investir em um processo continuo e racional de identificação e instalação de automações visando obter o melhor resultado á medida que a organização , o processo e a tecnologia evoluem. O maior poder da automação de testes está na regressão, pois no momento em que ocorre alguma mudança no software a partir do teste automatizado se é capaz através da regressão assegurar a integridade do sistema, garantindo que aquilo que estava funcionando, continua funcionando. A aplicação dos testes de regressão verifica falhas introduzidas durante a evolução do software. 5. Behavior Driven Development Behavior Driven Development (BDD) é uma técnica de desenvolvimento ágil que visa integrar regras de negocio com linguagens de programação, criada em 2003 por Dan North e tem se expandido bastante nos últimos anos. Possui como foco a linguagem e interações usadas no processo de desenvolvimento de software, fazendo uso de sua língua nativa combinadas com a linguagem ubíqua usada no processo de
  • 6. desenvolvimento de software. Isso permite que os desenvolvedores foquem em por quê o código deve ser criado, ao invés de detalhes técnicos, e minimiza traduções entre linguagem técnica na qual o código é escrito possibilitando assim que os scripts sirvam também como documentação. No BDD, os testes de aceitação são descritos em linguagens naturais próximas do domínio do negócio usando DSL (Domain Specific Language). Para testes de aceitação usamos DSTL (Domain Specific Test Language). E se estes possuírem formalidade suficiente podem ser interpretados e executados por uma ferramenta especializada. Os testes descritos em linguagem natural são interpretados por ferramentas especializadas que, por sua vez, exercitam o código/API do sistema para demonstrar se o comportamento foi atendido. Figura 1. Exemplificação do funcionamento da técnica BDD Fonte:http://www.slideshare.net/cristianocaetano/tdc-2011-automaode-testes-com-bdd-e- atdd 5. Pyccuracy Pyccuracy é uma ferramenta Behavior-Driven Development escrita em Python usando o Selenium, que visa tornar a escrita de testes de aceitação automatizados mais fácil. Ele melhora a legibilidade dos testes, usando uma linguagem estruturada natural tornando assim os scripts de testes de fácil compreensão, de modo que desenvolvedores e clientes acabam podendo colaborar com os testes. Pyccuracy atualmente suporta múltiplos idiomas, sendo esta uma das maiores metas do Pyccuracy desde o primeiro lançamento, atualmente suporta apenas Inglês e Português. Os testes desenvolvidos nesta ferramenta apresentam
  • 7. características, como facilidade em se escrever e manter os testes, rápida execução e facilidade de redimensionar os testes. A ferramenta usa expressões regulares para processar e converter a "linguagem natural" para comandos da máquina, sem nenhum tratamento semântico. Um teste Pyccuracy típico seria algo como: As a Google User I want to search Google So that I can test Pyccuracy Scenario 1 - Searching for Hello World Given I go to "http://www.google.com" When I fill "q" textbox with "Hello World" And I click "btnG" button and wait Then I see "Hello World - Google Search" title Figura 2. Exemplo de testes de aceitação escrito com Pyccuracy Fonte:https://github.com/heynemann/pyccuracy/wiki/ 6. Expressões Regulares Segundo [Isidoro, 2008], as expressões regulares (ER) são conceitos abstratos da Teoria da Computação amplamente utilizados nas tarefas de processamento de texto e casamento de padrão e são aplicadas em diversas áreas, tais como, biologia computacional, processamento de sinais, recuperação de textos, reconhecimento de escrita a mão, reconhecimento de padrões, entre outras. Como o próprio nome diz regular vem de algo que não foge a regra, regra no caso definida pelas expressões. Algo que é regular só retorna dois valores, verdadeiro ou falso, não existindo o padrão de meio-termo. Sendo assim podemos fazer verificações utilizando expressões regulares para saber se determinado texto condiz com determinado padrão especificado anteriormente. Entretanto o grande poder das Expressões Regulares pode custar muito caro na performance de uma solução pois consome bastante tempo e memória, tornando a navegação lenta, sendo ideal evitar seu uso se existirem alternativas disponíveis, ainda mais em um contexto que envolve outros tipos de processamento como a execução de
  • 8. um comando utilizando o framework pyccuracy, sem falar na restrição do vocabulário, que limita os cenários de teste. 7. Inteligência Artificial A inteligência artificial é o estudo de como fazer os computadores realizarem coisas que, no momento, as pessoas fazem melhor [Rich e Knight, 1994]. Segundo [Luger, 2004], a inteligência artificial é advinda do desafio de criar máquinas que possuíssem a capacidade de pensar. E esta seria inteligente se exibisse um comportamento similar ao de um ser humano quando confrontado com um problema análogo [Schildt, 1989]. Com passar do tempo, enquanto explorava os mecanismos do pensamento, a inteligência artificial tornou-se mais pragmática, usando estratégias diferentes para resolver problemas práticos complexos que surgem na aplicação da tecnologia da computação, pelo fato de que se referem a domínios dinâmicos e são difíceis de ser abordados através de uma computação tradicional. Percebeu-se também, que a inteligência é muito mais complexa para ser descrita por uma única teoria. Em vez disso, uma constelação de teorias caracterizam o tema a partir de diferentes níveis de abstração. Em níveis mais baixos, as redes neurais, os algoritmos genéticos e outras formas de computação ajudam o entendimento da adaptação, percepção, corporificação e interação com o mundo físico. Em um nível mais abstrato, projetistas de sistemas especialistas, de agentes inteligentes, de modelos estocásticos e de programas de compreensão de linguagem natural refletem o papel do conhecimento e dos processos sociais na criação, transmissão e sustentação do conhecimento. 8. Processamento de Linguagem Natural A compreensão da linguagem natural é dita como a principal característica de um ser que se diz inteligente, pois ela permite a comunicação entre seres da mesma espécie e consequentemente o seu convívio como uma sociedade o que leva ao aprendizado em conjunto. Essa característica é fundamental em seres inteligentes, pois permite um dos fenômenos de maior complexidade que faz parte da natureza e o qual se tornou um dos principais objetivos dentro da Inteligência Artificial que é a evolução. A linguagem natural é uma das formas mais humanas de manifestação externa da atividade mental [Savadovsky,1988]. No momento em que estudamos a linguagem passamos conhecer mais o mundo. Segundo [Rich e Knight, 1994] podemos testar nossas teorias sobre o mundo se soubermos que sustentação elas dão a nossa tentativa de compreender a linguagem. E, se conseguirmos criar uma modelo computacional de linguagem, teremos uma ferramenta poderosa para comunicação. Entretanto, a compreensão da linguagem natural de forma artificial é algo que envolve grande complexidade visto que esta compreensão não aborda somente a
  • 9. transmissão das palavras e sim a interpretação de seus significados em relação a contexto geral. 8.2. Princípios de Analisadores Morfológicos e Sintáticos No que diz respeito à implementação de um programa de PLN é preciso analisar os aspectos da linguagem em questão, será analisada a compreensão textual. Por tanto é necessária a utilização de analisadores sintáticos e morfológicos para realização de comparações com as palavras armazenadas na base de conhecimento do programa e organizar as sentenças semanticamente de acordo com os graus de importância de cada expressão. Através da gramática da linguagem a ser analisada e das informações do analisador morfológico, o analisador sintático procura construir árvores de derivação para cada sentença, mostrando como as palavras estão relacionadas. A análise morfológica deve identificar palavras e expressões que estejam isoladas em uma sentença por meio de delimitadores como pontuações e espaços em branco. Dessa forma essas palavras após serem analisadas devem ser classificadas dentro de uma categoria gramatical. Fica claro que o emprego de um analisador morfológico torna-se de grande importância, pois para que um programa possa processar a linguagem natural é necessário que ele compreenda cada uma dessas palavras. A análise sintática depende diretamente da análise morfológica, pois ela fará todo o processo de identificação dos principais aspectos de uma frase, tais como identificar sujeito e predicado, complemento verbal e nominal, termos acessórios, composição e por fim a classificação das orações. Este processo é melhor realizado fazendo uso de expressões livres de contexto, pois são muito úteis no que tange à descrição de gramáticas em linguagem natural. Em geral, são mais poderosas que as regulares, permitindo a representação de linguagens com certo grau de complexidade. O analisador semântico analisa o sentido das estruturas das palavras que foram reagrupadas pelo analisador sintático, uma vez que o analisador morfológico permitiu identificar estas palavras individualmente. A análise pragmática consiste em fazer uma interpretação do todo e não mais analisar o significado de suas partes, do ponto de vista léxico e gramatical. As ligações anafóricas e de outros fenômenos de referência merecem resolução, comentários sarcásticos, crenças e contextos são fatores que interferem uma resolução semântica. 9. Considerações Finais O Pyccuracy é uma ferramenta desenvolvida para melhorar legibilidade, desempenho, reuso e capacidade de refatoração dos testes de aceitação. Dentro da perspectiva de
  • 10. processamento de linguagem natural poderia ser otimizada fazendo uso de gramáticas livres de contexto para processar e converter a linguagem natural, isto em relação a sua análise sintática, e adotando também, métodos de análise semântica, adquirindo assim uma melhor capacidade de representação e aumento das possibilidades dos cenários de teste. 10. Referências GEORGE F. LUGER, Inteligência Artificial Estruturas e Estratégias Para a Solução de Problemas Complexos, 4.ed. Porto Alegre: Bookmann 2004, tradução Paulo Engel. FABIO ABREU DIAS DE OLIVEIRA, Processamento de linguagem natural: princípios básicos e a implementação de um analisador sintático de sentenças da língua portuguesa, UFRGS Instituto de Informática. KOSCIANSKI, A., Soares, M. S.. Qualidade de Software. Editora Novatec, Segunda Edição, 2007. SAVADOVSKY, P. A construção de interpretadores para linguagem natural. Edição EBAI, 1988. MOLINARI, Leonardo. Gerência de Configuração - Técnicas e Práticas no Desenvolvimento do Software, Editora Visual Books, 2007, Florianópolis, 85-7502- 210-5. MOLINARI, Leonardo. Testes de Software - Produzindo Sistemas Melhores e Mais Confiáveis, Editora Èrica, 2006, 3a Edição, São Paulo. PRESSMAN, R. S. Engenharia de Software. McGraw Hill, 2002 MOLINARI, Leonardo. Teste de Software. Produzindo Sistemas Melhores e Mais Confiáveis. 1. ed. São Paulo: Érica, 2003. [RIC 93] RICH, E.; KNIGHT, K. Inteligência Artificial. Makron Books, 1993, 722p. ISIDORO, C.R.G. Uma abordagem quântica para o uso de expressões regulares. Campina Grande, 2008. BARTIÉ, A. Garantia da Qualidade de Software. Elsevier, 2002. MOLINARI, Leonardo. Inovação e Automação de Testes de Software. São Paula: Editora Érica LTDA, 2010. PEZZÉ, M.; YOUNG, M. Teste e Análise de Sofware: processos, princípios e técnicas. Porto Alegre: Bookman, 2008.
  • 11. ROCHA, A. R., MALDONADO, J. C., WEBER, K. C. Qualidade de Software Teoria e Prática. São Paulo: Pearson, 2004. PRESSMAN, R. S. Engenharia de Software. McGraw Hill, 2002.