第一章 软件测量
软件度量重点整理
1. 测量概念:测量是通过数字(number)或符号(symbol)对现实世界中实体(entity)的属性
(attribute)进行赋值(assign)以此来根据既定规则描述它们的过程。
2. 软件测量概念:软件测量是通过数字或符号对一个软件产品(product)、软件过程(process)
或软件项目(project)中实体的属性进行赋值的过程。
3. 测量阶段:
(1) 用头脑度量:认知阶段
(2) 用单词度量:语义阶段
(3) 用数字度量:量化阶段
4. 测量尺度:
(1) 标定尺度:为了识别的目的,使用语义表达来表示对象。给与概念一个唯一的、不
含糊的名称和定义术语(专业词汇)也属于这一尺度。
特征:无顺序,无大小,简单罗列
例:血型(A、B、O、AB),选择题答案(A.***B.***C.***D.***),程序编程语言(Java、
C++)
(2) 类型尺度:识别已经被认知和命名的实体的类型或种类。
特征:强调分类
例:程序编程语言(面向对象编程语言、非面向对象编程语言)
(3) 序列尺度:评估测量的实体的值并根据值的顺序进行重排。
特征:有顺序,无大小,无比较,即无+、-
例:故障严重等级(高、中、低),CMM 成熟等级(1、2、3、4、5),对某件事的看法
(强烈赞同、赞同、无所谓、反对、强烈反对)
(4) 间隔尺度:用于认识增量,而不是比例。该尺度没有 0 这个间隔,即取值不能为 0。
特征:有顺序,有比较但无比例,即只有+、-,没有*、/
例:温度(长沙比北京高 10℃),项目开始时间(A 比 B 早 1 个月)
(5) 比例尺度:允许比例计算,并且具有零参考点,即取值可以为 0(0 即代表不存在)。
特征:有顺序,比较实体之间间隔的大小和实体之间的比例,即*、/
例:代码行数(A 的代码行数是 B 的 10%)
(6) 绝对尺度:用于计数,对于一个绝对的属性只有一种可能的测量值。
特征:通过计算实体集中元素的个数而很简单,通常属性具有“实体中 x 的出现次
数”的形式
例:班级中学生人数(22),代码行数(1000)
5. 测量连续统一体:MMM(measure-metrics-models)(测量-度量-模型)
6. 直接和间接测量
(1) 直接测量:对于一个实体的一个属性的直接测量不包括其他实体或属性,如根据代
码行测量的软件长度。
(2) 间接测量:使直接测量之间的交互变得可视化,当测量的规模很大或者直接测量成
本很高时更加有帮助,如生产率、软件质量。
第二章 软件度量
1. 度量概念:度量是由用户构思的并且被设计用来以一种可靠并且有意义的方式来展现所
选特征。
2. 软件度量概念:软件度量是用来量化软件产品(product)、软件开发资源(resource)和(或)
软件开发过程(process)的度量,度量的项包括可直接测得的如代码行以及需要通过计算
测量结果得到的如软件质量。
3. 软件测量和软件度量的区别(参考老师原话,无法保证正确性):软件测量是测量实体的
某个属性并给其赋值,而软件度量是根据测量的结果按照某个标准进行评估、评价和预
测。
4. 软件度量分类
(1) 实体类型
a. 过程(Process):软件相关活动的集合,通常与一些时间表相关联。包括开发、详
细设计、测试、维护等。
b. 产品(Product):任意由过程活动产生的产生物、交付物或文档。包括系统、模
块、单元、文档、代码行等。
c. 资源(Resource):过程活动所需要的实体。包括制订的人员、CASE 工具、时间等。
(2) 属性类型
a. 内部属性:与行为无关,能够完全根据其过程、产品或资源进行测量的属性(不
根据环境改变,如身高)。
b. 外部属性:能够根据其过程、产品或资源如何通过行为与环境进行联系来测量
的属性(会根据环境改变,如脾气)。
(3) 度量类型
a. 样本过程度量
过程实体
开发过程
测试过程
详细设计
维护
样本属性
过程
结构说明书
详细设计
测试
属性
耗费时间
里程碑
开发工作量
大小
进展
耗费时间
设计质量
成本
潜在度量点
日程表天数、工作天数
日程表日期
员工*小时(/天/月)
计划测试数
执行测试数、通过测试数
日程表天数、工作天数
缺陷密度
美元/年、员工*小时/变更
需求
内部属性
外部属性
时间、工作量、需求变更
数
时间、工作量、发现规范
错误数
时间、工作量、发现 bug
数
质量、成本、稳定性
成本效益、成本
成本效益、稳定性、成本
b. 样本产品度量
产品实体
系统
属性
规模
缺陷密度
模块
长度
潜在度量点
模块数、功能点数、物理
来源代码行数
缺陷/千代码行、缺陷/功
能点
物理来源代码行数、逻辑
来源声明
未改变的 物理行数与总
物理行数之比(不包括注
释和空白区域)
圈复杂度
页数
类型名称
语言名称
重用百分比
线性无关路径数
长度
声明类型
编程语言
内部属性
外部属性
规模、重用性、模块化、
功能性、语法正确性
规模、重用性、模块化、
耦合度、内聚度、功能性
规模、重用性、模块化、
耦合度、功能性、算法复
杂度、控制流结构性
可理解性、可维护性
质量、复杂度、可维护性
可靠性、易用性、可维护
性
规模、覆盖层次
质量
单元
文档
代码行数
样本属性
产品
说明书
设计
代码
测试数据
c. 样本资源度量
资源实体
指定人员
CASE 工具
样本属性
资源
全体员工
团队
软件
硬件
办公室
时间
开始日期,预期日期
属性
团队规模
经验
类型
是否使用
执行时间
内部属性
年龄、工资
潜在度量点
指定人员数
专业经验年数、编程经验
年数
类型名称
是/否
日程表日期
CPU 时钟
外部属性
生产率、经验、智力
规模、沟通水平、结构型 生产率、质量
价格、规模
易用性、可靠性
价格、速度、内存大小 可靠性
规模、温度、光线
舒适度、质量
5. 有效软件度量步骤
(1) 识别度量客户(没有客户,就不要采用度量)
(2) 中心目标:组织目标、项目目标、任务目标
(3) 提出问题(保证有高的客户满意度)
(4) 选择度量
(5) 标准化定义
(6) 选择模型
(7) 建立统计标准
(8) 决定决策标准
(9) 定义报告机制
(10)决定额外限定词
(11)收集数据
(12)考虑人为因素
第三章 软件规模度量
1. 如何测量软件规模
(1) 功能数量:数据流图、用例图
(2) 模块数量:功能模块结构图
(3) 代码行:操作符、操作数
(4) 设计文档页数
(5) 用户手册的页数
2. 规模测量可以反映
(1) 工作量
(2) 成本
(3) 生产率
(4) 进度
3. 根据以下方面定义软件规模
(1) 长度
(2) 功能性
(3) 复杂性
(4) 重用性
4. 长度
(1) Halstead 方法:将程序 P 定义成符号(token)的集合,将集合中符号分为两类:
Operators 操作符:编程语言中定义的操作,如算数运算符、逻辑运算符
Operands 操作数:变量、常数、地址
例如:int
其中:操作数 a, 10; 操作符 int ,=, +
a; a = a + 10;
度量内容:
μ1= 不同操作符的个数
μ2= 不同操作数的个数
N1 = 操作符的出现总次数
N2 = 操作数的出现总次数
程序词汇量(Program Vocabulary):μ = μ1 + μ2
程序长度(Program Length):N = N1
+ N2
程序预估长度(Program estimated length):
程序容量(Program Volume):
可能容量(Potential Volume)——任意算法表达式的最小容量
假设整个算法只有 1 个操作符;每个操作符只涉及 1 次:
程序等级(Program Level):L
= V*
/ V
程序难度(Program Difficulty):D = 1 /
L
程序等级 L 的估算值:
生成程序 P 所需的工作量:
工作量为 E 的一段程序所需的编程时间为:T
E
进行有限次数(β)的基本辨别活动,5≤β≤20)
/ 18
在 Halstead 方法中,β取 18,即 T
=
=
E
/ β(人类的智力能够在每秒
举例:
(2) 代码行
LOC = NCLOC + CLOC
NCLOC:Non-Commented Line Of Code(非注释行)
CLOC:Commented Line Of Code(注释行)
CLOC/LOC(注释密度):反映了程序的可理解性、可修改性、可维护性
优点:简单并且可以自动测量、与编程工作量及成本相关
缺点:模糊定义、与编程语言相关、不适用于早期计划、与开发者技能相关
(3) 规格说明和设计:
规格说明与设计文档通常由逻辑文本(原子对象,如分类、公理功能、操作、约束
等)与图表(数据流图、ER 图等)组成。
定义原子对象用于测量文本内容和图的内容
5. 功能性
(1) 功能点(Function Point)(通过数据流图进行测量)
计算方法:Function Point = UFC * VAF (FP = 未调整前的功能点数 * 调整因子)
UFC:
UFC 计算与两个因素有关:5 类测量元素(输入、输出、查询、内部文件、外部接
口)的个数、每个测量元素的难易程度(简单、一般、复杂)。
从理论上讲,共有 15 个不同种类的项(5 类中每一类都有三个复杂性等级),因此,
未调整前功能点数计算方法:用各类的项目数乘以该类的权重值,再对这 15 个乘
积求和:
VAF:
共 14 项因素 Fi(1≤i≤14),影响程度由轻到重从 0-5 评价。0 意味着子因素对系
统没有影响, 3 意味着子因素对系统的影响适中, 5 意味着子因素对正在构造的
系统起关键作用。
VAF 取值[0.65, 1.35]
例: