O que é qualidade? Existem diversas definições. Algumas pessoas que tentaram uma definição simples chegaram a frases como:
• Qualidade é estar em conformidade com os requisitos dos clientes
• Qualidade é antecipar e satisfazer os desejos dos clientes
• Qualidade é escrever tudo o que se deve fazer e fazer tudo o que foi escrito
Segundo a atual norma brasileira sobre o assunto (NBR ISO 8402), qualidade é:
A totalidade das características de uma entidade que lhe confere a capacidade de satisfazer às necessidades explícitas e implícitas.
Nota-se que esta definição formal exige alguns complementos, principalmente para definir o que são as entidades, as necessidades explícitas e as necessidades implícitas. A entidade é o produto do qual estamos falando, que pode ser um bem ou um serviço. As necessidades explícitas são as próprias condições e objetivos propostos pelo produtor. As necessidades implícitas incluem as diferenças entre os usuários, a evolução no tempo, as implicações éticas, as questões de segurança e outras visões subjetivas.
Por exemplo, a qualidade de um prato de comida (a entidade, o produto) está relacionada com a satisfação de necessidades (requisitos) tais como: sabor, aparência, temperatura, rapidez no serviço, preço, higiene, valor nutricional, etc... Para avaliar a qualidade de um produto, você deve fazer uma lista destas necessidades e analisar cada uma destas necessidades.
Software de qualidade é fácil de usar, funciona corretamente, é de fácil manutenção e mantém a integridade dos dados em falhas do ambiente ou outras fora do seu controle. No entanto, em sua grande maioria, os softwares requerem conhecimentos técnicos especiais na sua utilização, são difíceis de alterar para modificar função existente ou implementar novos processos ou facilidades e, para desespero de seus usuários, apresentam falhas sem aviso prévio e não preservam a integridade dos dados.
Pouco se fala a respeito dos custos resultantes dos defeitos ou erros provocados por falha de softwares, tanto para produtores quanto para usuários. O (bug do milênio,) causado pelos erros que os computadores teriam ao confundir o ano 2000 com o ano 1900, consumiu bilhões de dólares para evitar um colapso mundial. Bancos poderiam perder milhões, clientes veriam o saldo de suas contas sumir de repente, telefones poderiam não funcionar, aviões poderiam ter sua rota desviada, e outros problemas bem mais graves poderiam ocorrer. Este é um exemplo recente e dimensiona o quanto dependemos das máquinas e de seus softwares. Com o uso maciço das tecnologias de informação e comunicação em todos os níveis da atividade humana, os problemas de qualidade de software tendem a adquirir a cada dia maior importância.
Os desenvolvedores de software não podem se esquecer das necessidades implícitas de seus clientes. E o cliente pode ter desejos e necessidades diferentes em relação ao mesmo tipo de produto. E qual o interesse dos usuários de software?
Os usuários estão mais interessados no uso do software, no seu desempenho e nos efeitos que o seu uso possa produzir na organização. Eles não valorizam conhecer aspectos internos do software ou como o software foi desenvolvido. Mesmo sendo possível afirmar que se as qualidades internas foram observadas muito provavelmente as qualidades externas também foram atendidas, o usuário procura resposta para questões como: As funções requeridas estão disponíveis e são executadas eficientemente? Funciona dequadamente em imprevistos, como, por exemplo, efetuar débito em uma conta com saldo insuficiente? O software é seguro, ou seja, evita que pessoas ou sistemas não autorizados tenham acesso aos dados para leitura ou modificação? Permite que pessoas ou sistemas autorizados para acessar os dados não tenham acesso negado a eles? É fácil de integrar com outros sistemas existentes? Aceita trabalhar com arquivos de outros sistemas ou enviar dados para outros sistemas? É capaz de restabelecer seu nível de desempenho e recuperar dados afetados em casos de falha? É fácil de usar ou requer muito treinamento?
As normas podem ser: nível internacional: normas como as da ISO e IEC, resultantes da cooperação e acordo entre determinado número de nações com interesses comuns; nível regional: normas estabelecidas por um limitado grupo de países de um mesmo continente para benefício mútuo.
No contexto de desenvolvimento de software, qualidade pode ser entendida como um conjunto de características a serem satisfeitas em um determinado grau, de modo que o produto de software atenda às necessidades explícitas e implícitas de seus usuários.
Para avaliar a qualidade, é preciso haver meios de medi-la. Ou seja, é preciso obter uma medida que quantifique o grau de alcance de uma característica de qualidade. Assim, para computar uma característica de qualidade, é necessário estabelecer uma métrica capaz de quantificá-la e fazer uma medição para determinar a medida, resultado da aplicação da métrica. Por exemplo, digamos que se deseja saber o tamanho de determinado produto de software. Então, a métrica utilizada poderia ser “número de linhas de código”. A medição poderia ser “contar o número de linhas de código, desconsiderando comentários, de cada programa contido no software”. E a medida seria o número obtido na medição, uma quantidade, por exemplo, “5000 linhas de código”.
Muitas vezes, características de qualidade não podem ser medidas diretamente através de métricas, sendo necessário decompô-las em subcaracterísticas. Assim, há características que são diretamente mensuráveis e outras que são apenas indiretamente mensuráveis. Uma característica diretamente mensurável possui uma métrica correlacionada, à qual, através de uma medição, se aplica uma medida. As características indiretamente mensuráveis podem ser descritas em termos de outras características, sendo calculada, em última instância, via características diretamente mensuráveis.
Desta forma, uma certa característica indiretamente mensurável pode ser computada de diferentes maneiras, em função das subcaracterísticas escolhidas, já que essa escolha é, muitas vezes, função da fase do processo ou artefato para o qual as subcaracterísticas estão sendo aplicadas, do paradigma ou da tecnologia de desenvolvimento. Em outras palavras, diferentes métricas podem ser aplicadas, dependendo da atividade do ciclo de vida ou do artefato ao qual se aplica. Em todos os casos, contudo, há de se respeitar a pertinência em relação ao paradigma e à tecnologia de desenvolvimento adotados no desenvolvimento. Processos possuem características de qualidade próprias, tais como desempenho, estabilidade e capacidade, mas informações sobre a qualidade do produto gerado podem ser também importantes na avaliação do processo, uma vez que a baixa qualidade do produto pode ser um reflexo de falha ou inadequação do processo utilizado. Assim, características de qualidade do processo podem ser computadas a partir de características de qualidade do produto. O contrário, contudo, não é possível. Ou seja, características de qualidade do produto só podem ser computadas a partir de outras características de produto.
O principal problema com que se defronta a engenharia de software é a dificuldade de se medir a qualidade de 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 aproveitado.
A utilização de software de qualidade garante a segurança das transações, dos negócios, das pessoas envolvidas e mantém alta disponibilidade dos serviços. Produtos e serviços são considerados aceitáveis se apresentarem desempenho dentro de certos limites. Muito se fala atualmente, e vários estudos confirmam, que os scanners instalados em pontos de vendas nos supermercados, lojas de departamentos e outros estabelecimentos registram preços incorretos com uma freqüência que varia de 1% a 3%, em virtude de erros na base de dados ou defeitos do scanner. Isso significa que somente 97% dos preços estão corretos, o que não impede essas empresas de continuarem operando normalmente. No entanto, na área de software a coisa se complica. Ou o software funciona corretamente ou é requerida uma ação de alteração para acertá-lo. Qual empresa utilizaria um sistema de contabilidade que apresente precisão de 97%? Dos softwares é sempre esperado desempenho sem falhas. Manter a confiabilidade de desempenho em altíssimo nível continua sendo um dos principais desafios da indústria de software.
Falhos são fenômenos aleatórios, impossíveis de prever quando vão ocorrer e ocorrem sempre que um conjunto de causas se acumula. Tais como as falhas, os custos da não qualidade também não são diretamente controláveis.
Os custos operacionais da função qualidade podem ser classificados em quatro categorias: prevenção, avaliação, falhas internas e falhas externas.
Os desenvolvedores fazem os softwares mas os clientes são os que vão usá-los. Por isso a necessidade urgente de sistematizar formas de evitar os custos elevadíssimos resultantes dos defeitos de software e dos erros não intencionais dos usuários. E isso só será possível se forem priorizadas e atendidas pelo menos quatro características de qualidade de softwares: usabilidade, confiabilidade, funcionalidade e manutenibilidade. Sendo estes os requisitos essenciais do produto de software, exigidos pelos compradores e atendidos pelos vendedores, veremos resultados positivos para ambas as partes e teremos softwares de melhor qualidade e mais úteis para os fins a que se destinam.
Ainda é elevado o número de empresas brasileiras de software que não adotam técnicas para melhoria da qualidade de seus produtos, mas não há como negar que as empresas que desenvolvem software de qualidade são mais competitivas, o que é muito importante para sua sobrevivência em um mercado cada vez mais globalizado. A abertura de mercados externos para os softwares brasileiros exigirá uma nova postura frente à qualidade, beneficiando o mercado interno que acabará por exigir softwares melhores a menor preço.
É preciso que os esforços em melhoria da qualidade de software tenham seu foco não no produto apenas (fazer software melhor), mas principalmente no processo (fazer melhor o software) e no cliente (fazer software mais fácil de usar).
■ ISO 12207 - Processos do Ciclo de Vida do Software
Este padrão formaliza a arquitetura do ciclo de vida do software, que é um assunto básico em Engenharia de Software e também em qualquer estudo sobre Qualidade do Processo de Software. Esta norma possui mais de 60 páginas e detalha os diversos processos envolvidos no ciclo de vida do software. Estes processos estão divididos em três classes: Processos Fundamentais, Processos de Apoio e Processos Organizacionais.
Veja a lista completa dos processos na tabela abaixo:
A norma detalha cada um dos processos acima. Ela define ainda como eles podem ser usados de diferentes maneiras por diferentes organizações (ou parte destas), representando diversos pontos de vista para esta utilização. Cada uma destas visões representa a forma como uma organização emprega estes processos, agrupando-os de acordo com suas necessidades e objetivos.
As Visões têm o objetivo de organizar melhor a estrutura de uma empresa, para definir suas gerências e atividades alocadas às suas equipes. Existem cinco visões diferentes: contrato, gerenciamento, operação, engenharia e apoio. - [Topo]