Estimação dos Custos de Software A estimação dos custos de software envolve, na realidade, vários tipos de estimação, nomeadamente a estimação de custos, recursos, agenda, qualidade, fiabilidade, manutenção e melhoria. No fundo, esta actividade envolve a previsão da calendarização, dos recursos e dos custos necessários para a produção e manutenção dos produtos previstos num projecto de software. Os produtos previstos num projecto de software envolvem necessariamente o código, mas também a produção de documentos relacionados com requisitos, planos, especificações, ou manuais de utilizador. De igual modo, é necessário encontrar e resolver os bugs. A produção de documentos é normalmente mais cara do que o desenvolvimento de código. No entanto, a actividade mais dispendiosa do desenvolvimento de software é a identificação e resolução de bugs. De uma forma geral, as empresas de maior sucesso da indústria de software seguem os oito passos que apresentamos a seguir para a estimação dos seus custos de software. 1. Avaliar a Dimensão A avaliação da dimensão tem a ver com a necessidade de prever o esforço necessário para a produção dos principais entregáveis. Alguns dos aspectos mais importantes a ter em conta nesta avaliação são os documentos em papel (especificações, planos, manuais), o código fonte (novo código, código reutilizável), os casos de teste (novos e reutilizáveis) e os potenciais problemas/defeitos (requisitos, design, código, documentos, más resoluções de problemas/defeitos ou problemas/defeitos secundários). 2. Identificar as Actividades a Serem Incluídas Existem métodos de estimação que propõem listas predefinidas de actividades correntes a nível do desenvolvimento de software, incluindo requisitos, análise, design interno e externo, aquisição de código reutilizável, aquisição de pacotes, desenvolvimento de código novo, modificação de código existente, integração, inspecções de código e de design, testes, produção de documentos para o utilizador, etc. Apesar da proposta destas listas, é necessário identificar as actividades e as tarefas que é necessário realizar no âmbito de um dado projecto. Por exemplo, os projectos cliente/servidor de pequena dimensão só utilizam normalmente menos de uma dezena das 25 actividades previstas na lista SPR. As aplicações mainframe utilizam cerca de dezena e meia e os projectos de software que envolvem grandes sistemas precisam de identificar ainda mais actividades (cerca de duas dezenas). Os projectos de software militar são os mais exigentes a este nível, uma vez que envolvem todas as actividades previstas na lista SPR. Seja qual for a complexidade dos projectos de software, é praticamente impossível efectuar estimações realistas (ou com grande exactidão) sem se conhecerem bastante bem as actividades que vão ser realizadas. 3. Estimar os Defeitos Potenciais do Software e os Métodos de Resolução A parte mais dispendiosa (em termos de tempo e de dinheiro) nos projectos de desenvolvimento de software é a identificação dos bugs e a sua resolução. Desta forma, não é possível criar estimativas de custo de software realistas sem prever os potenciais defeitos e sem conhecer a eficácia dos vários tipos de análises, inspecções e fases de teste planeados no âmbito do projecto. Os gestores de projecto deverão assim recorrer a ferramentas de estimação que incluam capacidades de estimação de defeitos e que suportem os vários tipos conhecidos de remoção de defeitos. A utilização deste tipo de ferramentas é necessária porque o esforço total, o tempo e o custo inerentes a uma série completa de análises, inspecções e testes multinível serão muito maiores do que os envolvidos na produção do código fonte. 4. Estimar as Necessidades de Recursos Humanos Cada entregável previsto num projecto de software tem uma abrangência de atribuição característica. Ou seja, a quantidade de trabalho que pode ser atribuída a uma única pessoa. Por exemplo, a um programador poderá ser atribuída, em média, uma carga de trabalho entre as 5000 e as 15000 declarações de código (entre cerca de 50 e 2000 pontos de função). Até aqui parece fácil. No entanto, os grandes sistemas também têm outros tipos de especialistas, nomeadamente administradores de base de dados, especialistas em qualidade, especialistas em escrita técnica, especialistas de testes, etc. Para a estimação dos custos de software é necessário identificar as várias categorias de trabalhadores necessárias à prossecução do projecto, assim como o número de trabalhadores de cada categoria. 5. Ajustar as Previsões com Base nas Capacidades e na Experiência As pessoas envolvidas num projecto de software podem ser desde especialistas de topo (com muitos anos de experiência) até pessoas que estão a participar pela primeira vez num projecto de software real. Depois de terem sido identificadas as categorias técnicas necessárias (passo anterior), será necessário proceder aos ajustamentos necessários. Nesta tarefa, é muito importante ter em conta aspectos como a experiência e as aptidões de cada indivíduo. De uma forma geral, os indivíduos especialistas e mais experientes poderão assumir maior volume de trabalho e conseguirão realizá-lo mais rapidamente do que os recursos menos experientes. Isto significa que os recursos experientes terão uma abrangência de atribuição maior e níveis de produção mais elevados do que os seus congéneres com menos experiência. Outros tipos de ajustes incluem as férias e os feriados, as horas extra que são pagas e as que não são pagas, ou ainda aspectos relacionados com a eventual dispersão geográfica da equipa do projecto. 6. Estimar Recursos e Calendarização As estimações de recursos e de calendarização estão bastante interligadas e são efectuadas frequentemente de forma iterativa. Para uma estimação realista dos recursos é necessário conhecer bastante bem a equipa de software (em termos de número de indivíduos e de níveis de experiências). De igual modo, é imprescindível conhecer a dimensão (volume de trabalho necessário) dos entregáveis que é suposto produzir ao longo do projecto. Para a estimação da agenda de um projecto de desenvolvimento de software é necessário conhecer bem as actividades que irão ser realizadas, a dimensão dos vários resultados previstos, a sobreposição de actividades com dependências mútuas, ou o número de indivíduos e os níveis de experiência da equipa de software. 7. Estimar os Custos A estimação dos custos de um projecto de software é o último passo do trabalho de estimação. Os custos dos projectos desta natureza variam normalmente em função de vários factores. Por exemplo: • • • • O salário médio dos trabalhadores varia conforme as empresas, região ou indústria; Os custos operacionais aplicados aos salários de software variam ainda mais do que a compensação básica; Nos projectos de longo prazo, a inflação tem que ser tida em conta; Nos projectos internacionais, é necessário considerar as taxas de conversão entre unidades monetárias diferentes. Além das variações referidas atrás (entre outras), existem alguns custos especiais em que os projectos de software podem incorrer e que será necessário considerar de forma independente. Como exemplos desses custos, podemos referir: • • • • • A aquisição de licenças de software necessárias à prossecução do projecto; Os custos de capital para novo equipamento; Os custos relacionados com novos membros da equipa (mudanças e outras despesas de manutenção); Os custos de viagens e outros (dependendo dos projectos); Os custos relacionados com fornecedores contratados e subcontratados. 8. Manter e Melhorar a Estimação Os projectos de software podem continuar a ser utilizados e modificados ao longo do tempo. Desta forma, a manutenção e o melhoramento das estimações é essencial. Inclusivamente, esta actividade é mais complexa do que a estimação de custos para novos projectos. Uma forma útil de lidar com essa complexidade é recorrer a ferramentas de estimação que suportem o melhoramento e manutenção das estimativas para um mínimo de cinco anos e um máximo de 20 anos após a implementação inicial. A estimação dos custos de software e o planeamento de software são duas actividades relacionadas. Consequentemente, tem-se assistido a aquisições e fusões entre fornecedores de ferramentas de planeamento e fornecedores de ferramentas de estimação. Baseado no artigo “Software Project Management in the Twenty-First Century”, de Capers Jones, Chief Scientist na Artemis Management Systems. Tel: (+351) 239 497 230 / 2 • Fax: (+351) 239 497 231 E-mail: [email protected] • Internet: www.engenharia-software.com