sábado, 28 de março de 2015

[Programação Modular] Qualidade de Software

Conceito

Segundo o dicionário Michaellis, qualidade é o grau de conformidade de algo a um certo padrão. Já a ABNT NBR ISO 9000:2005, que descreve os fundamentos de sistemas de gestão da qualidade, define a qualidade como sendo o "grau no qual um conjunto de características inerentes satisfaz a requisitos".

Desse modo, a qualidade pode ser medida e comparada. No contexto de desenvolvimento de software, a qualidade é medida pelo grau de conformidade em relação aos requisitos definidos pelo cliente. 

A imagem a seguir ilustra as dificuldades em se obter qualidade no desenvolvimento de software:


Além dos objetivos claros que motivam a preocupação com a qualidade (como atender às necessidades do cliente), outros aspectos podem ser observados. Investimentos adequados em qualidade representam redução de custos, tanto na etapa de desenvolvimento, quanto na manutenção e evolução de sistemas. Isto porque uma maior conformidade do sistema com os requisitos definidos pelo cliente implica em um menor número de intervenções para correções e ajustes, bem como facilita a execução de correções e a ampliação de funcionalidades.

Já no contexto da Engenharia de Software, Pressman define qualidade como a "conformidade a requisitos funcionais e de desempenho explicitamente declarados, a padrões de desenvolvimento claramente documentados e a características implícitas que são esperadas de todo software profissionalmente desenvolvido".

Fatores e Padrões de Qualidade

Compreendido o conceito de qualidade, deve-se analisar, então, quais fatores podem ser utilizados para se medir o nível de qualidade de um software. McCall apresenta três grupos de fatores de qualidade: operação, revisão e transição.




Os fatores de operação (ou utilização) compreendem:
  • correção: cumprimento dos requisitos especificados;
  • confiabilidade: entrega das funcionalidades (ou do comportamento) esperado;
  • integridade: controle de acesso e modificação;
  • usabilidade: esforço necessário para uso;

Já os fatores de revisão (ou alteração) compreendem:
  • manutenibilidade: esforço necessário para depuração e correção;
  • flexibilidade: esforço necessário para modificação;
  • testabilidade: esforço necessário para realização de testes;

Por fim, os fatores de transição (ou adaptação) compreendem:
  • portabilidade: esforço necessário para uso do software em plataformas distintas;
  • reusabilidade: capacidade de uso de módulos, ou mesmo segmentos, do software em outros programas;
  • interoperabilidade: esforço necessário para integração com outros softwares.

Os fatores de qualidade podem ser agrupados em dois conjuntos, sob a perspectiva de quem os percebe, o usuário (padrões externos) ou o desenvolvedor (padrões internos). Os fatores de operação são percebidos pelo usuário, enquanto os fatores de revisão e transição são percebidos pelo desenvolvedor.

Já a norma internacional ISO/IEC 9126, é baseada em seis características: funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade.




A característica funcionalidade compreende a capacidade do software de prover funções que atendam às necessidades explícitas e implícitas e abrange as seguintes subcaracterísticas:

  • adequação: capacidade de prover um conjunto apropriado de funções para tarefas e objetivos determinados;
  • acurácia: capacidade de prover os resultados (ou efeitos) corretos/acordados;
  • interoperabilildade: capacidade de interagir com outros sistemas;
  • segurança de acesso: capacidade de proteger informações e dados, negar acesso não autorizado e fornecer acesso autorizado;

A característica confiabilidade compreende a capacidade do software de manter um nível de desempenho especificado e abrange as seguintes subcaracterísticas:
  • maturidade: capacidade de evitar falhas decorrentes de defeitos;
  • tolerância a falhas: capacidade de manter um nível de desempenho especificado em caso de defeitos;
  • recuperabilidade: capacidade de recuperar seu nível de desempenho e os dados impactados em caso de falha.

A característica usabilidade compreende a capacidade do software ser compreendido, aprendido, operado e atraente ao usuário e abrange as seguintes subcaracterísticas:
  • inteligibilidade: capacidade de o usuário compreender se o software é adequado (a suas necessidades) e como ele pode ser usado;
  • apreensibilidade: capacidade de possibilitar ao usuário aprender sua aplicação;
  • operacionalidade: capacidade de possibilitar ao usuário operá-lo e controlá-lo;
  • atratividade: capacidade de ser atraente ao usuário.

