Uma Abordagem Fuzzy para o Controle de Qualidade de Software

June 8, 2017 | Autor: A. Vasconcelos | Categoria: Quality Control
Share Embed


Descrição do Produto

Uma Abordagem Fuzzy para o Controle de Qualidade de Software Meuser J. S. Valença Alexandre M. L. de Vasconcelos Departamento de Informática Universidade Federal de Pernambuco Caixa Postal 7851, 50732-970, Recife, PE, Brasil {mjsv, amlv}@di.ufpe.br RESUMO Este artigo apresenta os principais conceitos da lógica fuzzy, a qual trata incertezas de uma forma matemática, e discute a sua aplicação à avaliação da qualidade de software. PALAVRAS-CHAVE: lógica fuzzy; qualidade de software.

1. Introdução A teoria do raciocínio aproximado (RA) fornece um método, baseado em subconjuntos fuzzy [3], tanto para representar como para raciocinar com informações imprecisas. As principais características da lógica fuzzy, que a diferencia das lógicas tradicionais são: ♦ Os valores verdade podem ser subconjuntos de um conjunto base T, usualmente o intervalo [0,1], e denotados por termos lingüísticos como verdadeiro, muito verdadeiro, mais ou menos verdadeiro, etc. ♦ Os predicados podem ser precisos como na lógica clássica (mortal, par, pai_de), ou imprecisos (cansado, grande, muito_mais_ pesado_ que, amigo_de). ♦ Os quantificadores podem ser de vários tipos como a maioria, muitos, vários, freqüentemente, cerca de 10, pelo menos 7. ♦ Os modificadores de predicado tais como não, muito, mais_ou_menos, extremamente, levemente, podem ser também representados. O objetivo da lógica fuzzy é fazer com que os modelos computacionais implementados estabeleçam valores intermediários para estimativas convencionais tais como: Sim/Não, Verdadeiro/Falso, Preto/Branco, etc. Desta forma, idéias tais como, bastante quente ou bastante frio podem ser formuladas matematicamente e processadas por computador. A teoria fuzzy constituí-se pois numa poderosa ferramenta para modelar problemas reais onde incertezas e imprecisões estão presentes. Esta teoria consiste numa generalização da teoria clássica dos conjuntos de tal forma que um dado elemento possua um grau de pertinência (dependência) à um dado conjunto, isto é, um valor real no intervalo [0,1]. Um grau de pertinência 1 significa que o elemento pertence totalmente ao conjunto. Se o grau é zero, o elemento não pertence ao conjunto. Graus intermediários também podem ser estabelecidos com igual facilidade. Este trabalho tem como objetivo apresentar uma proposta de aplicação da lógica fuzzy para o controle de qualidade de software, o qual tem como finalidade estabelecer uma indicação de qualidade deste em função de fatores que podem ser medidos de forma direta ou indireta[4]. Como muitos destes fatores só podem ser medidos de forma subjetiva, baseados no conhecimento de especialistas que é muitas vezes incompleto, incerto ou impreciso, a lógica fuzzy apresenta-se como uma ferramenta adequada no processo de avaliação de qualidade de software. 1

Além desta seção introdutória, o artigo divide-se em outras quatro seções. Na seção 2, faremos uma breve explanação genérica da teoria fuzzy. Na seção 3, procuraremos destacar aspectos relevantes a serem considerados sobre a qualidade de software. Na seção 4, faremos o elo de ligação entre a teoria fuzzy e qualidade de software, com um exemplo ilustrativo. Finalmente, na seção 5, apresentaremos as conclusões do trabalho. 2. Lógica Fuzzy O objetivo da lógica fuzzy é modelar a incerteza da linguagem natural, tentando adaptar para a programação de computadores uma maior semelhança com o pensamento humano. Ou seja, permitir o conceito de parcialmente verdadeiro. Para melhor entendimento, consideremos a variável denotada por febre alta. Uma pessoa com febre alta de acordo com a teoria convencional de conjuntos, seria aquela cuja temperatura estivesse no interior da figura 2.1. 38.7°C

38°C 40.1°C 39.3°C

