Proporcionar aos desenvolvedores e consumidores de software maior conhecimento sobre a qualidade, uma vez que grande parte dos projetos de desenvolvimento ainda precisa evoluir neste aspecto.
Nos projetos de desenvolvimento de software, que adotam políticas de qualidade, sobretudo quando se deseja buscar mercados externos ou expandir seus clientes internos aumentando a satisfação dos mesmos.
O conceito da qualidade tem hoje importância fundamental para alavancar a competitividade das empresas. Atualmente, a preocupação com a qualidade deixou de ser um diferencial competitivo e passou a ser um pré-requisito básico para participação no mercado. No setor de software não é diferente. A disseminação do uso do software em todas as áreas, envolvendo monitoração, controle e gestão de funções críticas, tem aumentado consideravelmente a importância da qualidade de software.
Qualidade hoje em dia não é apenas um diferencial de mercado para a empresa conseguir vender e lucrar mais, é um pré-requisito que a empresa deve conquistar para conseguir colocar seu produto no mercado global. Apesar da ideia de qualidade parecer aparentemente intuitiva, quando analisada com maior atenção, o conceito se revela um pouco mais complexo.
Na medida em que cresce a demanda por sistemas complexos, com grande responsabilidade no contexto das organizações, a qualidade desponta como um fator essencial no desenvolvimento de software, e cada vez mais há uma disposição de investimento nesta área. Entretanto, uma das primeiras dificuldades encontradas na definição e implantação de um programa de qualidade está em compreender o que, de fato, significa qualidade de software.
Visando apoiar um maior entendimento a respeito do assunto, este artigo apresenta o conceito de qualidade de software, abordando aspectos como a importância dos requisitos neste processo assim como uma visão geral sobre medição e avaliação da qualidade.
Qualidade de Software
Conceituar qualidade de fato é uma tarefa complexa, mas ela pode ser vista como um método gerencial que através de procedimentos disseminados por toda a organização, busca garantir um produto final que satisfaça às expectativas do cliente, dentro daquilo que foi acordado inicialmente.
No contexto de desenvolvimento de software, qualidade pode ser entendida como um conjunto de características a serem satisfeitas, de modo que o produto de software atenda às necessidades de seus usuários. Entretanto, tal nível de satisfação nem sempre é alcançado de forma espontânea, devendo ser continuamente construído. Assim, a qualidade do produto depende fortemente do seu respectivo processo de desenvolvimento.
Devido ao processo de globalização e consequente aumento de empresas concorrentes, a qualidade, hoje em dia, é crítica para a sobrevivência e o sucesso no mercado de software. Portanto, uma organização não se destacará neste mercado a menos que produza software de boa qualidade e que seus clientes percebam isso nos seus produtos e serviços. Neste contexto, há algumas razões que devem ser consideradas:
- Qualidade é competitividade: Uma forma do produto se destacar é através da qualidade do software e do suporte que é fornecido com ele. Com o amadurecimento do mercado, os usuários não querem apenas que a empresa fale que tem qualidade, mas que mostre a todos que a tem através de certificação internacional. Não ter uma certificação pode acarretar em desvantagem competitiva;
- Qualidade é essencial para a sobrevivência: Clientes estão buscando por qualidade. Se a empresa não tiver habilidade de sobreviver em um mercado altamente competitivo, ela está em débito com o mercado. A maioria das grandes organizações está reduzindo o número de fornecedores, e um meio de escolher os fornecedores é verificando quais deles têm certificações de qualidade;
- Qualidade é essencial para o mercado internacional: O mercado de software está cada vez mais se expandindo, se tornando global. A habilidade das empresas de mostrar qualidade possibilita sua colocação no mercado;
- Qualidade é custo/benefício: Um sistema de qualidade direciona para o aumento da produtividade e permanente redução de custos, dando ênfase à prevenção de inconsistências no desenvolvimento e, consequentemente, de defeitos. A maior parte das empresas sabe que corrigir defeitos após o desenvolvimento do software é mais dispendioso do que identificá-los e corrigi-los antes;
- Qualidade retém consumidores e aumenta lucros: Pouca qualidade normalmente custa muito mais. A maioria dos clientes não tolera falta de qualidade, e caso isso ocorra procuram por outros desenvolvedores. A preocupação com a qualidade aumenta a satisfação dos clientes e assegura os que já são por mais tempo.
Os consumidores de software necessitam de produtos cada vez melhores e mais rápidos de serem desenvolvidos para aumentarem a sua competitividade no mercado. Para que este objetivo seja cumprido, os fornecedores de software devem utilizar as melhores práticas da engenharia de software, corrigindo os defeitos assim que forem detectados.
Infelizmente, ainda há empresas fornecedoras de software que acham que criar sistemas é uma arte que não necessita seguir regras, normas ou padrões. Isto acontece principalmente por que:
- Produtos de software são complexos, até mais do que o hardware onde executam;
- Software não tem produção em série. Seu custo está no projeto e desenvolvimento;
- A engenharia de software ainda não está madura, é um processo em constante evolução;
- Não há um acordo entre os profissionais da área sobre o que é qualidade de software.
Apesar de tudo isso, é preciso entender que o problema não está no software em si, mas na forma como as pessoas têm desenvolvido software. É de fundamental importância que as equipes de desenvolvimento tenham a contínua atenção com a aplicação dos conceitos de qualidade em seus projetos.
Atualmente, muitas instituições têm se preocupado em criar normas para permitir o desenvolvimento de softwares de qualidade. A Tabela 1 apresenta uma visão geral com as principais normas nacionais e internacionais nesta área.
NORMAS | COMENTÁRIOS |
---|---|
ISO 9126 |
Características da qualidade de produtos de software. |
NBR 13596 |
Versão brasileira da ISO 9126. |
ISO 14598 |
Guias para a avaliação de produtos de software, baseados na utilização prática da norma ISO 9126. |
ISO 12119 |
Características de qualidade de pacotes de software (software de prateleira, vendido como um produto embalado). |
IEEE P1061 |
Standard for Software Quality Metrics Methodology. Norma que trata das metodologias para padronização da qualidade de software, incluindo algumas abordagens de medição. |
ISO 12207 |
Software Life Cycle Process. Norma para a qualidade do processo de desenvolvimento de software. |
NBR ISO 9001 |
Sistemas de qualidade – Modelo para garantia de qualidade em projeto, desenvolvimento, instalação e assistência técnica (processo). |
NBR ISO 9000-3 |
Gestão de qualidade e garantia de qualidade. Aplicação da norma ISO 9000 para o processo de desenvolvimento de software. |
NBR ISO 10011 |
Auditoria de Sistemas de Qualidade (processo). |
CMMI |
Capability Maturity Model Integration. Modelo da SEI (Instituto de Engenharia de Software do Departamento de Defesa dos USA) para avaliação da qualidade do processo de desenvolvimento de software. Não é uma norma ISO, mas é muito bem aceita no mercado. |
SPICE ISO 15504 |
Projeto da ISO/IEC para avaliação do processo de desenvolvimento de software. Ainda não é uma norma oficial ISO, mas o processo está em andamento. |
Qualidade de Software na Visão do Usuário
Os desenvolvedores não devem menosprezar o papel do cliente no desenvolvimento do software. Cada cliente pode ter desejos e necessidades diferentes em relação ao mesmo tipo de produto. A questão é como melhor atender aos seus interesses. Eles estão mais interessados no uso do sistema, na sua funcionalidade, no desempenho e nos efeitos que o mesmo pode produzir na sua empresa. O cliente valoriza cada vez mais que o software seja um parceiro no desenvolvimento de seu negócio, de forma que suas expectativas sejam atendidas e sua confiança no produto aumente.
É importante considerar que o cliente é quem está à frente. Ele tem o direito de participar e opinar durante o processo de construção do software. Hoje o mercado é mais competitivo, aumentando a oferta de produtos, e o cliente está mais consciente de sua participação.
Neste contexto, a experiência do usuário, além das qualidades técnicas do software, é um fator determinante para a construção de sistemas de maior qualidade. Sua participação pode facilitar a compreensão dos seus desejos quanto ao software que está sendo desenvolvido. Esse aspecto da qualidade do software é chamado usabilidade. Nele o usuário procura respostas para questões como:
- As funcionalidades estão disponíveis e são executadas eficientemente?
- O software funciona corretamente em imprevistos?
- O software é seguro, ou seja, evita que pessoas ou sistemas não autorizados tenham acesso às informações?
- É fácil de usar ou requer muito treinamento?
- É fácil de integrar com outros sistemas existentes?
Não há como esquecer que agora é o cliente quem está na direção, tem poder de barganha. Já foi o tempo em que o sucesso empresarial se devia aos clientes não terem outra opção. Hoje o mercado é mais competitivo, a globalização expandiu o mercado aumentando a oferta de produtos. Essa mudança de postura na ponta do consumo já exige melhor qualidade de produtos e processos para atender a esse novo cliente.
Em respeito às características e necessidades desse novo cliente, algumas empresas desenvolvedoras de software já introduziram modificações no desenvolvimento e teste dos produtos. Muitas estão colocando equipes para observar os usuários trabalharem em seu ambiente rotineiro. Outras estão trazendo os usuários para seus laboratórios de teste, visando melhorar a qualidade do produto antes de sua disponibilização para o mercado, uma vez que a usabilidade fica mais clara quando pessoas sem conhecimentos técnicos específicos tentam usar o sistema. Esta prática tem permitido às empresas diminuir custos, ampliar a equipe de teste, garantir melhor qualidade e maiores lucros.
Importância dos Requisitos na Qualidade de Software
Uma das primeiras questões a responder quando o assunto é qualidade é como julgá-la. Por exemplo: se estamos diante de produtos distintos, como escolher o melhor? Esse problema de julgamento acontece com qualquer pessoa cotidianamente, quando se deseja adquirir itens como roupas, música, comida ou filmes. Mas curiosamente, apesar da frequência com que avaliamos os objetos à nossa volta, é muito difícil obter consenso a respeito da qualidade de um produto.
Uma escolha torna-se mais clara quando se estabelecem critérios que sirvam para julgar um produto. Em algumas situações, tais critérios são relativamente simples de identificar e estabelecer. Por exemplo: em domínios como engenharia elétrica ou mecânica, as informações necessárias são obtidas em função da finalidade de um determinado produto. Para dispositivos simples, como um fusível ou uma engrenagem, não é difícil enumerar algumas características que provavelmente são relevantes: ponto de fusão, condutância térmica, resistência a cisalhamento ou dimensões físicas. Passando para objetos mais complexos, como um transistor, a complexidade e a quantidade de requisitos tendem a aumentar.
Finalmente, quando se consideram softwares, é importante que a especificação de suas características seja realizada de forma consistente. Isso evita mal entendidos e retrabalho pela equipe de desenvolvimento, e consequente aumento de custo em fases posteriores do desenvolvimento.
Os requisitos não resolvem, por completo, a questão da definição da qualidade, mas podem ser grandes aliados na sua busca, uma vez que qualidade de software é também estar em conformidade com os seus requisitos, podendo ser uma referência no seu julgamento.
Projetos grandes, envolvendo muitas funcionalidades e pessoas diferentes (diversos tipos de usuários, denominados stakeholders), provavelmente têm mais chances de conter requisitos conflitantes. Isso ocorre por falta de consenso em relação a como certas tarefas devem ser desenvolvidas, ou mesmo para decidir a prioridade entre elas. Em cenários desse tipo, pode existir uma deficiência de diálogo que antecede o projeto do software.
A engenharia de requisitos, uma subárea da Engenharia de Software, tem por objetivo tratar o processo de definição dos requisitos de software. Para isso, estabelece a elicitação, análise e modelagem daquilo que deve ser atendido pelo software. Este processo deve observar diferentes pontos de vista, e usar uma combinação de métodos, ferramentas e pessoal. O produto desse processo é o chamado documento de requisitos.
Observando o contexto deste documento, o software deverá ser desenvolvido e operado. Ele inclui todas as fontes de informação e todas as pessoas relacionadas ao software. Essas pessoas são também conhecidas como atores. Este universo de informações trata do conjunto de objetivos definidos pelos que demandam o software. Estes objetivos podem ser classificados como requisitos funcionais e requisitos não funcionais.
Os requisitos funcionais estão diretamente ligados à funcionalidade do software, enquanto que os requisitos não funcionais expressam as restrições que o software deve atender. Neste contexto, a questão da qualidade é tratada no processo de levantamento destes requisitos através da definição clara dos critérios de qualidade que o software deverá atender.
Medindo a Qualidade do Software
O principal problema com que se defronta a Engenharia de Software é a dificuldade de se medir a qualidade do software. A qualidade de um dispositivo mecânico é frequentemente medida em termos de tempo médio entre suas falhas, que é uma medida da capacidade de o dispositivo suportar desgaste. O software não se desgasta, portanto, tal método de medição de qualidade não pode ser aplicado. A norma ISO/IEC 9126 (NBR 13596) fornece um modelo de propósito geral o qual define seis categorias de características de qualidade de software que são, por sua vez, subdivididas em subcaracterísticas, conforme mostra a Tabela 2.
CARACTERÍSTICAS | SUBCARACTERÍSTICAS | SIGNIFICADO |
---|---|---|
Funcionalidade
O conjunto de funções satisfazem as necessidades explícitas e implícitas para a finalidade a que se destina o produto? |
Adequação |
Propõe-se a fazer o que é apropriado? |
Acurácia |
Gera resultados corretos ou conforme acordados? |
|
Interoperabilidade |
É capaz de interagir com os sistemas especificados? |
|
Segurança de acesso |
Evita o acesso não autorizado, acidental ou deliberado a programas e dados? |
|
Conformidade |
Está de acordo com normas e convenções previstas em leis e descrições similares? |
|
Confiabilidade
O desempenho se mantém ao longo do tempo e em condições estabelecidas? |
Maturidade |
Com que frequência apresenta falhas? |
Tolerância a falhas |
Ocorrendo falhas como ele reage? |
|
Recuperabilidade |
É capaz de recuperar dados após uma falha? |
|
Usabilidade
É fácil utilizar o software? |
Inteligibilidade |
É fácil entender os conceitos utilizados? |
Apreensibilidade |
É fácil aprender a usar? |
|
Operacionalidade |
É fácil de operar e controlar a operação? |
|
Eficiência
Os recursos e os tempos utilizados são compatíveis com o nível de desempenho requerido para o produto? |
Comportamento em relação ao tempo |
Qual é o tempo de resposta e de processamento? |
Comportamento em relação aos recursos |
Quanto recurso utiliza? |
|
Manutenibilidade
Há facilidade para correções, atualizações e alterações? |
Analisabilidade |
É fácil encontrar uma falha quando ocorre? |
Modificabilidade |
É fácil modificar e remover defeitos? |
|
Estabilidade |
Há grandes riscos de bugs quando se faz alterações? |
|
Testabilidade |
É fácil testar quando se faz alterações? |
|
Portabilidade
É possível utilizar o produto em diversas plataformas com pequeno esforço de adaptação? |
Adaptabilidade |
É fácil adaptar a outros ambientes sem aplicar outras ações ou meios além dos fornecidos para esta finalidade no software considerado? |
Capacidade para ser instalado |
É fácil instalar em outros ambientes? |
|
Capacidade para substituir |
É fácil substituir por outro software? |
|
Conformidade |
Está de acordo com padrões ou convenções de portabilidade? |
O modelo proposto pela ISO/IEC 9126 (NBR 13596) tem por objetivo servir de referência básica na avaliação do produto de software. Além de ter força de norma internacional, ela cobre os aspectos mais importantes para qualquer produto de software.
A norma ISO/IEC 12119 tem o objetivo de estabelecer os requisitos de qualidade de software e instruções de como testá-lo com relação às suas especificações. Ela define que cada pacote de software tenha uma descrição do produto e sua respectiva documentação, estabelecendo os seguintes pontos:
- Descrição do produto compreensível e completa para ajudar o usuário ou comprador em potencial na avaliação da adequação do produto à sua realidade;
- Documentação do usuário de fácil compreensão, permitindo uma visão geral do produto e de todas as suas funções, identificando o conhecimento necessário para uso da aplicação;
- Identificação do tipo de interface com o usuário;
- Instruções detalhadas sobre como instalar o produto, caso a instalação possa ser conduzida pelo usuário;
- Possibilidade de verificar se a instalação foi bem sucedida;
- Especificação de valores-limite para quantidade de registros e dados de entrada, como, por exemplo, precisão de casa decimal;
- Operação normal, mesmo quando os dados informados estão fora dos limites especificados;
- Consistência de vocabulário entre as mensagens e a documentação;
- Mensagens de erro com informações necessárias para solucionar o problema;
- Diferenciação de tipos de mensagem: confirmação, consulta, advertência e erro;
- Clareza e padronização nos formatos de telas de entrada/saída e relatórios.
Avaliando a Qualidade do Software
A avaliação da qualidade de software é feita com o objetivo de aprimorar o processo de desenvolvimento e consequentemente melhorar a qualidade do produto resultante. A norma ISO/IEC 14598 define um processo de avaliação da qualidade do software, orientando que o seu uso seja feito em conjunto com a norma ISO 9126, já que esta define as métricas de qualidade de software.
A norma ISO/IEC 14598 inclui modelos para relatórios de avaliação, técnicas para medição das características, documentos necessários para avaliação e fases da avaliação. No processo de avaliação definido por esta norma, a identificação das necessidades do usuário é um passo importante para a qualidade. Tais requisitos são informais por natureza e precisam ser formalizados. Eles podem ser quantificados e a qualidade de uso avaliada em métricas (ISO/IEC 9126). A norma leva em consideração três grupos de avaliadores:
- Empresas que desenvolvem software e que procuram melhorar a qualidade de seu próprio produto;
- Empresas que têm o hábito da aquisição de softwares e buscam a qualidade constante deles;
- Órgãos oficiais que avaliam as empresas desenvolvedoras de software emitindo documento oficial de certificação de qualidade.
A Tabela 3 apresenta a norma ISO/IEC 14598 com uma breve descrição de seus processos.
NORMA | PROCESSO |
---|---|
ISO/IEC 14598 |
1) Visão Geral – A primeira parte da norma ensina a utilizar as outras normas do grupo. Ela apresenta a estrutura de funcionamento da série de normas para a avaliação da qualidade do produto de software, assim como apresenta a definição de termos técnicos utilizados no modelo. Deve ser usada em conjunto com a ISO/IEC 9126 por todos aqueles que necessitem verificar a qualidade do produto de software. |
2) Planejamento e Gerenciamento – A segunda parte apresenta como fazer uma avaliação, de forma geral. A norma apresenta requisitos, recomendações e orientações para a função de suporte ao processo de avaliação do produto de software. O suporte refere-se ao planejamento e a gestão do processo de avaliação e a tecnologia necessária para realização da avaliação. |
|
3) Guia para Desenvolvedores – A terceira parte da norma propõe como avaliar sob o ponto de vista de quem desenvolve. Para isso, o desenvolvedor define as condições sob as quais as medições serão executadas. Esta norma tem o objetivo de definir, acompanhar e monitorar a qualidade durante o processo de desenvolvimento do software. |
|
4) Guia para Aquisição – Avaliar sob o ponto de vista de quem vai adquirir o software. Esta quarta parte da norma divide-se em duas outras partes. A primeira refere-se à aquisição de software de prateleira, e a segunda à aquisição de software sob encomenda ou manutenção de softwares existentes. É muito usada na aceitação ou seleção de um produto de software. |
|
5) Guia para Avaliação – O guia de avaliação apoia as empresas certificadoras no processo de avaliação sob o ponto de vista de quem certifica. Fornecendo requisitos e recomendações para implementação prática da avaliação do software. Deve ser usada para a definição e acompanhamento de um processo de avaliação. |
Durante o processo de avaliação da qualidade de um software são observadas algumas características sobre o mesmo. Neste processo é esperado que o software seja:
- Repetitível – Resultados idênticos devem ser obtidos ao avaliar um software várias vezes, utilizando a mesma especificação da avaliação e o mesmo avaliador;
- Reprodutível – Resultados idênticos devem ser obtidos ao avaliar um mesmo produto repetidas vezes, considerando a mesma especificação da avaliação e sendo realizada por outro avaliador;
- Objetivo – Os resultados da avaliação devem ser baseados em fatos e evidências, isto é, não devem ser influenciados por sentimentos ou opiniões do avaliador.
Conclusões
Ainda há empresas que pensam em qualidade apenas como aquisição de respeito internacional através de certificações e procedimentos considerados corretos e qualitativos. Através deste artigo, foi possível ter uma visão geral do processo de qualidade de software, expondo seus conceitos, importância, características e aspectos referentes ao processo de avaliação.
Os desenvolvedores fazem os softwares, mas são os clientes que irão usá-los de fato. Por isso a necessidade de sistematizar formas de evitar os custos elevados resultantes dos defeitos de software e dos erros não intencionais dos usuários durante a fase de levantamento de requisitos. Esta sistematização só será possível se forem priorizados e atendidos pelo menos quatro requisitos da qualidade de software: usabilidade, confiabilidade, funcionalidade e manutenibilidade. Sendo estes requisitos essenciais, exigidos pelos clientes e que devem ser atendidos pela indústria de software.
Ainda é elevado o número de empresas que não adotam técnicas para melhoria da qualidade de seus produtos, mas não há como negar que aquelas que desenvolvem software de qualidade são mais competitivas. A busca contínua pela qualidade de software é um fator decisivo para a sobrevivência das empresas em um mercado cada vez mais exigente e globalizado. A abertura de mercados externos para os softwares brasileiros busca uma nova postura frente à qualidade, beneficiando o mercado interno, que acabará demandando softwares melhores a menor preço.
Neste artigo foi possível discutir alguns pontos importantes sobre Qualidade de Software e despertar o interesse para uma pesquisa mais ampla, observando que a melhoria da qualidade de software tem seu foco não apenas no produto, fazendo softwares melhores, mas principalmente no cliente, fazendo softwares mais fáceis de usar.
MALDONADO, R. Qualidade de Software: Teoria e Prática.
GOMES, N. Qualidade de Software – Uma Necessidade.