Opções de privacidade

Blog

Publicado em 05 de junho de 2018

Sempre foi comum ver companhias — dos mais diversos setores — falharem, não só por fraudes, mas também por falta de atenção a questões importantes como a qualidade de softwares.

Com as novas tecnologias e necessidade de integração com novos dispositivos, além do crescimento exponencial da demanda nos últimos tempos, surgiram também inúmeros casos de problemas no fluxo de trabalho de empresas dessa área.

De acordo com dados publicados por Alexandre Bartié em seu livro Garantia da Qualidade de Software, mais de 30% dos projetos são cancelados antes da sua conclusão, e aproximadamente 70% desses projetos são entregues com falhas nas funcionalidades previstas.

Além disso, existem percentuais ainda mais absurdos. Segundo a publicação, o custo médio dos projetos de software costuma exceder mais de 180% do que o previsto, sem falar nos prazos, que extrapolam em 200% o que é inicialmente definido.

Essa realidade se torna um pesadelo para as companhias por conta da complexidade e competitividade do mercado nos últimos anos. Se antes era suficiente ter o código revisado por um bom desenvolvedor para que as falhas de projeto fossem corrigidas, hoje os processos se tornaram mais complexos e as falhas cada vez mais perigosas para o ramo tecnológico.

Entre os principais problemas enfrentados estão o desgaste da imagem da empresa perante o mercado, os retrabalhos frequentes, o aumento nos custos e a queda nos lucros. Assim, nota-se o quão importante é que uma empresa esteja atenta ao nível de qualidade dos seus sistemas e projetos.

Entretanto, muitos ainda não conhecem o suficiente sobre as especificidades de um projeto de software de qualidade e permanecem perdidos entre as definições. Sabendo disso, montamos abaixo um guia completo para que você e sua equipe possam desenvolver sistemas com qualidade em todos os aspectos. Confira!

O que é qualidade de softwares?

Antes de falar da qualidade no desenvolvimento de softwares, é preciso entender sobre o que é a qualidade ou um produto com essa característica.

De modo sucinto, pode-se dizer que o conceito de qualidade é relativo ao que se espera de determinado produto. Um exemplo é que, para um carro de corrida ter a sua qualidade avaliada, é preciso testá-lo no asfalto, e não numa trilha de pedras.

Tendo isso em mente, pode-se delimitar o raciocínio e partir para o ramo de softwares. Nesse aspecto, é preciso saber se o sistema faz corretamente aquilo que foi proposto no projeto e se ele atende bem aos seus usuários.

Além disso, é preciso analisar a qualidade de diferentes pontos de vista. Enquanto o usuário precisa que o software seja fácil de usar e execute as suas funções de forma eficaz, o desenvolvedor pode considerar o nível de facilidade da manutenção como quesito para a avaliação. Todos esses aspectos devem ser analisados e serão abordados de forma mais detalhada no decorrer do texto.

Qual é a importância dela em um sistema?

Hoje em dia, os softwares estão presentes em diversas áreas da nossa vida, desde as redes sociais até sistemas médicos. Sabendo disso, é importante notar que softwares são desenvolvidos por humanos e, assim como os produtos de qualquer outro setor da indústria, estão passíveis de erros. Nessa conformidade, um software de má qualidade pode gerar desde prejuízos financeiros ou à imagem de uma empresa, até acidentes e a morte de pessoas por conta de erros não percebidos.

Entre alguns dos exemplos do que um software de má qualidade pode fazer, pode-se citar vazamentos de dados sigilosos (como documentos de clientes e organizações), falhas em sistemas bancários e até mesmo acidentes com aeronaves.

Um claro exemplo é o do foguete Ariane 5, em 1996, quando uma falha na conversão de valores fez com que a aeronave explodisse com quatro satélites a bordo, apenas 39 segundos após a sua decolagem. Estima-se que o prejuízo tenha sido em torno de US$ 370 milhões.

