bfpug_new.jpg (7052 bytes)Brazilian Function Point Users Group
Perguntas e Dúvidas Frequentes
("FAQ" - Frequently Asked Questions)

O que são Pontos de Função?

Pontos de função são uma medida funcional de tamanho de software, introduzida em 1979 por Alan Albrecht da IBM.
 
Medida funcional de tamanho de software é um conceito definido pelo padrão ISO/IEC 14143-1:1998 e refere-se à medição do tamanho do software considerando-se apenas a funcionalidade solicitada e recebida pelos respectivos usuários. Nesse sentido, uma medida funcional de tamanho é uma medida externa, pois mede somente aquilo que é percebido pelos usuários do produto de software, independentemente da forma de implementação escolhida.
 
A contagem dos pontos de função é regulamentada pelo International Function Point Users Group (IFPUG), organização internacional sem fins lucrativos sediada nos Estados Unidos da América. O IFPUG publica o Counting Practices Manual (Manual de Práticas de Contagem), atualmente em sua versão 4.2.1, que estabelece os padrões para o cálculo dos pontos de função. Para garantir a padronização dos procedimentos de contagem, o IFPUG oferece certificação na técnica e divulga os profissionais certificados através de seu site na Internetwww.ifpug.org.

O método do IFPUG foi oficializado através do padrão internacional ISO/IEC 20926 de 2002.

A contagem dos pontos de função é realizada com base em cinco tipos de componentes de software: arquivos internos, arquivos externos, entradas, saídas e consultas. Esses termos possuem um sentido específico na FPA - Function Point Analysis (Análise de Pontos de Função) e a identificação e classificação dos componentes exige conhecimento especializado.
 
Os pontos de função são utilizados como fator normalizador do tamanho do software, permitindo o estabelecimento de métricas tais como produtividade (pontos de função produzidos por pessoa-mês), taxa de entrega (homens-hora para a produção de um ponto de função), densidade de defeitos (defeitos encontrados por ponto de função) e outras. A taxa de entrega também pode ser  denominada produtividade, o que pode causar confusão. A melhor opção é deixar clara a nomenclatura utilizada em cada caso.
 
Vem crescendo a utilização, pelas empresas brasileiras, dos pontos de função nos contratos de fornecimento de software, seja através da cotação de preços por ponto de função, ou através da quantificação dos serviços através de medições de pontos de função.
 
No mundo, os pontos de função do IFPUG são utilizados pela grande maioria das organizações que realizam algum tipo de medição funcional de tamanho de software.

Como os Pontos de Função são contados?

Veja uma resposta para esta pergunta clicando aqui.

Os Pontos de Função medem as horas necessárias ao desenvolvimento de um projeto?

Embora exista uma  forte relação entre o tamanho funcional de um software (medido em Pontos de Função) e o esforço gasto no seu desenvolvimento (medido em pessoas-hora), os Pontos de Função não medem diretamente o esforço de desenvolvimento. Nesse sentido, os Pontos de Função são semelhantes ao metro quadrado na construção civil: embora o metro quadrado influa consideravelmente no esforço de construção e no custo de um imóvel, outros fatores poderão contribuir tanto ou mais quanto o metro quadrado. Exemplos de fatores são a localização do imóvel, a idade, o material utilizado na construcão e acabamento, o prestígio do arquiteto, etc. Da mesma forma, dois sistemas podem ter a mesma medida em Pontos de Função e preços  totalmente diferentes. Por exemplo, um sistema pode ser monousuário, implementado em uma ferramenta como o Access; o outro pode ser uma aplicação web com várias camadas, envolvendo um mainframe e sofisticados dispositivos de segurança. Neste caso, certamente a quantidade de horas e o preço de cada um desses sistemas será completamente diferente. A conclusão é que o tamanho em Pontos de Função é apenas um dos fatores que influem sobre o esforço de desenvolvimento e sobre o custo de um sistema. Outros importantes fatores são a confiabilidade desejada para o software, a metodologia de desenvolvimento utilizada, o nível de testes requerido, a complexidade dos algoritmos, a dificuldade da plataforma computacional, o estilo de interface com o usuário, o grau de reutilização desejado, a capacidade e experiência da equipe, a disponibilidade de ferramentas de software adequadas e outros.

Existe alguma tabela onde eu possa obter a produtividade de um projeto, conhecida a linguagem de desenvolvimento?

No passado a empresa SPR - Software Productivity Research - disponibilizava gratuitamente uma tabela de linguagens de programação na internet. Essa tabela atribuía a cada linguagem um nível, sendo fornecidos intervalos de produtividade estimados para cada nível de linguagem. Além disso, a chamada "Tabela da SPR" fornecia estimativas para a razão Linhas de Código Fonte / Ponto de Função, para cada linguagem (também chamada Fator de Backfiring). Essa tabela, embora contivesse dados estatísticos interessantes para pesquisas, foi muitas vezes indevidamente utilizada como base em relacionamentos comerciais. A própria SPR optou por primeiro retirar a tabela do ar e depois traze-la de volta, desta vez como um serviço pago. Convém ler a mensagem de Doug Brindley, vice-presidente da SPR, sobre o assunto.

