Boas práticas de qualidade de software

Quality is everyone's responsibility

A maior responsabilidade de qualquer organização é entregar aos seus clientes um produto que: resolva seus problemas, seja estável e livre de bugs, ou seja, um produto com qualidade.

Na Bionexo temos alguns funcionários que exercem o papel de QA (Quality Assurance) que geralmente são quem mais cobram que essa qualidade aconteça e funcione, mas isso não significa que são os responsáveis por ela. A responsabilidade disso é de todos da empresa.

O intuito deste artigo é listar algumas boas práticas de qualidade que todos que participam do desenvolvimento de produtos possam pensar e cobrar para entregarmos um produto de qualidade.

Separando em alguns estágios:

Planejamento de um produto.

Neste momento, quando planejamos um produto inovador ou uma nova funcionalidade para nosso software, algumas coisas importantes devem ser pensadas por quem participa desse planejamento:

  1. A idéia do produto/funcionalidade faz sentido para nossos clientes, quantos clientes e quais especificamente atingiremos com essa mudança?
  2. Eu tenho alguma idéia, alguma mudança no planejamento, que ajudaria ainda mais clientes ou que desenvolveriamos ainda mais rápido sem perder a qualidade?
  3. Faz sentido entregarmos essa funcionalidade com feature toggles ou no formato de canary release?
  4. Essa funcionalidade vai precisar de integração ou vai gerar dados que vão precisar ser integrados com algum outro sistema? Se sim, como garantir a integridade desses dados?
  5. Precisamos monitorar essa funcionalidade?
  6. Tem algum impacto de segurança para os dados do cliente ou para a empresa?
  7. Que tipos de testes adicionais talvez ela precise? Testes automatizados de aceitação, Performance, testes A/B, etc.
  8. No que eu posso contribuir com o time antes do produto ser desenvolvido?

Pronto para testes?

Antes de submeter aquela funcionalidade a uma bateria de testes, devemos validar como ela foi desenvolvida:

  1. A funcionalidade está clara? Sabemos o que é ela?o seu valor e seus critérios de aceite condizem com o que acreditamos que a empresa e nossos clientes precisam?
  2. Analisando o código que foi criado, ele possui testes suficientes e que fazem sentido? Consigo sugerir alguma melhoria?
  3. Conheço os dados que vão ser afetados, variáveis de ambiente, scripts que serão executados e o impacto dessas mudanças?

Testando

Esse é um dos momentos mais críticos, onde nos desafiamos e buscamos encontrar problemas antes do produto ir para produção. Lembrando que problemas podem ser pontuados por qualquer pessoa durante o processo de desenvolvimento, evitando possíveis dificuldades que o cliente possa ter.

  1. Tenho mapeado os pontos que devo testar do fluxo principal dessa funcionalidade, todos os pontos alternativos e possíveis variáveis que podem afetar a funcionalidade?
  2. Tenho acesso aos logs da aplicação?
  3. Estou monitorando as tabelas e seus dados que serão alterados?
  4. Tem algo que poderia ser automatizado?
  5. Tem algo que seria bem importante de ser documentado?
  6. A performance ou segurança dos dados será satisfatória para nossos clientes e para a empresa?
  7. A experiência do usuário parece ser boa, ou seja, está fácil e agradável de usar, visando os diferentes perfis de usuários que temos?

Pronto para produção?

Antes de colocarmos no ar nossa funcionalidade e todo mundo ter acesso aquilo que criamos:

  1. Todos os nossos testes passaram?
  2. Estou satisfeito com o produto entregue?
  3. Qual é o impacto da mudança?
  4. A documentação do deploy está correta?
  5. O deploy pode ser feito a qualquer hora do dia?
  6. Terá downtime ou scripts demorados que podem afetar nossos usuários?
  7. Se o deploy é complexo, será que podemos simular o deploy com dados próximos aos de produção?
  8. Quem lida com atendimento, ou diretamente com os clientes está ciente desta atualização, dos impactos ou possíveis problemas?

Em produção.

Após a entrega, quando possível analisar as estastiticas de uso, logs, feedbacks dos clientes e então sugerir melhorias ao time responsável.

Sim é muita coisa a se pensar né? E ainda assim é pouco. São milhares de clientes muitas vezes com necessidades e usos distintos, então a ajuda de todos os envolvidos nesse processo é sempre muito importante, já que todos queremos o mesmo objetivo, fazer a diferença entregando um produto de qualidade.