Ir para o conteúdo

ESTIMATIVAS DE CUSTO

Histórico de revisão

Data Versão Descrição Autor(es)
22/08/19 0.1 Adição de Introdução e Definição Lucas Aguiar

Introdução

Neste documento será abordado sobre técnicas utilizadas para a medição de custos de fabricação do software, onde esses custos representam o valor dos insumos utilizados na fabricação de um determinado produto. Segundo Fenton e Pfleeger (1997), uma estimativa é uma avaliação de probabilidade. Uma estimativa só é útil se for razoavelmente precisa.

Estimativas são necessárias nas fases iniciais do ciclo de vida de cada projeto, pois há uma necessidade de apresentar propostas apropriadas de negócio e administrar corretamente os recursos ao longo do mesmo. O uso de técnicas formais de estimativa pode dobrar a probabilidade do projeto de software ser concluído com sucesso, conforme indicaram as pesquisas de Roetzheim (2000b).

Para a estimativa do custo, será levado em consideração apenas o ciclo de produção do software e não o ciclo de vida por completo, que poderia envolver questões como distribuição, atendimento ao cliente, garantia, propaganda, retirada de mercado etc. Geralmente os custos são subdivididos em Custos de Matéria-Prima, Custos de Mão-de-Obra Direta e Custos Indiretos de Fabricação. O modelo utilizado para a realização dessas estimativas será feito utilizando o método COCOMO(COnstructive COst MOdel).

MODELO DE CUSTO CONSTRUTIVO (CONSTRUCTIVE COST MODEL - COCOMO)

COCOMO ou Modelo de Custo Construtivo, é um modelo de estimativa do tempo de desenvolvimento de um software. Criado por Barry Boehm. É baseado no estudo de sessenta e três projetos. Os programas examinaram de 2.000 a 100.000 linhas de código em linguagens de programação de Assembly a PL/I. Pelo fato dessa metodologia ter utilizado várias linguagens de programação para criar as deduções, constantes e atributos para cada situação, esse método pode ser considerado generalista e útil para quase todos os projetos de software. O COCOMO pode ser divido em três implementações, a depender do tipo de software que será desenvolvido e qual o grau de confiabilidade se quer chegar na estimativa de um projeto, são eles:

  • COCOMO Básico (Basic): computa o esforço e o custo de desenvolvimento considerando uma estimativa do tamanho do programa (em LOC ou contagem do número de linhas de código).

  • COCOMO Intermediário (Intermediate): computa o esforço e o custo de desenvolvimento considerando uma estimativa do tamanho do programa e um conjunto de direcionadores de custo (avaliações subjetivas do produto, do hardware, do pessoal e dos atributos do projeto).

  • COCOMO Detalhado (Detailed): além das características do COCOMO intermediário, inclui uma avaliação do impacto dos direcionadores de custo sobre cada etapa do desenvolvimento.

O modelo COCOMO pode ser aplicado em três classes de projetos:

  • Modo Orgânico: projetos simples, relativamente pequenos, com conjuntos de requisitos não tão rígidos, com equipes pequenas e experientes.
  • Modo Semidestacado: projetos intermediários (em tamanho e complexidade), com alguns requisitos rígidos e outros não tão rígidos, com níveis mistos de experiência nas equipes.
  • Modo Embutido: projetos com conjunto rígido de restrições operacionais, tanto de hardware, quanto de software.

Dado as características do software que será desenvolvido, no caso um aplicativo para facilitar e agilizar o cadastro de possíveis monitores em disciplinas, o projeto se encaixa na classe de Semidestacado, pois ele exige certos requisitos rígidos, como confiabilidade na identificação dos dados corretos de monitores, há normas internas a FGA no processo de monitoria, entre outros requisitos que não são considerados triviais. Além do projeto ser composto por vários alunos que não fazem parte de uma equipe fixa, e que possuem níveis mistos de experiência tanto nas questões tecnológicas quanto no entendimento dos processos de monitoria.

COCOMO Intermediário

De acordo com as caracteristicas do prjeto a ser densenvolvido, se torna necessário o uso de uma implementação mais avançada que o COCOMO Básico, mas que também não tenha que lidar com variáveis muito complexas, como no COCOMO Detalhado que se faz uso de multiplicadores sensiveis à fase do projeto, ou hierarquia do produto(Nível de Módulo, Nível de Subsistema e Nível de Sistema). Então a implementação Intermediária que considera atributos de esforços e unindo com a simplicidade comparada com o COCOMO Detalhado é a melhor escolha.