Portanto, para a comodidade e segurança de todos que dependem — de alguma forma — dos softwares, é vital que tais sistemas sejam devidamente testados e tenham sua qualidade garantida.

Quais são os pilares da qualidade de softwares?

Confira a seguir os pilares fundamentais para a qualidade de softwares:

Funcional

Esse é o primeiro aspecto a ser considerado no desenvolvimento de um sistema. Um software bem desenvolvido precisa cumprir o seu papel corretamente, tendo um código que atenda a todos os requisitos de forma eficaz, principalmente do ponto de vista do usuário — que é quem costuma ser mais afetado com os problemas decorrentes da falta de qualidade nesse ponto.

Um software bem produzido do ponto de vista funcional precisa atender às demandas previstas em todas as fases de sua implementação, tendo a menor quantidade possível de bugs e trabalhando de forma totalmente confiável.

Além disso, nessa fase, é importante contar com uma interface intuitiva e um bom desempenho. Nesse sentido, se o usuário fica confuso ao navegar ou irritado com a lentidão dos processos durante o uso da aplicação, nota-se que o sistema não está cumprindo o seu papel como deveria, perdendo em qualidade ainda que possua um código bem escrito.

Sabendo disso, para que se possa alcançar níveis aceitáveis de qualidade funcional no software, é preciso atentar para alguns recursos e ferramentas criados especialmente para ajudar nessa missão. Conheça alguns deles:

Testes unitários

Entre alguns exemplos, podemos começar citando os testes unitários de integração e aceitação. Eles fornecem ao desenvolvedor uma visão em tempo real de como está a sua aplicação, o que aumenta o nível de confiabilidade do seu código, principalmente em casos nos quais o desenvolvimento é incorporado a uma plataforma de integração contínua.

Testes de carga

Além disso, também pode-se contar com os testes de carga. Basicamente, esses testes disparam uma alta quantidade de requisições ao software enquanto tudo é monitorado para que se possa ter mais informações de como o sistema se comportará em situações de estresse.

Esse é um ótimo meio de definir planos para um fluxo de dados mais intenso — como deixar os servidores preparados para segurar o tráfego caso haja uma quantidade massiva de requisições — em determinado momento.

Para ajudar na execução desse tipo de teste, pode-se contar com ferramentas como o Locust — um framework que, além da definição de um comportamento de usuário com a utilização de Python, possui um modo de operação totalmente distribuído, simulando milhões de acessos ao mesmo tempo a partir de diferentes partes do mundo.

Testes de segurança

Por fim, também temos os testes de segurança, com os quais pode-se localizar falhas desse âmbito que porventura existam. Nesse tipo de teste, é emitido um relatório com todas as brechas identificadas, além de possíveis soluções para adequar o software aos padrões de qualidade necessários.

Para realizar essa tarefa, uma das ferramentas mais utilizadas é a Zed Attack Proxy. Esse framework pode ser utilizado como um plugin do Jenkins, obtendo um relatório detalhado das vulnerabilidades encontradas no sistema.

Estrutural

Esse aspecto avalia o nível de qualidade do código e o quão bem estruturado e escrito ele é. Nesse sentido, características como reusabilidade e modularização têm bastante peso na hora de garantir um código de fácil entendimento e que permita a inclusão de novos recursos sem causar maiores problemas ou danificar features já existentes.

Aqui, os programadores se tornam o público-alvo, visto que são eles os profissionais que precisam lidar com esse lado do software. Assim, é imprescindível garantir a qualidade nesse sentido, já que o nível de legibilidade e escalabilidade influenciará diretamente no tempo necessário para implementar recursos e corrigir bugs.

Para que se possa atestar a qualidade estrutural, é preciso que o código seja testável e possua métodos atômicos, isto é, claros e com funções bastante específicas. Quando não se atende a essas condições, não é possível implementar testes automatizados, comprometendo, portanto, o nível de qualidade funcional da aplicação.

