Baixe o app para aproveitar ainda mais
Prévia do material em texto
Curso de Pós-graduação a Distância Métricas e Estimativas na Engenharia de Software Autoras: Janaína Rolan Loureiro e Regina Beretta Mazaro Universidade Católica Dom Bosco Virtual www.virtual.ucdb.br | 0800 647 3335 2 www.virtual.ucdb.br | 0800 647 3335 Objetivo Geral Conhecer quais métricas e estimativas de software são empregadas nas empresas desenvolvedoras de software para prover à empresa e ao cliente um cálculo confiável de valor e prazos. Compreender que a importância de medir e estimar um sistema é similar à importância de construir um software de acordo com os requisitos pedidos pelo cliente. SUMÁRIO UNIDADE 1 – MÉTRICAS E ESTIMATIVAS DE SOFTWARE ................................ 04 1.1 Métricas Orientadas a Tamanho: Linhas de Código ........................................... 09 UNIDADE 2 – MÉTRICAS ORIENTADAS A FUNÇÃO, CASOS DE USO E EQUIPE .................................................................................................................... 15 2.1 Métricas orientadas a Função: Pontos por Função ............................................. 15 2.2 Métricas orientadas a Casos de Uso: Pontos de Caso de Uso........................... 29 2.3 Métricas orientadas a Equipe: Planning Poker ................................................... 36 UNIDADE 3 – MODELO COCOMO (I E II) ............................................................... 43 3.1 Aplicando o Cocomo I – Implementação Básica ................................................. 44 3.2 Aplicando o Cocomo I – Implementação Intermediária ....................................... 45 3.3 Aplicando o Cocomo I – Implementação Avançada ............................................ 47 3.4 Cocomo II ........................................................................................................... 47 3.5 Pessoal envolvido no projeto – O grande mito! .................................................. 59 REFERÊNCIAS ........................................................................................................ 61 ANEXO 1 .................................................................................................................. 63 ANEXO 2 .................................................................................................................. 64 3 www.virtual.ucdb.br | 0800 647 3335 Apresentação Pensando de maneira geral, a compra de um produto sempre possui um valor a ser considerado. No ato da compra refletimos se o preço é justo, se a qualidade apresentada pelo produto vale o que se pede por ele, se vai durar um tempo considerável e até mesmo realizamos uma pesquisa de mercado para averiguar qual seria o melhor lugar para se comprar o produto por um preço mais acessível. No universo de software isso não é muito diferente. O cliente está cada vez mais exigente, buscando softwares de qualidade e com bons preços. Além disso, o cliente deseja que o sistema esteja em funcionamento na sua empresa o mais breve possível. Métricas e estimativas de software são empregadas nas empresas desenvolvedoras de software justamente para prover à empresa e ao cliente um cálculo confiável de qual valor e prazos podem ser ponderados para serem atribuídos ao software a ser construído. A importância de medir e estimar um sistema é similar à importância de construir um software de acordo com os requisitos pedidos pelo cliente, pois não adianta construir um software bom, porém cobrar um preço que não o representa. Assim como não adianta construir um software dentro do acordado e não respeitar os prazos, ao final o cliente ficará insatisfeito da mesma forma. Dessa maneira, quando empresas desenvolvedoras de software aplicam métricas e estimativas conseguem mensurar dados quantitativos de tamanho e complexidade de um sistema e com isso, calcular esforço, tempo e até mesmo qual valor pode ser cobrado para se desenvolver um software conforme a necessidade do cliente e com a estrutura e pessoal disponível na organização. Estimativas bem feitas ajudam a empresa a se manter competitiva no mercado. Nesse material são apresentadas cinco das principais métricas de software: Linhas de Código, Pontos por Função, Pontos de Caso de Uso, Planning Poker e o modelo COCOMO. 4 www.virtual.ucdb.br | 0800 647 3335 UNIDADE 1 – MÉTRICAS E ESTIMATIVAS DE SOFTWARE Sabe-se que a construção e manutenção de um software envolvem diversas atividades, que devem ser muito bem planejadas e conduzidas. Para isso, deve-se ponderar o tempo e esforço para executar essas atividades, além de considerar a dependência entre elas. Estimativa de software é usada para estimar o tempo e esforço que devem ser empregados, e com ela deve ser possível responder as seguintes questões (SOMMERVILLE, 2011): 1. Quanto esforço é necessário para completar cada atividade? 2. Quanto tempo de calendário é necessário para completar cada atividade? 3. Qual é o custo total de cada atividade? Custos básicos envolvem tanto hardwares e softwares necessários para o desenvolvimento de software, quanto custos de deslocamento até a empresa do cliente para eventuais reuniões, coletas de requisitos, implantação do software, treinamento de usuários e manutenção. Toda forma de diminuir custos é válida, ou seja, apostar em reuniões web, suporte online e até mesmo treinamento por vídeo conferência pode ser um meio de economizar em um projeto de software. Fonte: http://migre.me/t0QB7 Entretanto, o principal custo associado a um desenvolvimento de software é o custo de esforço. Esse custo é diretamente relacionado ao pagamento da equipe envolvida nesse desenvolvimento, isto é, o custo do salário do pessoal que compõe a equipe, mas também o custo de tudo que provém condições para que eles trabalhem com qualidade, por exemplo um escritório confortável, seguros de saúde e previdência, auxílios à pesquisa, maternidade/paternidade e até mesmo pagamento de terceiros envolvidos nesse processo (contadores, faxineiros, administradores e etc.). Logo, estimar o custo de esforço exigido para o desenvolvimento de um projeto é uma etapa fundamental do planejamento. Essa estimativa servirá de base 5 www.virtual.ucdb.br | 0800 647 3335 para a definição do cronograma, orçamento e até atribuição das atividades para a equipe. Quanto mais precisa for essa estimativa, maiores as chances de sucesso do projeto. Contudo, realizar tal estimativa não é uma tarefa muito simples. Ao contrário das ciências físicas, em que é possível medir de forma direta e bem-definida a temperatura, velocidade, pressão, e demais grandezas, o software não possui uma unidade universal que permita sua medição de maneira absoluta. Pelo contrário, o desenvolvimento de software pode ser avaliado por diversas perspectivas, todas possuindo um certo grau de subjetividade. Isso faz com que as atividades de estimativas tenham um risco associado, que pode ser reduzido com constantes revisões das estimativas. Boehm (1981), introduziu a relação entre a imprecisão das estimativas e a fase corrente do projeto, conceito que mais tarde foi batizado de Cone da Incerteza por McConnell (1998) e pode ser conferido no Gráfico 1. Ele indica que as estimativas realizadas na fase inicial de um projeto possuem uma margem de erro de cerca de 35%, tanto para mais como para menos, embora a tendência observada seja de estimativas abaixo da realidade. Gráfico 1 - Cone da Incerteza de Estimativa Fonte: Adaptado de Futrell et al., 2002 O cone da incerteza também indica que as estimativas são aprimoradas conforme o projeto é desenvolvido. Isso ocorre pois inicialmente os requisitos são 6 www.virtual.ucdb.br | 0800 647 3335 pouco conhecidos e sujeitos a muitas mudanças durante o processo,tornando-se mais estáveis com as revisões e especificações detalhadas. Contudo, a redução no grau de incerteza das estimativas irá ocorrer apenas se for realizado o gerenciamento adequado das etapas do processo, para que as correções necessárias sejam executadas e as estimativas aperfeiçoadas. Sem esse acompanhamento, o cenário do projeto continuará refletindo incerteza, formando uma nuvem em torno dos valores do melhor caso, como pode ser conferido no Gráfico 2. Gráfico 2 - Nuvem de Incerteza em projetos não gerenciados Fonte: adaptado de McConnell's, 2006 Uma das abordagens mais aplicadas para realizar-se a avaliação de esforço do desenvolvimento é através da estimativa do tamanho esperado que o software irá atingir quando pronto. De acordo com Hazan (2008), a estimativa do tamanho do software permite estabelecer como será realizado o seu desenvolvimento, o custo agregado e o tempo exigido para sua construção. O gerenciamento do projeto pode, então, aproveitar as estimativas obtidas para monitorar e aprimorar o projeto sempre que possível, buscando alcançar uma qualidade cada vez maior para o produto final. Além disso, é possível utilizar os dados obtidos nas medições de projetos anteriores como aprendizado para incrementar e ajustar continuamente o processo de desenvolvimento de software adotado pela empresa. A comparação entre o que foi previsto e o que foi de fato atingido na realidade permite que sejam identificados 7 www.virtual.ucdb.br | 0800 647 3335 pontos deficitários do processo, sugerindo a necessidade de uma maior atenção nesses itens. Dessa forma, a medição é uma ferramenta poderosa para qualquer gestor de projeto, pois serve para embasar suas tomadas de decisões. Métricas de Processo e Projeto O que é? As métricas de projeto e processo de software são medidas quantitativas que permitem que você tenha o discernimento sobre a eficácia do processo de software e os projetos que são executados usando o processo como uma estrutura. São coletados dados básicos de qualidade e comparados com médias passadas, e avaliados para determinar se ocorreram melhorias de qualidade e produtividade. As métricas são usadas também para apontar áreas com problemas, de modo que as correções possam ser desenvolvidas e o processo de software melhorado. Quem realiza? Métricas de software são analisadas e avaliadas por gerentes de software. As medidas muitas vezes são coletadas por engenheiros de software. Por que é importante? Se você não medir, o julgamento só pode ser baseado em uma avaliação subjetiva. Com a medição, tendências (tanto boas quanto ruins) podem ser detectadas, podem ser feitas melhores estimativas e melhorias significativas podem ser obtidas ao longo do tempo. Quais são as etapas envolvidas? Comece definindo um conjunto limitado de medidas de processo, projeto e produto que sejam fáceis de coletar. Essas medidas são muitas vezes normalizadas usando-se métricas orientadas a tamanho ou função. O resultado é analisado e comparado com médias anteriores para projetos similares executados na organização. São avaliadas as tendências e são obtidas as conclusões. Qual é o artefato? Uma série de métricas de software que proporcionam discernimento sobre o processo e possibilitam entender o projeto. Como garantir que o trabalho foi realizado corretamente? Aplicando um esquema de medições consistente, embora simples que nunca deve ser usado para avaliar, recompensar, ou punir indivíduos por seu desempenho pessoal. Fonte: Pressman, 2021. 8 www.virtual.ucdb.br | 0800 647 3335 Como o processo é o fator central na determinação da qualidade de um software, aplicar estratégias, como as métricas, que auxiliem na sua melhoria é sempre muito importante. Pressman (2021), representa o Processo por meio de um triângulo, em que a complexidade do Produto, a capacidade e motivação do Pessoal e a Tecnologia disponível para desenvolvimento exercem influência direta na qualidade e desempenho observados. Condições ambientais, como o ambiente de desenvolvimento, condições de negócios e características do cliente também geram impacto no processo. A Figura 1 ilustra o relacionamento desses fatores que influenciam a qualidade do produto de software. Figura 1 - Determinantes da qualidade de software Fonte: Adaptado de Pressman, 2021 Nesse material, serão discutidas as principais métricas de software: • Orientadas a Tamanho: Linhas de Código o Consideram o tamanho em linhas de código do software em desenvolvimento como medida de normalização para estimar a produtividade do projeto. • Orientadas a Função: Pontos por Função 9 www.virtual.ucdb.br | 0800 647 3335 o Consideram as funcionalidades a serem entregues como medida de normalização para estimar a produtividade do projeto. • Orientadas a Casos de Uso: Pontos de Caso de Uso o Consideram os casos de uso a serem desenvolvidos como medida de normalização para estimar a produtividade do projeto. • Orientadas a Equipe: Planning Poker o Consideram a experiência dos membros da equipe desenvolvedora para estimar a produtividade do projeto. Encerrando com o estudo do modelo de estimativa COCOMO II, que apresenta uma medição mais elaborada ao reunir características de mais de uma métrica em sua estrutura. 1.1 Métricas Orientadas a Tamanho: Linhas de Código Introduzida inicialmente em meados de 1960, a métrica de Linhas de Código (do inglês Lines of Code - LOC) foi a primeira a ser adotada na Engenharia de Software para estimativas de qualidade, produtividade e custo de projetos de desenvolvimento de softwares. Nessa época, cerca de 90% do trabalho total de um projeto de software se concentrava na produção de código, o que o tornava o principal produto gerado. Além disso, a única linguagem de programação empregada era Assembly, em que toda linha física de código representava uma única sentença lógica. Em conjunto, esses fatores fizeram com que a métrica LOC se mostrasse bastante eficaz para estimar custo, tempo gasto e qualidade do software produzido, e, portanto, se tornasse a principal métrica adotada no mercado. Contudo, com o surgimento das linguagens de programação de alto nível, como FORTRAN, COBOL, Basic e PL/I na década de 1970, os conceitos que sustentavam a métrica LOC sofreram alterações significativas, reduzindo assim a sua eficácia. Nessas novas linguagens de programação, as linhas físicas de código Linhas de código fonte (do inglês Source Lines of Code - SLOC) é outro termo utilizado para referir-se a essa mesma métrica. Já KLOC (do inglês Kilo Line os Code), ou KSLOC, representa uma unidade de medida para a métrica de LOC, indicando um conjunto de mil linhas de código. 10 www.virtual.ucdb.br | 0800 647 3335 nem sempre coincidiam com as sentenças lógicas do programa. Em alguns casos, as sentenças lógicas passaram a ser divididas em mais de uma linha física para melhor compreensão. Em outras situações, era ainda possível agrupar mais de uma sentença lógica em uma única linha física, enfraquecendo assim a relação número de linhas físicas X quantidade de sentenças lógicas. Outro aspecto que contribuiu para a defasagem da métrica LOC foi a redução do esforço exigido na fase de programação em relação ao projeto total de 90% para cerca de 50%, segundo Jones (2013), especialmente em sistemas de grande porte. Isso porque as linguagens de alto nível facilitaram a produção de código, pois muitas de suas sentenças básicas representavam um conjunto de sentenças em Assembly. Sendo assim, estimar apenas o trabalho do desenvolvimento de código deixou de ser suficiente para realizar uma boa avaliação do projeto de software como um todo, pois esta passou a representar uma única etapa do processo, não sendo mais tão predominante como anteriormente.Com o avanço das linguagens de programação e das diferentes dimensões de qualidade de software exigidas, a métrica LOC se tornou cada vez menos recomendável para ser utilizada isoladamente na medição de projetos e processos de software. Ela esbarra em dificuldades como ambiguidades na contagem de linhas, aplicações desenvolvidas em mais de uma linguagem distinta, reuso de software e incapacidade de detectar falhas de usabilidade, interface, e outros requisitos não funcionais. Mesmo assim, LOC ainda é utilizada como complemento em outras métricas mais elaboradas que são empregadas na atualidade, o que torna seu estudo e compreensão relevantes. 1.1.1 Como estimar e medir O primeiro passo para estimar-se o tamanho, em linhas de código, de um software é subdividi-lo em componentes menores, cada qual englobando uma funcionalidade específica. Assim, é possível realizar a estimativa dos elementos em separado e obter o total do sistema somando seus tamanhos. Uma das maneiras empregadas para estimar quantas linhas de código serão necessárias para implementar um determinado componente é consultar um especialista que já tenha desenvolvido uma funcionalidade semelhante, para que possam fazer uma estimativa com base em suas experiências passadas. Outra 11 www.virtual.ucdb.br | 0800 647 3335 opção é que os mesmos desenvolvedores que serão responsáveis pela implementação desse elemento façam a estimativa. Para melhorar a qualidade das estimativas, é interessante que os especialistas ou desenvolvedores consultados forneçam três valores acerca da quantidade de linhas de código que acreditam que terão que ser implementadas para contemplar o componente: um valor otimista (mínimo, ), um valor pessimista (máximo, ) e outro valor realista (médio, ). Com isso, é possível calcular uma distribuição beta para a estimativa, aprimorando assim o valor obtido. Futrell et al. (2002) sugerem a seguinte distribuição, que prioriza o valor realista, mas balanceia a estimativa incluindo um grau de incerteza com os valores otimistas e pessimistas: Em geral, o valor final é apresentado em KLOC (ou KSLOC), por ser uma unidade mais adequada ao tamanho de softwares. Uma terceira alternativa para realizar a estimativa é por analogia, comparando-se as funcionalidades requeridas pelo sistema com outros softwares já desenvolvidos anteriormente. Contudo, é importante ressaltar que essa maneira oferece uma série de obstáculos para uma estimativa precisa, como por exemplo: uso de linguagens de programação diferentes, aplicação de algoritmos ou estruturas de dados distintos, funcionalidades semelhantes podem ser empregadas em escopos divergentes, entre outras inconsistências que podem ser observadas entre o software a ser desenvolvido e os que estão servindo de referência. Tão importante como estimar com precisão quantas linhas de código um software terá é saber contá-las uma vez prontas. Como foi visto, a simples contagem das linhas de arquivos de código fonte não é mais uma abordagem viável, pois com as linguagens de alto nível perdeu-se a relação um para um entre linhas físicas e sentenças lógicas. Faz-se necessário então definir alguns parâmetros para o cálculo do Robert E. Park desenvolveu no Software Engineering Institute (SEI) um framework para padronizar a contagem de linhas de código de um software. Conheça o documento completo em: <http://www.sei.cmu.edu/reports/ 92tr020.pdf>. Acesso em: 17 set. 2021. http://www.sei.cmu.edu/reports/92tr020.pdf http://www.sei.cmu.edu/reports/92tr020.pdf 12 www.virtual.ucdb.br | 0800 647 3335 número de linhas de código de um software, e mantê-los consistentes para padronizar a métrica. Devem ser contadas como linhas de código apenas aquelas que trazem sentenças lógicas executáveis, desconsiderando-se, portanto, comentários, linhas em branco, aberturas/fechamentos de blocos e códigos temporários para testes ou debug. Cada sentença lógica deve ser contada como uma linha, ainda que estejam em uma mesma linha física. As linhas devem ser contadas de maneira contínua e integral, independentemente dos possíveis fluxos de execução que o sistema possa tomar. Isso é importante pois nessa métrica está sendo avaliado o esforço de produção do software, que precisa contemplar diferentes cenários de execução, até mesmo os pouco prováveis. Definições de variáveis e estruturas, assim como diretivas de inclusão ou chamadas de função, devem ser contadas uma única vez assim que aparecem. Código oriundo de reuso de software não deve ser computado, afinal o esforço para seu desenvolvimento ocorreu em seu projeto original, e não no atual. É evidente que o trabalho de contar as linhas de código de um software pronto, seja para avaliar a realidade alcançada com a estimativa prevista ou para utilizar o resultado como dado histórico para novos projetos, não precisa ser realizado manualmente. Existem diversos softwares que auxiliam nessa etapa, realizando a contagem de LOC conforme parâmetros pré-definidos. É o caso do LOC metrics1, CLOC2, Universal Code Lines Counter3 e Count Lines of Code with Understand4. Essas definições possibilitam que a contagem de linhas de código em diferentes projetos se mantenha estruturada, com diretrizes padronizadas adotadas em todos os projetos. Porém, ainda assim existem empecilhos em relação à comparação direta entre a quantidade de linhas de diferentes projetos, sendo que o uso de linguagens de programação diferentes é o principal deles. Pensando nisso, foi elaborada uma tabela que permite estimar quantas linhas de Assembly cada linha de código de uma determinada linguagem de alto nível representa. A ideia é que as estimativas de todos os projetos devem ser transformadas para o 1 http://www.locmetrics.com 2 https://github.com/AlDanial/cloc 3 http://www.ab-tools.com/en/software/universalcodelinescounter/ 4 https://scitools.com/count-lines-of-code/ 13 www.virtual.ucdb.br | 0800 647 3335 equivalente em Assembly de acordo com a tabela de referência (Anexo 2), e apenas nesse contexto é apropriado comparar diferentes projetos. A partir da estimativa das linhas de código exigidas em um software, é possível também calcular o tempo necessário, de acordo com a produtividade da equipe. Para isso, basta ter a informação de qual a média de produtividade em linhas de código por mês de cada desenvolvedor. Futrell et al. (2002) defendem que há mais de duas décadas a média anual de produtividade dos desenvolvedores tem sido de 3 mil linhas de código entregues, independente da linguagem utilizada. 1.1.2 Vantagens e desvantagens A métrica das linhas de código foi uma das pioneiras a surgir na área de Engenharia de Software, e sua aceitação foi alta pois seu objeto-alvo é o código fonte, elemento que constitui a base de qualquer software desenvolvido. Além disso, ela atribui um peso significativo ao desenvolvedor, pois é uma medida que foca o produto final gerado, mas através da ótica do desenvolvedor. Outra vantagem da métrica LOC é que ela permite a comparação entre diferentes projetos, através da normalização do número de instruções em Assembly. Calcular o tamanho em linhas de código do software desenvolvido é operação direta, limitada apenas à contagem das linhas segundo os parâmetros definidos. E como as estimativas são realizadas considerando a experiência de especialistas e desenvolvedores em projetos passados, a melhoria na sua qualidade segue sempre constante, sendo aperfeiçoada a cada novo projeto concluído. Contudo, apesar desses benefícios que a métrica LOC apresenta, ela também possui muitas desvantagens atreladas. Por exemplo, é difícil estimar o tamanho esperado de projetos inovadores, pois não existem dados anteriores para embasarem o cálculo. Além disso, os métodos de estimativa são subjetivosmesmo para projetos com que a equipe está familiarizada, e podem se mostrar completamente imprecisos com o decorrer do desenvolvimento. O estilo de programação do desenvolvedor exerce alta influência nessa métrica, seja tanto pela linguagem empregada como também pela tendência em escrever códigos mais concisos ou detalhados. De acordo com o conceito da métrica, a quantidade de linhas de código implementadas pode ser confundida com 14 www.virtual.ucdb.br | 0800 647 3335 produtividade. Afinal, nem sempre o programador que mais escreveu código foi o mais produtivo em termos de entrega de funcionalidades. A preocupação apenas com a quantidade de código desenvolvido também pode aumentar a ocorrência de erros, que geralmente são custosos para serem consertados. Analisar apenas o aspecto do código também impossibilita a avaliação de melhoria em funcionalidades que não são diretamente relacionadas com código, como é o caso de muitos requisitos não funcionais. O reuso de software e a geração automática de código, práticas amplamente difundidas no mercado, não são abordagens que se encaixam facilmente com a métrica LOC. Apesar de fazerem parte do código final, o esforço exigido para seu desenvolvimento é muito inferior ao de códigos que foram implementados por inteiro, logo não devem ser computados da mesma maneira. Enfim, apesar do conhecimento geral sobre essa métrica e a impressão de simplicidade, ela ainda é utilizada como estimativa de tamanho de software. Vale, porém, ressaltar que, se utilizada isoladamente, essa métrica LOC pode chegar a ser prejudicial, pois sua imprecisão de estimativa gera um planejamento incorreto que pode acarretar em custos ou prazos maiores do que os previstos. Exercício 1 Sobre a métrica de Linhas de Código, é correto afirmar que: a) Seu valor é sempre igual à quantidade de linhas de um arquivo de código. b) Uma de suas principais vantagens é que pode ser aplicado em qualquer projeto, sem que seja necessária nenhuma conversão, apenas confrontando-se os valores obtidos. c) As linguagens de programação de alto nível dificultaram a aplicação da métrica de linhas de código, pois a contagem não pode ser mais realizada de forma direta. d) Uma linha física corresponde a no máximo uma linha de código válida. e) Pode-se considerar o fluxo lógico ideal do programa, desconsiderando-se os caminhos mais improváveis de serem executados, ao realizar a contagem das linhas de código. 15 www.virtual.ucdb.br | 0800 647 3335 UNIDADE 2 – MÉTRICAS ORIENTADAS A FUNÇÃO, CASOS DE USO E EQUIPE 2.1 Métricas orientadas a Função: Pontos por Função Com o desenvolvimento das linguagens de programação de alto nível, os problemas relacionados à métrica de linhas de código passaram a se tornar maiores e mais inconvenientes para sua aplicação com sucesso. As estimativas começaram a perder precisão, e o mercado sentiu a necessidade de elaborar uma nova métrica para avaliar o tamanho esperado de um software e seu respectivo esforço de desenvolvimento. Foi então que em 1979, Allan Albrecht da IBM introduziu uma métrica que considera como medida para avaliar a complexidade do software as funções que este deve apresentar, ao invés de focar na quantidade de linhas de código elaboradas. Capers Jones, do Software Productivity Research (SPR), também aprimorou a métrica, tornando-a amplamente reconhecida. O International Function Point User Group (IFPUG) foi criado em 1986 para reunir os especialistas e aplicadores da métrica de pontos por função, de forma que eles pudessem trocar informações entre si. Várias publicações relacionadas ao tema surgiram dessa união, incluindo diretrizes e manuais para padronizar a métrica como o Function Point Counting Practices Manual5. O intuito da métrica de pontos por função é medir o software em termos de suas funções para o usuário final, e não simplesmente pelo número de linhas de código. Isso permite uma estimativa mais concreta do esforço do software, pois as funções são analisadas de acordo com sua categoria (entrada, saída, consultas, estruturas de dados e interfaces) e complexidade (baixa, média ou alta), cada qual possuindo um peso específico. Se necessário, é possível ainda obter a estimativa de linhas de código a partir dos pontos por função com a aplicação de uma fórmula de conversão. Futrell et al. (2002) definem seis passos básicos para a análise dos pontos por função conforme a Figura 2, que serão aprofundados nas seções subsequentes. No Anexo 1 são disponibilizadas planilhas-padrão para o cálculo dos pontos por função nas diferentes etapas do processo. 5 Atualmente na versão 4.3.1, 2010. 16 www.virtual.ucdb.br | 0800 647 3335 Figura 2 - Passos básicos na análise de pontos por função Fonte: Adaptado de Futrell et al., 2002 2.1.1 Contar o número de funções em cada categoria O processo para estimar o tamanho do software a ser desenvolvido com base nos seus pontos por função se inicia com a avaliação dos requisitos e suas funções associadas. São avaliados os volumes de entradas, saídas, consultas e dados produzidos pelo software, conforme uma arquitetura básica inicial (preferencialmente de forma visual), que é suficiente para uma primeira estimativa. Cada categoria possui suas particularidades de identificação e definição de grau de complexidade, e por isso serão tratadas separadamente nessa seção. 1. Saídas Qualquer estímulo produzido internamente no sistema que produza dados através de processamento para ser enviado ao usuário final constitui uma saída, como por exemplo as informações que são exibidas na tela a ele. Para fins da estimativa de pontos por função, devem ser contadas apenas saídas únicas, ou seja, que representam uma interação diferente. Elas devem então ser classificadas quanto a sua complexidade, considerando-se a quantidade de arquivos e campos envolvidos (Tabela 1), para que recebam o peso adequado. 17 www.virtual.ucdb.br | 0800 647 3335 Tabela 1 - Fatores de peso para Saídas na Análise de Pontos por Função Quantidade de arquivos Quantidade de campos 1 a 5 6 a 19 20 ou mais 0 a 1 Baixa (4) Baixa (4) Média (5) 2 a 3 Baixa (4) Média (5) Alta (7) 4 ou mais Média (5) Alta (7) Alta (7) Fonte: IFPUG, 2010 2. Entradas As entradas são formadas pelas informações que são passadas do usuário para o sistema, ou seja, são oriundas de fora do sistema, com o objetivo de serem armazenadas ou processadas. Novamente, apenas entradas únicas devem ser computadas, e cada qual deve ter sua classificação computada de acordo com os arquivos e campos com os quais interage, conforme pode ser conferido na Tabela 2. Tabela 2 - Fatores de peso para Entradas na Análise de Pontos por Função Quantidade de arquivos Quantidade de campos 1 a 4 5 a 15 16 ou mais 0 a 1 Baixa (3) Baixa (3) Média (4) 2 Baixa (3) Média (4) Alta (6) 3 ou mais Média (4) Alta (6) Alta (6) Fonte: IFPUG, 2010 3. Consultas As consultas são solicitações originárias de fora do sistema, que são processadas para que as informações sejam recuperadas e retornadas ao solicitante. Em geral envolvem consultas a bancos de dados, com retorno imediato, e ao contrário das saídas não exigem processamento lógico interno. Além de apenas consultas únicas deverem ser computadas, vale ressaltar que as consultas apresentam partes internas e externas, que por sua vez apresentam pesos diferentes para a estimativa de pontos por função. Esses pesos são indicados nas Tabela 3 e Tabela 4. 18 www.virtual.ucdb.br | 0800 647 3335 Tabela 3 - Fatores de peso para Consultas (parte externa) na Análise de Pontos por Função Quantidade de arquivos Quantidade de campos 1 a 5 6 a 19 20 ou mais 0 a 1 Baixa (4) Baixa (4) Média (5) 2 a 3 Baixa (4) Média (5) Alta (7) 4 ou mais Média(5) Alta (7) Alta (7) Fonte: IFPUG, 2010 Tabela 4 - Fatores de peso para Consultas (parte interna) na Análise de Pontos por Função Quantidade de arquivos Quantidade de campos 1 a 4 5 a 15 16 ou mais 0 a 1 Baixa (3) Baixa (3) Média (4) 2 Baixa (3) Média (4) Alta (6) 3 ou mais Média (4) Alta (6) Alta (6) Fonte: IFPUG, 2010 4. Estruturas de Dados ou Arquivos Nessa categoria são inclusas todas as estruturas de dados armazenadas no escopo do sistema, disponíveis aos usuários por meio de entradas, saídas, consultas ou interfaces (as demais categorias). Entram também nesse item os arquivos lógicos do software. A Tabela 5 traz o peso para cada complexidade de uma função nessa classe. Tabela 5 - Fatores de peso para Estruturas de Dados na Análise de Pontos por Função Quantidade de formas de organização Quantidade de campos 1 a 19 20 a 50 51 ou mais 1 Baixa (7) Baixa (7) Média (10) 2 a 5 Baixa (7) Média (10) Alta (15) 6 ou mais Média (10) Alta (15) Alta (15) Fonte: IFPUG, 2010 5. Interfaces As interfaces englobam as informações e processamento que o sistema necessita, mas que são externos a ele. Uma diferença em relação às demais categorias é que estruturas de dados que sejam compartilhadas 19 www.virtual.ucdb.br | 0800 647 3335 entre sistemas devem ser consideradas tanto nessa categoria como na de estruturas de dados e arquivos vista anteriormente. As demais interações devem ser consideradas como uma única interface, respeitando-se a direção. A Tabela 6 relaciona a quantidade de organizações e os campos utilizados para posicionar a complexidade das interfaces. Tabela 6 - Fatores de peso para Interfaces na Análise de Pontos por Função Quantidade de formas de organização Quantidade de campos 1 a 19 20 a 50 51 ou mais 1 Baixa (5) Baixa (5) Média (7) 2 a 5 Baixa (5) Média (7) Alta (10) 6 ou mais Média (7) Alta (10) Alta (10) Fonte: IFPUG, 2010 2.1.2 Aplicar os fatores de peso de complexidade Uma vez que as funções foram contadas e classificadas, o passo seguinte é calcular o total dos pontos por função não ajustados gerados. Para isso, em cada categoria, a quantidade encontrada de funções em cada complexidade é multiplicada pelo respectivo peso. O total é então obtido a partir da soma desses valores individuais, resultando nos pontos por função não ajustados (PF). O Anexo 1 traz um modelo de tabela que facilita bastante esse cálculo. 2.1.3 Aplicar as características gerais do sistema As características gerais do sistema podem influenciar positivamente ou negativamente no desenvolvimento de softwares, impactando na sua dimensão. Para contemplar essa realidade, foi incluída na métrica de pontos por função um fator de ajuste que possibilite tornar a estimativa um pouco mais realista. Ao todo, 14 características devem ser consideradas para a estimativa dos pontos por função, atribuindo-se a cada um valor entre 0 e 5, conforme descrito abaixo: 1. Não se aplica; 2. Influência casual; 3. Influência moderada; 4. Influência média; 5. Influência significativa 20 www.virtual.ucdb.br | 0800 647 3335 6. Influência alta. A seguir, serão discutidos em maiores detalhes esses 14 fatores e suas diretrizes para classificação em relação à complexidade, segundo IFPUG (2010). • Comunicação de Dados: refere-se à maneira com que as informações e os controles de dados são enviados e recebidos na comunicação entre a aplicação e o processador. Essas comunicações requerem um protocolo, para que seja estabelecido um padrão para a troca de informações entre sistemas e dispositivos. Tabela 7 - Classificação de complexidade da Comunicação de Dados Valor Descrição para determinar o nível de influência 0 Aplicação possui apenas processamento em lotes ou um computador isolado. 1 Aplicação possui processamento em lotes, mas também possui entrada de dados OU impressão remota. 2 Aplicação possui processamento em lotes, mas também possui entrada de dados E impressão remota. 3 Aplicação inclui coleta de dados online ou processamento front-end de um lote de processos ou consultas ao sistema. 4 Aplicação é mais do que apenas um front-end, mas suporta apenas um tipo de protocolo de comunicação. 5 Aplicação é mais do que apenas um front-end, e suporta mais de um tipo de protocolo de comunicação. Fonte: IFPUG, 2010 • Processamento Distribuído de Dados: avalia o nível de transferência de dados entre componentes internos da aplicação. Tabela 8 - Classificação de complexidade do Processamento Distribuído Valor Descrição para determinar o nível de influência 0 Aplicação não auxilia a transferência de dados ou funções de processamento entre os componentes do sistema. 1 Aplicação prepara os dados para serem processados pelo usuário em outro componente do sistema. 2 Dados são preparados para transferência, e então são transferidos e processados em outro componente do sistema (não são para processamento do usuário final). 3 Processamento distribuído e transferência de dados são online e em uma direção apenas. 4 Processamento distribuído e transferência de dados são online e em ambas as direções. 5 Funções de processamento são realizadas dinamicamente nos componentes mais apropriados do sistema. Fonte: IFPUG, 2010 21 www.virtual.ucdb.br | 0800 647 3335 • Desempenho: considera a influência do tempo de resposta e transferência para o design, desenvolvimento, instalação e manutenção da aplicação, de acordo com os objetivos estabelecidos pelo usuário. Tabela 9 - Classificação de complexidade de Desempenho Valor Descrição para determinar o nível de influência 0 Nenhum requisito especial de desempenho foi estabelecido pelo usuário. 1 Requisitos de design e desempenho foram estabelecidos e revisados, mas nenhuma ação especial foi necessária. 2 Tempo de resposta ou transferência são críticos durante o horário de pico. Nenhum design especial para uso do processador foi imposto. Os prazos de processamento são o próximo dia útil. 3 Tempo de resposta ou transferência são críticos durante todo o horário de comercial. Nenhum design especial para uso do processador foi imposto. Os prazos de processamento são restritos. 4 Além disso, os requisitos de desempenho do usuário são rigorosos o suficiente para necessitarem análise de desempenho na fase de design. 5 Além disso, ferramentas de análise de desempenho são utilizadas nas fases do design, desenvolvimento, e/ou implementação para atender aos requisitos do usuário. Fonte: IFPUG, 2010 • Configuração Intensamente Utilizada: refere-se à influência das restrições de recursos sobre o desenvolvimento da aplicação. Isso ocorre quando o usuário define uma configuração de equipamento na qual o sistema deve ser intensamente utilizado, o que por sua vez pode gerar restrições de projeto para adequação do sistema. Tabela 10 - Classificação de complexidade da Configuração Intensamente Utilizada Valor Descrição para determinar o nível de influência 0 Nenhuma restrição operacional, implícita ou explícita, foi incluída. 1 Apesar de existirem restrições operacionais, elas não são muito restritivas e não exigem esforço adicional para serem satisfeitas. 2 Existem restrições operacionais típicas. Exigem um esforço específico para serem satisfeitas, como programas de controle. 3 As restrições operacionais impostas limitam parte da aplicação no processador central ou dedicado. 4 As restrições operacionais impostas limitam a aplicação no processador central ou dedicado. 5 Existem ainda limitações específicas da aplicação nos componentes distribuídos. Fonte: IFPUG, 2010 22 www.virtual.ucdb.br | 0800 647 3335 • Volume de Transações: avalia se a taxa de transações do negócio irá influenciar o desenvolvimento do sistema. Caso esse volumeseja muito alto, todo o processo de projeto, desenvolvimento e instalação do sistema será influenciado, pois os usuários podem exigir um determinado tempo de resposta mesmo durante horários de pico. Tabela 11 - Classificação de complexidade do Volume de Transações Valor Descrição para determinar o nível de influência 0 Não é previsto nenhum horário de pico de transações. 1 O volume de transações é baixo e pouco influencia as fases de projeto, desenvolvimento e instalação. 2 O volume de transações é médio e influencia levemente as fases de projeto, desenvolvimento e instalação. 3 O volume de transações é alto e influencia as fases de projeto, desenvolvimento e instalação. 4 O volume de transações é suficientemente alto e requer tarefas de análise de desempenho das fases de projeto, desenvolvimento e/ou instalação. 5 O volume de transações é suficientemente alto e requer tarefas e ferramentas de análise de desempenho das fases de projeto, desenvolvimento e/ou instalação. Fonte: IFPUG, 2010 • Entrada de Dados Online: descreve o nível das transações que informam e recuperam dados no sistema. Essas interações com o usuário são realizadas através de interface online, funções de controle, relatórios e consultas. Tabela 12 - Classificação de complexidade da Entrada de Dados Online Valor Descrição para determinar o nível de influência 0 Todas as transações são realizadas em lote. 1 1% a 7% das transações são interativas. 2 8% a 15% das transações são interativas. 3 16% a 23% das transações são interativas. 4 24% a 30% das transações são interativas. 5 Mais de 30% das transações são interativas. Fonte: IFPUG, 2010 • Eficiência do Usuário Final: avalia o grau com que a usabilidade e os recursos humanos foram considerados no desenvolvimento da aplicação. O projeto para apresentar maior usabilidade deve apresentar: • Apoio à navegação; • Menus; 23 www.virtual.ucdb.br | 0800 647 3335 • Ajuda e documentação; • Movimentação do cursor; • Paginação; • Impressão remota; • Teclas de atalho; • Execução de tarefas em lote com base em transações online; • Combos; • Uso intensivo de indicadores de vídeo; • Documentação impressa das transações; • Interface do mouse; • Janelas pop-up; • Templates; • Suporte a dois idiomas; • Suporte a mais de dois idiomas. Tabela 13 - Classificação de complexidade da Eficiência do Usuário Final Valor Descrição para determinar o nível de influência 0 Nenhum dos itens acima. 1 1 a 3 itens acima. 2 4 a 5 itens acima. 3 6 ou mais itens acima, sem existência de requisitos específicos do usuário em relação à eficiência. 4 6 ou mais itens acima, com existência de requisitos específicos do usuário em relação à eficiência suficientemente fortes para ser necessário o projeto de tarefas que considerem o fator humano. 5 6 ou mais itens acima, com existência de requisitos específicos do usuário em relação à eficiência suficientemente fortes para ser necessário o emprego de ferramentas e processos especiais para garantir que as metas fossem alcançadas. Fonte: IFPUG, 2010 • Atualização Online: refere-se ao nível com que os arquivos lógicos internos são atualizados de maneira online pela aplicação. Tabela 14 - Classificação de complexidade da Atualização Online Valor Descrição para determinar o nível de influência 0 Nenhuma. 1 Há a atualização online de 1 a 3 arquivos de controle, com pequeno volume de 24 www.virtual.ucdb.br | 0800 647 3335 atualizações e fácil recuperação. 2 Há a atualização online de 4 ou mais arquivos de controle, com pequeno volume de atualizações e fácil recuperação. 3 Há a atualização online da maior parte dos arquivos lógicos internos. 4 Além disso, uma proteção contra perda de dados foi projetada e implementada na aplicação. 5 Os processos de recuperação de dados são otimizados para reduzir custos para que necessitem de mínima intervenção humana, pois os volumes de atualizações são elevados. Fonte: IFPUG, 2010 • Processamento Complexo: avalia o grau com que o desenvolvimento do sistema foi influenciado pela lógica de processamento. É analisada a existência dos seguintes componentes: ✓ Controle sensível e/ou processamento específico de segurança; ✓ Processamento lógico extensivo; ✓ Processamento matemático extensivo; ✓ Muito processamento de exceções, gerando transações incompletas que devem ser executadas outra vez; ✓ Processamento complexo para trabalhar com diversas alternativas de entrada e saída. Tabela 15 - Classificação de complexidade do Processamento Complexo Valor Descrição para determinar o nível de influência 0 Nenhum dos itens acima. 1 Qualquer 1 dos itens acima. 2 Quaisquer 2 dos itens acima. 3 Quaisquer 3 dos itens acima. 4 Quaisquer 4 dos itens acima. 5 Todos os 5 itens acima. Fonte: IFPUG, 2010 • Reusabilidade: descreve o grau com que os elementos do sistema e seu código foram planejados, desenvolvidos e implementados com o intuito de serem reutilizados em outras aplicações futuramente. Tabela 16 - Classificação de complexidade de Reusabilidade Valor Descrição para determinar o nível de influência 0 Não existe código reutilizável. 25 www.virtual.ucdb.br | 0800 647 3335 1 É empregado código reutilizável na aplicação. 2 Menos de 10% do código desenvolvido na aplicação foi elaborado para ser reutilizado em outro sistema. 3 10% do código desenvolvido na aplicação foi elaborado para ser reutilizado em outro sistema. 4 A aplicação foi empacotada e/ou documentada para facilitar o reuso, com personalização em nível de código. 5 A aplicação foi empacotada e/ou documentada para facilitar o reuso, com personalização através de parâmetros do usuário. Fonte: IFPUG, 2010 • Facilidade de Instalação: indica se existem requisitos especiais de configuração ou dados de versões anteriores da aplicação que precisam ser convertidos para serem compatíveis com o novo sistema. Tabela 17 - Classificação de complexidade da Facilidade de Instalação Valor Descrição para determinar o nível de influência 0 O usuário não especificou nenhuma consideração ou configuração especial para a instalação. 1 O usuário não especificou nenhuma consideração especial, mas é exigida uma configuração inicial para a instalação. 2 O usuário estabeleceu requisitos de conversão e instalação. Foram fornecidos e testados guias para isso, e a influência da conversão no projeto foi baixa. 3 O usuário estabeleceu requisitos de conversão e instalação. Foram fornecidos e testados guias para isso, e a influência da conversão no projeto foi significativa. 4 Além do item 2, foram fornecidas e testadas ferramentas automatizadas de instalação e conversão. 5 Além do item 3, foram fornecidas e testadas ferramentas automatizadas de instalação e conversão Fonte: IFPUG, 2010 • Facilidade de Operação: avalia a adequação a aspectos operacionais, como processos de backup e recuperação. É uma característica intrínseca da aplicação, que de acordo com seu desenvolvimento pode reduzir a necessidade de intervenção manual do usuário. Tabela 18 - Classificação de complexidade da Facilidade de Operação Valor Descrição para determinar o nível de influência 0 O usuário não estabeleceu nenhum requisito operacional especial, apenas os procedimentos de backup regulares. 1 - 4 Ao menos um dos itens abaixo são aplicáveis ao sistema. Devem ser 26 www.virtual.ucdb.br | 0800 647 3335 selecionados os itens que se aplicam, e cada um vale um ponto (a não ser que haja especificação divergente) • Processos de inicialização, backup e recuperação foram fornecidos, mas a intervenção humana é necessária. • Processos de inicialização, backup e recuperação foram fornecidos, mas a intervenção humana é necessária (vale como dois itens).• A aplicação reduz a necessidade de montagem de fitas e/ou acesso a dados remotos por meio de intervenção humana. • A aplicação reduz a necessidade de manuseio de papéis. 5 A aplicação apenas necessita de intervenção humana para inicialização e encerramento. Todo o restante é realizado de forma automatizada, incluindo a recuperação de erros. Fonte: IFPUG, 2010 • Múltiplos Locais: descreve para qual nível de descentralização a aplicação foi desenvolvida, no que diz respeito a diferentes ambientes de hardware e software. Tabela 19 - Classificação de complexidade de Múltiplos Locais Valor Descrição para determinar o nível de influência 0 O projeto considerou as necessidades de somente um local de instalação. 1 O projeto considerou as necessidades de mais de um local de instalação e a aplicação está desenvolvida apenas para ambientes de hardware e software idênticos. 2 O projeto considerou as necessidades de mais de um local de instalação e a aplicação está desenvolvida para ambientes de hardware e software semelhantes. 3 O projeto considerou as necessidades de mais de um local de instalação e a aplicação está desenvolvida apenas para ambientes de hardware e software diferentes. 4 A aplicação é descrita no item 2, e a documentação e o suporte foram fornecidos e testados para manter a aplicação em múltiplos locais. 5 A aplicação é descrita no item 3, e a documentação e o suporte foram fornecidos e testados para manter a aplicação em múltiplos locais. Fonte: IFPUG, 2010 • Facilidade de Mudança: refere-se à facilidade com que a aplicação pode passar por modificações de lógica ou estruturas de dados. As características abaixo podem ser aplicáveis ao sistema: A: Consulta Flexível ✓ São fornecidas consultas e/ou relatórios flexíveis, possibilitando a manipulação de pedidos simples (equivale a 1 item) 27 www.virtual.ucdb.br | 0800 647 3335 ✓ São fornecidas consultas e/ou relatórios flexíveis, possibilitando a manipulação de pedidos de complexidade média (equivale a 2 itens) ✓ São fornecidas consultas e/ou relatórios flexíveis, possibilitando a manipulação de pedidos complexos (equivale a 3 itens) B: Dados de controle do negócio: ✓ Dados de controle do negócio são armazenados pelo usuário em processos online interativos, mas as alterações sofridas só são disponibilizadas num prazo de um dia útil. (Equivale a 1 item) ✓ Dados de controle do negócio são armazenados pelo usuário em processos online interativos, e as alterações sofridas são disponibilizadas imediatamente. (Equivale a 2 itens) Tabela 20 - Classificação de complexidade da Facilidade de Mudança Valor Descrição para determinar o nível de influência 0 Nenhum dos itens acima. 1 Qualquer 1 dos itens acima. 2 Quaisquer 2 dos itens acima. 3 Quaisquer 3 dos itens acima. 4 Quaisquer 4 dos itens acima. 5 Quaisquer 5 dos itens acima. Fonte: IFPUG, 2010 2.1.4 Calcular o fator de ajuste de complexidade Para Jones (1997), as características gerais do sistema influenciam a complexidade do desenvolvimento do software em no máximo 35% quando analisadas na fase inicial do projeto. Nesse período, a precisão das estimativas é menor, pois pouco se conhece do sistema e ele ainda não está bem definido, podendo sofrer alterações significativas. Considerando-se isso, pode-se calcular o Fator de Ajuste de Valor (FAV) que irá ser utilizado na fase seguinte para ajustar os pontos por função calculados no passo 2 para agregar o impacto das características gerais do sistema. A fórmula para o seu cálculo é a seguinte: Onde é o somatório dos valores atribuídos a cada uma das 14 características gerais do sistema. Logo, como o valor de cada característica pode 28 www.virtual.ucdb.br | 0800 647 3335 variar entre 0 e 5, pode variar entre 0 (nenhum item é aplicável) e 70 (todos os itens são aplicáveis em seu grau máximo). 2.1.5 Computar os pontos por função ajustados Essa quinta fase da métrica de pontos por função permite o cálculo do valor final ajustado, e pode ser considerada a última etapa essencial para o processo. Seu objetivo é associar os resultados dos passos 2 (PF) e 4 (FAV) para obtenção dos pontos por função ajustados (PFA). Para isso, aplica-se a fórmula: O valor encontrado em PFA indica a complexidade do software em desenvolvimento calculada em relação às suas funções, do ponto de vista do usuário final. Esse valor já é suficiente para ser utilizado como estimativa de esforço, prazo e custo de desenvolvimento, bastando ter-se a média de produtividade de pontos por função por desenvolvedor. 2.1.6 Converter para linhas de código (opcional) Ainda que os pontos por função ajustados já forneçam a estimativa de complexidade necessária, em muitas situações é interessante que essa estimativa também seja apresentada como linhas de código (LOC). É possível então realizar a conversão de pontos por função para linhas de código através da seguinte fórmula: Onde o valor de LOC por PFA deve ser consultado na tabela de referência adequada, que associa a linguagem de programação com a estimativa de quantas linhas de código equivalem a um ponto por função. A tabela original é bastante extensa, portanto, nesse material ela foi reproduzida apenas parcialmente, contendo as principais linguagens de programação utilizadas. A tabela pode ser conferida no Anexo 2. 29 www.virtual.ucdb.br | 0800 647 3335 2.2 Métricas orientadas a Casos de Uso: Pontos de Caso de Uso Sabe-se que casos de uso são vistos como uma das formas mais eficazes da equipe de software entender os requisitos a serem implementados em um software em desenvolvimento, além de fornecer uma visão bastante ampla do escopo do software em questão. Dessa forma, um caso de uso necessita conceber um processo de negócio que faça sentido para o usuário, e esse processo deve ser completo, ou seja, deve ser possível determinar o seu começo e seu fim, que deve deixar o sistema em um estado consistente. Além disso, um caso de uso representa um processo interativo, em que os atores informam dados ao sistema e o sistema devolve alguma informação relativa ao dado informado. Visando a vantagem de se empregar caso de uso em um processo de desenvolvimento de software, em 1993 Gustav Karner apresenta uma técnica para estimativa de software, chamada de Pontos de Caso de Uso. Wazlawivk (2013), pondera que o método se baseia na análise da quantidade e complexidade dos atores e casos de uso, o que gera os UUCP, ou pontos de caso de uso não ajustados. Depois, a aplicação e os fatores técnicos e ambientais levam aos UCP, ou pontos de caso de uso (ajustados). Essa técnica é baseada em Análise de Pontos por Função, porém tem a vantagem de demonstrar resultados mais cedo no ciclo de desenvolvimento. 2.2.1 Pontos de Caso de Uso Não Ajustados – UUCP Pontos de caso de uso não ajustados são calculados baseados no valor atribuído à complexidade de atores ( ) e do valor atribuído à complexidade dos casos de uso ( ) que compõem o sistema: As seções i e ii a seguir explicam como determinar e . Caso de uso é um documento que captura as interações que ocorrem entre produtores e consumidores de informação e o sistema em desenvolvimento. (PRESSMAN, 2021) 30 www.virtual.ucdb.br | 0800 647 3335 i. Complexidade de Atores A complexidade de atores ( ) é simples de ser calculada, pois basta somar os pontos atribuídos a todos os atores que compõem o sistema para determinar o seu valor. Para isso, primeiramente deve-se identificar os atores dos casos de uso. Atenção: mesmo que um ator apareça em diferentes casos de uso, ele deve ser contabilizado apenas uma única vez. Para cada ator identificado é atribuída uma pontuação, conforme as seguintes regras daTabela 21: Tabela 21 - Tabela de referência de Complexidade de Atores Pontuação equivalente Atribuindo pontuação Identificação Justificativa 1 ponto de caso de uso Sistemas externos que serão acessados por interface de programação (API). Baixa Complexidade 2 pontos de caso de uso Sistemas externos que interagem com o sistema via protocolo TCP/IP. Média complexidade Atores humanos que interagem com o sistema via linha de códigos. 3 pontos de caso de uso Atores Humanos que interagem no sistema por intermédio de interface gráfica. São considerados complexos Dessa forma, a fórmula para calcular é: No qual é a quantidade de atores identificada e é a pontuação atribuída para cada ator. Atores em Casos de Uso são pessoas ou sistemas externos que interagem com o sistema principal. Usualmente os atores fornecem entradas ao sistema e o sistema após processá-las devolve uma saída, ou ocasiona uma mudança de status no próprio sistema. 31 www.virtual.ucdb.br | 0800 647 3335 ii. Complexidade dos Casos de Uso Assim como no processo para determinar a complexidade de atores, para definir a complexidade dos casos de uso ( ) é necessário contabilizar quantos casos de uso foram propostos para o sistema. Atenção: cada caso de uso deve ser contabilizado apenas uma vez e só deve ser contabilizado se representar o processo completo. Variantes e casos de uso incluídos não devem ser computados. Existem três maneiras distintas de atribuir pontuação aos casos de uso. Apenas uma delas deve ser utilizada para definir o , escolhida conforme exposição e configuração dos casos de uso do projeto: 1. Proposta juntamente com a técnica por Karner em 1993, essa é a primeira maneira conhecida e é baseada no número estimado de transações: Tabela 22 - Tabela de referência de Complexidade dos Casos de Uso – Número de Transações Pontuação equivalente Atribuindo pontuação Identificação Justificativa 5 pontos de caso de uso O caso de uso possui no máximo 3 transações. Casos de uso simples 10 pontos de caso de uso O caso de uso possui de 4 até 7 transações. Casos de uso médios 15 pontos de caso de uso O caso de uso possui mais de 7 transações. Casos de uso complexos 2. A segunda maneira é baseada na quantidade de classes necessárias para contemplar um caso de uso: Tabela 23 - Tabela de referência de Complexidade dos Casos de Uso – Número de Classes Pontuação equivalente Atribuindo pontuação Identificação Justificativa 5 pontos de O caso de uso necessita de Casos de uso Uma transação é quando ocorre uma entrada ou saída de informação no sistema. 32 www.virtual.ucdb.br | 0800 647 3335 caso de uso até 5 classes para ser implementado. simples 10 pontos de caso de uso O caso de uso necessita de 6 até 10 classes para ser implementado. Casos de uso médios 15 pontos de caso de uso O caso de uso necessita de mais de 10 classes para ser implementado. Casos de uso complexos 3. A terceira e última forma de atribuir pontuação para casos de uso é baseado na sua análise de risco: Tabela 24 - Tabela de referência de Complexidade dos Casos de Uso – Análise de Risco Pontuação equivalente Atribuindo pontuação Identificação Justificativa 5 pontos de caso de uso O caso de uso não altera dados e possui cerca de 1 ou 2 transações. Casos de uso de baixo risco 10 pontos de caso de uso O caso de uso é padronizado (tem a lógica de funcionamento já conhecida), tendo um número conhecido de transações. Casos de uso de risco médio, pois embora seja padronizado, regras de negócio devem ser consideradas. 15 pontos de caso de uso O caso de uso tem um número desconhecido de transações, pois ainda não se sabe qual é seu fluxo principal e suas continuações alternativas. Casos de uso de risco alto Dessa maneira, a fórmula para calcular é: No qual é a quantidade de casos de uso identificada e é a pontuação atribuída para cada caso de uso. iii. Fatores Técnicos e Fatores Ambientais – Fatores de ajuste O método de ajuste é bastante semelhante ao adotado pela técnica de Pontos de Função, utilizam-se fatores técnicos (TCF) e fatores ambientais (EF) para 33 www.virtual.ucdb.br | 0800 647 3335 ajustar pontos de casos de uso. Existem 13 fatores técnicos a serem considerados e cada um apresenta um peso específico: Tabela 25 - Fatores técnicos e seus pesos Fator técnico Peso do fator T1. Sistema Distribuído 2 T2. Performance 2 T3. Eficiência de usuário final 1 T4. Complexidade de processamento 1 T5. Projeto visando código reusável 1 T6. Facilidade de instalação 0,5 T7. Facilidade de uso 0,5 T8. Portabilidade 2 T9. Facilidade de mudança 1 T10. Concorrência 1 T11.Segurança 1 T12. Acesso fornecido a terceiros 1 T13. Necessidade de treinamento 1 Fonte: Adaptado de Wazlawick, 2013 Cada fator deve receber uma nota variando de 0 até 5, sendo a nota 0 aplicada quando o fator não apresenta nenhuma importância no projeto e a nota 5 aplicada quando o fator apresenta uma grande importância no projeto. Após atribuir essa nota para cada um dos 13 fatores técnicos apresentados na Tabela 25, ela deve ser multiplicada pelo peso equivalente do fator e então somadas para se construir o valor da variável : Onde varia de 1 até 13. Assim, é possível calcular o , aplicando normalização do com a seguinte fórmula: Sistema distribuído é um conjunto de computadores ligados em rede compartilhando recursos e coordenação de atividades. (COLOURIS et al., 2001) 34 www.virtual.ucdb.br | 0800 647 3335 Em relação aos fatores ambientais (EF), na técnica de caso de uso existem no total 8 fatores que caracterizam a equipe de desenvolvimento envolvida no projeto de software e o ambiente de trabalho que atuam. Assim como nos fatores técnicos cada fator deve receber uma nota de 0 até 5, sendo 0 usado quando a qualidade do fator for ruim no ambiente de trabalho, ou quando ele não está presente, e 5 quando for ótima. Tabela 26 - Fatores ambientais e seus pesos Fator Ambiental Peso do fator E1. Familiaridade com o processo de desenvolvimento 1,5 E2. Experiência com a aplicação 0,5 E3. Experiência com orientação a objetos 1 E4. Capacidade do analista líder 0,5 E5. Motivação 1 E6. Estabilidade de requisitos obtida historicamente 2 E7. Equipe em tempo parcial -1 E8. Dificuldade com a linguagem de programação -1 Fonte: adaptado de Wazlawick, 2013 Depois de atribuir nota para cada um dos 8 fatores ambientais apresentados na Tabela 26, deve-se multiplicar a nota pelo peso equivalente do fator e então somá-las para se construir o valor da variável . Perceba que fatores ambientais (T7 e T8) podem receber valores negativos, pois existem pesos -1. , Em que varia de 1 até 8. Portanto normalizando o é possível calcular o , aplicando a seguinte fórmula: 2.2.2 UCP– Pontos de Caso de Uso Ajustados Após estabelecer o valor de pontos de casos de uso não ajustados ( ) e calcular os fatores de ajuste técnicos ( ) e ambientais ( ) é possível calcular o valor total do sistema em Pontos de Caso de Uso ( ) ajustados, através da fórmula: 35 www.virtual.ucdb.br | 0800 647 3335 i. Esforço (E) Os pontos de caso de uso serão úteis para se calcular a estimativa de esforço, ou seja, o trabalho necessário para o desenvolvimento do projeto. Para transformar o em esforço aplica-se a fórmula: Onde é calculado baseado em projetos anteriores. Para isso, soma-se o tempo total de trabalho do desenvolvedor e o divide pelo número de pontos de caso de uso ( ) estimado. Por exemplo: se o trabalho total em umconjunto de projetos foi de 1000 desenvolvedores-hora e o desses projetos era de 50, então de trabalho por desenvolvedor, ou seja, = 20. Outra forma de determinar foi proposta por Schneider e Winters em 1998: 1. Conta-se a quantidade de fatores técnicos entre T1 e T6 que receberam nota maior que 3; 2. Soma-se o valor obtido à quantidade de fatores ambientais entre E7 e E8 que receberam valor menor que 3. Se o somatório for igual a 2, = 20 horas/UCP; Se o somatório for igual a 3 ou 4, = 28 horas/UCP; Se o somatório for 5 ou mais, = 36 horas/UCP com horas igual a 36 representam que o projeto precisa ser revisto com urgência e a equipe precisa de treinamento para se adequar às tecnologias, aos requisitos, ou até mesmo melhorar os conhecimentos acerca de linguagem de programação, reuso e orientação a objetos. É recomendável dividir o resultado obtido com a fórmula de esforço por 158, que representa a média de horas de trabalho em um mês, obtendo a unidade de medida pessoas-mês. 36 www.virtual.ucdb.br | 0800 647 3335 2.3 Métricas orientadas a Equipe: Planning Poker O Planning Poker é uma técnica de estimativa bastante empregada em projetos ágeis, principalmente em projetos que utilizam o framework do Scrum. A principal diferença dessa técnica para as demais é que toda a equipe de desenvolvimento envolvida na implementação do Sprint deve colocar a sua visão de complexidade para que juntos possam chegar a um consenso de indicador de complexidade para o time. Ou seja, nos demais métodos apresentados nesse material didático, uma pessoa da equipe com um bom conhecimento acerca de cálculos de prazos e esforço estima um prazo para uma determinada atividade de um projeto e repassa para a equipe executar, no Planning Poker a equipe inteira deve chegar a um acordo sobre a atividade. Dessa forma, o modo de decisão do Planning Poker estabelece intensamente o conceito de colaboração e comprometimento de toda a equipe. Grenning em 2002 ponderou que essa é a melhor ferramenta encontrada para estimar tamanho de projetos em metodologias ágeis, pois é uma técnica que utiliza a interação de todos os membros da equipe para determinar o tamanho de um software (COHN, 2005). No Planning Poker a estimativa é realizada simulando um jogo de cartas. Durante a reunião de um Sprint, cada integrante da equipe de desenvolvimento tem um baralho com 13 cartas a sua disposição (Figura 3). Essas cartas trazem números similares à sequência de Fibonacci, que representam um número de complexidade. CTIC-UFPA em 2011 diz que existe um A sequência de Fibonacci foi proposta por um matemático e cada termo (Tn) que a compõe é igual à soma dos dois termos anteriores a ele na sequência, com exceção dos dois primeiros números que são iguais a 1: Scrum é uma metodologia ágil para gestão e planejamento de projetos de software. No Scrum, os projetos são divididos em ciclos (tipicamente mensais) chamados de Sprints. O Sprint representa um ciclo de tempo dentro do qual um conjunto de atividades deve ser executado. (Desenvolvimento Ágil, 2014). Desenvolvimento ágil é um processo de desenvolvimento que divide o software em construção em pequenos pedaços e utiliza ciclos para implementar essa parcela de software, garantindo que ela seja funcional, testada e aprovada. Ou seja, a cada ciclo o software é acrescido de funcionalidades e no último tem-se um software completo pronto para ser entregue ao cliente. 37 www.virtual.ucdb.br | 0800 647 3335 propósito ao utilizar uma sequência não linear na determinação de estimativas. O objetivo de utilizar estes números é que o intervalo entre os valores permite visualizar melhor as diferenças de complexidade entre as funcionalidades. Figura 3 - Cartas do Planning Poker Fonte: Crisp Konsulter, 20166 Em métodos ágeis, as atividades a serem desenvolvidas são baseadas em estórias. Estórias representam a parte do produto a ser implementada, pois contêm uma descrição detalhada do que deve ser considerado para a implementação. Para isso, é necessário envolver diferentes membros da equipe para criá-las, garantindo assim que elas serão o mais abrangente possível, pois cada um pode levantar questões relacionadas a sua atuação dentro do projeto. Essas estórias são planejadas a priori pela equipe sem que ela saiba a extensão propriamente do que irá se implementar. Isso não quer dizer que os membros da equipe não entendem o contexto da estória, pelo contrário, quanto mais compreensão da natureza da estória melhor ela será e mais os membros da equipe vão se ajudar para desenvolver uma boa iteração. Depois de estimar uma estória, é necessário discutir e chegar a um consenso de qualquer questão em aberto referente a ela, para então ter uma estória definida. Após definir as estórias, chega o momento de aplicar o Planning Poker para decidir a complexidade da estória. Para isso, um coordenador eleito descreve uma estória para a equipe e o grupo faz uma contagem até três e então todos devem apresentar uma carta que representa a complexidade da estória apresentada na 6 https://www.crisp.se/bocker-och-produkter/planning-poker 38 www.virtual.ucdb.br | 0800 647 3335 sua opinião. Essa complexidade deve envolver tempo e esforço necessário para aquela estória. É importante que todos mostrem a carta simultaneamente, pois a técnica acredita que o acerto no cálculo de esforço vem da colaboração natural dos membros, sem que nenhum exerça influência sobre o outro. 2.3.1 Entendendo o Baralho Na Figura 3 é apresentado um exemplo de baralho da técnica Planning Poker, os valores representados por cada carta podem ser entendidos dessa forma: • O valor zero (0) representa que na opinião do membro da equipe a estória está finalizada ou é muito simples de resolver e por isso, pode ser finalizada em demanda de minutos. • O símbolo interrogação (?) representa que na opinião do membro da equipe ele não tem conhecimento suficiente para estimar um esforço para a estória em questão. • O símbolo Café representa que na opinião do membro da equipe ele necessita refletir sobre a estória antes de tomar uma decisão e por isso está pedindo uma parada na reunião. • Valor igual a 100 representa que, na opinião do membro da equipe, a estória é muito grande e necessita de mais de uma iteração para ser resolvida. Por isso, sugere que a estória seja subdivida em estórias menores para reduzir sua complexidade. • Valores abaixo de cem (100) podem determinar a complexidade de uma estória (ver regras na Seção 2.3.2), sendo que valores até 20 indicam que o membro da equipe acredita que a complexidade para resolver a estória é de baixa a média. Já o valor 40 representa uma complexidade alta. 2.3.2 O jogo Após todos os membros presentes na reunião colocarem uma carta é feita uma contabilidade dos valores obtidos: • Se todos os valores das cartas convergirem e forem menores do que 100, adota-se esse valor como a complexidade da estória; • Se existem valores que estão divergindo, ou seja, se membros da equipe colocam cartas com valores diferentes para uma mesma 39 www.virtual.ucdb.br | 0800 647 3335 estória, é pedido pelo coordenador que quem colocou o menor e o maior valor justifique a sua escolha, fazendo com que todos os membros da equipe reflitam mais uma vez sobre a estória. Após a exposição de motivos, o coordenador propõe uma nova rodada. o Se dessa vez todos os valores convergirem e forem menores que 100, o valor é adotado como complexidade da estória; o Senão, a complexidade da estória é definida sobre a contabilidade do valor que obteve maior estimativa ▪ Se o valor que obteve maior estimativa foi a interrogação (?), a estória deve ser detalhada novamente. ▪ Haugen (2006), afirmou haver umamelhora na eficiência das estimativas com valores por estórias quando utilizada esta técnica para atribuição da complexidade. Mas observe que o Planning Poker deve ser utilizado por equipes alocadas geograficamente próximas. Além disso, deve-se lembrar que após definida uma complexidade para uma estória, toda a equipe vai trabalhar nela e essa discussão acerca dela pode levar a um membro da equipe que tem familiaridade com as atividades a serem desenvolvidas a influenciar os demais membros a atribuir uma complexidade baixa, o que pode prejudicar a estimativa de esforço acerca daquela estória. 2.3.3 Utilizando Planning Poker para definir esforço Vimos que um Sprint define algumas estórias e a complexidade delas. Mas como estimar tempo e esforço necessário para implementar uma estória baseada na complexidade atribuída? Como o Planning Poker se baseia na união da equipe de desenvolvimento do projeto, o cálculo de tempo e esforço também depende dessa união. A seguinte lógica deve ser aplicada: 1) Dentre todas as estórias discutidas no Sprint, seleciona-se a de menor complexidade atribuída para a equipe trabalhar inicialmente. Observação: Pode-se optar por novas discussões empregando novas rodadas em caso de grandes divergências de opiniões. Mas o ideal é não ultrapassar o total de quatro rodadas. 40 www.virtual.ucdb.br | 0800 647 3335 2) Após a implementação dessa estória é feita uma estimativa de tempo e esforço (desenvolvedores–mês) necessários para resolver a estória com sucesso. 3) Para as demais estórias, é feito um cálculo para estimar esforço e tempo considerando essa primeira estória como referência. Ou seja, a primeira estória que tem a menor complexidade dentre todas do Sprint, servirá de base para a próxima estória a ser trabalhada, que tem a segunda menor complexidade entre todas e assim sucessivamente. O cálculo de esforço e tempo é baseado na relação da complexidade da primeira estória com as demais e assim é possível estimar o esforço e tempo necessário para resolvê-las baseado no tempo (TA) e esforço da primeira estória. Por exemplo, se a primeira estória tinha complexidade igual a 2 e a segunda estória tem complexidade igual a 8, o esforço e tempo despendido para resolver a segunda estória será quatro vezes maior do que os utilizados na primeira estória: Em que representa o esforço da estória que será calculado baseado na primeira estória do Sprint, representa a complexidade atribuída a essa estória com a técnica de Planning Poker, indica o esforço utilizado para resolver a primeira estória e representa a complexidade atribuída para a primeira estória com a técnica de Planning Poker. Tem-se que representa o tempo da estória que será calculado utilizando a primeira estória do Sprint como referência, representa a complexidade atribuída a essa estória com a técnica de Planning Poker, o tempo utilizado para resolver a primeira estória e a complexidade atribuída para a primeira estória com a técnica de Planning Poker. 41 www.virtual.ucdb.br | 0800 647 3335 Exercício 2 1. Considere que você está realizando a estimativa do software a ser desenvolvido através da métrica de Pontos por Função. Até o momento, você já realizou os três primeiros passos da aplicação da métrica, e obteve os seguintes valores: I. N = 51, referente às características gerais do sistema II. PF = 652, referente aos pontos por função identificados Dando prosseguimento à aplicação da métrica, nas próximas etapas você terá que calcular o FAV (Fator de Ajuste de Valor), que será utilizado para ajustar a complexidade dos pontos de função de acordo com as características do sistema e encontrar o PFA (Pontos por Função Ajustados). Aplicando as respectivas fórmulas, quais serão os valores do FAV e do PFA encontrados? a) FAV = 1.16 e PFA = 562.06 b) FAV = 1.6 e PFA = 765.91 c) FAV = 0.61 e PFA = 567.24 d) FAV = 1.6 e PFA = 1043,2 e) FAV = 1.16 e PFA = 756.32 2. Calcule (Pontos de Caso de Uso Ajustados de um projeto em desenvolvimento. Para isso, utilize as seguintes informações: I. O valor de Pontos de Caso de Uso Não Ajustados ( é igual a 100. II. Os fatores técnicos ( tem valor igual a 1. Em relação aos fatores ambientais sabe-se os seguintes dados: Fator Ambiental Peso do fator Nota E1. Familiaridade com o processo de desenvolvimento 1,5 3 E2. Experiência com a aplicação 0,5 2 E3. Experiência com orientação a objetos 1 5 E4. Capacidade do analista líder 0,5 3 E5. Motivação 1 3 E6. Estabilidade de requisitos obtida historicamente 2 1 E7. Equipe em tempo parcial -1 3 E8. Dificuldade com a linguagem de programação -1 2 42 www.virtual.ucdb.br | 0800 647 3335 a) 101 b) 104 c) 110 d) 114 e) 140 3. Utilizando o UCP (Pontos de Caso de Uso Ajustados) calculado no exercício anterior, produza a estimativa de esforço baseada em pontos de caso de uso. Para isso, determine IP baseado na técnica de Schneider e Winters com somatório igual a 4. Observação. Transforme seu resultado de esforço para a unidade pessoas-mês dividindo-o por 158. a) E=18,5 pessoas-mês b) E=20 pessoas-mês c) E=16,5 pessoas-mês d) E=21,5 pessoas-mês e) E=12 pessoas-mês 4. Em projeto desenvolvido pelas diretrizes do desenvolvimento ágil foi determinado por intermédio do Planning Poker que a estória mais simples de um Sprint tinha complexidade igual a 2 e o esforço necessário para realizá-la foi de 5 desenvolvedores-mês. Você deve calcular qual o esforço necessário para que uma estória com complexidade igual a 20 desse mesmo Sprint seja implementada. a) 10 desenvolvedores-mês b) 20 desenvolvedores-mês c) 50 desenvolvedores-mês d) 100 desenvolvedores-mês e) 5 desenvolvedores-mês 43 www.virtual.ucdb.br | 0800 647 3335 UNIDADE 3 – MODELO COCOMO (I E II) O modelo COCOMO (Construtive Cost Model) foi lançado inicialmente em 1981 por Boehm e é considerado um modelo empírico, uma vez que foi criado baseado na experiência com 63 diferentes projetos de software, ao longo de um período de 15 anos (TEIXEIRA; SANCHES, 2000). Com a observação dos projetos, foi possível gerar fórmulas envolvendo tamanho do sistema, fatores de projeto e esforço que embasam o COCOMO. O primeiro COCOMO – 1981 (COCOMO I) considera que os softwares são desenvolvidos baseando-se no modelo de desenvolvimento Cascata (processo sequencial) e utilizam apenas linguagens de programação padronizadas (como por exemplo C, COBOL ou FORTRAN). É dividido em três níveis de complexidade crescente, que evoluem conforme o grau de informação que a equipe desenvolvedora tem do software em desenvolvimento (WAZLAWICK, 2013): 1. Implementação básica: quando a única informação sobre o sistema efetivamente disponível é o número estimado de linhas de código; 2. Implementação intermediária: Quando certos fatores relativos ao produto, suporte computacional, pessoal e processo são conhecidos e podem ser avaliados para o sistema ser produzido. 3. Implementação Avançada: Quando for necessário subdividir o sistema em subsistemas e distribuir as estimativas de esforço por fase e atividade. Além dos níveis, esse modelo considera também o caráter do software em desenvolvimento. Atribuindo um modo orgânico (baixo risco) para projetos que envolvem pouca ou nenhuma interação com dispositivos de hardware e em que a equipe de desenvolvimento já tinha domínio do escopo da aplicação. O modo semidestacado (médio risco) era atribuído para projetos com interações expressivas com hardware, mas que a equipe ainda tivesse um domínio mínimo do escopo da aplicação e por fim, o modo embutido (alto risco) era atribuído para projetos com Modelo Cascata: divide o desenvolvimento do software em 5 etapas (comunicação, planejamento, modelagem, construção e implantação) sequenciais,
Compartilhar