Neste modelo, o COCOMO Básico é ampliado com a finalidade de levar em consideração um conjunto de atributos direcionadores do custo que são agrupados em quatro categorias:

  • Atributos do produto:
  • confiabilidade exigida do software;
  • tamanho do banco de dados;
  • complexidade do produto.

  • Atributos do hardware:

  • restrições ao tempo de execução;
  • restrições de memória;
  • volatilidade do ambiente de máquina virtual;
  • tempo de turnaround (tempo para completar o ciclo) exigido.

  • Atributos de pessoal:

  • capacidade do analista;
  • experiência em aplicações;
  • capacidade do programador;
  • experiência em máquina virtual;
  • experiência com a linguagem de programação.

  • Atributos de projeto:

  • uso de práticas modernas de programação;
  • uso de ferramentas de software;
  • cronograma exigido de desenvolvimento.

Cada um desses atributos deve ser classificado de acordo com uma escala que varia de “muito baixo” a “extremamente elevado” (em importância e valor). A partir desta classificação determina-se o Multiplicador de Esforço (considerando a Tabela publicada por Boehm (1981)). O produto de todos os resultados de Multiplicadores de Esforços é chamado de Fator de Ajustamento de Esforço.

Direcionadores de Custo Muito Baixo Baixo Normal Elevado Muito Elevado Extremamente Elevado
ATRIBUTOS DO PRODUTO
Confiabilidade exigida do software 0.75 0.88 1.00 1.15 1.40 -
Tamanho do banco de dados - 0.94 1.00 1.08 1.16 -
Complexidade do produto 0.70 0.85 1.00 1.15 1.30 1.65
ATRIBUTOS DO HARDWARE
Restrições ao tempo de execução - - 1.00 1.11 1.30 1.66
Restrições de memória - - 1.00 1.06 1.21 1.56
Volatilidade do ambiente de máquina - 0.87 1.00 1.15 1.30 -
Tempo de turnaround (tempo para completar o ciclo) exigido - 0.87 1.00 1.07 1.15 -
ATRIBUTOS DE PESSOAL
Capacidade do analista 1.46 1.19 1.00 0.86 0.71 -
Experiência em aplicações 1.29 1.13 1.00 0.91 0.82 -
Capacidade do programador 1.42 1.17 1.00 0.86 0.70 -
Experiência em Máquina Virtual 1.21 1.10 1.00 0.90 - -
Experiência com a linguagem de programação 1.14 1.07 1.00 0.95 - -
ATRIBUTO DE PROJETO
Uso de práticas modernas de programação 1.24 1.10 1.00 0.91 0.82 -
Uso de ferramentas de software 1.24 1.10 1.00 0.91 0.83 -
Cronograma exigido de desenvolvimento 1.23 1.08 1.00 1.04 1.10 -

Calculo da Estimativa do Esforço

O resultado do esforço representa o valor de Pessoas/Mês O modelo COCOMO Intermediário usa a seguinte equação para a estimativa do esforço:

1
E = a x S^b x fae

onde:

  • E: é o esforço aplicado (em pessoas-mês).
  • S: é o número (estimado) de linhas de código para o projeto (em milhares).
  • a: é um coeficiente fornecido pela Tabela.
  • b: é um expoente fornecido pela Tabela.
  • fae: é o Fator de Ajustamento do Esforço (multiplicação de cada um dos Multiplicadores de Esforço fornecidos pela Tabela).

Tabela para os valores dos coeficientes "a" e "b" de acordo com o tipo do projeto, a mesma tabela utilizada no COCOMO básico:

Projeto de Software a b c d
Orgânico 2.40 1.05 2.50 0.38
Semidestacado 3.00 1.12 2.50 0.35
Embutido 3.60 1.20 2.50 0.32

Como dito na introdução, nosso projeto é do tipo Semidestacado, portanto os valores serão a = 3.00 e b = 1.12.

Calculo da Estimativa do Tempo

Representa a quantidade de meses prevista para a conclusão do projeto:

1
T = c x E^d

onde:

  • E: é o esforço aplicado (em pessoas-mês).
  • T: é o tempo de desenvolvimento (em meses cronológicos).
  • S: é o número estimado de linhas de código em milhares (KLOC)* .
  • a: é um coeficiente fornecido pela Tabela.
  • b: é um expoente fornecido pela Tabela.
  • c: é um coeficiente fornecido pela Tabela.
  • d: é um expoente fornecido pela Tabela.

Resultados

