Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Aula 1: Introdução à Engenharia de Software Baseada em Busca (SBSE)

Seção 1: Abertura e Engajamento

1.1. Problema Motivador

Imagine que você é um engenheiro de software trabalhando em uma empresa de desenvolvimento de aplicativos móveis. Sua equipe precisa criar uma suite de testes para um novo aplicativo bancário que possui milhares de linhas de código, dezenas de classes e centenas de métodos. Manualmente, seria necessário escrever milhares de casos de teste, um processo que levaria meses e ainda assim poderia deixar partes críticas do código sem cobertura.

Agora considere outro cenário: você precisa refatorar um sistema legado com mais de 50.000 linhas de código, movendo métodos entre classes para melhorar a coesão e reduzir o acoplamento. Existem literalmente milhões de combinações possíveis de onde cada método poderia estar localizado. Como encontrar a melhor configuração?

Estes são exemplos típicos de problemas em engenharia de software que possuem características peculiares: um espaço de busca imenso (muitas soluções possíveis), múltiplos objetivos conflitantes (cobertura vs. tempo de execução, coesão vs. simplicidade), e a necessidade de encontrar soluções “boas o suficiente” em tempo razoável, ao invés de soluções perfeitas que podem nunca ser encontradas.

1.2. Objetivos deste Capítulo

Ao final desta aula, você será capaz de:

Seção 2: Fundamentos Teóricos

2.1. O que é Engenharia de Software Baseada em Busca (SBSE)?

Intuição Inicial: Pense na SBSE como um “GPS inteligente” para problemas de engenharia de software. Assim como um GPS encontra a melhor rota entre dois pontos considerando múltiplos fatores (distância, trânsito, pedágios), a SBSE usa algoritmos de busca para encontrar as melhores soluções para problemas complexos de software, considerando múltiplos critérios simultaneamente.

Definição Formal: Search-Based Software Engineering (SBSE) é a aplicação de técnicas de otimização e algoritmos de busca para resolver problemas de engenharia de software. Foi formalmente definida por Mark Harman em 2001 como uma abordagem que reformula problemas de engenharia de software como problemas de otimização.

O que é Otimização? Otimização é o processo de encontrar uma ou mais soluções válidas para um problema a partir de um conjunto de soluções possíveis, levando em consideração restrições e objetivos. Envolve a identificação dos valores ideais (ou ótimos) de uma ou mais variáveis, geralmente minimizando ou maximizando uma função objetivo.

2.2. Por que SBSE Funciona para Problemas de Software?

Problemas de engenharia de software frequentemente compartilham características que os tornam ideais para técnicas de busca:

2.3. A Evolução Histórica da SBSE

PeríodoMarcoContribuição
1992Primeiros trabalhosUso de algoritmos genéticos para teste de software
2001Marco FundamentalMark Harman cunha o termo “SBSE”
2004-2010ExpansãoAplicação em refatoração, design, manutenção
2010-2015MaturidadeFerramentas industriais, conferências especializadas
2015-PresenteDiversificaçãoML/IA híbrido, DevOps, arquiteturas modernas

2.4. Componentes Essenciais de uma Abordagem SBSE

Toda solução SBSE possui três componentes fundamentais:

  1. Representação da Solução: Como codificar uma solução candidata

  2. Função de Fitness: Como avaliar a qualidade de uma solução

  3. Algoritmo de Busca: Como navegar pelo espaço de soluções

Seção 3: Exemplo Ilustrativo

3.1. Caso Prático: Geração Automática de Dados de Teste

Vamos illustrar os conceitos com um exemplo concreto e simplificado:

Problema: Gerar dados de teste para cobrir todos os caminhos de execução do seguinte método Java:

public class TriangleClassifier {
    public static String classify(int a, int b, int c) {
        if (a <= 0 || b <= 0 || c <= 0) {
            return "Invalid";
        }
        if (a + b <= c || a + c <= b || b + c <= a) {
            return "Not a triangle";
        }
        if (a == b && b == c) {
            return "Equilateral";
        }
        if (a == b || b == c || a == c) {
            return "Isosceles";
        }
        return "Scalene";
    }
}

Abordagem SBSE:

  1. Representação: Cada solução é um trio de inteiros (a, b, c)

  2. Função de Fitness: Número de caminhos de execução cobertos

  3. Algoritmo: Algoritmo Genético simples

