0% acharam este documento útil (0 voto)
24 visualizações11 páginas

Métricas de Projeto de Software e Qualidade

O documento discute métricas e indicadores para projetos de software, incluindo métricas de projeto como Fan-out e Fan-in, métricas de arquitetura como profundidade e largura, e indicadores de qualidade como o Índice de Qualidade da Estrutura de Projeto.

Enviado por

ramon ferreira
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
24 visualizações11 páginas

Métricas de Projeto de Software e Qualidade

O documento discute métricas e indicadores para projetos de software, incluindo métricas de projeto como Fan-out e Fan-in, métricas de arquitetura como profundidade e largura, e indicadores de qualidade como o Índice de Qualidade da Estrutura de Projeto.

Enviado por

ramon ferreira
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Métricas de software

Aula 3: Determinação de Ponto por Função

Introdução
Métricas para modelo de projeto;
Fan-out e Fan-in;
Conectividade;
Métricas de projeto da arquitetura;
Métricas para projeto orientado a objeto;
Acoplamento e Métricas orientadas à classe.

Esta abordagem é muito importante para determinar o tamanho do software.

Objetivos
Compreender as métricas para o modelo de projeto de acordo com os parâmetros
de dimensão do software Fan-out e Fan-in;
Entender as métricas para o modelo de projeto de acordo métricas de projeto da
arquitetura.

Contextualização
É inconcebível que o projeto de um novo avião, um novo chip de computador ou um novo
edifício comercial...

... seja conduzido sem a definição de medidas, sem determinar métricas para os vários
aspectos de qualidade e sem usá-las como indicadores para orientar a maneira pela qual o
projeto evoluirá.

E, além disso, o projeto de sistemas complexos baseados em software muitas vezes é


realizado praticamente sem nenhuma medição.

A ironia disso tudo é que as métricas de projeto para software estão disponíveis, mas a
grande maioria dos engenheiros de software continua ignorando sua existência.

As métricas de projeto para software de computador, como todas as outras métricas de


software, não são perfeitas.
Continua o debate sobre sua eficácia e a maneira pela qual deveriam ser aplicadas.

Muitos especialistas argumentam que é necessária mais experimentação para que as


medições de projeto possam ser usadas. E, além disso, projeto sem medição é uma
alternativa inaceitável.

Examinaremos a seguir algumas das métricas de projeto mais comuns para software de
computador. Cada uma delas pode proporcionar uma melhor visualização, e todas podem
ajudar o projeto a evoluir para um nível maior de qualidade.

Fan-out e Fan-in
A hierarquia de controle, também chamada estrutura de programa, representa a
organização dos módulos de programa.

Ela não representa aspectos procedimentais de software, tais como sequência dos
processos, ocorrência/ordem das decisões ou repetição de operações.

A notação mais comum para representar a hierarquia é mostrada na figura.

Notamos que profundidade e largura constituem uma indicação do número de níveis de


controle e do espaço de controle global, respectivamente.

Fan-out

É uma medida do número de módulos que são diretamente controlados por outro módulo,
isto é, o número de subordinados imediatos para aquele módulo.

Fan-in

Indica quantos módulos controlam diretamente determinado módulo, isto é, o Fan-in de um


módulo indica o número de superiores imediatos que ele possui.

Figura 1

Fonte: Elaborado pelo autor

O relacionamento de controle entre os módulos é expresso da seguinte maneira: um


módulo que controla outro é superordenado a ele e, inversamente, que um módulo
controlado por outro é subordinado ao controlador.

Na figura, o módulo X é superordenado aos módulos A, B, C. O módulo H é subordinado ao


módulo E, que é subordinado ao módulo A.
Fan-out e Fan-in: características
A hierarquia de controle também representa duas características distintas: visibilidade e
conectividade.

Visibilidade

Indica o conjunto de componentes de programas que pode ser invocado ou usado como
dados por um determinado componente.

