Skip to content

Plano de Qualidade do Produto

Versionamento

Data Versão Descrição Autor(es)
27/11/2022 0.1 Criação do documento Ítalo Alves
27/11/2022 1.0 Adição dos tópicos de introdução e objetivos do plano João Moura
27/11/2022 1.1 Adição dos objetivos de qualidade e tópico sobre verificação e validação João Moura
27/11/2022 1.2 Adição tópico inicial de métricas e referências João Moura
28/11/2022 1.3 Adição dos tópicos de Testes e Controle de Código Ítalo Alves
29/11/2022 1.4 Adição dos tópicos de Métricas, Ferramentas e Coleta Ítalo Alves
07/12/2022 1.4.1 Revisão e correção ortográfica Rafael Ramos

Introdução

Não só Escopo, Tempo e Custo influenciam no gerenciamento de projetos de software, mas também os atributos de qualidade. Segundo ISO 25010 (2011) [1], "qualidade é a totalidade de características e critérios de um produto ou serviço que exercem suas habilidades para satisfazer às necessidades declaradas ou envolvidas", mostrando dessa forma a importância dessa característica para o gerenciamento do projeto.

Objetivos do Plano de Qualidade

Para entender melhor o planejamento da qualidade no projeto, esse documento visa, portanto, especificar procedimentos, técnicas e ferramentas que serão utilizadas para que os requisitos de qualidade sejam contemplados durante o desenvolvimento do projeto. Para mensurar e acompanhar essa evolução de qualidade serão utilizadas, em especial, métricas, que corroboram em uma avaliação quantitativa.

Com isso, definem-se os principais objetivos desse documento, sendo eles:

  • Definir os objetivos da qualidade;
  • Apresentar maneiras para atingir os objetivos;
  • Selecionar e utilizar métricas para a aferição;
  • Interpretar os resultados do uso das métricas;
  • Especificar procedimentos, técnicas e ferramentas utilizadas.

Objetivos de qualidade

Seguindo os objetivos propostos nas ISO 25010 de 2011, os pontos focais da análise de qualidade do projeto serão: a qualidade interna e externa e a qualidade de uso.

  • A qualidade interna e externa tem como principal objetivo avaliar o produto, através de 6 características principais (Funcionalidade, Confiabilidade, Usabilidade, Eficiência, Manutenabilidade e Portabilidade), divididas em diversas subcaracterĩ́sticas. Essas subcaracterísticas são manifestadas externamentes quando o software é utilizado, sendo resultantes de atributos internos do produto.

  • Por sua vez, a qualidade de uso especifica apenas 4 principais características (Eficácia, Produtividade, Segurança e Satisfação), obtidas pela combinação das 6 características de qualidade (interna e externa) definidas previamentes pela ISO.

Verificação e validação

Entendendo os objetivos de qualidade que desejam ser atendidos no projeto, parte-se para a definição de como os mesmos serão atingidos. Para isso, as técnicas de verificação e validação podem ser utilizadas, em específico três delas foram selecionadas inicialmente para a sua utilização:

  • Análise estática do código: Essa primeira técnica envolve a utilização de ferramentas de análise estática de código para a obtenção de métricas que podem ser avaliadas e quantificadas. A ferramenta Sonar Cloud foi selecionada para realizar essa ação, gerando informações importantes para a gerência de qualidade do projeto.

  • Testes automatizados: Além da análise estática, a documentação por testes automatizados (unitários e de integração), também foi utilizada para a realização do gerenciamento. Por meio dessa técnica, a equipe consegue validar não apenas os caminhos esperados, mas também situações de erros que são importantes de serem tratados.

  • Validações com os donos do projeto: Por fim, uma validação que não envolve o contato direto com linhas de código é a validação com os donos/usuários do projeto. Essa propõe que através de reuniões semanais, seja validado o que já está pronto e com isso decisões sobre o rumo do produto (priorizações) sejam tomadas mais facilmente.

Padrões, práticas, convenções e métricas

A existência de padrões de software, tem garantido cada vez mais qualidade no desenvolvimento do produto, já que conseguem identificar as melhores práticas. Com isso, a utilização de métricas permite a identificação de padrões de código que não são desejáveis no produto final, pois não seguem padrões previamente definidos. Apesar disso, é importante ressaltar que mesmo essas métricas serem universalmente aplicáveis, tudo depende dos objetivos de qualidade esperados no produto.

ISOs e Modelos de Qualidade

Como principal ISO e modelo utilizados no projeto, pode-se citar:

  • NBR - ISO/IEC 25010 [1]
  • Modelo de Qualidade Q-Rapids [2]

Além disso, os seguintes modelos podem ser citados como bibliografia:

  • QUAMOCO [3]
  • SQuale
  • QATCH
  • QuASE

Métricas