41.4°C

42°C “Febre Alta”

37.2°C

Figura 2.1- Conjunto booleano, para febre alta

Entretanto, esta mesma variável pela teoria dos conjuntos fuzzy teria uma representação “nebulosa” como apresentada na figura 2.2. Assim, para uma dada temperatura nós podemos dizer “mais ou menos alta”. 38.7°C

38°C 40.1°C 39.3°C

41.4°C

42°C

37.2°C

Figura 2.2 - Conjunto fuzzy, para febre alta

Formalmente, um subconjunto fuzzy A, definido em um universo de discurso X é caracterizado por uma função de pertinência µ A, a qual mapea os elementos de X no intervalo [0 ,1]. µ A :X => [ 0,1] Os conjuntos fuzzy procuram representar uma variável imprecisa de forma direta, através de graus de pertinência µ(x) de cada elemento x de um conjunto fuzzy. Como exemplo, vamos supor que a variável para a qual pretendemos estabelecer uma possível função de pertinência é febre alta. Esta variável pode ser representada da seguinte forma :

2

♦ Definição discreta: µ FA(35°C) = 0 µ FA(38°C) = 0.1 µ FA(36°C) = 0 µ FA(39°C) = 0.35 µ FA(37°C) = 0 µ FA(40°C) = 0.65

µ FA(41°C) = 0.9 µ FA(42°C) = 1 µ FA(43°C) = 1

Onde : µ FA = pertinência para a variável febre alta. ♦ Definição contínua: µ(x) 1

0 36°C

37°C

38°C

39°C

40°C

41°C

42°C

Figura 2.3 – Função de pertinência para a variável febre alta

Deste modo, a classificação de uma pessoa com febre alta passa a ter uma forma contínua de representação, isto é, sem limiares artificiais. Uma variável como esta é chamada de variável lingüística, uma vez que ela define um conceito completo de nossa linguagem diária. Este conceito pode ser ampliado para um conjunto maior de variáveis lingüísticas, de tal forma que uma possível função de pertinência para o conjunto das “febres” (caracterizando uma pessoa com febre), é mostrada na figura 2.4. µ(x) 1

baixa

normal elevada

forte

temperatu

0 36°C

37°C

38°C

39°C

40°C

41°C

42°C

Figura 2.4 – Função de pertinência para a variável febre

Portanto, uma pessoa com 390 C de febre estaria caracterizada tanto com febre alta como com febre elevada, entretanto, com diferentes graus de pertinência. Na maioria das aplicações práticas, as funções de pertinência são do tipo triangulares (como em “normal”, por exemplo), trapezoidais (como em “febre alta”, por exemplo) ou gaussianas. 2.1 Etapas Básicas de um Sistema de Lógica Fuzzy

As etapas básicas de um sistema de lógica fuzzy são: • fuzzificação: consiste no estabelecimento de funções de pertinência para variáveis lingüísticas, as quais são o vocabulário de um sistema de lógica fuzzy. Ex: Distância := {longe, média, perto} • inferência fuzzy: consiste na determinação do valor de cada conseqüente das regras fuzzy. Ex: If Distância = longe AND Tempo = pequeno THEN Velocidade = alta • defuzzificação: consiste em fornecer um valor discreto que será a solução (resposta) representativa para a variável de saída. O método que tem sido mais 3

utilizado para cálculo da variável discreta é o da determinação do centro de gravidade da função composta. Matematicamente, a defuzzificação pelo centro de gravidade é representada por: z = ∑ zi µC (z) / ∑ µC (z) i i Onde: z é o valor discreto desejado; zi são os valores para cada variável lingüística e µC (z) são os respectivos graus de pertinência. Na figura 2.5, a seguir, podemos visualizar como a lógica fuzzy define a estratégia de controle no nível lingüístico. Na seção 4, estas etapas serão melhor explicadas através de um estudo de caso simplificado. Variáveis Medidas

2. inferência fuzzy

(Valores Lingüísticos)

Variáveis de Comando (Linguistic Values)

Nível Lingüístico Nível Numérico

1. Fuzzificação

3. Defuzzificação

