Qualidade de software

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Segundo o SWEBOK 3.0, qualidade de software é uma área do conhecimento da engenharia de software que pode se referir a: "as características desejadas de produtos de software, a extensão em que um produto de software em particular possui essas características e aos processos, ferramentas e técnicas que são usadas para garantir essas características"[1].

Existem muitas definições gerais sobre qualidade que podem ser aplicadas diretamente a qualidade de software. Segundo a norma ISO 9000 (versão 2000), qualidade é "o grau em que um conjunto de características inerentes a um produto, processo ou sistema cumpre os requisitos inicialmente estipulados para estes". Já Juran, um dos principais autores sobre o assunto, tem duas definições para qualidade "a característica dos produtos que atendem as necessidades dos clientes, e, assim, proporcionar a satisfação do mesmo[2]" e "qualidade é a ausência de deficiências[2]"

A definição específica sobre qualidade de software mais difundida é a encontrada nas normas ISO/EIC 9126-1 e ISO/IEC 25010, para as quais qualidade é "a capacidade do produto de software em satisfazer as necessidades implícitas e explícitas quando usado em condições específicas".

A premissa básica dos estudos de qualidade é que a qualidade do produto depende da qualidade do processo de desenvolvimento[3], desta forma, é comum que a busca por um software de maior qualidade passe necessariamente por uma melhoria no processo de desenvolvimento. Isso faz com que parte considerável da pesquisa em garantia da qualidade de software trate principalmente de estudos relacionados a qualidade dos processos de desenvolvimento de software, sendo que os principais resultados nessa área são os modelos CMMI e MPS.Br.

Principais tópicos[editar | editar código-fonte]

Para um melhor entendimento e estudo, o SWEBOK 3.0 divide a qualidade de software em quatro tópicos, sendo os três primeiros tópicos subdivididos em atividades, da seguinte forma:

  • 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 de software
    • Segurança de Software (Software Safety)
  • Processos de gerência 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 de software
    • Caracterização de defeitos
    • Técnicas de gerência de qualidade de software
    • Medidas de qualidade de software
  • Ferramentas de Qualidade de Software

Ainda segundo o SWEBOK, a qualidade de software é um tema tão importante que é encontrado, de forma ubíqua, em todas as outras áreas de conhecimento envolvidas em um projeto.

É importante notar que o SWEBOK deixa claro que essa área, como nele definida, trata dos aspectos estáticos, ou seja, daqueles que não exigem a execução do software para avaliá-lo, em contraposição à área de conhecimento teste de software, que trata de aspectos dinâmicos.

Muitos autores, porém, consideram testes de software como parte da qualidade de software[4].

Questões de Qualidade e Qualidade de Software[editar | editar código-fonte]

Ao longo do tempo a teoria de qualidade de software foi evoluindo, resultando inclusive na criação dos padrões ISO/EIC 9126 e ISO/IEC 25000. Uma importante contribuição foi a divisão do conceito de qualidade em subconceitos, no caso de software, inicialmente proposto por McCall, Richards e Walters[3].

Uma questão importante é que qualidade é uma relação entre um objeto e um observador. Isso pode ser percebido na primeira definição de Juran que cita o atendimento as necessidades do cliente[2]. Como um software pode ter muitos clientes (ou partes interessadas), fica claro que o que é qualidade para um não necessariamente é qualidade para outro.

Já Garvin[5] apresenta cinco formas de entender qualidade:

  • A definição transcedental: onde qualidade é uma "excelência inata, absoluta e que todos podem reconhecer"[5], sendo semelhante ao conceito de "Qualidade sem um nome"[6] proposta por Christopher Alexander.
  • A definição baseada em produto: onde qualidade é algo que pode ser medido em um objeto.
  • A definição baseada no usuário: onde qualidade é algo ligado ao atendimento das necessidades do usuário.
  • A definição baseada na fabricação: onde qualidade está ligado a produção correta de acordo com os requisitos
  • A definição baseada em valor: onde "um produto de qualidade é aquele que fornece desempenho a um preço aceitável ou conformidade a um custo aceitável"[5]

A principal característica dos estudos de qualidade é a definição de qualidade de forma hierárquica, sendo que o conceito mais geral de qualidade é subdividido, sucessivamente, em características e subcaracterísticas (ou ainda fatores, atributos ou critérios de qualidade)[3][7]. Assim, características mais gerais, como reusabilidade, correção, eficiência e outras podem ser sucessivamente detalhadas até que se alcance uma característica que pode ser medida no software propriamente dito. Por exemplo, a Eficiência de Desempenho do software é uma característica muito genérica, que é subdividada no modelo ISO 25000 em Comportamento de Tempo, Utilização de Recursos e Capacidade. Mesmo essas características precisam ser subdividadas em critérios mensuráveis (como tempo para executar uma função)[7].

