Definição: Os gráficos de fluxo de controle (CFGs) são usados em testes de software para descrever todos os caminhos possíveis por meio de um programa ou método, mapeando nós (blocos básicos de instruções) e bordas (transferências de controle entre nós).
Finalidade:
- Os CFGs permitem que os testadores visualizem a estrutura do código e analisem como os diferentes caminhos de um método são tratados, possibilitando uma cobertura de teste abrangente.
Exemplo: CFG para um método que calcula propriedades estatísticas (média, mediana, variação, desvio padrão) a partir de uma lista de números.
graph TD;
A(Start) --> B[Initialize sum, varsum, i to 0];
B --> C{Check if i is less than length};
C -->|True| D[Add number at index i to sum];
D --> E[Increment i];
E --> C;
C -->|False| F[Calculate mean];
F --> G[Sort numbers];
G --> H[Determine median];
H --> I{Iterate j from 0 to length for variance};
I -->|Each j| J[Update varsum with deviation at index j];
J --> K[Increment j];
K --> I;
I -->|Done| L[Compute variance];
L --> M[Compute standard deviation];
M --> N[End];
Etapas ilustradas no CFG:
- Inicialização: Comece definindo sum, varsum e contador i como zero.
- Cálculo da soma: Iterar sobre todos os elementos para calcular a soma.
- Cálculo da média: Calcule a média após sair do loop.
- Cálculo da mediana: Classificar a matriz e determinar a mediana.
- Cálculo da variância: Iterar novamente para calcular a variância com base na média.
- Desvio padrão: Calcule o desvio padrão a partir da variância.
- Fim: O processo é concluído após o cálculo de todas as propriedades estatísticas.
Relevância:
- Os CFGs fornecem um método claro e visual de rastrear as etapas computacionais envolvidas na manipulação de matrizes e na realização de cálculos estatísticos.
- Eles ajudam a identificar caminhos críticos na computação, garantindo que todos os cenários sejam testados, especialmente os loops e as execuções condicionais.
Atomic Note: Examples of Control Flow Graphs (CFGs)
Definition: Control Flow Graphs (CFGs) are used in software testing to depict all potential paths through a program or method by mapping nodes (basic blocks of statements) and edges (transfers of control between nodes).
Purpose:
- CFGs allow testers to visualize the structure of code and analyze how different paths through a method are handled, enabling comprehensive testing coverage.
Example: CFG for a method that calculates statistical properties (mean, median, variance, standard deviation) from a list of numbers.
MermaidJS Diagram of CFG for Statistical Calculations:
graph TD;
A(Start) --> B[Initialize sum, varsum, i to 0];
B --> C{Check if i is less than length};
C -->|True| D[Add number at index i to sum];
D --> E[Increment i];
E --> C;
C -->|False| F[Calculate mean];
F --> G[Sort numbers];
G --> H[Determine median];
H --> I{Iterate j from 0 to length for variance};
I -->|Each j| J[Update varsum with deviation at index j];
J --> K[Increment j];
K --> I;
I -->|Done| L[Compute variance];
L --> M[Compute standard deviation];
M --> N[End];
Steps Illustrated in CFG:
- Initialization: Start with setting sum, varsum, and counter i to zero.
- Sum Calculation: Iterate over all elements to calculate the sum.
- Mean Calculation: Compute the mean after exiting the loop.
- Median Calculation: Sort the array and determine the median.
- Variance Calculation: Iterate again to calculate the variance based on the mean.
- Standard Deviation: Compute the standard deviation from the variance.
- End: The process concludes after computing all statistical properties.
Relevance:
- CFGs provide a clear, visual method of tracing the computational steps involved in handling arrays and performing statistical calculations.
- They help identify critical paths in the computation, ensuring that all scenarios are tested, especially the loops and conditional executions.
This atomic note encapsulates how CFGs are applied in practical programming scenarios, specifically in methods handling complex calculations, to ensure thorough understanding and testing of software functionality.