Variáveis Medidas

Problema

(Valores Numéricos)

Variáveis de Comando (Valores Numéricos)

Figura 2.5 – Estratégia de Controle Fuzzy 2.2 Operações com Conjuntos Fuzzy

Sendo a lógica fuzzy uma generalização da lógica tradicional, todas as operações aplicadas a conjuntos tradicionais podem ser realizadas com subconjuntos fuzzy. No entanto, muitos problemas do mundo real são possíveis de serem resolvidos utilizando-se apenas os operadores básicos de união, interseção e negação. Para exemplificar, consideremos as funções de pertinência para os conjuntos A = {5,8} e B = {4}, representados na figura 2.6, e para os operadores de união e interseção, representados na figura 2.7.

Figura 2.6 – Funções de pertinência para os conjuntos A e B

O conjunto fuzzy resultante da união de dois conjuntos fuzzy A e B (A∪B), é aquele cuja função de pertinência é composta pelos valores máximos das funções de pertinência de A e B, para todos os valores pertencentes a X. UNIÃO : µA∪B = max[µA(x) , µB(x) ] A interseção (A∧B), por sua vez, resulta da inferência pelo valor mínimo. INTERSEÇÃO : µA∧B = min[µA(x) , µB(x) ] 4

Figura 2.7 – Funções de pertinência para os conjuntos A∪B e A∧B, respectivamente

De forma semelhante, funções de pertinência para conjuntos obtidos através de outros operadores são definidas. 3. Qualidade de Software A noção de qualidade de software pode ser descrita por um grupo de fatores, requisitos ou atributos, tais como: confiabilidade, eficiência, facilidade de uso, modularidade, reusabilidade, legibilidade, etc. [5, 6]. Podemos classificar estes fatores em dois tipos principais: externos e internos(Figura 3.1)[7]. Os fatores externos são percebidos tanto pelas pessoas que desenvolvem software quanto pelos usuários. Por exemplo, confiabilidade, eficiência e facilidade de uso são fatores externos. Por outro lado, os fatores internos são percebidos apenas pelas pessoas que desenvolvem software. Por exemplo, modularidade e legibilidade são fatores internos. Várias métricas foram desenvolvidas para medir os atributos ou fatores de qualidade de um dado software [8, 9, 10]. Entretanto, independentemente da métrica usada, sempre se busca os mesmos objetivos, ou seja: ♦ Melhorar o entendimento da qualidade do produto; ♦ Atestar a efetividade do processo; ♦ Melhorar a qualidade do trabalho realizado a nível de projeto. Segundo Pressman[4], os fatores que afetam a qualidade de software podem ser categorizados em dois grupos: (1) fatores que podem ser medidos diretamente (por exemplo, erros/KLOC/unidade de tempo) e (2) fatores que podem ser medidos apenas indiretamente (por exemplo, usabilidade ou manutenibilidade). Em cada caso, deve ocorrer medição. Precisamos comparar o software (documentação, programas e dados) com algum dado e chegar a uma indicação de qualidade. É óbvio que para garantirmos a qualidade total, outras dimensões da qualidade devem ser consideradas[1], tais como o custo de qualidade (custo), que inclui todos os gastos financeiros relacionados às atividades de qualidade; cumprimento do cronograma (entrega); satisfação dos funcionários que trabalham no projeto (moral); e a segurança destes (segurança). Para que seja possível controlar um processo (conjunto de causas que têm como objetivo produzir um determinado efeito, ou seja, o produto), a primeira tarefa consiste na identificação de seus clientes, os quais deverão ter suas necessidades satisfeitas. Após a definição dos clientes, o próximo passo será a identificação dos produtos que lhes serão entregues[1]. Logo após ter sido identificado o produto, deverão ser estabelecidas as características da qualidade deste produto que serão necessárias ao cliente. Para a garantia da satisfação do cliente será preciso transformar estas características em grandezas mensuráveis, as quais são denominadas itens de controle. 5