A melhoria da qualidade de software é uma forte vertente da qualidade, sendo seu desenvolvimento basicamente realizados em ciclos inspirados no modelo PDCA, como, por exemplo, o CMMI-IDEAL.

Uma polêmica importante está relacionado ao tópico "Good Enough Software", ou Software Bom o Suficiente, que defende que há um momento em que o software pode ser lançado mesmo tendo problemas, porque os benefícios de lançar o produto são muito maiores que os riscos causados pelos problemas conhecidos[3].

Fundamentos de Qualidade de Software[editar | editar código-fonte]

Fundamentos de Qualidade de Software é o primeiro dos 4 tópicos de Qualidade de Software do SWEBOK. Nele são tratados a "discussão e a definição dos aspectos da Qualidade de Software, seus conceitos, características, valores e sua aplicação no software sendo desenvolvido ou em manutenção."[1]

Custo da Qualidade[editar | editar código-fonte]

Uma forte motivação para o foco em qualidade é que o custo relativo de corrigir erros aumenta drasticamente com a evolução do Ciclo de Vida do Software. Segundo Boehm, citado por Pressman[3], há corrigir um erro ou defeito na fase de manutenção do software custa 100 vezes mais que corrigi-lo na fase de requisitos.

Pressman[3] indica os seguintes custos relacionados a qualidade de software, podendo eles ocorrerem tanto na prevenção quanto no tratamento dos problemas:

  • Custos de Prevenção
    • Planejamento da qualidadede
    • Revisões técnicas formais
    • Testes
    • Treinamento
  • Custos de Falha Interna
    • Retrabalho
    • Reparo
    • Modo de análise de falha
  • Custo de Falha Externa
    • Resolução das reclamações
    • Devolução e substituição
    • Suporte
    • Atendimento à garantia Uma lista semelhante pode ser encontrada no SWEBOK.

Modelos e Características de Qualidade de Software[editar | editar código-fonte]

Norma SQuaRE - ISO/IEC 25000[editar | editar código-fonte]

Qualidade de Produto de Sistemas e Software segundo a série ISO/IEC 25000
Qualidade de Produto de Sistemas e Software segundo a série ISO/IEC 25000

A Série ISO/IEC 25000[7], denominada Software product Quality Requirements and Evaluation (SQuaRE), é a mais moderna norma de qualidade de software, sendo organizada da seguinte forma:

  • 2500n: Divisão da gestão da qualidade
  • 2501n: Divisão de modelo de qualidade
  • 2502n: Divisão de medição de qualidade
  • 2503n: Divisão de requisitos de qualidade
  • 2504n: Divisão de avaliação de qualidade
    Qualidade em Uso segundo a série ISO/IEC 25000

Ela define 3 perspectivas de qualidade (ou modelos):

  • Qualidade Externa, uma visão de caixa preta do software
  • Qualidade Interna, uma visão de caixa branca do software
  • Qualidade em Uso, uma visão operacional do software

As figuras ao lado listam os atributos de qualidade de sistemas e software segunda as normas ISO/IEC 25000.

Processos de Gerência de Qualidade de Software[editar | editar código-fonte]

"Um Sistema de Gestão da Qualidade compreende atividades pelas quais uma organização identifica seus objetivos e determina os processos e recursos necessários para alcançar os resultados desejados."[8] Seus princípios são: foco no cliente, liderança, engajamento das pessoas, abordagem de processo, melhoria contínua, tomada de decisão baseada em evidência e gestão dos relacionamentos com as partes interessadas.[8]

Existem quatro subcategorias de Gerência de Qualidade de Software[1]:

  1. Planejamento da Qualidade de Software
  2. Garantia da Qualidade de Software
  3. Controle da Qualidade de Software
  4. Melhoria da Qualidade de Software.

Um processo de gestão de qualidade[9] "Assegura que produtos, serviços e implementações do ciclo de vida de processo atinja os objetivos de qualidade organizacionais e a satisfação do usuário", tendo as seguintes atividades[9]:

  • Gerência da qualidade
  1. Estabelecer padrões, políticas e procedimentos de gestão de qualidade da organização
  2. Estabelecer objetivos e metas de de gestão de qualidade da organização baseado na estratégia de negócio para a satisfação do cliente
  3. Definir autoridade e responsabilidade para a gerência de qualidade são definidos
  4. Monitorar do status da satisfação do usuário
  5. Conduzir revisão periódicas do planos de qualidade de projeto
  6. Monitorar o status da melhoria de qualidade em produtos e serviços
  • Ação corretiva de gestão de qualidade
  1. Tomar ações corretivas adequadas quando os objetivos de gestão de qualidade não são atingidos
  2. Implementar ações corretivas e comunica o resultado através da organização

