A qualidade de software é uma área de conhecimento da engenharia de software que objetiva garantir a qualidade do software através da definição e normatização de processos de desenvolvimento. Apesar dos modelos aplicados na garantia da qualidade de software atuar principalmente no processo, o principal objetivo é garantir um produto final que satisfaça às expectativas do cliente, dentro daquilo que foi acordado inicialmente. A qualidade do produto em si está fortemente relacionada à qualidade do processo utilizado para sua construção. A definição e o uso dos processos de software envolve uma complexa inter-relação de fatores organizacionais, culturais, tecnológicos e econômicos que dificultam a garantia da qualidade do mesmo. Alguns modelos de qualidade de software também são citados por Pressman (2005). Há o que McCall e Cavano (1978) sugerem como métricas para qualidade de software. Conhecido como Fatores da Qualidade, estes fatores avaliam o software em três pontos distintos: Transição do Produto, Revisão do Produto e Operação do Produto. O SWEBOK divide a qualidade de software em três tópicos e cada tópico é dividido em subdivido em atividades:
Fundamentos de qualidade de software:
Cultura e ética de engenharia de software
Valores e custos de qualidade
Modelos e características de qualidade
Melhoria da qualidade
Gerência do processo de qualidade de software:
Garantia de qualidade de software
Verificação e validação
Revisões e auditorias
Considerações práticas:
Requisitos de qualidade para aplicações
Caracterização de defeitos
Técnicas de gerência de qualidade de software
Medidas de qualidade de software.
Conceitos
Qualidade: Do ponto de vista do desenvolvedor deve associar a concepção de que o software atenda as necessidades do cliente. Do ponto de vista do cliente deve associar ao valor, à utilidade do software e ao cumprimento dos requisitos.
Funcionalidade: Atributos, funções e propriedades específicas de um software que satisfazem as necessidades explícitas ou implícitas.
Requisitos de Qualidade
Requisitos de qualidade é um tópico por si dentro do assunto qualidade. Dentro da ótica desta última, espera-se que os requisitos sejam definidos de maneira a caracterizar completamente o produto a ser construído. Nesse aspecto - e em relação à definição de Brooks - é evidente que as zonas de sombra dentro de uma especificação abrem margem a todo tipo de problemas de avaliação de produtos. Sommerville distingue requisitos funcionais e não funcionais. O modelo internacional mais recente Square, estabelecido pela norma ISO 25000, adota uma classificação um pouco diferente e utiliza uma descrição hierárquica. Dentro dessa descrição, "funcionalidade" é uma das seis divisões iniciais em que se classificam os requisitos de um produto de software. Idealmente, a especificação de requisitos deve permitir que o processo de fabricação do software seja controlado. Isso significa que idealmente a qualidade de produtos intermediários deve poder ser mensurada e que os dados obtidos devem trazer informação que possa levar ao controle de desvios, localização de defeitos e outras ocorrências negativas.
Atividades de Padronização
Qualidade do Produto: ISO/IEC 9126 (AVALIAÇÃO).
Qualidade do Processo: CMM/CMMI, ISO/IEC 12207, ISO/IEC 15504 SPICE.
ISO/IEC 9126
Representa a atual padronização mundial para a qualidade de software e do produto. Baseada em três níveis: Características, Sub-características e Métricas. Cada característica é refinada em um conjunto de sub-características e cada sub-característica é avaliada por um conjunto de métricas. As características são:
Funcionalidade - Satisfaz as necessidades?
Confiabilidade - É imune a falhas?
Usabilidade - É fácil de usar?
Eficiência - É rápido e “enxuto” ?
Manutenibilidade - É fácil de modificar?
Portabilidade - É fácil de usar em outro ambiente?
Outros fatores de Qualidade
Fidedignidade: Até que ponto o software satisfaz seus requisitos – critérios de avaliação: rastreabilidade, completude, consistência.
Testabilidade: Esforço necessário para garantir que o software desempenhe as funções a que se destina – critério: Simplicidade, modularidade, instrumentação, capacidade de auto-descrição.
Integridade: Extensão do controle de modificações ou acessos acidentais – controle de acesso e auditoria de acesso.
Controle da Qualidade de Software versus Garantia da Qualidade de Software
Um dos grandes erros cometidos por pessoas e empresas é confundir os conceitos e aplicação dos termos Controle da Qualidade(Quality Controle) e Garantia da Qualidade(Quality Assurance). Ambos os termos têm propósitos totalmente diferentes.
Abaixo está as diferenças entre Garantia da Qualidade e Controle da Qualidade:
Quality Assurance
1. Garantia da qualidade garante que o processo é definido e apropriado.
2. Metodologia e padrões de desenvolvimento são exemplos de garantia da qualidade.
3. Garantia da qualidade é orientada a processo.
4. Garantia da qualidade é orientada a prevenção.
5. Foco em monitoração e melhoria de processo.
6. As atividades são focadas no inicio das fases no ciclo de vida de desenvolvimento de software.
7. Garantia da qualidade garante que você está fazendo certo as coisas e da maneira correta.
Quality Control
1. As atividades de controle da qualidade focam na descoberta de defeitos em específicos.
2. Um exemplo de controle da qualidade poderia ser: "Os requisitos definidos são os requisitos certos?".
3. Controle da qualidade é orientado a produto.
4. Controle da qualidade é orientado a detecção.
5. Inspeções e garantia de que o produto de trabalho atenda aos requisitos especificados.
6. As atividades são focadas no final das fases no ciclo de vida de desenvolvimento de software.
7. Controle da qualidade garante que os resultados do seu trabalho são os esperados conforme requisitos.