Estimativa de Quantidade de Linhas de Códigos

O Projeto possui certa complexidade, porém levando em consideração o uso de frameworks para a agilidade e padronização de código, também considerando a linguagem de programação que será utilizada no backend, o Python com Django, que possuí uma sintaxe bastante simples, enquanto no front end será utilizado algum framework baseado em JavaScript. O grupo estimou que a aplicação deve pelo menos alcançar umas 3000 linhas de código úteis, descartando as linhas de código que serão geradas devido ao uso de frameworks que facilitam o processo. Podendo variar para 2500 linhas devido o uso de reutilização de código que agiliza o processo de desenvolvimento.

Possíveis Linhas de Código para cada modulo:

BACKEND:

  • crud teacher - 200 linhas
  • crud aluno - 200 linhas
  • registrar disciplinas - 100 linhas
  • listar e classificar disciplinas- 200 linhas
  • listar e classificar estudantes - 200 linhas
  • gerar ranking de estudantes - 200 linhas
  • enviar, reconhecer histórico pdf - 200 linhas
  • Login system: 100 linhas

SCRAPPER:

  • Scrapper Disciplinas em Unb Matricula Web - 300 linhas

FRONTEND:

  • Tela de possiveis disciplinas: 200 linhas
  • Tela de estudantes concorrendo em uma disciplina : 200 linhas
  • Tela com o ranking dos estudantes - 200 linhas
  • Tela de Login- 100 linhas
  • Tela de Cadastro de usuário - 100 linhas
  • Tela de Cadastro de aluno em uma disciplina - 100 linhas
  • Tela com informações da disciplina - 200 linhas
  • Tela com perfil e informações do estudante - 200 linhas
  • Tela com perfil do professor - 100 linhas

    S = 3000 LoC ou S = 3 KLoC

Estimativa de Esforço

Para 3Kloc E = a x S^b x fae

1
2
3
E = 3.00 x 3^1.12 * (0,99)

E = 10.16 pessoas/mes

Para 2.5Kloc

1
2
3
E = 3.00 x 2.5^1.12 * (0,99)

E = 8.91 pessoas/mes

Pesos atribuidos a cada atributo através de uma reunião em grupo para a convergência em cada esforço de cada atributo:

Direcionadores de Custo Muito Baixo Baixo Normal Elevado Muito Elevado Extremamente Elevado
ATRIBUTOS DO PRODUTO
Confiabilidade exigida do software 0.75 0.88 1.00 1.15 1.40 -
Tamanho do banco de dados - 0.94 1.00 1.08 1.16 -
Complexidade do produto 0.70 0.85 1.00 1.15 1.30 1.65
ATRIBUTOS DO HARDWARE
Restrições ao tempo de execução - - 1.00 1.11 1.30 1.66
Restrições de memória - - 1.00 1.06 1.21 1.56
Volatilidade do ambiente de máquina - 0.87 1.00 1.15 1.30 -
Tempo de turnaround (tempo para completar o ciclo) exigido - 0.87 1.00 1.07 1.15 -
ATRIBUTOS DE PESSOAL
Capacidade do analista 1.46 1.19 1.00 0.86 0.71 -
Experiência em aplicações 1.29 1.13 1.00 0.91 0.82 -
Capacidade do programador 1.42 1.17 1.00 0.86 0.70 -
Experiência em Máquina Virtual 1.21 1.10 1.00 0.90 - -
Experiência com a linguagem de programação 1.14 1.07 1.00 0.95 - -
ATRIBUTO DE PROJETO
Uso de práticas modernas de programação 1.24 1.10 1.00 0.91 0.82 -
Uso de ferramentas de software 1.24 1.10 1.00 0.91 0.83 -
Cronograma exigido de desenvolvimento 1.23 1.08 1.00 1.04 1.10 -

Estimativa de Tempo

Utiliza o resultado calculado do esforço para calcular o tempo, pois estão diretamente relacionados, também utiliza o coeficiente c = 2.50 e d = 0.35 da tabela:

Para 3Kloc

1
2
3
4
5
T = c x E^d

T = 2.50 x 10.16^0.35

T = 5.62 meses

Para 2,5Kloc

1
2
3
T = 2.50 x 8.91^0.35

T = 5.37 meses

Referências

[^1] Meller, Maristela Corrêa. Modelos Para Estimar Custos De Software: Estudo Comparativo Com Softwares De Pequeno Porte. 2002. Disponível em: https://repositorio.ufsc.br/xmlui/handle/123456789/82351