Um processo é então gerenciado por meio de seus itens de controle, os quais são acompanhados periodicamente para que seja possível detectar eventuais resultados indesejáveis do processo. As principais causas que afetam um determinado item de controle de um processo, e que podem ser medidas e controladas, são denominadas itens de verificação. Um processo de software se enquadra completamente nos conceitos acima apresentados. A análise de requisitos engloba, por exemplo, a definição dos clientes, identificação dos produtos que serão entregues, etc. Os itens de controle para gerência do processo de software são o conjunto de atributos ou fatores de qualidades definidos na análise de requisitos. Os itens de verificação são representados pelas métricas de qualidade que fornecem uma indicação de qualidade de alguma representação do software. 4. Aplicação da Lógica Fuzzy à Qualidade de Software Uma metodologia para avaliação de software tem por finalidade estimar a sua qualidade, por meio de um conjunto básico de atributos ou fatores, que representem seus aspectos mais importantes. Entretanto, para avaliação da qualidade de um dado software além de definir os atributos que determinam esta qualidade, faz-se necessário controlar seu processo de desenvolvimento. De uma maneira geral todo este processo está condicionalmente baseado em seres humanos, que de maneira geral apresentam subjetividade e imprecisão quando da definição de um dado problema, daí a idéia de se utilizar lógica fuzzy com este objetivo. A seguir faremos uma explanação sobre os estágios da lógica fuzzy aplicada em qualidade de software, através de um exemplo ilustrativo. Utilizamos o software FCM151(Fuzzy Control Manager)[2], como ferramenta para nos auxiliar no estabelecimento do sistema fuzzy para o nosso exemplo, uma vez que tal software fornece todos os gráficos necessários para um bom entendimento do problema. 4.1 Fuzzificação

Nesta primeira fase nós precisamos definir, para o produto de software em análise, dentro de seu domínio de aplicação, quais os atributos que determinam sua qualidade. Uma vez definidos estes atributos, associam-se a estes os termos lingüísticos que melhor os definem, de tal forma que se possa estabelecer (com o auxílio de especialistas) sua função de pertinência. No caso de atributos de qualidade que podem ser medidos, pode-se utilizar características estatísticas como média e desvio padrão apurados de uma amostra de atributos. Consideremos como exemplo ilustrativo apenas os seguintes atributos de qualidade: Confiabilidade e Reusabilidade (figura 4.1).

Figura 4.1 – Atributos de qualidade considerados

No caso do atributo confiabilidade, vamos supor que dispomos de informações estatísticas, por exemplo média de 30 horas entre falhas e desvio padrão de 5 horas entre 6

falhas. Vamos considerar como variáveis lingüísticas os termos pequena, média e grande. A função de pertinência para a variável média poderia ser traçada como a média ± 1 desvio padrão, ou seja, a função de pertinência seria 1 para o valor 30; o valor 35, à direita, teria pertinência 0; e o valor 25, à esquerda, teria também pertinência 0, conforme a figura 4.2. A variável pequena poderia ser determinada como tendo uma pertinência de zero para o valor 30 e de 1 para o valor 25. Da mesma forma a variável grande teria uma pertinência de zero para o valor 30 e de 1 para o valor 35. Desta forma podemos facilmente construir, pelo traçado de retas, funções triangulares de pertinência para todas as variáveis lingüísticas. Confiabilidade

Pertinência

1 0,8 0,6 0,4 0,2 0

25

30

35

Tempo entre falhas pequena média (horas) grande

Figura 4.2 – Função de pertinência para confiabilidade

O atributo reusabilidade poderia ser caracterizado por termos lingüísticos do tipo: baixa, média, alta, etc. Para este atributo, vamos considerar uma nota entre 0 e 100% fornecida por especialistas. A figura 4.3 mostra a função de pertinência para reusabilidade, representada na ferramenta FCM151.

Figura 4.3 – Função de pertinência para o atributo reusabilidade

