一、软件质量
什么是质量
定义:影响产品或服务满足给定需求的能力的特性和特性的总和。
质量来自:
- 客户的观点是否适合使用或其他客户需求
- 生产者观点满足要求
软件质量
定义:软件符合质量标准的程度。
Prevention is better than cure
软件质量包括过程和质量
质量保证与工作流程有关
质量保证关于产品
一些定义
二、软件测试
软件缺陷
Error 错误:发生在编写程序的过程中。
Fault 故障 :是一个或多个错误的表现。
Failure 失效:当执行错误的代码段导致传播到程序输出的错误状态时,就会发生这种情况。
Incident 事故:发生故障时不显示任何消息。
软件缺陷定义
- 不符合用户期望(期望)
- 软件功能可能无法正确执行
- 各种软件问题 例如,不一致,用户界面故障
- 软件缺陷=Bug
缺陷来源
缺陷何时发生
- 软件没有做规范要求它应该做的事情
- 软件做了一些规范说它不应该做的事情
- 该软件做了一些规范没有提到的事情
- 该软件不会执行产品规范未提及但应该执行的操作
- 软件难懂、难用、慢……
正确程序
- 没有语法错误
- 运行过程中无明显错误
- 没有不当言论
- 有效输入 - 正确输出
- 无效输入 - 正确输出
- 任何可能的输入 - 正确的输出
软件测试的历史
软件测试定义
- 软件测试是有计划的、系统的必不可少的步骤
- 这是一项实证调查,旨在为利益相关者提供有关被测产品或服务质量的信息
- 我们可以知道用户的期望是否实现
- 软件测试是软件质量保证的关键步骤
通过手动或自动方式对系统或系统组件进行演练或评估的过程,以验证其是否满足特定要求或识别预期结果与实际结果之间的差异。
注意:软件测试的本质功能是验证和确认
验证(Verification):软件应符合其规范(我们构建的产品是否正确?)
? 确定软件开发周期给定阶段的产品是否满足前一阶段建立的要求的过程。
确认(Validation):软件应该做用户真正需要的事情(我们正在构建正确的产品吗?)
? 在软件开发过程结束时评估软件以确保符合软件需求的过程。
test和debug的区别:
test | debug |
---|
自动测试 | 手动操作 | 可以不知道细节 | 必须知道细节 | 正确性证明和处理错误 | 仅正确性证明 | 检查 | 推理 | 计划,在控制中 | 不在控制中 |
根据 G.J.Myers 的观点,软件测试的目的:
测试的类型
-
Testing in waterfall model(瀑布模型) 缺点:不能对上一步的模型进行调整
-
Testing in V-model(V 模型) 在开发周期的每个阶段显式地指定测试活动 -
Spiral testing(螺旋测试) 应用于软件增量时,每个增量都可能是最终将应用程序交付给客户的原 型。 -
Agile testing(敏捷测试)
- 从需求阶段开始,在整个开发项目中都包含与测试相关的活动
- 与指定测试要求的客户合作
- 测试人员和开发人员必须相互合作,而不是充当对手
- 经常进行小块测试
-
Test-driven development (测试驱动开发,TDD) ? Requirements specified as tests
三、软件测试规则
- 尽早测试并经常测试
- 集成应用程序开发和测试生命周期
- 形式化测试方法
- 制定全面的测试计划
- 使用静态和动态测试
- 定义您的预期结果
- 了解应用程序背后的业务原因
- 使用多个级别和类型的测试
- 审查和检查工作,它会降低成本
- 不要让你的程序员检查他们自己的工作
测试通过规则
- 是否执行所有测试用例
- 功能设计是否完成
- 我们是否得到足够的错误
什么是测试用例
如果系统根据其规范运行,则用于测试系统的输入和来自这些输入的预测输出。
测试用例生成规则
- 避免模糊的测试用例
- 类似的功能应该被抽象和分类
- 避免复杂的测试用例
软件测试员的能力
|