Prévia do material em texto
Engenharia Software Introdução O que é? Definição: É a aplicação de uma abordagem sistemática, disciplinada e quantificável ao desenvolvimento, operação e manutenção de software. Objetivo: Transfomar o "artesanato" de programar em uma engenharia robusta. Foco: Entregar produtos de alta qualidade, dentro do prazo e do custo estimados. 01 Fundamentos da Engenharia de Software Modelos de Processo de Software Modelo Cascata (Waterfall): Abordagem clássica e linear. Uma fase só começa quando a anterior termina (Requisitos $\rightarrow$ Design $\rightarrow$ Implementação). Modelos Incrementais e Evolutivos: O software é entregue em partes. Permite feedback rápido e ajustes durante o percurso. Modelos Ágeis (Agile): Foco em iterações curtas, colaboração com o cliente e resposta rápida a mudanças (Ex: Scrum, Kanban). Requisitos e Especificação Definindo o Produto O que são: Descrições dos serviços que o sistema deve fornecer e as restrições sob as quais ele deve operar. O Grande Desafio: Garantir que o que o desenvolvedor entende seja exatamente o que o cliente precisa. Tipos de Requisitos Funcionais: Descrevem o comportamento do sistema (o que ele faz). Ex: "O sistema deve emitir um relatório de vendas mensal." Não Funcionais: Descrevem restrições e qualidades (como ele deve ser). Ex: "O sistema deve processar a busca em menos de 2 segundos" (Desempenho). Arquitetura de Software A Estrutura do Sistema Definição: A organização fundamental de um sistema, seus componentes, seus relacionamentos e o ambiente em que operam. Importância: Define a escalabilidade, a segurança e a facilidade de manutenção a longo prazo. Padrões Arquiteturais Comuns Arquitetura em Camadas (Layered): Separa as responsabilidades (ex: Interface, Lógica de Negócio e Banco de Dados). Microserviços: O sistema é dividido em pequenos serviços independentes que se comunicam via rede. Client-Server: Um modelo distribuído onde o cliente solicita e o servidor processa. 01 Desenvolvimento e Manutenção Técnicas de Codificação e Testes Escrevendo Código de Qualidade Clean Code (Código Limpo): O código deve ser autoexplicativo. Nomes de variáveis e funções devem revelar sua intenção. Refatoração: O processo de reestruturar o código existente sem alterar seu comportamento externo, visando melhoria interna. Padronização: Uso de guias de estilo (Style Guides) para que todo o time escreva de forma consistente. Princípios e Práticas DRY (Don't Repeat Yourself): Evite duplicar lógica; se você copiou e colou, algo está errado. KISS (Keep It Simple, Stupid): A solução mais simples é geralmente a melhor. Evite complexidade desnecessária. SOLID: Cinco princípios de design orientado a objetos que tornam o software mais compreensível e flexível. Controle de Versão e Gerenciamento de Configuração O Coração da Colaboração O que é: Sistemas que registram as mudanças feitas em arquivos ao longo do tempo, permitindo recuperar versões específicas. Por que usar? Histórico completo de alterações, trabalho em equipe sem conflitos e facilidade para desfazer erros. Conceitos Fundamentais Repositório: O local onde o projeto e seu histórico ficam armazenados. Commit: Uma "foto" do código em um determinado momento (com uma mensagem explicativa). Branch (Ramo): Permite criar uma linha de desenvolvimento separada para testar novas ideias sem quebrar o código principal. Merge: O processo de unir as alterações de diferentes ramos. Manutenção e Evolução de Software O Software como Organismo Vivo O que é: O processo de modificar um sistema após a entrega para corrigir erros, melhorar o desempenho ou adaptar a novas necessidades. A Lei de Lehman: O software deve ser continuamente adaptado, caso contrário, torna-se progressivamente menos útil. Tipos de Manutenção Corretiva: Conserto de falhas e bugs encontrados pelos usuários. Adaptativa: Ajustes para novos ambientes (ex: nova versão do Windows, mudança de servidor). Perfectiva: Adição de novas funcionalidades e melhorias de performance. Preditiva: Alterações para evitar que problemas ocorram no futuro. Legado e Evolução Sistemas Legados: Sistemas antigos, mas essenciais, que precisam de cuidados especiais para não travarem o negócio. Evolução Contínua: No modelo moderno (SaaS/Cloud), as atualizações são constantes e incrementais. Finalmente O Valor da Engenharia de Software Qualidade além do Código: Engenharia de Software é sobre processos, pessoas e ferramentas trabalhando em harmonia. Sustentabilidade: Um software bem projetado sobrevive ao tempo e às mudanças de mercado. Previsibilidade: Reduz o caos, permitindo estimativas de custos e prazos mais realistas. O Futuro da Área IA e Automação: Novas ferramentas que aceleram a codificação e os testes. Segurança por Design: A proteção de dados como prioridade desde o primeiro requisito. Cultura DevOps: A união definitiva entre o desenvolvimento e a operação do software.