Como um sistema fuzzy é formado pela agregação de um conjunto de regras de inferência que realizam um mapeamento de regiões no espaço das entradas para regiões no espaço das saídas, é necessário também definir uma função fuzzy de agregação para representar a variável de saída que será responsável pelo controle e avaliação da qualidade do software. Esta função de saída pode ser estabelecida por especialistas e/ou utilizando-se, quando possível, funções já existentes para avaliações, como os pesos/notas já utilizados por outras técnicas de avaliação de qualidade de software. Uma função simples para avaliar o padrão de qualidade de um dado software poderia ser um conjunto referencial com cinco termos lingüísticos, como apresentado na tabela 1 abaixo.

7

Nota(%) 100 75 50 25 0

Símbolo O B M F MF

Variável lingüística Ótima Boa Média Fraca Muito Fraca

Tabela 1 – Função de pertinência para avaliar a qualidade do software

A representação gráfica da função de pertinência para avaliar a qualidade do software está na figura 4.4:

Figura 4.4 – Função de pertinência para o atributo Qualidade 4.2 Inferência

Através de operadores lógicos E e OU, ou de implicações da forma Se... Então, as proposições fuzzy resultantes podem ser descritas em termos de regras fuzzy. Assim a qualidade de um software será avaliada pela inferência e composição de atributos simples ou compostos, como por exemplo: Regra 1: Se Confiabilidade boa (CB) E Reusabilidade boa (RB) Então Qualidade boa (QB) Regra 2: Se Confiabilidade média(CM) E Reusabilidade média(RM) Então Qualidade média (QM) Cada medida dos atributos Confiabilidade e Reusabilidade, após fuzzificada, é comparada com os antecedentes de todas as regras fuzzy. Esta comparação é realizada aplicando-se o operador interseção entre os conjuntos representativos da medida do atributo e do antecedente de cada regra. Este processo resulta no nível de satisfação que cada medida apresenta para cada regra. Regra 1: µ1 = µCB(x) ∧ µRB(y) Regra 2: µ2 = µCM(x) ∧ µRM(y) A saída de cada regra é um conjunto fuzzy, que é calculado usando a função de implicação Min (∧). Regra 1: µQB1 (z) = Min [µ1 , µQB1(z)] Regra 2: µQB2 (z) = Min [µ2 , µQB2(z)]

8

No nosso exemplo consideremos que as regras estabelecidas pelos especialistas, são da seguinte forma: SE Confiabilidade pequena SE Confiabilidade pequena SE Confiabilidade pequena SE Confiabilidade média SE Confiabilidade média SE Confiabilidade média SE Confiabilidade grande SE Confiabilidade grande SE Confiabilidade grande

e Reusabilidade baixa então qualidade muito fraca e Reusabilidade média então qualidade fraca e Reusabilidade alta então qualidade fraca e Reusabilidade baixa então qualidade fraca e Reusabilidade média então qualidade média e Reusabilidade alta então qualidade boa e Reusabilidade alta então qualidade ótima e Reusabilidade média então qualidade boa e Reusabilidade baixa então qualidade média

Uma vez tendo-se o sistema fuzzy completo (funções de pertinência e regras definidos), podemos realizar a avaliação de um dado software, em função de seus atributos avaliados nas referidas escalas. Vamos supor que um dado software no mesmo domínio de aplicação fornece os valores de 30 horas entre falhas e 60%, para a confiabilidade e reusabilidade respectivamente. O valor de 30 horas entre falhas, ver figura 4.2, está contido tanto no conjunto de média quanto de grande confiabilidade, com diferentes pertinências. Por outro lado o valor de 60% para a reusabilidade está contido tanto no conjunto de média quanto de alta, ver figura 4.3, com diferentes graus de pertinência. A combinação destes valores faz com que sejam disparadas as quatro regras em negrito apresentadas acima. Após termos realizado a inferência, para todos os atributos de entrada, isto é, a propagação de todos os valores verdade através das regras fuzzy, faz-se necessário a soma lógica de todos os conjuntos fuzzy gerados para produzir o conjunto fuzzy de saída composto. Utiliza-se portanto o conjunto união para o resultado das regras 1 e 2. µQB (z) = Max [µQB1(z) , µQB2(z)] Neste exemplo, a composição das quatro regras resulta no conjunto fuzzy apresentado na figura 4.5.

Figura 4.5 – Resultado para o atributo Qualidade 4.3 Defuzzificação

