A demanda por qualidade de software tem motivado a comunidade de software para o desenvolvimento de modelos para a qualidade. Um software de qualidade é fácil de usar, funciona corretamente, é de fácil manutenção e mantém a integridade dos dados para evitar possíveis falhas, fora ou não, do seu controle. Para o desespero de seus usuários as falhas se apresentam sem avisos prévios, gerando um impacto econômico e social muitas vezes irremediável.
Os custos resultantes de defeitos ou erros provocados por falha de softwares, tanto para as empresas de softwares como para usuários, poderiam ser catastróficos, bancos poderiam perder milhões de dólares e clientes veriam seus dinheiros sumirem. Em 1991 aconteceu uma pane no sistema telefônico da Califórnia e de toda a costa, motivo? A modificação de apenas três das milhões de linhas de código introduziu um bug. Este é um exemplo que demonstra de quanto dependemos das maquinas e de seus softwares. A tecnologia da Informação e comunicação transversa lizam cada vez mais todos os níveis das atividades humanas, tornando assim a importância da qualidade de software.
A qualidade é hoje o grande motivador em todas as áreas de atividade humana, todos querem oferecer e receber produtos e serviços com qualidades.
Um software de qualidade oferece segurança de pessoas, disponibiliza serviços essenciais (home banking, telefonia, etc), gera competitividade das empresas, etc. A qualidade de um software deve estar em conformidade com especificações e padrões de desenvolvimento, há necessidades explícitas e objetivos propostos por aquelas pessoas que produzem software, garantindo que, tanto o produto do software quanto um bom processo de desenvolvimento, atinjam níveis de qualidade mantendo sempre as necessidades dos usuários.
O que é qualidade?
Segundo Herman G. Weinberg “A qualidade é relativa. O que é qualidade para uma pessoa pode ser falta de qualidade para outra.
A definição de qualidade pode parecer simples e até trivial. Contudo se observada mais detalhadamente pode se perceber sua complexidade.
Um dos principais desafios enfrentados pelos profissionais de qualidade e teste de software está em definir o que é qualidade no contexto do produto atual. Analisando então as variáveis disponíveis para o caso em concreto, tais como: orçamento, tempo e prazo.
Visando estabelecer uma visão comum entre todos os membros da equipe e seus usuários é necessário que sejam vencidas as dificuldades de comunicação entre os transmissores e os receptores da mensagem.
O que é qualidade de software?
Para ajudar nessa questão, a International Organization Standardization - ISO e a International Electrotechnical Comission-IEC, que são organismos normalizadores com importância internacional reconhecida no setor de software, se uniram para editar normas internacionais conjuntas. A norma internacional ISO/IEC, define qualidade de software como A totalidade de características de um produto de software que lhe confere a capacidade de satisfazer necessidades explícitas e implícitas.
Necessidades explícitas são aquelas definidas no requisito proposto. Esses requisitos devem definir as condições em que o produto deve ser utilizado e dizer seus objetivos, funções e desempenho esperado. São, portanto, fatores relativos à qualidade do processo do desenvolvimento do produto que são percebidos somente pelas pessoas que trabalharam no seu desenvolvimento.
Necessidades implícitas são aquelas que, embora não expressas no documento do produtor, são necessárias para o usuário. Estão englobados em esta classe os requisitos que não precisam ser declarados por serem óbvios, mas que pela gravidade de suas consequências devem ser levados em consideração (ex: mesmo em condições não previstas de erro ou má operação, um sistema de administração hospitalar não pode provocar a morte de pacientes).
Retenha talentos e aumente a produtividade dos seus programadores
Saiba mais DevMedia Plataforma empresarialAs necessidades implícitas também são chamadas de qualidade em uso e devem permitir aos usuários atingir metas com efetividade, produtividade, segurança e satisfação em seu uso diário.
Qualidade
Está claro que produzir software de qualidade é uma meta essencial e básica da Engenharia de Software, que oferece métodos, técnicas e ferramentas. O necessário mesmo é que o software seja confiável, eficaz e siga os padrões exigidos pelo contexto.
Freeman ¹[Freeman 87] apresenta uma distinção entre qualidade básica e qualidade extra.
Em qualidade básica ele lista: funcionalidade, confiabilidade, facilidade de uso, economia e segurança de uso. Em qualidade extra ele lista: flexibilidade facilidade de reparo, adaptabilidade, facilidade de entendimento, boa documentação e facilidade de adicionar melhorias. Essas prioridades vão depender muito de cada caso e do custo de cada uma dessas qualidades.
A sociedade pressiona o setor de software para que a característica qualidade seja preponderante.
Qualidade e Requisitos
Segundo Crosby [1992] “A qualidade é a conformidade aos requisitos”. Esta definição nos é bastante interessante, pois evidencia qual o caminho a seguir para julgar a qualidade de um software.
Partindo deste pressuposto é necessário considerar três fatores para a correta verificação da conformidade aos requisitos proposta por Crosby.
Definição de Conformidade
Para a correta verificação da qualidade torna-se necessário uma prévia definição das margens de precisão dos resultados esperados. Tornando possível a medição em graus de qualidade do produto final.
Metodologia de Observação dos Resultados
É necessário ter em mente que a medida observada pode conter margens de erros. Existem diversos fatores que podem corromper os dados utilizados na observação.
Conciliar os interesses dos diversos Stakeholders
A qualidade está intimamente ligada aos requisitos e estes requisitos são definidos por alguém, logo a qualidade depende das escolhas que este alguém fez.
Muitos desenvolvedores de software devem conciliar, resolver ou minimizar os problemas organizacionais do cliente que contratou o desenvolvimento do produto.
Requisitos de software
Os requisitos do software são as descrições sobre o comportamento, as funcionalidades e especificações do software.
Todos os requisitos do software devem ser registrados no documento de requisitos que deve ser conciso e consistente para fornecer informações claras ao leitor.
Para a correta especificação de requisitos é necessário que os mesmos sejam precisos, completos, consistentes e tenham controle de rastreabilidade e Modificabilidade.
Seguindo a divisão tradicional os requisitos podem ser classificados em requisitos funcionais e não-Funcionais.
Guia Completo: Levantamento de Requisitos
Qualidade de software na visão do usuário
Os desenvolvedores de software não podem menosprezar o papel do usuário/cliente, não podendo se esquecer das necessidades implícitas do uso.
Cada cliente pode ter desejos e necessidades diferentes em relação ao mesmo tipo de produto.
A pergunta é qual o interesse dos usuários de software?
Os usuários estão mais interessados no uso do software, na sua funcionalidade, no desempenho e nos efeitos que o uso possa produzir na sua empresa, organização, etc. O cliente valoriza que o software responda às suas necessidades. A qualidade interna tem que responder às questões externas que o cliente venha a questionar. Por exemplo:
- As funções X estão disponíveis e são executadas eficientemente?
- Funciona corretamente em imprevistos, como, por exemplo, efetuar débito em uma conta com saldo negativo?
- O software é seguro, ou seja, evita que pessoas ou sistemas não autorizados tenham acesso aos dados para modificar?
- É fácil de usar ou requer muito treinamento?
- É fácil de integrar com outros sistemas existentes?
- Aceita trabalhar com arquivos de outros sistemas ou enviar dados para outros sistemas?
É importante considerar que o cliente é quem está à frente. Ele tem poder de participação no processo externo do seu produto. Hoje o mercado é mais competitivo, aumentando a oferta de produtos, e o cliente está mais consciente do seu poder. Esta mudança no mercado, maior globalização, leva a exigir melhor qualidade de produtos e processos para atender a esse novo cliente.
Qualidade de processo e produto: é possível medir a qualidade de software?
O controle de qualidade surge então como uma necessidade: inicialmente são feitas verificações, logo em seguida adotam-se técnicas e critérios bem definidos, em alguns casos chega-se a verificação de 100% dos produtos para eliminação daqueles produzidos com defeitos; certifica-se a qualidade do produto com um custo bem alto. Como alternativa busca-se melhorar o processo de produção para se adquirir maior confiança na qualidade do produto final.
A engenharia de software tem como objetivo a melhoria da qualidade do seu produto com propostas e modelos de desenvolvimento, métodos e técnicas para aplicação nas diversas fases de desenvolvimento. É importante a avaliação da qualidade de software nas duas visões, processo e produto, é aqui que se direciona o esforço.
O principal problema com que se defronta a engenharia de software é a dificuldade de se medir a qualidade. Há de se considerar que o software não se desgasta, por tanto, tal método de medição de qualidade não pode ser aproveitado.
A ISO/IEC fornece um modelo de propósito geral (Tabela 1) o qual define seis amplas categorias de características de qualidade de software que são subdivididas em sub características.
O modelo proposto pela ISO/IEC 9126(NBR13596) tem como objetivo servir de referência básica na avaliação de produto de software.
Características | Sub-Características | Significado |
---|---|---|
Funcionalidade: O conjunto de funções satisfaz 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 acesso não autorizado, acidental ou deliberado a programas de dados? | |
Conformidade | Está de acordo com normas e convenções previstas em leis e descrições similares? | |
Usabilidade: É fácil usar o software? | Inteligibilidade | É fácil entender os conceitos utilizados? |
Apreensibilidade | É fácil apreender 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 aos recursos | Quanto recurso utiliza? |
Comportamento em relação ao tempo | Qual é o tempo de resposta e de processamento? | |
Manutenibilidade: Há facilidade para correções, atualizações e alterações? | Analisibilidade | É 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? | |
Estabilidade | É fácil adaptar a outros ambientes sem aplicar outras ações ou meios além dos fornecidos para esta finalidade no software considerado? | |
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? |
Considerações práticas para garantir a Qualidade do Produto
Para se garantir a qualidade de um produto durante seu desenvolvimento existe um conjunto de métodos e técnicas que devem ser implementadas durante todo o processo. Nesta seção, consta uma breve definição de algumas dessas atividades.
Identificação de Defeitos
Conhecer os conceitos de erro, defeito e falha é o requisito básico para se construir um processo de garantia de qualidade. É preciso saber identificar o problema, antes de investigar sua proveniência e, desta forma, saber corrigi-lo.
- Erro: Trata-se de um engano de um indivíduo.
- Defeito: Deficiência mecânica ou algorítmica que se ativada pode levar a uma falha. Na tabela 2 há a definição dos tipos de defeitos encontrados.
- Falha: Evento notável onde o sistema viola suas especificações.
Quanto antes a presença do defeito for revelada, menor o custo de correção do defeito e maior a probabilidade de corrigi-lo corretamente. A solução é introduzir atividades de VV&T ao longo de todo o ciclo de desenvolvimento.
Informação Estranha | Informação desnecessária. |
Fato Incorreto | Informação que não é verdadeira para as condições especificadas. |
Inconsistência | Informações conflitantes |
Ambiguidade | Informação passível de ter múltiplas interpretações |
Omissão | Informação necessária não incluída |
Validação, Verificação e Testes (VV&T)
As atividades de VV&T atuam na garantia de qualidade, assegurando que o software cumpra as especificações definidas e atenda às necessidades de seus usuários. Definições:
- Validação: Avalia um sistema ou componente para determinar se ele satisfaz os requisitos para ele especificados. “Estamos construindo o produto certo?”. O software deve atender às necessidades dos usuários.
- Verificação: Avalia um sistema ou componente para determinar se os produtos de uma dada atividade de desenvolvimento satisfazem as condições impostas no início desta atividade. “Estamos construindo certo o produto?” Os artefatos construídos devem estar de acordo com a especificação do software.
Os principais métodos de Validação e Verificação são:
- Estática: Revisões de Software (Revisões aos Pares, Inspeções de Software, entre outros). Denomina-se estática, pois não envolve a execução do produto, mas apenas leitura de artefatos, como código.
- Dinâmica: Testes de Software (Testes de unidade, de integração, do software, entre outros).
Revisões de Software
São processos ou atividades para leitura de um artefato de software visando assegurar que ele cumpre sua especificação e atende às necessidades de seus usuários. Tem por objetivo realizar validação e verificação estática de artefatos de software. Pode ser aplicada a qualquer artefato produzido ao longo do processo de desenvolvimento de software.
Tipos de Revisões
- Inspeções de Software: mais focadas em encontrar defeitos.
- Walkthroughs: são mais apropriados para atividades de brainstorming, para explorar alternativas de projeto e resolução de problemas.
Testes de Software
Processo de executar um programa ou sistema com o objetivo de revelar a presença de erros; ou, falhando nesse objetivo, aumentar a confiança sobre o programa. Envolve todo um processo de planejamento, fases de teste, etc., que necessitaria de um outro artigo para aprofundar este assunto.
Conclusão
Os desenvolvedores fazem os softwares, mas os clientes são os que vão usá-los. Por isso, há a necessidade urgente de sistematizar formas de evitar os custos elevados consequente dos defeitos dos softwares e dos erros não intencionais dos usuários. Isto só será possível se forem priorizadas algumas características de qualidade de software: usabilidade, confiabilidade, funcionalidade e manutenibilidade. Sendo esses, os requisitos essenciais do produto de software exigidos pelos compradores e atendidos pelos vendedores. Assim veremos resultados positivos tendo softwares de qualidade e mais úteis.
No Brasil ainda existem empresas de software que não utilizam técnicas para melhorar a qualidade de seus produtos, por isso aquelas empresas que desenvolvem software de qualidade são mais competitivas, o que favorece a abertura de mercados externos para os softwares brasileiros e beneficiando o mercado interno que acabará por exigir software melhores e a menor preço.
Não resta a menor dúvida que ainda restam muitos esforços em melhoria da qualidade de software. Por isso, é fundamental ter seu foco não apenas no produto (fazer software melhor), mais principalmente no processo (fazer melhor o software) e no cliente (fazer software mais fácil de usar).
Saiu na DevMedia!
- Entre de cabeça no REST: Você já deve ter notado que o prazo para o lançamento de uma aplicação nem sempre corresponde a complexidade dos seus requisitos. Por esse motivo, é cada vez mais importante que o desenvolvedor saiba como criar e consumir APIs. Veja como nesta série.
Bibliografia
- ¹ Freeman, P. A., (1987) “Software Perspectives: The System is the Message”, Addison-Wesley, Reading, Massachusetts.
- Koscianski,André,VILLAS-BOAS, André, RÊGO,Claudete M., "et al" Guia para Utilização das Normas sobre Avaliação de Qualidade de Produto de Software - ISO/IEC e ISO/IEC.
- Kalinowski, Marcos (2006), “Qualidade de Software”. Pires, Almir, “Qualidade de Software”.
- ISO/IEC DIS 14598-Information Technology Evaluation of software product Part5:Process for evaluators.
- Silva, G. Nelma, “Qualidade de software - Uma necessidade”.
- Sampaio do Prado, Julio, “Qualidade do Software com base em Requisitos”
- Rocha, Maldonado, Weber.(2001)” Qualidade de software: Teoria e Prática”
- Tsukumo, A.,Rego,C. Salviano,C., Gláucia, F., Bento de Carvalho,M. Colombo,R. “Qualidade de Software: Visões de Produtos e Processos de Software” Área de Tecnologia para Avaliação de Qualidade de Software: Fundação Centro tecnológico para Informática.
Saiba mais sobre Engenharia de Software ;)
- Guias de Engenharia de Software: Encontre aqui os Guias de estudo sobre os principais temas da Engenharia de Software. De metodologias ágeis a testes, de requisitos a gestão de projetos!
- Engenharia de Software para programadores: Ter boas noções sobre engenharia de Software pode alavancar muito sua carreira e a sua forma de programar. Descubra nesse guia tudo o que um programador precisa saber sobre a ciência que existe por trás dos códigos.
- Requisitos, Modelagem e UML: Neste guia você encontrará o conteúdo que precisa para saber como eliciar requisitos, gerenciá-los e modelar o software com as principais técnicas do mercado. Abaixo, confira os posts que te auxiliarão ao longo desse aprendizado.
- Guia de Scrum: Com o aumento das exigências dos clientes e prazos cada vez mais curtos, encontrar opções para possibilitar o projeto, implementação e implantação de um sistema com mais qualidade e em menos tempo é fundamental. Veja a Guia Completa sobre Scrum!