Qualidade de Software
Qualidades de software
- Qualidades de software
- Atividades para produção de um software de Qualidade
- Garantia de Qualidade e Controle de Qualidade
- Verificação e Validação
- ISO 9126
Qualidade de software pode ser definida como: uma gestão de qualidade efetiva aplicada de modo a criar um produto útil que forneça valor mensurável para aqueles que o produzem e para aqueles que o utilizam. —Roger S. Pressman, Bruce R. Maxim, “Engenharia de software”, p. 312. Portanto Gerenciamento de qualidade de software se preocupa em estabelecer padrões e procedimentos para o desenvolvimento de software com qualidade. Algumas características de qualidade desejadas a um produto são: interoperabilidade, Conformidade, tolerância a falhas, usabilidade.
- interoperabilidade: capacidade do produto interagir com outros sistemas.
- Conformidade: estar de acordo com normas, convenções, regulamentos previstos em lei, etc.
- tolerância a falhas: capacidade do produto manter os seus níveis de desempenho mesmo na presença de defeitos.
- Usabilidade: Capacidade do produto ser amigável e compreensível ao usuário.
Atividades para produção de um software de Qualidade
Segundo PRESSMAN (Engenharia de Software. Uma Abordagem Profissional. 9º Edição. 2021) deve-se realizar 4 atividades para produzir um software de qualidade:
- Utilizar processos e práticas comprovadas de engenharia de software
- Possuir um gerenciamento de projetos consistente
- Ter um controle de qualidade
- Possuir uma infraestrutura para garantir a qualidade
Garantia de Qualidade e Controle de Qualidade
Com o objetivo de garantir qualidade de software duas atividades são bastante utilizadas: Garantia de Qualidade , Controle de Qualidade. Garantia de qualidade é focada no processo de desenvolvimento de software e visa prevenir defeitos. O controle de qualidade é focado no produto e visa detectar defeitos.
Um exemplo de Garantia de Qualidade é a utilização de métodos ágeis que através de feedbacks mais frequentes aumenta a garantia de que um produto realmente esteja de atendendo o cliente.
Um exemplo de Controle de Qualidade é a utilização de um continuos integrator que pode detectar defeitos no software a cada novo incremento
Verificação e Validação
A validação e verificação é um processo continuo no desenvolvimento de software, que possui dois objetivos:
Descobrir defeitos no sistema (verificação)
avaliar se o sistema é útil e adequado em uma situação operacional (validação)
Através desse processo buscamos aumentar o nível de confiabilidade do software.
Verificação
Are we building the product right ?
Estamos construído o produto de forma correta ?
Verificação refere-se ao conjunto de atividades que garantem que o software implementa corretamente as funções especificadas. Uma atividade muito comum é a inspeção, como a revisão de código, ferramentas de analises sintáticas e testes, automatizados ou não, que visam a verificar se o software atende as especificações.
Validação
Are we building the right product ?
Estamos construindo o produto certo ?
Validação refere-se ao conjunto de atividades que garantem que o software construído implementa o que o cliente realmente desejava. Construindo especificações do sistema validados pelo cliente. Exemplo de atividades de validação são testes de aceitação, revisões feitas pelos usuários.
ISO 9126
ISO 9126 é uma norma versa sobre as características que definem um produto de software de qualidade. Ela é dividia em 4 partes:
- ISO 9126-1: Modelo de Qualidade
- ISO 9126-2: Métricas Externas
- ISO 9126-3: Métricas Internas
- ISO 9126-4: Métricas de Qualidade em Uso
O norma define três tipos de visão de qualidade mensuráveis: interna, externa e de uso. No entanto, a escola dessas métricas não foram definidas, portanto subjetivas. Exemplo de escalas são:
- escalas binárias: Insatisfatório ou Satisfatório
- escalas discretas não binárias:
- Ultrapassa os requisitos
- No intervalo
- Mínimo aceitável
- inaceitável
Métricas de Qualidade de software
As métricas de qualidade de software são medidas quantitativas que são utilizadas para avaliar diversos aspectos do desenvolvimento, manutenção e desempenho do software. Elas fornecem uma maneira objetiva de avaliar a qualidade do software ao longo do ciclo de vida do projeto. As métricas de qualidade podem ser aplicadas em diferentes áreas, incluindo código-fonte, processo de desenvolvimento, testes, desempenho e usabilidade. Tanto a qualidade externa e interna possui os mesmos sub tipos de qualidade: funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade, portabilidade.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Qualidade interna e externa]
fun[funcionalidade]
con[confiabilidade]
usa[usabilidade]
efi["eficiência"]
manu[manutenibilidade]
port[portabilidade]
root --- fun
root --- con
root --- usa
root --- efi
root --- manu
root --- port
Qualidade Interna
A qualidade Interna especifica o nível de qualidade sob o ponto de vista de produtos internos. Observa-se a qualidade dos produtos intermediários como a qualidade dos modelos, código fonte, documentos e etc.
Qualidade Externa
É entendido como qualidade externa todas as métricas retiradas do software em execução. Usualmente essas métricas são extraídas durante uma simulação em um ambiente de testes com dados fictícios.
Funcionalidade (interna/Externa)
Funcionalidade é a capacidade de um software de prover funções que atendam ás necessidades do usuário, sejam essas necessidades implícitas ou explícitas. A funcionalidade deve ser medida quando o software estiver sendo utilizado sob condições especificas. Funcionalidade foi dividia em quatro sub características: adequação, acurácia, segurança de acesso, conformidade relacionada á funcionalidade.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Funcionalidade]
ade[adequação]
acu[acurácia]
seg[segurança de acesso]
con[conformidade]
root --- ade
root --- acu
root --- seg
root --- con
Adequação
Adequação é a capacidade do produto prover o conjunto apropriado de funções para tarefas e objetivos do usuário especificados.
Acurácia
Acurácia é capacidade do software prover, com o grau de precisão necessário resultados e efeitos corretos ou conforme acordados.
Segurança de Acesso
Segurança de Acesso é Capacidade do software proteger informações e dados tal que pessoas ou sistemas não autorizadas não possam: ler, modificar ou apagar e que não seja negada as pessoas autorizadas o acesso ao sistema.
Conformidade relacionada á funcionalidade
Conformidade relacionada á funcionalidade é a capacidade do software estar conforme a lei, normas ou convenções relacionadas a funcionalidade.
Confiabilidade (Interna e Externa)
Confiabilidade é a capacidade do software de manter um nível de desempenho quando usado em condições específicas. Confiabilidade possui quatro subcaracterísticas: maturidade, tolerância a falhas, recuperabilidade, conformidade relacionada á confiabilidade.
Perceba que para mensurar confiabilidade tem que ter adequação, ou seja, dado que um software possui a funcionalidade desejada, o quão confiável ele é ?
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Confiabilidade]
id1[Maturidade]
id2[Tolerância a falhas]
id3[Recuperabilidade]
id4[Conformidade relacionada á Confiabilidade]
root --- id1
root --- id2
root --- id3
root --- id4
Maturidade
Maturidade é a capacidade do software de evitar falhas decorrentes de feitos no software.
O quão bugado esse software é ?
Tolerância a falhas
Tolerância a falhas é a capacidade do software de manter um nível de desempenho especificado em casos de defeitos no software ou de violação de sua interface especificada.
Recuperabilidade
Recuperabilidade é a capacidade do software de restabelecer seu nível de desempenho especificado e recuperar os dados diretamente afetados no caso de uma falha.
Conformidade relacionada á Confiabilidade
Conformidade relacionada á funcionalidade é a capacidade do software estar conforme a lei, normas ou convenções relacionadas a confiabilidade.
Usabilidade (interna/ externa)
Usabilidade é a capacidade do software ser compreendido, aprendido, operado e atraente ao usuário.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Usabilidade]
id1[Inteligibilidade]
id2[Apreensibilidade]
id3[Operacionalidade]
id4[Atratividade]
id5[Conformidade relacionada á Usabilidade]
root --- id1
root --- id2
root --- id3
root --- id4
root --- id5
Inteligibilidade
Inteligibilidade é a capacidade do software de possibilitar ao usuário compreender se o software é apropriado e como ele pode ser usado para tarefas e condições de uso específicas.
Apreensibilidade
Apreensibilidade é a capacidade do software de possibilitar ao usuário aprender sua aplicação.
Operacionalidade
Operacionalidade é a capacidade do software possibilitar ao usuário operá-lo e controlá-lo.
Atratividade
Atratividade é a capacidade do software de ser atraente ao usuário.
Conformidade relacionada á Usabilidade
Conformidade relacionada á funcionalidade é a capacidade do software estar conforme a lei, normas ou convenções relacionadas a usabilidade.
Eficiência (Interna e externa)
Eficiência é a capacidade do software de apresentar desempenho apropriado, relativo a quantidade de recursos usados.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Eficiência]
id1[Comportamento em relação ao tempo]
id2[Utilização de recursos]
id3[Conformidade relacionada á Eficiência]
root --- id1
root --- id2
root --- id3
Comportamento em relação ao tempo
Comportamento em relação ao tempo é a capacidade do software de fornecer tempos de resposta e de processamento, além de taxas de transferência, apropriados, quando o software executa suas funções, sob condições estabelecidas.
Utilização de recursos
Utilização de recursos é a capacidade do software de usar tipos e quantidade apropriados de recursos, quando o software executa suas funções sob condições estabelecidas.
Conformidade relacionada á Eficiência
Conformidade relacionada á funcionalidade é a capacidade do software estar conforme a lei, normas ou convenções relacionadas a eficiência.
Manutenibilidade (Interna ou Externa)
Manutenibilidade é a capacidade do software de ser modificado. As modificações podem incluir correções, melhorias ou adaptações devido a mudanças no ambiente e nos seus requisitos ou especificações funcionais.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Manutenibilidade]
id1[Analisabilidade]
id2[Modificabilidade]
id3[Estabilidade]
id4[Testabilidade]
id5[Conformidade relacionada á Manutenibilidade]
root --- id1
root --- id2
root --- id3
root --- id4
root --- id5
Analisabilidade
Analisabilidade é a capacidade do software de permitir o diagnostico de deficiências ou causas de falhas no software, ou a identificação de partes a serem modificadas.
Modificabilidade
Modificabilidade é a capacidade do software de permitir que uma modificação especificada seja implementada.
Estabilidade
Estabilidade é a capacidade do software de evitar efeitos inesperados decorrentes de modificações no software.
Testabilidade
Testabilidade é a capacidade do software de permitir que o software, quando modificado, seja validado.
Conformidade relacionada a Manutenibilidade
Conformidade relacionada á funcionalidade é a capacidade do software estar conforme a lei, normas ou convenções relacionadas a manutenibilidade.
Portabilidade (Interna/Externa)
Portabilidade é a capacidade de software de ser transferido de um ambiente para outro.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Portabilidade]
id1[Adaptabilidade]
id2[Capacidade para ser instalado]
id3[Coexistência]
id4[Capacidade para substituir]
id5[Conformidade relacionada á Portabilidade]
root --- id1
root --- id2
root --- id3
root --- id4
root --- id5
Adaptabilidade
Adaptabilidade é a capacidade de um software de adaptado para diferentes ambientes especificados, sem necessidade de aplicação de outras ações ou meios além daqueles fornecidos para essa finalidade pelo software.
Capacidade para ser Instalado
Capacidade para ser Instalado é a capacidade do software de ser instalado em um ambiente.
Coexistência
Coexistência é a capacidade do software coexistir com outros softwares independentes, em um ambiente comum, compartilhando recursos comuns.
Capacidade para substituir
Capacidade para substituir é a capacidade do software de ser usado em substituição a outro produto de software especificado com o mesmo propósito e no mesmo ambiente.
Conformidade relacionada a Portabilidade
Conformidade relacionada á funcionalidade é a capacidade do software estar conforme a lei, normas ou convenções relacionadas a portabilidade.
Qualidade em uso
A visão de qualidade do produto sobre a perspectiva do usuário medida quando o produto está rodando em produção. A unidade de medida é o quanto o usuário está satisfeito, atendido com o produto. A qualidade em uso se divide em quatro sub tipos: eficácia, produtividade, segurança, satisfação.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TB
root[Qualidade em Uso]
efi[eficácia]
pro[produtividade]
seg[segurança]
sat[satisfação]
root --- efi
root --- pro
root --- seg
root --- sat
Eficácia
Eficácia é a capacidade do software de permitir que usuários atinjam metas especificadas com acurácia e completude, em um contexto de uso especificado.
Produtividade
Produtividade é a capacidade do software de permitir que seus usuários empreguem quantidade apropriada de recursos em relação á eficácia obtida, em um contexto de uso especificado.
Segurança
Segurança é a capacidade do software de apresentar níveis aceitáveis de riscos de danos a pessoas negócios, software, propriedades e ao ambiente, em um contexto de uso especificado.
Satisfação
Satisfação é a capacidade do software de satisfazer usuários, em um contexto de uso especificado.