Por exemplo, um módulo de um sistema orientado a objeto pode ter acesso a uma ampla
sucessão de objetos de dados que ele herdou, mas só faz uso de um pequeno número
desses objetos de dados.

Conectividade

Indica o conjunto de componentes que é diretamente invocado ou usado como dados por
determinado componente.

Por exemplo, um módulo que faça diretamente outro módulo iniciar a execução é
conectado a ele.

Fan-out

Deve-se ter no máximo 7 subordinados.

Fan-in

Deve-se manter alto o número de superiores. Alto Fan-in é a recompensa pelo factoring
inteligente e a remoção de módulos restritivos.

Ter uma função chamada por muitos superiores evita a necessidade de codificar a mesma
função em vários lugares. Portanto, em tempo de manutenção, a duplicidade de alteração é
eliminada.

Existem duas regras para restringir o uso de Fan-in:

Módulos com Fan-in devem ter boa coesão: funcional ou, no mínimo, comunicacional ou
sequencial.

Cada interface para um único módulo deve ter os mesmos números e tipos de parâmetros.
O exemplo a seguir contraria esta regra.

Métricas de projeto da arquitetura


As métricas de projeto da arquitetura focalizam as características da arquitetura do
programa com ênfase na estrutura arquitetônica e na eficácia dos módulos ou
componentes dentro da arquitetura.

Essas métricas são uma “caixa-preta” no sentido de que elas não requerem qualquer
conhecimento do funcionamento interno de um determinado componente de software.

Card e Glass [Car90] definem três medidas de complexidade de projeto de software:

Complexidade estrutural

Para arquiteturas hierárquicas (por exemplo, arquiteturas de chamada e retorno), a


complexidade estrutural de um módulo i é definida da seguinte maneira:
S(i) = f² out (i)

Complexidade de dados

A complexidade dos dados (data complexity) proporciona uma indicação da complexidade


na interface Interna para um módulo i e é definida como:

D(i) = v(i)/ [f out (i) + 1]

Em que v(i) é o número de variáveis de entrada e saída passadas para o do módulo i.

Complexidade de sistema

Por fim, a complexidade de sistema (system complexity) é definida como a soma da


complexidade estrutural e de dados, especificada como:

C(i) = S(i) + D(i)

Fenton [Fen91] sugere um conjunto de métricas de morfologia simples (isto é, forma) que
permite que diferentes arquiteturas de programa sejam comparadas usando uma série de
dimensões diretas. Referindo-se à arquitetura de chamada e retorno na Figura apresentada,
podem ser definidas as seguintes métricas:

Tamanho n + a

Tamanho = 19 + 24 = 43

Profundidade = caminho mais longo desde o nó raiz (topo) até o nó da folha. Logo, a
profundidade = 5

Largura = número máximo de nós em qualquer nível da arquitetura.

Logo, largura = 7

A relação arco para nó,

r = a/n

mede a densidade de conectividade da arquitetura:

r= 24/19 = 1,26.

em que n é o número de nós e a é o número de arcos.

Figura 2

Fonte: Elaborado pelo autor

Atenção!
À medida que esses valores de complexidade aumentam, a complexidade global da
arquitetura do sistema também aumenta.

Isso leva a uma maior probabilidade de que o trabalho de integração e teste também
aumente.

Indicadores de qualidade de software


A força aérea americana (U.S. Air Force Systems Command) desenvolveu um conjunto de
indicadores de qualidade de software baseados nas características de projeto mensuráveis
de um programa de computador. Usando conceitos similares àqueles propostos na norma
IEEE Std. 982.1-1988, a Força Aérea usa informação obtida do projeto de dados e arquitetural
para criar um índice de qualidade da estrutura do projeto (design structure quality index -
DSQI) que varia de 0 a 1.

Os seguintes valores devem ser apurados para calcular o DSQI:

Número total de módulos definidos na arquitetura do programa.