Além disso, nesse ponto, é importante considerar com mais atenção o quão legível é o código. Ele precisa ser escrito com variáveis e nomes de métodos simples e explícitos, facilitando o seu entendimento por novos programadores e acelerando a implantação de novos recursos.

Para essa tarefa, podemos contar com recursos como o plato.js e linters, de modo a garantir uma boa performance e confiabilidade do sistema.

Processos

Por fim, garantir a qualidade nos processos é, sucintamente, adotar técnicas e métodos que tornem o procedimento de implantação do sistema o mais equilibrado e simples possível. Nesse sentido, os colaboradores do projeto — incluindo clientes — são os mais afetados, visto que essa qualidade interfere diretamente nos prazos de entrega e requisitos do software.

Estar atento ao prazo de entrega e manter o que foi acordado no orçamento são detalhes fundamentais para que o cliente mantenha a confiança e não se frustre quanto ao desenvolvimento do projeto, o que pode gerar problemas na comunicação entre as partes.

Para isso, é necessário que os times de desenvolvimento estejam sempre sincronizados e que o gestor responsável esteja ciente das necessidades e do fluxo de trabalho de todos os profissionais envolvidos no projeto. Desse modo, ele pode negociar prazos adequados para a implementação de cada recurso. Se isso não acontecer, provavelmente haverá problemas na qualidade do código escrito por incoerência dos prazos estipulados para cada etapa.

Por último, a chave para se ter qualidade nos processos de desenvolvimento é um fluxo de entrega consistente. Frequentemente, ocorrem mudanças na metodologia de desenvolvimento enquanto os projetos ainda estão em andamento, seja por prazos curtos ou por problemas nas demandas do cliente.

Em qualquer caso, a mudança de metodologia enquanto um projeto está sendo desenvolvido é muito prejudicial e deve ser evitada a todo custo. Além de possíveis atrasos, essa é uma atitude que provoca estresses desnecessários para o time, que precisa mudar métodos de trabalho constantemente.

Para ajudar nessa tarefa, métricas ágeis como painéis scrum e o burndown são bastante úteis, visto que ajudam na visualização do fluxo de trabalho do time como um todo, auxiliando, assim, a estimar prazos mais realistas.

Planejar sprints e utilizar retrospectivas também são extremamente úteis para se ter um processo de desenvolvimento no qual as expectativas do cliente e dos membros do projeto sejam atendidas, além de colaborar para uma rotina de trabalho mais produtiva e saudável.

Como avaliar o nível de qualidade dos softwares?

A busca pela qualidade nos softwares não deve se restringir apenas a tópicos como protótipos, testes de carga e execução ou outros aspectos técnicos. Para se conseguir chegar a um nível de excelência no desenvolvimento e atender a todas as demandas dos clientes, é preciso ter dentro da empresa uma comunicação de boa qualidade e contar com uma equipe treinada.

Isso também ajuda a garantir a conformidade de processos, a utilizar metodologias ágeis de desenvolvimento (como DevOps) e a seguir corretamente o escopo, os custos e os prazos por meio de uma rotina de trabalho integrada e devidamente otimizada.

Para isso, é necessário um processo de melhorias constantes, por meio da utilização e análise de indicadores de desempenho individual e coletivo. Além do mais, um ambiente mais competitivo e a atenção aos tópicos a seguir representam uma vantagem ainda maior. Confira:

Adote modelos internacionais de qualidade

A partir do momento em que se percebeu que as melhorias em serviços e produtos são constantes — dada a importância de corrigir falhas e evitar transtornos maiores, como custos elevados —, foram criados padrões de qualidade, como as normas ISO 9000 e a ISO/IEC 12207. Esta última está voltada para o mercado de softwares e estabelece uma estrutura comum para processos de desenvolvimento e ciclos de vida.

Além disso, surgiu o SPICE, sigla em inglês para “Melhoria de Processos de Software e Determinação de Capacidade” que serviu de base para que a norma ISO 15504 fosse formulada, tendo o objetivo de definir uma metodologia, um enquadramento e uma linguagem em comum para que se pudesse avaliar e melhorar os processos dos provedores de sistemas.

