Bruno Hott COCOMO II
COCOMO II COCOMO II foi construído em cima do COCOMO '81 para levar em consideração: Novos processos de desenvolvimento (ex. espiral) Aumentar a flexibilidade em desenvolvimento de software (ex. reuso, geração de código automático) Necessidade de tomada de decisão com informações incompletas Novos dados de projetos (161 projects vs 61) Bruno Hott 2
Modelos COCOMO II incorpora um conjunto de submodelos que produzem estimativas ainda mais detalhadas de software. Os submodelos do COCOMO II são: Application Composition Model Para prototipação Early Design Model Usado quando os requisitos estão disponíveis mas a arquitetura ainda não começou. Post-architecture model Usando uma vez que a arquitetura do sistema foi concebida e mais informações acerca do sistema está disponível. Mais do que isso: Reuse model Usado para calcular o esforço da integração de componentes reusáveis. Bruno Hott 3
Equações n MM =2.94 (SIZE) E i=1 5 E=0.91+0.01 j=1 TDEV =3.67 (MM ) F SF j 5 F=0.28+0.2 0.01 SF j j=1 F=0.28+0.2 (E 0.91) EM i Todas as contantes (precisam) ser ajustadas com valores da organização. A diferença entre ED e PA é o número de parâmetros. O expoente depende de fatores de ajuste (ao invés de ser somente uma constante como no COCOMO '81 Bruno Hott 4
Exemplo 1 Como exemplo, vamos estimar quanto esforço e tempo de desenvolvimento um projeto médio com 100 KSLOC consumirá. Para um projeto médio, todos os multiplicadores de esforço são iguais a 1.0. E será definido como 1.15 para refletir um projeto grande qualquer. Bruno Hott 5
Exemplo 1 Como exemplo, vamos estimar quanto esforço e tempo de desenvolvimento um projeto médio com 100 KSLOC consumirá. Para um projeto médio, todos os multiplicadores de esforço são iguais a 1.0. E será definido como 1.15 para refletir um projeto grande qualquer. MM = 2.94 * (100) 1.15 = 585.61 pessoa-mes TDEV = 3.67 * (586.6) (0.28+0.2*(1.15-0.91)) TDEV = 3.67 * (586.6) 0.328 = 29.7 meses Equipe = 586.6 / 29.7 = 19.75 ~ 20 pessoas. Bruno Hott 6
Relacionando FPs à SLOC Linguagem SLOC / FP Linguagem SLOC / FP Access 38 Jovial 107 Ada 83 71 Lisp 64 Ada 95 49 Machine Code 640 Al Shell 49 Modula 2 80 APL 32 Pascal 91 Assembly - Basic 320 PERL 27 Assembly - Macro 213 PowerBuilder 16 Basic - ANSI 64 Prolog 64 Basic - Compiled 91 Query - Default 13 Basic - Visual 32 Report Generator 80 C 128 Second Generation Language 107 C++ 55 Simulation - Default 46 Cobol (ANSI 85) 91 Spreadsheet 6 Database - Default 40 Third Generation Language 80 Fifth Generation Language 4 Unix Shell Scripts 107 First Generation Language 320 USR_1 1 Forth 64 USR_2 1 Fortran 77 107 USR_3 1 Fortran 95 71 USR_4 1 Fourth Generation Language 20 USR_5 1 High Level Language 64 Visual Basic 5.0 29 Bruno Hott 7 HTML 3.0 15 Visual C++ 34 Java 53
Scale Factors O expoente E é calculado a partir de cinco fatores de escala (SF) que representam as economias relativas (ou dispêndio) de escala encontradas para projetos de diferentes tamanhos de software. Se E < 1.0, então o projeto apresenta economias de escala. Algumas economias de projeto podem ser alcançadas via ferramentas específicas do projeto (ex. simulações, testbeds). Se E = 1.0 a economia está em seu ponto de equilíbrio. Este modelo linear é comumente utilizado para estimar custos de pequenos projetos. Se E > 1.0, o projeto apresenta dispêndios de escala. O que ocorre geralmente por causa de dois fatores principais: Aumento do overhead de comunicação. Crescimento do overhead de integração. Bruno Hott 8
Exemplo 2 Os fatores de escala com classificação Extra High são classificados com o peso 0. Então, em um projeto com 100 KSLOC com Extra High para todos os fatores de escala terá sum(sf j ) = 0 Por outro lado, se um projeto possui todos os fatores de escala classificados como Very Low, teremos sum(sf j ) = 31.6, Bruno Hott 9
Exemplo 2 Os fatores de escala com classificação Extra High são classificados com o peso 0. Então, em um projeto com 100 KSLOC com Extra High para todos os fatores de escala terá sum(sf j ) = 0 E = 0.91 + 0.1 * 0.0 = 0.91 MM = 2.94 * (100) 0.91 = 194 p/m. Por outro lado, se um projeto possui todos os fatores de escala classificados como Very Low, teremos sum(sf j ) = 31.6, E = 0.91 + 0.1 * 31.6 = 1.226 MM = 2.94 * (100) 1.226 = 832 p/m. Bruno Hott 10
Scale Factors: comportamento exponencial Bruno Hott 11
Scale Factors Precedentedness: quão novo o projeto é para a organização Flexibility: flexibilidade de desenvolvimento (ex. rigidez dos requerimentos) Design/Risk: profundidade do projeto e resolução de riscos Team Cohesion: coesão do grupo Process Maturity: maturidade que vem do questionário CMMI Scale Factors Very Low Low Nominal High Very High Extra High Precedentedness PREC 6.20 4.96 3.72 2.48 1.24 0.00 Flexibility FLEX 5.07 4.05 3.04 2.03 1.01 0.00 Design/Risk RESL 7.07 5.65 4.24 2.83 1.41 0.00 Team Cohesion TEAM 5.48 4.38 3.29 2.19 1.10 0.00 Process Maturity (CMMI) PMAT 7.80 6.24 4.68 3.12 1.56 0.00 Bruno Hott 12
Multiplicadores de Esforço De 7 (Early Design) ou 17 (Post Architecture) de acordo com o nível de detalhes necessário Effort Adjustment Factors Early Design cost drivers Post-Architecture cost drivers Product reliability and complexity RCPX RELY, DATA, CPLX, DOCU Required reuse RUSE RUSE Platform difficulty PDIF TIME, STOR, PVOL Personnel capability PERS ACAP, PCAP, PCON Personnel experience PREX AEXP, PEXP, LTEX Facilities FCIL TOOL, SITE Required Development Schedule SCED SCED Bruno Hott 13
Multiplicadores de Esforço: Post-Architecture Effort Adjustment Factors - PA Very Low Low Nominal High Very High Extra High Product Factors Required Software Reliability RELY 0.82 0.92 1.00 1.10 1.26 Data Base Size DATA 0.90 1.00 1.14 1.28 Product Complexity CPLX 0.73 0.87 1.00 1.17 1.34 1.74 Developed for Reusability RUSE 0.95 1.00 1.07 1.15 1.24 Documentation Match to Life-Cicle Needs DOCU 0.81 0.91 1.00 1.11 1.23 Platform Factors Execution Time Constraint TIME 1.00 1.11 1.29 1.63 Main Storage Contraint STOR 1.00 1.05 1.17 1.46 Platform Volatility PVOL 0.87 1.00 1.15 1.30 Personnel Factors Analyst Capability ACAP 1.42 1.19 1.00 0.85 0.71 Programmer Capability PCAP 1.34 1.15 1.00 0.88 0.76 Personnel Continuity PCON 1.29 1.12 1.00 0.90 0.81 Applicatins Experience APEX 1.22 1.10 1.00 0.88 0.81 Platform Experience PLEX 1.19 1.09 1.00 0.91 0.85 Language and Toll Experience LTEX 1.20 1.09 1.00 0.91 0.84 Project Factors Use of Software Tools TOOL 1.17 1.09 1.00 0.90 0.78 Multisite Development SITE 1.22 1.09 1.00 0.93 0.86 0.80 Bruno Hott 14 Required Development Schedule SCED 1.43 1.14 1.00
Multiplicadores de Esforço: Early Design Effort Adjustment Factors - ED Extra Low Very Low Low Nominal High Very High Extra High ACAP, PCAP, PCON 3, 4 5, 6 7, 8 9 10, 11 12, 13 14, 15 Personnel Capability (PERS) 2.12 1.62 1.26 1.00 0.83 0.63 0.50 RELY, DATA, CPLX, DOCU 5, 6 7, 8 9-11 12 13-15 16-18 19-21 Product Reliability and Complexity (RCPX) 0.49 0.60 0.83 1.00 1.33 1.91 2.72 TIME, STOR, PVOL 8 9 10-12 13-15 16, 17 Platform Difficulty (PDIF) 0.87 1.00 1.29 1.81 2.61 APEX, PLEX, LTEX 3, 4 5, 6 7, 8 9 10, 11 12, 13 14, 15 Personnel Experience (PREX) 1.59 1.33 1.22 1.00 0.87 0.74 0.62 TOOL, SITE 2 3 4, 5 6 7, 8 9, 10 11 Facilities (FCIL) 1.43 1.30 1.10 1.00 0.87 0.73 0.62 Developed for Reusability (RUSE) 0.95 1.00 1.07 1.15 1.24 Required Development Schedule (SCED) 1.43 1.14 1.00 Bruno Hott 15
Exemplo 3 Projeto A é um software com 32,000 DSI. Está numa área de missão crítica (RELY = 1.26, TIME = 1.29, CPLX = 1.34). Por outro lado, o time de programadores possuem experiência com a linguagem de programação (LTEX = 0.91) e alta capacidade de programação (PCAP = 0.88). Além da equipe ser altamente coesa (TEAM = 1.10). Pode-se estimar: Bruno Hott 16
Exemplo 3 Projeto A é um software com 32,000 DSI. Está numa área de missão crítica (RELY = 1.26, TIME = 1.29, CPLX = 1.34). Por outro lado, o time de programadores possuem experiência com a linguagem de programação (LTEX = 0.91) e alta capacidade de programação (PCAP = 0.88). Além da equipe ser altamente coesa (TEAM = 1.10). Pode-se estimar: E = 0.91 + 0.01 * sum(sf) = 1.08 Esforço: 2.94 * (32) 1.08 * prod(em) MM = 2.94 * 42.2 * 1.74 = 216 p/m F = 0.28 + 0.2 * (1.08 0.91) = 0.314 Prazo: 3.67 * (216) 0.314 = 19.8 ~20 meses Número médio de pessoas: 216 / 20 = 10.8 ~11 pessoas Bruno Hott 17