Engenharia de Software
Revisão
Professor: Gabriel Soares Baptista
Atributos de um Bom Software
Um software profissional não é julgado apenas pelo código, mas por atributos essenciais:
- Manutenibilidade: Capacidade de evoluir.
- Confiança e Proteção: Confiabilidade e segurança.
- Eficiência: Uso otimizado de recursos.
- Aceitabilidade: Usabilidade e compatibilidade.
Questões de fixação - 1 / 3
Questão 1
Explique por que a percepção de que "escrever programas é fácil" pode ser perigosa para uma empresa que escala seus produtos sem adotar práticas de engenharia.
Resposta 1
- Escala e Complexidade: É simples criar programas pequenos, mas sistemas de larga escala exigem técnicas que garantam confiabilidade e controle de custos.
- Evolução Orgânica: Empresas que crescem sem engenharia criam softwares caros e instáveis, pois não adotaram práticas de projeto e evolução desde o início.
Questão 2
Diferencie Desenvolvimento Profissional de Programação Pessoal utilizando três critérios: equipe, documentação e tempo de vida do software.
Resposta 2
- Equipe: O desenvolvimento profissional é feito por equipes para fins comerciais, enquanto a pessoal é individual ou para hobbistas.
- Documentação: Na profissional, manuais e documentação técnica são fundamentais para que outros possam manter o código.
- Tempo de Vida: Sistemas profissionais são mantidos e alterados por décadas, exigindo técnicas de evolução.
Questão 3
Defina o que compõe um "Software" além do código-fonte (os artefatos associados).
Resposta 3
- O software profissional inclui toda a documentação associada.
- Envolve arquivos de configuração, bibliotecas, manuais de usuário e sites para atualizações.
Questão 4
Qual a diferença fundamental entre Produtos Genéricos e Produtos sob Encomenda no que diz respeito ao controle da especificação?
Resposta 4
- Produtos Genéricos: A organização que desenvolve o software controla a especificação (ex: pacotes Office).
- Produtos sob Encomenda: O cliente que compra o software controla a especificação (ex: sistema de tráfego aéreo).
Questão 5
A Engenharia de Software é frequentemente comparada à Ciência da Computação. Explique a relação de "Teoria vs. Prática" entre essas duas áreas.
Resposta 5
- Ciência da Computação: Foca na teoria e fundamentos, como algoritmos e complexidade.
- Engenharia de Software: Preocupa-se com problemas práticos de entregar software útil e funcional sob restrições financeiras.
Questão 6
Defina os quatro atributos de um bom software (Manutenibilidade, Confiança, Eficiência e Aceitabilidade) e dê um exemplo de impacto negativo para o negócio caso a "Manutenibilidade" seja ignorada.
Resposta 6
- Atributos: Manutenibilidade (evolução), Confiança (segurança), Eficiência (recursos) e Aceitabilidade (usuário).
- Impacto: Ignorar a manutenibilidade torna o software impossível de atualizar, aumentando custos e levando à obsolescência tecnológica.
Processos e Modelos
- Conjunto de atividades para transformar necessidades em produtos.
- Quatro atividades básicas: Especificação, Desenvolvimento, Validação e Evolução.
Modelo em Cascata (Waterfall)
Abordagem dirigida a planos onde as fases são sequenciais.