Número de módulos cuja função correta depende da origem dos dados de entrada ou que
produzem dados para serem usados em outro lugar (em geral, módulos de controle, entre
outros, não seriam contados como parte de S2).

Número de módulos cuja função correta depende de processamento anterior.

Número de itens de base de dados (inclui objetos dados e iodos os atributos que definem
objetos).

Número total de itens únicos de base de dados.

Número de segmentos de base de dados (diferentes registros ou objetos individuais).

Número de módulos com uma única entrada e saída (processamento de exceção não é
considerado múltipla saída).

Uma vez determinados os valores S¹ até S7, para um programa de computador podem ser
calculadosos seguintes valores intermediários:

Estrutura de programa

D¹, que é definido da sguinte maneira:

Se o projeto da arquitetura foi desenvolvido por meio de um método distinto(por exemplo,


projeto orientado a fluxo de dados (DFD) ou projeto orientado a objeto (OO), então D¹, = 1,
caso contrário D¹ = 0.)

Independência modular

D² = 1 - (S²/S¹)

Módulos não dependentes de processamento anterior

D³ = 1 - (S³/S¹)

Tamanho da base de dados

D4 = 1 - (S5/S4)

Compartilhamento da base de dados

D5 = 1 (S6/S4)
Característica de entrada/saída do módulo

D6 = 1 - (S7/S1)

Cálculo do DSQI

Com oa valores intermediários determinados, o DSQI é calculado da seguinte maneira:

