软件工程8-软件测试概论

软件测试

软件质量保证与测试相关概念

软件质量

定义:明确表示是否包含功能和性能需求,明确记载开发标准和所有专业开发软件的期望的隐性特点

关键点

  • 软件测试时软件质量测量的基础
  • 缺乏规定的一致性就是缺乏软件的质量
  • 制定标准会定义软件工程发展的标准,引导软件工程经理

软件质量保证

质量保证含义:系统地监测评估一个工程的方方面面,以最大限度的提高正在由生产过程中实现的质量的最低标准
原则:

  • 适合用途:产品符合预期目的
  • 一次成功:错误产品应该被淘汰

软件质量保证SQA:

  • 活动:审查,监督,审核
  • 过程监控:一个确保采取适当步骤来进行的过程中所遵循的SQA 活动
  • 审核:用来审查管理、技术和流程,以保证提供的质量和软件产品的状态指示

软件测试

定义:

  • 在某种指定的条件下对系统或组件操作,观察或记 录结果,对系统或组件的某些方面进行评估的过程。
  • 分析软件各项目以检测现有的结果和应有结果之间 的差异(即软件缺陷),并评估软件各项目的特征 的过程。

软件缺陷

  • 软件未实现产品说明书的功能;
  • 未实现产品说明书未明确提及但是应该实现的目标
  • 产品说明书指明不能出现的错误
  • 软件实现了产品说明书未提到的功能
  • 软件难以理解,不易使用,运行缓慢等等最终用户认为不好

验证Verification/确认Validation

验证:保证软件特定开发阶段的输出已经正确完整地实现了规格说明

确认:对于每个测试级别,都要检查 开发活动的输出是否满足具体客户的需求或与这些特定级别相关的需求

在实际生产中,开发者参照的规格说明不一定等同于客户的具体需求;

测试&质量保证

  • 软件测试人员的目标是尽早找出软件缺 陷,并确保缺陷得以修复
  • 软件质量保证人员的主要职责是创建和 执行改进软件开发过程并防止软件缺陷 发生的标准和方法

质量/可靠性

  • 功能性functionality

  • 效率efficiency

  • 可移植性portability

  • 可靠性reliability:利用平均无故障时间和平均修复时间
    $$
    \frac{MTTF}{MTTF+MTTR}
    $$

  • 可维护性maintainability

  • 可用性usability

调试/测试

共同点:处理软件缺陷和查看代码的过程
区别:

  • 测试的目标是发现软件缺陷的存在
  • 调试的目标是定位和修复缺陷

目标

  • 确认系统满足其预期的使用和用户的需要。
  • 确认解决了所需解决的问题;
  • 为测试的过程建立责任和可解释性;
  • 便于及早发现软件和系统的异常;
  • 及早提供软件和系统的性能评估;
  • 为管理提供真实信息,以决定在当前状态下发布产品在商业上的风险;
  • 鉴别出程序在功能等方面的异常集聚之处。

原则

  • 穷尽测试是不可能的
  • 测试无法显示潜伏的软件缺陷
  • 测试活动应该尽早进行
  • 软件缺陷具有群聚性
  • 注意杀虫剂现象:测试用例应该具有某种随机策略
  • 尽量由独立的测试团队进行测试

测试用例

定义:

  • 测试输入
  • 执行条件
  • 预期结果

测试用例是为特定的目的开发的,例如执行特定的程序路径与验证指定的需求相符合

软件测试的评估准则

  • 覆盖率: 给定一个测试需求集合TR 和一个测试集合T,覆盖率可以定义为T 满足的测试需求占TR 总数 的比例。
  • 故障插入:用于评价遗留在一个程序中的故障的数量和种类。 具体而言,在测试前被有意地插入一些故障到程序中,在测试执行中,有一部分插入的故障 会因测试而显露出来,但可能一些故障在测试中没有暴露出来,仍存在于程序中。
  • 变异分值:程 序进行两个或更多个变异,然后用同样的测试用例执行测试,可以评估这些测试用例探测程 序变异间的差异的能力。