Pseudocódigo do Processo:

# População inicial: conjuntos aleatórios de (a, b, c)
população = gerar_população_aleatória(tamanho=50)

for geração in range(100):
    # Avaliar cada indivíduo
    for indivíduo in população:
        fitness[indivíduo] = contar_caminhos_cobertos(indivíduo)
    
    # Seleção dos melhores
    pais = selecionar_melhores(população, fitness)
    
    # Gerar nova população
    nova_população = []
    for i in range(tamanho_população):
        pai1, pai2 = escolher_pais_aleatórios(pais)
        filho = crossover(pai1, pai2)
        filho = mutação(filho, taxa=0.1)
        nova_população.append(filho)
    
    população = nova_população

# Resultado: conjunto de dados de teste que maximiza cobertura

Resultado Esperado: Após 100 gerações, o algoritmo encontra conjuntos como:

Cobrindo todos os 5 caminhos de execução automaticamente!

Seção 4: Análise e Tópicos Avançados

4.1. Taxonomia de Aplicações em SBSE

A SBSE tem sido aplicada em praticamente todas as fases do ciclo de vida do software:

4.2. Desafios e Limitações

Apesar dos sucessos, a SBSE enfrenta desafios importantes:

DesafioDescriçãoEstratégias de Mitigação
EscalabilidadeProblemas reais têm espaços de busca imensosTécnicas híbridas, paralelização
RepresentaçãoDificuldade em codificar soluções complexasCo-evolução, representações multi-nível
Fitness FunctionsMétricas podem não capturar qualidade realValidação empírica, múltiplos objetivos
InterpretabilidadeSoluções podem ser difíceis de entenderVisualização, explicabilidade

4.3. Estado da Arte e Tendências Emergentes

Direções Atuais de Pesquisa:

  1. Hibridização com ML/IA: Combinar SBSE com aprendizado de máquina

  2. SBSE para DevOps: Otimização de pipelines CI/CD

  3. Multi-objetivo Avançado: Técnicas como NSGA-III para 4+ objetivos

  4. SBSE Interativa: Incorporar feedback do desenvolvedor no loop de otimização

4.4. Métricas de Sucesso em SBSE

Para avaliar o sucesso de uma abordagem SBSE, consideramos:

Seção 5: Síntese e Próximos Passos

5.1. Resumo do Capítulo

5.2. Ponte e Briefing para o Workshop Prático (.ipynb)

Teaser para o Aluno: Agora que você compreende os fundamentos da SBSE, é hora de colocar a mão na massa! No laboratório prático, você implementará do zero um sistema completo de geração automática de dados de teste usando algoritmo genético. Você verá como os conceitos teóricos se traduzem em código Python e experimentará como pequenas mudanças nos parâmetros podem impactar drasticamente os resultados.

Briefing para o Agente de Prática:

O notebook deve implementar um sistema completo de geração de dados de teste com as seguintes especificações técnicas:

  1. Problema-alvo: Implementar a classe TriangleClassifier apresentada na teoria e criar um sistema que gere automaticamente dados de teste para maximizar cobertura de caminhos

  2. Componentes a implementar:

    • Classe Individual para representar soluções (trios de inteiros)

    • Função de fitness que execute o código e conte caminhos cobertos

    • Algoritmo genético com operadores de seleção, crossover e mutação

    • Sistema de tracking de progresso e visualização de resultados

  3. Estrutura do laboratório:

    • Parte 1: Implementação da função-alvo e análise manual dos caminhos

    • Parte 2: Desenvolvimento do algoritmo genético passo a passo

    • Parte 3: Experimentação com diferentes parâmetros (população, mutação, gerações)

    • Parte 4: Análise comparativa entre busca aleatória vs. algoritmo genético

    • Parte 5: Visualização da evolução da população e convergência

  4. Resultados esperados: O aluno deve conseguir gerar automaticamente um conjunto de dados de teste que cubra todos os 5 caminhos de execução do TriangleClassifier, observando a superioridade do algoritmo genético sobre busca aleatória

  5. Elementos pedagógicos: Incluir células interativas para modificação de parâmetros, visualizações da evolução da fitness ao longo das gerações, e seções de análise crítica dos resultados obtidos

O foco deve ser na experiência prática completa - desde a implementação até a análise de resultados - demonstrando como SBSE resolve problemas reais de forma automatizada e eficiente.