DSQI = { WiDi

Em que i = 1 a 6, W¹ é o peso relativo da importância de cada um dos valores intermediários


e { w1 = 1 ( se todos dos Di tiverem o mesmo peso, então w¹ = 0,167).

Métricas para projeto orientado a objeto


Há muita coisa sobre projeto orientado a objeto que é subjetivo - um projetista experiente
“sabe” como caracterizar um sistema orientado a objeto de maneira que implemente
efetivamente os requisitos do cliente.

Mas, à medida que um modelo de projeto orientado a objeto cresce em tamanho e


complexidade, uma visão mais objetiva das características do projeto pode favorecer tanto
o projetista experiente (que obtém uma visão adicional) quanto o novato (que obtém uma
indicação da qualidade que de outra forma não estaria disponível).to2

Em um tratamento detalhado de métricas de software para sistemas orientados a objeto,


Whitmire descreve nove características distintas e mensuráveis de um projeto orientado a
objeto:

Tamanho. É definido em termos de quatro visualizações: população, volume, comprimento e


funcionalidade. População é medida tomando-se uma contagem estática das entidades
orientadas a objeto, como classes ou operações. Medidas de volume são idênticas às
medidas de população, mas são coletadas dinamicamente - em determinado instante do
tempo. Comprimento é a medida de uma cadeia de elementos de projeto interconectados
(por exemplo, a extensão de uma árvore de herança é uma medida do comprimento). As
métricas de funcionalidade proporcionam uma indicação indireta do valor fornecido ao
cliente por uma aplicação orientada a objeto.

Complexidade. Assim como o tamanho, há muitas visões diferentes da complexidade do


software. Whitmire vê a complexidade em termos de características estruturais examinando
como as classes de um projeto orientado a objeto se inter-relacionam.

Acoplamento. As conexões físicas entre elementos do projeto orientado a objeto (por


exemplo, o número de colaborações entre classes ou o número de mensagens passadas
entre objetos) representam o acoplamento em um sistema orientado a objeto.

Suficiência. Whitmire define suficiência como “o grau com o qual uma abstração possui as
características requeridas para ela, ou o grau com o qual um componente de projeto possui
características em sua abstração, do ponto de vista da aplicação corrente”. Em outras
palavras, perguntamos: “Que propriedades essa abstração (classe) precisa ter para ser útil
para mim?”. Essencialmente, um componente de projeto (por exemplo, uma classe) é
suficiente se refletir totalmente todas as propriedades do objeto de domínio da aplicação
que está modelando - isto é, que a abstração (classe) possui as características necessárias
para ele.

Totalidade. A única diferença entre totalidade e suficiência é “o conjunto de características


em relação às quais comparamos a abstração ou o componente de projeto”. A suficiência
compara a abstração do ponto de vista da aplicação corrente. A totalidade considera
múltiplos pontos de vista, formulando a pergunta: “Que propriedades são necessárias para
representar completamente o objeto de domínio do problema?”. Em virtude do critério da
totalidade considerar diferentes pontos de vista, ele tem uma implicação indireta no grau
com o qual a abstração ou o componente de projeto pode ser reutilizado.

Coesão. Assim como seu correspondente no software convencional, um componente


orientado a objeto deverá ser projetado de maneira que tenha todas as operações
funcionando em conjunto para atingir um objetivo único e bem definido. A coerência de
uma classe é determinada examinando-se o grau segundo o qual “o conjunto de
propriedades que ela possui faz parte do domínio do problema ou projeto”.

Originalidade. Uma característica similar à simplicidade, originalidade (aplicada tanto a


operações quanto a classes) é o grau segundo o qual uma operação é atômica - isto é, a
operação não pode ser construída por meio de uma sequência de outras operações
contidas dentro de uma classe que apresenta um alto grau de originalidade e encapsula
apenas operações primitivas.

Similaridade. O grau segundo o qual duas ou mais classes são similares em termos de sua
estrutura, função, comportamento ou finalidade é indicado por essa medição.

Volatilidade. Conforme já afirmamos multas vezes neste livro, podem ocorrer alterações de
projeto quando os requisitos são modificados ou quando acontecem modificações em
outras partes de um aplicativo, resultando em adaptação obrigatória do componente de
projeto em questão. A volatilidade de um componente orientado a objeto mede a
possibilidade de que uma alteração venha a ocorrer.

Métricas orientadas a classe — o conjunto de métricas CK


O que é classe?

A classe é a unidade fundamental de um sistema orientado a objeto. Portanto, medidas e


métricas para uma classe individual para a hierarquia da classe e colaborações entre
classes serão valiosas quando tivermos de avaliar qualidade de projeto orientado a objeto.

Uma classe encapsula dados e a função manipula os dados. Com frequência é o “pai” das
subclasses (às vezes chamadas de filhas) que herda seus atributos e operações. Muitas
vezes elas colaboram com outras classes. Cada uma dessas características pode ser usada
como base para a medida.

Chidamber e Kemerer propuseram um dos conjuntos mais amplamente conhecidos de


métricas de software orientado a objeto. Também chamado de conjunto de métricas CK (CK
metrics suite), os autores propuseram seis métricas de projeto baseado em classe para
sistemas orientados a objeto. Vejamos uma delas:

Métodos ponderados por classe (weighted methods per class - WMC).

Suponha que n métodos de complexidade c1,c2 ,..., cn são definidos para uma classe C. A
métrica especifica de complexidade escolhida (por exemplo, complexidade ciclomática)
deverá ser normalizada de maneira que a complexidade nominal para um método assuma
o valor 1,0.

WMC = c1

Para i = 1 a n. O número de métodos e sua complexidade são indicadores razoáveis do


trabalho necessário para implementar e testar uma classe.

Atenção!
Quanto maior for o número de métodos, mais complexa será a árvore de herança (todas as
subclasses herdam os métodos de seus pais). Por fim, conforme o número de métodos
cresce para uma dada classe, ela tende a se tornar cada vez mais específica de aplicação,
limitando assim sua potencial reutilização. Por todas essas razões, o WMC deverá ser
mantido o mais baixo possível.

Embora pudesse parecer relativamente fácil desenvolver uma contagem para o número de
métodos em uma classe, o problema é na realidade mais complexo do que parece. Deverá
ser desenvolvida uma abordagem consistente de contagem.

Atividade proposta

Discuta com seus colegas a importância da adoção de métricas no processo de projeto de


software a importância do fan-in e fan-out em uma estrutura de módulos de projeto de
software.

FAN-OUT, FAN-IN, Complexidade de dados, complexidade estrutural.

Exercícios de fixação

A estrutura de programa representa a organização de seus módulos. A profundidade e


largura da estrutura constituem uma indicação do número de níveis de controle e do
espaço de controle global, respectivamente. A medida que determina o número de
módulos que são diretamente controlados por outro módulo é denominada:

Fan-in

Fan-out

Stubb

EAP

Hierarquia

A estrutura de programa representa a organização de seus módulos. A profundidade e


largura da estrutura constituem uma indicação do número de níveis de controle e do
espaço de controle global, respectivamente. A medida que indica quantos módulos
controlam diretamente determinado módulo, isto é, indica o número de superiores
imediatos que ele possui é denominado:

Fan-in

Fan-out

Stubb

EAP

Hierarquia
A característica da hierarquia de controle da estrutura do software que indica o conjunto de
componentes que é diretamente invocado ou usado como dados por determinado
componente é denominada:

Factoring

Visibilidade

Extensão

Conectividade

Navegabilidade

No Fan-out, quantos módulos subordinados devemos ter, no máximo?

No Fan-in, quantos módulos superiores, no máximo, devemos ter?

O mínimo possível

Alto número de superiores

Em um tratamento detalhado de métricas de software para sistemas orientados a objeto,


Whitmire descreve algumas características distintas e mensuráveis de um projeto orientado
a objeto. Assinale a opção INCORRETA:

Volatilidade

Hierarquia

Similaridade

Originalidade

Coesão

As métricas de projeto focalizam as características da arquitetura do programa e são


verdadeiras “caixa-preta” no sentido de que elas não requerem qualquer conhecimento do
funcionamento interno de um determinado componente de software. São definidas três
medidas de complexidade de projeto de software:

Temporal, procedimental e casual.

Informacional, de dados e funcional.

Procedimental, funcional, hierárquico.

Estrutural, de dados e de sistema.

Lógica, funcional e de dados.

A complexidade dos dados proporciona uma indicação da complexidade na interface


interna do software para um módulo “i” e é definida como

D(i) = v(i)/[fout (i) + 1]

Onde fout (i) é o Fan-out do módulo i e v(i) é o número de variáveis de entrada e saída
passadas para o do módulo “i”.

Calcule a complexidade na interface para o módulo com um número total de variáveis 19 e


Fan-out 7.

3,45

6,70

2,37

3,98

0,37

Calcule a complexidade do módulo de um software com complexidade estrutural é 15 e


complexidade dos dados é 30.

450

0,5

45

15

Uma estrutura de software possui 15 nós e 12 arcos. Qual é o seu tamanho?

180

1,25

27

-3
Síntese
Nesta aula:

Métricas para o Modelo de Projeto;


Fan-out e Fan-in;
Conectividade;
Métricas de projeto da arquitetura;
Métricas para projeto orientado a objeto;
Acoplamento - Métricas orientadas à classe.

Próxima aula
Na próxima aula:

Tipos e técnicas de estimativa;


COCOMO ( básico, intermediário, detalhado);
COCOMO II - estimativas de prazo, de custo e de defeitos;
Método de Putnam - estudo de casos.

Referências
PRESSMAN, Roger S. Engenharia de software. 7. ed. Mc Graw Hill, 2011.

SOMMERVILLE, Ian. Engenharia de software. 8. ed. Mc Graw Hill, 2007.

PADUA Filho, Wilson de. Engenharia de software: fundamentos, métodos e padrões. 3. ed.
Rio de Janeiro: Editora LTC, 2009.

PETERS, James F. Engenharia de software. 3. ed. Campus, 2001.

VAZQUEZ, C.E. , SIMÕES,G.S., ALBERT, R.M. Análise de ponto de função medição,


estimativa e gerenciamento de projetos de software. São Paulo: Editora Érica, 2009.

Você também pode gostar