Qualidade de Software

Metodologias

Princípios de Escrita e Design de Código

  • Clean Code (Código Limpo): Um conjunto de práticas focadas em escrever códigos que sejam fáceis de ler, entender e manter por qualquer desenvolvedor.
  • SOLID: Um acrônimo para cinco princípios de design orientado a objetos que visam tornar o software mais compreensível, flexível e fácil de manter.
  • DRY (Don’t Repeat Yourself): O princípio de evitar a duplicação de lógica, garantindo que cada pedaço de conhecimento tenha uma representação única dentro do sistema.
  • KISS (Keep It Simple, Stupid): Uma filosofia que defende que a maioria dos sistemas funciona melhor se forem mantidos simples em vez de complicados.
  • YAGNI (You Aren’t Gonna Need It): Uma orientação para não adicionar funcionalidades ao código até que elas sejam realmente necessárias, evitando desperdício e complexidade.
  • Object Calisthenics: Um conjunto de 9 regras de programação focadas em melhorar a qualidade do código orientado a objetos, como “não usar o ‘else'” ou “apenas um ponto por linha”.
  • GRASP: Padrões que ajudam a atribuir responsabilidades a classes e objetos de forma lógica e organizada.
  • Refactoring (Refatoração): O processo de reestruturar um código existente sem alterar seu comportamento externo, visando melhorar sua estrutura interna e clareza.

Metodologias de Desenvolvimento e Testes

  • TDD (Test Driven Development): Técnica onde você escreve um teste unitário antes mesmo de escrever o código da funcionalidade, guiando o desenvolvimento pelo teste.
  • BDD (Behavior Driven Development): Uma evolução do TDD que foca no comportamento do software sob o ponto de vista do negócio, usando uma linguagem natural (como o Gherkin).
  • ATDD (Acceptance Test Driven Development): Similar ao BDD, mas focado em critérios de aceitação definidos em conjunto por desenvolvedores, testadores e clientes.
  • Shift-Left Testing: A prática de realizar testes o mais cedo possível no ciclo de vida do desenvolvimento para encontrar falhas rapidamente.
  • Mutation Testing (Testes de Mutação): Uma técnica que altera pequenas partes do código fonte para verificar se os testes existentes são capazes de detectar essas mudanças (testando a qualidade dos testes).
  • Static Analysis (Análise Estática): Verificação do código sem executá-lo, geralmente feita por ferramentas automáticas para encontrar erros de sintaxe, vulnerabilidades ou desvios de padrão.
  • Dynamic Analysis (Análise Dinâmica): Avaliação do software durante sua execução para medir performance, uso de memória e comportamento em tempo real.

Arquitetura e Infraestrutura

  • Twelve-Factor App (12-Factor): Uma metodologia para construir aplicações modernas, escaláveis e portáteis, especialmente voltada para ambientes de nuvem (SaaS).
  • DDD (Domain-Driven Design): Uma abordagem de design de software complexo que foca em alinhar a estrutura do código com o domínio e as regras de negócio.
  • Design Patterns (Padrões de Projeto GoF): Soluções típicas para problemas comuns que ocorrem no design de software, catalogadas originalmente pelo “Gang of Four”.
  • Chaos Engineering: A disciplina de realizar experimentos em um sistema para testar sua capacidade de resistir a condições turbulentas e falhas inesperadas em produção.

Processos e Cultura de Entrega

  • Continuous Integration (CI): A prática de integrar o código de todos os desenvolvedores em um repositório compartilhado várias vezes ao dia, validando-o com builds e testes automáticos.
  • Continuous Deployment/Delivery (CD): A automação da entrega do software. No Delivery, o código está sempre pronto para ser lançado; no Deployment, ele é lançado automaticamente em produção.
  • DevOps: Uma cultura e conjunto de práticas que une o desenvolvimento (Dev) e as operações (Ops) para acelerar o ciclo de entrega com alta qualidade.
  • Site Reliability Engineering (SRE): Uma abordagem do Google que aplica conceitos de engenharia de software para resolver problemas de operações e infraestrutura.
  • Code Review (Revisão de Código): O processo onde desenvolvedores examinam o código uns dos outros para identificar erros e compartilhar conhecimento.
  • Pair Programming (Programação em Par): Técnica onde dois desenvolvedores trabalham juntos em uma única estação de trabalho, um escrevendo e o outro revisando em tempo real.

Normas e Modelos de Maturidade

  • ISO/IEC 25010: Uma norma internacional que define um modelo de qualidade para produtos de software, avaliando características como funcionalidade, usabilidade e segurança.
  • CMMI: Um modelo de referência que ajuda organizações a melhorar seus processos de desenvolvimento e manutenção de produtos.
  • MPS.BR: Um modelo brasileiro focado na melhoria de processos de software, adaptado à realidade das empresas nacionais.
  • TQM (Total Quality Management): Uma abordagem de gestão que busca a qualidade total em todos os processos organizacionais, aplicada aqui ao ciclo de vida do software.