Analisando dados com Qualidade #003
Introdução
Enquanto continuo minha busca por um novo emprego, estou atualizando meu projeto pessoal para comparação em benchmark de várias linguagens de programação.
Durante essa atualização e separação dos códigos em "pluggins" (outros repositórios especificos apenas para armazenazem dos códigos de uma linguagem individual) percebi que estava fazendo algo comum, porém de forma inconsciente, no meu ambiente de trabalho a Qualidade de Software.
Qualidade de Software
Em um grande resumo, Qualidade de Software é uma etapa do processo de gestão de software, mas que também se aplica ao ciclo de vida utilizado durante a produção.
Segundo a ISO-9126 é definido um conjunto de atributos de qualidade que serão utilizados durante a produção do software, podendo ser:
- Internos (atuam na etapa de gestão).
- Externos (atuam na etapa de desenvolvimento).
- Em uso (atuam na etapa de implantação do sotware).
Mas de forma simplificada os atributos de qualidade podem são classificados em:
- Funcionalidade (O software consegue realizar os objetivos definidos ?)
- Confiabilidade (O software consegue "sobreviver" em caso de falhas e manter seu estado prévio?)
- Usabilidade (O software consegue ser utilizado com facilidade, sendo acessivel aos usuários?)
- Eficiência (O software é eficiente quanto aos recursos utilizados?)
- Manutenibilidade (O software consegue "sobreviver" á alterações sem afetar tanto sua entropia?)
- Portabilidade (O software consegue coexistir com outros softwares no ecossistema podendo ser instalado e desinstalado com fácilidade?)
Vale ressaltar que os Atríbutos de Qualidade funcionam como uma balança, o equilíbrio é afetado por escolhas arquiteturais até a linguagem de programação escolhida.
Mas o que isso tem a ver com análisar dados?
Analisando dados com Qualidade (de software)
Caso você tenha percebido no tópico acima, a Qualidade de Software serve de guia para desenvolver softwares com ...bom... Qualidade e a forma de medir a qualidade é por meio de métricas.
Então essas foram os pensamentos (ou métricas) que acabei desenvolvendo ao longo do tempo:
1. Entenda o problema a ser solucionado
Saiba onde terminar antes de começar. - Alguém
Ao análisar dados a primeira coisa que precisamos fazer é compreender qual o problema que estamos enfrentando. Segue um exemplo real:
Algoritmo genético em R
O problema
Eu trabalhei com um código em R cuja funcionalidade era otimizar parâmetros de entrada um modelo de análise e como resposta recebia um outro conjunto de variáveis referentes á resposta do modelo.
(Veriaveis de entrada) P1, P2, P3 -> (Variaveis de saida) R1, R2, R3
Por causa da situação o Atributo de qualidade a ser priorizado era a Eficiência e a Métrica para validação era o Tempo de execução.
Mas ai está o problema, R é um linguagem pouco performática, o Algoritmo genético demorava executar e para piorar... o pacote GA (utilizado para o algoritmo genético) não conseguia ser executado em paralelo.
Então como resolver? Trocar o R? Não, porque Manutenibilidade era outro Atributo de Qualidade a ser priorizado.
A solução
Eu recriei um algoritmo genético e alterei o código de forma que eu conseguisse paraleliza-lo, mas para eu conseguir ter esse resultado precisei Entender o problema mas não apenas isso, quanto mais variáveis de entrada maior era o tempo de execução, então criei uma matrix de correlação entre as variaveis de entrada e saida, assim eu conseguia descobrir como determinada variável de entrada afetavam as variaveis de saida, assim podendo eliminar variáveis sem expressividade.
2. Identifique as métricas de validação
Não se mede Peso em m/s. - Eu
Agora voltando ao meu projeto pessoal de benchmark, para cada repositório pluggin eu tenho um checklist para garantir a Qualidade de Software do projeto.
Métricas nem sempre precisam ser complexas de analisar e o checklist é justamente um excelente exemplo.
- Possui teste automatizado?
Para manutenibilidade e funcionalidade.
- Os testes automatizados funcionam corretamente?
Para manutenibilidade e funcionalidade.
- Possui arquivo de simulação (Bench.sh)?
Para portabilidade e usabilidade.
- O arquivo de simulação (Bench.sh) funciona corretamente?
Para portabilidade e usabilidade.
- Possui Dockerfile?
Para portabilidade.
- O arquivo Dockerfile funciona corretamente? Possui Dockerfile?
Para portabilidade.
- O repositório possui um passo-a-passo de como executar a simulação?
Para manutenibilidade, portabilidade e usabilidade.
- Esta simulação está contida em um branch individual?
Para manutenibilidade, portabilidade e usabilidade.
- Esta simulação possui um release?
Para portabilidade.
Conclusão
Aos poucos estou tendo mais real consciência do conhecimento que tenho, Arquitetura de Software e Qualidade de Software sempre foram tópicos de grande interesse para mim e que acabaram se tornado naturais.
Recentemente estou gerando um pluggin para a linguagem de contratos inteligêntes Solidity, o bml-solidity e perceber o quanto o javascript encapsula os ".sol", me fez ter uma perspectiva nova sobre como um ecossistema afeta a Qualidade de Softwate.
Caso tenham alguma dica do que eu possa fazer acrescentar, ou caso só queiram conversar estou a disposição.
Obrigado pelo tempo de vocês e caso tenham se interessado visitem o repositório principal Bechmark Languages.