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