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 |
|
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 |
|
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 |
|
Para 2.5Kloc
1 2 3 |
|
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 |
|
Para 2,5Kloc
1 2 3 |
|
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