# ISO/IEC 9126

ISO/IEC 9126 é uma norma ISO para qualidade de produto de software. Ela define um conjunto de parâmetros com o objetivo de padronizar a avaliação da qualidade de software. Ela se enquadra no modelo de qualidade das normas da família 9000.
A ISO/IEC 9126, sob o título geral "Engenharia de software - Qualidade do produto", consiste nas seguintes partes:
Parte 1: Modelo de qualidade;
Parte 2: Métricas externas;
Parte 3: Métricas internas;
Parte 4: Métricas de qualidade em uso
A norma brasileira correspondente é a NBR 13596, que foi substituída pela NBR ISO/IEC 9126-1 que por sua vez foi substituída pela Norma ISO/IEC 25010:2011.

## Objetivo

Esta parte da NBR ISO/IEC 9126 descreve um modelo de qualidade do produto de software, composto de duas partes: a) qualidade interna e qualidade externa e b) qualidade em uso. A primeira parte do modelo especifica seis características para qualidade interna e externa, as quais são por sua vez subdivididas em subcaracterísticas. Estas subcaracterísticas são manifestadas externamente, quando o software é utilizado como parte de um sistema computacional, e são resultantes de atributos internos do software. Esta parte da NBR ISO/IEC 9126 não apresenta o modelo de qualidade interna e externa além do nível de subcaracterísticas.
A segunda parte do modelo especifica quatro características de qualidade em uso, mas não apresenta o modelo de qualidade em uso além do nível de característica. Qualidade em uso é, para o usuário, o efeito combinado das seis características de qualidade do produto de software.
As características definidas são aplicáveis a todo tipo de software, incluindo programas de computador e dados contidos em firmware. As características e subcaracterísticas fornecem terminologia consistente para tratar de qualidade do produto de software. Elas também fornecem uma estrutura para especificar requisitos de qualidade de software e realizar comparações entre produtos de software.

## Modelo de Processo de Avaliação

O processo pode ser aplicado a cada fase apropriada do ciclo de vida de cada componente de software produto, sendo constituído por três estágios:
Definição dos requisitos da qualidade
É feita a definição das características e sub características em função da área de aplicação do produto de software. E, esta definição deve ser feita antes do início do desenvolvimento do mesmo. Produtos de maior porte devem ser subdivididos em módulos e cada um destes deve ter seus próprios conjuntos de características e sub características.
Preparação da avaliação
Seleção das métricas da qualidade – escolha dos critérios para associar quantificações numéricas para cada um dos atributos. Essas métricas podem variar ao longo do ciclo de desenvolvimento, sem deixar de lado a perspectiva de avaliação do usuário. Os níveis de pontuação são definidos como os resultados quantificados são mapeados, em uma escala com regiões sugeridas pela norma, três para pontuação satisfatória (excelente, bom e razoável) e uma para a pontuação insatisfatória. São definidos também os critérios para fazer o mapeamento das características para valores numéricos.
Avaliação
* Medida – Aplicação das métricas definidas ao produto de software.
* Pontuação – Determinação dos valores de pontuação.
* Avaliação – Determinação do resultado final, em aceitação ou não da qualidade do produto.

## Modelo de Qualidade de Software

A qualidade de um sistema de software pode ser entendida de diversas formas e utilizando diferentes abordagens.
A norma ISO/IEC 9126, ou conjunto de normas que tratam deste assunto no âmbito da ISO, estabelece um modelo de qualidade com os seguintes componentes:
* Processo de desenvolvimento, cuja qualidade afeta a qualidade do produto de software gerado e é influenciado pela natureza do produto desenvolvido;
* Produto, compreendendo os atributos de qualidade do produto (sistema) de software. Estes atributos de qualidade podem ser divididos entre atributos internos e externos. Estes se diferenciam pela forma como são aferidos (interna ou externamente ao produto de software) e em conjunto compõem a qualidade do produto de software em si;
* Qualidade em uso que consiste na aferição da qualidade do software em cada contexto específico de usuário. Esta é, também, a qualidade percebida pelo usuário.