Questões de fixação - 2 / 3
Questão 7
O Processo de Software possui quatro atividades fundamentais. Nomeie-as e descreva brevemente o objetivo da Validação.
Resposta 7
- Atividades: Especificação, Desenvolvimento, Validação e Evolução.
- Validação: Garante que o sistema é exatamente o que o cliente quer e que atende aos requisitos definidos.
Questão 8
Por que o Modelo em Cascata (Waterfall) é considerado "dirigido a planos"? Em que tipo de projeto ele ainda é amplamente recomendado?
Resposta 8
- Dirigido a Planos: Exige planejamento e programação de todas as atividades antes do início do desenvolvimento.
- Uso Recomendado: Em projetos com requisitos estáveis e bem compreendidos, como sistemas críticos ou grandes sistemas de infraestrutura.
Questão 9
No Desenvolvimento Incremental, os requisitos são frequentemente alterados. Como essa abordagem reduz o custo de acomodar mudanças em comparação ao modelo linear?
Resposta 9
- No incremental, apenas o incremento atual precisa ser alterado se houver mudanças, gerando menos retrabalho em documentação e código já finalizado.
Questão 10
Explique o conceito de Sistemas Brownfield e por que eles dificultam o uso de métodos puramente ágeis em grandes empresas.
Resposta 10
- Brownfield: São sistemas novos que precisam interagir com sistemas legados rígidos já existentes.
- Dificuldade Ágil: A rigidez dessas integrações exige negociações complexas e documentação prévia, colidindo com a flexibilidade ágil.
Questão 11
No modelo de Engenharia Orientada a Reúso, por que a atividade de "Modificação de Requisitos" é necessária após a análise de componentes?
Resposta 11
- É necessária para adequar o que o usuário quer ao que os componentes prontos e disponíveis no mercado podem oferecer.
Questão 12
Diferencie Prototipação de Entrega Incremental. Um protótipo deve ser usado como sistema de produção? Justifique.
Resposta 12
- Diferença: O protótipo é para validar ideias (muitas vezes descartável); a entrega incremental entrega partes funcionais para uso real.
- Produção: Não. Protótipos relaxam requisitos de segurança e robustez para ganhar velocidade.
Módulo 3: Desenvolvimento Ágil
- Foco em entrega rápida, pessoas e resposta a mudanças.
- Práticas técnicas do XP e rituais de gestão do Scrum.
Scrum e Sprints
O desenvolvimento ocorre em ciclos fixos chamados Sprints.

Questões de fixação - 3 / 3
Questão 13
O Manifesto Ágil prioriza "Indivíduos e Interações" sobre "Processos e Ferramentas". Isso significa que ferramentas não são importantes? Explique a filosofia por trás desse valor.
Resposta 13
- Não significa que ferramentas sejam inúteis, mas que o sucesso depende da colaboração humana. Ferramentas devem apoiar as pessoas, e não ditar como elas trabalham.
Questão 14
No Extreme Programming (XP), o que significa a prática de Desenvolvimento Test-First e qual sua vantagem para o entendimento dos requisitos?
Resposta 14
- Conceito: Escrever os testes automatizados antes do código funcional.
- Vantagem: Reduz ambiguidades e força o desenvolvedor a entender exatamente o que a funcionalidade deve fazer antes de codificá-la.
Questão 15
Explique a prática de Refatoração no XP. Por que ela é vital para sistemas que não possuem um projeto de arquitetura detalhado no início?
Resposta 15
- Refatoração: Melhorar a estrutura do código sem mudar sua função.
- Vitalidade: Mantém o sistema limpo e manutenível conforme novas funcionalidades são adicionadas sem um plano arquitetural rígido inicial.
Questão 16
Descreva o papel do Scrum Master. Como ele difere de um gerente de projeto tradicional em termos de autoridade e facilitação?
Resposta 16
- O Scrum Master é um facilitador, não um chefe. Ele protege a equipe de distrações e remove impedimentos, enquanto o gerente tradicional impõe planos e decisões.
Questão 17
O que é um Sprint no Scrum e por que sua duração é fixa (time-box)?
Resposta 17
- É um ciclo de trabalho (2 a 4 semanas). A duração fixa garante um ritmo constante e força a priorização do que gera mais valor no curto prazo.
Questão 18
Discuta as vantagens da Programação em Pares. Como essa prática auxilia na "Propriedade Coletiva" do código?
Resposta 18
- Vantagens: Revisão contínua, menos erros e disseminação de conhecimento.
- Propriedade Coletiva: Como todos trabalham com todos, o conhecimento sobre o código é de toda a equipe, não de uma pessoa só.
Questão 19
Imagine que um empregador pede para você ignorar um teste de segurança para bater uma meta de prazo. Qual princípio do Código de Ética da ACM/IEEE deve guiar sua decisão?
Resposta 19
- O princípio do PÚBLICO. O engenheiro deve priorizar a segurança e o interesse público acima dos interesses imediatos do empregador ou cliente.
Questão 20
O Modelo Espiral de Boehm é descrito como "dirigido a riscos". Explique como cada volta da espiral ajuda a prevenir falhas catastróficas em projetos complexos.
Resposta 20
- Cada volta foca em identificar e mitigar os maiores riscos (técnicos, de custos ou requisitos) através de protótipos e análises antes de prosseguir.