Pontos de Função: um pouco sobre métricas. Parte I
- #Lógica de Programação
- #Boas práticas
- #Arquitetura de Sistemas
Métricas de Software: Vamos falar sobre pontos de função Parte I
Salve jovem padawan, após uma eletrizante noite com o Deploy da DIO, com tantas novidades neste Outubro de 2021, com surpresas a mil, agora teremos em nossa comunidade novos horizontes além mar, além dos projetos nacionais, chegaram os projetos internacionais em Portugal.
Agora nossa agenda conta com 163 cursos gratuitos em diversas tecnologias, para animar ainda mais novos bootcamps e acelerações é muita notícia fantástica, hoje meu trabalho esta próximo do limiar, este é o artigo 99° escrito com muito carinho, uma retribuição a nossa comunidade por tanta coisa recebida, da minha parte venho enriquecer um pouco mais nosso Gruppen com velhas historias de mainframe, preparados? Agora é hora de voltar ao laptop e bora terminar de escrever sobre Ponto de Função.
Pergunta do milhão
Responda como souber, é uma pergunta bem difícil e capciosa. Como podemos quantificar o trabalho e estimar o tempo para desenvolver um software? Se é pedido para codificar um aplicativo através da especificação em papel com fluxogramas/uml, quantas horas seriam necessárias para entregar o projeto com a chave na mão?
Antes de sair fazendo a moda do Dr. Ivon Saf: Estime o tempo necessário para ler os documentos de Analise Previa, Requisitos do Sistema e Especificações para codificar. Agora pense no tempo gasto com o pedidos de esclarecimento com analista senior? Com pessoal de infraestrutura? Com o pessoal da base de dados? Com o pessoal da rede? Com a auditoria? Com o pessoal da segurança dos dados e LGPD? Com os testes unitários? Testes de Integração? Testes de produção? Passagem do aplicativo entre os ambiente de desenvolvimento para aceite e após produção? Difícil ne? São muitas equipes envolvidas, muitas variáveis em jogo e para complicar fornecedores diferentes em cada etapa do processo.
Leia a posteriori: Síndrome do Dr. Ivon Saf, metendo os pés pelas mãos. https://web.digitalinnovation.one/articles/deu-ruim-no-levantamento-de-requisitos-a-sindrome-de-dr-ivon-saf
Na metodologia ágil tem aquele joguinho de poker para estimar, mas será que resolve para todas as atividades? Como proceder. O que fazer? Help. Calma, como sempre digo, nao entre em pânico.
Juntos vamos tentar esclarecer este tema terrível e aprender um pouco mais sobre métricas e pontos de função. Mas lembre-se cada empresa tem a sua própria calculadora e metodologia, alguns são segredos guardados a sete chaves, outros escancarados ao publico.
Introdução
Pontos de Função é uma palavra estranha e esquisita, os mais jovens talvez nunca tenham ouvido falar sobre ela, mas é uma técnica bem antiguinha, surgida la nos idos de 1979, mais uma vez nos laboratórios da IBM e publicado num artigo de Alian J. Albrecht intitulado Measuring Application Development Productivity, originalmente vocacionada para projetos em mainframe, mais precisamente nas linguagem Cobol, PL/I e Rexx, linguagens em paradigmas procedurais, mas que no decorrer dos anos, foi gradativamente expandindo-se para outras linguagens de programação em baixa plataforma.
PF é uma técnica de métrica de software, que é usada para estimar o esforço e o tempo gasto em uma determinada tarefa em Informática, sendo uma atividade retroalimentada em que resultados atuais, são avaliados, analisados e reinseridos no cálculo da métrica e aprimoradas para serem usada em projetos futuros, sendo dinâmica e fortemente usada para definir o melhor modelo de custos.
Sei que o tema é um pouco obscuro, relaxe, tentarei clarificar tudo antes do final, então para podermos prosseguir, vou definir alguns tópicos importantes, vou primeiro dar umas palavrinhas em teoria e na segunda parte deste artigo vamos de mão na massa, onde voltaremos ao tópico inicial elucidando o tema e aplicando a técnica, através de exemplos pratico: o calculo de PF de um desafio de código, usando uma planilha MS Excel para calcular, agora vamos as definições.
O que são métricas de software?
Programação é arte pura, nosso trabalho é muito artesanal, bem intelectual que dependente da habilidade pessoais de cada analista / programador, por isso os gestores de equipe, tentam através de testes, experimentos e muitas dores dor de cabeça , para determinar de maneira satisfatória o tempo gasto e o grau de dificuldade de uma tarefa, para cobrarem o valor Hora / Homem adequada e obterem boa margem de lucro ao venderem serviços de desenvolvimento em Fabricas de Software.
Não é uma atividade fácil devido a quantidade de variáveis entre elas o soft e hard skills do DEV, experiência em tecnologia, ambiente, empresa e disponibilidade para engajar-se no projeto. Nos últimos anos o desenvolvimento de software transformou-se numa Babel maluca com tanta especificações, arquiteturas e LPs.
E um tema bem delicado, que alguns grandes gestores erraram feio, caindo no erro crasso e clássico das 9 gravidas, que teoricamente dão a luz em um bebe na vã tentativa de salvar o prazo, pois o custo foi perdido faz tempo.
Trabalhar em desenvolvimento não é fácil
Imagine a quantidade de etapas que devemos percorrer e satisfazer ao programar, pois a codificação é uma atividade de ciências humanas em que lidar com pessoas dificulta muito, coloca vários impedimentos e travões. Seus soft skills são colocados a prova, treine lidar com pessoas, falar por email, telefone, chat e videoconferência. Controle seu emocional, muitas vezes no calor do momento, agimos irracionalmene e colocamos tudo a perder. Antes de falar pense, veja se é o melhor momento.
Estamos num adventure lutando contra ogros, orcs, goblins e dragões, para chegar ao castelo do mago e poder efetuar a guarda do programa em produção, uma tarefa digna de um mestre Jedi e cumprir prazos e custos nao é uma tarefa simples.
Atenha-se a inúmeras variáveis que estão em jogo, nao basta codificar, tem que fritar o peixe, olhar o gato, abanar a brasa e ir pra galera. Não é uma listagem exaustiva mas devemos nos ater nos seguintes temas:
- Usabilidade
- Técnicas
- Segurança
- Acessibilidade
- Performance
- Interoperabilidade
Usabilidade
Pense no usuário, pense na pessoa que ira utilizar o aplicativo. User-friendly é o que dizemos de um software fácil de operar, acessando menus, com telas de ajuda e na suas evoluções aprender suas novas funcionalidades rapidamente e nas mudanças de plataforma a curva de aprendizagem é mais célere, pensando em ajudar o usuário a utilizar o app sem erro. Um desafio e tanto ao desenvolvedor que deve atentar ao melhor caminho logico no preenchimento dos formulários e troca de dados entre o Sistema e o operador, usando tecnicas avançadas em UC e UI, pensar que quando comecei o problema eram as 24 linhas e 80 colunas de um BMS do CICS online.
Técnicas
A cada dia acadêmicos lançam novas formas de programar, os fabricantes e as comunidades lançam novas especificações, sejam em comandos novos, sejam em syntatic sugar para facilitar a codificação, releases e mais releases.
Deploys de linguagens de computação trazem sempre novos desafios, sejam em entendimento do código novo, seja na supressão ou evolução da linguagem, sem contar a mudança de paradigmas e tendências de manadas que enlouquecem qualquer dev com mais de 15 anos de experiência. é uma insanidade so.
Acessibilidade
Outra atenção é a dificuldade de codificar para tantos sistemas diferentes, hoje um usuário pode acessar o software através de computadores pessoais, laptops, tablets, smart phones e até tv. Gerando desafios no desenvolvimento de aplicativos.
Tantas necessidades devem ser atendidas, problemas com comunicação e falhas em transmissão de dados, causando gargalos no processamento e usuários que nao conseguem utilizar plenamente o aplicativo.
Performance
Ao codificar temos que ter código limpo, performático e de fácil entendimento para as equipes de sustentação, acesso ao banco de dados, comunicação entre servidores e atentos ao consumo de memória e CPU.
Cuidado ao codificar declarando variáveis em demasia, querys confusas ou com acesso desnecessários a tabelas, ícones e imagens grande demais para dispositions moveis.
Interoperabilidade
Palavra difícil e estranha, mais uma vez, não entre em pânico, o tiozão explica, trata-se da capacidade de um sistema informático dentro de uma infraestrutura especifica, poder se comunicar com outros sistemas e trocar arquivos em processamento de dados entre ambientes.
O que é Ponto de Função.
Viram quantas variáveis um dev tem que controlar para codificar, dificuldades não previstas que consomem tempo e por mais metodologias de controle surgem, é muita coisa para avaliar e atentar-se, imagine a tarefa hercúlea que é cobrar pelo serviço, nao me surpreende a terceirizaçao, quarteirizaçao e até quinteirizaçoes.
No passado a maioria dos analistas vinham de Engenharia Tradicionais e trouxeram técnicas para planejar, estimar, controlar e cronometrar o serviço, porém não obtiveram sucesso nesta tarefa, por isso foram criadas inúmeras metodologias, mas mesmo assim muitos softwares falharam redondamente nos prazos e custos de sua implementação.
Albrecht em seu artigo de 1979 elaborou um método em voga até hoje, em que um software era reduzido a menor parte possível e atribuía-se um ponto, no princípio o cálculo prendia-se a estimar o custo do software através das dificuldades em codifica-lo, era a quantidade de IFs, FOR, Selects, Evaluates e inúmeros outras iterações dentro da execução, acrescendo o acesso a base de dados com tipos de tabelas simples, com um , dois ou mais índices, uso de arquivos sequenciais para input e quantidades de outputs e listagens de impressora.
Fluxo detalhado.
O cálculo da função verifica o grau de complexidade, simplicidade de propósitos, consistência necessárias, vamos avaliar o tipo de contagem e o escopo da contagem, experiência da equipe e determinando bem as fronteiras da codificação, evitando abranger atividade de outros sistemas.
Não é uma tarefa fácil, pois dentro do ambiente de desenvolvimento temos diversos tipos de funções entre elas Função de Dados, Funções transacionais que indicam a dificuldade em desenvolvimento.
Apurando todas essas variáveis e seu peso relativo encontramos o Tamanho Funcional, cada instalação tem suas próprias especificidades, que implicam na facilidade de implementar a codificação, de posse deste dado podemos avaliar os caminhos críticos e o trabalho necessário.
Software legado em sustentação versus Migração versus Novas funcionalidades
Para aumentar o grau de dificuldade deste calculo para cada projeto existe uma especifidade única, que aumenta a quantidade de trabalho hora/homem, afinal acrescenta desafios e pontos em atenção, que um analista externo a instituição desconhece.
Um software legado em sustentação tem um grau maior de perigo, sua parada pode afetar outros sistemas dependentes ou modificar os outputs do processo devido há uma modificação não esperada ou planejada. Sendo atividades real-time, dificilmente podem ser estimadas com segurança. O custo de oportunidade é alto para softwares abendados, obrigando equipes a trabalharem madrugada adentro.
Uma migração de software de um ambiente para outro, tem muitos riscos o TBS Bank é uma prova desse risco, imagine toda a problemática de trocar a estrutura completa de um sistema, modificando base de dados, ambiente de execução e servidores, saindo de um ambiente conhecido rumo ao desconhecido.
Perfeitamente encaixada nas PFs, novas funcionalidades são talvez um dos cenários apresentados, que esta mais aderente a metodologia de PF, pois permite acrescentar funções sem afetar a logica principal e ser um trabalho pontual fácil de estimar..
Conclusão
Nesta primeira parte do artigo sobre pontos de função apenas apresentei alguns tópicos fundamentais, trilhando um caminho para transmitir o conhecimento e poder adentrar no tema sobre calculo de PF. Em verdade foi apresentado mais conceitos e riscos envolvidos na atividade.
Acredito que o jovem padawan tenha conhecido um pouco sobre a burocracia por trás da codificação, o trabalho administrativo para chegar ao custo estimado, que ao final será bem diferente do custo real. Onde um gestor devera comparar o valor orçado do valor real, apurado no momento da entrega.
Espero ter ajudado ate o próximo artigo.
Mais momento jabá, para distrair, visite meu vídeo e veja para onde fui desta vez: https://www.youtube.com/watch?v=HUxWquSxBYc
Bom curso a todos.
https://www.linkedin.com/in/vagnerbellacosa/
https://github.com/VagnerBellacosa/