FAQ - Perguntas Frequentes

 

Perguntas e respostas sobre Análise de Pontos de Função (APF)

Produtividade

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

2. Qual a produtividade do JAVA?
3. Existe alguma tabela onde eu possa saber a quantidade média de linhas de código-fonte (SLOC) por Ponto de Função?
4. Qual indicador de produtividade (pontos de função / homem-mês) ou taxa de entrega (horas / ponto de função) deve ser utilizado para estimar o esforço de projetos de software?

 

1. 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.

Voltar ao Topo

2. Qual a produtividade do JAVA?

Esta pergunta está incluída aqui porque de fato ocorre muito. O importante é saber que um dado como a produtividade (média) do JAVA só faz sentido em comparações. Por exemplo, se você mediu a produtividade de um projeto cuja principal linguagem foi JAVA, pode querer saber se a mesma foi maior ou menor do que a de outros projetos realizados no mesmo ambiente. Não é adequado utilizar uma produtividade obtida junto a terceiros sem realizar medições. Feita esta ressalva, vamos ver como a pergunta acima pode ser respondida.

O banco de dados do International Software Benchmarking Standards Group (ISBSG) é uma importante fonte de dados sobre projetos. Na versão 7 do ISBSG há apenas 4 (quatro) novos desenvolvimentos, com dados confiáveis, cuja principal linguagem de programação é JAVA. As produtividades desses projetos aparecem visualmente no gráfico abaixo. O de menor produtividade está  próximo de 10 H/PF. O de pior produtividade, um pouco abaixo de 60 H/PF. Digamos que a média seja um pouco menos de 30 H/PF e a mediana, próxima de 20 H/PF. Isso não nos diz qual valor deve ser utilizado em um caso específico. Como vamos saber se o projeto que desejamos estimar está próximo do mais produtivo, da média, da mediana, ou do menos produtivo? 



O objetivo deste exemplo é mostrar que não se pode tomar uma boa decisão tendo apenas uma produtividade média. Seria preciso, também, conhecer outros atributos dos projetos, para saber por que um projeto tem a produtividade próxima de 60 H/PF, enquanto outro a tem próxima de 10 H/PF. Além disso, seria necessário saber em que faixa de produtividade a nossa organização está operando. Sem isso, o dado estatístico nos dará apenas a ilusão de que não estamos simplesmente "chutando". E, é claro, 4 projetos é uma quantidade muito, muito pequena.

Repare, no entanto, que muitas "estatísticas" de produtividade não dizem em quantos projetos as mesmas se basearam...
Vejamos o que dizem outras fontes, tais como o David Consulting Group, uma das empresas de FPA mais conhecidas e respeitadas nos EUA. No site do DCG, a produtividade é informada em Pontos de Função por Pessoa-Mês. Sabendo-se que o DCG utiliza um mês com 120 horas, essas produtividades podem ser convertidas para H/PF. Teremos então (dentre outros) os números abaixo:

Client/Server         6,7 H/PF
Web             4,4 H/PF
e-Business Web     7,5 H/PF

O JAVA deverá situar-se, possivelmente, próximo de Client/Server e e-Business Web. Como conciliar esses números com os do ISBSG? Se colocarmos todos os números citados no mesmo gráfico, teremos a próxima figura.



Agora temos uma variação ainda maior. O mínimo está abaixo de 10 e o máximo continua próximo a 60. A média desceu para um número próximo a 20 e a mediana, para algo em torno de 17.
 
Se aproveitarmos o fato de JAVA e C++ serem linguagens algo semelhantes (ambas orientadas a objeto, sintaxe um pouco parecida), poderemos encontrar cerca de 20 projetos no banco de dados do ISBSG, misturando JAVA e C++. A produtividade média desses projetos ficará entre 17 e 18 H/PF.
 
Para não confundir o leitor, vamos reconhecer que a produtividade média dos projetos que utilizam JAVA deve estar entre 15 e 20 H/PF. Mas não é essa a questão.

O problema é que o seu projeto pode estar bastante distante disso, dependendo das demais características do mesmo. É por essa razão que a resposta para a pergunta "Qual a produtividade do JAVA" não deve ser dada apenas com um número. Mais uma vez, é preciso medir para ter segurança nos resultados.

Voltar ao Topo

3. 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.

Voltar ao Topo

4. Qual indicador de produtividade (pontos de função / homem-mês) ou taxa de entrega (horas / ponto de função) deve ser utilizado para estimar o esforço de projetos de software?

Há uma tentação muito grande entre os profissionais envolvidos em estimativas de usar indicadores ditos "de mercado" para suas estimativas baseadas em pontos de função. Certamente existem várias fontes onde é possível obter números relacionados à produtividade com pontos de função para diversos contextos tecnológicos. O ISBSG (International Software Benchmarking Standards Group) é uma delas. No entanto, usar essas fontes desconsiderando o contexto de como aqueles números foram obtidos e o contexto de sua própria organização é um erro grave. Estimativas obtidas dessa maneira dificilmente terão a confiabilidade necessária ou alguma utilidade prática.
 
 A melhor forma de obter indicadores de produtividade que realmente sejam úteis nas estimativas com pontos de função é apurar esse indicador através dos projetos desenvolvidos pela organização. Mas como fazer isto?
 
 O primeiro passo é recuperar dos projetos passados as duas grandezas que compõe o indicador de produtividade: o tamanho (em pontos de função) e o esforço (horas). Com estes dois dados tem-se de forma direta a produtividade daquele projeto. Mas se cada projeto tiver um número de produtividade diferente, qual deve ser empregado no projeto a ser estimado?
 
 Certamente que cada projeto pode apresentar um número distinto, mas se este procedimento for repetido para um conjunto maior de projetos será possível observar que para determinados subconjuntos a produtividade é bastante similar. Isso acontece quando os projetos tem características similares em relação aos fatores que afetam diretamente o esforço para desenvolvê-los. Logo, é razoável concluir que dependendo da natureza dos projetos desenvolvidos pela organização, não haverá um único indicador de produtividade para todos os projetos da organização; mas sim indicadores de produtividade por grupos de projeto similares. Sendo assim, o primeiro passo para estimar um novo projeto é enquadrá-lo em algum grupo de projetos e só então usar o indicador de produtividade adequado. Mas quais são os fatores que definem esses grupos de projetos?
 
 Qualquer variável que tenha capacidade de produzir um impacto significativo no esforço do projeto deve ser levada em consideração nessa análise de segmentação de grupos de projeto. Convém destacar que os fatores podem ser diferentes de organização para organização. Por exemplo: o uso ou não de uma determinada metodologia de desenvolvimento de sistemas no projeto pode afetar sua produtividade. No entanto se em uma determinada empresa todos os projetos seguem a mesma metodologia, este fator será constante e não terá relevância para a segmentação de projetos.
 
 Sem a pretensão de estabelecer uma lista completa, pode-se citar os seguintes fatores:
 
 - tipo de projeto: desenvolvimento, melhoria, migração, redesenvolvimento, etc;
 - plataforma tecnológica: mainframe, web, cliente x servidor, sistema embutido, etc;
 - ordem de grandeza dos projetos;
 - tamanho da equipe de desenvolvimento;
 - ferramentas de desenvolvimento;
 - metodologia empregada;
 - área de negócio;
 - número de usuários.

Fonte: FATTO Consultoria e Sistemas

Voltar ao Topo