【例1】由于软件工程有如下的特点,使软件管理比其它工程的管理更为困难。软件产品( A )。( B )标准的过程。大型软件项目往往是( C )项目。( D )的作用是为有效地定量地进行管理,把握软件工程过程的实际情况和它所产生的产品质量。在制定计划时,应当对人力、项目持续时间、成本作出( E );( H )实际上就是贯穿于软件工程过程中一系列风险管理步骤。最后,每一个软件项目都要制定一个( F ),一旦( G )制定出来,就可以开始着手( H )。 供选择的答案:
A ? C. ① 可见的 ② 不可见的 ③ “一次性” ④ “多次”
⑤ 存在 ⑥ 不存在 D ? H. ① 进度安排 ② 度量 ③ 风险分析 ④ 估算
⑤ 追踪和控制 ⑥ 开发计划
答案:A. ②, B. ⑥, C. ③, D. ②, E. ④, F. ①, G. ⑥, H. ⑤。
分析:由于软件工程有如下的特点:软件产品不可见;不存在标准的软件过程;大型软件项目往往是“一次性”的项目,使得软件得管理比其它工程的管理更为困难;通常,软件人员和用户确定了软件项目的目标和范围之后,度量的作用就是为了有效地定量地进行管理。对开发过程进行度量的目的是为了改进开发过程,而对产品进行度量的目的是为了提高产品的质量。在软件项目管理过程中一个关键的活动是制定计划。在做计划时,必须就需要的人力、项目持续时间、成本作出估算;风险分析对于软件项目管理是决定性的,它实际上就是贯穿于软件工程过程中一系列风险管理步骤,其中包括风险识别、风险估计、风险评价和风险驾驭等步骤。每一个软件项目都要制定一个进度安排,但不是所有的进度都要一样地安排。一旦制定了开发计划,就可以开始着手追踪和控制活动。
【例2】在软件项目估算时,将代码行LOC和功能点FP数据在两个方面使用:一是作为一个估算变量,度量软件每一个( A )的大小;一是联合使用从过去的项目中收集到的( B )和其它估算变量,进行成本和( C )估算。LOC和FP是两种不同的估算技术,但两者有许多共同的特征,只是LOC和FP技术对于分解所需要的( D )不同。当用( E )作为估算变量时,功能分解是绝对必要且应达到很详细的程度,而用( F )作为估算变量时,分解程度可以不很详细。( E )是直接估算,( F )是间接估算。若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出LOC或FP估计值,记作a, m, b,则LOC或FP 的期望值E的公式为( G ),m是加权的最可能的估计值,遵循( H )。 供选择的答案:
A ? C. ① 模块 ② 软件项目 ③ 分量 ④ 持续时间 ⑤ 工作量 ⑥ 进度 ⑦ 基线数据 ⑧ 改进数据 D. ① 详细程度 ② 分解要求 ③ 改进过程 ④ 使用方法 E, F. ① FP ② LOC G. ① E = (a+m+b)/3 ② E = (a+4m+b)/6 ③ E = (2a+3m+4b)/3 ④ E?3a?4m?b H. ① χ概率 ② γ概率 ③ β概率 ④ 泊松 答案:A. ③, B. ⑦, C. ⑤, D. ①, E. ②, F. ①, G. ②, H. ③。
分析:在软件项目估算时,将代码行LOC和功能点FP数据在两个方面使用:一是作为一个估算变量,度量软件每一个分量的大小;一是联合使用从过去的项目中收集到的基线数据(即对以往项目所做的估算值,保留下来作为后续项目的估算参考)和其它估算变量,进行成本和工作量估算。 LOC和FP是两种不同的估算技术,但两者有许多共同的特征,项目计划人员首先给出一个有界的软件范围的叙述,再由此叙述尝试着把软件分解成一些小的可分别独立进行估算
1
的子功能。然后对每一个子功能估算其LOC或FP(即估算变量)。接着,把基线生产率度量(如,LOC/PM或FP/PM)用做特定的估算变量,导出子功能的成本或工作量。将子功能的估算进行综合后就能得到整个项目的总估算。 LOC或FP估算技术对于分解所需要的详细程度是不同的。当用LOC做为估算变量时,功能分解是绝对必要的且需要达到很详细的程度。而估算功能点所需要的数据是宏观的量,当把FP当做估算变量时所需要的分解程度不很详细。我们还应注意,LOC是直接估算的,而FP是通过估计输入、输出、数据文件、查询和外部接口的数目,以及14种复杂性校正值间接地确定的。避开所用到的估算变量,项目计划人员可对每一个分解的功能提出一个有代表性的估算值范围。利用历史数据或凭实际经验(当其它的方法失效时),项目计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出LOC或FP估计值。记作a、m、b。当这些值的范围被确定之后,也就隐含地指明了估计值的不确定程度。 接着计算LOC或FP的期望值E。 E = (a + 4m + b) / 6. (加权平均)
其中,可能的估计值m是加权最重的最可能的估算值且遵循β概率分布。
【例3】定义一个人参加劳动时间的长短为( A ),其度量单位为PM(人月)或PY(人年)。而定义完成一个软件项目(或软件任务)所需的( A )为( B ),其度量单位是人月/项目(任务),记作PM(人月)。进一步地,定义单位( A )所能完成的软件( C )的数量为软件( D ),其度量单位为LOC/PM。它表明一般指( E )的一个平均值。例如,一个软件的开发工作量如下表所示。该软件共有源代码2900行,其中, 500行用于测试,2400行是执行( F )的源代码。则劳动生产率是( G ) (LOC/PM)。
表 软件开发所需工作量例
阶 段 需要工作量(人月) 软件计划 1.0 需求分析 1.5 设 计 3.0 编 码 1.0 测 试 3.5 总 计 10.0 供选择的答案: A, B, D. ① 生产率 ② 工作量 ③ 成本 ④ 劳动量 E. ① 开发全过程 ② 某开发阶段 ③ 软件生存期 ④ 某开发任务 F, C. ① 软件 ② 程序 ③ 进程 ④ 产品 G. ① 520 ② 120 ③ 320 ④ 240 答案:A. ④, B. ②, C. ④, D. ①, E. ①, F. ②, G. ④。
分析:定义一个人参加劳动时间的长短为劳动量,其度量单位为PM(人月),PY(人年)。它不同于工作量。而定义完成一个软件项目(或软件任务)所需的劳动量为工作量,其度量单位是人月/项目(任务),记作PM(人月)。进一步地,定义单位劳动量所能完成的软件产品的数量为软件生产率,其度量单位为LOC/PM。它表明一般指开发全过程的一个平均值。题例所示的软件共有源代码2900行,其中, 500行用于测试,2400行是执行程序的源代码。则劳动生产率是(2900-500)/10 = 240(LOC/PM)。
【例4】对于一个大型的软件项目,由于项目的复杂性,需要进行一系列的估算处理。主要按( A )和( B )手段进行。估算的方法分为三类:从项目的整体出发,进行( B )的方法称为( C )估算法。把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发总工作量的方法称为( D )估算法。而把待开发的软件项目与过去已完成的软件项目做类比,区分出类似部分和不同部分分别处理的方法称为( E )估算法。( F )是由多位专家进行成本估算的方法。 供选择的答案: A, B. ① 类推 ② 类比 ③ 分解 ④ 综合 C ? F. ① 差别 ② 自顶向下 ③ 自底向上 ④ 专家判定技术
2
⑤ 循序渐进 ⑥ 比较
答案:A. ③, B. ①, C. ②, D. ③, E. ①, F. ④。
分析:对于一个大型的软件项目,由于项目的复杂性,开发成本的估算不是一件简单的事,要进行一系列的估算处理。主要靠分解和类推的手段进行。基本估算方法分为三类。 ① 自顶向下的估算方法:这种方法的主要思想是从项目的整体出发,进行类推。即估算人员根据以前已完成项目所消耗的总成本(或总工作量),来推算将要开发的软件的总成本(或总工作量),然后按比例将它分配到各开发任务单元中去,再来检验它是否能满足要求。这种方法的优点是估算工作量小,速度快。缺点是对项目中的特殊困难估计不足,估算出来的成本盲目性大,有时会遗漏被开发软件的某些部分。 ② 自底向上的估计法:这种方法的主要思想是把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发的总工作量。这是一种常见的估算方法。它的优点是估算各个部分的准确性高。缺点是缺少各项子任务之间相互联系所需要的工作量,还缺少许多与软件开发有关的系统级工作量(配置管理、质量管理、项目管理)。所以往往估算值偏低,必须用其它方法进行检验和校正。 ③ 差别估计法:这种方法综合了上述两种方法的优点,其主要思想是把待开发的软件项目与过去已完成的软件项目进行类比,从其开发的各个子任务中区分出类似的部分和不同的部分。类似的部分按实际量进行计算,不同的部分则采用相应的方法进行估算。这种的方法的优点是可以提高估算的准确程度,缺点是不容易明确“类似”的界限。 专家判定技术是由多位专家进行成本估算。由于单独一位专家可能会有种种偏见,最好由多位专家进行估算,取得多个估算值。
【例5】 Putnam模型是一种( A )模型。需要建立一条连续的( B ),称为Rayleigh-Norden曲线。可以由此导出一个( C ),把已交付的源代码(源语句)行数与工作量和开发时间联系起来。请选择合适的答案完成下面大型软件项目的开发工作量分布图。
D E
( D ) ( E ) ( F )
( G )
( H )
供选择的答案: A. ① 单值 ② 多值 ③ 静态多变量 ④ 动态多变量 ⑤ 静态单变量 B, C. ① 软件方程 ② 函数曲线 ③ 资源需求曲线 ④ 工作量分布 D ? H. ① 安装 ② 系统定义 ③ 测试与确认 ④ 设计与编码 ⑤ 功能设计∕规格说明
答案:A. ④, B. ④, C. ①, D. ②, E. ⑤, F. ④, G. ③, H. ①。
分析:Putnam模型是1978年Putnam提出的模型,是一种动态多变量模型。它假定在软件开
3
发的整个生存期中工作量有特定的分布。这种模型是依据在一些大型项目(总工作量达到或超过30个人年)中收集到的工作量分布情况而推导出来的,但也可以应用在一些较小的软件项目中。大型软件项目的开发工作量分布可以用下图所示的Rayleigh-Norden曲线表示。
该曲线的典型形状由Lord Rayleigh最早有分析地导出,并由Norden使用收集到的软件开发中的经验数据证实了这条曲线。用Rayleigh-Norden曲线可以导出一个“软件方程”,把已交付的源代码(源语句)行数与工作量和开发时间联系起来。
L?Ck?K?td1343
其中,td是开发持续时间(以年计), K是软件开发与维护在内的整个生存期所花费的工作量(以人年计),L是源代码行数(以LOC计),Ck是技术状态常数,它反映出“妨碍程序员进展的限制”,并因开发环境而异。 【例6】一个规模为10KDSI的商用微机远程通信的嵌入型软件,使用中间COCOMO模型进行软件成本估算。程序的名义工作量MM = ( A );程序实际工作量MM = ( B );开发所用的时间TDEV = ( C );如果软件开发人员的工资都按每月6000美元计算,则该软件项目的开发人员的工资总额 = ( D )。
表1 中间COCOMO模型的名义工作量与进度公式
总体类型 组 织 型 半独立型 嵌 入 型
工 作 量
MM=3.2 (KDSI) MM=3.0 (KDSI) MM=2.8 (KDSI)
1.051.121.20
进 度
TDEV=2.5 (MM)TDEV=2.5 (MM)TDEV=2.5 (MM)
0.380.350.32
表2 影响工作量的因素fi 的取值
影响工作量因素fi 1 软件可靠性 2 数据库规模 3 产品复杂性 4 时间限制 5 存储限制 6 机器 7 周转时间 8 分析员能力 情 况 只用于局部地区,恢复问题不严重 20000字节 用于远程通信处理 使用70%的CPU时间 64K中使用45K 使用商用微处理机 平均2小时 优秀人才 取 值 1.00(正常) 0.94(低) 1.30(很高) 1.10(高) 1.06(高) 1.00(额定值) 1.00(额定值) 0.86(高) 4
9 工作经验 10 程序员能力 11 工作经验 12 语言使用经验 13 使用现代程序设计技术 14 使用软件工具 15 工期 远程通信工作3年 优秀人才 微型机工作6个月 12个月 1年以上 基本的微型机软件 9个月 1.10(低) 0.86(高) 1.00(正常) 1.00(正常) 0.91(高) 1.10(低) 1.00(正常)
供选择的答案: A, B. ① 45.8 ② 51.5 ③ 44.38 ④ 54.2 C. ① 8.9月 ② 9.8月 ③ 7.8月 ④ 10.9月 D. ① 26.4万美元 ② 36万美元 ③ 20.96万美元 ④ 30.9万美元 答案:A. ③, B. ②, C. ①, D. ④。
分析:考虑如题中表2的15种影响软件工作量的因素,通过定下乘法因子,修正COCOMO工作量公式和进度公式,可更合理地估算软件(各阶段)的工作量和进度。此时,实际工作量计算公式改成:
15cMM?r??fi??KDSI?i?11.20
由此得到程序名义工作量 MM = 2.8 *(10) = 44.38 (MM)
15程序实际工作量 MM?44.38*?fi?44.38*1.17?51.5 (MM)i?1
开发所用时间 TDEV = 2.5 *(51.5) = 8.9 (月) 如果分析员与程序员的工资都按每月6,000美元计算,则该项目的开发人员的工资总额为51.5 * 6000 = 309000 (美元) 【例7】在特定情况下,是否必须进行风险分析,是对项目开发的形势进行( A )后确定的。( A )可以按如下步骤进行:明确项目的目标、总策略、具体策略和为完成所标识的目标而使用的方法和资源;保证该目标是( B ),项目成功的标准也是( B );考虑采用某些条目作为项目成功的( C );根据估计的结果来确定是否要进行风险分析。
一般来说,风险分析的方法要依赖于特定问题的需求和有关部门所关心的方面。具体分3步进行。第一步识别潜在的风险项,首先进行( D )过程;第二步估计每个风险的大小及其出现的可能性,选择一种( E ),它可以估计各种风险项的值;第三步进行风险评估。风险评估也有三个步骤:确定( F ),确定( G ),把风险与“参照风险”做比较。 供选择的答案: A. ① 风险管理 ③ 风险评价 ④ 风险测试 ② 风险估计 B. ① 可度量的 ④ 不确定的 ② 不可度量的 ③ 准确的 C. ① 规范 ③ 过程模型 ④ 设计要求 ② 标准 D, E. ① 信息分类 ③ 度量尺度 ④ 标准 ② 信息收集 ⑤ 度量工具 ⑥ 信息获取
F, G. ① 风险的范围 ② 风险的特性 ③ 风险的级别 ④ 风险的评价标准 ⑤ 风险的排除策略
答案:A. ②, B. ①, C. ②, D. ②, E. ③, F. ④, G. ③。
分析:在特定的情况下,是否必须进行风险分析,是对项目的开发形势进行风险估计后确定的。因为风险分析需要相当大的费用。只有在软件的费用、软件的作用、软件的性能及软件与系统的关系等各方面对系统有比较大的影响时,即软件的风险对于整个系统的成败,或对
5
0.32
系统的风险有关键的影响时,才有必要进行软件的风险分析和管理。风险估计的步骤如下: ? 明确项目的目标、总策略、具体策略和为完成所标识的目标而使用的方法和资源;
? 保证该目标是可度量的,项目成功的标准也是可度量的; ? 考虑采用以下的某些条目作为项目成功的标准:① 最大限度的收益,② 最小的费用,③ 最小的风险损失,④ 最大限度的市场,⑤ 最小的周期性的波动,⑥ 形成有益的形象,⑦ 最佳的服务质量,⑧ 最高的增长率,⑨ 员工的满意度最高,⑩ 公司声望最高;
? 根据估计的结果来确定是否要进行风险分析。 一般来说,风险分析的方法要依赖于特定问题的需求和有关部门所关心的方面。下面给出一种结构化的、一致的方法来进行风险分析。具体分3步进行。
第一步识别潜在的风险项。当确定要进行风险分析之后,就要收集信息,表明相关的风险。这就需要观察风险的征兆,理解其产生的原因,并列出所有的风险项。
首先进行信息收集。可以从过去完成的项目中收集已有的经验和收集来自群众的经验;可以模拟著名的事例;可以考虑类似的因素和进行常识性的判断;可以进行试验或测试以得到有关的结果,可以用各种方式来获得可能忽略的情况;此外,还可以针对经常发生的错误进行普查统计等。一般来说,通过过去的历史来认识软件项目的风险也许时一种最好的办法。例如,一些数字表明修复一个需求或设计阶段的错误的费用可能比修复一个测试阶段的错误
的费用高100倍到1000倍。因此,可以把需求阶段标识为一个软件开发各阶段的风险区域。然后进行信息分类。必须将收集到的信息以某种方式进行分类。一种简单而有用的方法
是把风险项分为三类:有风险、可预见的风险、不可预见的风险。“有风险”是指经常发生的情况;“可预见的风险”是指以较高概率出现的情况;“不可预见的风险”是指不能识别的、未知的、不能观察的风险,是可能发生但事前很难预料的风险。对于每一种类型,还可以按其原因分成三种子类型:缺乏信息、缺乏管理及缺乏时间。其它分类方法可以按直接或间接分类,按运行性或策略性分类,按技术、进度、成本、支持分类。
第二步估计每个风险的大小及其出现的可能性,风险估计要度量所标识的各个风险可能造成的损失,即各种风险项的值(后果及程度),用以减少度量的不确定性。可以按以下步骤进行:
选择某一种度量尺度,用以估计计算各种风险项的值,并具有合适的精度。由于要估计的风险信息可能有3种形式:叙述性、定性或定量,所以可选的尺度可以是命名尺度、序次尺度、坐标尺度或比例尺度。待估计的信息与度量尺度之间要建立对应关系,不同类型的信息有不同的度量尺度。例如,叙述性信息需要有命名尺度或序次尺度,定量的信息需要坐标或比例性的尺度。下表列出定量的风险等级:
风险等级 极高 很高 高 中等 低 很低 失效概率 0.99 ? 0.81 0.80 ? 0.61 0.60 ? 0.50 0.49 ? 0.24 0.24 ? 0.10 0.09 ? 0.01 说 明 超过当前的技术水平,肯定是技术问题。 超过当前的技术水平,极像是技术问题。 最新的、尚未充分成熟的技术,好像是技术问题。 最佳技术,只会有很小的技术问题。 使用的技术,没有技术问题。 在使用中的系统。 在使用不同的方法和技术进行风险估计时常常会出现偏差,这是由于缺少可用来进行判断的信息,从而限制了风险估计的精度。由于信息分散,各人的理解和解释不同,造成“信息可用性偏差”。其次,选择的观念不同、专家的偏爱、采样规模的影响、样本相关的影响,以及修正的偏差等,都会产生估计的偏差。特别要注意的是:对于连续发生的事件和间断的不连续发生事件,这些偏差会造成什么样的影响。
必须采用一些技术来克服或消减风险估计中的不确定性。风险一般可以看成属于以下三
6
种过程之一:行为型、自然型和随机型。
过程种类 行为型 自然型 随机型 克服和消减叙述型的不确定性 受定义人类行为的能力的限制 理论上无限制,但实际上有一定范围 理论上无限制,但实际上有一定范围 克服和消减度量型的不确定性 受理性的人类行为的限制 受度量系统的精度的限制 无法消减不确定性 第三步进行风险评估。因为软件项目所面临的是风险的一个较大的集合及其相互之间的影响,因此,必须针对这一点进行风险评估,以达到以下的目的:
首先,考虑各种风险的综合影响后,对已识别风险发生的可能性及其后果给出最终的量值(如果情况发生变化,也许要重新分析风险发生的可能性和可能的后果);
其次,提供某种机制,对各个风险标明优先次序,以便予以适当安排; 最后,通过考虑其它可替代的方案,寻找避免风险的基本方法,即为高层决策人员提供全部必要的信息,以作出合理的有依据的决策。进行风险评估有三个步骤:
① 确定风险评估的标准。其目的是可用以衡量每个风险的后果,即判定在项目的生存期中各个阶段的风险的后果是否可以接受。此标准应与项目成功的标准相关。
② 确定风险的级别。其目的是把项目作为整体来评估。就是说,人们必须理解各种风险之间的相互作用,以及修改某些因素会如何影响它们之间的相互作用。
为了说明可被评估的风险,引入“参照风险”。“参照风险”可以是一组单个风险的集合,或对项目会造成最大损害的一个或多个风险。必须仔细认清各风险间可能发生的耦合或复合情况。说明在把系统视为一个整体时,风险将导致系统失败的概率。
③ 把风险与“参照风险”做比较。把已评定的风险与在早期确定的“参照风险”相比较,结果可能是以下3种情况之一:
? 可接受(评定的风险低于“参照风险”);
? 不可能接受(评定的风险大大高于“参照风险”);
? 不适合接受(评定的风险大于,但几乎等于“参照风险”)。
【例8】假设开发某个计算机应用系统的投资额为3000元,该计算机应用系统投入使用后,每年可以节约1000元,5年内可能节约5000元。3000元是现在投资的钱,5000元是5年内节省的钱,两者不能简单地比较。 假定年利率为12%,利用计算货币现在价值的公式,可以算出该计算机应用系统投入使用后每年预计节省的金额的现在价值。
年 1 2 3 4 5 节省(元) 1000 1000 1000 1000 1000 利率(1 + 0.12)n 1.12 1.25 1.40 1.57 1.76 现在价值(元) 892.86 800.00 714.29 636.94 568.18 累计现在价值(元) 892.86 1692.86 2407.15 3044.09 3612.27
则该系统的纯收入是( A ),投资回收期是( B ),投资回收率为( C )。 供选择的答案:
A. ① 512.3元 ② 729.28元 ③ 602.4元 ④ 612.27元 B. ① 2. 4年 ② 3.93年 ③ 4.25年 ④ 2.78元 C. ① 25% ② 30% ③ 20% ④ 15% 答案:A. ④, B. ②, C. ③。
分析:效益包括经济效益,也包括社会效益。前者是有形的,后者是无形的。系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。运行费用包括操作员人数、工作时间、消耗的物资等。在计算系统的经济效益时,应按照货币的时间价值来计
7
算,这是因为对项目的投资在前,而系统效益的产生在后,且常常有一个较长的过程。
通常,用利率表示货币的时间价值。若设年利率为i,现已存入P元,则n年后可得到
n
的钱数为:F = ( 1 + i ) ,F就是P元钱在n年后的价值。 反之,若n年后能收入F元,那
n
么这些钱现在的价值是:P = F∕( 1 + i ) 。
由此,可从题意得:
该计算机应用系统在5年中的纯收入为:3612.27 - 3000 = 612.27 (元)。 投资回收期约为:3 +(3000-2407.15)/(3044.09-2407.15) ≈ 3.93 (年)。 投资回收率设为r,由下列方程式:
3000 = 1000/(1+ r)+1000/(1+ r)2+1000/(1+ r)3+ ?? +1000/(1+ r)5 解得r = 20%。 纯收入就是在整个生存期之内系统的累计经济效益(折合成现在值)与投资之差。投资回收期就是使累计的经济效益等于最初的投资所需的时间。投资回收率时投入资金所获得的利率。 【例9】软件项目管理的主要职能包括:( A ),建立组织,配备人员,( B )和( C )。由于软件项目的特有性质,使得项目管理存在一定困难。第一、( D ),软件工程过程充满了大量高强度的脑力劳动;第二、( E ),在特定机型上,利用特定的硬件配置,由特定的系统软件和支撑软件支持,形成了特定的开发环境;第三、( F ),软件项目经历的各个阶段都深透了大量的手工劳动,远未达到自动化的程度;第四、( G ),用户要经过专门的培训,才能掌握操作步骤,且需要配备专职维护人员进行售后服务;第五、( H ),为高质量地完成软件项目,充分发掘人员的智力才能和创造精神。 在总结和分析足够数量失误的软件项目之后可知,造成软件失误的原因大多与( I )
工作有关。在软件项目开始执行时,执行的过程中及项目进行的最后阶段都会遇到种种问题。
供选择的答案:
A ? C. ① 编码 ② 制定计划 ③ 开发 ④ 指导
⑤ 测试 ⑥ 检验
D ? H. ① 软件工作渗透了人的因素 ② 智力密集,可见性差
③ 单件生产 ④ 使用方法繁琐,维护困难 ⑤ 劳动密集,自动化程度低
I. ① 设计 ② 维护 ③ 测试 ④ 管理
⑤ 实践 ⑥ 指导 ⑦ 审核 ⑧ 分析
答案:A. ②, B. ④, C. ⑥, D. ②, E. ③, F. ⑤, G. ④, H. ①, I. ④。 分析:软件管理的主要职能包括:
? 制定计划:规定待完成的任务、要求、资源、人力和进度等。
? 建立组织:为实施计划,保证任务的完成,需要建立分工明确的责任制机构。 ? 配备人员:任用各种层次的技术人员和管理人员。 ? 指导:鼓励和动员软件人员完成所分配的工作。 ? 检验:对照计划或标准,监督和检查实施的情况。 软件项目管理上的困难主要有:
① 智力密集,可见性差:软件工程过程充满了大量高强度的脑力劳动。软件开发的成果是不可见的逻辑实体,软件产品的质量难以用简单的尺度加以度量。对于不深入掌握软件知识或缺乏软件开发实践经验的人员,是不可能领导做好软件管理工作。软件开发任务完成得好也看不见,完成得不好有时也能制造假象,欺骗外行的领导。
② 单件生产:在特定机型上,利用特定的硬件配置,由特定的系统软件或支撑软件的支持,形成了特定的开发环境。再加上软件项目特定的目标,采用特定的开发方法、工具和
8
语言,使得软件具有独一无二的特色,几乎找不到与之完全相同的软件产品。这种建立在内容、形式各异的基础上的研制或生产方式,与其它领域中大规模现代化生产有着很大的差别,也自然会给管理工作造成许多实际困难。
③ 劳动密集,自动化程度低:软件项目经历的各个阶段都渗透了大量的手工劳动,这些劳动又十分细致、复杂和容易出错。尽管近年来开展了软件工具和CASE的研究,但总体来说,仍远未达到自动化的程度。软件产业所处的这一状态,加上软件本身的复杂性,使得软件的开发和维护难于避免多种错误,软件的正确性难于保证,软件产品质量的提高自然受到了很大的影响。
④ 使用方法繁琐,维护困难:用户使用软件需要掌握计算机的基本知识,或者接受专门的培训,否则面对多种使用手册、说明和繁琐的操作步骤,学会使用要花费很大力气。另一方面,如果遇到软件运行出了问题,且没有配备专职维护人员,又得不到开发部门及时的售后服务,软件的使用者更是徒唤奈何。
⑤ 软件工作渗透了人的因素:为高质量地完成软件项目,充分发掘人员的智力才能和创造精神,不仅要求软件人员具有一定的技术水平和工作经验,而且还要求他们具有良好的心理素质。软件人员的情绪和他们的工作环境,对他们工作有很大的影响。与其它行业相比,它的这一特点十分突出,必须给予足够的重视。
造成软件失误的原因:
在总结和分析足够数量失误的软件项目之后,看出其原因大多与管理工作有关。
在软件项目开始执行时,遇到的问题往往是:可供利用的资料太少;项目负责人的责任不明确;项目的定义模糊;没有计划或计划过分粗糙;资源要求未按时做出安排而落空;没有明确规定子项目完成的标准;缺乏使用工具的知识;项目已有更动,但预算未随之改变。
在软件项目执行的过程中可能会发生:项目审查只注意琐事而走过场;人员变动造成对工作的干扰;项目进行情况未能定期汇报;对阶段评审和评审中发现的问题如何处置未做出明确规定;资源要求并不像原来预计的那样大;未能做到严格遵循需求说明书;项目管理人员不足。
项目进行到最后阶段可能会发生:未做质量评价;取得的知识和经验很少交流 ;未对人员工作情况做出评定;未做严格的移交;扩充性建议未写入文档资料。
总之,问题涉及到软件项目研制中的计划制定、进度估计、资源使用、人员配备、组织机构和管理方法等软件管理的许多侧面。
四、习题
【9-1】软件过程是软件( A )中的一系列相关软件工程( B )的集合。每一个软件过程又是由一组( C )、项目( D )、软件工程产品和交付物以及质量保证(SQA)点等组成。一个软件过程可以用右图的形式来表示。首先建立一个( E )过程框架,其中定义了少量可适用于所有软件项目的框架( B ),再给出各个框架( B )的任务集合,最后是保护伞活动,如软件质量保证、软件配置管理以及测量等。软件过程模型的选择基于项目和应用的特点、采用的( F )和工具、要求的控制和需交付的产品。
( E )过程框架 框架( B ) 任务集合 ( C ) ( D )、交付物 SQA点 保护伞活动 9
供选择的答案:
A ? F. ① 工程 ② 公共 ③ 活动 ④ 生存期 ⑤ 方法 ⑥ 工作任务 ⑦ 功能 ⑧ 里程碑
【9-2】软件的度量包括( A )和( B )。软件产品的( A )包括产生的代码行数、执行速度等。软件产品的( B )则包括若干质量特性。我们还可进一步将软件度量如右图所示那样分类。软件( C )度量主要关注软件工程过程的结果;( D )度量则指明了软件适应明确和不明确的用户要求到什么程度;( E )
( E )度量 度量主要关注软件的一些特性而不是软件开发的
( D )度量 全过程。从图中还可看到另一种分类方法:面向
( C )度量 F ()的度量用于收集与直接度量有关软件工
面向( F )度量 程输出的信息和质量信息。面向( G )的度量
面向( G )度量 提供直接度量的尺度。面向( H )的度量则收
面向( H )度量 集有关人们开发软件所用方式的信息和人们理解
有关工具和方法的效率的信息。 供选择的答案:
A ? B. ① 直接度量 ② 尺度度量 ③ 二元度量 ④ 间接度量 C ? E. ① 质量 ② 技术 ③ 成本 ④ 生产率 F ? H. ① 过程 ② 对象 ③ 人 ④ 存取
⑤ 规模 ⑥ 进程 ⑦ 功能 ⑧ 数据
【9-3】估算资源、成本和进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。通常估算本身带有( A )。项目的复杂性越高,规模越大,开发工作量( B ),估算的( A )就( C )。项目的结构化程度提高,进行精确估算的能力就能( D ),而风险将( E )。有用的历史信息( F ),总的风险会减少。 供选择的答案:
A. ① 风范(范型) ② 风格 ③ 风险 ④ 度量 B ? F. ① 增加 ② 越多 ③ 降低 ④ 不变 ⑤ 越少 ⑥ 越高 ⑦ 越大
【9-4】 在考虑各种软件开发资源时,( A )是最重要的资源。如果把软件开发所需的资源画成一个金字塔形:在塔的上层是最基本的资源( A ),在底部为( B )。( B )包括硬件资源和软件资源。( C )、( D )和其它硬件设备属于硬件资源。IPSE工具属于软件资源中的( E )。为了提高软件的生产率和软件产品的质量,可建立( F )。 供选择的答案: A, B. ① 方法 ② 人力 ③ 工具 ④ 上下文环境 C, D. ① 虚拟机 ② 目标机 ③ 自动机 ④ 宿主机 E, F. ① 维护工具 ② 分析设计工具 ③ 支持工具 ④ 编程工具 ⑤ 可复用构件库 ⑥ 框架工具 ⑦ 原型化模拟工具
【9-5】任何软件项目都必须做好项目管理工作,最常使用的进度管理工具是( A ),当某一开发项目的进度有可能拖延时,应该( B )。对于一个典型的软件开发项目,各开发阶段需投入的工作量的百分比大致是( C )。各阶段所需不同层次的技术人员大致是( D ),而管理人员在各阶段所需数量也不同,相对而言大致是( E )。 供选择的答案:
A. ① 数据流图 ② 程序结构图 ③ 因果图 ④ PERT图 B. ① 增加新的开发人员 ② 分析拖期原因加以补救 ③ 从别的小组抽调人员临时帮忙 ④ 推迟预定完成时间
10
投入 ① ② ③ ④ 需求分析 25 10 15 5 初级 中级 高级 中级 多 中 多 少 设 计 25 20 30 10 高级 中级 中高级 中高级 中 中 少 多 编 码 25 30 15 65 高级 高级 初级 中级 少 中 多 少 测 试 25 40 40 30 高级 中级 中高级 初级 中 中 多 多 C. 工作量
技术人 D. 员水平
管理人 ① ② ③ ④ ① ② ③ ④ E. 员数量
【9-6】一个32KDSI的声音输入系统是一个输入原型,或是一个可行性表演模型。所需可靠性非常低,因为它不打算投入生产性使用。把此模型看做半独立型软件。试问该软件的名义工作量和实际工作量。
【9-7】风险分析实际上是4个不同的活动,按顺序依次为( A )、( B )、风险评价和( C )。在风险评价时,应当建立一个三元组:[ ri, li, xi ],ri是风险描述,li是( D ),而xi是风险的影响。一个对风险评价很有用的技术是定义( E )。( F )、( G )、( H )是三种典型的( E )。在做风险分析的上下文环境中一个( E )就存在一个单独的点,叫做参照点或( I )。在这个点上要公正底给出判断。实际上,参照点能在图上表示成一条平滑的曲线的情况很少,多数情况它是一个( J )。 供选择的答案:
A ? C. ① 风险驾驭和监控 ② 风险识别 ③ 风险估计 ④ 风险消除 D. ① 风险的大小 ② 风险的概率 ③ 风险的时间 ④ 风险的范围 E. ① 风险参照水准 ② 风险度量 ③ 风险监控 ④ 风险工具 F ? H. ① 生产率 ② 功能 ③ 成本 ④ 进度 ⑤ 范围 ⑥ 性能 I, J. ① 凹点 ② 崩溃点 ③ 终点 ④ 区域 ⑤ 拐点 ⑥ 原点 【9-8】对于一个小型的软件开发项目,一个人就可以完成需求分析、设计、编码和测试工作。但随着软件项目规模增大,需要有多人共同参与同一软件项目的工作。当几个人共同承担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的( A )问题,即通信问题。通信需花费时间和代价,会引起软件错误( B ),( C )软件生产率。如果一个软件开发小组有n个人,每两人之间都需要通信,则共有( D )条通信路径。假设一个人单独开发软件,生产率是5000行/人年,且在每条通信路径上耗费的工作量是250行/人年。若4个人组成一个小组共同开发这个软件,则小组中每个人的软件生产率为( E )。若小组有6名成员,则小组中每个成员的软件生产率为( F )。因此,有人提出,软件开发小组的规模不能太大,人数不能太多,一般在( G )人左右为宜。 供选择的答案: A. ① 分配 ② 管理 ③ 接口 ④ 协作 B, C. ① 降低 ② 增加 ③ 不变 D. ① n(n+1)/2 ② n(n-1)/2 ③ n(n-1)(n-2)/6 ④ n2/2 E, F. ① 4875 ② 4375 ③ 4625 ④ 5735
11
G. ① 8~15 ② 1~2 ③ 2~5 ④ 2~8
【9-9】软件项目的进度管理有许多方法,但( A )不是常用的进度控制图示方法。在几种进度控制图示方法中,( B )难以表达多个子任务之间的逻辑关系,使用( C )不仅能表达子任务之间的逻辑关系,而且可以找出关键子任务。在( C )中,用带箭头的边表示( D ),用圆圈结点表示( E ),它标明( D )的( F )。 供选择的答案:
A ? C. ① 甘特图 ② IPO ③ PERT ④ 时标网状图 D ? F. ① 数据流 ② 控制流 ③ 事件 ④ 处理 ⑤ 起点或终点 ⑥ 任务
【9-10】软件项目组织的原则是( A )、( B )和( C )。一般有( D )、( E )、( F )三种组织结构的模式。( F )实际上是( D )和( E )两种模式的复合。( E )这种模式在小组之间的联系形成的接口较多,但便于软件人员熟悉小组的工作,进而成为这方面的专家。 供选择的答案:
A ? C. ① 推迟责任的落实 ② 尽早落实责任 ③ 减少接口 ④ 增加联系 D ? F. ① 矩阵形模式
⑤ 责权分离 ⑥ 责权均衡
② 主程序员小组模式 ③ 按课题划分的模式
④ 按职能划分的模式 ⑤ 民主制小组模式
【9-11】软件开发小组的目的是发挥集体的力量进行软件研制。因此,小组从培养( A )的观点出发进行程序设计消除软件的( B )的性质。通常,程序设计小组的组织形式有三种,如下图所示的a属于( C ),b属于( D ),c属于( E )。
(a) (b) (c)
供选择的答案:
A, B. ① “局部” C ? E. ① 层次式小组
② “全局” ③ “集体” ④ “个人” ② 民主制小组 ③ 主程序员制小组
五、习题解答
【9-1】A. ④, B. ③, C. ⑥, D. ⑧, E. ②, F. ⑤。
软件过程是软件生存期中的一系列相关软件工程活动的集合。每一个软件过程又是由一组工作任务、项目里程碑、软件工程产品和交付
公共过程框架 物以及质量保证(SQA)点等组成。一个软件过程
框架活动 可以用右图的形式来表示。首先建立一个公共过
任务集合 程框架,其中定义了少量可适用于所有软件项目
工作任务 的框架活动,而不考虑它们的规模和复杂性。再里程碑、交付物 给出各个框架活动的任务集合,使得框架活动能SQA点 够适合于项目的特点和项目组的需求。最后是保 保护伞活动 12
护伞活动,如软件质量保证、软件配置管理以及测量等,它们独立于任何一个框架活动并将贯穿于整个过程。软件过程模型的选择基于项目和应用的特点、采用的方法和工具、要求的控制和需交付的产品。
【9-2】A. ①, B. ④, C. ④, D. ①, E. ②, F. ⑤, G. ⑦, H. ③。
软件的度量包括直接度量和间接度量。软件产品的直接度量包括产生的代码行数、执行速度、存储量大小、在某种时间周期中所报告的差错数。软件产品的间接度量则包括功能性、复杂性、效率、可靠性、可维护性和许多其它的质量特性。只要事先建立特定的度量规程,很容易做到直接度量开发软件所产生的代码行数
技术度量 等。但是,软件的功能性、效率、可维护性等质
质量度量 量特性却很难用直接度量判明,只有通过间接度
生产率度量 量才能推断。我们还可进一步将软件度量如图所
面向规模的度量 示那样分类。软件生产率度量主要关注软件工程
面向功能的度量 过程的结果;软件质量度量则指明了软件适应明
面向人的度量 确和不明确的用户要求(软件使用合理性)到什么
程度;技术度量主要关注软件的一些特性(如逻辑
复杂性、模块化程度)而不是软件开发的全过程。从图中还可以看到另一种分类方法:面向规模的度量用于收集与直接度量有关的软件工程输出的信息和质量信息。面向功能的度量提供直接度量的尺度。面向人的度量则收集有关人们开发软件所用方式的信息和人们理解有关工具和方法的效率的信息。
估算资源、成本和进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。通常估算本身带有( A )。项目的复杂性越高,规模越大,开发工作量( C ),估算的( A )就( D )。项目的结构化程度的提高,进行精确估算的能力就能( E ),而风险将( F )。有用的历史信息( G ),总的风险会减少。 供选择的答案:
A. ①风范(范型) ② 风格 ③ 风险 ④ 度量 B ? G. ① 增加 ② 越大 ③ 降低 ④ 不变 ⑤ 减少 ⑥ 越高
【9-3】A. ③, B. ②, C. ⑦, D. ①, E. ③, F. ②。 估算资源、成本和进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。估算本身带有风险。增加风险的各种因素如图所示。
项目的复杂性对于增加软件估算的不确定性影响很大。复杂性越高,估算的风险就越高。但是,复杂性是相对度量,它与项目参加人员的经验有关。
项目的规模对于软件估算的精确性和功效影响也比较大。因为随着软件规模的扩大,软件元素之间的相互依赖、相互影响程度迅速增加,因而估算的一个重要方法──问题分解会变得更加困难。由此可知,项目的规模越大,开发工作量越大,估算的风险越高。 项目的结构化程度也影响项目估算的风险。所谓结构性是指功能分解的简便性和处理信息的层次性。结构化程度的提高,进行精确估算的能力就能提高,而风险将减少。
13
历史信息的有效性也影响估算的风险。回顾过去,就能够仿效做过的事,且改进出现问题的地方。在对过去的项目进行综合的软件度量之后,就可以借用来比较准确地进行估算,安排进度以避免重走过去的弯路,而总的风险也减少了。
风险靠对不确定性程度定量地进行估算来度量,此外,如果对软件项目的作用范围还不十分清楚,或者用户的要求经常变更,都会导致对软件项目所需资源、成本、进度的估算频频变动,增加估算的风险。
【9-4】A. ②, B. ③, C. ②, D. ④, E. ⑥, F. ⑤。其中,C、D的答案顺序可互换。 软件项目计划的第二个任务是对完成该软件项目所需的资源进行估算。若把软件开发所需的资源画成一个金字塔,在塔的底部必须有现成的用以支持软件开发的工具──硬件工具及软件工具,在塔的高层是最基本的资源──人。在考虑各种软件开发资源时,人是最重要的资源。在安排开发活动时必须考虑人员的技术水平、专业、人数、以及在开发过程各阶段中对各种人员的需要。
人 工具 硬件是作为软件开发项目的一种工具而投入的。在软件项目计划期间,考虑三种硬件资源:宿主机(软件开发时使用的计算机及外围设备);目标机(运行已开发成功软件的计算机及外围设备);其它硬件设备(专用软件开发时需要的特殊硬件资源)。宿主机连同必要的软件工具构成一个软件开发系统。通常这样的开发系统能够支持多种用户的需要,且能保持大量的由软件开发小组成员共享的信息。但在许多情况下,除了那些很大的系统之外,不一定非要配备专门的开发系统。因此,所谓硬件资源,可以认为是对现存计算机系统的使用,而不是去购买一台新的计算机。宿主机与目标机可以是同一种机型。
软件在开发期间使用了许多软件工具来帮助软件的开发。这些软件工具叫做计算机辅助软件工程(CASE)。主要的软件工具分类为:业务系统计划工具集;项目管理工具集;支持工具;分析和设计工具;编程工具;组装和测试工具;原型化和模拟工具;维护工具;框架工具。这些框架工具能够提供一个建立集成项目支撑环境(IPSE)的框架。在多数情况,框架工具实际提供了数据库管理和配置管理的能力与一些实用工具,能够把各种工具集成到IPSE中。
为了促成软件的复用,以提高软件的生产率和软件产品的质量,可建立可复用的软件构件库。根据需要,对软件构件稍做加工,就可以构成一些大的软件包。这要求这些软件构件应加以编目,以利引用,并进行标准化和确认,以利于应用和集成。 【9-5】A. ④, B. ②, C. ③, D. ③, E. ①。 PERT技术叫做计划评审技术,是安排开发进度,制定软件开发计划的最常用的方法。它采用网络图来描述一个项目的任务网络。通常用两张表来定义网络图。一张表给出与一特定软件项目有关的所有任务(也称为任务分解结构),另一张表给出应当按照什么样的次序来完成这些任务(有时称为限制表)。
当某一开发项目的进度有可能拖延时,应该分析拖期原因加以补救,切忌中途加人,否则反而会降低软件生产率。对于一个典型的软件开发项目,各开发阶段需投入的工作量的百分比大致遵循40-20-40规则。即在整个软件开发过程中,编码的工作量占20%,编码前的工作量占40%,编码后的工作量占40%。
对于一些规模较小的项目(1个人年或者更少),只要向专家做些咨询,也许一个人就可以完成所有的软件工程步骤。而对一些规模较大的项目,在整个软件生存期中,各种人员的参与情况是不一样的。如图所示。在软件计划和需求分析阶段,对软件系统进行定义,主要工作是由管理人员和高级技术人员在做,初级技术人员参与较少。待到对软件进行具体设计、编码及测试时,管理人员逐渐减少对开发工作的参与,高级技术人员主要在设计方面把关,具体编码及调试参与较少,大量的工作将由初级技术人员去做。到了软件开发的后期,需要
14
对软件进行检验、评价和验收,管理人员和高级技术人员又将投入很多的精力。
【9-6】 对于这样一个规模为10KDSI的商用微机远程通信的嵌入式软件,使用中间
1.12
COCOMO模型进行软件成本估算。名义工作量为MM = 3.0*(10) = 146 (人月)。又查表知 f1 = 0.75,其它 fi = 1.00,则最终计算出的实际工作量为MM = 146 * 0.75 = 110 (人月)。 【9-7】A. ②, B. ③, C. ①, D. ②, E. ①, F. ③, G. ④, H. ⑥, I. ②, J. ④。其中,F、G、H的答案顺序可互换。
风险分析实际上是4个不同的活动: 风险识别,风险估计,风险评价和风险驾驭与监控。 在进行风险评价时,可建立一系列三元组:[ ri, li, xi ],其中,ri是风险,li是风险出现的可能性(概率),而xi是风险产生的影响。在做风险评价时,应进一步审查在风险估计时所得到的估计的准确性,尝试对已发现的风险进行优先排队,并着手考虑控制和∕或消除可能出现风险的方法。
在做风险评价时常采用的一个非常有效的方法就是定义风险参照水准。对于大多数软件项目来说,性能、支持、成本、进度就是典型的风险参照水准。就是说,对于成本超支、进度延期、性能降低、支持困难,或它们的某种组合,都有一个水准值,超出它就会导致项目被迫终止。在软件风险分析的上下文中,一个风险参照水准就有一个点,叫做参照点或崩溃点。在这个点上,要公平地给出可接受的判断,看是继续执行项目工作,
还是终止它们(出的问题太大)。实际上,参照点能在
图上被表示成一条平滑的曲线的情况很少。在多数情况中,它是一个区域,在此区域中存在许多不确定性的范围。
【9-8】A. ③, B. ②, C. ①, D. ②, E. ③, F. ②, G. ④。
对于一个小型的软件开发项目,一个人就可以完成需求分析、设计、编码和测试工作。但是,随着软件开发项目规模的增大,就会有更多的人共同参与同一软件项目的工作。例如10个人1年可以完成的项目,若让1个人干10年是不行的。因此,需要多人组成开发小组共同参加一个项目的开发。但是,当几个人共同承担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的接口问题,即所谓通信问题。通信需花费时间和代价,会引起软件错误增加,降低软件生产率。
若两个人之间需要通信,则称在这两个人之间存在一条通信路径。如果一个软件开发小组有n个人,每两人之间都需要通信,则总的通信路径有n(n-1)/2条。
15
假设一个人单独开发软件,生产率是5000行/人年。若4个人组成一个小组共同开发这个软件,则需要6条通信路径(图(a))。若在每条通信路径上耗费的工作量是250行/人年。则小组中每个人的软件生产率降低为
5000-6×250/4 = 5000-375 = 4625 行/人年。
如果小组有6名成员,通信路径增加到15条(图(b))。每条通信路径消耗的工作量不变,则小组中每个成员的软件生产率降低为
5000-15×250/6 = 5000-625 = 4375 行/人年。
从上述简单分析可知,一个软件任务由一个人单独开发,生产率最高;而对于一个稍大型的软件项目,一个人单独开发,时间太长。因此软件开发小组是必要的。有人提出,软件开发小组的规模不能太大,人数不能太多,一般在2~8人左右为宜。 【9-9】A. ②, B. ①, C. ③, D. ⑥, E. ③, F. ⑤。
软件项目的进度计划和工作的实际进展情况,对于较大的项目来说, 难以用语言叙述清楚。特别是表现各项任务之间进度的相互依赖关系,需要采用图示的方法。常用的图示方法
PERT等,IPO图是用于在结构化设计中描述程序结构中输入―处理―有甘特图、时标网状图、
输出的,不是进度控制的图示工具。
甘特图以水平线段表示任务的工作阶段;线段的起点和终点分别对应着任务的开工时间和完成时间;线段的长度表示完成任务所需的时间。从甘特图上可以很清楚地看出各子任务在时间上的对比关系,并以文档编制与评审作为软件开发进度的里程碑。甘特图的优点是标明了各任务的计划进度和当前进度,能动态地反映软件开发进展情况。缺点是难以反映多个任务之间存在的复杂的逻辑关系。
时标网状图克服了甘特图的缺点,用具有时标的网状图来表示各个任务的分解情况,以及各个子任务之间在进度上的逻辑依赖关系(参看下图)。时标网状图中的箭头(直线、折线)表示各任务间的(先决)依赖关系;箭头上的名字表示任务代号;箭头的水平长度表示完成该任务的时间;而圆圈表示一个任务结束、另一个任务开始的事件。
PERT图也叫做计划评审技术,它采用网络图来描述一个项目的任务网络。不仅可以表
16
达子任务的计划安排,还可以在任务计划执行过程中估计任务完成的情况,分析某些子任务完成情况对全局的影响,找出影响全局的区域和关键子任务,以便及时采取措施,确保整个项目的完成。在PERT图中,用箭头表示任务或子任务,箭头上附带的数字表示完成任务所需的时间;圆形结点表示事件,每一事件标明某些任务都已完成,下面另外一些任务将要开始。
【9-10】A. ②, B. ③, C. ⑥, D. ③, E. ④, F. ①。其中,A、B、C答案顺序可互换。
在建立项目组织时应注意到以下原则:
? 尽早落实责任:在软件项目工作的开始,要尽早指定专人负责。使他有权进行管理,并对任务的完成负全责。
? 减少接口:在开发过程中,人与人之间的联系是必不可少的,存在着通信路径。一个
因此,组织的生产率是和完成任务中存在的通信路径数目是相互抵触的。要有合理的人员分
工、好的组织结构、有效的通信,减少不必要的生产率的损失。
? 责权均衡:软件经理人员所负的责任不应比委任给他的权力还大。 通常有三种组织结构的模式可供选择:
? 按课题划分的模式:把软件开发人员按课题组成小组,小组成员自始至终参加所承担课题的各项任务。他们应负责完成软件产品的定义、设计、实现、测试、复查、文档编制、甚至包括维护在内的全过程。
? 按职能划分的模式:把参加开发项目的软件人员按任务的工作阶段划分成若干个专业小组。要开发的软件产品在每个专业小组完成阶段加工(即工序)以后,沿工序流水线向下传递。例如,分别建立计划组、需求分析组、设计组、实现组、系统测试组、质量保证组、维护组等。各种文档资料按工序在各组之间传递。这种模式在小组之间的联系形成的接口较多,但便于软件人员熟悉小组的工作,进而变成这方面的专家。
? 矩阵形模式:这种模式实际上是以上两种模式的复合。一方面,按工作性质,成立一些专门组,如开发组、业务组、测试组等;另一方面,每一个项目又有它的经理人员负责管理。每个软件人员属于某一个专门组,又参加某一项目的工作。 【9-11】A. ②, B. ④, C. ③, D. ②, E. ①。
软件开发小组的主要目的是发挥集体的力量进行软件研制。因此,小组培养从“全局”的观点出发进行程序设计,消除软件的“个人”性质,并促进更充分的复审,小组提倡在共同工作中互相学习从而改善软件的质量。
小组内部人员的组织形式对生产率也有影响。现有的组织形式有三种。
① 主程序员制小组:突出了主程序员的领导,强调主程序员与其他技术人员的直接联系,简化了人际通信。这种集中领导的组织形式能否取得好的效果, 很大程度上取决于主程序员的技术水平和管理才能。美国的软件产业中大多是主程序员制的工作方式。
② 民主制小组:组内成员之间可以平等地交换意见,工作目标的制定及做出决定都由全体成员参加。这种组织形式强调发挥小组每个成员的积极性,要求每个成员充分发挥主动精神和协作精神。有人认为这种组织形式适合于研制时间长、开发难度大的项目。日本在发展计算机事业中,组织软件开发大多采用这种形式的开发小组,取得了很好的效果。
③ 层次式小组:这种结构比较适合项目本身就是层次结构状的课题。因为这样可以把项目按功能划分成若干个子项目,把子项目分配给基层小组,由基层小组完成。基层小组的领导与项目负责人直接联系。这种组织方式比较适合于大型软件项目的开发。
以上三种组织形式可以根据实际情况,组合起来灵活运用。例如,较大的软件项目也许是把主程序员小组组织成层次式结构;也许基层小组的领导又是一个民主制小组的成员。
17
【例1】软件产品质量是生产者和用户都十分关心的问题,早期的质量管理只看到产品的质量,近年来质量管理向( A )发展,一个重要的基本假设是( B )直接影响( C )。这一假设最初是根据制造业情况作出的。( D )自然就会得到高质量的产品。( D )的思想是美国工程师戴明(W. E. Deming)提出来的,戴明等人在质量管理中引入统计质量控制的概念,以降低软件产品缺陷数作为( D )的目标,请选择合适的答案完成下面有关软件质量与过程的关系的示意图。
H E 评价产品质量
供选择的答案:
A ? D. ① 过程的质量 ④ 过程质量的控制
⑦ 技术的革新
E ? H. ① 定义过程
④ 改进过程
答案:A. ④, B. ①, C. ②,
F 质量是否合格 G ② 产品的质量 ⑤ 过程的改进 ③ 产品质量的控制
⑥ 产品的改进
② 将过程标准化 ③ 开发产品
⑤ 质量控制
D. ⑤ E. ③ F. ④ G. ② H. ①
分析:软件产品质量是生产者和用户都十分关心的问题,早期的质量管理只看到产品的质量,实行的是最终产品检验的方法,对质量进行控制。把不合格的产品挑拣出来报废或返工后,得到的产品就是合格的。
近年来质量管理向过程质量的控制方向发展,一个重要的基本假设是开发过程的质量直接影响交付产品的质量。这一假设最初是根据制造业情况作出的。因为在制造业中,产品的质量与生产过程有着十分密切的关系,过程的改进自然就会得到高质量的产品。
过程改进的思想是美国工程师戴明(W. E. Deming)提出来的。二次大战后他到日本工作,在他的指导下,日本产业界一直坚持不断地改进过程,取得了很好的效果。戴明等人在质量管理中引入统计质量控制的概念。这一概念的基础是在产品缺陷数和过程之间建立联系,以降低产品缺陷数作为过程改进的目标。过程改进直到过程成为可以重复的为止,就是说,直到过程的结果成为预期的为止。这时,产品的缺陷数就降下来了,然后再将过程标准化,这时下一步的改进又开始了。产品质量与过程的关系的示意图如下。
定义过程
开发产品
评价产品质量 改进过程 质量是否合格 将过程标准化 18
【例2】国际标准化组织和国际电工委员会于1991年发布了关于软件质量的标准ISO∕IEC 9126―1991。我国于1996年将其等同采用,成为国家标准GB∕T16260―1996《软件产品评价、质量特性及其使用指南》。在此标准中规定了6个质量特性及相关的( A )个质量子特性。质量特性包括( B )、( C )、( D )、效率、可维护性和可移植性等。准确性属于( B ),容错性属于( C ),易学习性属于( D )。 供选择的答案: A. ① 12 B ? D. ① 可靠性
② 16 ③ 21 ④ 22
② 适应性 ③ 可使用性 ④ 安全性
⑤ 一致性 ⑥ 功能性 ⑦ 依从性 ⑧ 互操作性 ⑨ 时间特性 ⑩ 资源特性 答案:A. ③, B. ⑥, C. ①, D. ③ 分析:在ISO∕IEC 9126―1991中规定了6个质量特性及相关的21个质量子特性。如下表所示。这些特性的规定是基于用户的观点的。
功 能 性 适合性 准确性 互操作性 依从性 安全性 成熟性 容错性 易恢复性 与一组功能及其指定的性质的存在有关的一组属性。功能是指能满足规定或隐含需求的那些功能。 与对规定任务能否提供一组功能以及这组功能能否适合有关的软件属性。 与能否得到正确的或相符的结果或效果有关的软件属性。 与同其它指定系统进行交互操作的能力有关的软件属性。 使软件服从有关的标准、约定、法规及类似规定的软件属性。 与避免对程序及数据的非授权故意或意外访问的能力有关的软件属性。 与在规定的一段时间内和规定的条件下,软件维持其性能水平有关的能力。 与由软件故障引起失效的频度有关的软件属性。 与在软件错误或违反指定接口情况下,维持指定的性能水平的能力有关的软件属性。 与在故障发生后重新建立其性能水平并恢复直接受影响数据的能力,以及为达此目的所需的时间和有关的软件属性。 可使用性 与为使用所需的努力和由一组规定的或隐含的用户对如此使用所做的评价有关的一组属性。 易理解性 易学习性 易操作性 时间特性 资源特性 易分析性 易变更性 稳定性 易测试性 适应性 易安装性 遵循性 与用户为理解逻辑概念及其应用性所需努力有关的软件属性。 与用户为学习其应用(例如操作控制、输入、输出)所需努力有关的软件属性。 与用户为进行操作或操作控制所需努力有关的软件属性。 与响应和处理时间以及软件执行其功能时的吞吐量有关的软件属性。 与软件执行其功能时所使用的资源量以及使用资源的持续时间有关的软件属性。 与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性。 与进行修改、调试或适应环境变化所需努力有关的软件属性。 与修改造成未预料后果的风险有关的软件属性。 为确认经修改软件所需努力有关的软件属性。 与一软件无需采用有别于为该软件准备的处理和手段就能适应规定的环境有关的软件属性。 与在指定环境下安装软件所需努力有关的软件属性。 使软件服从与可移植性有关的标准或约定的软件属性。 与软件从一种环境转移到另一环境的能力有关的一组属性。 可 靠 性 效 率 与在规定条件下,软件的性能水平与所用资源量之间的关系有关的一组属性。 可维护性 与进行规定的修改所需努力有关的一组属性。 可移植性 19
易替换性 与一软件在该软件环境中用来替代指定的其它软件的可能和努力有关的软件属性。 【例3】一个软件产品开发完成投入使用后,常常由于各种原因需要对它做适当的变更。在软件的使用过程中,软件原来的( A )可能不再适应用户的要求,需要进行变更;软件的工作环境也可能发生变化,最常见的是配合软件工作的( B )有变动;还有一种情况是在软件使用过程中发现错误,需要进行修正。通常把软件交付使用后做的变更称为( C )。软件投入使用后的另一项工作是( D ),针对这类软件实施的软件工程活动,主要是对其重新实现,使其具有更好的( E ),包括软件重构、重写文档等。( D )和新的软件开发工作的主要差别在于( H )。我们把常规的软件开发称为( F ),而( G )是从代码开始推导出设计或是规格说明来。 供选择的答案:
A, B. ① 环境 ② 软件 ③ 硬件 ④ 功能和性能 ⑤ 要求 C, D, F, G. ① 逆向工程 ② 正向工程 ③ 软件再工程 ④ 维护 ⑤ 设计 E. ① 可靠性 ② 可维护性 ③ 可移植性 ④ 可修改性 H. ① 使用的工具不同 ② 开发的过程不同 ③ 开发的起点不同 ④ 要求不同
答案:A. ④, B. ③, C. ④, D. ③, E. ②, F ②, G ①, H ③
分析:一个软件产品开发完成投入使用后,常常由于各种原因需要对它做适当的变更。在软件的使用过程中,软件原来的功能和性能可能不再适应用户的要求,需要进行变更;软件的工作环境也可能发生变化,最常见的是配合软件工作的硬件有变动;还有一种情况是在软件使用过程中发现错误,需要进行修正。通常把软件交付使用后做的变更称为维护。软件维护是软件生存期中的一个重要阶段。
软件投入使用后的另一项工作是软件再工程,它和上述的软件维护很有关系,但不是一回事,只是近年来才受到重视。
近年来,随着计算机的普及,各产业部门、政府机构等在软件方面的投资迅速增长。几乎所有的部门、机构的活动都采用了计算机。但大量软件的维护不是轻松的事,需要维护的软件越来越多,而维护工作的开销又大得惊人,这就使得许多机构不可能在开发新的软件上再投资来提高自己的工作能力。另一方面,待维护的软件又常常是一些单位业务工作的关键,其中渗入了许多业务知识和工作经验,这些知识和经验除在软件中体现外并没有其它记载。如果这些软件是早期开发的,当时没有采用软件工程技术,程序结构很差,甚至使用的是陈旧的程序设计语言,或者这些软件的文档已经过时,也可能原来就极不完整,当时的开发人员早已不知去向,使用单位没有人能够了解和看懂软件内部的细节,这样的软件不可能对他们做维护工作。针对这类软件实施的软件工程活动,主要是对其重新实现,使其具有更好的可维护性,包括软件重构、重写文档,或是改用新的编程语言,或是将其数据转移到现行的数据库管理系统中,或是在分布式平台上实现等。
软件再工程和新的软件开发工作的主要差别在于开发的起点不同。再工程工作并不是从编写需求规格说明开始,而是将原有的软件作
为规格说明。正因为如此,我们把常规的软件开发称为正向工程,而逆向工程是从代码开始推导出设计或是规格说明来。再工程的最终目标仍然是产生新的、更容易维护的新系统。 【例4】软件维护是软件生存期的最后一个阶维护要求 段。软件工程学针对维护工作的主要目标是提软件 代码 配置 高( A ),降低( B )。软件的( C )、
G
20 K H
定级别上每个关键过程域的内容是否实施,关键过程域的目标是否达到,同时应考察相应的劳动力条例是否被广泛执行等。一个企业的成熟度级别是所有关键过程域被实施的最低级别。软件企业通过评估结果可以了解关键过程域方面的强项和弱项,明确努力的方向。P-CMM模型并不禁止处于较低成熟度级别上的企业在需要的时候实施高一级关键过程域的内容。但是,由于每一级都是向上一级进化的基础,所以,跳越成熟度级别的进化是有风险的。基于P-CMM 的改进工作和其它任何发展项目一样,第一要有计划,第二要跟踪其发展,第三要有专人负责。卡内基―梅隆大学SEI的P-CMM顾问委员会建议:在软件工程小组内加入人力资源管理人员,以进行基于P-CMM的改进工作。这样,带给软件机构管理层的信息就是:一个致力于改善整个软件过程能力的项目强调的是过程、技术和人员,缺一不可。 【10-14】A. ③, B. ④, C. ③, D. ④, E. ②, F. ①。
ISO 9000族标准是指国际标准化组织中的质量管理和质量保证技术委员会(ISO∕TC176)制定的标准,现有20个标准,可分为5类:质量术语标准,质量保证标准,质量管理标准,质量管理和质量保证标准的选用和实施指南、支持性技术标准。如下表所示。
① 质量术语标准
ISO 8402
④ 标准选用与实施指南 ISO9000 -1 选择和使用 -2 实施 -3 计算机软件 -4 可信性大纲 ⑤ 支持性技术标准
ISO 10005 质量计划 ISO 10007 技术状态 ISO 10011 -1 审核 -2 审核员 -3 审核管理 ISO 10012 -1 测量设备 -2 测量过程 ISO 10013 质量手册 ISO9001 ISO9002 ISO9003 ② 质量保证标准 设计、开发、生产、安装和服务 生产、安装和服务 最终检验和试验 ③ 质量管理标准 ISO9004 -1 指南 -2 服务指南 -3 流程性材料 -4 质量改进 【10-15】A. ④, B. ⑥, C. ②, D. ①, E. ⑤, F. ②, G. ③, H. ②, I. ①, J. ④。其中,I和J的答案顺序可互换。
质量体系是一种质量管理制度。质量体 系是通过若干过程来实现的并有一组质量体
质量 系文件,如图所示。过程是将输入转化为输第一级 ( A层) 手册 出的一组彼此相关的资源和活动。过程本身
程序文件 第二级 ( B层) 具有增值的效果,是一种有效益的行为。质
作业指导书 量管理是通过质量体系来实现的。一个组织
质量记录 第三级 ( C层) 机构建立自己的质量体系,并使之有效地运行,使达到质量管理目标的重要手段。
为明确规定、系统地描述质量体系的各项要求,使得相关人员能够理解和方便地实施,有必要建立质量体系文件。质量体系文件大致可分为三个层次,如图所示。 【10-16】A. ③, B. ①, C. ②, D. ④, E. ⑥, F. ③。
ISO 9000-3是计算机软件机构实施ISO 9001的指南性标准。它的指南性主要表现在: ⅰ)对于针对的标准给予特定的说明与解释,即从软件的角度对ISO 9001标准的内容给出具体的说明和解释。ISO 9001提供了20个质量体系要素,ISO 9000-3则对照其每一个要素,逐一作出说明和解释。
ⅱ)指南性的标准不是认证审核的依据。ISO 9001是认证审核的依据。在认证审核时考
46
察的是申请认证的软件机构贯彻实施ISO 9001的情况,而不考察有无违背ISO 9000-3 条文的情况。事实上,者两个标准文本的叙述语气也是有差别的。在ISO 9001的质量体系要素的每一条都强调了所提要求的强制性,使用了“应该(shall)”如何的用语,而在ISO 9000-3的各条解释中,由于是建议性指南,普遍使用了“最好(should)”如何的提法。
《ISO∕IEC 12207 :1995信息技术―软件生存期过程》将整个软件生存期分为17个过程,并且对每一个过程按“过程-活动-任务”的三个层次具体做了解释,为我们进一步理解ISO 9000-3提供了帮助。
三、例题分析
【例1】为了把握软件开发各个环节的正确性和协调性,人们需要进行( A )和( B )工作。( A )的目的是想证实在一给定的外部环境中软件的逻辑正确性。它包括( C )和( D ),( B )则试图证明在软件生存期各个阶段,以及阶段间的逻辑( E )、( F )和正确性。 供选择的答案: A, B. ① 操作 ② 确认 ③ 验证 ④ 测试 ⑤ 调试 C, D. ① 用户的确认 ② 需求规格说明的确认 ③ 程序的确认 ④ 测试的确认
E, F. ① 可靠性 ② 独立性 ③ 协调性 ④ 完备性 ⑤ 扩充性 答案:A. ② B. ③ C. ② D. ③ E. ③ F. ④
分析:到程序的测试为止,软件开发工作已经经历了许多环节,每个环节都可能发生问题。为了把握各个环节的正确性,人们需要进行各种确认和验证工作。
所谓确认,是一系列的活动和过程,其目的是想证实在一个给定的外部环境中软件的逻辑正确性。它包括需求规格说明的确认和程序的确认,而程序的确认又分为静态确认与动态确认。静态确认一般不在计算机上实际执行程序,而是通过人工分析或者程序正确性证明来确认程序的正确性;动态确认主要通过动态分析和程序测试来检查程序的执行状态,以确认程序是否有问题。
所谓验证,则试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。下图中所示的就是软件生存期各个重要阶段之间所要保持的正确性。它们就是验证工作的主要对象。
47
确认与验证工作都属于软件测试。在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节上发生了问题都可能在软件测试中表现出来。
【例2】测试过程需要三类输入:( A )、( B )和( C )。请选择正确的答案填入下图中以完成测试信息处理的全过程。
D
E
A B F
C
供选择的答案:
A ? C. ① 接口选择
② 软件配置 ③ 硬件配置
④ 测试配置 ⑤ 测试环境 ⑥ 测试工具 D ? F. ① 排错 ② 可靠性分析 ③ 结果分析 ④ 数据分类 答案:A. ② B. ④ C. ⑥ D. ③ E. ① F. ② 分析:测试信息流如图所示。测试过程需要三类输入:
(1)软件配置:包括软件需求规格说明、软件设计规格说明、源代码等;
(2)测试配置:包括表明测试工作如何进行的测试计划、给出测试数据的测试用例、控制测试进行的测试程序等;实际上,测试配置是软件配置的一个子集。
(3)测试工具:为提高软件测试效率,测试工作需要有测试工具的支持,它们的工作就是为测试的实施提供某种服务。例如,测试数据自动生成程序、静态分析程序、动态分析
48
程序、测试结果分析程序、以及驱动测试的测试数据库等等。
测试之后,要对所有测试结果进行分析,即将实测的结果与预期的结果进行比较。如果发现出错的数据,就意味着软件有错误,然后就需要开始排错(调试)。即对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档一般都要经过再次测试,直到通过测试为止。通过收集和分析测试结果数据,开始对软件建立可靠性模型。
测试信息流
最后,如果测试发现不了错误,那么几乎可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。这些错误最终不得不由用户在使用中发现,并在维护时由开发者去改正。但那时改正错误的费用将比在开发阶段改正错误的费用要高出40倍到60倍。
【例3】软件测试是软件质量保证的主要手段之一,测试的费用已超过( A )的30%以上。因此,提高测试的有效性十分重要。“高产”的测试是指( B )。根据国家标准GB 8566–88《计算机软件开发规范》的规定,软件的开发和维护划分为8个阶段,其中,单元测试是在( C )阶段完成的,集成测试的计划是在( D )阶段制定的,确认测试的计划是在( E )阶段制定的。 供选择的答案:
A. ① 软件开发费用 ② 软件维护费用 ③ 软件开发和维护费用 ④ 软件研制费用 ⑤ 软件生存期全部 B. ① 用适量的测试用例运行程序,证明被测程序正确无误 ② 用适量的测试用例运行程序,证明被测程序符合相应的要求 ③ 用少量的测试用例运行程序,发现被测程序尽可能多的错误 ④ 用少量的测试用例运行程序,纠正被测程序尽可能多的错误
C ? E. ① 可行性研究和计划 ② 需求分析 ③ 概要设计
④ 详细设计 ⑤ 实现 ⑥ 集成测试 ⑦ 确认测试 ⑧ 使用和维护 答案:A. ① B. ③ C. ⑤ D. ③ E. ②
分析:由于原始问题的复杂性,软件本身的复杂性和抽象性,软件开发各个阶段工作的多样性,以及参加开发各种层次人员之间工作的配合关系等因素,使得开发的每个环节都可能产生错误。这些错误和缺陷如果在软件交付投入生产性运行之前不能加以排除的话,在运行中迟早会暴露出来。但到那时,不仅改正这些错误的代价更高,而且往往造成很恶劣的后果。因此,为了保证所开发软件的质量,测试是不可少的。测试的任务就是设计出测试用例,运行被测程序,发现软件中隐藏的的各种错误。目前在大中型软件项目的开发中。测试占据着重要的地位,测试所花费费用已超过软件开发费用的70%以上。
49
如何组织好测试,特别是如何选择好的测试用例,对于降低测试费用,保障测试质量有着重要的意义。一个高效的、或“高产”的测试,是指设计少量的测试用例,用它们来运行程序,发现被测程序的尽可能多的问题。
测试按照测试的内容可分为三种:单元测试(对程序单元或模块单独进行测试)、集成测试(把已通过单元测试的模块按照设计的要求组装起来,测试模块间的接口以及设计中的问题)和确认测试(对软件的有效性做全面测试,以确定开发的软件是否符合验收标准)。
根据国标GB 8566–88《计算机软件开发规范》的规定,软件的开发和维护划分为8个阶段:可行性研究及计划、需求分析、概要设计、详细设计、实现、集成测试、确认测试、使用维护,并且规定,单元测试是在实现阶段完成的,集成测试的计划应当在概要设计阶段制定的,确认测试的计划应当在需求分析阶段制定的。 【例4】集成测试也叫做( A )或( B )。通常,在( C )的基础上,将所有模块按照设计要求组装成为系统。子系统的集成测试特别称为( D ),它所做的工作是要找出子系统和系统需求规格说明之间的( E )。需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会( F ); 一个模块的功能是否会对另一个模块的功能产生不利的影响;各个( G )组合起来,能否达到预期要求的( H );( I )是否有问题;单个模块的误差累积起来是否会放大。 供选择的答案:
A ? D. ① 单元测试 ② 部件测试 ③ 组装测试 ④ 系统测试 ⑤ 确认测试 ⑥ 联合测试 E ? I. ① 子功能 ② 丢失 ③ 父功能 ④ 局部数据结构 ⑤ 全局数据结构 ⑥ 不一致 ⑦ 一致
答案:A. ③ B. ⑥ C. ① D. ② E. ⑥ F. ② G. ① H. ③ I. ⑤
A、B的答案可互换
分析:集成测试也叫做组装测试或联合测试。通常,在单元测试的基础上,将所有模块按照设计要求组装成为系统。子系统的集成测试特别称为部件测试,它所做的工作是要找出子系统和系统需求规格说明之间的不一致。这时需要考虑的问题是:
(1) 在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失; (2) 一个模块的功能是否会对另一个模块的功能产生不利的影响; (3) 各个子功能组合起来,能否达到预期要求的父功能; (4) 全局数据结构是否有问题;
(5) 单个模块的误差累积起来是否会放大。
【例5】如图所示的程序有四条不同的路径。分别表示为L1(a→c→e)、L2(a→b→d)、L3(a→b→e) 和L4(a→c→d),或简写为ace、abd、abe及acd。由于覆盖测试的目标不同,逻辑覆盖
方法可以分为语句覆盖、判定覆盖、条件覆盖、判定–条件覆盖、条件组合覆盖和路径覆盖。从备选的答案中选择适当的测试用例与之
匹配。( A )属于语句覆盖;( B )、( C )属于判定覆盖;( D )、( E )属于条件覆盖;( F )、( G )属于判定–条件覆盖;( H )属于条件组合覆盖;( I )属于路径覆盖。
供选择的答案:
A. ? I. ① 【(2,0,4),(2,0,3)】覆盖 ace; 【(1,1,1),(1,1,1)】覆盖 abd; 判断条件覆盖
50