## Modelo de Qualidade da Norma ISO 9126

A norma 9126 foca na qualidade do produto de software, propondo Atributos de Qualidade, distribuídos em seis características principais, com cada uma delas divididas em subcaracterísticas, conforme podemos ver na figura abaixo:
No nível mais alto temos as características de qualidade e nos quadros abaixo as suas subcaracterísticas. Cada característica/subcaracterística compõe um Atributo de Qualidade do software.
Note que em todas as características temos uma subcategoria com o nome de Conformidade. A conformidade é utilizada para avaliar o quanto o software obedece aos requisitos de legislação e todo o tipo de padronização ou normalização aplicável ao contexto.

### Funcionalidade

A capacidade de um software prover funcionalidades que satisfaçam o usuário em suas necessidades declaradas e implícitas, dentro de um determinado contexto de uso.
Suas subcaracterísticas são:
* Adequação: Capacidade do produto de software de prover um conjunto apropriado de funções para tarefas e objetivos do usuário especificados.
* Acurácia: Capacidade do produto de software de prover, com o grau de precisão necessário, resultados ou efeitos corretos ou conforme acordados.
* Interoperabilidade: Capacidade do produto de software de interagir com um ou mais sistemas especificados.
* Segurança: Capacidade do produto de software de proteger informações e dados, de forma que pessoas ou sistemas não autorizados não possam lê-los nem modificá-los e que não seja negado o acesso às pessoas ou sistemas autorizados.
* Conformidade Capacidade do produto de software de estar de acordo com normas, convenções ou regulamentações previstas em leis e prescrições similares relacionadas à funcionalidade.

### Confiabilidade

A capacidade do produto de software de manter um nível de desempenho especificado, quando usado em condições
especificadas.
Suas subcaracterísticas são:
* Maturidade: Capacidade do produto de software de evitar falhas decorrentes de defeitos no software.
* Tolerância a Falhas: Capacidade do produto de software de manter um nível de desempenho especificado em casos de defeitos no software ou de violação de sua interface especificada.
* Recuperabilidade: Capacidade do produto de software de restabelecer seu nível de desempenho especificado e recuperar os dados diretamente afetados no caso de uma falha.
* Conformidade: Capacidade do produto de software de estar de acordo com normas, convenções ou regulamentações relacionadas à confiabilidade.

### Usabilidade

A capacidade do produto de software de ser compreendido, aprendido, operado e atraente ao usuário, quando usado sob condições especificadas.
Note que este conceito é bastante abrangente e se aplica mesmo a programas que não possuem uma interface para o usuário final. Por exemplo, um programa batch executado por uma ferramenta de programação de processos também pode ser avaliado quanto a sua usabilidade, no que diz respeito a ser facilmente compreendido, aprendido, etc. Além disto, a operação de um sistema é uma Interface Humano-Computador (ver IHC) sujeita às avaliações de usabilidade.
Suas subcaracterísticas são:
* Inteligibilidade: Capacidade do produto de 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: Capacidade do produto de software de possibilitar ao usuário aprender sua aplicação.
* Operacionalidade: Capacidade do produto de software de possibilitar ao usuário operá-lo e controlá-lo.
* Proteção frente a erros de usuários: como produto consegue prevenir erros dos usuários;
* Estética/Atratividade: Capacidade do produto atrair um potencial usuário para o sistema, o que pode incluir desde a adequação das informações prestadas para o usuário até os requintes visuais utilizados na sua interface gráfica;
* Acessibilidade: refere-se a prática inclusiva de fazer softwares que possam ser utilizados por todas as pessoas que tenham deficiência ou não. Quando os softwares são corretamente concebidos, desenvolvidos e editados, todos os usuários podem ter igual acesso à informação e funcionalidades;
* Conformidade: Relacionado a capacidade do produto de apresentar normalidade quanto às convenções, guias ou regras/regulamentações relacionadas à usabilidade.

