terça-feira, 16 de dezembro de 2008

Pontos de Função: Saiba como utilizar esta ferramenta

Pontos de função é uma ferramenta para se obter o tamanho funcional de um sistema de software. Podemos comparar pontos de função a outras métricas, como: m² e KW/h. 

Esta ferramenta é mantida por uma instituição chamada IFPUG (http://www.ifpug.org), que dita as regras da contagem de pontos de função e certifica profissionais. Esta é uma das diferenças para outras ferramentas, como Pontos por Casos de Uso. O Pontos por Casos de Uso, ou Use Case Point, foi criada em 1993 por Gustav Karner, em um projeto acadêmico. Inclusive, este projeto foi baseado nos Pontos de Função, porém, sua idéia era diminuir a necessidade de tantos detalhes para chegar-se ao resultado final de pontos de função. 

Mas como o foco deste artigo é pontos de função, voltemos ao foco. Como existem regras bem claras estabelecidas, é correto afirmar que a contagem não é subjetiva, e se duas pessoas diferentes analisarem o sistema, ambas deveriam chegar ao mesmo resultado. Porém, como somos humanos e susceptíveis a erros, uma pequena diferença pode ocorrer, porém, não deveria ser substancial. 

A idéia deste artigo não é formar profissionais em Contagem de Pontos de Função, mas sim, explanar superficialmente sobre o que é a contagem e seus benefícios. Antes de conhecer a ferramenta, era comum eu pensar que tinha que contar quantas funções ou procedures existiam em um sistema para chegar ao seu número de pontos de função. Pura Suposição! 

Pontos de Função é uma métrica pura e simplesmente baseada na visão que o usuário tem sobre o sistema. Ou seja, não é correto pensar em funções, métodos ou modelagem de banco de dados nesta ferramenta. É muito comum programadores, e até analista, que acabaram de serem treinados em pontos de função, considerarem informações técnicas na contagem. 

Para entendermos os pontos de função, podemos separar a ferramenta em sete etapas de contagem, conforme figura abaixo.


Determinar o tipo de contagem:

Existem três diferentes tipos de contagem, que são: 

  1. Projeto de Desenvolvimento: Ou seja, criação de um sistema que ainda não existe;
  2. Projeto de Manutenção: Melhorias ou correções de um sistema já desenvolvido. Para utilização deste modelo, é importante que o sistema mantido tenha sua contagem de pontos de função atualizada;
  3. Aplicação: Contagem de uma aplicação já desenvolvida;

Cada um destes tipos tem suas regras e fórmulas específicas, porém, não iremos entrar neste nível de detalhe neste artigo. 

É possível contar pontos de função em diferentes momentos do projeto, por exemplo: 

  • Desenho da proposta
  • Analise de requisitos
  • Codificação
  • Testes
  • Implantação
  • Produção

Quanto mais detalhes temos sobre as funcionalidades do sistema, menor a margem de erro da contagem. Então podemos dizer que à medida que o projeto avança no seu ciclo de vida, mais assertiva é nossa contagem, conforme gráfico abaixo.

Pensando nos cenários em que ainda não temos tantas informações funcionais do projeto, como no momento da proposta e desenho da solução, a NESMA (Netherlands Software Metrics Association) fez uma adaptação à ferramenta de Pontos de Função, com a diferença de que não são necessárias informações tão detalhadas para sua utilização, como campos acessados pelas transações. Para mais detalhes, acesse o site: http://www.nesma.nl/section/home/. Em contrapartida, a margem de erro do Ponto de Função NESMA é maior do que a margem do Ponto de Função tradicional. 

Identificar o escopo e fronteiras da contagem:

Uma informação extremamente importante é, antes de aplicar a ferramente, definir qual será o escopo da contagem. Por exemplo, em um sistema de ERP, podemos ter diversos módulos ou subsistemas. Poderíamos ter a intenção de contar o sistema como um todo ou apenas o sistema de Pedidos ou Financeiro. Esta definição muda totalmente o resultado da contagem. Veja imagens abaixo:

Exemplo 1

Exemplo 2 

Veja no “Exemplo 1”, nossa contagem será o subsistema “SD” (Pedidos) do SAP. Logo, teremos integrações com os módulos de PP, BW, FI e CO. Já no “Exemplo 2”, o escopo da contagem é o próprio SAP, então, não teremos nenhuma integração. 

É muito importante saber que o usuário está fora da fronteira da aplicação. 

Contagem de Funções de Dados: 

Nesta etapa, o especialista responsável pela contagem deverá definir quais serão os repositórios de dados do sistema. Apesar de ser muito parecido com tabelas de um banco de dados, isso não é verdade. Muitos profissionais caem nesta armadilha. 

Temos que definir funções de dados, levando em consideração a visão do usuário. Por exemplo, Pedido é uma função de dados, independente da modelagem física quebrá-la em diversas tabelas, como: Pedido, Item do Pedido, Informações complementares do Pedido, etc. 

Podemos classificar as funções de código em três diferentes tipos:

  • Dado de Negócio: Informações vitais (CORE) para o sistema;
  • Dado de Referência: Informações de configuração, como taxas de juros, percentuais para cálculos, impostos, etc;
  • Dado de Código: Dados de domínio, como Status de um Pedido, Sexo (Masculino ou Feminino), Estado; normalmente cadastros com apenas código e descrição; 

A ferramenta de Pontos de Função não considera Funções de Dados do tipo Dado de Código em sua contagem. Isso significa que um módulo de Cadastro de Sexo não adiciona novos pontos de função na contagem do sistema/projeto. 

Além disso, devemos levar outra informação em consideração: 

  • Se a função de dados é mantida dentro da fronteira de sua aplicação, ela é chamada de ALI, ou Arquivo Lógico Interno;
  • Se a função de dados é mantida fora da fronteira de sua aplicação, ela é chamada de AIE, ou Arquivo de Interface Externa; 

Ótimo, estamos quase prontos para identificar os primeiros pontos de função de um sistema. Se identificarmos que “Pedido” é uma função de dados do sistema, precisamos descobrir quantos campos (ou TD) são armazenados nesta função de dados e quantos grupos de informações (ou TR) ela agrupa (por exemplo: Pedido, Itens do Pedido, Locais de Entrega, Etc). Com estas informações, podemos classificar um ALI ou AIE com uma complexidade, que pode ser SIMPLES, MÉDIA ou COMPLEXA. Veja tabela abaixo: 

Identificando a complexidade, chegamos ao número de pontos de função não ajustados equivalentes ao “Pedido”. Veja tabela abaixo: 

Vamos supor que nosso “Pedido” é mantido pelo próprio sistema, ou seja, é um ALI (Arquivo Lógico Interno) e tem complexidade “Média”, neste caso, teríamos 10 pontos de função até o momento. 

Contagem de Funções de Transação: 

Agora que já aprendemos como contar funções de dados, vamos agora ao próximo passo. Contar as transações da aplicação. 

Lembre-se que Pontos de Função leva em consideração a visão do usuário. Então um processo elementar deve ser uma transação que realiza um processamento e que envie e/ou receba dados para fora da fronteira da aplicação. O que isso quer dizer? Que funções como: rotinas para limpeza de dados não é considerada na contagem. Por quê? Além de não enviar dados para fora da fronteira da aplicação, é uma transação com motivação técnica, ou seja, não influência no negócio do sistema, apenas resolve uma restrição da arquitetura. 

Um desafio é identificar uma transação, pois poderíamos dizer que “Incluir Pedido” é uma transação, mas também poderíamos dizer que “Escrever a Tela de Pedidos”, “Fazer Consistência dos Campos”, “Enviar Dados para a Camada de Negócios”, “Salvar Dados no Banco de Dados” e “Mostrar Mensagem ao Usuário” são transações necessárias para incluir um pedido. 

Então, no momento de definir uma transação, tenha em mente o conceito de processo elementar, que é: “Menor unidade de atividade com significado para o usuário. Deve ser completo em si mesmo e deixar o negócio da aplicação em um estado consistente”. Ou seja, nossa transação seria apenas “Incluir Pedido”. 

As funções de transação podem ser classificadas como: 

  • Entrada Externa (EE): Processo elementar com o objetivo principal de enviar dados para dentro da fronteira da aplicação;
  • Consulta Externa (CE): Processo elementar com o objetivo de enviar dados simples para fora da fronteira da aplicação;
  • Saída Externa (CE): Parecido com CE, com a diferença de enviar dados com transformações. Por exemplo, relatórios com campos cálculos (Valor Presente, Valor com Juros Aplicados, Campo Colorido devido ao Status do Pedido); 

Como fizemos com as funções de dados, agora precisamos determinar quantos campos esta transação envia/recebe para fora da fronteira da aplicação (TD) e quantos diferentes ALIs ou AIEs são acessados pela transação (AR). Desta maneira, podemos determinar sua complexidade: 

Identificando a complexidade, chegamos ao número de pontos de função não ajustados equivalentes à transação “Incluir Pedido”. Veja tabela abaixo: 

Vamos supor que nosso “Incluir Pedido” tem complexidade “Alta”, neste caso, teríamos 6 pontos de função até o momento. Logicamente, “Incluir Pedido” é uma Entrada Externa (ou EE), já que seu principal objetivo é manter informações de pedido (ou mandar dados para dentro da fronteira da aplicação). 

Determinar o Valor de Pontos de Função Não Ajustados 

Após definirmos todas as funções de dados e funções de transações, encontrar sua complexidade e determinar seus pontos de função, o que devemos fazer é apenas somar os pontos de função referentes a todas as funções de dados e transações. Veja abaixo uma lista de exemplo: 

Determinar o Valor do Fator de Ajuste: 

Não desanime, estamos quase finalizando!!!! 

Outro fato preponderante para a contagem é definir qual será o fator de ajuste da aplicação. O fator de ajuste é um valor que pode variar entre 0,65 e 1,35. Este valor deverá ser multiplicado pelo valor de pontos de função não ajustados (definido acima), para que possamos chegar aos reais pontos de função da aplicação/projeto. 

Para que o fator de ajuste seja determinado, precisamos pontuar a 14 perguntas com valores de ZERO a CINCO. Os temas das perguntas são: 

  1. Comunicação de Dados
  2. Processamento Distribuído
  3. Performance
  4. Configuração Altamente Utilizada
  5. Volume de Transações
  6. Entrada de Dados On-line
  7. Eficiência do Usuário Final
  8. Atualização On-line
  9. Complexidade do Processamento
  10. Reusabilidade
  11. Facilidade de Instalação
  12. Facilidade de Operação
  13. Múltiplos Locais
  14. Facilidade de Mudança 

Para consultar as perguntas em detalhes e saber quando aplicar respostas de 0-5, veja o formulário criado pela FATTO, uma rede de ensino especializada em Pontos de Função. O link para download deste formulário pode ser encontrão do final deste artigo, ou na seção de downloads deste site. 

Após cada item pontuado, pasta aplicar as fórmulas abaixo: 

Nível de Influência [DI] = 0..5

Nível de Influência Total [TDI] = DI (perguntas de 1 até 14)

Fator de Ajuste [VAF] = [TDI] x 0,01 + 0,65 

Calcular Pontos de Função Ajustados 

Finalmente chegamos ao calculo final dos pontos de função do sistema. Basicamente, devemos multiplicar os pontos de função não ajustados pelo fator de ajuste. 

Como dissemos anteriormente, existem fórmulas diferentes dependendo do tipo da contagem (Desenvolvimento, Melhoria e Aplicação). Porém, não iremos entrar em detalhes neste artigo. 

Conclusão: 

Como disse anteriormente, não é objetivo deste artigo que o leitor consiga contar pontos de função de uma aplicação. Porém, tenho certeza que o leitor poderá discutir em bom nível sobre o assunto com qualquer pessoa. 

Se você se interessou e quer se aprofundar no assunto, sugiro que você procure um centro de treinamento especializado em Pontos de Função e faça um curso avançado. 

Agora que vocês já têm o conceito desta ferramenta em mente, no próximo artigo, iremos discutir as benesses que esta métrica pode nos oferecer no projeto, principalmente na sua gestão. Os assuntos beneficiados são: 

  • Definição de baseline de escopo
  • Estimativa de esforço  (Hrs. / Ponto de Função)
  • Estimativa de custo (R$ / Ponto de Função)
  • Medição de qualidade do Software (Erros / Pontos de Função) 

Aguardem que em pouco tempo, irei disponibilizar uma planilha no site, que ajudará muito quem for contar pontos de função em um sistema. A planilha já irá converter Funções de Dados e Transações em Pontos de Função, sem a necessidade de consulta ao guia de referência. 

Abraços e até breve. 

Guia de referência: http://www.fattocs.com.br/download/cartaoAPFCompleto.pdf