Complexidade de design de software

O termo complexidade significa estado de eventos ou coisas, que têm vários links interconectados e estruturas altamente complicadas. Na programação de software, à medida que o design do software é realizado, o número de elementos e suas interconexões gradualmente tornam-se enormes, o que se torna muito difícil de entender imediatamente.

A complexidade do projeto de software é difícil de avaliar sem o uso de métricas e medidas de complexidade. Vejamos três medidas importantes de complexidade de software.

Medidas de complexidade de Halstead

Em 1977, o Sr. Maurice Howard Halstead introduziu métricas para medir a complexidade do software. As métricas da Halstead dependem da implementação real do programa e de suas medidas, que são calculadas diretamente dos operadores e operandos do código-fonte, de maneira estática. Ele permite avaliar o tempo de teste, vocabulário, tamanho, dificuldade, erros e esforços para o código-fonte C / C ++ / Java.

De acordo com Halstead, “Um programa de computador é uma implementação de um algoritmo considerado uma coleção de tokens que podem ser classificados como operadores ou operandos”. As métricas Halstead consideram um programa como uma sequência de operadores e seus operandos associados.

Ele define vários indicadores para verificar a complexidade do módulo.

Parâmetro Significado
n1 Número de operadores únicos
n2 Número de operandos únicos
N1 Número de ocorrência total de operadores
N2 Número de ocorrência total de operandos

Quando selecionamos o arquivo de origem para visualizar seus detalhes de complexidade no Metric Viewer, o seguinte resultado é visto no Metric Report:

Métrica Significado Representação Matemática
n Vocabulário n1 + n2
N Tamanho N1 + N2
V Volume Comprimento * Log2 Vocabulário
D Dificuldade (n1 / 2) * (N1 / n2)
E Esforços Dificuldade * Volume
B Erros Volume / 3000
T Tempo de teste Tempo = Esforços / S, onde S = 18 segundos.

Medidas de complexidade ciclomática

Cada programa inclui instruções a serem executadas para realizar alguma tarefa e outras instruções de tomada de decisão que decidem quais instruções precisam ser executadas. Essas construções de tomada de decisão mudam o fluxo do programa.

Se compararmos dois programas do mesmo tamanho, aquele com mais instruções de tomada de decisão será mais complexo, pois o controle do programa salta com frequência.

McCabe, em 1976, propôs Medida de Complexidade Ciclomática para quantificar a complexidade de um determinado software. É um modelo orientado por gráficos que se baseia em construções de programas de tomada de decisão, como instruções if-else, do-while, repeat-until, switch-case e goto.

Processo para fazer o gráfico de controle de fluxo:

  • Quebre o programa em blocos menores, delimitados por construções de tomada de decisão.
  • Crie nós que representam cada um desses nós.
  • Conecte os nós da seguinte maneira:
    • Se o controle pode ramificar do bloco i para o bloco j

      Desenhe um arco

    • Do nó de saída para o nó de entrada

      Desenhe um arco.

Para calcular a complexidade ciclomática de um módulo de programa, usamos a fórmula -

V(G) = e – n + 2

Where
e is total number of edges
n is total number of nodes

A complexidade ciclomática do módulo acima é

e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
                      = 4

De acordo com P. Jorgensen, a Complexidade Ciclomática de um módulo não deve exceder 10.

Ponto de Função

É amplamente utilizado para medir o tamanho do software. O Ponto de Função concentra-se na funcionalidade fornecida pelo sistema. Recursos e funcionalidade do sistema são usados ​​para medir a complexidade do software.

O ponto de função conta com cinco parâmetros, nomeados como Entrada Externa, Saída Externa, Arquivos Internos Lógicos, Arquivos de Interface Externa e Consulta Externa. Para considerar a complexidade do software, cada parâmetro é categorizado como simples, médio ou complexo.

Vamos ver os parâmetros do ponto de função:

Entrada externa

Cada entrada exclusiva para o sistema, de fora, é considerada uma entrada externa. A exclusividade da entrada é medida, já que duas entradas não devem ter os mesmos formatos. Essas entradas podem ser dados ou parâmetros de controle.

  • Simple - se a contagem de entrada for baixa e afetar menos arquivos internos

  • Complex - se a contagem de entrada for alta e afetar mais arquivos internos

  • Average - entre o simples e o complexo.

Saída Externa

Todos os tipos de saída fornecidos pelo sistema são contados nesta categoria. A saída é considerada única se seu formato de saída e / ou processamento forem únicos.

  • Simple - se a contagem de saída for baixa

  • Complex - se a contagem de saída for alta

  • Average - entre o simples e o complexo.

Arquivos internos lógicos

Todo sistema de software mantém arquivos internos para manter suas informações funcionais e funcionar adequadamente. Esses arquivos contêm dados lógicos do sistema. Esses dados lógicos podem conter dados funcionais e dados de controle.

  • Simple - se o número de tipos de registro for baixo

  • Complex - se o número de tipos de registro for alto

  • Average - entre o simples e o complexo.

Arquivos de interface externa

O sistema de software pode precisar compartilhar seus arquivos com algum software externo ou pode precisar passar o arquivo para processamento ou como parâmetro para alguma função. Todos esses arquivos são contados como arquivos de interface externa.

  • Simple - se o número de tipos de registro no arquivo compartilhado for baixo

  • Complex - se o número de tipos de registro no arquivo compartilhado for alto

  • Average - entre o simples e o complexo.

Inquérito externo

Uma consulta é uma combinação de entrada e saída, em que o usuário envia alguns dados para consulta como entrada e o sistema responde ao usuário com a saída da consulta processada. A complexidade de uma consulta é mais do que entrada externa e saída externa. A consulta é considerada única se sua entrada e saída forem únicas em termos de formato e dados.

  • Simple - se a consulta precisa de baixo processamento e produz uma pequena quantidade de dados de saída

  • Complex - se a consulta precisa de um alto processo e produz uma grande quantidade de dados de saída

  • Average - entre o simples e o complexo.

Cada um desses parâmetros no sistema é ponderado de acordo com sua classe e complexidade. A tabela abaixo menciona a ponderação atribuída a cada parâmetro:

Parâmetro Simples Média Complexo
Entradas 3 4 6
Saídas 4 5 7
Inquérito 3 4 6
arquivos 7 10 15
Interfaces 5 7 10

A tabela acima produz pontos de função brutos. Esses pontos de função são ajustados de acordo com a complexidade do ambiente. O sistema é descrito usando quatorze características diferentes:

  • Comunicações de dados
  • Processo de distribuição
  • Objetivos de desempenho
  • Carga de configuração de operação
  • Taxa de transação
  • Entrada de dados online,
  • Eficiência do usuário final
  • Atualização online
  • Lógica de processamento complexa
  • Re-usability
  • Facilidade de instalação
  • Facilidade operacional
  • Vários sites
  • Desejo de facilitar mudanças

Esses fatores de características são avaliados de 0 a 5, conforme mencionado abaixo:

  • Sem influência
  • Incidental
  • Moderate
  • Average
  • Significant
  • Essential

Todas as classificações são então somadas como N. O valor de N varia de 0 a 70 (14 tipos de características x 5 tipos de classificações). É usado para calcular os Fatores de Ajuste de Complexidade (CAF), usando as seguintes fórmulas:

CAF = 0.65 + 0.01N

Então,

Delivered Function Points (FP)= CAF x Raw FP

Este PF pode então ser usado em várias métricas, como:

    Cost = $ / FP

    Quality = Erros / FP

    Productivity = FP / pessoa-mês