É bom lembrar que a linguagem de programação é apenas um dos fatores que afetam a produtividade. Conforme explicado em outra pergunta, também são fatores importantes: a confiabilidade desejada para o software, a metodologia de desenvolvimento utilizada, o nível de testes requerido, a complexidade dos algoritmos, a dificuldade da plataforma computacional, o estilo de interface com o usuário, o grau de reutilização desejado, a capacidade e experiência da equipe, a disponibilidade de ferramentas de software adequadas e outros.

Qual a produtividade do JAVA?

Veja uma resposta para esta pergunta clicando aqui.

Existe alguma tabela onde eu possa saber a quantidade média de linhas de código-fonte (SLOC) por Ponto de Função?

A quantidade de linhas de código por PF varia bastante e com diversos fatores, além da linguagem de programação utilizada. Por exemplo, a antiga Tabela da SPR (ver pergunta sobre produtividade acima) registrava a média de 53 SLOC/PF para a linguagem JAVA. A Tabela da QSM registra 63 SLOC/PF para o JAVA e o David Consulting Group sinaliza com 80 SLOC/PF. Em uma pesquisa realizada com 8 projetos JAVA em um banco brasileiro, a mediana encontrada foi 33 SLOC/PF. Nossa recomendação é que sejam medidos alguns projetos, para poder determinar o valor médio da razão SLOC/PF em cada caso específico. Ainda assim, você pode ter uma idéia dos valores consultando a Tabela da QSM.

O que um órgão do governo deve fazer para obter a filiação ao IFPUG?

Muitas vezes recebemos consultas a respeito do que um órgão do governo deve fazer para realizar a filiação ao IFPUG. As dúvidas geralmente dizem respeito ao pagamento da filiação, que deve ser feito em dólares no exterior. Não deve haver motivo para preocupação, pois vários órgãos estaduais, federais e empresas estatais já se filiaram e permanecem filiados. Os passos irão variar um pouco dependendo do órgão, mas basicamente são:

1. Dirigir-se à área de compras, suprimentos ou filiações a associações, com uma solicitação devidamente embasada, justificando a necessidade de filiação ao IFPUG. Ressaltar que o único fornecedor dos serviços almejados é o IFPUG (por exemplo, para ter acesso ao CPM e realizar o exame CFPS o IFPUG é a única fonte).

2. Aprovado o pedido, a área de compras provavelmente solicitará ao IFPUG uma invoice (fatura, ou instrumento de cobrança) que servirá de base ao pagamento e especificará o valor a ser pago. A invoice pode ser solicitada via e-mail ao escritório do IFPUG, tendo-se o cuidado de enviar ao IFPUG todos os dados necessários à identificação do órgão: razão social, endereço, CNPJ, etc. Orientar o escritório do IFPUG sobre a necessidade de colocar todos os dados na invoice. Normalmente a invoice virá através de e-mail.

3. Recebida a invoice, a área de compras estará ciente do valor a ser pago (conforme o tipo de filiação solicitado) e dos dados bancários do IFPUG para remessa do dinheiro. Nesta data (01 de julho de 2010) esses dados são:

International Function Point Users Group
191 Clarksville Rd.
Princeton Junction, NJ 08550
Sovereign Bank
44 Princeton Hightstown Rd
Princeton Jct., NJ 08550
877-768-1145
ABA # 231372691
Account # 0741078090
Amount:______________
Swift Code: SVRNUS33

Notar que o campo Amount (valor) acima deve ser preenchido com o valor da filiação acrescido de US$ 50.00 (cinquenta dólares norte-americanos), correspondentes à taxa de remessa internacional cobrada pelo banco e repassada ao filiado pelo IFPUG.

4. De posse dos dados bancários acima, um funcionário do órgão deve ir a uma agência do Banco do Brasil, que realizará o serviço de remessa eletrônica ao exterior. Este serviço é uma operação de câmbio, devendo existir uma taxa cobrada pelo BB e possivelmente impostos. Efetuada a remessa, o BB fornecerá um comprovante em reais, que será contabilizado pelo órgão. Dessa forma, não existirá contabilmente uma operação em dólar no órgão, mas sim um pagamento em reais ao BB (esta é uma dúvida que costuma surgir - alguns colegas dizem "Meu órgão não pode realizar pagamentos em dólares", mas isto não deve constituir impeditivo, já que o fato contábil será registrado em reais).

5. Realizada a transferência, uma cópia do comprovante fornecido pelo BB deverá ser enviada via fax ou e-mail ao IFPUG, juntamente com o formulário de filiação que pode ser baixado de http://www.ifpug.org/membership/membershipApplication.pdf (ver http://www.ifpug.org/membership/). Notar que o nome do órgão deverá aparecer exatamente da mesma maneira no comprovante do BB e no formulário de filiação - não colocar, por exemplo, Serviço Federal de Processamento de Dados em um documento e SERPRO no outro, etc.).

6. Tudo isto feito, os contatos constantes do formulário de filiação receberão um e-mail de confirmação com identificação de usuário e senha para acesso à área de filiados do site do IFPUG. Notar que este retorno pode levar mais de uma semana. Se demorar demais, enviar ao IFPUG uma mensagem em inglês solicitando explicação. Há alguns modelos de solicitação ao IFPUG neste site.