Entretanto, uma das abordagens de maior importância para o ramo do software é o modelo CMMI — sigla para “Modelo Integrado de Maturidade em Capacitação”, em tradução livre. É um framework com um modelo de princípios e técnicas voltados para a melhoria de processos e que orienta as empresas a respeito de elementos fundamentais para que se possa obter um fluxo de trabalho eficaz.

O CMMI trabalha com uma metodologia de 5 estágios que leva em consideração desde questões como resultados inesperados e cenários caóticos até processos com resultados previsíveis e com possibilidade de evoluções constantes.

Utilizá-lo traz diversas vantagens para a melhoria do desempenho das empresas de desenvolvimento de sistemas, como um maior nível de confiabilidade quanto a cumprimento de prazos, maior fidelidade ao planejamento de custos e aumento na capacidade de gestão das atividades de desenvolvimento. Tudo isso se deve à rígida medição de processos imposta pelo framework.

Além disso, o redesenho de processos fornecido pelo framework — que preza pela racionalidade — também evita retrabalhos e problemas após o produto ser entregue. Entretanto, é importante lembrar que o processo de melhoria é gradual e constante, exigindo esforços de todos os setores relacionados à TI.

Utilize protótipos na nuvem

Desenvolver protótipos ajuda a compreender melhor qual o propósito do sistema que está sendo criado. É, também, o momento de valorizar o produto por meio da sugestão de recursos e melhorias, além de corrigir possíveis erros de planejamento ou execução, por exemplo.

Utilizar a nuvem para lidar com essa etapa é importante para a redução de falhas após a entrega, visto que é possível interagir de forma muito mais prática com o time de desenvolvimento e até mesmo com o cliente, ampliando as possibilidades e vantagens já conhecidas no processo tradicional de prototipagem.

Use metodologias de desenvolvimento ágil

O surgimento das metodologias de desenvolvimento ágil foi impulsionado por um mercado no qual existem pressões constantes por produtos de qualidade em prazos curtos. Elas são uma forma de dirigir a execução de projetos, os quais fazem uma divisão inteligente de problemas em itens menores — o que auxilia a integração entre todos os colaboradores e cria, no ambiente empresarial, uma cultura que lida com mudanças de modo mais prático, simples e natural.

O DevOps é um exemplo de metodologia desse tipo que vem sendo bem-sucedida nas empresas nos últimos tempos. A técnica se tornou bastante utilizada por conta dos seus ótimos resultados, focando no aprimoramento da comunicação e integração entre os líderes do setor de TI e os desenvolvedores.

Para aproveitar as vantagens da integração do DevOps na empresa, pode-se utilizar ferramentas como o Docker, que possibilita a portabilidade de software ao colocá-los em containers digitais, transformando as aplicações em unidades empacotadas que podem ser transportadas através de diferentes plataformas.

Esteja atento à fase de testes

A fase de testes está muito além da busca por bugs. Além dessa, existem diversas etapas, como a escolha das condições de teste, o planejamento, o monitoramento, a modelagem e a conferência de resultados. Também é importante utilizar indicadores de desempenho, de modo a verificar se o sistema está funcionando da forma esperada.

Nesse aspecto, também importa destacar as diferenças entre o teste e a duração. Enquanto o objetivo do teste é a demonstração de falhas provocadas por erros de código, por exemplo, a depuração é uma tarefa voltada para a reparação do código e analisa se todos os bugs foram corrigidos adequadamente para que, logo em seguida, sejam executados os devidos testes.

Essa é uma fase muito importante do desenvolvimento de softwares e não deve ser eliminada ou reduzida, como é de costume em diversas empresas quando o prazo está próximo do fim — ou mesmo quando já estão atrasadas.

Seguir essa orientação é importante pois o mundo real costuma ser diferente em relação a ambientes de teste, portanto, seguir minuciosamente os testes funcionais e estruturais é um ato crucial para o sucesso da implementação do sistema.

