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
Cobertura de Testes
Percentual do código exercitado pelos testes
Complexidade Ciclomática
Medida da complexidade estrutural do código
Tempo de Resposta
Tempo entre solicitação e resposta do sistema
Disponibilidade
Percentual de tempo que o sistema está operacional
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
Six Sigma
Metodologia para melhoria de processos e redução de defeitos
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
Exercício 2: Métricas de Qualidade
Calcule métricas de qualidade para um projeto de software
Exercício 3: Plano de Qualidade
Elabore um plano de garantia de qualidade para um projeto
Projeto Final
Implementação de um sistema de qualidade completo
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
Contato
Para dúvidas sobre este material, entre em contato através dos canais oficiais da disciplina.