A característica eficiência compreende a capacidade do software apresentar desempenho adequado, relativo à quantidade de recurso usados, e abrange as seguintes subcaracterísticas:
  • comportamento em relação ao tempo: capacidade de fornecer tempo de resposta e processamento ou taxa de transferência apropriados;
  • utilização de recursos: capacidade de usar tipos e quantidade apropriadas de recursos;

A característica manutenibilidade compreende a capacidade do software de ser corrigido, melhorado ou adaptado e abrange as seguintes subcaracterísticas:
  • analisibilidade: capacidade de permitir o diagnóstico de falhas e a identificação das partes a serem reparadas;
  • modificabilidade: capacidade de permitir a implementação de uma modificação;
  • estabilidade: capacidade de evitar efeitos inesperados decorrentes de uma modificação;
  • testabilidade: capacidade de permitir sua validação, após implementada uma modificação.

A característica portabilidade compreende a capacidade do software de ser transferido de um ambiente para outro e abrange as seguintes subcaracterísticas:
  • adaptabilidade: capacidade de ser adaptado para diferentes ambientes;
  • capacidade para ser instalado: capacidade de ser instalado em um ambiente específico;
  • coexistência: capacidade de coexistir com outros softwares independentes e compartilhar recursos comuns;
  • capacidade para substituir: capacidade de substituir outro software com o mesmo propósito e no mesmo ambiente

Todos as características abrangem ainda a subcaracterística conformidade, que compreende a capacidade de estar de acordo com normas, convenções ou regulamentações legais relacionadas ao fator.

Métricas

Métricas estão associadas ao software (ou processo) e permitem medir uma subcaraterística, ou seja, quantificar valores para avaliar a qualidade. Assim é possível comparar dois softwares quanto a um padrão de qualidade específico.

Pode ser difícil relacionar métricas e padrões de qualidade:



Qualidade Necessária por Tipo de Software

Cada tipo de software apresenta um níveis de qualidade desejada para cada fator de qualidade. Desse modo, uma aplicação para gestão de locadoras irá requerer menor eficiência que um sistema embarcado utilizado em satélites.



Anti-fatores de Qualidade

Assim como se definem os aspectos desejáveis de um software para que os requisitos do cliente sejam atendidos, é possível definir os aspectos indesejáveis chamados de anti-fatores de qualidade. Como exemplo, podemos citar as seguintes características:

  • rigidez: grande interdependência entre módulos do software;
  • imobilidade: incapacidade de reutilização.
Qualidade no Desenvolvimento


Uma abordagem para análise da qualidade no desenvolvimento envolve a avaliação das habilidades do programador no que tange ao projeto (reúso de código, adoção de padrões de projeto, qualidade da documentação, execução de testes, domínio de ferramentas e linguagens), à depuração (identificação de erros, otimização de desempenho) e ao trabalho em grupo (estimativas de esforço, uso de código de terceiros).

No entanto, de um modo geral, a qualidade de um processo de desenvolvimento de software pode ser medida por seu nível de maturidade. Neste contexto, o Modelo de Maturidade em Capacitação e Integração - CMMI apresenta-se como um modelo de referência baseado nas melhores práticas para desenvolvimento e manutenção de produtos.




Por sua relevância, o CMMI será tratado neste blog em um conjunto de artigos específicos.

Garantia de Qualidade

A Garantia de Qualidade de Software (SQA-Software Quality Assurance) é definida por Sommerville como sendo um arcabouço para se atingir a qualidade de um software. Já Pressman a define como sendo um padrão sistemático e planejado de ações exigidas para garantir a qualidade de um software.

Assim, a SQA visa garantir que os requisitos especificados, de produto e de processo, foram atendidos.

Para tal, os seguintes aspectos são observados:
  • Aplicação de métodos, técnicas e ferramentas.
  • Aplicação de padrões de produto (componentes do software) e processo (desenvolvimento do software).
  • Controle de alterações.
  • Medições de qualidade.
  • Anotações e manutenção de registros.

Em linhas gerais, a garantia de qualidade permite comparar o que está sendo feito com o que deveria estar sendo feito, permitindo a eliminação dessa diferença.

Nenhum comentário:

Postar um comentário