Para medir a qualidade do software, deve-se determinar quais características medir e como medir (Boehm, 1981) [4]. Portanto, utilizando-se das métricas é possível derivar as subcaracterísticas e consequentemente as características do produto avaliado, indicando sua qualidade, avaliando sua produtividade e aferindo resultados que podem ser decisivos para o rumo do projeto.

Para tanto, as seguintes métricas [5] foram definidas para o projeto:

Métrica Descrição
Files Quantidade de arquivos de código
Functions Quantidade de funções no código
Complexity Complexidade ciclomática
Comment Lines Density Densidade (%) de linhas comentadas
Duplicated Lines density Densidade (%) de linhas duplicadas
Coverage Cobertura de código pelos testes
Ncloc Quantidade de linhas de código
Tests Testes unitários e de integração
Test Errors Teste que possuem erros
Test Failures Testes que falharam
Test Execution Time Tempo de execução dos testes
Security Rating Avaliação de segurança de falhas e vulnerabilidades

Métricas para o produto

Com os valores coletados das métricas, temos um indicativo sobre a qualidade do produto. Dessa forma, é possível definir valores mínimos aceitáveis para cada métrica, fazendo com que o produto atenda pelo menos esses indicativos. Para definir os valores das métricas aceitáveis selecionadas, para a qualidade interna, usamos como base as métricas definidas no Q-rapids e SonarCloud indicadas abaixo:

Metrica Valor
Complexity até 10
Comment Lines Density (%) até 30%
Duplicated Lines Density (%) até 5%
Coverage acima de 80%
Test Failures 0
Test Errors 0
Security Rating 0 (A)
Satisfação do usuário acima de 3

Testes

Testes de software é um conjunto de processos com os quais se planeja validar um sistema ou aplicação, em momentos diferentes, para verificar seu correto funcionamento. São uma série de procedimentos que visam encontrar possíveis bugs, reportar erros, identificar problemas de usabilidade, bem como assegurar que todos os requisitos solicitados pelo cliente sejam atendidos. [6]

Alguns tipos de testes de software:

  • Teste de Unidade: É utilizado para validar se um pedaço do código está funcionando corretamente;
  • Teste de Integração: É utilizado para verificar a integração correta entre os diferentes componentes;
  • Teste de Caixa-Branca: Garante a análise de todos os caminhos independentes de cada módulo, programa ou método;
  • Teste Caixa-Preta: É utilizado para verificar todas as entradas e saídas desejadas.

Ferramentas, técnicas e metodologias

  • Pytest: Framework de testes para Python;
  • Jest: Framework de testes para TypeScript;
  • ESLint: Ferramenta de verificação de código, que garante que o código esteja de acordo com os padrões encontrados no ECMAScript;
  • Prettier: Ferramenta formatadora de código;
  • Codecov: Ferramenta que verifica cobertura de código;
  • SonarCloud: Ferramenta de varredura de código para analisar o código de acordo com as regras e métricas definidas.

Controle de código

O controle do código-fonte (ou controle de versões) é a prática de monitoramento e gerenciamento de alterações no código. Para garantir os procedimentos de qualidade, estão sendo realizadas tarefas automatizadas, como: documentação, controle de versão, controle de código, testes automatizados, controle de commits e outros.

Coleta e manutenção

O objetivo do processo de Manutenção de sistema de software é modificar o produto de sistema/software depois de liberado, para corrigir falhas, melhorar desempenho ou outros atributos ou adaptar às mudanças do ambiente.

Existem algumas categorias de manutenção:

  • Manutenção Adaptativa: Adaptar o software ao ambiente;
  • Manutenção Corretiva: Identificar e Corrigir Erros;
  • Manutenção Preventiva: Melhorar a manutenibilidade ou confiabilidade futuras;
  • Manutenção Perfectiva: Atender pedidos do usuário para modificar funções existentes, incluir novas e efetuar melhoramentos gerais.

Referência

[1] ISO/IEC 25010. ISO 25000. Software and data quality. 2011. Disponível em: https://iso25000.com/index.php/en/iso-25000-standards/iso-25010. Acesso em 21 jan. 2023.

[2] Quality-aware Rapid Software Development Project: The Q-Rapids Project. FRANCH X.; LOPEZ L.; FERNÁNDEZ S. M.; ORIOL M.; RODRÍGUEZ P.; TRENDOWICZ A.

[3] A Quality Model for Actionable Analytics in Rapid Software Development. FERNÁNDEZ S. M.; JEDLITSCHKA A.; GUZMÁN L.; VOLLMER A. M. Kaiserslautern, Alemanha.

[4] Software Engineering Economics. BOEHM B. 1981.

[5] Metric Definitions. SonarQube. Disponível em: https://docs.sonarqube.org/latest/user-guide/metric-definitions/. Acesso em: 27 nov. 2022.

[6] Importância dos testes de software na qualidade do sistema. TreinaWeb. Disponível em: https://www.treinaweb.com.br/blog/importancia-dos-testes-de-software-na-qualidade-do-sistema. Acesso em: 28 nov. 2022.