Como buscar maior qualidade no desenvolvimento de software?
Muitas empresas têm falhado por não aprenderem com seus próprios erros. No caso das que trabalham com desenvolvimento de software, o brutal crescimento na demanda, ocorrida nos últimos anos, além das novas tecnologias e as necessidades de múltiplas integrações foram o start para inúmeros problemas no workfow dessas companhias. Basta lembrar que, segundo pesquisas, mais de 30% dos projetos são cancelados antes de serem encerrados; o percentual de projetos que falham na entrega das funcionalidades prometidas ultrapassa os 70%; da mesma forma, os custos médios costumam extrapolar mais de (pasme!) 180%. E os prazos? Estes, de acordo com a mesma pesquisa, excedem em cerca de 200% os deadlines originalmente acordados.
Estes dados são assustadores, mas não são fictícios. Constam de pesquisas divulgadas no livro “Garantia da Qualidade de Software”, de Alexandre Bartié (que você, inclusive, consegue ler na íntegra aqui!). O problema é que, até algum tempo, colocar um desenvolvedor para navegar por um código já era suficiente para corrigir uma falha de execução e solucionar um problema. Nos dias de hoje, entretanto, a extrema complexidade e competitividade entre as empresas do setor fizeram da falha uma palavra maldita nas empresas de desenvolvimento. Os constantes retrabalhos (perda de produtividade), a imagem desgastada da empresa perante o mercado e o aumento de custos explicam porque a busca pela qualidade no desenvolvimento de software é quase um mantra no segmento. Mas por onde começar? Que erros no workflow da concorrência poderemos usar para evitar prejuízos, melhorar o nível de satisfação dos clientes e a previsibilidade dos resultados finais? Saiba de tudo isso, a partir de agora.
A qualidade do produto como ideia fixa na engenharia de software
A incessante busca pela qualidade no desenvolvimento de software não deve ficar restrita a questões de ordem técnica, como prototipagem, realização de testes de estresse ou execução, etc. Embora também envolva esses fatores, alcançar a tão sonhada excelência no desenvolvimento e preencher as necessidades dos clientes envolve assegurar conformidade de processos, utilização de metodologias ágeis de desenvolvimento (como DevOPs), cumprimento do escopo, prazo e custos por meio de um fluxo de trabalho integrado e otimizado (contando com o auxílio de automatizações, sempre que possível), além, é claro, da melhoria na qualidade da informação que transita na empresa e do treinamento de pessoal. Tudo isso exige um sólido processo de benchmarking competitivo, mensuração de indicadores e análise de desempenho individual e coletivo.
Para que se alcance o “estado de arte” em desenvolvimento de softwares, alguns detalhes devem ser observados:
Adoção de modelos internacionais de qualidade
Foi sob a perspectiva sistemática de que melhorias em produtos ou serviços são processos ininterruptos (uma vez que erros e procedimentos falhos geram custos altos), que surgiram os maiores modelos de qualidade, como as normas ISO 9000 e, mais especificamente à área de engenharia de softwares, a ISO/IEC 12207 (que estabelece uma estrutura comum para os processos de ciclo de vida e de desenvolvimento) e o SPICE (Software Process Improvement and Capability Determination), base para a formulação da norma ISO 15504 (que objetiva estabelecer um enquadramento, uma abordagem e uma linguagem comum para avaliar e melhorar os processos dos fornecedores de software). Uma das mais importantes abordagens à área é, entretanto, o modelo CMMI (Capability Maturity Model Integration).
O “Capability Maturity Model® Integration” (CMMI) é um framework que descreve princípios e práticas voltadas à melhoria de processos, fornecendo à organização orientações sobre elementos essenciais em um fluxo eficiente. Pode ser consultado para direcionar a melhoria de processo em um projeto, divisão ou em uma organização inteira. O modelo lida com um caminho evolucionário de 5 níveis, que considera desde processos com resultados imprevisíveis (e até mesmo caóticos para processos definidos), a trabalhos com resultados previsíveis e com possibilidade de melhoria contínua. Suas principais vantagens para a melhoria da performance de uma empresa de desenvolvimento software são:
- Maior confiabilidade quanto a cumprimento de prazos e custos (decorrente do rigor que o CMMI impõe quanto à medição de processos);
- Aumento no gerenciamento das atividades ligadas ao desenvolvimento;
- Menor ocorrência de retrabalhos e erros após a entrega;
- Redesenho de processos de forma mais racional na empresa.
Vale lembrar que esse processo de melhoria é contínuo, gradual e exige investimentos em todas as nuances relacionadas à TI (pessoal, recursos, estratégias).
Além do apoio em um modelo de processo organizacional eficiente, há ainda outras questões a serem verificadas para a melhoria no resultado final ao cliente. Vamos tratar rapidamente de mais 3 delas:
Prototipagem em nuvem
A prototipação ajuda a entender a que se propõe o software que está sendo desenvolvido. É uma oportunidade de propor aperfeiçoamento, verificar erros de requisitos, execução, etc., minimizar riscos e aumentar o valor agregado ao cliente. Trabalhar com protótipos em nuvem maximiza as vantagens já existentes no processo tradicional de prototipagem, na medida em que a mobilidade própria desse meio facilita a interação entre diversos desenvolvedores, bem como com o cliente, reduzindo as falhas percebidas após a entrega do produto.
Metodologias ágeis de desenvolvimento
As pressões intensas do mercado por prazos cada vez menores e qualidade cada vez maior impulsionou o surgimento das metodologias ágeis de desenvolvimento de softwares. Trata-se de uma forma diferenciada de gerir o projeto, dividindo problemas em produtos menores, aumentando a integração entre todos os stakeholders e criando no ambiente corporativo uma cultura que trabalhe com as mudanças de uma forma mais rápida e natural.
Um exemplo de metodologia ágil que vem sendo usada com ótimos resultados nas empresas é o DevOps, um conceito focado no aperfeiçoamento da comunicação e integração entre desenvolvedores de softwares e administradores da infraestrutura de TI, eliminando o antigo paradigma de isolar as duas equipes como se fossem ilhas desconectadas, sem interdependência. Essa visão estrábica da TI gera desperdícios de recursos, falhas na execução do projeto e estatísticas como as citadas no início do nosso post.
Essa interligação global no processo de desenvolvimento pode ser feita por meio de poderosas ferramentas que já existem hoje no mercado, como o Cerberon, que possui funcionalidades como One-Click Deploy, controle de versão, implementação ágil, métricas e indicadores, etc.
Atenção total à fase de testes
Testar não é apenas executar para verificar erros. Há ainda diversas etapas, como planejamento, monitoramento, escolha das condições de teste, modelagem, checagem dos resultados e utilização de indicadores para avaliar se o nível de performance está em linha com o esperado. É importante destacar, nesse ponto, que muitas pessoas confundem depuração (debugging) e teste, duas atividades bastante distintas. Enquanto esta última objetiva demonstrar falhas que são causadas (entre outras razões, por erros de códigos), a depuração é uma atividade de desenvolvimento que repara o código e verifica se todas as imperfeições foram devidamente reparadas para que, em seguida, seja realizado um teste de confirmação.
Não se deve pular as etapas de teste ou mesmo enxugá-las, como muitas empresas fazem quando o prazo se esvai. Assim, os testes funcionais (requisitos, regressão, tratamento de erros) e estruturais (execução, estresse, recuperação) devem ser seguidos à risca, especialmente porque o ambiente de testes costuma ser bem diferente do que efetivamente será o que vai rodar o software.
Como você pôde perceber, qualidade no desenvolvimento de software envolve diversos fatores, mas ter acesso às ferramentas e metodologias corretas já facilita bastante o processo. A propósito, sua empresa utiliza alguma metodologia ágil? Já experimentou trabalhar com uma solução que integre desenvolvimento e operações? Deixe seu comentário abaixo!