Olá, estudante! Que bom ter você aqui novamente! Estamos nos aproximando da reta final da nossa disciplina de Introdução à Programação! Na lição anterior, você explorou conceitos fundamentais que serão essenciais para as atividades de implantação e manutenção de software. Agora, daremos início a um tema igualmente importante: o conceito de qualidade.
Ao pensarmos ou falarmos na palavra Qualidade, pode vir à nossa mente uma série de elementos, desde uma marca ou produto até um serviço que é prestado por determinada empresa. A qualidade de algo, muitas vezes, envolve elementos subjetivos que podem ser difíceis de serem medidos, e isso não é diferente para o software. Assim, nesta lição, você conhecerá os elementos que podem ser usados para medir a qualidade de um software. Esta não é medida apenas pela sua funcionalidade, mas existem vários outros elementos que devem ser considerados para que se possa dizer se um software tem qualidade, ou não. Vamos conhecê-las?!
Quando falamos em qualidade, estamos nos referindo a algo extremamente subjetivo, ou seja, o que pode ser de boa qualidade para uma pessoa pode não ser para outra. Em relação ao software, dizemos que sua qualidade está relacionada ao atendimento das necessidades do cliente, ou seja, é preciso que ele tenha um desempenho preciso e confiável e gere valor para todos que utilizam (PRESSMAN; MAXIM, 2016). Se analisarmos a qualidade de um software, considerando que alguns usuários perdem horas “brigando” com o sistema, o software está, constantemente, passando por manutenções e há uma baixa satisfação dos usuários, então, podemos dizer que esse software tem baixa qualidade.
Nesse sentido, as métricas usadas para medir a qualidade do software são o tempo de execução das ações no sistema, o número de manutenções realizadas no sistema e a satisfação dos usuários, mas será que somente esses elementos são suficientes para avaliarmos a qualidade de um software? Será que não precisamos analisar outros elementos?
Nós poderíamos pensar também nos seguintes fatores: tempo (tempo em que o software fica “fora do ar”), recursos humanos exigidos para que o software se mantenha funcionando (hora/trabalho), indisponibilidade do sistema em relação ao impacto para os negócios da organização, imagem da empresa no mercado e a própria perda de confiança por parte dos clientes daquela empresa, entre outros. Se você pensar, a fundo, sobre os inúmeros elementos que envolvem a qualidade de um software, eu teria que escrever muitas páginas. Assim, para que possamos saber exatamente quais elementos são fundamentais de serem analisados, utilizaremos a literatura científica de Pressman e Maxim (2016) e Sommerville (2011).
Imagine que você é o(a) Técnico(a) em Desenvolvimento de Sistemas de uma organização e a diretoria da empresa perguntou-lhe sobre a qualidade do software que, atualmente, funciona na organização. O motivo da pergunta da diretoria se deve ao fato de que muitas pessoas têm feito reclamações do software, então, ela precisa de métricas quantitativas para confirmar se, realmente, o problema está no software, necessitando, então, de alguma ação estratégica sobre esse tema, ou se o problema está nos usuários, isto é, estão com alguma dificuldade operacional no uso dele.
Como a qualidade de algo é bastante difícil de se medir e, muitas vezes, envolve elementos subjetivos, você não pode colocar o seu emprego em risco tentando avaliar a qualidade do software apenas com base no que os usuários falam. Assim, para que você, como Técnico(a) em Desenvolvimento de Sistemas, tenha condições de avaliar a qualidade de um software, deverá seguir padrões e métricas que são reconhecidos no mercado para fazer isso. É nesse momento que a nossa lição o(a) ajudará. A literatura científica tem se dedicado, por anos e anos, ao estabelecimento de metas, atributos e métricas que permitam avaliar se um software tem boa ou má qualidade.
De acordo com Pressman e Maxim (2016, p. 414), a 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”. Considerando a conceitualização dos autores, três elementos devem ser detalhados quando discutimos a qualidade de um software:
Gestão de qualidade efetiva: basicamente, refere-se à aplicação dos princípios da engenharia de software. Softwares desenvolvidos sem esses princípios tendem a ter baixa qualidade. É a gestão da qualidade sendo realizada por meio da engenharia.
Produto útil: o software deve atender aos requisitos exigidos pelos usuários, mas não só isso, deve satisfazer requisitos implícitos, como a facilidade de uso. Softwares que realizam todas as funcionalidades pedidas pelo usuário, mas se apresentam com alta dificuldade de uso, são considerados de má qualidade.
Agregar valor para o fabricante e para o usuário: para o usuário, um software com valor agregado é o que traz mais confiabilidade, agilidade e segurança na execução dos processos e na geração de informações úteis à empresa. Para o fabricante, é aquele que gera pouca correção e menos manutenção e suporte ao cliente.
DICA: sempre que desenvolver um software, pense nesses três pilares da qualidade dele.
A literatura discute oito dimensões associadas à qualidade que podem ser aplicadas ao desenvolvimento de um software (PRESSMAN; MAXIM, 2016):
Qualidade de desempenho: o software atende a todos os requisitos especificados e validados pelo usuário?
Qualidade dos recursos: o software surpreende e encanta o usuário quando o utiliza pela primeira vez?
Confiabilidade: o software não apresenta falhas ou erros durante a execução das funcionalidades? Executa as funções em sua totalidade?
Conformidade: o software atende a tudo que foi planejado e às exigências externas, seja de regulamentações, seja de padrões?
Durabilidade: mudanças no software levam a elevadas taxas de erros? Se sim, o software tem baixa durabilidade, ou seja, com o tempo, será inutilizado, pois teve baixa qualidade no desenvolvimento.
Facilidade de manutenção: as manutenções são realizadas em períodos curtos e aceitáveis?
Estética: o conceito de estética, apesar de bastante subjetivo, para um software, deve representar um ambiente amigável, elegante, fluído.
Percepção: acredito que esse princípio seja o mais difícil, porque se baseia na percepção humana. Por isso, eu digo que experiências passadas podem influenciar na percepção da qualidade de um software. Se uma mesma empresa apresentou um software ruim no passado, a percepção dos usuários pode ser a mesma no presente, mesmo que o software tenha boa qualidade.
De acordo com as oito dimensões anteriores, podemos perceber que temos métricas de qualidade que podem ser mensuradas quantitativamente (com números), assim como temos outras métricas que são bastante subjetivas (abstratas). Assim, no próximo tópico, apresentarei alguns fatores de qualidade do software.
Os softwares são observados pelos fatores operacionais, pela capacidade de suportar mudanças e pela adaptabilidade a novos ambientes. A Figura 1 apresenta essas características de forma inter-relacionada com as oito dimensões anteriores nas perspectivas de revisão, transição e operação do produto software (PRESSMAN; MAXIM, 2016).
A Figura 1 apresenta, ao seu centro, a tríade da qualidade de software, formada pela Revisão do Produto (que está associada à facilidade de manutenção, à flexibilidade e à testabilidade), pela Transição do Produto (que está associada à portabilidade, à reusabilidade e à interoperabilidade) e pela Operação do Produto (que está associada à correção, à confiabilidade, à usabilidade, à integridade e à eficiência). Vejamos o significado de cada uma dessas palavras quando relacionadas à qualidade de software:
Correção: o quanto o software está de acordo com as suas especificações de requisitos.
Confiabilidade: o quanto o software realiza a função pretendida com precisão.
Eficiência: quantidade de recursos computacionais e códigos exigidos para executar uma função.
Usabilidade: esforço necessário para entrada, processamento e saída de dados.
Flexibilidade: esforço necessário exigido para modificar um programa em operação.
Testabilidade: esforço necessário para testar um programa de modo a garantir que ele desempenha a função esperada.
Portabilidade: esforço para migrar o software de um ambiente de hardware para outro ambiente de hardware ou de um software para outro ambiente de software.
Reusabilidade: esforço necessário para integrar um sistema a outro.
Apesar da qualidade de um software ser uma tarefa difícil de medir, essas são algumas métricas que você pode utilizar, de forma quantitativa, para medir se o seu software é de qualidade. Se colocarmos essas métricas na “ponta do lápis”, o(a) Técnico(a) em Desenvolvimento de Sistemas pode usá-las para justificar novos investimentos. A qualidade de um software pode ser medida pela própria equipe de desenvolvimento e pelos analistas, que podem pontuar o software, em relação aos elementos anteriores, em uma escala de 1 a 5. Essa avaliação pode ser feita também por alguns usuários.
Para que a qualidade de software seja garantida, a literatura utiliza a sigla SQA (Software Quality Assurance, ou Garantia de Qualidade de Software). A SQA envolve seis tópicos centrais: (I) um processo de SQA; (II) tarefas de garantia da qualidade de software; (III) métodos e ferramentas de engenharia de software; (IV) controle nas mudanças de software; (V) processo de desenvolvimento de software; e (VI) mecanismos de medição das atividades.
Os seis elementos, associados à SQA, possuem bastante semelhança aos fatores de qualidade de software da Figura 1. A SQA é, basicamente, a aplicação das fases de desenvolvimento de um software por meio dos processos de engenharia. Ou seja, se você aplica o que a engenharia de software ensina, você terá um software de qualidade. Para que o Técnico em Desenvolvimento de Sistemas possa garantir a qualidade do seu software, alguns elementos podem ser utilizados (SOMMERVILLE, 2011):
Padrões: no Brasil, o principal padrão, para a área de Engenharia de Software, é o MPS.BR (https://softex.br/mpsbr/) Muitas empresas exigem, como requisito de desenvolvimento de um software, a utilização do MPS.br, como forma de garantir a qualidade daquele software.
Revisões e auditoria: as auditorias visam verificar se as diretrizes de qualidade predefinidas foram seguidas. Geralmente, são realizadas por auditores de qualidade de software.
Testes: os testes objetivam encontrar erros. A SQA em testes visa garantir que os testes atingirão os seus objetivos.
Coleta e análise de erros/defeitos: só se consegue melhorar ou garantir que algo está bom se ele for medido. A coleta e a análise de erros/defeitos em SQA visam investigar o porquê de os problemas terem ocorrido.
Gerenciamento de mudanças: mudanças em projetos de software são um fator crítico. A SQA visa garantir que haja uma gestão adequada das mudanças.
Educação: A SQA defende que haja um aperfeiçoamento constante das equipes de software (por exemplo: treinamento e capacitação constantes). As tecnologias mudam constantemente, e equipes atualizadas tendem a se adequar, com maior simplicidade, às novas demandas.
Gerência dos fornecedores: no caso de contratações de softwares de terceiros, a SQA atuará com a definição das exigências para esses fornecedores.
Administração da segurança: com o aumento dos crimes cibernéticos, a SQA deve garantir que processos e softwares adequados sejam utilizados para se ter a segurança das informações armazenadas por um software.
Proteção: a proteção está relacionada a falhas que softwares podem ter e comprometer vidas humanas, como softwares que controlam aviões ou UTIs. A SQA visa avaliar o impacto de falhas e direcionar ações de gestão dos riscos.
Gestão de riscos: a SQA visa garantir que haja gestão de riscos e planos de contingência desses riscos, principalmente em softwares que exigem alto nível de proteção ou naqueles que são usados em ambientes críticos, como hospitais, estações nucleares e centros de segurança de dados governamentais.
Pela listagem anterior, pode-se perceber que o tema SQA é bastante abrangente e não é uma tarefa simples de ser realizada. Há a necessidade de uma equipe estar envolvida para garantir todos os itens mencionados. Para facilitar essa avaliação, por parte do Técnico em Desenvolvimento de Sistemas, apresentarei, a seguir, um quadro com metas, atributos e métricas para garantir a SQA.
O Quadro 1 é organizado em quatro metas gerais: qualidade dos requisitos, qualidade do projeto, qualidade do código e eficiência do controle de qualidade. Cada uma das metas tem um grupo de atributos que devem ser avaliados. A terceira coluna é a métrica que deve ser observada em relação à meta e ao atributo. Nesta lição, você aprendeu os elementos que envolvem a qualidade de um software. O conhecimento desses elementos, por parte do Técnico em Desenvolvimento de Sistemas, é fundamental, porque ele mesmo, muitas vezes, pode agir no sentido de garantir que as metas, os atributos e as métricas da qualidade de software sejam garantidos.
O mercado de software passou por grandes mudanças nas últimas décadas, devido à importância que os softwares possuem para as organizações. A simples “parada”/indisponibilidade de um softwares, por alguns minutos, pode ter um custo operacional na casa dos milhões ou, mesmo, bilhões para algumas organizações. Assim, os softwares organizacionais se tornaram ativos, os quais devem ter uma disponibilidade de horas, sete dias por semana e 365 dias no ano. Não há espaço para paralisações completas para aguardar que uma manutenção corretiva seja realizada ou para a atualização de uma versão.
Os softwares devem ser desenvolvidos com a mais alta qualidade para que ofereçam o menor risco possível e as maiores disponibilidade, confiabilidade, eficiência, flexibilidade, usabilidade, portabilidade e reusabilidade possíveis. Contudo desenvolver um software que atenda a todos os requisitos de qualidade não é uma tarefa simples e pode envolver muitos profissionais, além de um suporte da alta administração da empresa. De qualquer forma, independentemente das características da organização, você, como futuro(a) Técnico(a) em Desenvolvimento de Sistemas, agora, já conhece os elementos que envolvem a qualidade de um software e tem plenas condições de identificá-los ou, se não for possível, de informar que esses elementos devem ser observados se o objetivo for ter um software de alta qualidade.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: Uma Abordagem Profissional. 8. ed. São Paulo: Amgh, 2016.
SOMMERVILLE, I. Engenharia de Software. 9. ed. São Paulo: Pearson, 2011.