软件工程导论
全书知识点梳理
第一章 概论
1.1什么是计算机软件?软件的特点是什么?
计算机软件是指计算机系统中的程序及其文档
软件的特点:
- 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算。
- 软件是被开发的或被设计的,没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大。
- 软件的使用没有硬件那样的机械磨损和老化问题。
1.2什么是软件工程?
软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本为目的。
1.3软件工程生存周期分哪几个阶段?分别简述各个阶段的任务。
1. 计算机系统工程
计算机系统工程的任务是确定待开发软件的总体要求和范围,以及该软件与其他计算机系统元素之间的关系,进行成本估算,作出进度安排,并进行可行性分析。
2. 需求分析
需求分析主要解决待开发软件要“做什么”的问题,确定软件的功能、性能、数据、界面等要求,生成软件需求规约(也称软件需求规格说明)。
3. 设计
系统设计的任务是设计软件系统的体系结构,详细设计的任务是设计各个组成成分的实现细节,包括局部数据结构和算法。
4. 编码
编码阶段的任务是用某种程序设计语言,将设计的结果转换为可执行的程序代码。
5. 测试
测试阶段的任务是发现并纠正软件中的错误和缺陷。
6. 运行和维护
1.4简述CMM的5个等级。
1. 初始级
2. 可重复级
3. 已定义级
4. 已管理级
5. 优化级
1.5简述各类软件过程模型的特点。
1. 瀑布模型:上一阶段的活动完成并经过评审才能开始下一阶段的活动,接受上一阶段活动的结果作为本阶段活动的输入,依据上一阶段活动的结果实施本阶段应完成的活动,对本阶段的活动进行评审。
2. 演化模型:从结构初始的原型出发,逐步将其演化成最终软件产品的过程。演化模型特别适用于对软件需求缺乏准确认识的情况。
3. 增量模型:将软件的开发过程分为若干个日程时间交错的线性序列,融合了瀑布模型的基本成分(重复地应用)和演化模型的迭代特征,特别适用于需求经常发生变化的软件开发。
4. 原型模型:开发人员和用户在“原型”上达成一致,缩短了开发周期,加快了工程进度,降低成本。
5. 螺旋模型:将原型实现的迭代特征与瀑布模型中控制的和系统化的方面结合起来,不仅体现了这两种模型的优点,而且增加了风险分析。
6. 喷泉模型:各个阶段没有明显的界限,开发人员可以同步进行开发,可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
7. 基于构件的开发模型:利用预先包装的构件来构造应用系统。
8. 形式化方法模型:易于发现需求的歧义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。
1.6简述CASE工具和环境的重要性。
CASE已被证明可以加快开发速度,提高应用软件生产率并保证应用软件的可靠品质。计算机专业人员利用计算机使他们的企业提高了效率,企业的各个部门通过使用计算机提高了生产率和效率,增强了企业的竞争力并使之带来了更多的利润。
习题:
1、对于下列每一个过程模型,分别列举一个可以适用的具体软件项目,并说明在开发中如何应用该模型。
(1)某项目需要在一种新型机器上,为一种已知语言开发一个普通的编译器。
选用模型:瀑布模型
选用分析:由于该项目的语言是已知的,需求是明确的和稳定的,整个系统属于中小规模, 因此适合采用瀑布模型进行软件开发。
(2)某公司需要给火车站开发一个交互式火车车次查询系统,这是火车站首次使用该系统。
选用模型:快速原型模型
选用分析:本项目的主要问题在于用户需求方面,该系统与最终用户的交互是十分关键的,但是在项目的初期,因为是首次使用该系统,用户的需求基本上是不知道的,因此适合采用快速原型法来确定需求,在需求确定的基础上再开发最终的系统。
(3)某公司开发一个通用CAD软件产品,产品需求是逐步完善的,某些需求在一定范围内是明确的,某些需求需要进一步细化,但是迫于市场竞争的压力,产品需要尽快上市。
选用模型:增量模型
选用分析:通用CAD软件产品具有一定的成熟度,某些需求和软件系统结构是可以确定的。但是实现该产品所有功能需要比较长的开发周期,为了尽快上市可以采用增量模型实行多版本的发布策略,既可以很快占领市场又可以为后继版本的需求定义奠定基础。
(4)某公司开发企业管理ERP系统,包括销售、库存、生产、财务、物流、人力资源等部分,在系统实施过程中不同的企业具有一定的需求差异。
选用模型:基于构件的开发模型
选用分析:企业ERP系统具有构件化的结构,在不同企业实施时应该尽量重用已有的组件。因此适合采用基于构件的开发模型开发该系统,在直接应用或修改使用的基础上,最终进行组件开发和系统集成。
(5)某公司开发一个汽车防抱死刹车控制系统。
选用模型:形式化方法模型
选用分析:由于该系统对安全性和可靠性要求极高,需要在系统运行之前进行相关性能的检查,性能检查由复杂的数学运算实现,因此适合采用形式化方法开发该系统。
第二章 系统工程
2.1简述系统工程的任务
- 识别用户的要求
识别用户对基于计算机的系统的总体要求,标识系统的功能和性能范围,确定系统的功能、性能、约束和接口。
- 系统建模和模拟
一个基于计算机的系统通常可考虑建立以下模型:硬件系统模型、软件系统模型、人机接口模型、数据模型。
- 成本估算及进度安排
开发一个基于计算机的系统需要一定的资金投入和时间约束(交互日期),需进行成本估算,并作出进度安排。
- 可行性分析
主要从经济、技术、法律等方面分析所给出的解决方案是否可行。
- 生成系统规格说明
作为以后开发基于计算机的系统的依据。
2.2简述可行性分析的任务
- 经济可行性
- 成本
- 效益
- 货币的时间价值
- 投资的回收期
- 纯收入
- 技术可行性
- 风险分析
- 资源分析
- 技术分析
- 法律可行性
- 方法的选择和折衷
第三章 需求工程
3.1需求工程具体包括哪些步骤?每个步骤的具体任务是什么?
- 需求获取:系统分析人员通过与用户的交流、对现有系统的观察及对任务进行分析。
- 需求分析与协商:分析每个需求与其他需求的关系以检查需求的一致性、重叠和遗漏的情况,并根据用户的需求对需求进行排序。
- 系统建模:通过合适的工具和符号系统地描述需求。
- 需求规约:给出对目标软件的各种需求。
- 需求验证:对功能的正确性、完整性和清晰性以及其他需求给予评价。
- 需求管理:对需求工程所有相关活动的规约和控制。
3.2 一个系统分析员应该具备哪些思想素质和基本知识?请说明理由。
- 能够熟练地掌握计算机硬、软件的专业知识,具有一定的系统开发经验。
- 善于进行抽象的思维和创造性的思维,善于把握抽象的概念,并把它们重新整理成为各种逻辑成分,并给出简明、清晰的描述。
- 善于从相互冲突或混淆的原始资料中抽出恰当的条目来。
- 善于进行调查研究,能够很快学习用户的专业领域知识,理解用户的环境条件。
- 能够倾听他人的意见,注意发挥其它人员的作用。
- 具有良好的书面和口头交流表达能力。
3.3列出在制定需求获取策略时的3种主要考虑因素。
-
- 功能需求。考虑系统要做什么,在何时做,在何时及如何修改或升级。
- 性能需求。考虑软件开发的技术性指标。
- 用户或人对因素。考虑用户的类型。
3.4什么是非功能性需求?举例说明。
非功能性需求是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性。软件产品的非功能性需求包括系统的性能、可靠性、可维护性、可扩充性和对技术和对业务的适应性等。
例如在银行管理系统中,由于银行数据量的庞大以及对银行账户的管理需求,用户对系统的性能、可靠性、可维护性要求很高。安全性是对银行用户个人信息保密的基本要求;在使用系统时,由于用户庞大,要求能快速安全的执行要求,这就对系统的性能有高需求;银行的用户的变动比较大,需求高要求的系统维护。
3.6 需求获取的方法和策略有哪一些?举例说明。
- 建立顺畅的通信途径
- 访谈与调查
- 亲身实践
- 会议
- 头脑风暴
- 概念建模
- 原型、仿真
- 自省
- 用户行为数据在线采集
第四章 设计工程
4.1简述软件设计阶段的基本任务。
- 数据/类设计:将分析类模型变换成类的实现和软件实现所需要的数据结构。
- 体系结构设计:定义了软件的整体结构,由软件部件、外部可见的属性和他们之间的关系组成。
- 接口设计:描述了软件内部、软件和协作系统之间以及软件同人之间的通信方式。
- 部件级设计:将软件体系结构的结构性元素变换为对软件部件的过过程性描述。
4.2简述模块、模块化及模块化设计的概念。
模块是数据说明、可执行语句等程序对象的集合,是单独命名的,并且可以通过名字来访问的。
模块化是指把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件。
模块化设计就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。
4.3简述每种类型的模块耦合度和每种类型的模块内聚度。
耦合:
-
- 内容耦合:当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。如果发生下列情形,两个模块之间就发生了内容耦合:
- 一个模块直接访问另一个模块的内部数据
- 一个模块不通过正常入口转到另一模块内部
- 两个模块有一部分程序代码重叠(只可能出现在汇编语言中)
- 一个模块有多个入口。
- 公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
- 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
- 控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
- 标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址。
- 数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。
- 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
- 内容耦合:当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。如果发生下列情形,两个模块之间就发生了内容耦合:
内聚:
-
- 巧合内聚:讲几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块称巧合内聚模块。
- 逻辑内聚:逻辑内聚是指完成一组逻辑相关任务的模块,调用该模块时,由传送给模块的控制性参数来确定该模块应执行哪一种功能。
- 时间内聚:时间内聚是指一个模块中的所有任务必须在同一时间段内执行。
- 过程内聚:过程内聚是指一个模块完成多个任务,这些任务必须指定的过程执行。
- 通信内聚:通信内聚是指一个模块内所有处理元素都集中在某个数据结构的一块区域中。
- 顺序内聚:顺序内聚是指一个模块完成多个功能,这些功能又必须顺序执行
- 功能内聚:功能内聚是指一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系不可分割。
4.4描述信息隐蔽概念,并讨论信息隐蔽与模块独立两概念之间的关系。
- 信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。在面向对象方法中,信息隐蔽是通过对象的封装性来实现的。
- 信息隐蔽的概念与模块的独立性直接相关
4.5什么是模块的独立性?模块功能独立有何优点?如何度量独立性?
- 模块独立性:
- 模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单
- 模块独立性是指模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。
- A. 具有独立的模块的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。
B. 独立的模块比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够"插入"模块。总之,模块独立是优秀设计的关键,而设计又是决定软件质量的关键环节。
3. 模块的独立程度可以由两个定性标准度量:内聚和耦合。
第五章 结构化分析与设计
5.1简述数据流图的主要思想,概述使用数据流图进行需求分析的过程。
主要思想:数据流图描述输入数据流到输出数据流的变换(即加工),用于对系统的功能建模。
使用数据流图进行需求分析的过程:
- 画出系统的输入和输出
- 确定源和宿
- 确定加工
- 确定数据流
- 顶层图通常没有文件
- 画出系统内部
- 确定加工
- 确定数据流
- 确定文件
- 确定源和宿
- 画出加工内部
- 重复第3步,直至每个尚未分解的加工都足够简单(即不必再分解)
5.2分别采用数据流方法中的哪些技术来完成用户需求的精确化、一致化和完全化任务?
- 父图和子图平衡
父图和子图平衡是指任何一张DFD子图边界上的输入输出数据流必须与其父图中对应加工的输入输出数据流保持一致。
- 数据守恒
数据守恒包括以下两种情况:
- 一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生
- 加工未使用其输入数据流中的某些数据项。这表明这些未用到的数据项是多余的,可以从输入数据流中删去。(不一定是错误,但可能隐含潜在的错误)
- 局部文件
考虑分层数据流中一个文件应画在哪些DFD中,而不该画在哪些DFD中。
- 一个加工的输出数据流不能与该加工的输入数据流同名
同一个加工的输出数据流和输入数据流即使组成成份相同,仍应对它们取不同的名字,以表示它们是不同数据流,例如:例如,“报名单”和“合格报名单”。
允许一个加工有二个相同的数据流分别流向二个不同的加工。
- 每个加工至少有一个输入数据流和一个输出数据流
- 在整套分层数据流中,每个文件应至少有一个加工读该文件,有另一个加工写该文件。
- 分层数据流图中得每个数据流和文件都必须命名(除了流入或流出文件的数据流),并且与数据字典一致。
- 分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约。
5.3 在数据流图中,可否将两个加工用一个数据流相连?可否将两个源用一个数据流相连?为什么?
两个加工可以直接用数据流相连,两个源不能直接用数据流相连。因为数据流由一组固定成分的数据组成。在DFD中,数据流的流向可以有以下几种:从一个加工流向另一个加工,从加工流向文件(写文件),从文件流向加工(读文件),从源流向加工,从加工流向宿。
5.4采用结构化分析方法绘制数据流图及数据字典(根据要求绘图并解决问题)
5.5 描述基本加工的小说明(根据要求绘图并解决问题)
5.6 结构图的基本成分包括什么?
- 模块
- 调用
- 数据
5.7 结构图的几个概念
深度、宽度、扇入、扇出
第六章 面向数据结构的分析与设计
6.1 面向数据结构方法的特点
答:特点如下:
1 以信息对象及其操作作为核心进行需求分析;
2 认为复合信息对象具有层次结构,并且可按顺序,选择,重复3种结构分解为成员对象信息;
3 提供由层次信息结构映射为程序结构的机制,从而为软件设计奠定良好的基础。
6.2 采用Jackson图表示下面的文件结构:
Type persons = record
第七章 面向对象方法基础
7.1 简述什么是UML?
- UML是一种Language(语言)
- UML是一种Modeling(建模)Language
- UML是Unified(统一)Modeling Language
- UML是一种统一的、标准化的建模语言,UML是一种应用面很广泛的建模语言
7.2 UML有哪些视图?有哪些图(已学)?
UML2.0包含的视图和图:
- 静态视图(类图)
- 设计视图(构件图)
- 用况视图(用况图)
- 状态机视图(状态机图)
- 活动视图(活动图)
- 交互视图(顺序图)
- 部署视图(部署图)
- 模型管理视图(包图,包图是类图的一种变种)
- 剖面
第八章 面向对象建模
8.1 用况图(根据要求绘图并解决问题)
8.2 顺序图(根据要求绘图并解决问题)
8.3 类图(根据要求绘图并解决问题)
8.4 状态图(根据要求绘图并解决问题)
8.5 活动图(根据要求绘图并解决问题)
8.6 构件图和部署图
认识什么是构件?什么是结点?能识别和区分构件图和部署图。
第九章 基于构件的软件开发
8.1什么是构件?
根据pressman书中的定义
构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某种清晰的功能。
根据brown的定义
构件是一个独立发布的功能部分,可以通过其接口访问它的服务。
根据《计算机科学技术百科全书(第二版)》中的定义
软件构件是软件系统中具有相对独立功能,可以明确标识,接口由规约指定,与语境有明显依赖关系,可独立部署,且多由第三方提供的可组装软件实体。
软件构件须承载有用的功能,并遵循某种构件模型。可复用构件是指具有可复用价值的构件。
在基于构件的软件开发中经常会使用到的商用成品构件,是指由第三方开发的满足一定构件标准并且可组装的软件构件。
8.2简述基于构件的软件开发过程。
基于构件的软件开发过程:
领域工程的步骤:
1 领域分析
2 建立领域特定的基准体系结构模型
3 标识候选构件
4 泛化和可变性分析
5 构件重构
6 构件的测试
7 构件的包装
8 构件入库
应用系统工程的步骤:
1 建立应用系统的体系结构模型;
2 寻找候选构件;
3 评价和选择合适的构件;
4 构件的修改和特化;
5 开发未被复用的不分;
6 构件的组装;
7 集成测试;
8 评价被复用的构件,并推荐可能的新构件。
第十三章 软件测试
13.1软件测试的目的是什么?
软件测试的目的是发现软件中的错误和缺陷,并加以纠正。
13.2什么是白盒测试?什么是黑盒测试?
白盒测试又称结构测试,这种方法把测试对象看做一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。白盒测试主要用于对程序模块的测试。包括:
- 程序模块中的所有独立路径至少执行一次。
- 对所有逻辑判定的取值(“真”与“假”)都至少测试一次。
- 在上下边界及可操作范围内运行所有循环
- 测试内部数据结构的有效性等
黑盒测试又称行为测试,这种方法吧测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符和它的功能需求。黑盒测试可用于各种测试,它试图发现以下类型的错误:
- 不正确或遗漏的功能
- 接口错误,如输入输出参数的个数、类型等
- 数据结构错误或外部信息(如外部数据库)访问错误
- 性能错误
- 初始化和终止错误
11.3分别简述单元测试、集成测试、确认测试和系统测试的任务。
- 单元测试:又称模块测试,着重对软件设计的最小单元——软件构件或模块进行验证。单元测试根据设计描述,对重要的控制路径进行测试,已发现构建或模块内部的错误,通常采用白盒测试,并且多个构件或模块可以并行测试。单元测试的主要内容:接口、局部数据结构、边界条件、独立路径和错误处理路径。
- 集成测试:也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照要求(如根据结构图)组装成为子系统或系统,进行集成测试。使用黑盒测试方法测试集成的功能,并且对以前的集成进行回归测试。
- 确认测试:经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
- 系统测试:将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提高更加完善的方案。
11.4什么是α测试?什么是β测试?
- α测试时由一个用户在开发者的场所进行的测试,软件在开发者对用户的“指导下”进行测试。经过α测试后的软件成为β版软件。
- β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见,然后软件开发公司再对β版本进行改错和完善。
11.5什么是回归测试?
回归测试就是对已经进行过的测试的子集的重新执行,以确保对程序的改变和修改,没有传播非故意的副作用。
第十五章 软件维护与再工程
15.1请讨论软件维护成本居高不下的因素。如何尽可能降低这些因素的影响?
- 软件的维护周期长;
- 需要维护的软件往往没有文档、或文档资料严重不足、或软件的变化未在相应的文档中反映出来;
- 维护活动占用了其它软件开发可用的资源,使资源的利用率降低;
- 一些修复或修改请求得不到及时安排,使得客户满意率下降;
- 维护的结果把一些新的潜在的错误引入软件,降低了软件质量;
- 将软件人员抽调到维护工作中,使得其他软件开发过程受到干扰。
- 确定质量管理目标和优先级;
- 使用提高软件质量的技术和工具;
- 选择可维护性高的程序设计语言;
- 完善程序文档;
- 进行质量保证审查
15.2软件维护过程是如何进行的?为什么要进行软件可维护性分析?
- 软件维护过程包括:建立维护组织;确定维护过程;保管维护记录;进行维护评价等四个阶段。
- 可维护性是指理解、改正、调整和改进软件的难易程度。进行可维护性分析有利于做出正确的决定,进而采取相应的方法应对客户的需求,对确实不能或者没有进行维护的价值的软件坚决不进行维护,对于可以维护的软件来说,可维护性分析有助于我们了解软件情况,从而做出相应的维护措施
15.3在重构和正向工程之间存在的细微不同是什么?
重构是指在统一抽象级别上转换系统的描述形式;正向工程过程应用软件工程的原理、概念、技术和方法来重新开发某个现有的应用系统。从概念可以看出,重构是从一个系统环境转换到另一个系统环境,而正向工程则是重新开发,从零开始,没有一定基础的。
第十六章 软件项目管理
16.1什么是软件项目管理?软件项目管理与传统项目管理的不同点与相同点?
软件项目管理的对象是软件工程项目。它所涉及的范围覆盖了整个软件工程过程。 为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件/软件)、要实现的任务、经历的里程碑、花费工作量(成本)、进度安排等做到心中有数。
项目管理的思想是共同的,不过,碰到不同的行业会有不同的管理方式。软件的项目管理是个特例,更倾向与对人工的管理,人工成本是构成软件项目成本的主要因素。传统行业项目管理中,人、材、机都是构成项目成本的重要因素。
16.2何谓软件项目管理过程?其目的是什么?
软件项目管理过程从项目计划活动开始,而第一项计划活动就是估算:需要多长时间、需要多少工作量、以及需要多少人员。此外,我们还必须估算所需要的资源(硬件及软件)和可能涉及到的风险。
加强软件项目管理,就是以软件工程的各个环节为管理主线,将动态项目管理贯穿其中,通过对软件开发的项目范围、项目进度、项目质量、项目沟通、人力资源、项目成本六大核心要素的集成管理,实现软件开发管理效能的最大化,从而大大提高软件的开发质量。
16.3软件项目启动前应完成哪些活动?
在软件项目启动前,必须对该项目进行可行性分析,明确项目的目标和范围,并在此基础上选择候选的解决方案及可采用的软件过程模型,估算新系统可能的开发和运行成本及其效益,同时给出该项目在技术和管理上的要求。
16.4什么是间接测量?为什么在软件度量工作中经常用到这类测量?
测量与被测量有确定函数关系的量,由函数关系表达式运算,得到所需的被测量。产品的间接测量包括功能、质量、复杂性、有效性、可靠性、可维护性等。构造软件所需的成本和工作量、生产的代码行数、以及其他直接测量是相对容易收集到的,然而,软件的质量和功能或其功效或可维护性是更难于评估的,只能间接测量。