第0章 软件质量保障概述

1.1 本章定位

本章是全课程的概念基础,说明为什么要做软件质量保障、软件质量如何评估、缺陷为什么是质量问题的核心,以及软件全方位缺陷检测有哪些主流方法。后续软件度量、软件测试、回归测试、性能测试都属于质量保障方法体系中的具体技术。

1.2 核心概念

软件

  • 软件是按照特定顺序组织的计算机指令和数据的集合。
  • 简化表达:软件 = ==程序 + 数据 + 文档==。
  • 软件三种类型:编程语言,基础软件(开发或运维软件),应用软件(特定领域软件)

软件质量

客观题重点,已在第一次小测中出现。

软件质量是软件与==明确地定义的需求和隐含定义的需求==相一致的程度。

闭卷背诵时抓住两个关键词:

  • 明确定义的需求;
  • 隐含定义的需求。

软件质量保障

软件质量保障包含==管理和技术==两个方面,也包含先验方法和后验方法。

  • 管理:ISO、CMMI、4P Model 等。
  • 技术:分析、测试、监控、模拟等。

软件质量模型

客观题重点,已在第一次小测中出现。

课件列举的质量模型包括 McCall、Boehm、FURPS/FURPS+、Dromey、ISO/IEC 9126、ISO/IEC 25010 等。其中第一次小测要求背 ISO/IEC 25010 八个主要特性:

功能性、可靠性、易用性、可维护性、性能效率、安全性、可移植性、兼容性。

ISO/IEC 25010 特性
功能性
可靠性
易用性
可维护性
性能效率
安全性
可移植性
兼容性

软件全生命周期质量保障

已在第一次小测中出现。

软件全生命周期质量保障包含两种类型

  • ==单生命周期软件质量保障==;
  • ==多生命周期软件质量保障==。

全生命周期软件质量如何保证?

方式含义代表内容
先验方法加强管理Formal Specification、SPI、Architecture、CMM、TQM 等
后验方法技术创新 / 缺陷检测Testing、Simulation、Analysis、Measurement 等

通常情况下,软件质量包含:内部质量和外部质量两种

  • ==内部质量:工作产品的质量==;
  • ==外部质量:最终软件产品的质量==。

软件缺陷

软件缺陷常被称为 Bug。是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。

课件引用 IEEE729-1983 的思想:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷表现为系统不能满足用户需要的某种失效。

重要判断:

  • 软件缺陷是导致软件质量差的重要原因。
  • 软件缺陷不可避免。
  • 缺陷越早发现,修复代价越小;越晚发现,修复代价越大。第一次小测已考判断题。

1.3 必背知识点

软件评审

软件评审是一种系统化质量保障活动,通过团队协作对软件相关文档、设计、代码或流程进行检查,==目的是==尽早发现缺陷、优化实现方案,并确保交付成果符合需求和质量标准。

软件评审的核心目标

  1. 发现缺陷;
  2. 验证一致性;
  3. 知识共享;
  4. 合规性检查。

第一次小测已考典型==软件评审方法==。可背诵:

  • 技术评审;
  • 管理评审;
  • 同行评审;
  • 走查;
  • 结构化走查;
  • 审查;
  • 代码审查;
  • 代码审计;
  • 代码阅读。

课件中提到的评审三阶段:

阶段关键活动
准备明确评审目标、分发材料、确定角色
会议/检查评审专家提出问题,记录员汇总问题
跟踪生成评审报告,验证问题是否解决

程序分析

第一次小测已考。

==程序分析==中两种最根本的技术:

  • ==控制流分析==;
  • ==数据流分析==。
类型含义例子
静态分析不运行程序,直接分析源代码或二进制文件控制流分析、数据流分析、静态程序切片
动态分析运行程序,观察实际行为程序追踪、路径剖析、动态切片

路径剖析已在第一次小测中出现:路径剖析只收集路径信息,缺少数据流信息,但开销低于程序追踪。

软件缺陷检测 9 种主流方法

客观题重点,第二次小测涉及缺陷检测、知识图谱、智能化检测。

方法课件中的核心含义
评审方法利用走查、检查单、审计、代码阅读等发现规范性、完整性、一致性、冗余等缺陷
分析方法从控制流、数据流、代码坏味道、修改影响分析、路径剖析等角度检测缺陷
度量方法度量设计和代码的好坏,发现设计和代码缺陷
形式化方法检查软件系统的静态属性缺陷
仿真方法通过仿真发现系统设计的性能缺陷
测试方法从功能测试和非功能测试发现缺陷
运行时监控在运行时收集状态、指标、行为等并发现异常
基于知识方法利用领域知识检查设计和代码缺陷
智能化方法利用机器学习等 AI 技术发现缺陷

什么是软件度量?

软件度量是指对==软件开发项目、过程及其产品==进行数据定义、收集以及分析的持续性定量化过程。

软件过程度量

包括三方面:

  1. 成熟度度量;
  2. 管理度量;
  3. 生命周期度量。

1.4 易混淆点

概念容易混淆点区分方式
软件质量保障 vs 软件测试测试只是质量保障的一种技术质量保障 = 管理 + 技术,测试是其中最常用技术之一
静态分析 vs 动态分析是否运行程序静态不运行,动态要运行
缺陷检测 vs 缺陷预测是否直接发现已存在缺陷检测找已有问题;预测评估哪些模块未来可能出问题
内部质量 vs 外部质量度量对象不同内部质量关注工作产品,外部质量关注最终软件产品