### Eficiência

O tempo de execução e os recursos envolvidos são compatíveis com o nível de desempenho do software.
Suas subcaracterísticas são:
* Comportamento em Relação ao Tempo que avalia se os tempos de resposta (ou de processamento) estão dentro das especificações;
* Utilização de Recursos que mede tanto os recursos consumidos quanto a capacidade do sistema em utilizar os recursos disponíveis; exemplo: processador e memória.
* Conformidade: Capacidade do produto de software de estar de acordo com normas, convenções, guias de estilo ou regulamentações relacionadas à eficiência.

### Manutenibilidade

A capacidade (ou facilidade) do produto de software ser modificado, incluindo tanto as melhorias ou extensões de funcionalidade quanto as correções de defeitos, falhas ou erros.
Suas subcaracterísticas são:
* Analisabilidade identifica a facilidade em se diagnosticar eventuais problemas e identificar as causas das deficiências ou falhas;
* Modificabilidade caracteriza a facilidade com que o comportamento do software pode ser modificado;
* Estabilidade avalia a capacidade do software de evitar efeitos colaterais decorrentes de modificações introduzidas;
* Testabilidade representa a capacidade de se testar o sistema modificado, tanto quanto as novas funcionalidades quanto as não afetadas diretamente pela modificação;
* Conformidade: Capacidade do produto de software de estar de acordo com normas, convenções, guias de estilo ou regulamentações relacionadas à manutenibilidade

### Portabilidade

A capacidade do sistema ser transferido de um ambiente para outro.
Como "ambiente", devemos considerar todos os fatores de adaptação, tais como diferentes condições de infraestrutura (sistemas operacionais, versões de bancos de dados, etc.), diferentes tipos e recursos de hardware (tal como aproveitar um número maior de processadores ou memória). Além destes, fatores como idioma ou a facilidade para se criar ambientes de testes devem ser considerados como características de portabilidade.
Suas subcaracterísticas são:
* Adaptabilidade, representando a capacidade do software se adaptar a diferentes ambientes sem a necessidade de ações adicionais (configurações);
* Capacidade para ser Instalado identifica a facilidade com que pode se instalar o sistema em um novo ambiente;
* Coexistência mede o quão facilmente um software convive com outros instalados no mesmo ambiente;
* Capacidade para Substituir representa a capacidade que o sistema tem de substituir outro sistema especificado, em um contexto de uso e ambiente específicos. Este atributo interage tanto com adaptabilidade quanto com a capacidade para ser instalado;
* Conformidade: Capacidade do produto de software de estar de acordo com normas, convenções, guias de estilo ou regulamentações relacionadas à portabilidade

### Qualidade em Uso

Capacidade do produto de software de permitir que usuários especificados atinjam metas especificadas com eficácia, produtividade, segurança e satisfação em contextos de uso especificados.
Os atributos de qualidade em uso são categorizados em quatro características: eficácia, produtividade, segurança e satisfação.
* Eficácia: Capacidade do produto de software de permitir que usuários atinjam metas especificadas com acurácia e completitude, em um contexto de uso especificado.
* Produtividade: Capacidade do produto de 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: Capacidade do produto de software de apresentar níveis aceitáveis de riscos de danos a pessoas, negócios, software, propriedades ou ao ambiente, em um contexto de uso especificado
* Satisfação: Capacidade do produto de software de satisfazer usuários, em um contexto de uso especificado.

## Conclusão

A qualidade de um produto de software era algo intangível, sem definições concretas. A norma em questão permite visualizar mais facilmente esta qualidade e, por consequência, definir uma forma de medir esta qualidade, possibilitando uma avaliação mais objetiva e uniforme. Além disso, é acessível a qualquer pessoa ou empresa, disponível a quem se interessar.
Por meio das características abordadas, em todo o processo em que o software é englobado, são permitidas sub características e métricas, aprofundando aos principais atributos do software, o que esperar e o que atingir.