Fatores que Afetam a Produtividade em Projetos de Software: Uma Visão Geral José Adson Oliveira G. da Cunha Hermano Perrelli de Moura {jaogc, hermano}@cin.ufpe.br Março/2007 Roteiro Motivação Objetivo Fatores que Afetam a Produtividade Conclusão e Trabalhos Futuros Referências Motivação Evolução do Software: Mais complexidade; Necessidade de entrega de produtos de qualidade o mais rápido possível; Produtividade como fator crítico: Quantidade de Software Produzido Despesa ou trabalho para produzi-lo _ Software produzido: Código fonte ? Código fonte + documentação associada ? Valor utilitário ? Motivação Maior parte dos estudos se baseiam na perspectiva quantitativa da produção; Medição do tamanho do software: E o esforço: Linhas de código; Software Science; Pontos de Função; Extensões de Pontos de Função; Object Points. Será medido em horas ou meses ? Caso o cliente participe ativamente, isso contará para o esforço total alocado ? Quais fases do ciclo de desenvolvimento estão sendo consideradas ? Falta de padronização na medição da produtividade em projetos de software Motivação Os custos do software são efetivamente opostos aos fatores que regem a produtividade [Boehm 1981]; Existência de vários modelos de estimativa de custo: Algorítmicos (COCOMO, Aron, Boeing, Wolverton, Price-S, ...) e Não-Algorítmicos (Analogy Costing, Expert Judgment, Parkinson, ...); Algorítimicos podem ser empíricos ou analíticos. Motivação De acordo com [Bailey et al. 1981], [Mohanty 1981] e [Kemerer 1987], os modelos de estimativa devem ser específicos para cada organização; Segundo os autores, nenhum modelo de estimativa de custo é seguramente confiável; Em parte, isso se deve a não consideração de fatores influenciadores no custo e conseqüentemente na produtividade. Motivação Dos modelos de estimativa de custo, o COCOMO II é o que mais leva em consideração fatores influenciadores (15); Necessidade de um levantamento sobre os fatores que afetam a produtividade em projetos de software; Objetivo Obter uma visão geral dos fatores que afetam a produtividade em projetos de software, classificando-os de acordo com 5 grupos: Processo; Tecnologia; Pessoas; Cultura Organizacional; Produto. Fatores que Afetam a Produtividade Fatores relacionados com o processo Uso efetivo do processo: [McConnell 1998] Fatores relacionados com o processo Uso de práticas de inspeção: Medição de qualidade: Evita o retrabalho; Segundo [Gilb 1993], tal prática pode reduzir o cronograma de 10 a 30%. De acordo com [DeMarco 1999], a auto-estima dos desenvolvedores está ligada à qualidade do trabalho e não à quantidade. Estimativa de custo e esforço: Segundo [Jones 1999], tal prática pode aumentar a produtividade em até 17%. Fatores relacionados com o processo Participação do cliente: Evita o esforço gasto com requisitos não desejados pelo cliente; Segundo [Jones 1999], pode prover um aumento de 18% na produtividade. Reuso: De acordo com [Boehm 1987], apresenta um impacto de 47% na produtividade; Provê um aumento de até 350% na produtividade, segundo [Jones 1999]. Fatores relacionados com a tecnologia Parque Computacional: Importância do curto tempo de resposta na produtividade [Thadhani 1984], [Lambert 1984]; Ferramentas CASE, de gerenciamento e de estimativa da qualidade: Segundo [Jones 1999], podem aumentar a produtividade em torno de 30%. De acordo com [Bruckhaus et al. 1996], a eficiência das ferramentas dependem do tamanho do projeto e do processo de desenvolvimento. Fatores relacionados com as pessoas Tamanho da equipe: [McConnell 1997] Fatores relacionados com as pessoas Experiência da equipe de desenvolvimento: Experiência da gerência: [Scacchi 1984] afirma que quando projetos são mal gerenciados ou organizados, a produtividade é substancialmente baixa. Existência de especialistas: Apesar de que [DeMarco 1999] afirma que a experiência da equipe não afeta a produtividade, [Jones 1999] indica que a experiência provê uma melhoria de 55%. De acordo com [DeMarco 1999], é importante a existência de gurus. Turnover Alta rotatividade das pessoas provoca uma queda na produtividade dos projetos. Fatores relacionados com a cultura organizacional Estrutura do ambiente de trabalho: Necessidade de ambientes silenciosos, mais privados e melhor protegidos da interrupção. De acordo com [DeMarco], as pessoas trabalham sozinhas em 30% do tempo. No restante, são gerados de barulho. Adequação do ambiente para permitir o estado de flow, envolvimento profundo no trabalho. Segundo [Jones 1999], ambientes mal estruturados podem prejudicar a produtividade em 27%. Fatores relacionados com a cultura organizacional Separação das equipes: Moral das pessoas envolvidas: Equipes estarão em sintonia quanto a estado de flow, de modo que deve-se evitar a separação de seus membros; Pode haver um prejuízo de até 24% na produtividade, segundo [Jones 1999] Evitar o gerenciamento defensivo; Evitar o paperwork; Prover o surgimento de jelled teams [DeMarco 1999]; Estrutura hierárquica: Aumento de 5% na produtividade, segundo [Jones 1999]. Fatores relacionados com a cultura organizacional Uso de horas extras não pagas: [DeMarco 1999] afirma que horas extras são uma ficção, não sendo uma maneira de melhorar a produtividade; Apesar disso, [Jones 1999] afirma que o uso de tal prática pode prover um aumento de 15% na produtividade. Pressão no cronograma: Excesso de pressão pode diminuir a qualidade do produto e assim a satisfação dos membros da equipe. Pode diminuir a produtividade em 30% [Jones 1999]. Fatores relacionados com a cultura organizacional Medição da produtividade: Treinamentos anuais: Apesar de não haver uma padronização, a medição pode proporcionar um aumento na produtividade em 10%; Segundo [Gilb 1977], qualquer coisa que se queira quantificar pode ser medida de tal forma que seja melhor do que não medir nada. Hawthorn Effect: As pessoas executam melhor quando estão fazendo algo novo. Aumento de até 8% na produtividade [Jones 1999] Uso de recompensas: Apesar de não sugerido por [DeMarco 1999], [Clincy 2003] sugere o uso de recompensas, financeiramente ou não. Fatores relacionados com o produto Tamanho: [McConnell 1997] Fatores relacionados com o produto Tamanho: Tamanho do Projeto (Em pontos de função) 10 100 1.000 10.000 100.000 13,0 10,0 4,0 2,6 1,7 [McConnell 1997] Características: Pontos de Função por Mês Adequação do produto às características especificadas na ISO\IEC 9126. Complexidade: A alta complexidade pode diminuir a produtividade em 35% [Jones 1999]. Fatores relacionados com o produto Volatilidade dos requisitos: Dois dos três primeiros fatores responsáveis pelo atraso nos cronogramas são: especificação incompleta dos requisitos e mudança constante dos mesmos [CHAOS Report 1994]; Pode diminuir a produtividade em até 77%. Conclusões e Trabalhos Futuros O presente trabalho teve como objetivo estabelecer uma classificação geral dos fatores que afetam a produtividade em projetos de software. Através de estudos, concluiu-se que é inviável propor um modelo de produtividade capaz de atender a todos os tipos de projetos. Uma possível solução é adequar o modelo ao projeto. Como ?! De acordo com [Drucker 1993], “gerir um negócio é balancear uma variedade de necessidades e objetivos”. Baseado nisso, a Engenharia de Apoio a Decisão [Thomaz 2005] provê abordagens e metodologias para possibilitar melhores decisões diante dos mais variados problemas enfrentados nas mais variadas áreas. Uma delas é metodologia multicritério [Bouyssou, 1990] Conclusões e Trabalhos Futuros Diante disso, pretende-se propor um modelo multicritério de apoio à tomada de decisão no gerenciamento de projetos baseado nos fatores que afetam a produtividade. Referências Albrecht, A. J. and Gaffney, J. E. (1983) Software Function, Source Lines of codes, and Development Effort Prediction: A Software Science Validation. IEEE Trans Software Eng. SE-9, pp.639-648. Bailey, J. and Basili, V. (1981) A Meta-Model for Software Development Resource Expenditures. In: Proc. 5th. Intern. Conf. Soft. Engr., IEEE Computer Society, pp 107-116. Basili, V. et al. (1995) SEL’s Software Process Improvement Program. IEEE Software, November 1995, pp. 887 Behrens, C. A. (1983) Measuring Software Productivity of Computer System Development Activities with Point Functions. IEEE Trans. Soft. Engr. SE-9(6), pp. 648-652. Boehm, B. (1981) Software Engineering Economics. Prentice-Hall, Englewood Cliffs, NJ. Boehm, B. (1987) Improving Software Productivity. IEEE Computer, September, pp. 43-57. Boehm, B. and Papaccio, P. N. (1988) Understanding and Controlling Software Costs. IEEE Transactions on Software Engineering, v. 14, no. 10, October, pp. 1462-1477. Boehm, B. W. et al. (1996) The COCOMO 2.0 Software Cost Estimation Model. American Programmer, July, pp.2-17. Boehm, B. W., Gray, T. E. and Seewaldt, T. (1984) Prototyping Versus Specifying: A Multiproject Experiment. IEEE Transactions on Software Engineering, May. Bouyssou, D. (1990) Building Criteria: A Prerequisite for MCDA”. In: C. A. Bana e Costa (Ed.), Readings in Multiple Criteria Decision Aid, Springer-Verlag, Berlin (pp. 58–80). Brooks, F. (1995) Mythical Man-Month, Anniversary Edition. Addison-Wesley. Bruckhaus, T. (1997) A Quantitative Approach for Analyzing the Impact of Tools on Software Productiviy. Doctoral Dissertation, McGill Univ , Montreal. Bruckhaus, T., Madhavji, N. H., Janssen, I. and Henshaw, J. (1996) The Impact of Tools on Software Productivity. IEEE Softw. 13, 5, pp. 29-38. Chiang, R. and Mookerjee, S. (2004) Improving Software Team Productivity. Communications of the ACM. Volume 47 , Issue 5. Pages: 89 – 93. Clincy, V. A. (2003) Software Development Productivity and Cycle Time Reduction. Journal of Computing Sciences in Colleges. Volume 19, Issue 2. Pages: 278-287. COSMIC-FFP Measurement Manual Version 2.1 (2001) Software Eng. Management Research Laboratory, Univ. of Quebec, Montreal, www.lrgl.uqam.ca/cosmic-ffp . Crosby, P. B. (1980) Quality Is Free. Referências DeGrace, P. and Stahl, L. (1990) Wicked Problems, Righteous Solutions: A Catalog of Modern Software Engineering Paradigms, Yourdon Press. DeMarco, T. (1999) Peopleware: Productive Projects and Teams, 2nd Ed. Dorset House Publishing. Drucker, P. F. (1993) Management: Tasks, Responsibilities, Practices, Harper & Row Publishers, New York, NY. Fenton, N. E. and Pfleeger, S. L. (1997) Software Metrics: A Rigorous and Practical Approach, PWS Publishing Company. Freedman, D. P. and Weinberg, G. M. (1990) Handbook of Walkthroughs, Inspections and Technical Reviews, Third Edition, Dorset House. Function Point Counting Practices Manual Release 4.0 (1994) Int’l Function Point Users Group, Westerville, Ohio. Gilb, T. (1997) Software Metrics. Gilb, T. and Graham, D. (1993) Software Inspection. Wokingham, England, Addison-Wesley. Halstead, M. H. (1977) Elements of Software Science, Elsevier, New York. Herbsleb, J. et al. (1994) Benefits of CMM Based Software Process Improvement: Initial Results. Pittsburgh: Software Engineering Institute, Document CMU/SEI-94-TR-13, August. ISO/IEC 9126 (2001) Information Technology – Product Quality – Part1: Quality Model. In: International Standard ISO/IEC 9126, International Standard Organization, Junho. Jiang, Z. and Comstock, C. (2007) The Factors Significant to Software Development Productivity. In: Transactions On Engineering, Computing And Technology. Volume 19. Jones, C. (1977) Program Quality and Programmer Productivity. IBM Technical Report TR 02.764, January. Jones, C. (1986) Programming Productivity, McGraw-Hill, New York. Referências Jones, C. (1991) Applied Software Measurement: Assuring Productivity and Quality. New York: McGraw-Hill. Jones, C. (1994) Assessment and Control of Software Risks. Englewood Cliffs, N.J. Yourdon Press. Jones, C. (1996) Applied Software Measurement: Assuring Productivity and Quality. 2 ed. McGraw-Hill. Jones, C. (1999) Software Assesments, Benchmarks and Best Practices. Addison Wesley. Jones, T. C. (1978) Measuring Programming Quality and Productivity. IBM System J. 17, pp 39-63. Kemerer, C. F. (1987) An Empirical Validation of Software Cost Estimation Models. Communications ACM, 30(5), pp 416429. Kitson, D. H. and Masters, S. (1993) An Analysis of SEI Software Process Assessment Results, 1987-1991. In: Proceedings of the Fifteenth International Conference on Software Engineering (Washington, DC: IEEE Computer Society Press), pp. 6877. Lambert, G.N. (1984) A Comparative Study of System Response Time on Programmer Development Productivity, IBM Systems J. 23(1), pp. 36-43. Laturi-System Product Manual Version 2.0 (1996) Information Technology Development Center, Helsinki, Finland. Lim, W.C. (1994) Effects of reuse on quality, productivity, and economics. Hewlett-Packard Co. IEEE Software. Maxwell, K. D. and Forselius, P. (2000) Benchmarking Software Development Productivity. IEEE Software. Maya, M. et al. (2001) Measuring the Functional Size of Real-Time Software. Proc. 1998 European Software Control and Metrics Conf., Shaker Publishing BV, Maastricht, The Netherlands, pp. 191–199. McConnell, S. (1996) Software Quality at Top Speed. Software Development, August. McConnell, S. (1998) The Power of Process. IEEE Computer, May. Mills, H. (1983) Software Productivity. Little, Brown & Co. Mohanty, S. N. (1981) Software Cost Estimation: Present and Future. Software-Practice and Experience 11, pp 103-121. Nelson, R. (1966) Management HandBook for the Estimation of Computer Programming Costs, AD-14 A648750, Systems Development Corp. Park, R. E. (1988) PRICE S: The calculation within and why. In: Proceedings of ISPA Tenth Annual Conference, Brighton, England. Parkinson, G. N. (1957) Parkinson's Law and Other Studies in Administration. Houghton-Miffin, Boston. Referências Pietrasanta, A. M. (1991) A Strategy for Software Process Improvement. In: Ninth Annual Pacific Northwest Software Quality Conference, October 7-8, Oregon Convention Center, Portland. Putnam, L. H. (1978) A general empirical solution to the macro software sizing and estimating problem. IEEE Trans. Soft. Eng., pp. 345-361. Rehesaar, H. (2001) Software Size: The Past and the Future. Proc. 1998 European Software Control and Metrics Conf., Shaker Publishing BV, Maastricht, The Netherlands, pp. 200–208. Saiedian, H. and Hamilton, S. (1995) Case Studies of Hughes and Raytheon’s CMM Efforts. IEEE Computer, January, pp. 20-21. Santana, E. A. (2002) Contrato satisfatório multidimensional e a teoria do incentivo. Revista Brasileira de Economia, 56, 4 (pp. 661–694). Scacchi, W. (1984) Managing Software Engineering Projects: A social Analysis. IEEE Trans. Soft. Engr.,SE-10(1), pp. 49-59. Scacchi, W. (1995) Understanding Software Productivity. Appears in Advances in Software Engineering and Knowledge Engineering, D. Hurley (ed.), Volume 4, pp. 37-70. Shepperd, M. and Cartwright, M. (2001) Predicting with Sparse Data. In: Proc. 7th Int’l Software Metrics Symposium, IEEE CS Press, Los Alamitos, Calif., pp. 28–39. Shepperd, M. and Schofield, C. (1997) Estimating Software Project Effort Using Analogy. IEEE Trans. Soft. Eng. SE-23:12, pp. 736-743. Shepperd, M. and Schofield, C. (1997) Estimating software project effort using analogy. IEEE Trans. Soft. Eng. SE-23:12, pp. 736-743. Sidler, R. (2002) Software Productivity. Simmons, D. B. (2001) Software Organization Productivity. St-Pierre, D., Maya, M., Abran, A., Desharnais, J. and Bourque, P. (1997) Full Function Points: Counting Practice Manual, Technical Report 1997-04, University of Quebec at Montreal. Tausworthe, R.(1981) Deep Space Network Software Cost Estimation Model. Jet Propulsion Laboratory Publication 81-7. Taylor, B. (2005) Organizational Culture is Important in Software Productivity. http://www.workinginunison.com/papers/cultureandproductivity.pdf. Thadhani, A. J. (1984) Factors Affecting Programmer Productivity During Application Development. IBM Systems J. 23(1), pp. 19-35. Thomaz, J. P. (2005) O Apoio À Tomada De Decisão Na Avaliação Do Desempenho De Pessoas: Contributos Para O Processo De Decisão Militar Em Tempo De Paz. Tese de Doutorado. Universidade Técnica de Lisboa. Instituto Superior Técnico. Referências Vosburgh, J., Curtis, B., Wolverton, R., Albert, B., Malec, H., Hoben, S., and Liu, Y. (1984) Productivity Factors and Programming Environments. International Conference on Software Engineering. In: Proceedings of the 7th International Conference on Software Engineering. Orlando, Florida, United States. Pages: 143 – 152. White, K. S. (1999) Software Engineering Management For Productivity And Quality. In: International Conference on Accelerator and Large Experimental Physics Control Systems, Trieste, Italy. Yin, R. K. (1994) Applied Social Research Methods Series: Case Study. Sage Publications, London. Fatores que Afetam a Produtividade em Projetos de Software: Uma Visão Geral José Adson Oliveira G. da Cunha Hermano Perrelli de Moura {jaogc, hermano}@cin.ufpe.br Março/2007