 Estimativas de tamanho de software e APF
 Estimativas de tamanho de software e APF
  
    |  | As métricas de tamanho de software surgiram com o objetivo de 
estimar o esforço(número de pessoas-hora) e o prazo associados ao 
desenvolvimento de sistemas. | 
Para saber o custo de um projeto de software precisamos saber 
o esforço necessário para desenvolvê-lo e para determinar o esforço precisamos 
saber o tamanho do projeto de software. Desta forma , determinar o tamanho de um 
projeto de software é uma das primeiras e principais atividades relacionadas às 
estimativas a serem efetuadas durante o clico de vida do projeto.
				
						
						
				
"A estimativa de tamanho de software é o coração do 
processo de estimativas de um projeto de software" . (PUTMAN,1992)
Realizar uma estimativa de tamanho de um projeto não é uma 
tarefa trivial , pois exige um conhecimento sobre técnicas de estimativas , base 
histórica e conhecimento sobre o projeto a ser estimado.
De acordo com Tom Demarco (DEMARCO,1991) as duas principais 
maneiras de estimar o tamanho de um projeto de software são :
1-) Por Analogia – As estimativas de tamanho do projeto atual 
são baseadas em estimativas já realizadas em projetos similares.  
2- ) Realizando medições das características do produto e 
usando uma metodologia e algoritmo para converter a medição em uma estimativa de 
tamanho.  
Existem várias técnicas de estimativas de tamanho de software 
, e a seguir são apresentadas , de forma resumida, as mais importantes:
  - COCOMO ( Constructive Cost Model) [COCOMOII] – Modelo desenvolvido 
  para estimar o esforço de desenvolvimento, prazos e tamanho da equipe para 
  projetos de software. Utiliza equações desenvolvidas por Boehm (BARRY,1981) 
  para prever o número de programadores-mês e o tempo de desenvolvimento; podem 
  ser calculados usando medidas de linhas de código ou Pontos de Função. Devem 
  ser realizados ajustes nas equações a fim de representar as influências sobre 
  os atributos , hardware e software durante o ciclo de vida do projeto. Uma 
  desvantagem desta técnica é que os coeficientes da métrica (a,b,c,d) não são 
  aplicáveis a tamanho ou seja a produtividade é diferente, o que torna difícil 
  realizar comparações.
  - Linhas de Código – (LOC) – A técnica de mensuração por linhas de código é 
  uma das mais antigas medidas de tamanho de projeto de desenvolvimento de 
  software. Ela consiste na contagem da quantidade de número de linhas de código 
  de um programa de software. Além de ser muito simples é também muito fácil 
  automatizar sua implementação , mas, apresenta algumas desvantagens dentre as 
  quais citamos: a dependência da linguagem de software e do desenvolvedor 
  (PRESSMAN,1995); ausência de padrão de contagem e o fato de somente poder ser 
  aplicada na fase de codificação.  
  - Metricas de Hasltead – È um conjunto de métricas proposto por Maurice 
  Halstead (HASLTEAD,1977). O princípio desse método está na análise e 
  quantificação de operandos e operadores e no conceito de que a partir do 
  conhecimento das medidas, consegue-se quantificar os vocábulos e a extensão do 
  algoritmo do estudo.  
  
  - Puttnam´s Slim Model(PUTMAN,1978) – È um modelo de estimativa que 
  busca medir esforço e prazo através da dinâmica de múltiplas variáveis que 
  pressupõe distribuição de esforços específicos ao longo da existência de um 
  projeto de software. Relaciona o número de linhas de código ao tempo e esforço 
  de desenvolvimento. Uma desvantagem da técnica é sua vinculação a linguagem 
  usada e a exigência de certo tempo para obter-se valores reais para os 
  parâmetros da fórmula.
  - Delphi – È uma técnica que se resume à consulta de especialistas de 
  determinada área, em determinada linguagem e/ou determinado assunto para que, 
  usando sua experiência e entendimento do projeto proposto, façam estimativas 
  devidas. Devem ser feitas várias estimativas do mesmo projeto, pois é comum 
  que elas carreguem influências e tendências dos especialistas. É um método 
  empírico, baseado em experiências profissionais que podem ser subjetivas.(Boehm,1981)
  - PSP – Personal Software Process – (HUMPHREY,1995) – È uma técnica 
  derivada do SEI-CMM (Software Engineering Institute – Capability Matutiry 
  Model) que foi desenvolvida com a função de capacitar , melhorar e 
  otimizar o processo individual de trabalho. A técnica divide-se em sete 
  etapas, sendo que nas etapas PSP0, PSP0.1 e PSP1 estima-se o tamanho e o tempo 
  necessário para o desenvolvimento do produto.
  - PCU – Pontos por Caso de Uso – Foram criados por Gustav Karner em 1993 
  como uma adaptação específica dos Pontos de Função para medir o tamanho de 
  projetos de software orientados a objeto. Explora o modelo e descrição do caso 
  de uso, substituindo algumas características técnicas proposta pelos Pontos de 
  Função. É um método simples e de fácil utilização mas ainda esta em fase de 
  pesquisas e não existem regras de contagem padronizadas. Têm se estudado a 
  aplicação em conjunto da PCU e APF tentando explorar a relação entre elas 
  existente.(EDMÉIA,2004)
  - Análise por Pontos de Função (ALBRECHT,1983) 
	– Busca medir a complexidade 
  do produto pela quantificação de funcionalidade expressa pela visão que o 
  usuário tem do mesmo. O modelo mede o que é o sistema , o seu tamanho 
  funcional e não como este será, além de medir a relação do sistema com 
  usuários e outro sistemas. È independente da tecnologia usada e mede uma 
  aplicação pelas funções desempenhadas para/e por solicitação do usuário 
  final.; podendo também ser usada em estimativas.
  - Contagem de Pontos de Função segundo o NESMA – Netherlands Function 
  Point Users Group – (NESMA,2005). Além do IFPUG , o NESMA também 
  promove o uso de pontos de função e publica o seu próprio manual de contagem 
  complacente com o manual do IFPUG. O manual da NESMA apresenta três tipos de 
  contagens por pontos de função: a contagem indicativa de ponto de função, a 
  contagem estimada de ponto de função e a contagem detalhada de pontos de 
  função. A contagem indicativa é muito usada , nela são identificados os 
  grupamentos de dados relativos à natureza do negócio, conforme a visão do 
  usuário. Estes grupamentos são classificados como Internos (mantidos pela 
  aplicação e Externos (referenciados ou consultados pela aplicação). Para 
  calcular o tamanho de uma aplicação em Pontos de Função não Ajustados (PFNA) a 
  NESMA recomenda a seguinte fórmula: PFNA = ( 35 * I) + ( 15 * E ).
A estimativa de tamanho de um projeto de software é uma 
atividade crítica pois tem um impacto tanto na solução técnica apresentada como 
no gerenciamento do projeto de software devendo ser efetuada não somente no 
início do projeto mas durante o ciclo de vida do projeto.
As técnicas apresentadas acima são apenas algumas dentre as 
muitas existentes, sendo que cada uma abrange uma determinada área; não existe 
uma métrica que completa o estudo por si só, desta forma, recomenda-se que seja 
utilizada a técnica mais adequada para medir projeto de software ou a utilização 
de mais de uma técnica em conjunto.  
Dentre as técnicas descritas, a mais popular atualmente é a 
técnica de Análise por Pontos de Função. Esta técnica é respaldada pelo IFPUG 
(International Function Point Users Group), que é responsável, entre outros, 
pela elaboração e divulgação de um manual de práticas de contagem (CPM –
Counting Practices Manual), além de manter um programa de certificação de 
profissionais especializados em aplicar a técnica APF.
A Análise de Pontos de Função (APF) é uma das métricas de 
estimativa de tamanho mais sedimentadas no mercado e que proporciona resultados 
cada vez mais precisos à medida que artefatos da fase de análise e projeto são 
gerados (CALDIEIRA et al., 1998).
Análise por Pontos de Função
A técnica da Análise por Pontos de Função – APF , surgiu na 
IBM, no início da década de 70, como uma alternativa ás métricas baseadas em 
linhas de código. Os conceitos desta técnica foram introduzidos por Allan J. 
Albrecth, em uma conferência do GUIDE – Grupo de Usuários IBM, em 1979.
A técnica foi refinada por Albert em 1984 , e , a partir 
desta data houve um aumento considerável na sua utilização , o que levou a 
necessidade de definir um padrão para aplicação da técnica. Com este objetivo 
foi criado em 1986 o International Function Point Users Group (IFPUG) que 
passou a ser responsável pela definição das regras de contagem, treinamento e 
certificação dos usuários da técnica. Em 1990 foi lançada a primeira versão do 
Manual de Práticas de Contagem ou CPM – Counting Practices Manual 
com o objetivo de padronizar a técnica. (VAZQUEZ,2005)
Atualmente a APF é a técnica mais usada para estimativa de 
tamanho de software. Em 1998, foi constituído o BFPUG – Brazilian Function 
Point Users Group – o representante do IFPUG no Brasil. Uma pesquisa 
realizada pela Secretaria de Política de Informática – SEPIN , em 2001, indicou 
que a utilização da APF vem crescendo no Brasil, conforme mostra a tabela 2.1:
Tabela 2.1: Métricas primitivas utilizadas para medir a 
qualidade dos processos de software.
  
    | Categorias | Nº de organizações | Percentual(%) | 
  
    | Linhas de código ( LOC ) | 25 | 5,6 | 
  
    | Pontos por função ( Function Point ) | 43 | 9,6 | 
  
    | Outras métricas | 26 | 5,8 | 
  
    | Não utiliza | 363 | 81,4 | 
  
    | Base | 446 | 100 | 
Fonte: SEPIN , 2005
A APF tem como objetivo medir o tamanho do projeto de 
software a partir do ponto de vista do usuário do software, levando em conta 
basicamente as características do sistema do ponto de vista da sua fronteira com 
o usuário independente da tecnologia usada. A unidade de medida é o Ponto de 
Função e representa a quantificação das funções implementadas sob o ponto de 
vista do usuário, ou seja , as funcionalidades fornecidas ao usuário.
A APF permite uma contagem indicativa no início do projeto , 
quando não se conhece os detalhes do modelo de dados; podendo ser definida na 
fase de projeto quando se têm um maior conhecimento das funções do software, 
gerando uma estimativa; até o término do desenvolvimento quando se efetua uma 
contagem detalhada com base no conhecimento das funções levantadas durante todo 
o processo de desenvolvimento do software.(IFPUG,1999)
Pode-se enumerar os principais objetivos da APF, que segundo 
o IFPUG , são:  
  - Medir o que foi requisitado e recebido pelo usuário;
- Medir independentemente da tecnologia utilizada para implementação;
- Prover uma métrica de medição para apoiar a análise de produtividade e 
  qualidade;
- Prover uma forma de estimar o tamanho de software, e
- Prover um fator de normalização para comparação de software.
Além destes objetivos o processo de contagem de Pontos de 
Função deve ser:
  - Simples para minimizar o trabalho adicional do processo de medição;
- Conciso para permitir consistência, ao longo do tempo, dos projetos, e 
  entre os usuários da técnica.
Além de ser usada para medir o tamanho de um projeto de 
software , quando usada em combinação com outras medidas , a APF pode ser usada 
para determinar:
  - O nível de produtividade da equipe; 
	 
- Esforço de desenvolvimento de software;
- O custo de software;
- Taxa de produção de software;
- Taxa de manutenção de software;
Devido a sua versatilidade a APF pode ser aplicada a 
aplicações já implantadas bem como a aplicações em desenvolvimento e também a 
aplicações em manutenção conforme definição a seguir :
  - Dimensionamento de uma aplicação – Cálculo usado para determinar o tamanho 
  real de um projeto de software em pontos de função. O valor representa a 
  funcionalidade da aplicação do ponto de vista do usuário. Não inclui as 
  funções do processo de conversão de dados.
  - Dimensionamento de um projeto de desenvolvimento – Cálculo usado para 
  determinar o tamanho em pontos de função de um projeto de desenvolvimento de 
  um novo projeto de software. Têm como objetivo quantificar as funções 
  solicitadas e entregues ao usuário pela nova aplicação , incluindo o processo 
  de conversão de dados.  
  - Dimensionamento de um projeto de manutenção – Cálculo usado para 
  determinar o tamanho de um projeto de manutenção em uma aplicação já 
  existente. Tem como objetivo medir todas as modificações (inclusões, 
  alterações e exclusões) de funções do usuário. Em geral a modificação é uma 
  melhoria ou adição de funcionalidade na aplicação. Inclui as funções providas 
  pelo processo de conversão de dados.
Considerando que a APF é uma das técnicas funcionais mais 
antigas, que possui um dos grupos de usuários mais bem estruturados e atuantes e 
que a partir de 2002 passou a condição de padrão internacional através da norma 
ISO/IEC 20926 a técnica pode ser considerada como uma das melhores alternativas 
de medição de tamanho do projeto de software.
Além de ser usada para determinar o tamanho do projeto de 
software e auxiliar na estimativa de esforço de desenvolvimento a APF pode ser 
usada na implantação de programas de métricas para melhorar estimativas, 
gerenciar a qualidade e para monitorar a produtividade, servindo também como um 
instrumento para acompanhar estimativas de custo e recursos requeridos para o 
desenvolvimento e manutenção de software.
O procedimento para contagem de pontos de função compreende 
sete etapas assim definidas: (DIAS,2004)
  - Determinar o tipo de contagem – O que vou medir ? Definição do objeto a 
  ser medido como sendo um projeto de desenvolvimento, manutenção ou aplicação.
- Identificar o escopo de contagem e fronteira da aplicação –Definição do 
  escopo do sistema objeto da avaliação sob a perspectiva do usuário. São 
  identificados todos os relacionamentos do sistema com o seu exterior , a 
  persistência de dados e os processos suportados pelo sistema. O escopo irá 
  definir se a contagem irá abranger parte de um sistema ou mais de um sistema.
- Contagem de pontos de função não ajustados – Compreende o conjunto de 
  funções disponibilizadas ao usuário. Segundo Albrecht (ALBRECHT,1983) , cinco 
  tipos de componentes lógicos ou funções da aplicação (figura 2.2) afetam de 
  forma distinta o tamanho de um sistema: funções do tipo dados ( Arquivos 
  lógicos Internos – ALI e Arquivos de Interface Externa – AIE) e funções do 
  tipo transação ( Entradas Externas – EE, Saídas Externas – SE e Consultas 
  Externas – CE). As funções do tipo dado e transação são classificadas de 
  acordo com sua complexidade que pode ser baixa, média ou alta conforme 
  definida em tabela do manual de contagem.  
   
 Figura 2.2: Fronteiras da aplicação e tipos de arquivos.(HAZAN,2001)
 
 
 
- Cálculo do fator de ajuste – O fator de ajuste é baseado em 14 
  características gerais de sistemas(ver ANEXO "A") que avaliam a funcionalidade 
  geral da aplicação que esta sendo contada definindo os seus níveis de 
  influência. O nível de influência de uma característica é definido de acordo 
  em uma escala de 0(nenhuma influência) a 5 (forte influência);
- Contagem dos Pontos de Função ajustados – Realiza a correção das possíveis 
  distorções cometidas durante o cálculo dos pontos de função não ajustados.
Dias (DIAS,2004) enumera os seguintes benefícios que podem 
ser alcançados com utilização da APF em projetos de Software :  
  - Permite dimensionar o tamanho de um software a ser desenvolvimento;
- Permite realizar estimativas de custo, cronograma e recursos para o 
  desenvolvimento e manutenção de softwares;
- Pode ser usada como uma unidade de medida para comparação entre projetos 
  de softwares;
- Permite realizar um maior controle de qualidade sobre do projeto;
- Pode ser usada como uma ferramenta de auxílio gerencial;
- Pode ser usada para implantar um programa de métricas;
- Pode ser usada como uma ferramenta para auxiliar a decisão entre a compra 
  de um pacote ou o desenvolvimento do aplicativo da empresa.
A Análise por Pontos de Função mudou o paradigma da contagem 
e difundiu-se no mercado proporcionando um processo maduro para avaliar o 
tamanho lógico do software com base em requisitos funcionais dos usuários. Para 
Aguiar (AGUIAR,2003) , dentre as principais razões para a utilização da APF como 
métrica têm-se :
  - Os PF são mantidos por uma organização internacional sem fins lucrativos , 
  o International Function Point Users Group – IFPUG , desde 1986;
- Os PF possuem suporte no Brasil através do chapter – Brazilian 
  Function Point Users – BFPUG; 
- Os PF são padronizados pela ISSO através da norma ISSO/IEC 20296;
- Existe um grande acervo de dados sobe PF armazenados nas diversas 
  organizações o que permite estudos e comparações;
- Os PF modelam os requisitos a um nível de abstração mais alto e 
  independente dos artefatos e podem ser usados por organizações que usam 
  qualquer forma de representação de requisitos;
- Os PF são usados em contratos e licitações no Brasil em organizações 
  governamentais e pelo mercado em geral.  

Referências:
COCOMO - Constructive Cost Model. Disponível em: 
http://sunset.usc.edu/research/COCOMOII/ - Acesso em: set. 2005.
DEMARCO, TOM. Controle de Projetos de Software. 9.ed. 
Rio de Janeiro: Editora Campus, 1991.
HAZAN, CLÁUDIA - Implantação de um Processo de medições de 
software – agosto, 2002 . Disponível em:
http://www.bfpug.com.br/artigos.htm. Acesso em: out. 2005.
HAZAN, CLÁUDIA - Análise de Pontos por Função – agosto, 2001 . 
Disponível em:
http://www.inf.ufes.br/~falbo/download/aulas/es-g/2005-1/APF.pdf. Acesso em: 
out. 2005
McGARRY, J. et. Al. – Pratical Software Measurement – Addison-Wesley, 
2002.
SPR - Software Productivity Research – Disponível em: 
http://www.spr.com/. Acesso em: out. 2005.  
VAZQUEZ, C. E.;SIMÕES, G. S; ALBERT, R. M. Análise de 
Pontos de Função – Medição, Estimativas e Gerenciamento de Projetos de Software. 
3.ed. São Paulo: Editora Érica, 2005.  
José Carlos Macoratti