🔄 CAPÍTULO 02: MODELOS DE PROCESSO DE SOFTWARE


🎯 1. Objetivos de Aprendizagem & Competências

Estimativa de Dedicação: 2 horas de estudo autoguiado.
Ao final deste capítulo, você será capaz de:

  • 🔹 Compreender as características, forças e limitações dos modelos Cascata, Prototipação, Espiral e Incremental.
  • 🔹 Avaliar e selecionar o modelo de ciclo de vida ideal com base na volatilidade de requisitos, criticidade de segurança e prazos.
  • 🔹 Analisar o impacto da gestão de riscos e feedback contínuo no custo de alteração de software.
  • 🔹 Implementar um sistema de máquina de estados em Python 3.11+ para rastrear o ciclo de vida de transição de fases.

🏢 2. Cenário Corporativo & Estudo de Caso (TecProExpress)

Na TecProExpress, a diretoria de TI está iniciando dois novos projetos simultâneos:

  1. Módulo de Telemetria e Frenagem Crítica: Integrado diretamente ao computador de bordo da frota pesada (risco de vida em caso de falha).
  2. App de Chat do Motorista com IA: Ferramenta experimental para interação em tempo real com o suporte (requisitos muito voláteis).

O Desafio: A equipe técnica não pode aplicar a mesma estratégia de processo para ambos os produtos. Você deve estruturar a governança de processos, aplicando o modelo preditivo formal para o módulo crítico e o modelo incremental adaptativo para o app experimental.


🧠 3. Fundamentação Teórica & Modelos Visuais

3.1. Panorama dos Modelos de Ciclo de Vida

Um modelo de processo de software prescreve a ordem das atividades, os critérios de entrada/saída de cada fase e as estratégias de validação com os clientes.

flowchart TD
    subgraph PROCESSOS ["PARADIGMAS DE PROCESSO"]
        W["🌊 Cascata (Waterfall)<br>Sequencial & Preditivo"]
        I["🔄 Incremental / Iterativo<br>Entregas Parciais & Evolutivas"]
        P["🎨 Prototipação<br>Validação de UI & Descoberta"]
        E["🌀 Espiral (Boehm)<br>Orientado a Riscos & Ciclos"]
    end
    
    style W fill:#e1f5fe,stroke:#0284c7
    style I fill:#dcfce7,stroke:#16a34a
    style P fill:#fef3c7,stroke:#d97706
    style E fill:#f3e5f5,stroke:#7b1fa2

3.2. Cascata vs. Incremental: Análise de Custo da Mudança

No modelo Cascata, o custo de corrigir um requisito mal compreendido na fase de testes pode ser até 100× maior do que na fase inicial de elicitação. No modelo Incremental, o feedback frequente reduz o retrabalho.

flowchart LR
    subgraph Cascata ["🌊 Modelo Cascata"]
        R1["Requisitos"] --> D1["Design"] --> C1["Código"] --> T1["Testes"] --> O1["Operação"]
    end
    
    subgraph Incremental ["🚀 Modelo Incremental"]
        direction TB
        Inc1["Incremento 1: MVP Core (4 semanas)"]
        Inc2["Incremento 2: Pagamentos & API (3 semanas)"]
        Inc3["Incremento 3: Relatórios & BI (3 semanas)"]
        Inc1 --> Inc2 --> Inc3
    end
    
    style Cascata fill:#fee2e2,stroke:#ef4444
    style Incremental fill:#dcfce7,stroke:#16a34a

💻 4. Aplicação Prática & Código Executável (Python 3.11+)

Implementação de um motor de ciclo de vida de fases de projeto com validação estrita de transições.

📋 Pré-requisitos e Instalação

Este módulo utiliza exclusivamente recursos nativos do Python 3.11+ (enum). Nenhuma instalação externa é necessária:

# Ambiente padrão Python 3.11+ (sem dependências externas)

💻 Código Completo e Autocontido (ciclo_vida_processo.py)

Crie o arquivo ciclo_vida_processo.py e insira o código abaixo:

"""
Módulo: ciclo_vida_processo.py
Domínio: Automação e rastreamento de estágios do processo de software.
Stack: Python 3.11+
"""
from enum import Enum, auto

class FaseProcesso(Enum):
    CONCEPCAO = auto()
    REQUISITOS = auto()
    DESENHO_ARQUITETURAL = auto()
    IMPLEMENTACAO = auto()
    TESTES_INTEGRACAO = auto()
    DEPLOY_PRODUCAO = auto()

class CicloVidaProjeto:
    def __init__(self, nome_projeto: str, modelo: str = "INCREMENTAL"):
        self.nome_projeto = nome_projeto
        self.modelo = modelo
        self.fase_atual = FaseProcesso.CONCEPCAO
        self.historico_fases: list[FaseProcesso] = [self.fase_atual]

    def transicionar(self, proxima_fase: FaseProcesso, criterios_aceite_atendidos: bool):
        """Valida se os critérios de qualidade da fase atual foram satisfeitos antes de avançar."""
        if not criterios_aceite_atendidos:
            raise PermissionError(
                f"❌ Transição bloqueada: Critérios de aceite incompletos para sair de {self.fase_atual.name}."
            )
        self.fase_atual = proxima_fase
        self.historico_fases.append(self.fase_atual)
        print(f"🚀 [{self.nome_projeto}] Avançou com sucesso para a fase: {self.fase_atual.name}")