O último passo consiste na defuzzificação, onde o conjunto fuzzy é então convertido em um número real. Na nossa análise este valor seria representativo da qualidade do software. Usando-se o método do centro de gravidade, este valor discreto é apresentado na janela da figura 4.5 e corresponde a 69%, o qual está caracterizado pela seta na vertical.

9

Podemos verificar que o valor de 69% está contido tanto no conjunto de qualidade média como no conjunto de qualidade boa, com diferentes graus de pertinência. Portanto este software teria uma nota 69%, sendo que uma representação precisa pode ser feita através da notação valor/conjunto. Neste caso, esta nota de 69% caracterizaria o software como tendo uma qualidade de 0,75/bom + 0,25/médio. 5. Conclusão A teoria do raciocínio aproximado oferece um método baseado na teoria de subconjuntos fuzzy, para representar e raciocinar com informações imprecisas. Neste trabalho, apresentamos uma abordagem fuzzy para avaliar a qualidade de software. Para a implementação deste sistema faz-se necessário todos os cuidados de um sistema especialista tradicional. Dentre estes cuidados destacam-se: escolha adequada dos atributos de qualidade a considerar, escolha dos especialistas e aquisição do seu conhecimento, bem como a realização de teste off-line. Este teste off-line é fundamental e consiste no primeiro passo de verificação do projeto de lógica fuzzy, de tal forma que nesta etapa são realizadas as seguintes atividades: ♦ Verificação de quais regras fuzzy estão faltando, sobrando, ou são contraditórias? ♦ Refinamento das variáveis lingüísticas e regras fuzzy usando técnicas de processo de simulação. ♦ Otimização do sistema de lógica fuzzy usando processamento real de dados. Procuramos mostrar como a lógica fuzzy permite tratar os atributos de qualidade de software, podendo representar tanto aqueles que são medidos diretamente como subjetivamente, através de funções de pertinência. Apresentamos também como estes atributos de qualidade podem ser agregados de tal forma que possamos chegar a uma avaliação quantitativa da qualidade de software. O interessante desta proposta é o fato da lógica fuzzy ser uma metodologia científica, com sólida básica matemática para tratar variáveis que não são definidas precisamente, como é o caso de vários atributos de qualidade utilizados como métrica de avaliação da qualidade de software. Finalmente é importante ressaltar que, mesmo sendo as funções de pertinência, bem como as regras estabelecidas por uma aproximação, às vezes grosseira da realidade, os resultados obtidos, apesar de não terem sentido como valor absoluto, servem como elemento de comparação, uma vez que sejam mantidas todas as características do sistema.

10

Referências Bibliográficas [1] Campos, V. F., Controle da Qualidade Total (no estilo japonês), Fundação Christiano Ottoni, Universidade Federal de Minas Gerais, Belo Horizonte. 1992. [2] Fuzzy, C. M., The Fuzzy Control Manager, Programa Versão 1.5 Demo, TransferTech Gmbh, Alemanha. 1996. [3] Kosko, Neural Networks and Fuzzy Systems — a Dynamical Systems Approach, Prentice Hall, ISBN 0136123341. [4] Pressman, R. S., Engenharia de Software, Makron Books, São Paulo, 1995. [5] ISO/IEC 12119, Information Technology – Software Packages – Quality Requirements and Testing, 1994. [6] ISO/IEC 9126, Information Technology – Software Product Evaluation – Quality Characterisitics and Guidelines for their Use, 1991. [7] Meyer, B., Object-oriented Software Construction, Prentice Hall Intl., 1988. [8] Carol A. Dekkers, Software Measurement Reality versus Perception, IT Metrics Strategies Vol. II, Nº 9, 1996. [9] Carol A. Dekkers, Software Measurement won’t sell it self – Recommendations to gain participation from your developers. IT Metrics Strategies Vol. III, Nº 12, 1997. [10] IFPUG, Guidelines to Software Measurement, Release 1.1, International Function Point Users Group, 1996.

11

Lihat lebih banyak...

Comentários

Copyright © 2017 DADOSPDF Inc.