Baixe o app para aproveitar ainda mais
Prévia do material em texto
Técnicas de estimativas com base estatística Bruno Freitas Braga false Descrição A definição e a aplicação de técnicas de estimativas com base estatística para o gerenciamento de projetos de software. Propósito O entendimento das técnicas de estimativas com base estatística é essencial para os profissionais de Tecnologia da Informação (TI) escolherem a abordagem mais adequada ao gerenciamento de seus projetos de software, pois a aplicação dessas técnicas ajuda a equipe a prever cada vez mais cedo os problemas e propor soluções, minimizando assim os seus efeitos. Objetivos Módulo 1 Métodos de interpolação de medidas Analisar os principais métodos de interpolação de medidas Módulo 2 Cálculo de custo com base no esforço Calcular custo estimado com base no esforço AVISO: Em nosso material, unidades de medida e números são escritos juntos (ex.: 25km) por questões de tecnologia e didáticas. No entanto, o Inmetro estabelece que deve existir um espaço entre o número e a unidade (ex.: 25 km). Logo, os relatórios técnicos e demais materiais escritos por você devem seguir o padrão internacional de separação dos números e das unidades. Neste conteúdo, aprenderemos as técnicas de estimativas com base estatística que são importantes para fazer o planejamento e o acompanhamento de projetos de software. Apresentaremos os principais métodos de interpolação de medidas, as equações matemáticas derivadas, formas de cálculos, aproximações e erros. Faremos a visualização das medidas através de gráficos, como de dispersão, a fim de facilitar a compreensão do assunto. Por fim, apresentaremos um estudo de caso, baseado em exemplos práticos presentes no cotidiano dos profissionais de Tecnologia da Informação (TI), no qual iremos aplicar esses métodos estatísticos e analisar os resultados. AVISO: orientações sobre unidades de medida. Introdução 1 - Métodos de interpolação de medidas Analisar os principais métodos de interpolação de medidas. Contextualização Motivação Imagine a situação hipotética em que você deseja construir uma casa. Agora, vamos aos seguintes questionamentos: Você contrataria a obra de uma casa sem saber quanto ela vai custar? Você compraria uma casa sem saber em quanto tempo ela será construída? Sendo os recursos financeiros e o tempo de vida das pessoas limitados, essas perguntas se tornam pertinentes antes de comprarmos o imóvel, e obter essas respostas é essencial para a tomada da decisão de fazer a contratação. No contexto da Engenharia de Software, fazendo uma analogia com a situação anterior, quando uma empresa procura por um serviço de desenvolvimento de software no mercado, ela, normalmente, solicita uma apresentação do software às empresas candidatas e, posteriormente, um orçamento, sendo aí que entram as estimativas. Atenção Determinar com exatidão o custo final de um software e o seu prazo de conclusão é uma tarefa que só pode ser realizada quando ele já está finalizado. Tudo o que pode ser feito antes disso, até mesmo os cálculos mais rigorosos, são estimativas. Ao longo das últimas décadas, diversas técnicas de estimativa foram propostas e as áreas de Matemática e Estatística contribuíram definitivamente para a criação e maturação delas. O Modelo Construtivo de Custos ou COCOMO (COnstructive COst MOdel), por exemplo, é um modelo empírico de custos, apresentado em 1981 por Barry Boehm, que se baseou no estudo de sessenta e três projetos de software e, a partir da análise das suas linhas de código, derivaram-se equações matemáticas para estimar o esforço e o custo dos projetos de software, utilizando como métrica padrão as linhas de código ou LOC (Line of Codes). Barry Boehm Engenheiro e professor de Ciência da Computação estadunidense, nascido em 1935, reconhecido por suas contribuições na área de custos em Engenharia de Software. Apesar de modelos como COCOMO, não existe uma fórmula mágica para fazer estimativas em projetos de software, ainda mais que os requisitos do software, por sua própria natureza, tendem à expansão em quase todos os projetos. Portanto, para se obter estimativas precisas de projeto, usa-se pelo menos de duas a três técnicas diferentes para comparar os resultados e harmonizar as divergências encontradas. Exemplo Podemos usar a técnica de decomposição conhecida como WBS (Work Breakdown Structure ou Estrutura Analítica do Projeto), proposta pelo PMI no seu guia PMBOK (Project Management Body of Knowledge ou Conjunto de Conhecimentos em Gerenciamento de Projetos). O WBS divide o projeto em partes tangíveis e verificáveis, conhecidas como entregáveis (do inglês deliverables), a partir dos quais se fazem as estimativas, e permite comparar os resultados obtidos com aqueles derivados das técnicas empíricas, as quais derivam equações matemáticas baseadas em dados históricos de projetos e propõem um modelo no qual podemos fazer as estimativas. É nesse ponto que passamos a conhecer o primeiro objetivo do nosso conteúdo, que é aprender e aplicar essas técnicas empíricas com base em dados históricos. Porém, antes de irmos direto ao ponto, vamos conhecer alguns conceitos importantes nos tópicos a seguir. Inferência estatística A inferência estatística é uma das áreas da Estatística que tem por objetivo, a partir de dados representativos de uma população, ou seja, de uma amostra, fazer previsões e criar um modelo que possa ser aplicado para a população inteira. Essa técnica nos permite extrapolar os resultados, verificar as tendências do nosso projeto e nos auxilia na tomada de decisões. Entenda o conceito de população e amostra, segundo Bussab e Morettin (2017): População é o conjunto de todos os elementos ou resultados sob investigação. Amostra é qualquer subconjunto da população. Por exemplo, imagine que queiramos saber quantos projetos de desenvolvimento de software foram contratados pelo governo federal nos últimos 5 anos, que utilizaram Pontos de Função, e quantos utilizaram outras métricas, tendo em vista que, após a publicação da Portaria nº 4, de 6 de março de 2017, a mensuração de software utilizando Pontos de Função deixou de ser obrigatória no Brasil. Se consultarmos o site do Portal da Transparência do Governo Federal, podemos ter acesso a essa informação facilmente, porém não é possível analisarmos todos os projetos dos últimos 5 anos, sem o auxílio de um sistema, para obter essa resposta. Sendo assim, podemos selecionar uma amostra proveniente dos diversos órgãos do governo, com 200 projetos, por exemplo, e estimar quantos utilizaram Pontos de Função e quantos não utilizaram e, por fim, inferir esse resultado para a população inteira, ou seja, todos os projetos dos últimos 5 anos. Observe a imagem a seguir, a inferência estatística que ilustra a técnica: Inferência estatística. O modelo obtido através dessa técnica busca alguma forma de regularidade ou padrão que esteja presente nas observações, após a análise dos dados, e a diferença entre os dados e o modelo constitui os resíduos. Uma ferramenta utilizada para analisarmos os dados do modelo são os gráficos de dispersão, que abordaremos a seguir. Grá�cos de dispersão O gráfico de dispersão representa os dados de uma amostra utilizando pontos que são distribuídos em um plano cartesiano. Esses pontos são fixados em coordenadas cartesianas (eixo X e eixo Y) e indicam qual o tipo de relação que existe entre as variáveis analisadas, levando em consideração a forma em que os pontos estão organizados. Vamos a um exemplo para entendermos melhor como utilizar gráficos de dispersão. A Nesma (Netherlands Software Metrics Association ou Associação de Métricas de Software da Holanda), organização mundial bastante reconhecida na área de Pontos de Função, em seu trabalho conhecido como Early Function Point Counting (ou Contagem Antecipada de Pontos de Função), usou uma base de dados com mais de 100 projetos para comparar diferentes técnicas de estimativa com Pontos de Função, e apresentou os resultados nos dois gráficosa seguir. Gráfico: Contagem Estimativa x Contagem Detalhada Extraído de: Nesma, 2015. Gráfico: Contagem Indicativa x Contagem Detalhada Extraído de: Nesma, 2015. Conforme podemos observar em ambos os gráficos, existe uma relação linear entre as técnicas que foram comparadas, porém a contagem indicativa apresenta uma maior dispersão de resultados com relação à contagem detalhada, se comparada à contagem estimativa, fato que podemos observar analisando o gráfico de Contagem Indicativa x Contagem Detalhada, onde encontramos os pontos mais afastados da reta. Comentário Com base nesses dados, é possível o gerente de projetos tomar uma decisão sobre qual técnica de estimativa utilizando Pontos de Função irá adotar, conforme os objetivos definidos em seu projeto. Interpolação de medidas A interpolação consiste em um método de estimativa que permite construir um novo conjunto de dados a partir de um conjunto discreto de dados pontuais previamente conhecidos. Os valores conhecidos são relacionados em sequência com o valor desconhecido. A interpolação é, na raiz, um conceito matemático simples. Se houver uma tendência geralmente consistente em um conjunto de pontos de dados, é possível estimar razoavelmente o valor do conjunto em pontos que não foram calculados. Essa técnica é útil para preencher dados ausentes, como aumentar a escala de imagens ou criar modelos estatísticos. Por exemplo, suponhamos que um censo é realizado de cinco em cinco anos pelo IBGE (Instituto Brasileiro de Geografia e Estatística) e que o último tenha sido realizado entre 2015 e 2020, e queiramos saber alguma informação em um período dentro deste intervalo, como a quantidade de nascimentos no Brasil no ano de 2018. Como fazemos para responder esta questão? Utilizando interpolação. É importante ressaltar que a interpolação pode ser contrastada com a extrapolação: Interpolação O que se busca ao aplicar interpolação é descobrir um padrão em um conjunto de pontos de dados para estimar um valor entre dois pontos. Extrapolação É usada para estimar valores fora de um conjunto de pontos em vez de entre eles. Os gráficos de dispersão são uma ótima ferramenta para identificar um padrão nos pontos de dados. Veja: Gráfico: Modelo estatístico baseado em interpolação linear. Elaborado por: Bruno Freitas Braga. Pudemos observar que, a partir de uma amostragem pontual, ligamos os pontos de dados na tentativa de identificar um padrão. Uma vez feito isso, é possível criar um modelo que nos servirá de referência para ser aplicado em vários projetos. Os pontos de dados podem ser derivados dos dados históricos de uma empresa. Por exemplo, podemos criar gráficos de dispersão para preencher esses pontos e fazer análises com base nesses dados, como: O esforço dispendido na realização dos 10 últimos projetos. A produtividade da equipe durante a realização dos 5 primeiros sprints dado um conjunto com os últimos projetos da empresa. O custo total dos projetos desenvolvidos pela empresa para o segmento de comércio exterior. O resultado de cada uma das análises, como a que vimos no exemplo anterior, irá auxiliar os gerentes de projetos no planejamento de seus projetos futuros. Os modelos resultantes das técnicas de interpolação são expressos utilizando polinômios que, na prática, representam funções derivadas de um gráfico de dispersão XY típico, no qual o eixo X, geralmente, representa uma variável independente, como tempo ou espaço, enquanto o eixo Y representa uma variável dependente, como população. Para entendermos melhor o conceito de interpolação, vamos a um exemplo bem simples. Observe a sequência abaixo contendo 5 números (n = 5), que podemos também chamar de termos. 2, ___, ___, ___, 10 Podemos assumir que o a1 é o primeiro termo correspondendo ao número 2, e o a5 é o quinto termo, ou seja, o número 10. Desejamos agora preencher os três espaços em branco, que são os valores intermediários, entre os dois pontos conhecidos, de modo que estejam em sequência e em uma progressão aritmética. Com essas informações, vamos agora interpolar esses três meios aritméticos desconhecidos utilizando um polinômio, a fim de determinarmos qual é a razão existente nessa sequência. $$ a_{5}=a_{1}+4^{*} r $$ Sendo o r igual à razão e já conhecendo os valores do primeiro e do quinto termo, basta substituirmos os valores na equação. $$ 10=2+4 * r=>8=4 * r=>r=2 $$ Somando-se cada um dos termos pela razão que descobrimos, cujo valor é igual a 2, obtemos os valores dos termos a2, a3 e a4 que são 4, 6 e 8 respectivamente. O polinômio do exemplo que acabamos de ver pode ser utilizado para resolver qualquer problema envolvendo progressão aritmética com razão igual a 2, e mesmo se mudarmos a quantidade de termos, basta ajustarmos o polinômio para obtermos a nova razão, e assim, o resultado da progressão aritmética. A ideia das técnicas de interpolação é exatamente essa. Agora que já entendemos o conceito de interpolação, vamos conhecer e analisar as principais técnicas utilizadas, que são: interpolação linear, interpolação exponencial e interpolação logarítmica. Interpolação linear A interpolação linear, uma forma muito simples de interpolação, é basicamente a renderização de uma linha reta entre dois ou mais pontos. É uma das maneiras mais simples de interpolar – uma linha conectando dois pontos é usada para estimar valores intermediários. Comentário Na interpolação linear, supõe-se que a variável dependente (população) seja alterada a uma taxa constante para alcançar o próximo ponto de dados, sendo tipicamente óbvio que a variável real não muda linearmente entre os pontos de dados, mas essa simplificação, geralmente, é suficientemente precisa. O método de interpolação linear se utiliza de uma função linear p(x) (um polinômio de primeiro grau) para representar, por aproximação, uma suposta função f(x) que originalmente representaria as imagens de um intervalo descontínuo (ou degenerado) no domínio de f(x). A interpolação linear entre dois pontos conhecidos que são dados pelas coordenadas (x0 , y0) e (x1, y1) pode ser deduzida usando-se proporcionalidade. O interpolante linear é a linha reta entre esses dois pontos. Para um valor x no intervalo, o valor y ao longo da linha reta é dado a partir da equação das inclinações, conforme fórmula a seguir: $$ \frac{y-y_{0}}{x-x_{0}}=\frac{y_{1}-y_{0}}{x_{1}-x_{0}} $$ Resolver essa equação para y, que é o valor desconhecido em x, é igual a: $$ y=y_{0}+\left(x-x_{0}\right) * \frac{y_{1}-y_{0}}{x_{1}-x_{0}} $$ Vamos agora a um exemplo prático para entendermos como aplicar a interpolação linear em dado cenário. A tabela a seguir relaciona a quantidade de pontos de função produzidos e o esforço para entregá-los. Observe: Pontos de Função (PF) Esforço em Pessoas.Horas (PH) 1,10 184,09 1,20 187,99 Tabela: Exemplo interpolação linear. Elaborado por: Bruno Freitas Braga. Suponha que seja fundamental saber qual o esforço necessário para entregar 1,18PF. Antes de tudo, vamos inserir esse valor na tabela, a seguir, a partir da qual faremos o passo a passo. Pontos de Função (PF) Esforço em Pessoas.Horas (PH) 1,10 184,09 1,18 y 1,20 187,99 Tabela: Exemplo interpolação linear. Elaborado por: Bruno Freitas Braga. Observando os dados da tabela, podemos montar o seguinte sistema: $$ \begin{gathered} x_{0}=1,10 \rightarrow y_{0}=184,09 \\ x_{1}=1,20 \rightarrow y_{1}=187,99 \\ x=1,18 \rightarrow y=? \end{gathered} $$ Então, podemos agora aplicar a equação de interpolação linear para descobrirmos o valor de Y. Aplicando a proporcionalidade, temos que: $$ \frac{y-184,09}{1,18-1,10}=\frac{187,99-184,09}{1,20-1,10} $$ Logo: $$ y=184,09+0,08 * \frac{3,9}{0,1} $$ Assim: $$ y=187,21 $$ Aplicando interpolação linear, tomando como base os dados históricos fornecidos por uma empresa, disponíveis nas tabelas anteriores, conseguimos chegar ao resultado aproximado de 187,21PH (Pessoas.Horas) de esforço necessário para entregar 1,18PF. O gráficode dispersão resultante da interpolação realizada no exemplo seria algo parecido com o do gráfico a seguir, sendo os pontos em vermelho os pontos conhecidos, e o ponto em azul o ponto que acabamos de calcular. Gráfico: Interpolação linear. Elaborado por: Bruno Freitas Braga. O gráfico anterior pode ser representado por um polinômio de grau um, conforme a seguir: $$ f(x)=a x+b $$ Sendo “a” igual ao coeficiente angular ou taxa de variação, que está ligado à inclinação da reta em relação ao eixo X, e “b” o coeficiente linear, que é uma constante representada pela ordenada do ponto em que a reta corta o eixo Y. Nos próximos tópicos, aplicaremos esse polinômio para solucionarmos problemas não lineares. A interpolação linear, às vezes, introduz erros em suas estimativas, dependendo do cenário que esteja sendo analisado, por exemplo, quanto maior uma população, maior é a quantidade de nascimentos, e esse crescimento exponencial é mostrado em um gráfico de dispersão com uma tendência “curvada para cima”. Um método mais preciso de interpolação, como veremos nos próximos tópicos, é mais apropriado para esse tipo de estudo. Veja o gráfico a seguir para entender os erros de análise que poderíamos gerar utilizando interpolação linear. Gráfico: Erros de interpolação linear. Extraído de: respondeai.com.br - acessado em 19/09/2021 Observando o gráfico, compreendemos que a interpolação linear nem sempre é a melhor técnica para ser aplicada em todos os cenários, pois há casos em que não existe uma relação linear entre os pontos. Pode- se utilizar interpolação polinomial para se chegar a uma solução do cenário apresentado no gráfico de erros de interpolação linear. Atenção É importante ressaltar que existem softwares que fazem os cálculos de interpolação automaticamente, como o Excel, os pacotes do Repositório livre R, Matlab, Minitab, dentre outros, sem contar linguagens como Python, que servem para elaborar programas que criam os gráficos de dispersão com os valores fornecidos, o que auxilia bastante os gerentes de projetos na análise dos dados. Interpolação exponencial Suponhamos que você esteja analisando determinado conjunto de pontos de dados em que a relação existente entre eles não seja linear, e uma reta em um gráfico de dispersão não ofereça a melhor representação desse cenário. Suponhamos também que você tenha notado que há uma tendência ligeiramente curvada para cima, o que indica um crescimento exponencial na relação existente entre esses pontos. Veja o gráfico a seguir para compreender melhor este cenário. Gráfico: Crescimento linear x crescimento exponencial. Extraído do site pmean.com / CC BY 3.0 US. Pudemos observar, no gráfico anterior, que a reta em negrito indica uma relação linear, porém o cenário que estamos analisando é exatamente o representado pelos pequenos quadrados que se distribuem ao longo de uma curva. Para esse caso, existe uma relação exponencial entre esses pequenos quadrados, e vamos agora aprender como fazer uma interpolação exponencial, ou seja, como descobrir o valor de algum ponto desconhecido nessa curva, dados alguns pontos conhecidos. Para fazermos a aproximação das funções, isto é, ajustes não lineares, utilizaremos o método dos mínimos quadrados (MMQ). Tal método é muito usado para ajustar pontos e aproximar melhor uma função, porém essa aproximação pode ser polinomial, exponencial, logarítmica, trigonométrica etc. O método dos mínimos quadrados procura aproximar uma função y = f(x) (real e de variável real) de uma função F(x) que seja combinação linear de funções conhecidas, de tal modo que a distância entre f(x) e F(x) seja a menor possível. Segundo Bertoldi (2016), a substituição de f(x) por uma função F(x) é indicada quando o uso da função dada oferece alguns inconvenientes, tais como: a) f(x) é definida através de processos não finitos como integrais, soma de séries etc. b) f(x) é conhecida através de pares de pontos, obtidos em experimentos, e desejamos substituí-la por uma função cujo gráfico se ajuste aos pontos observados, que podem ser afastados através de uma escolha apropriada da função F(x). Para entendermos melhor esses conceitos acerca da interpolação exponencial e o método dos mínimos quadrados, vamos a um exemplo prático. Observe a função exponencial a seguir: $$ g_{3}(x)=b * e^{a x} $$ Queremos deixar a função exponencial no mesmo formato da função linear: $$ y=a x+b $$ Então, vamos agora fazer um passo a passo para reescrever a função exponencial: $$ y=b * e^{a x} $$ Primeiramente, aplicaremos logaritmos dos dois lados: $$ \ln (y)=\ln \left(b * e^{a x}\right) $$ O produto dos logs de dois termos em um logaritmo é a soma dos logaritmos, assim, teremos: $$ \ln (y)=\ln (b)+\ln \left(e^{a x}\right) $$ O logaritmo é o inverso da exponencial, portanto reescreveremos a função anterior, conforme abaixo: $$ \ln (y)=a x+\ln (b) $$ Como podemos notar, agora a nossa função exponencial está em um formato muito similar ao da função linear que vimos inicialmente: $$ y=a x+b \rightarrow \ln (y)=a x+\ln (b) $$ Observe o seguinte: Quando você terminar o ajuste, vai achar o valor de a e também o valor do ln(b). Para ficar no formato da função original, será preciso calcular o exponencial de b, porque você está achando o logaritmo de b, ou seja, ln(b). Logo, você calcula eb para que o valor fique correto. Para o ajuste dos mínimos quadrados, usaremos o valor de x, que neste caso é o mesmo da função original, e de y, que neste caso é o valor do ln(y). Agora vamos fazer as operações com base na tabela correspondente à função linear. X Y XY X2 1 3 3 1 2 5 10 4 3 6 18 9 4 8 32 16 10 22 63 30 Tabela com os dados da função linear. Elaborado por: Bruno Freitas Braga. Conforme já dito, preencheremos agora outra tabela substituindo os valores originais pelos valores correspondentes na função exponencial. Assim, o valor de x continua o mesmo e o valor de y será o ln(y). Por exemplo, quando o y = 3, calcularemos ln(3). Veja: X Y XY X2 1 1,0986 1,0986 1 2 1,6094 3,2188 4 3 1,7917 5,3752 9 4 2,0794 8,3177 16 X Y XY X2 10 6,5792 18,0105 30 Tabela com os dados da função exponencial. Elaborado por: Bruno Freitas Braga. Com os valores devidamente preenchidos na tabela, agora, aplicaremos a seguinte equação do método dos mínimos quadrados para descobrir o valor de a, contido em nossa função exponencial. Note que a variável n da equação representa a quantidade de pontos da nossa tabela, que nesse caso são 4 pontos, sendo que a última linha corresponde ao somatório dos pontos. $$ a=\frac{n * \sum x y-\sum x * \sum y}{n * \sum x^{2}-\left(\sum x\right)^{2}} $$ Substituindo os valores das variáveis na equação anterior, teremos: $$ a=\frac{4 * 18,0105-10 * 6,5792}{4 * 30-10^{2}} $$ Resolvendo a equação anterior, teremos o valor de a = 0,3125. Agora, utilizaremos uma outra equação do método dos mínimos quadrados para descobrir o valor de b: $$ b=\frac{\sum x * \sum y-\sum y * \sum x^{2}}{\left(\sum x\right)^{2}-n * \sum x^{2}} $$ Substituindo os valores das variáveis na equação anterior, teremos: $$ b=\frac{10 * 18,0105-6,5792 * 30}{10^{2}-4 * 30} $$ Resolvendo a equação anterior, teremos o valor de b = 0,86355. Porém, na verdade, esse é o valor do logaritmo de b, ou seja, o ln(b) da nossa função exponencial. Então, conforme já dito, precisamos calcular o exponencial desse valor para chegarmos ao valor correto da nossa função de ajuste, isto é, precisamos calcular eb. Como e é uma constante matemática, conhecida como número neperiano, ou número exponencial que tem o valor aproximadamente igual a 2,71828, então basta efetuarmos o cálculo para chegarmos ao valor da nossa função: $$ e^{b}=2,371564823 \rightarrow b=2,371564823 $$ Agora que já sabemos os valores de a e de b, vamos substituí-los em nossa função exponencial: $$ g_{3}(x)=b * e^{a x} $$ Abaixo, temos a nossa função ajustada: $$ y=2,37156 * e^{0,3125 * x} $$ Dessa forma, nós fizemos um ajuste não linear paraa função e, para testar qualquer valor de x, basta substituir o valor de x na equação para obter a estimativa. O resultado no gráfico será uma curva ligeiramente curvada para cima, como vimos no início deste tópico. Interpolação logarítmica Para fazermos uma interpolação logarítmica, utilizaremos o mesmo método já visto para ajustar uma função exponencial, ou seja, o método dos mínimos quadrados. Diferentemente da função exponencial, a função logarítmica possui uma curva ligeiramente acentuada para baixo, no sentido inverso da função exponencial. Observe: Gráfico: Comparação entre as funções exponencial, linear e logarítmica Extraído do site alfaconnection.pro.br A curva em negrito representa uma função logarítmica, enquanto a curva em cinza representa uma função exponencial e a curva pontilhada, uma função linear. Então, por exemplo, se estivéssemos analisando determinado conjunto de pontos de dados, disponibilizados em um gráfico de dispersão, que apresentassem uma curva com uma tendência semelhante à da função logarítmica, poderíamos interpolar qualquer outro valor desconhecido entre esses pontos de dados. Os pontos de dados representados no gráfico de dispersão poderiam ser dados de produtividade, de esforço, de tempo, dentre outros dados importantes para o gerenciamento de projetos. Vamos a um exemplo prático para entendermos como fazer a aproximação de uma função logarítmica, utilizando o método dos mínimos quadrados (MMQ). Observe a função logarítmica a seguir: $$ g_{2}(x)=a * \ln (x)+b $$ Veja que essa função é muito parecida com uma função linear que é dada por: $$ y=a * x+b $$ O que temos de diferente, nesse caso, é que, no lugar de x, nós temos o ln(x). Então, fazendo essa troca, já teríamos a função linearizada. Dado o tabelamento a seguir do caso linear, vamos descobrir a equação da nossa função logarítmica. X Y XY X2 1 3 3 1 2 5 10 4 3 6 18 9 4 8 32 16 10 22 63 30 Tabela: Dados da função linear. Elaborado por: Bruno Freitas Braga. Preencheremos, agora, outra tabela substituindo os valores originais pelos valores correspondentes na função logarítmica e, como o nosso y é igual nas duas funções, preencheremos, então, a tabela com os mesmos valores da tabela anterior. No entanto, o valor de x corresponde na função logarítmica ao valor do ln(x), assim preencheremos o valor da coluna do x com esse valor calculado. Por exemplo, quando o x = 3, calcularemos ln(3). Veja: X Y XY X2X Y XY X2 0 3 0 0 0,6931 5 3,4655 0,4804 1,0986 6 6,5916 1,2069 1,3863 8 11,0904 1,9219 3,178 22 21,1475 3,6092 Tabela: Dados da função logarítmica. Elaborado por: Bruno Freitas Braga. Com os valores devidamente preenchidos na tabela, aplicaremos a seguinte equação do método dos mínimos quadrados para descobrir o valor de a, contido em nossa função logarítmica. Notem que a variável n da equação representa a quantidade de pontos da nossa tabela, que, nesse caso, são 4 pontos, sendo que a última linha corresponde ao somatório dos pontos. $$ a=\frac{n * \sum x y-\sum x * \sum y}{n * \sum x^{2}-\left(\sum x\right)^{2}} $$ Substituindo os valores das variáveis na equação anterior, teremos: $$ a=\frac{4 * 21,1475-3,178 * 22}{4 * 3,6092-3,178^{2}} $$ Resolvendo a equação, teremos o valor de a = 3,3833. Agora, vamos utilizar uma outra equação do método dos mínimos quadrados para descobrir o valor de b: $$ b=\frac{\sum x * \sum y-\sum y * \sum x^{2}}{\left(\sum x\right)^{2}-n * \sum x^{2}} $$ Substituindo os valores das variáveis na equação anterior, teremos: $$ b=\frac{3,178 * 21,1475-22 * 3,6092}{3,178^{2}-4 * 3,6092} $$ Resolvendo a equação anterior, teremos o valor de b = 2,8119. Com os valores de a e b calculados, já resolvemos o ajuste com os mínimos quadrados para o caso logarítmico. Logo, a função que se ajusta melhor aos pontos no formato logarítmico será: $$ y=3,3833 * \ln (x)+2,8119 $$ Desse modo, fizemos um ajuste não linear para a função, e para testar qualquer valor de x, basta substituir x na equação para obter a estimativa. O resultado no gráfico será uma curva ligeiramente curvada para baixo, como vimos no início deste tópico. Erro de interpolação Quando estudamos os polinômios interpoladores, vimos que eles são aproximações de uma função real, e essas aproximações podem ser tão próximas quanto quisermos. Porém, como toda aproximação, nossa função terá um erro, e o objetivo deste tópico é exatamente aprendermos como calcular tal erro de interpolação. Para descobrirmos como quantificar o erro de interpolação, vamos a um exemplo. Observe primeiro o tabelamento a seguir, utilizado nos tópicos anteriores. X Y XY X2 1 3 3 1 2 5 10 4 3 6 18 9 4 8 32 16 10 22 63 30 Tabela: Dados da função linear. Elaborado por: Bruno Freitas Braga. Agora, veja o gráfico de dispersão com os pontos de dados da tabela: Gráfico: Dispersão dos dados da tabela. Elaborado por: Bruno Freitas Braga. Observe que nem todos os pontos passam exatamente em cima da reta, o que indica que há um erro no polinômio interpolador dessa função linear. Esse erro é calculado pela distância entre o ponto e a reta. Utilizando o método dos mínimos quadrados (MMQ), visto nos tópicos anteriores, chegamos ao polinômio que representa a aproximação dos pontos de dados da tabela à função linear. Não necessariamente a equação da reta vai passar pelos pontos, porém nós determinamos a reta que melhor se ajusta aos pontos, e a equação que melhor se ajusta aos pontos terá o menor erro possível. Para efeitos didáticos, não vamos repetir todos os passos do MMQ, apenas exibir a equação do polinômio. $$ g(x)=1,6 x+1,5 $$ Quando existe um erro entre o polinômio e a função, a diferença entre os dois é chamada de Erro Exato. Tendo uma função y e a sua função interpoladora g(x), calculamos o erro como: $$ \text { Erro }=\left|y_{i}-g\left(x_{i}\right)\right| $$ Observando a equação, verificamos que o erro é dado pela diferença entre o valor tabelado e o valor estimado, sendo o i determinado ponto de dado selecionado. Vamos estimar o valor da função g(x) no ponto 3: $$ g(3)=1,6 * 3+1,5 $$ Teremos como resultado g(3) = 6,3. Agora, vamos calcular o erro utilizando a equação vista anteriormente. Primeiro, vamos identificar o valor de yi no ponto 3 da tabela, ou seja, y(3) = 6, e substituiremos o g(xi) pelo valor do g(3) obtido utilizando o polinômio interpolador, que, neste caso, é igual a 6,3. Logo: $$ \text { Erro }=|y(3)-g(3)| \rightarrow|6-6,3|=\mathbf{0}, \mathbf{3} $$ O erro da nossa função g(x) no ponto 3 é igual a 0,3. O erro total é dado pela soma de todos os erros em módulo, conforme a fórmula abaixo: $$ \text { Erro }=\sum_{i=1}^{n}\left|y_{i}-g\left(x_{i}\right)\right| $$ Sendo o valor de n, a quantidade de pontos. Utilizando a equação a seguir, podemos calcular o mínimo erro, dado pelo ponto mínimo da função erro, que é o ponto em que as derivadas parciais são nulas. $$ \text { Min Erro }=\sum_{i=1}^{n}\left(y_{i}-g\left(x_{i}\right)\right)^{2} $$ Métodos de interpolação de medidas aplicados à Engenharia de Software Neste bate-papo, apresentamos uma visão geral das técnicas estatísticas para estimativas de medidas de software, como a interpolação linear, exponencial e logarítmica, assim como a análise de erros. Vamos lá! Vem que eu te explico! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Módulo 1 - Vem que eu te explico! Interpolação linear Módulo 1 - Vem que eu te explico! Interpolação exponencial Módulo 1 - Vem que eu te explico! Interpolação logarítmica Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 Sobre os métodos de interpolação de medidas, analise as seguintes alternativas e marque a opção correta: A Os métodos de interpolação de medidas se baseiam nas opiniões dos especialistas, sendo esta uma forma de avaliação subjetiva que pode variar de um especialista para outro. B Os modelos empíricos derivados desses métodos se baseiam nosdados históricos de projetos para fazer estimativas e planejar melhor os futuros projetos. C Os métodos de interpolação consistem em derivar valores fora do conjunto dos pontos de dados conhecidos. D Utilizar somente os métodos estatísticos não nos habilita a fazer estimativas de produtividade, esforço e custo. E Os gráficos de dispersão são uma ferramenta ineficiente para detectarmos as tendências sobre os rumos de nossos projetos e, consequentemente, fazermos interpolação. Parabéns! A alternativa B está correta. Os modelos empíricos são utilizados para fazermos previsões e estimativas em nossos projetos. Eles baseiam-se em dados históricos de projetos e, dentre esses dados, podemos destacar aqueles relacionados à produtividade da equipe, esforço dispendido no projeto, custo etc. A partir dos dados conhecidos, utilizamos a técnica de interpolação para obtermos os valores dos dados desconhecidos, o que nos auxilia a fazer estimativas mais precisas. Questão 2 Sobre as funções não lineares, analise as seguintes alternativas e marque a opção correta: A As funções não lineares, como a função exponencial e a função logarítmica, utilizam um método conhecido como método dos mínimos quadrados (MMQ) para fazer a aproximação. B No gráfico de dispersão, os pontos de dados de uma função exponencial são ligeiramente curvados para baixo, o que indica um crescimento semelhante ao de uma progressão geométrica. C No gráfico de dispersão, a representação que mais se aproxima de uma função exponencial é uma reta que liga os pontos de dados, indicando um crescimento semelhante ao de uma progressão aritmética. D O método dos mínimos quadrados procura aproximar uma função y = f(x) de uma função F(x) de modo que a distância entre as duas funções seja a maior possível. E Os métodos de interpolação para funções não lineares têm por objetivo identificar pontos de dados conhecidos e criar uma função que melhor se ajuste a esses pontos, de modo a extrapolar valores desconhecidos utilizando esta função. Parabéns! A alternativa A está correta. Utiliza-se o método dos mínimos quadrados (MMQ) para se fazer aproximações de funções não lineares, de modo que a distância seja a menor possível com relação a uma função linear. Dessa forma, pode-se derivar uma equação que represente a tendência dos pontos de dados no gráfico de dispersão e interpolar outros pontos dentro desse conjunto de dados, a fim de ser fazer as estimativas em nossos projetos. 2 - Cálculo de custo com base no esforço Calcular custo estimado com base no esforço. Contextualização O processo de estimativa Segundo Vazquez (2013), o processo de estimativa de um projeto de software envolve basicamente quatro atividades: Estimar o tamanho do produto a ser gerado. Estimar o esforço empregado na execução do projeto. Estimar a duração do projeto. Estimar o custo do projeto. Veja o processo a seguir para entender a sequência e a interação entre essas atividades. Processo de estimativa de projeto de software. Extraído de: Hazan, 2008, p. 26. Observando o processo de estimativa de projeto de software anterior, percebemos que começa com a coleta e a análise dos requisitos iniciais do projeto. Como necessitamos fazer estimativas desde o início do projeto e ainda não temos um conhecimento detalhado sobre os seus requisitos, o artefato utilizado frequentemente é um documento inicial de requisitos, como o documento de visão, ou um documento do cliente, como o modelo de processos de negócio. O profissional responsável deve analisar os requisitos e, posteriormente, estimar o tamanho do software. Para estimarmos o tamanho do produto a ser gerado, primeiramente, devemos decidir qual unidade de medida utilizaremos e, na área de Engenharia de Software, são duas as unidades de medida mais comuns: linhas de código (LOC – Lines of Code) e pontos de função (PF). Essas duas unidades servem como unidade básica de definição de custo dos projetos. Por exemplo, se nós fizermos uma estimativa de tamanho de um software de processamento de vendas, muito utilizado em caixas de supermercado, e chegarmos ao tamanho de 1.000 pontos de função, com essa informação poderemos derivar o esforço, a duração e o custo do projeto. Comentário Existem inúmeras técnicas para estimarmos o tamanho de um software, como: a técnica da analogia simples, em que comparamos o projeto atual com projetos passados, utilizando como base dados históricos; a da contagem indicativa, estimativa e detalhada para estimativas utilizando pontos de função; a do modelo COCOMO para estimativas de tamanho baseada em linhas de código, dentre outras técnicas. Porém, o foco em nosso estudo é utilizar técnicas estatísticas de estimativas com base em dados históricos de projetos. Utilizaremos técnicas estatísticas a fim de definir o melhor modelo matemático para representar os dados apurados. Esses dados, normalmente, são extraídos de bancos de dados históricos de projetos da organização, conforme podemos ver na imagem anterior, e as estimativas de tamanho, esforço, duração e custo do projeto serão derivadas desses dados. Vamos supor, neste momento, que a sua empresa não possua dados históricos de projetos já realizados. Como começar, então, a fazer estimativas? Esse é um assunto que iremos responder no próximo tópico. Dados históricos de projetos Os dados históricos de projetos são um dos ativos de processos organizacionais mais importantes no gerenciamento de projetos. Na maioria das áreas de conhecimento descritas no Guia PMBOK do PMI, como as áreas de Gerenciamento de Escopo, Cronograma e Custos, eles servem como entrada para a definição das linhas de base dos planos de projeto, e esses planos guiam e orientam o trabalho do projeto. Quando o projeto é concluído, devemos documentar o tamanho, o prazo, o custo, o esforço e os recursos utilizados no projeto, visando à coleta de dados para a melhoria do processo de estimativas. As lições aprendidas também devem ser documentadas a fim de não repetirmos os mesmos erros ocorridos nos projetos realizados em projetos futuros. Todos esses dados devem ser registrados no banco de dados que contém o histórico dos projetos da organização. No entanto, nem todas as empresas possuem um banco de dados com o histórico de seus projetos. Então, como começar a fazer estimativas sem esses dados? É recomendável, neste caso, utilizar repositórios de dados do mercado e, para isso, existem inúmeras organizações que os disponibilizam, entre as quais destacam-se o ISBSG (International Software Benchmarking Standards Group ou Grupo Internacional de Padrões de Benchmarking de Software) e o PROMISE Software Engineering Repository (Repositório de Engenharia de Software do PROMISE), da Universidade de Ottawa. Ambos os repositórios são referências para a indústria de Tecnologia da Informação e são publicados há mais de 15 anos. PROMISE O PROMISE disponibiliza gratuitamente vários DataSets (conjunto de dados), dentre os quais podemos destacar o DataSet no qual Barry Boehm desenvolveu o modelo COCOMO, assim como DataSets de projetos de softwares desenvolvidos pela NASA. ISBSG O ISBSG possui um repositório com mais de 10.600 projetos de desenvolvimento e 1.177 projetos de manutenção, e é considerado a maior referência de dados de projetos de TI no mundo. Anualmente, o ISBSG publica uma planilha em Excel com dados e análises dos projetos de seu repositório, porém, para ter acesso completo a essa planilha é necessário comprar uma licença no valor de $3.000,00 (três mil dólares). Ambas as organizações citadas aqui disponibilizam dados relevantes de seus projetos, como: tamanho em linhas de código e pontos de função, esforço em PH (Pessoas.Horas), custos, produtividade, dentre outros. Utilizaremos dados desses repositórios para demonstrar como fazer estimativas utilizando técnicas estatísticas. Estudo de caso Para demonstrarmos a aplicação das técnicas estatísticas, como interpolação, regressão linear, aproximaçãoe erros, utilizaremos um HDR (Historical Data Repository ou Repositório de Dados Históricos) disponibilizado gratuitamente pela página PROMISE Software Engineering Repository. Os arquivos disponibilizados pelo PROMISE possuem extensão ARFF (Attribute Relationship File Format ou Formato de Arquivo de Relacionamento de Atributo) e consistem em um arquivo de texto ASCII que inclui um cabeçalho com uma lista de atributos e uma seção de dados. Podemos acessar os dados do arquivo utilizando um editor de texto simples, como o Bloco de Notas do Windows, porém esse formato foi desenvolvido pelo Projeto de Machine Learning (Aprendizado de Máquina) do Departamento de Ciência da Computação da Universidade de Waikato da Nova Zelândia. No site desse projeto, é disponibilizado um software denominado Weka (Waikato Environment for Knowledge Analisais ou Ambiente Waikato para Análise do Conhecimento), que possui diversos algoritmos de Machine Learning, e faz simulações e análises estatísticas rapidamente nos arquivos, disponibilizando resultados em formato gráfico e planilhado. Dica É recomendável acessar esses arquivos utilizando o software Weka. Para o nosso estudo, selecionamos um DataSet denominado Desharnais Software Cost Estimation ou Estimativa de custo do software Desharnais. Jean-Marc Desharnais, autor desse repositório, coletou dados históricos de projetos desenvolvidos por 10 organizações do Canadá. Foram coletados dados de um total de 81 projetos, que foram realizados entre os anos de 1983 e 1988, dos quais foram apurados 12 atributos como esforço, tamanho em pontos de função e duração. Dentre os 81 projetos, 4 possuíam dados incompletos, porque faltaram valores de alguns atributos, e 77 eram casos completos que são frequentemente usados para estudos. Em sua tese de mestrado denominada Analyse statistique de la productivitie des projets informatique a partie de la technique des point des fonction (Análise estatística de produtividade de projetos de informática a partir da técnica de pontos de função), Desharnais propôs um modelo empírico de estimativa de custos utilizando pontos de função a partir desses dados históricos. Em sua obra, o professor Desharnais classificou os projetos em 3 categorias de acordo com o ambiente de programação: Categoria 1 Projetos com uso de linguagens tradicionais voltados para o ambiente mainframe que utilizavam a linguagem COBOL ou equivalente. Categoria 2 Projetos com o uso de linguagens de alto nível como ADSO, CAPEX etc. Categoria 3 Projetos com linguagens de quarta geração desenvolvidos para PC com um banco de dados como o dBase. Neste estudo, a versão que usaremos para fazer a análise estatística será reduzida a 4 projetos de categoria 3, pelo fato de os projetos dessa categoria possuírem uma realidade mais próxima aos projetos comerciais da atualidade. Apesar de apresentarmos todos os atributos contidos no DataSet original, vamos considerar os atributos mais relevantes para fazermos as estimativas de tamanho, esforço, duração e custo. Sendo assim, observe a tabela a seguir com os atributos e projetos que foram selecionados. Tabela: Dados históricos de 4 projetos selecionados do DataSet Desharnais. Extraído de: Repositório de Engenharia de Software do PROMISE - traduzido. Para efeito de análise, consideraremos como tamanho funcional do projeto os pontos de função não ajustados (atributo 11), devido ao fator de ajuste ainda não possuir um padrão ISO (International Standards Organization), não sendo, dessa forma, reconhecido internacionalmente como um padrão a ser seguido. Já os pontos de função não ajustados estão em conformidade com as exigências e padrões da ISO - International Standards Organization, sendo reconhecidos através de uma norma ISO/IEC 14143-1:2007. Análise de dados Primeiramente, verificaremos se existe uma relação linear entre o tamanho dos projetos em pontos de função não ajustados (variável dependente – eixo Y) e a duração deles (variável independente – eixo X). Neste experimento, partiremos da hipótese de que quanto maior for o projeto mais tempo ele durará. Agora, vamos verificar se essa hipótese é verdadeira e, para comprová-la, criaremos um gráfico de dispersão, que é uma ótima ferramenta de análise para confirmar se essa tendência de crescimento existe. Veja o gráfico: Gráfico: Relação entre o tamanho e a duração dos projetos. Elaborado por: Bruno Freitas Braga. Estimativa de custo baseada em interpolação linear Imagine que um cliente em potencial solicitou à sua empresa um orçamento para o desenvolvimento de um novo software, com as mesmas características dos projetos selecionados em nossa amostra, sendo que uma das restrições desse projeto é que tenha duração de 24 meses. Quando estudamos o processo de estimativas, vimos que, para fazermos o orçamento de um projeto, é necessário primeiramente sabermos qual é o seu tamanho. Porém, nós não temos em nossa amostra um projeto realizado em um período de 24 meses, então, como faremos esta estimativa de tamanho? A resposta ao questionamento anterior é simples: Podemos fazer essa estimativa utilizando interpolação linear, pois, como já temos 4 pontos de dados conhecidos, podemos estimar um valor intermediário e desconhecido entre esses pontos. Para fazer a interpolação linear, iremos, primeiramente, criar uma tabelinha com os valores conhecidos e mais próximos da duração desejada de 24 meses, e, em seguida, aplicar a equação de interpolação linear. Veja: Duração Pontos de Função (PF) 12 414 24 y 34 698 Tabela: Cálculo da interpolação linear. Elaborado por: Bruno Freitas Braga. O que queremos determinar é o valor da variável Y da tabela anterior. Logo, aplicaremos a equação da interpolação linear: $$ \frac{y-y_{0}}{x-x_{0}}=\frac{y_{1}-y_{0}}{x_{1}-x_{0}} $$ Vamos montar o sistema abaixo e aplicar na equação anterior. $$ \begin{gathered} x_{0}=12 \rightarrow y_{0}=414 \\ x_{1}=34 \rightarrow y_{1}=698 \\ x=24 \rightarrow y=? \end{gathered} $$ Logo: $$ \frac{y-414}{24-12}=\frac{698-414}{34-12} $$ Resolvendo essa equação, chegaremos aproximadamente ao resultado de y = 568,91. Dessa forma, para um projeto com duração de 24 meses, a estimativa de seu tamanho funcional é de 598,61 pontos de função não ajustados. Após efetuar uma análise em 57 licitações realizadas por órgãos públicos federais, cujo objeto trata de desenvolvimento de sistemas, pôde-se verificar que o preço médio do ponto de função é de R$488,00/PF, assim, para estimarmos o custo deste projeto, podemos utilizar esse valor de referência e multiplicá-lo pelo tamanho do projeto em pontos de função. Logo, o preço estimado do projeto é de R$277.481,68. Determinação do melhor ajuste por regressão linear Na imagem do gráfico de dispersão, notamos que os pontos de dados não passam exatamente em cima da reta, o que nos indica que há um erro na relação linear entre as duas variáveis analisadas. Esse erro é dado pela distância entre o ponto e a reta, ou seja, quanto maior a distância entre os pontos de dados e a reta, maior será o erro em nossa estimativa. Nós podemos ajustar os pontos de dados analisados utilizando o método dos mínimos quadrados (MMQ), de modo a obter a reta que melhor se ajuste aos pontos e que possua o menor erro possível. Essa técnica de interpolação linear, conhecida também como regressão linear, tem por objetivo determinar o polinômio que melhor se ajusta à reta. Como resultado, vamos derivar um polinômio no formato a seguir: $$ y=a x+b $$ Utilizando o método dos mínimos quadrados, determinaremos o valor do coeficiente angular da reta, que está ligado à inclinação da reta em relação ao eixo X, que, neste caso, é representado pela variável a. Definiremos também o valor do coeficiente linear da reta, que é a ordenada do ponto em que a reta corta o eixo Y, representado pelo valor da constante b. Modelo empírico para estimativa de duração Podemos criar um modelo empírico de duração com base no tamanho do projeto e utilizá-lo posteriormenteno planejamento de projetos futuros. Para isso, vamos primeiro preencher a tabelinha a seguir, que utilizaremos para aplicar nas equações do método dos mínimos quadrados, cujo objetivo é calcular o valor da variável a e da constante b. Considere que X representa a duração do projeto em meses e Y o tamanho do projeto em pontos de função não ajustados. X Y XY X2 3 180 540 9 9 267 2403 81 12 414 4.968 144 34 698 23.732 1.156 58 1.559 31.643 1.390 Tabela: Dados da função linear. Elaborado por: Bruno Freitas Braga. Com os valores devidamente preenchidos na tabela, agora, aplicaremos a equação a seguir para descobrir o valor de a. A variável n da equação representa a quantidade de pontos da nossa tabela, que nesse caso são 4 pontos. Note também que a última linha da tabela anterior corresponde ao somatório dos pontos. $$ a=\frac{n * \sum x y-\sum x * \sum y}{n * \sum x^{2}-\left(\sum x\right)^{2}} $$ Substituindo os valores das variáveis na equação anterior, teremos: $$ a=\frac{4 * 31643-58 * 1559}{4 * 1390-58^{2}} $$ Resolvendo a equação, teremos aproximadamente o valor de a = 16,462. Agora, utilizaremos outra equação para calcular o valor da constante b: $$ b=\frac{\sum y-a * \sum x}{n} $$ Substituindo os valores das variáveis na equação anterior, teremos: $$ b=\frac{1559-16,462 * 58}{4} $$ Resolvendo a equação, teremos o valor de b = 151,05. Com os valores de a e b calculados, derivamos o polinômio de melhor ajuste para as duas variáveis analisadas. Então, a função linear que representa isso é determinada por: $$ y=16,462 x+151,05 $$ Portanto, nós fizemos o melhor ajuste a partir dos pontos de dados conhecidos e determinamos uma função linear que nos permite testar qualquer valor de x, sendo necessário apenas substituir o valor de x na equação, para obter a estimativa de tamanho do projeto em pontos de função não ajustados. Podemos preencher agora a tabela anterior utilizando esse polinômio. X Y 3 200,436 X Y 9 299,208 12 348,594 34 710,758 Tabela: Tabela com o melhor ajuste. Elaborado por: Bruno Freitas Braga. Como resultado, teremos um gráfico de dispersão com os pontos de dados passando exatamente em cima da reta, conforme ilustrado a seguir: Gráfico: Melhor ajuste por regressão linear. Elaborado por: Bruno Freitas Braga. Dessa forma, criamos um modelo empírico para o cálculo da duração de projetos futuros com base em seu tamanho em pontos de função não ajustados. Modelo empírico para estimativa de esforço Podemos criar um modelo empírico de esforço com base no tamanho do projeto e utilizar posteriormente esse modelo para calcular os custos do projeto. Observe a tabela: X Y XY X2 180 651 117.180 32.400 267 2.429 648.543 71.289 414 1.400 579.600 171.396 X Y XY X2 698 2.352 1.641.696 487.204 1559 6.832 2.987.019 762.289 Tabela: Dados da função linear. Elaborado por: Bruno Freitas Braga. Considere que X representa o tamanho em pontos de função e Y, o esforço. Vamos observar, agora, o gráfico de dispersão dos 4 projetos selecionados: Gráfico: Dispersão do esforço. Elaborado por: Bruno Freitas Braga. Note que há uma relação linear entre 3 pontos de dados, porém, um deles está muito fora da reta, o que indica que haverá um erro maior em nosso modelo. Nesse caso, é recomendável aumentarmos a quantidade de projetos da nossa amostra para verificar se a relação linear entre esforço e tamanho dos projetos se confirma. Porém, podemos suavizar essa diferença através da técnica de regressão linear. Para efeitos didáticos, não faremos os cálculos já realizados e a equação para essa relação é dada por: $$ y=2,0964 x+890,93 $$ Com o polinômio definido, podemos preencher a tabela com os dados linearizados e depois a utilizarmos para fazer a análise de erros do nosso modelo. X Y 180 1.268,282 267 1.450,6688 X Y 414 1.758,8396 698 2.354,2172 Tabela: Tabela com o melhor ajuste. Elaborado por: Bruno Freitas Braga. Dessa maneira, criamos um modelo empírico para o cálculo do esforço de projetos futuros com base em seu tamanho em pontos de função não ajustados. Comentário Observe que fizemos duas análises na tentativa de estabelecer uma correlação entre as variáveis duração e tamanho, e esforço e tamanho, porém, podemos fazer outros estudos utilizando os mesmos métodos estatísticos, a fim de se obter o melhor modelo empírico para fazer as estimativas. Com os dados obtidos neste tópico, podemos agora fazer uma análise de erros, o que veremos no próximo tópico. Análise de erros Conforme vimos no Gráfico “Relação entre o tamanho e a duração dos projetos” do tópico Análise de Dados, os pontos de dados reais não passam exatamente em cima da reta e, por esse motivo, criamos um modelo empírico com a reta que possui o menor erro possível utilizando a técnica de regressão linear. No entanto, precisamos quantificar o erro fazendo uma correlação entre o nosso modelo empírico e os dados reais, de modo a fazermos estimativas com melhor precisão. Para calcularmos a diferença entre o modelo empírico e os dados reais, utilizaremos a equação a seguir. Tendo uma função y e a sua função interpoladora g(x), calculamos o erro como: $$ \text { Erro }=\left|y_{i}-g\left(x_{i}\right)\right| $$ Sendo g(xi) o polinômio obtido usando a técnica de regressão linear e xi o valor de determinado ponto de dado do eixo X. Já calculamos o resultado desse polinômio na Tabela 4, bastando observar os valores da coluna Y da mesma tabela. Obtemos o valor de yi utilizando a tabela derivada dos dados reais, que neste caso corresponde à Tabela 3 do nosso estudo de caso, e basta observar os valores da coluna Y da mesma tabela. O erro total é dado pela soma de todos os erros em módulo, conforme a fórmula abaixo: $$ \text { Erro }=\sum_{i=1}^{n}\left|y_{i}-g\left(x_{i}\right)\right| $$ Sendo o valor de n a quantidade de pontos. Observe a tabela a seguir com a aplicação dessa equação: Projeto Yi g(xi) Erro 35 180 200,436 -20,436 33 267 299,208 -32,208 77 414 348,594 65,406 42 698 710,758 -12,758 1559 1558,996 0,004 Tabela: Tabela de erros. Elaborado por: Bruno Freitas Braga. Portanto, o erro total para os quatro projetos analisados é dado pelo valor 0,004 da função erro. Atenção É importante ressaltar que, para efeitos de aprendizado, demonstramos várias equações e aplicamos cálculos utilizados para obtermos os resultados e os analisarmos, porém, ferramentas computacionais como o Excel, o MathLab e os pacotes R fazem todos os cálculos demonstrados na aula. No Excel, por exemplo, basta entrarmos com os dados históricos dos projetos e inserirmos um gráfico de dispersão que automaticamente o programa faz uma regressão linear e determina o polinômio interpolador com o seu grau de precisão. Cálculo do custo baseado no esforço Neste tópico, aplicaremos as equações definidas anteriormente para calcularmos as estimativas de custos de um projeto com 1.000 pontos de função não ajustados. Dado o tamanho do projeto, estimaremos a sua duração utilizando o modelo empírico que criamos antes. $$ y=16,462 x+151,05 \rightarrow x=\frac{y-151,05}{16,462} $$ Sendo X a duração do projeto e Y o seu tamanho, substituindo os valores na equação, chegaremos a uma duração estimada de 51,57 meses. Faremos agora uma estimativa de esforço utilizando o modelo empírico já criado. Veja o polinômio a seguir: $$ y=2,0964 x+890,93 $$ Sendo X o tamanho do projeto em pontos de função e Y o esforço, substituindo os valores na equação, chegaremos a um esforço estimado de 2.987,33 pessoas.horas. Para fazermos uma estimativa de custos, é necessário converter o esforço para a unidade de medida pessoa.mês. Considerando que uma pessoa leva em média 6 horas produtivas de trabalho diário, teremos em 1 mês, 120 horas úteis trabalhadas, então, dividindo o esforço pelas horas úteis, teremos um esforço de 24,90 pessoas.mês. Agora, já podemos calcular o custo do projeto aplicando a equação dada: $$ \text { Custo da equipe }=\text { Esforço } * C P $$ Sendo que a constante CPcorresponde ao custo da pessoa por mês. Considerando que o salário médio de um desenvolvedor de software, no Brasil, gira em torno de R$3.500,00, aplicando a equação anterior teremos um custo da equipe do projeto de R$87.150,00. Atenção É importante salientar que o custo da pessoa por mês pode variar conforme a especialidade e a experiência do profissional, porém, para efeitos didáticos, utilizamos um valor médio. Estamos aqui calculando somente o custo do desenvolvimento do software, desconsiderando outros custos envolvidos, como o custo do investimento em marketing, o da compra de computadores e insumos, dentre outros. Cálculo de custo de software com base no esforço de desenvolvimento. Neste bate-papo, vamos abordar as técnicas de estimativa de esforço, duração e custo de desenvolvimento de software através de um estudo de caso. Vem que eu te explico! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Módulo 2 - Vem que eu te explico! Modelo empírico para estimativa de duração Módulo 2 - Vem que eu te explico! Modelo empírico para estimativa de esforço Módulo 2 - Vem que eu te explico! Cálculo do Custo baseado no Esforço Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 Sobre o processo de estimativa, analise as seguintes alternativas e marque a opção correta: A As bases de dados dos históricos de projetos consistem em um ativo organizacional importante para o planejamento dos projetos futuros. B Se a empresa não possuir uma base de dados com o histórico dos projetos não é possível fazer estimativas iniciais. C Não é necessário estimar o tamanho de um projeto para determinar em quanto tempo o projeto será realizado. D Para se fazer estimativas de esforço é necessário antes determinar o orçamento do projeto. E Quando uma empresa começa a trabalhar com métricas de software e não possui uma base de dados com o histórico de seus projetos não é possível fazer estimativas. Parabéns! A alternativa A está correta. As bases de dados dos históricos de projetos são fundamentais para planejar os projetos futuros de uma organização. Utilizando essas bases, é possível aplicar técnicas estatísticas e criar um modelo empírico de estimativas que pode ser aplicado em todos os projetos da organização. Quando a empresa não possuir tais bases, é recomendável procurar bases disponíveis no mercado, como as disponibilizadas pelo ISBSG e PROMISE. Estimar o tamanho do projeto é um dos passos principais no processo de estimativas, pois é a partir do tamanho que se derivam outras estimativas, tais como esforço, duração e custo. Questão 2 Sobre o método de regressão linear, analise as alternativas abaixo e assinale a opção correta: A Utiliza-se um gráfico de dispersão para analisar os pontos de dados reais e verificar se todos passam em cima da reta. Caso não passem, não é possível criar um modelo estatístico utilizando este método. B Consiste em fazer uma aproximação dos dados reais com a reta do gráfico de dispersão de modo que crie um modelo empírico com o menor erro possível. C O polinômio derivado desta técnica só pode ser aplicado aos pontos de dados conhecidos. D Para fazer análise de erros e quantificar a precisão da estimativa, não se utiliza o polinômio derivado desta técnica. E O método da analogia simples é mais eficiente para fazer estimativas, pois se baseia na opinião dos especialistas e oferecem uma maior acurácia como resultado. Parabéns! A alternativa B está correta. A técnica de regressão linear se baseia em dados obtidos através das bases históricas de projetos para criar um modelo empírico de estimativas. Ela consiste em aproximar os dados reais à reta linear de modo a criar um modelo com o menor erro possível. É uma técnica mais eficiente do que a técnica da analogia simples, pois a última se baseia na opinião de especialistas e depende do nível de experiência deles em projetos. Para fazer a análise de erros, é necessário obter o polinômio derivado desta técnica. Considerações �nais As técnicas apresentadas para fazer estimativas com base estatística auxiliam os gerentes de projetos a estimar métricas com maior precisão e a obter um entendimento mais claro sobre como fazer o planejamento do seu projeto. Apresentamos os métodos de interpolação de medidas e vimos como calcular as estimativas a partir de bases estatísticas. Aprendemos a analisar os gráficos de dispersão, que são uma ferramenta importante para indicar as tendências ocorridas em projetos passados, além de oferecer maior previsibilidade dos processos durante o planejamento de projetos futuros. Vimos como fazer estimativas com técnicas estatísticas utilizando dados históricos de projetos a partir de um estudo de caso, no qual derivamos um modelo empírico, utilizando a técnica de regressão linear e analisamos os erros, a fim de fazer uma avaliação sobre a acurácia destas estimativas. Podcast Agora é hora de abordarmos as técnicas de estimativas com base estatística na Engenharia de Software. Referências BUSSAB, W. O.; MORETTIN, P. A. Estatística Básica. 9. ed. São Paulo, SP: Saraiva, 2017. FRANCO, N. M. B. Cálculo Numérico. São Paulo, SP: Pearson Prentice Hall, 2006. HAZAN, C. Análise de Pontos de Função: Uma aplicação nas estimativas de tamanho de Projetos de Software. Revista Engenharia de Software n. 2, p. 25-31, 2008. NESMA. Early Function Point Counting. Netherlands Software Metrics Users Association. Consultado na internet em: 5 de out. 2021. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: Uma Abordagem Profissional. 8. ed. Porto Alegre, RS: AMGH, 2016. PROJECT MANAGEMENT INSTITUTE. PMI. Guia PMBOK: Um Guia para o Conjunto de Conhecimentos em Gerenciamento de Projetos. 6. ed. Pennsylvania: PMI, 2017. 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. 13. ed. São Paulo, SP: Érica, 2013. Explore + Para saber mais sobre os assuntos aqui tratados: Conheça os DataSets gratuitos disponibilizados na página PROMISE Software Engineering Repository. Pesquise a página da Waikato University, na qual é disponibilizado o software Weka (Waikato Environment for Knowledge Analysis ou Ambiente Waikato para Análise do Conhecimento), que processa os DataSets disponibilizados pelo PROMISE. Pesquise o artigo denominado Historical Data Repositories in Software Engineering: Status and Possible Improvements (Repositórios de dados históricos em engenharia de software: Status e possíveis melhorias), publicado por Luigi Lavazza e Luca Santillo. Pesquise a tese de mestrado denominada Statistical Analysis on the Productivity of Data Processing with Development Projects using the Function Point Technique (Análise Estatística da Produtividade do Processamento de Dados com Projetos de Desenvolvimento utilizando a Técnica de Ponto de Função), publicada por Jean-Marc Desharnais pela Universidade de Quebec, pois utilizamos o DataSet deste estudo em nosso estudo de caso. Baixar conteúdo javascript:CriaPDF()
Compartilhar