1.5 小测关联

小测已考内容复习提示
第一次软件质量定义、ISO/IEC 25010 八特性、全生命周期质量保障、内部/外部质量、评审方法、控制流/数据流、缺陷越晚发现代价越大、静态/动态分析、程序切片、路径剖析这些内容很适合填空和判断,必须精确背诵
第二次仿真类型、缺陷预测应用、形式化验证、运行监控、知识图谱缺陷检测、智能化缺陷检测说明第0章后半部分也可能出填空题

1.6 本章复习检查题

填空题

  1. 软件质量是软件与________的需求和________的需求相一致的程度。
  2. ISO/IEC 25010 质量模型包括功能性、可靠性、易用性、可维护性、、可移植性和兼容性。
  3. 程序分析中两种最根本的技术是________和________。
  4. 软件全生命周期质量保障包含________和________两种类型。

选择题

  1. 下列哪项属于静态分析?A. 程序追踪 B. 数据流分析 C. 压力测试 D. Alpha 测试
  2. 下列哪项最符合“缺陷预测”?A. 直接定位已有代码错误 B. 预测哪些模块未来可能发生问题 C. 执行测试用例 D. 生成测试报告

判断题

  1. 软件缺陷越晚发现,修复代价越小。
  2. 软件测试是软件质量保障中的唯一技术。
  3. 路径剖析与程序追踪相比缺少数据流信息,但开销更低。

参考答案

  1. 填空:明确定义、隐含定义;性能效率、安全性;控制流分析、数据流分析;单生命周期软件质量保障、多生命周期软件质量保障。
  2. 选择:B;B。
  3. 判断:错;错;对。

A. 必背填空

  1. 软件 = 程序 + 数据 + 文档
  2. 软件质量是软件与明确地和隐含地定义的需求相一致的程度。
  3. 软件质量保障 = 管理 + 技术
  4. 软件全生命周期质量保障包括单个生命周期每个阶段多个生命周期每个阶段的质量保障。
  5. 全生命周期质量保障有两类方式:先验方法后验方法
  6. 早期质量保障重要,因为软件缺陷越早发现,修复代价越小
  7. 软件缺陷常被称为 Bug
  8. 软件缺陷检测主流方法有:评审、分析、度量、验证、仿真、测试、监测、基于知识、智能化方法
  9. 程序分析按时机分为:静态分析动态分析
  10. 软件测试三个核心关注点:测试用例生成、测试结果验证/测试预言、测试覆盖充分性评估
  11. 软件缺陷预测对象包括:模块级、代码变更级、版本级
  12. 缺陷预测类型包括:版本内、跨版本、跨项目、跨组织/企业、跨领域/行业、跨国家/地区预测

B. 必会判断

  1. 软件不仅包括程序,还包括数据和文档。 对。
  2. 软件质量保障只靠测试即可完成。 错。
  3. 软件缺陷只存在于源代码中。 错。
  4. 软件缺陷越早发现,修复代价越小。 对。
  5. 静态分析不运行程序。 对。
  6. 动态分析只覆盖实际执行过的代码路径。 对。
  7. 形式化验证没有局限性,可以解决所有系统验证问题。 错。
  8. 缺陷预测和缺陷检测是同一个概念。 错。
  9. 测试用例、测试计划、测试脚本中也可能有缺陷。 对。
  10. 软件测试的核心问题包括测试用例生成、测试预言和测试充分性。 对。

C. 必会选择分类

问题选项方向
软件缺陷检测方法有哪些?评审、分析、度量、验证、仿真、测试、监测、基于知识、智能化
程序分析有哪些类型?静态、动态、混合
程序分析按深度有哪些?语法、语义、控制流、数据流
形式化验证有哪些方法?定理证明、等效性检验、模型检验
软件监控方法有哪些?日志分析、性能监控、错误处理、安全监控
缺陷预测对象有哪些?模块级、代码变更级、版本级

D. 第0章主观题可能怎么考

第0章本身不像第7章那样有明确计算题,但可能出情景分析题。常见形式可能是:

情景1:给一个软件开发过程,让你说明质量保障应如何做

答题思路:

  1. 不应只在最后测试;
  2. 应进行全生命周期质量保障;
  3. 早期需求/设计阶段使用评审、分析、度量、验证等;
  4. 实现阶段使用静态分析、动态分析、测试;
  5. 运行维护阶段使用监控、回归测试、缺陷预测;
  6. 结合先验方法和后验方法。

情景2:给一个软件修改场景,让你说明如何分析影响

答题思路:

  1. 明确修改请求;
  2. 得到修改集;
  3. 使用修改影响分析;
  4. 得到影响集;
  5. 根据影响集安排二次修改和回归测试。

情景3:给一个系统运行异常场景,让你选择检测方法

答题思路:

  • 文档不一致:评审、文档缺陷检测;
  • 代码潜在空指针:静态分析;
  • 运行时内存泄漏:动态分析、监控;
  • 性能不达标:仿真、性能测试、监控;
  • 模块未来高风险:缺陷预测;
  • 领域规则不一致:基于知识方法。

本轮复习小结

第0章可以概括成一句话:

软件质量保障不是只做测试,而是围绕软件全生命周期,结合管理和技术,通过评审、分析、度量、验证、仿真、测试、监控、知识方法和智能化方法,对文档、模型、数据、代码、算法等对象进行全方位缺陷检测与预测。