VB.NET - Estimativa de preço com Análise de Pontos de Função - APF
Este é uma série de artigos
onde você vai acompanhar todo o ciclo de desenvolvimento de um sistema completo
em VB.NET. Iremos acompanhar o ciclo de vida do projeto para Manutenção de clientes que será desenvolvido em VB.NET com acesso a uma base de dados Access. |
Como você já deve saber, o desenvolvimento de um projeto de software não é uma tarefa trivial, e, esta bem distante de sentar na frente de um terminal de vídeo e sair codificando a esmo. Se você não acredita no que eu estou falando talvez acredite em dados estatísticos; O CHAOS Report de 2003 apresentou as seguintes estatísticas:
• Somente 34% dos projetos de software são bem sucedidos;
• 15% dos projetos foram cancelados;
• 43% é o erro médio em relação ao orçamento do projeto daqueles que foram
completados;
• 52% das características (requisitos não funcionais) e funcionalidades são
entregues no produto.
Na verdade se você quiser desenvolver software com qualidade deverá adotar um processo de desenvolvimento de software.
Um processo de software pode ser entendido como um conjunto estruturado de atividades exigidas para desenvolver um sistema de software. Assim Sommerville[1] trás a seguinte definição:
"[O processo é] um conjunto de atividades e resultados associados que produzem um produto de software".
Jalote[7] conclui que um processo de software é :
"é um conjunto de atividades, ligadas por padrões de relacionamento entre ela, pelas quais se as atividades operarem corretamente e de acordo com os padrões requeridos, o resultado desejado é produzido. O resultado desejado é um software de alta qualidade e baixo custo. Obviamente , um processo que não aumenta a produção (não suporta projetos de software grandes) ou não pode produzir software com boa qualidade não é um processo adequado."
A partir destas definições podemos considerar que de forma geral um processo de software padrão pode ser visto como um conjunto de atividades, métodos, ferramentas e práticas que são utilizadas para construir um produto de software. Na definição de um processo de software devem ser consideradas as seguintes informações: atividades a serem realizadas, recursos necessários, artefatos requeridos e produzidos, procedimentos adotados e o modelo de ciclo de vida utilizado [3].
Sucintamente podemos definir o processo de software (defini-lo(o processo) como um conjunto de atividades uniformizadas a serem aplicadas sistematicamente que se encontram agrupadas em fases, cada uma das quais com os seus intervenientes com responsabilidades, que possui diversas entradas e produz diversas saídas. Isto é, define quem faz o quê, quando e como para atingir um certo objetivo.
Humphrey[4] define as seguintes razões para a definição de um processo padrão:
Fases de um processo de Software
Para Schwartz[5] as principais fases de um processo de software são :
Ao contrário do que possa parecer
não existe uma sequência obrigatória de fases, sendo que diversos autores
apontam a natureza não-simultânea das fases como uma realidade na aplicação de
processos de software, e também defendem que o processo de software é muito mais
iterativo e cíclico do que a idéia de fases simples pode sugerir.[6]
Atividades do Processo de Software
Em cada fase de um processo de software definido são executadas as atividades
básicas para que sejam atingidos os objetivos propostos. Segundo Pressman[2]
estas atividades constituem um conjunto mínimo para se obter um produto de
software.
Realizando uma combinação de classificações dadas por Schwartz[5] , Pressman[2]
e Sommerville[1] podemos identificar as seguintes atividades[6]:
1. Especificação
1. Engenharia de Sistema: estabelecimento de uma solução
geral para o problema, envolvendo questões extra-software.
2. Análise de Requisitos: levantamento das necessidades do
software a ser implementado. A Análise tem como objetivo produzir uma
especificação de requisitos, que convencionalmente é um documento.
3. Especificação de Sistema: descrição funcional do sistema.
Pode incluir um plano de testes para verificar adequação.
2. Projeto
1. Projeto Arquitetural: onde é desenvolvido um modelo
conceitual para o sistema, composto de módulos mais ou menos independentes.
2. Projeto de Interface: onde cada módulo tem sua interface
de comunicação estudada e definida.
3. Projeto Detalhado: onde os módulos em si são definidos, e
possivelmente traduzidos para pseudo-código.
3. Implementação
1. Codificação: a implementação em si do sistema em uma
linguagem de computador.
4. Validação
1. Teste de Unidade e Módulo: a realização de testes para
verificar a presença de erros e comportamento adequado a nível das funções e
módulos básicos do sistema.
2. Integração: a reunião dos diferentes módulos em um produto
de software homogêneo, e a verificação da interação entre estes quando operando
em conjunto.
5. Manutenção e Evolução
1. Nesta fase, o software em geral entra em um ciclo
iterativo que abrange todas as fases anteriores.
Desta forma as atividades relacionadas a um processo de software estão
diretamente vinculadas com a produção do software como produto final . Afim de
especificar quais atividades devem ser executadas e em qual ordem temos diversos
modelos de desenvolvimento de software.
Sistema de Manutenção de Clientes
Descrição do sistema:
- Em um sistema de manutenção de clientes um usuário (funcionário de empresa) registra as entradas, alterações, exclusões e saídas(relatório) dos dados relativos a um cliente da empresa no sistema. Qualquer usuário da empresa poderá acessar o sistema e efetuar o cadastramento.(Não haverá controle de acesso no sistema). Será emitido um relatório de todos os clientes cadastrados e dos dados de um determinado cliente.
Características do sistema:
- O sistema irá permitir o acesso sem restrições para qualquer usuário da
empresa , não havendo portanto controle de acesso.
- Não existe qualquer interface com outros sistemas existentes
- Deverão ser cadastrados os seguintes dados de um cliente: Nome , endereço,
Cidade , Cep , Telefone , Email e Observações.
- O nome do cliente , endereço , cidade , cep e email são obrigatórios e
deverão ser sempre informados
Lista de ator(es):
Casos de uso identificados
Diagrama de caso de uso simplificado:
|
Para sobreviver no mercado você deve produzir um produto de qualidade com um preço competitivo. Não adiante trabalhar de graça e nem superestimar o preço do seu produto. Você tem que ser ágil para poder saber quanto cobrar a partir do tamanho do sistema que você vai desenvolver. Para saber o tamanho do sistema você deve realizar medições de tamanho do software a ser desenvolvido.
Uma das formas de alcançar este objetivo é realizar estimativas de tamanho, custo, esforço e qualidade de software. Geralmente esta estimativa é feita com base em um histórico de informações de experiências passadas que são usadas para embassar as tomadas de decisões feitas durante o ciclo de desenvolvimento do projeto. Para tornar tal procedimento confiável é necessário estabelecer um processo sistemático que pode ser repetido e ser usado para realizar comparações. O roteiro obtido com a sistematização destes passos se configura em uma métrica.
Dentre as métricas usadas a Análise de Pontos de Função tem obtido grande destaque nos últimos anos e vem sendo cada vez mais utilizada para estimativas de tamanho de um sistema de software com base na funcionalidade fornecida ao usuário.
"Análise de Pontos de
Função-APF, ou FPA-Function Point Analysis, é uma técnica de
medição das funcionalidades fornecidas por um software do ponto de vista de
seu usuário. Ponto de função é a unidade de medida desta técnica que tem por
objetivo tornar a medição independente da tecnologia utilizada para a
construção do software. Ou seja, a APF busca medir o que o software faz, e
não como ele foi construído. Portanto o processo de medição, ou a contagem de pontos de função, é baseada em uma avaliação padronizada dos requisitos lógicos do usuário. Este padrão está descrito pelo IFPUG em seu Manual de Práticas de Contagem. Empiricamente as principais técnicas de estimativa de projetos de desenvolvimento de software assumem que o tamanho de um software é um vetor importante para a determinação do esforço para sua construção. Logo, saber o seu tamanho é um dos primeiros passos do processo de estimativa de esforço, prazo e custo. Daí é importante destacar que pontos de função não medem diretamente esforço, produtividade ou custo. É exclusivamente uma medida de tamanho funcional do software. Este tamanho em conjunto com outras variáveis é que poderá ser usado para derivar produtividade, estimar esforço e custo." www.fattocs.com.br/faq.htm |
Vamos então utilizar a técnica de análise de pontos de função para estimar o preço que você deverá cobrar do seu cliente para desenvolver o sistema para manutenção de clientes.
Encare a situação da seguinte forma : você foi solicitado a dar um orçamento para desenvolver o sistema e não pode demorar ou vai perder o serviço.
Você resolveu usar APF- Análise de Pontos de Função, como uma ferramenta de apoio para determinar o tamanho funcional da aplicação adotando os seguintes procedimentos:
definição do escopo do sistema manutenção de clientes
estimativa do tamanho funcional da aplicação
estimativa do custo e esforço para desenvolvimento
Determinar o tamanho funcional do sistema a ser desenvolvido usando APF
Entidades e funções do processo de manutenção de clientes
1- Usuário (funcionário)
- Gestão do cadastro de clientes
2- Cadastros
- Clientes
A tecnologia usada no sistema para manutenção de cliente será a plataforma desktop usando a linguagem Visual Basic .NET envolvendo 3 camadas : camada de dados , camada de aplicação e camada de apresentação.
O propósito da contagem é verificar se é viável o desenvolvimento do sistema. Com a estimativa de tamanho do sistema pretende-se estimar o custo de desenvolvimento com objetivo de fornecer uma estimativa de orçamento ao cliente que solicitou o seu desenvolvimento.
Para alcançar o objetivo de estimativa de tamanho será feita uma contagem estimativa segundo o modelo proposto pelo IFPUG.
Vamos usar o processo de contagem conforme preconiza o manual do IFPUG para determinar o número de pontos por função de um projeto de software. Como não é objetivo deste artigo entrar nos detalhes do processo de contagem vou apenas descrever as etapas do processo.
Etapas do processo de contagem da APF:
A figura 2 apresenta uma visão geral dos tipos de função que são considerados na contagem da APF.(gráfico retirado de http://www.inf.ufes.br/~falbo/download/aulas/es-g/2005-1/APF.pdf )
1- Determinar o tipo de Contagem
Para o nosso caso estamos efetuando a medida de
um projeto de desenvolvimento.
2- Identificar as fronteiras da aplicação
A fronteira separa o que é interno e externo a uma aplicação sendo contada. Confina os dados lógicos que são mantidos pela aplicação e ajuda na identificação dos dados lógicos que são referenciados, mas não mantidos por ela;
No nosso exemplo a aplicação manutenção de clientes é muito simples, e, portanto podemos representar a fronteira da aplicação da seguinte forma:
A fronteira
da aplicação manutenção de clientes.
Nota: A aplicação não acessa nem é acessada por programas externos. |
3- Determinar Funções do tipo dado
O sistema usa o banco de dados Cadastro.mdb e a tabela Clientes que possui a seguinte estrutura:
Para
determinar se a tabela Clientes é um ALI devemos fazer duas perguntas : É um grupo lógico de dados identificável pelo usuário ? Sim. É mantido por um processo elementar dentro da fronteira da aplicação ? Sim. A aplicação possui somente um ALI. |
Após identificar os ALI e AIE devemos classificar a função de acordo com sua complexidade funcional . Para alcançar este objetivo devemos determinar :
Após determinar as quantidades de tipos de dados e tipos de registros, devemos classificar a complexidade de acordo com a seguinte tabela:
|
Após determinar a complexidade dos arquivos , devemos calcular sua contribuição conforme a seguinte tabela:
Tipo de Função | Baixa | Média | Alta |
Arquivo Lógico Interno - ALI | 7 PF | 10 PF | 15 PF |
Arquivo de Interface Externa - AIE | 5 PF | 7 PF | 10 PF |
Determinação dos ALI
ALI - Arquivo Lógico Interno - é um grupo de dados logicamente relacionados ou de informações de controle identificáveis pelo usuário e mantido dentro das fronteiras da aplicação.
Para a aplicação todos os campos da tabela serão usados, com exceção do código do cliente, que será atribuição do sistema. O cliente visualiza portanto o conjunto de informação como um registro lógico. A aplicação apresenta portanto somente 1 Registro Lógico.
Como todos os campos da tabela serão usados pelo usuário , com exceção do CodigoCliente que será atribuição do sistema a aplicação apresenta 7 tipos de dados.
Chegamos a conclusão pela tabela ( 1 <--> 7 ) que nossa aplicação possui a definição de complexidade Baixa.
Pela tabela a contribuição será de 7 PF.
O total de pontos por função para as funções do tipo dado para a aplicação é igual a 7 PF
Determinação dos AIE
AIE - Arquivo de interface externa - é um grupo de dados logicamente relacionados que é usado pela aplicação mas sofre manutenção a partir de outra aplicação.
A aplicação não tem nenhum AIE. Com contribuição de 0 PF.
4- Determinar as funções do tipo Transação
As funções do tipo transação representam a funcionalidade fornecida ao usuário para atender os requisitos da aplicação. São classificadas como :
Cada função do tipo transação deve ser classificada com relação a sua complexidade funcional em :
Após determinar a quantidade de AR e TD da aplicação podemos definir a sua complexidade de acordo com as seguintes tabelas:
Tabela de complexidade para Entradas Externas:
Tipos de Dados |
|||
Arquivos Referenciados | < 5 | 5 - 15 | > 15 |
< 2 | Baixa | Baixa | Média |
2 | Baixa | Média | Alta |
> 2 | Média | Alta | Alta |
Tabela de complexidade para Saídas Externas e Consultas Externas:
Tipos de Dados |
|||
Arquivos Referenciados | < 6 | 6 - 19 | > 19 |
< 2 | Baixa | Baixa | Média |
2 - 3 | Baixa | Média | Alta |
> 3 | Média | Alta | Alta |
Determinando a quantidade de AR e TD da aplicação
Vamos criar uma tabela para indicar quais as funções do tipo transação identificada e para cada uma delas a quantidade de AR e TD.
Função | Tipo | AR | TD |
Cadastro de Clientes | |||
- Incluir | EE | 1 | 7 |
- Alterar | EE | 1 | 7 |
- Excluir | EE | 1 | 7 |
- Listar | SE | 1 | 10 (*) |
- Consultar | CE | 1 | 8 |
(*) - além dos campos de dados estamos contando os comandos ( botão e mensagem ao usuário)
Após determinar a complexidade das funções de transação podemos calcular sua contribuição de acordo com a tabela abaixo:
Tipo de Função | Baixa | Média | Alta |
Entrada Externa - EE | 3 PF | 4 PF | 6 PF |
Saída Externa - SE | 4 PF | 5 PF | 7 PF |
Consulta Externa - CE | 3 PF | 4 PF | 6 PF |
Determinando a contribuição em PF para as funções de transação da aplicação
Abaixo temos a tabela que exibe as funções do tipo Transação para a aplicação manutenção de clientes.
Função | Tipo | Complexidade | PF |
Cadastro de Clientes | |||
- Incluir | EE | Baixa | 3 |
- Alterar | EE | Baixa | 3 |
- Excluir | EE | Baixa | 3 |
- Listar | SE | Baixa | 4 |
- Consultar | CE | Baixa | 3 |
Total dos Pontos de função para as funções de tipo transação da aplicação : 16 PF
O total geral dos pontos de função não ajustados para a aplicação é de 23 PF ( 16 + 7 )
Cálculo do fator de ajuste
O valor do fator de ajuste (VFA) é baseado em 14 características gerais de sistema listadas abaixo:
Cada uma destas características possui um nível de influência sobre a aplicação que pode variar em um intervalo de zero a cinco( 0 a 5):
0 - Nenhum Influência
1 - Influência Mínima
2 - Influência Moderada
3 - Influência Média
4 - Influência Significativa
5 - Grande Influência
Após determinar os níveis de influência das 14 características gerais o
fator de ajuste é calculado com a seguinte fórmula:
VFA = (Σ NI x 0,01) + 0,65
Onde:
Σ - é o somatório dos níveis de
influência para as 14 características
NI - NI é nível de influência
Para ver cada uma das características sua definição e os valores para cada nível de influência clique neste link: 14 características
Uma sugestão de perguntas que podemos fazer para poder calcular o nível de influência pode ser:
1. O sistema necessita de backup e recuperação confiável?
2. É necessário utilizar comunicação de dados?
3. Existe processamento distribuído de funções?
4. A performance é crítica?
5. O sistema vai funcionar em um ambiente operacional já existente e fortemente utilizado?
6. O sistema exige entrada de dados on-line?
7. (Se existir) A entrada de dados exige que a transação seja realizada por meio de várias telas ou operações?
8. Os arquivos são atualizados on-line?
9. As entradas, saídas e consultas são complexas?
10. O processamento interno é complexo?
11. O código deve ser projetado para ser reutilizável?
12. A conversão (se necessária) e instalação deve estar incluída no projeto?
13. O sistema deve funcionar em múltiplas instalações em diferentes organizações?
14. A aplicação é projetada para ser facilmente modificável e fácil de utilizar pelo usuário?
Calculando a influência de cada característica ao nosso sistema temos:
Característica | Influência | Característica | Influência |
1 | 4 | 8 | 0 |
2 | 0 | 9 | 2 |
3 | 0 | 10 | 0 |
4 | 3 | 11 | 4 |
5 | 0 | 12 | 3 |
6 | 0 | 13 | 0 |
7 | 0 | 14 | 4 |
Valor Total => | 20 |
Chegamos portanto a um nível de influência igual a 20.
Calculando o fator de ajuste pela fórmula VFA = ( ΣNI x 0,01) + 0,65 temos:
VFA = (20 x 00,1 ) + 0,65 = 0,85 O valor do fator de ajuste é igual a 0,85.
Portanto o número de pontos de função para o projeto é obtido da seguinte forma:
NPF = PFNA * VFA onde temos NPF = 27 * 0,85 = 22,95
Onde : NPF - número de pontos de função PFNA - No de pontos de função Não ajustados VFA - valor do fator de ajuste
Finalmente conseguimos obter uma medida para o tamanho da nossa aplicação. O seu tamanho é igual a 22,95 PF.
Lembre-se que é apenas uma estimativa pois estamos na fase inicial de desenvolvimento do projeto.
E agora o que eu faço com isto ??? Qual o preço de um ponto de Função ?
Os Pontos de Função (PF) são apenas uma unidade de medida , assim como eu digo que um projeto tem 100 PF , eu também digo que um imóvel tem 100 m2 de área construída.
Quanto tempo vai demorar para construir e quanto vai custar um imóvel com 100 m2 de área construída ?
Depende. Existem diversos fatores que podem afetar uma estimativa de prazo e custo.
Da mesma forma eu posso dizer : Quanto tempo vai demorar para construir e quanto vai custar o projeto "Cadastro de Clientes" com 100 PF ?
A resposta é a mesma. Percebeu o significado dos Pontos de Função ?
Se um construtor fosse estimar o prazo e o preço do imóvel com 100 m2 de área a construir , ele poderia basear sua estimativa na sua experiência passada. Fazendo uma comparação do imóvel atual com algum imóvel similar já construído. Diversos fatores teriam que ser levando em conta : se é um imóvel térreo ou sobrado , quantos quartos , banheiros , janelas , portas , tipo de telhado , tipo de acabamento , tipo de material hidráulico , elétrico , se há a necessidade de aterro , etc..
Quanto mais informações o construtor puder obter melhor será a sua estimativa , ou seja, mais próxima da realidade ela será.
O prazo e valor correto , com 100 % de acerto , somente poderá ser estimado no final da construção.
Tudo o que foi dito para o construtor pode ser feito para um desenvolvedor ou gerente de projetos. Desta forma o ambiente de desenvolvimento , a experiência da equipe no projeto , os métodos usados no processo de software , etc. todos estes fatores influenciam na medida de estimativa a ser obtida.
Da mesma forma , ou ainda de forma ainda mais subjetiva, devido a natureza do projeto de software, um projeto de software requer primeiro que se determine o seu tamanho através de um processo de medição para que uma unidade de medida possa ser definida e usada para comparações com projetos similares.
Ao usar a APF se você obter uma medida de tamanho em pontos de função de um projeto mas tem uma base histórica de medidas para comparação terá que buscar isto em tabelas prontas de outras empresas afim de subsidiar sua estimativa.
A resposta para a pergunta referente a estimativa do projeto de software poderia ser dada da seguinte forma:
Como o esforço total necessário para executar um determinado projeto pode ser dado pela fórmula abaixo:
Esforço Total (horas ) = PF * índice de produtividade
e os índices de produtividade podem ser expressos em Horas/PF ou PF/mês .
Para a aplicação em questão que possui 22,95 PF , se o índice de produtividade da empresa ou equipe for de 10 horas/PF o esforço demando seria algo em torno de 229,5 horas.
Assim o projeto demandaria 229 horas para ser desenvolvido.
Com base nisto , sabendo o valor pago pela empresa o custo seria de fácil obtenção.
Obs: O preço de um ponto de função varia conforme o trabalho exigido para sua construção e de seus subprodutos.
Conclusão:
Quanto mais cedo você começar a medir e a formar uma base histórica de medidas baseada em um métrica reconhecida e de fácil utilização (A APF é amparada pelo IFPUG e partir de 2002 passou a condição de padrão internacional através da norma ISSO/IEC 20926) , mais cedo você vai poder realizar estimativas com maior precisão.
Referências:
[CMMI02] CMMI Product Team. CMMI for Software Engineering, Version 1.1, Staged Representation (CMMI-SW, V1.1, Staged). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2002. Available from World Wide Web: http://www.sei.cmu.edu/publications/documents/02.reports/02tr029.html
[IFPUG99] THE INTERNATIONAL FUNCTION POINT USERS GROUP, Princeton Junction. Function Point Counting Practices Manual release 4.1. [s.l.], 1999.
[ISO01] THE INTERNATIONAL ORGANIZATION FOR STANDARDIZATION. ISO/IEC 15939; Software Engineering – Software Measurement Process. [s.l.], 2001.
[PAULK93] PAULK, Mark C. et al. Key Practices of the Capability Maturity Model SM , Version 1.1. (CMU/SEI-93-TR-025). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 1993. Available from World Wide Web: http://www.sei.cmu.edu/publications/documents/93.reports/93.tr.025.html
GQM -
http://sel.gsfc.nasa.gov/website/exp-factory/gqm.htm – acessado em 21 de setembro de 2005-09-21HAZAN - Implatanção de um Processo de medições de software - http://www.bfpug.com.br/Artigos/Palestra%20_Medicoes%20Claudia%20Hazan.pdf
José Carlos Macoratti