Por que automatizar os processos de avaliação de qualidade?

Assim como qualquer outra atividade exercida por humanos, a programação de sistemas está sujeita a eventuais erros, até mesmo durante o processo de avaliação da qualidade do software, no qual algum problema pode passar em branco.

Automatizar essa tarefa é uma forma de evitar problemas dessa natureza, uma vez que procedimentos automatizados se mostram mais precisos e confiáveis, além de permitir uma verificação contínua, evitando surpresas desagradáveis.

Na área de Data Science, por exemplo, contar com sistemas automatizados é de grande importância para manter a qualidade do produto desenvolvido, já que temos presenciado um crescimento exponencial na quantidade de informação online nos últimos anos.

Quais são os impactos quando os níveis de softwares estão abaixo do esperado?

Acompanhe, a seguir, os impactos mais significativos resultados de um baixo nível de qualidade de softwares:

Baixo faturamento

Um sistema sem uma interface prática e fluida — ou até mesmo sem um nível de velocidade aceitável no carregamento de dados — tende a perder em faturamento por baixas vendas e menor aceitação do público.

Redução de clientes

Todos querem retorno e satisfação ao realizar um investimento. Se o seu produto não atende ao cliente da forma que ele espera ou com o nível de qualidade que ele deseja, sua empresa certamente perderá clientes, que procurarão melhores opções no mercado.

Baixa funcionalidade

Um software de má qualidade pode ter suas funcionalidades limitadas, apresentando lentidões e travamentos, principalmente ao lidar com grandes quantidades de dados. Com a ascensão das tecnologias de Data Science e Big Data, é fundamental que a sua empresa esteja preparada para essa realidade.

Falta de segurança

Um sistema de má qualidade também pode prejudicar a sua empresa de uma outra forma bem grave: por meio de falhas de segurança. É comum que empresas sofram altos prejuízos por erros de softwares ou até mesmo invasões por descuidos que poderiam ser evitados. Os prejuízos podem ser desde financeiros até o comprometimento permanente da imagem da companhia.

Quais são as certificações de qualidade de softwares?

Para que se possa contar com profissionais devidamente preparados para implantar culturas de testes de qualidade de softwares nas empresas, existem diversas certificações que podem ser obtidas. Conheça algumas delas a seguir:

CTFL

A CTFL (sigla para Certified Tester Foundation Level) tem o objetivo de certificar que o profissional tem os conhecimentos fundamentais de testes de qualidade de softwares e normalmente é tirada no início da carreira. Custa em torno de R$ 350,00 e possui validade internacional sem expiração. Além disso, a prova é presencial e possui 40 questões em português.

TPMTE

Já a TMap Next Test Engineer possui foco nos negócios e na interação entre desenvolvimento e teste. Também possui validade internacional sem expiração e custa R$ 640,00. Sua prova é online e é composta por 40 questões que podem ser em inglês ou em português.

ISEB-STINT1

A Intermediate Certificate in Software Testing aborda a prática nos testes de software, mas, enquanto as anteriores não possuem pré-requisitos, esta exige 18 meses de experiência somados à certificação CTFL ou treinamento BCS. A certificação não expira e possui validade internacional. Mais cara que as anteriores, custa R$ 844,00 e é composta por 25 questões online em inglês.

Com o crescimento cada vez maior do volume de dados e da velocidade como tudo acontece no âmbito digital, o Data Science desempenha um papel de destaque nas empresas do setor, visto que, além de uma forma de estar à frente do mercado, tem sido a melhor aliada no objetivo de tirar o máximo proveito desse mar de informações.

Assim, contar com ferramentas e práticas que garantam a qualidade dos softwares se mostra fundamental, uma vez que a precisão em sistemas que realizam o tratamento de dados desse tipo é crucial para o sucesso dos negócios.

Quer entender ainda mais sobre como garantir a qualidade de softwares em seu negócio? Então entre em contato conosco agora mesmo!