Aula 19 - Estimativa de Esforço em Software e Métricas de Pontos de Função 📐
Objetivo Pedagógico
Objetivo: Aplicar métodos científicos de medição e estimativa de software utilizando Análise de Pontos de Função (APF - IFPUG), Funções de Dados (ALI/AIE), Funções de Transação (EE/SE/CE) e modelos empíricos como COCOMO II.
📑 1. Fundamentos Teóricos & Análise Técnica
Estimar projetos de software utilizando linhas de código (LOC) é falho e distorcido, pois linguagens modernas exigem muito menos linhas que linguagens legadas para expressar a mesma funcionalidade de negócio.
A Análise de Pontos de Função (APF), normatizada pela ISO/IEC 20926 e mantida pelo IFPUG (International Function Point Users Group), mede o software a partir da perspectiva do usuário, mensurando o tamanho funcional de forma independente da tecnologia: 1. Funções de Dados (Armazenamento Lógico): - Arquivo Lógico Interno (ALI): Grupo de dados logicamente relacionados mantido internamente dentro da fronteira da aplicação (ex: tabelas de banco de dados gerenciadas). - Arquivo de Interface Externa (AIE): Dados referenciados pelo sistema, mas cuja manutenção reside em outra aplicação externa (ex: consulta a API de CEP dos Correios ou catálogo do ERP corporativo). 2. Funções de Transação (Processamento Dinâmico): - Entrada Externa (EE): Processo elementar que processa dados provenientes de fora da fronteira e atualiza um ALI (ex: cadastrar cliente, alterar pedido). - Saída Externa (SE): Processo elementar que envia dados para fora da fronteira e contém lógica de processamento matemático, relatórios sumarizados ou cálculos derivados. - Consulta Externa (CE): Processo elementar que envia dados para fora sem realizar cálculos ou alterar o estado do sistema (ex: listagem simples de clientes com filtro). 3. Complexidade Funcional e Cálculo Final: - Cada função é classificada em Baixa, Média ou Alta complexidade com base na quantidade de Tipos de Dados (TD) e Tipos de Registro (TR). A soma ponderada resulta no total de Pontos de Função Não Ajustados (PFNA).
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
User["Requisitos Funcionais do Usuário"] --> APF["Análise de Pontos de Função (IFPUG)"]
APF --> Data["Funções de Dados: ALIs (Internos) e AIEs (Externos)"]
APF --> Trans["Funções de Transação: EEs (Entradas), SEs (Saídas), CEs (Consultas)"]
Data & Trans --> Matrix["Matriz de Complexidade (TDs e TRs)"]
Matrix --> TotalPF["Total de Pontos de Função (Tamanho Funcional)"]
TotalPF --> Estima["Estimativa de Prazo e Custo (Produtividade: Horas/PF)"]
style User fill:#e1f5fe,stroke:#01579b
style APF fill:#fff3e0,stroke:#e65100
style Data fill:#f3e5f5,stroke:#7b1fa2
style Trans fill:#f3e5f5,stroke:#7b1fa2
style TotalPF fill:#e8f5e9,stroke:#2e7d32
style Estima fill:#e0f2f1,stroke:#00695c 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Independência Tecnológica: Um sistema de compras terá exatamente os mesmos Pontos de Função quer seja escrito em Java, Python, Go ou C#. - Normalização de Produtividade: Permite comparar com precisão a produtividade de diferentes equipes através da métrica Horas gastas por Ponto de Função. - Estimativa Precoce de Projetos: Capacidade de dimensionar cronogramas e custos ainda na fase de especificação de requisitos. - Norma Internacional ISO/IEC 20926: Adoção de padrão reconhecido mundialmente e exigido em licitações públicas e contratos corporativos.
🛠️ 2. Implementação Prática em Engenharia de Software, Métricas de Tamanho e Análise de Pontos de Função (APF)
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// function_points_calculator.py (Calculadora de Pontos de Função Não Ajustados)
def calculate_function_points():
"""Calcula Pontos de Função segundo a tabela de pesos IFPUG."""
# Matriz de pesos [Baixa, Média, Alta]
WEIGHTS = {
"ALI": [7, 10, 15],
"AIE": [5, 7, 10],
"EE": [3, 4, 6],
"SE": [4, 5, 7],
"CE": [3, 4, 6]
}
# Inventário Funcional do Sistema de E-Commerce
inventory = {
"ALI": {"baixa": 2, "media": 3, "alta": 1}, # Tabelas de Usuários, Pedidos, Produtos...
"AIE": {"baixa": 1, "media": 1, "alta": 0}, # Gateway de Pagamento, ERP Fiscal
"EE": {"baixa": 5, "media": 4, "alta": 2}, # Cadastros e Mutações
"SE": {"baixa": 3, "media": 2, "alta": 1}, # Relatórios Analíticos com Cálculos
"CE": {"baixa": 6, "media": 3, "alta": 0} # Listagens e Consultas Simples
}
total_pf = 0
print("=== Apuração de Pontos de Função (IFPUG) ===")
for func_type, counts in inventory.items():
w = WEIGHTS[func_type]
subtotal = (counts["baixa"] * w[0]) + (counts["media"] * w[1]) + (counts["alta"] * w[2])
total_pf += subtotal
print(f"{func_type:4} -> Baixas: {counts['baixa']} | Médias: {counts['media']} | Altas: {counts['alta']} | Subtotal: {subtotal:3d} PF")
print("-" * 50)
print(f"Total de Pontos de Função Não Ajustados: {total_pf} PF")
# Estimativa de esforço assumindo taxa média da indústria de 10 horas/PF
taxa_produtividade = 10 # Horas por PF
esforco_total_horas = total_pf * taxa_produtividade
print(f"Esforço Estimado de Engenharia : {esforco_total_horas} horas")
print(f"Prazo para Equipe de 4 Engenheiros : {esforco_total_horas / (4 * 140):.1f} meses")
if __name__ == '__main__':
calculate_function_points()
💡 Análise Passo a Passo do Código
- Tabela de Pesos Padrão IFPUG: Aplica multiplicadores formais consagrados internacionalmente para cada tipo de componente.
- Classificação por Complexidade: Pondera o esforço real considerando se a tela ou tabela possui dezenas de campos ou poucos atributos.
- Conversão em Prazos Reais: Transforma pontos abstratos de software em horas e meses de trabalho baseados na velocidade histórica da equipe.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto