1 / 22

Princípios da Qualidade de Software

Fundamentação Teórica e Aplicações Práticas

Curso: Engenharia de Software

Disciplina: Qualidade de Software

Data: 11 de Junho de 2025

Objetivos de Aprendizagem

Compreender

Os fundamentos da qualidade de software segundo as normas ISO/IEC

Identificar

As oito características de qualidade definidas na ISO/IEC 25010

Aplicar

Métricas e ferramentas para avaliação da qualidade de software

Integrar

Práticas de qualidade no ciclo de desenvolvimento de software

Fundamentação Teórica

ISO/IEC 25010:2011

Define oito características de qualidade para produtos de software

Benefícios da Norma:

  • Padronização internacional
  • Critérios objetivos de avaliação
  • Base para especificação de requisitos
  • Melhoria contínua de processos

Oito Características de Qualidade

Adequação Funcional

Functional Suitability

Eficiência de Desempenho

Performance Efficiency

Compatibilidade

Compatibility

Usabilidade

Usability

Confiabilidade

Reliability

Segurança

Security

Manutenibilidade

Maintainability

Portabilidade

Portability

Adequação Funcional

Grau em que um produto ou sistema fornece funções que atendem às necessidades declaradas e implícitas quando usado sob condições especificadas.

Subcaracterísticas:

Completude Funcional

Grau em que o conjunto de funções cobre todas as tarefas e objetivos do usuário especificados

Correção Funcional

Grau em que um produto ou sistema fornece os resultados corretos com o grau de precisão necessário

Adequação Funcional

Grau em que as funções facilitam a realização de tarefas e objetivos especificados

Eficiência de Desempenho

Desempenho relativo à quantidade de recursos utilizados sob condições estabelecidas.

Subcaracterísticas:

Comportamento Temporal

Grau em que os tempos de resposta e processamento atendem aos requisitos

Utilização de Recursos

Grau em que as quantidades e tipos de recursos utilizados atendem aos requisitos

Capacidade

Grau em que os limites máximos de um parâmetro do produto atendem aos requisitos

Compatibilidade

Grau em que um produto, sistema ou componente pode trocar informações com outros produtos, sistemas ou componentes e/ou executar suas funções requeridas enquanto compartilha o mesmo ambiente de hardware ou software.

Subcaracterísticas:

Coexistência

Grau em que um produto pode executar suas funções requeridas eficientemente enquanto compartilha um ambiente e recursos comuns com outros produtos

Interoperabilidade

Grau em que dois ou mais sistemas, produtos ou componentes podem trocar informações e usar as informações que foram trocadas

Usabilidade

Grau em que um produto ou sistema pode ser usado por usuários específicos para atingir objetivos específicos com eficácia, eficiência e satisfação em um contexto específico de uso.

Subcaracterísticas:

Reconhecimento de Adequação

Grau em que usuários podem reconhecer se um produto ou sistema é apropriado para suas necessidades

Capacidade de Aprendizagem

Grau em que um produto ou sistema pode ser usado por usuários específicos para atingir objetivos específicos de aprendizagem

Operabilidade

Grau em que um produto ou sistema tem atributos que facilitam sua operação e controle

Confiabilidade

Grau em que um sistema, produto ou componente executa funções especificadas sob condições especificadas por um período de tempo especificado.

Subcaracterísticas:

Maturidade

Grau em que um sistema, produto ou componente atende às necessidades de confiabilidade sob operação normal

Disponibilidade

Grau em que um sistema, produto ou componente está operacional e acessível quando necessário para uso

Tolerância a Falhas

Grau em que um sistema, produto ou componente opera conforme pretendido apesar da presença de falhas de hardware ou software

Recuperabilidade

Grau em que, na eventualidade de uma interrupção ou falha, um produto ou sistema pode recuperar os dados diretamente afetados e restabelecer o estado desejado do sistema

Segurança

Grau em que um produto ou sistema protege informações e dados de modo que pessoas ou outros produtos ou sistemas tenham o grau de acesso a dados apropriado aos seus tipos e níveis de autorização.

Subcaracterísticas:

Confidencialidade

Grau em que um produto ou sistema garante que os dados sejam acessíveis apenas àqueles autorizados a ter acesso

Integridade

Grau em que um sistema, produto ou componente impede acesso não autorizado ou modificação de programas de computador ou dados

Não Repúdio

Grau em que ações ou eventos podem ser comprovados ter ocorrido, de modo que os eventos ou ações não possam ser repudiados posteriormente

Responsabilização

Grau em que as ações de uma entidade podem ser rastreadas unicamente para a entidade

Autenticidade

Grau em que a identidade de um sujeito ou recurso pode ser provada ser a que é reivindicada

Manutenibilidade

Grau de eficácia e eficiência com que um produto ou sistema pode ser modificado pelos mantenedores previstos.

Subcaracterísticas:

Modularidade

Grau em que um sistema ou programa de computador é composto de componentes discretos, de modo que uma mudança em um componente tenha impacto mínimo em outros componentes

Reusabilidade

Grau em que um ativo pode ser usado em mais de um sistema, ou na construção de outros ativos

Analisabilidade

Grau de eficácia e eficiência com que é possível avaliar o impacto em um produto ou sistema de uma mudança pretendida

Modificabilidade

Grau em que um produto ou sistema pode ser efetivamente e eficientemente modificado sem introduzir defeitos ou degradar a qualidade existente do produto

Testabilidade

Grau de eficácia e eficiência com que critérios de teste podem ser estabelecidos para um sistema, produto ou componente e testes podem ser executados para determinar se esses critérios foram atendidos

Portabilidade

Grau de eficácia e eficiência com que um sistema, produto ou componente pode ser transferido de um hardware, software ou outro ambiente operacional ou de utilização para outro.

Subcaracterísticas:

Adaptabilidade

Grau em que um produto ou sistema pode efetivamente e eficientemente ser adaptado para diferentes ou evoluentes hardware, software ou outros ambientes operacionais ou de uso

Instalabilidade

Grau de eficácia e eficiência com que um produto ou sistema pode ser instalado com sucesso e/ou desinstalado em um ambiente especificado

Substituibilidade

Grau em que um produto pode substituir outro produto de software especificado para a mesma finalidade no mesmo ambiente

Processos de Garantia de Qualidade

Planejamento da Qualidade

Definição de objetivos, padrões e critérios de qualidade

Controle de Qualidade

Verificação e validação durante o desenvolvimento

Garantia de Qualidade

Monitoramento de processos e conformidade com padrões

Melhoria Contínua

Análise de métricas e implementação de melhorias

Métricas de Qualidade

Densidade de Defeitos

Número de defeitos por linha de código ou ponto de função

Defeitos / KLOC

Cobertura de Testes

Percentual do código exercitado pelos testes

Linhas Testadas / Total Linhas × 100%

Complexidade Ciclomática

Medida da complexidade estrutural do código

V(G) = E - N + 2P

Tempo de Resposta

Tempo entre solicitação e resposta do sistema

T = T_fim - T_início

Disponibilidade

Percentual de tempo que o sistema está operacional

MTBF / (MTBF + MTTR) × 100%

Ferramentas de Qualidade

SonarQube

Plataforma de análise contínua da qualidade do código

Funcionalidades:

  • Análise estática
  • Detecção de bugs
  • Métricas de qualidade
  • Integração com CI/CD

Outras Ferramentas

  • CheckStyle: Verificação de padrões de codificação
  • PMD: Análise de código fonte
  • FindBugs/SpotBugs: Detecção de bugs
  • ESLint: Análise de código JavaScript
  • Selenium: Testes automatizados de interface

Metodologias de Qualidade

CMMI

Modelo de maturidade para melhoria de processos

1. Inicial
2. Gerenciado
3. Definido
4. Quantitativamente Gerenciado
5. Otimizado

Six Sigma

Metodologia para melhoria de processos e redução de defeitos

Define
Measure
Analyze
Improve
Control

TQM

Gestão da Qualidade Total

  • Foco no cliente
  • Envolvimento de todos
  • Melhoria contínua
  • Decisões baseadas em dados

Agile

Metodologia ágil com foco em qualidade

  • Entregas incrementais
  • Feedback contínuo
  • Testes automatizados
  • Refatoração

Clean Code e Boas Práticas

Princípios do Clean Code

Legibilidade

Código deve ser fácil de ler e entender

Simplicidade

Soluções simples são preferíveis

Responsabilidade Única

Cada função/classe deve ter uma responsabilidade

DRY

Don't Repeat Yourself - evitar duplicação

Boas Práticas

  • Nomenclatura significativa
  • Funções pequenas e focadas
  • Comentários quando necessário
  • Tratamento adequado de erros
  • Testes unitários abrangentes

DevOps e Qualidade

Benefícios do DevOps para Qualidade

Integração Contínua

Detecção precoce de problemas

Entrega Contínua

Releases frequentes e confiáveis

Monitoramento

Visibilidade em tempo real

Automação

Redução de erros manuais

Práticas DevOps

  • Testes automatizados em pipeline
  • Infraestrutura como código
  • Monitoramento e logging
  • Deployment automatizado
  • Feedback rápido

Ciclo de Vida e Qualidade

Qualidade em Cada Fase

Requisitos

  • Especificação clara
  • Critérios de aceitação
  • Rastreabilidade

Design

  • Padrões arquiteturais
  • Revisões de design
  • Modelagem

Implementação

  • Padrões de codificação
  • Revisão de código
  • Testes unitários

Testes

  • Estratégia de testes
  • Automação
  • Cobertura adequada

Manutenção

  • Monitoramento
  • Refatoração
  • Evolução controlada

Atividades Práticas

Exercício 1: Análise de Código

Avalie um trecho de código usando as características de qualidade da ISO 25010

Critérios: Manutenibilidade, Legibilidade, Eficiência

Exercício 2: Métricas de Qualidade

Calcule métricas de qualidade para um projeto de software

Métricas: Complexidade Ciclomática, Cobertura de Testes, Densidade de Defeitos

Exercício 3: Plano de Qualidade

Elabore um plano de garantia de qualidade para um projeto

Componentes: Objetivos, Processos, Ferramentas, Métricas

Projeto Final

Implementação de um sistema de qualidade completo

Entregáveis: Documentação, Implementação, Relatório de Qualidade

Conclusões

Importância da Qualidade

A qualidade de software é fundamental para o sucesso de produtos e organizações de tecnologia

Abordagem Sistemática

A ISO/IEC 25010 fornece uma base sólida para avaliação e melhoria da qualidade

Integração de Práticas

DevOps, Clean Code e metodologias ágeis complementam os princípios de qualidade

Melhoria Contínua

A qualidade deve ser um processo contínuo, não um evento pontual

Principais Takeaways

  • Qualidade deve ser considerada desde o início do projeto
  • Métricas e ferramentas são essenciais para objetividade
  • Toda a equipe deve estar envolvida na garantia de qualidade
  • Investimento em qualidade reduz custos a longo prazo

Referências

ISO/IEC 25010:2011 - Systems and software engineering - Systems and software Quality Requirements and Evaluation (SQuaRE) - System and software quality models
Sommerville, I. (2016). Software Engineering. 10th Edition. Pearson.
Pressman, R. S. (2014). Software Engineering: A Practitioner's Approach. 8th Edition. McGraw-Hill.
Martin, R. C. (2008). Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall.
CMMI Product Team (2010). CMMI for Development, Version 1.3. Software Engineering Institute.
SonarSource (2024). SonarQube Documentation. https://docs.sonarqube.org/

Contato

Para dúvidas sobre este material, entre em contato através dos canais oficiais da disciplina.