if __name__ == "__main__":
    projeto_core = CicloVidaProjeto("TecPro-Telemetria", modelo="CASCATA")

    # 1. Avançando com critérios satisfeitos
    projeto_core.transicionar(FaseProcesso.REQUISITOS, criterios_aceite_atendidos=True)
    projeto_core.transicionar(FaseProcesso.DESENHO_ARQUITETURAL, criterios_aceite_atendidos=True)

    # 2. Tentativa de avanço com pendências de qualidade
    try:
        projeto_core.transicionar(FaseProcesso.IMPLEMENTACAO, criterios_aceite_atendidos=False)
    except PermissionError as err:
        print(err)

🚀 Como Executar

Execute o script no terminal:

python ciclo_vida_processo.py

🖥️ Saída Esperada no Terminal

🚀 [TecPro-Telemetria] Avançou com sucesso para a fase: REQUISITOS
🚀 [TecPro-Telemetria] Avançou com sucesso para a fase: DESENHO_ARQUITETURAL
❌ Transição bloqueada: Critérios de aceite incompletos para sair de DESENHO_ARQUITETURAL.

💡 5. Checkpoint de Engenharia & Boas Práticas

Boas Práticas & Anti-Patterns

  • Critério de Seleção: Use modelos sequenciais (Cascata) apenas quando os requisitos forem 100% estáveis, conhecidos e as tecnologias consolidadas.
  • Anti-Pattern Big Bang Release: Nunca acumule 6 meses de desenvolvimento sem entregas intermediárias ao usuário final. Entregue valor em pequenos incrementos funcionais (sprints de 2 a 3 semanas).

🔗 6. Conexão com os Projetos Integradores

Projeto IntegradorComo o conceito deste capítulo é aplicado no PI
PI-02: StockFlowDefinição do processo de desenvolvimento em 2 marcos (MVP no Marco 1 e PCP avançado no Marco 2).
PI-05: ParkFlowPrototipação rápida do fluxo de check-in antes da codificação das tabelas de tarifação.

🧪 7. Quiz de Fixação e Autoavaliação (Formative Assessment)

🧪 Quiz de Autoavaliação — Capítulo 02

1. Em qual dos seguintes cenários o modelo em Cascata tradicional é mais indicado?

  • A) Sistema de rede social com funcionalidades inovadoras e público jovem indefinido.
  • B) Aplicativo mobile para startups onde o modelo de negócio muda a cada semana.
  • C) Sistema embarcado de controle de freios aeronáuticos com especificações rigorosas e imutáveis da autoridade reguladora.
  • D) Portal de e-commerce cujo design visual será testado por testes A/B em tempo real.
💡 Ver Resposta e Justificativa

Resposta Correta: C
Justificativa: O modelo Cascata funciona perfeitamente quando os requisitos são totalmente claros, previsíveis e fixados por normativas rígidas, sem necessidade de alterações constantes de escopo.


2. Qual é a principal característica distintiva do Modelo Espiral proposto por Barry Boehm?

  • A) Eliminação total de documentação escrita.
  • B) Ausência de testes de integração.
  • C) Avaliação e mitigação explícita de riscos em cada ciclo de desenvolvimento.
  • D) Uso obrigatório de metodologias NoSQL.
💡 Ver Resposta e Justificativa

Resposta Correta: C
Justificativa: O modelo Espiral é centrado na análise contínua e sistemática de riscos a cada volta da espiral, antes de comprometer recursos com desenvolvimento pesado.


3. O que define a abordagem de Desenvolvimento Incremental?

  • A) O sistema é entregue apenas quando 100% das telas estiverem concluídas.
  • B) O sistema é dividido em pequenos subconjuntos funcionais (incrementos), permitindo validação antecipada com os usuários.
  • C) Todo o código é escrito antes de qualquer fase de requisitos.
  • D) O cliente só testa o software após 12 meses de implantação.
💡 Ver Resposta e Justificativa

Resposta Correta: B
Justificativa: O desenvolvimento incremental entrega versões parciais e funcionais a cada ciclo, permitindo colher feedback real dos usuários e refinar o produto continuamente.


🛠️ 8. Ponte para a Ação: Laboratório Prático

🎯 Próximo Passo Prático

Coloque esta teoria em prática executando o roteiro de laboratório autoguiado:
👉 ATIVIDADE 02: PROCESSOS DE SOFTWARE


📌 9. Resumo Executivo & Key Takeaways

  • Processos são Guias: Um processo de software estrutura as atividades da equipe para transformar requisitos de negócio em valor de produção com previsibilidade.
  • Modelo Cascata: Adequado para domínios altamente regulados e com requisitos imutáveis; vulnerável a mudanças tardias.
  • Modelo Incremental: Base das metodologias ágeis modernas; reduz o risco de construir o produto errado ao colher feedback contínuo.
  • Modelo Espiral: Abordagem de alta maturidade com ênfase na identificação e neutralização antecipada de riscos técnicos e de negócio.