As técnicas utilizadas para a gestão de qualidade podem ser estáticas, como a análise estática do software, inspeções, revisões e o uso de métodos formais, ou dinâmicas, como o uso de testes ou simulações.

Verificação e Validação[editar | editar código-fonte]

Dentro do contexto de qualidade de software esses termos, conhecidos com V&V, fornecem a organização métodos de avaliar produtos e processos[1]. Em especial, verificação se refere a ver se o sofware foi desenvolvido de acordo com as suas especificações, ou seja, que construímos o software de maneira correta, enquanto validação se refere a garantir que o software atende a seus propósitos, isto é, que construímos o software certo.

Considerações Práticas da Qualidade de Software[editar | editar código-fonte]

Medidas de Qualidade[editar | editar código-fonte]

Modelo de Referência para a Medição de Qualidade De Produto de Software segundo a norma ISO/IEC 25020:2009

A norma ISO/EIC 25020:2009 propõe um modelo de referência para a medição de qualidade de produto de software que propõe que as características e subcaracterísticas de qualidade podem ser indicadas por medidas de qualidade de software, que são por sua vez geradas por funções de medição, que são aplicadas a elementos da medida de qualidade[7].

Ferramentas de Qualidade de Software[editar | editar código-fonte]

Para auxiliar a garantir a qualidade de software existem várias ferramentas, que podem atuar e análises estáticas ou dinâmicas do software.

Entre a grande variedade de ferramentas existentes, é possível caracterizar alguma categorias de análise estática:

  • Ferramentas de apoio a revisões e inspeções
  • Ferramentas de apoio a análise de riscos de segurança
  • Ferramentas de rastreamento de problemas
  • Ferramentas de análise de dados capturados em ambientes de Engenharia de Software.

Qualidade de Software no Brasil[editar | editar código-fonte]

No Brasil existe o Programa Brasileiro da Qualidade e Produtividade em Software, PBQP-Software, cuja principal contribuição é o programa de Melhoria do Processo de Software Brasileiro, MPS.Br, apoiado pelo Softex. Além disso a ABNT nacionaliza as normas internacionais.

Ver também[editar | editar código-fonte]

Referências

  1. a b c d Bourque, Pierre; Fairley, Dick (2014). SWEBOK 3.0 Guide to the Software Engineering Body of Knowledge. [S.l.]: IEEE Computer 
  2. a b c Juran, Joseph M.; Godfrey, A. Blanton (1999). Juran´s Quality Handbook 5th ed. New York: McGraw-Hill 
  3. a b c d e f Pressman, Roger. Software Engineering: A Practitioner´s Approach 7th ed. [S.l.: s.n.] 
  4. Naik, Kshirasagar; Tripathy, Privadarshi (2008). Software Testing and Quality Assurance. Hoboken, New Jersey: Wiley 
  5. a b c Garvin, David A (1984). «What Does "Product Quality" Really Mean?». MIT Sloan Management Review (em inglês) 
  6. Alexander, Christopher (1979). The Timeless Way of Building. [S.l.: s.n.] 
  7. a b c d ABNT NBR ISO/IEC 25020 2009
  8. a b ISO 9000:2015
  9. a b ISO 12207-2008

Bibliografia[editar | editar código-fonte]

  1. AROUCK, O. Avaliação de sistemas de informação: revisão da literatura. Transinformação, v. 13, n. 1, jan./jun., 2001. p. 7-21.
  2. BROOKS, F. P. No Silver Bullet: Essence and Accidents of Software Engineering". Computer, Vol. 20, N. 4, pp 10–19. April, 1987.
  3. KOSCIANSKI, A., Soares, M. S.. Qualidade de Software. Editora Novatec, Segunda Edição, 2007.
  4. MOLINARI, Leonardo. Gerência de Configuração - Técnicas e Práticas no Desenvolvimento do Software, Editora Visual Books, 2007, Florianópolis, 85-7502-210-5.
  5. MOLINARI, Leonardo. Testes de Software - Produzindo Sistemas Melhores e Mais Confiáveis, Editora Èrica, 2006, 3a Edição, São Paulo, 85-7194-959X.
  6. PRESSMAN, R. S. Engenharia de Software. McGraw Hill, 2002.

Ligações externas[editar | editar código-fonte]