chap02 软件项目管理
1.代码行度量与功能点度量的比较
1.规模度量
是一种直接度量方法。
代码行数 LOC或KLOC
生产率
P1=L/E
其中 L 软件项目代码行数
E 软件项目工作量(人月 PM)
P1 软件项目生产率(LOC/PM)
代码出错率
EQR1=Ne/L
其中 Ne 软件项目的代码错误数
EQR1 每千行代码的错误数
每行代码平均成本C1=S/L
其中 S 软件项目总开销(元/美元)
C1 软件项目每行代码的平均成本
文档与代码比
D1=Pd/L
其中 Pd 软件项目文档页数
D1 每千行代码的平均文档数
用软件代码行数估算软件规模简单易行。
缺点
代码行数的估算依赖于程序设计语言的功能和表达能力;
采用代码行估算方法会对设计精巧的软件项目产生不利的影响;
在软件项目开发前或开发初期估算它的代码行数十分困难;
代码行估算只适用于过程式程序设计语言,对非过程式的程序设计语言不太适用等等。
2.面向功能的度量
涉及多因素的间接度量方法,在欧共体使用较多。
FP=CT*[0.65+0.01*∑Fi] (2-5)
其中:CT按表2.3计算
Fi 是复杂性调节值
Fi 取值 0,1,...,5
当 Fi = 0 时,表示 Fi 不起作用
Fi = 5 时,表示 Fi 作用最大
表2.3 功能点度量
测量参数 | 值 | 权值 | ||
用户输入数 | □ | *4 | = | □ |
用户输出数 | □ | *5 | = | □ |
用户查询数 | □ | *4 | = | □ |
文件数 | □ | *7 | = | □ |
外部界面数 | □ | *7 | = | □ |
CT | = | □ |
表2.3中的五个信息量按下列方式取值
Fi(1≤i≤14)的取值为:(0(不存在或对软件规模无影响)-5(有很大影响))
用功能点定义的概念
生产率
Pf=FP/E (2-6)
其中Pf表示每人月完成的功能点数
软件规模的功能点度量没有直接涉及软件系统本身的算法复杂性。1986年Jones把软件项目中的算法复杂性因素引入到功能点计算中来,为了避免混淆,我们把Albrecht定义的功能点称为简单功能点,用FPs表示,把Jones推广的功能点称为功能点,用FP表示。推广的功能点包括计算机程序中用于各类问题求解的算法因素,如求解线性代数方程组、遍历二叉树的各个结点、处理中断等等。功能点计算仍用公式(2-5),其中CT按表2.5计算。
表2.5 功能点度量
测量参数 | 值 | 权值 | ||
用户输入数 | □ | *4 | = | □ |
用户输出数 | □ | *5 | = | □ |
用户查询数 | □ | *4 | = | □ |
文件数 | □ | *7 | = | □ |
外部界面数 | □ | *7 | = | □ |
算法 | □ | *3 | = | □ |
CT | = | □ |
优点
①与程序设计语言无关,它不仅适用于过程式语言,也适用于非过程式的语言;
②软件项目开发初期就能基本上确定系统的输入、输出等参数,功能点度量能用于软件项目的开发初期。
缺点
①它涉及到的主观因素比较多,如各种权函数的取值;
②信息领域中的某些数据有时不容易采集;
③FP的值没有直观的物理意义。
3.代码行度量与功能点度量的比较
- 代码行度量依赖于程序设计语言,而功能点度量不依赖于程序设计语言。
- Albrecht和Jones等人对若干软件采用事后处理的方式分别统计出不同程序设计语言每个功能点与代码行数的关系,用LOC/FP的平均值表示。
- 表2.6表明,一行Ada语言代码的“功能”平均是一行FORTRAN语言代码“功能”的1.4倍。一行四代语言代码的“功能”平均是一行传统程序设计语言代码“功能”的3至5倍.
表2.6 各种语言的LOC/FP(平均值)
程序设计语言 | LOC/FP(平均值) |
汇编语言 | 300 |
COBOL | 100 |
FORTRAN | 100 |
Pascal | 90 |
Ada | 70 |
面向对象的语言 | 30 |
四代语言(4GL) | 20 |
代码生成器 | 15 |
2.软件项目估算中的通讯工作量如何计算?
常用的估算方法
①参照已经完成的类似项目估算待开发项目的成本和工作量。
②将大的项目分解成若干子项目,在估算出每个子项目成本和工作量之后,再估算整个项目。
③将软件项目按软件生存周期分解,分别估算出软件项目在软件开发各个阶段的工作量和成本,然后再把这些工作量和成本汇总估算整个项目。
④根据实验或历史数据给出软件项目工作量或成本的经验估算公式。
软件项目的规模是影响软件项目成本和工作量的重要因素。
软件项目代码行和功能点估算是成本和工作量估算的基础。
e=(a+4m+b)/6 (2-10)
希望LOC或FP的值落在区间[a,b]之外的概率极小
当LOC或FP的期望值估算出来之后,根据以前软件项目开发的平均生产率LOC/PM或FP/PM就可以计算出工作量。
如,软件项目的规模估算为310FP,以前完成的软件项目的生产率为5.5FP/PM,于是工作量估算为E=310/5.5=56PM。
经验估算模型之一 CoCoMo模型
基本CoCoMo模型 用于系统开发的初期,估算整个系统的工作量(包括软件维护)和软件 开发所需要的时间。中间CoCoMo模型 用于估算各个子系统的工作量和开发时间。详细CoCoMo模型 用于估算独立的软部件,如子系统内部的各个模块。
1 基本CoCoMo模型
静态、单变量模型
E = aL^b (2-11)
D = cE^d (2-12)
其中:E表示工作量,单位是人月(PM)。
D表示开发时间,单位是月(M)。
L是项目的代码行估计值,单位是千行代码
a,b,c,d是常数,取值如表2.9所示。
Boehm把软件划分为组织型、半独立型和嵌入型三类,允许不同应用领域和复杂程度的软件按照三类软件的适用范围选取相应的参数a,b,c,d
软件类型 | a | b | c | d | 适用范围 |
组织型 | 2.4 | 1.05 | 2.5 | 0.38 | 各类应用程序 |
半独立型 | 3.0 | 1.12 | 2.5 | 0.35 | 各类实用程序、编译程序等 |
嵌入型 | 3.6 | 1.20 | 2.5 | 0.32 | 实时处理、控制程序、操作系统 |
2 中间CoCoMo模型
以基本CoCoMo模型为基础,在工作量估计公式中乘以工作量调节因子 EAF
E = aL^b *EAF (2-13)
其中:L是软件产品的目标代码行数
a,b是常数,取值如表2.10所示。
工作量调节因子(EAF)与软件产品属性、计算机属性、人员属性、项目属性有关
² 软件产品属性软件可靠性、软件复杂性、数据库的规模。
² 计算机属性程序执行时间、程序占用内存的大小、软件开发环境的变化、软件开发环境的响应速度。
² 人员属性分析员的能力、程序员的能力、有关应用领域的经验、开发环境的经验、程序设计语言的经验
² 项目属性软件开发方法的能力,软件工具的质量和数量、软件开发的进度要求。
COCOMOⅡ模型调节要素和调节因子的范围
例题:
表2.7 代码行和成本、工作量估算
功能 | 乐观 LOC | 一般 LOC | 悲观 LOC | 加权平均 LOC | $/LOC | LOC/PM | 成本 ($) | 工作量 (人月) |
用户界面控制 | 1790 | 2400 | 2650 | 2340 | 14 | 315 | 32760 | 7.4 |
二维几何分析 | 4080 | 5200 | 7400 | 5380 | 20 | 220 | 107600 | 24.4 |
三维几何分析 | 4600 | 6900 | 8600 | 6800 | 20 | 220 | 136000 | 30.9 |
数据库管理 | 2900 | 3400 | 3600 | 3350 | 18 | 240 | 60300 | 13.9 |
图形显示 | 3900 | 4900 | 6200 | 4950 | 22 | 200 | 108900 | 24.7 |
外设控制 | 1990 | 2100 | 2450 | 2140 | 28 | 140 | 59920 | 15.2 |
设计分析 | 6600 | 8500 | 9800 | 8400 | 18 | 300 | 151200 | 28 |
总计 | 33360 | 656680 | 144.5 |
在例2.2中,目标代码行数为 33.3 KLOC
CAD软件开发属于中等规模、半独立型
从表2.9中查到a=3.0,b=1.12
代入公式(2-11)
E = 3.0*L^1.12
= 3.0*33.3^1.12
= 152 PM
E的估算值代入公式 (2-12)
取 C=2.5 d=0.35
D=2.5*E^0.35
=2.5*152^0.35
=14.5 M
建议参加项目开发的人数
N=E/D=152/14.5≈11
重点
若干人共同开发一个软件项目还应该增加他们之间相互通信和交换意见的额外工作量。
设N个程序员组成小组,实现相同规模的程序,相互通信数为
C=N(N-1)/2
每次通信和交换意见的平均工作量为μ
则增加的通信开销为
Ec=μN(N-1)/2 (2-14)
例题
3人和5人开发一个程序相互通信和交换意见的关系如图2.2所示
将N=3和N=5分别代入公式(2-14)
Ec(3)=μ3(3-1)/2=3μ
Ec(5)=μ5(5-1)/2=10μ
3.CMM和CMMI模型
1. CMM的能力成熟度级别及关键过程域
(1) L1初始级(initial)
初始级的软件开发组织几乎没有软件过程管理,软件开发是无序和混乱的,软件开发过程是不稳定的,软件项目的成功取决于开发精英个人或小组对软件过程的理解和努力。
(2) L2可重复级(repeatable)
可重复级的关键过程域包括:需求管理、软件项目计划、项目跟踪和监督、分包合同管理、软件质量保证、软件配置管理。
(3) L3己定义级(defined)
- 将管理和工程两方面的软件过程标准化、文档化和制度化。
- 软件开发组织己建立自己的软件过程标准,该组织承制的所有软件项目都使用自己的软件过程标准或根据项目需要剪裁一个子集。
- 项目使用的软件过程标准称为项目定义的软件过程。
- 已定义级的软件组织进行的软件过程应该是标准的、一致的和稳定的,软件开发过程中能对项目的成本、进度和产品的功能、质量进行跟踪和控制。
- 已定义级的关键过程域涉及项目和组织两方面,内容包括:组织级过程焦点、组织级过程定义、培训大纲、综合软件管理、软件产品工程、小组协调、同行评审。
(4) L4己管理级(managed)
(1) 定量的过程管理(quantitative process management)
定量地控制项目的软件过程能够达到的实际结果,从而得到一个稳定的、可定量预测的过程。
(2) 软件质量管理(software quality management)
软件质量管理以产品为中心。目标是定量的评价软件产品的质量,实现具体的质量目标,满足客户和最终用户的需要。
(5) L5优化级(optimizing)
- 重视并利用软件开发和维护过程中的反馈值进行过程和产品质量的定量控制,
- 关键领域:缺陷的预防、技术更新管理、过程变更管理。
2.能力成熟度模型集成CMMI
1) L2可重复级
(1) 需求管理 REQM
管理项目的产品需求和产品构件需求。
(2) 项目计划 PP
制定和维护定义项目活动的计划。
(3) 项目监督和控制 PMC
按计划监督项目,管理、纠正存在的问题。
(4) 供应商合同管理 SAM
建立并执行供应商合同。
(5) 度量和分析 MA
度量和分析过程的目的是,开发和维护项目信息管理需要的度量能力。
(6) 过程和产品质量保证 PPQA
客观的评价过程及其相关的工作产品,并将报告和记录提供给项目成员和管理部门。
(7) 配置管理 CM
利用配置标识、配置控制、配置状态报告、配置审计保持工作产品的完整性。
2) L3己定义级
(1) 需求开发 RD
生成和分析客户、产品和产品构件的需求。
(2) 技术解决方案 TS
根据“需求”开发、设计和实现问题求解方案,包括:产品、产品构件和开发产品的相关过程。
(3) 产品集成 PI
对产品构件进行组装,生成最终产品并交付给客(用)户。
(4) 验证 VER
确保选择的工作产品满足特定的需求。
(5) 确认 VAL
证实产品或产品构件置于预期环境时能够满足预期的用途。
(6) 组织级过程焦点 OPF
建立和维护对组织的过程和过程资产的理解。
(7) 组织级过程定义 OPD
建立和维护组织级可用的过程资产集。
(8) 组织级培训 OT
增加开发人员的技能和知识,提高他们完成本职工作的能力和有效性。
(9) 集成化项目管理 IPM
按照集成化、己定义的过程,管理项目和项目的参与人员。
(10) 风险管理 RSKM
标识软件生命周期中潜在的问题,采取必要措施缓解风险的影响。
(11) 集成化的团队 IT
为完成项目产品的开发和维护,在组织内将人员按照某种原则和分工,系统的建立任务组。
(12) 决策分析和解决方案 DAR
利用结构化方法、制定标准的评价方案并进行决策。
(13) 组织级集成环境 OEI
建立IPPD的组织级平台和过程资产。
3) L4己管理级
(1) 组织级过程性能 OPP
对组织标准过程集的性能给出定量的描述,提供过程性能数据、基线和模型,对组织的项目实施定量的管理。
(2) 项目定量管理 QPM
为达到己定义项目的质量和性能指标,对项目过程进行定量管理。
4) L5优化级
(1) 组织级改革和实施 OID
选择和实施改革、创新活动,改善组织的过程和技术,并能够量化和度量。
(2) 因果分析和解决方案 CAR
标识产生缺陷和问题的原因,并采取措施预防这些问题再次发生。
4.结构图复杂性度量值V(G)的确定
McCabe 用程序控制结构图的巡回秩数V(G) (Cyclomatic Complexity)作为程序结构复杂性的度量
V(G) = e-n+2 (2-20)
其中:e为结构图的边数
n为结构图的结点数
例题:
计算程序控制结构的V(G)值
E = 1 E = 3
N = 2 N = 3
V = 1 V = 2
E = 4 E = 3
N = 4 N = 3
V = 2 V = 2
计算程序控制结构的V(G)值
E = 6
N = 5
V = 3
习题
⼀、单项选择
1.软件项⽬管理必须( )介⼊。
A )从项⽬的开头 B)在可⾏性研究之后 C)在需求分析之后 D)在编码之后
解析:软件项目管理应当自项目启动之初就介入,以确保项目规划、组织、资源分配和风险管理等各方面工作能够系统化、协调化地进行。早期介入有助于识别和解决潜在问题,确保项目按计划推进。
2. 下列选项中,属于成本管理的主要任务的是( )。
A )⼈员的分⼯ B)估算软件项⽬的成本
C)对控制软件质量要素 D)对软件阶段产品进⾏评审
解析:成本管理的主要任务包括成本估算、预算编制和成本控制。估算项目的成本是成本管理的核心,旨在预测项目所需的资源和资金,以便进行有效的财务规划和控制。
3.下列选项中,不属于质量管理的主要任务的是( )。
A )制定软件质量保证计划 B)按照质量评价体系控制软件质量要素
C)增加软件产品的功能 D)对最终软件产品进⾏确认
解析:质量管理关注的是确保软件产品满足既定的质量标准和用户需求,包括制定质量保证计划、控制质量要素以及最终产品的确认。增加软件功能属于需求分析或功能设计,而非质量管理的直接任务。
4.下列选项中,属于软件配置管理的任务的是( )。
A )⼈员的分⼯ B)估算软件项⽬的成本
C)对软件阶段产品进⾏评审 D)对程序、数据、⽂档的各种版本进⾏管理
解析:软件配置管理的主要任务包括版本管理、变更控制和配置状态记录等,旨在确保软件产品及其相关文档的各个版本得到有效管理和跟踪,以维护软件的完整性和一致性。
5.( )是对产品或过程的某个属性的范围、数量、维度、容量或⼤⼩提供⼀个定量的指示。
A )测量 B)度量 C)估算 D)指标
解释:
-
度量(Measurement):是对事物可量化属性进行测量的过程,它强调的是量化和精确。例如,测量长度、重量、时间、温度等。
-
测量(Measure):通常指测量行为或测量方法,是获取度量数据的过程或手段。例如,“进行测量”、“使用尺子测量长度”。它更侧重于动作或方法。
-
估算(Estimate):是对事物进行粗略的估计或推算,通常在无法进行精确测量或不需要精确测量时使用。例如,估计人数、估计成本等。估算通常带有一定的误差范围。
-
指标(Index/Indicator):是用于衡量或评价事物某种状态或特征的参考值或标准。例如,GDP是衡量一个国家经济发展水平的指标,CPI是衡量通货膨胀程度的指标。指标通常是基于度量数据计算或得到的。
6.( )是对系统、部件或过程的某⼀特性所具有的程度进⾏的量化测量。
A )测量 B)度量 C)估算 D)指标
7.( )是对软件产品、过程、资源等使⽤历史资料或经验公式等进⾏预测。
A )测量 B)度量 C)估算 D)指标
8.( )是⼀个度量或度量的组合,它可对软件产品、过程或资源提供更深⼊的理解。
A )测量 B)度量 C)估算 D)指标
9.下列选项中属于产品的内部属性的是( )。
A )模块耦合度 B)软件可靠性 C)软件有效性 D)软件可维护性
解析:内部属性指的是软件内部结构和设计方面的特性,如模块的耦合度、内聚性等。模块耦合度反映了模块之间的依赖关系,是内部属性的典型代表。其他选项如可靠性、有效性和可维护性更多涉及外部质量属性。
10.下列选项中属于过程的外部属性的是( )。
A )⼯作量 B)成本 C)事件 D)计划及进度
11.下列选项中属于资源的外部属性的是( )。
A )经验 B)⼈员 C)⽣产率 D)⼯具
12. 基于代码⾏的⾯向规模的度量⽅法适合于( )。
A )过程式程序设计语⾔和事前度量 B)第四代语⾔和事前度量
C)第四代语⾔和事后度量 D)过程式程序设计语⾔和事后度量
解析:基于代码行(如代码行数)的度量方法适用于过程式语言,因为这些语言的代码结构较为线性,便于事后度量。而第四代语言通常具备更高的抽象度,不适合通过代码行数来度量。
13. 下列说法中,不正确的是( )。
A )功能点度量⽅法与程序设计语⾔有关 B)功能点度量⽅法适合于过程式语⾔
C)功能点度量⽅法适合于⾮过程式语⾔ D)功能点度量⽅法适合于软件项⽬估算
解析:功能点度量方法是一种与具体编程语言无关的度量方法,主要基于软件的功能需求来评估软件规模。因此,选项A的说法是不正确的。
14.下列说法中,不正确的是( )。
A )软件项⽬⼯作量分布曲线不是线性的
B)到开发后期临时增加⼈⼒可加快进度
C)适当推迟交货时间可⼤幅度降低开发⼯作量
D)在软件⽣存周期的不同阶段各类⼈员的参与情况是不同的。
15.在软件质量要素中,程序满⾜需求规格说明及⽤户⽬标的程度指的是( )。
A )完整性 B)可⽤性 C)正确性 D)灵活性
解析:“正确性”指的是软件是否准确地实现了需求规格说明及用户的目标,确保软件功能的实现无误。
16.在软件质量要素中,改变⼀个操作的顺序所需的⼯作量的多少指的是( )。
A )完整性 B)可⽤性 C)正确性 D)灵活性
解析:“灵活性”指的是软件在需求变更时能够适应的能力,如改变操作顺序所需的工作量,体现了软件的适应性和可扩展性。
17.在软件质量要素中,对未授权⼈员访问程序或数据加以控制的程度指的是( )。
A )完整性 B)可⽤性 C)正确性 D)灵活性
解析:“完整性”在信息安全中指的是防止未授权访问和修改,确保程序和数据的准确性和一致性。
18.在软件质量要素中,学习使⽤软件(即操作软件、准备输⼊数据、解释输出结果等)的
难易程度指的是( )。
A )完整性 B)可⽤性 C)正确性 D)灵活性
解析:“可用性”指的是用户在使用软件时的便利性和易学性,包括操作的简便程度、界面友好性等。
19. 在软件质量要素的评价准则中,程序源代码的紧凑程度指的是( )。
A )简单性 B)准确性 C)简明性 D)执⾏效率
20.在软件质量要素的评价准则中,软件运⾏的效率指的是( )。
A )简单性 B)准确性 C)简明性 D)执⾏效率
解析:“执行效率”指的是软件在运行时所需资源(如时间、空间)的合理利用程度,反映了软件的性能表现。
21.在软件质量要素的评价准则中,程序易于理解的程度指的是( )。
A )简单性 B)准确性 C)简明性 D)执⾏效率
22.在软件质量要素的评价准则中,计算和控制的精确程度指的是( )。
A )简单性 B)准确性 C)简明性 D)执⾏效率
解析:“准确性”指的是软件在计算和控制过程中所达到的精确程度,确保输出结果的正确性和一致性。
23.在软件质量要素的评价准则中,在各种异常情况下软件能继续提供操作的能⼒指的是( )。
A )容错性 B)检测性 C)安全性 D)可操作性
解析:“容错性”指的是软件在遇到错误或异常情况时,仍能继续运行并提供服务的能力,避免系统崩溃或数据丢失。
24.在软件质量要素的评价准则中,程序监视自身运⾏并标识错误的程度指的是( )。
A )容错性 B)检测性 C)安全性 D)可操作性
解析:“检测性”指的是软件识别和报告错误的能力,程序能够监控自身运行状态,并在出现错误时及时标识和反馈。
25.在软件质量要素的评价准则中, 控制或保护程序和数据不被破坏、⾮法访问等机制的
能⼒指的是( )。
A )容错性 B)检测性 C)安全性 D)可操作性
解析:“安全性”指的是软件保护资源免受未经授权的访问、使用、修改或破坏的能力,包括数据加密、访问控制等措施。
26.在软件质量要素的评价准则中,操作该软件的难易程度指的是( )。
A )容错性 B)检测性 C)安全性 D)可操作性
解析:“可操作性”指的是软件在实际使用过程中,操作的便捷性和用户体验,包括界面设计、操作流程等方面。
27.下列选项中,不能进⾏并⾏⼯作的是( )。
A )需求复审 B)过程设计 C)单元测试 D)编码
解析:需求复审通常需要在整体需求文档完成后,由相关人员集体审查,难以与其他活动并行进行。其他选项如过程设计、单元测试和编码可以在不同模块或团队间并行进行,提高开发效率。
28.在整个软件项⽬定义与开发各阶段⼀种典型的⼯作量分布原则,称为 40-20-40 分布原
则,其中 20%的⼯作量指的是( )。
A )需求分析⼯作量 B)编码⼯作量 C)详细设计⼯作量 D)测试⼯作量
解析:
40-20-40 原则是一种在软件项目生命周期中估算工作量分配的经验法则。它将软件开发过程分为三个主要阶段,并分别分配了相应的工作量比例:
- 第一个 40%: 指的是编码前的准备工作,主要包括需求分析、概要设计、详细设计等阶段。这个阶段的工作是为后续的编码工作打下基础,因此需要投入较多的时间和精力。
- 20%: 指的是编码(Coding)阶段,即编写实际代码的过程。虽然编码是软件开发的核心环节之一,但由于前期的充分准备,编码本身所占的工作量相对较少。
- 第二个 40%: 指的是编码后的工作,主要包括测试、集成、部署、维护等阶段。这个阶段的工作是为了验证代码的正确性、可靠性和可用性,并最终将软件交付给用户使用,因此也需要投入大量的工作量。因此,40-20-40 原则中的 20% 明确指的是编码工作量。
⼆、填空
三、简答题
四、综合题
1. 生产率 P
生产率是单位时间内完成的代码量,用公式计算:
2. 平均成本 C
平均成本是单位代码行数的成本,用公式计算:
3. 代码出错率 EQR
代码出错率是单位代码行数的错误数,用公式计算:
4. 文档率 D
文档率是单位代码行数的文档页数,用公式计算:
5. 通信工作量 Ec
通信工作量是人员间通信的总工作量,用公式计算:
团队中的通信组合数可用组合公式计算:
通信工作量为:
Ec=0.13×10=1.3 PM
2、某软件的⼯作量是 20000⾏,由 4⼈组成的开发⼩组开发,每个程序员的⽣产效率是 5000
⾏/⼈⽉,每对程序员的沟通成本是 250⾏/⼈⽉,则该软件需要开发多少⽉ 。
解答:
开发时间由开发人员完成代码的时间和沟通成本的时间共同决定。
1. 基础公式
开发时间 TTT 公式如下:
-
每个人每月的生产率:已知为 5000 行/人月。
-
总团队生产率(不含沟通成本):
总生产率=4⋅5000=20000 行/月
2. 沟通成本计算
团队内的沟通组合数为:
C(4,2)=4⋅(4−1)/2=6
每对程序员的沟通成本为 250 行/人月,则团队总沟通成本为:
沟通成本=6⋅250=1500 行/月
3. 有效生产率
有效生产率为总生产率减去沟通成本:
有效生产率=20000−1500=18500 行/月
4. 开发时间计算
开发时间为:T=代码工作量有效生产率=20000/18500
计算结果:T≈1.08 月