计算机行业流行一个笑话: 有三样东西在制造过程中是永远看不见的, 它们是 法律, 香肠和软件 !
软件测试工程师
工作的职责:
- 尽可能早一些找出软件缺陷, 并确保它得以修复
软件周期和所处的阶段
- 构思
- 分析
- 设计
- 开发
- 测试
- 最终产品
- 维护
岗位要求(应具备的素质)
- 他们是探索者
- 他们是故障排除员
- 他们不放过任何蛛丝马迹
- 他们是追求完美主义者
- 他们判断准确
- 他们注重策略和外交
- 他们善于说服
- 他们受过软件编程方面的教育
什么是软件测试
- 软件测试是一项批判性的工作
软件测试应该在项目什么阶段开始介入
- 设计阶段
需求和Bug
什么是Bug
- Bug即软件缺陷, 源自Mark Ⅱ
Bug的状态
- 新的(New)
- 已指派(Assigned)
- 打开(Open)
- 已修复(Fixed)
- 待测试(Pending Reset)
- 再测试(Reset)
- 关闭(Closed)
- 再打开(Reopen)
- 拒绝中(Pending Reject)
- 被拒绝( Rejected)
- 延期 (Postponed)
- 延期中 (Deferred)
测试报告, 描述软件缺陷的基本准则
- 一致性
- 唯一性
需求规格说明书
- 完整
- 准确
- 精确, 不含糊, 清晰
- 一致
- 贴切
- 合理
- 代码无关
- 可测试性
一个良好的需求应当具备哪些特征
- 需求明确, 有确切的图文说明
- 当前技术下, 需求可以实现
- 功能实用, 与主功能模块不冲突
作为测试工程师, 如果你发现需求一直在变化, 怎么办
- 通过与产品经理沟通, 稳定产品需求
- 优先测试需求稳定的功能模块
- 对需求变化频繁的功能部分, 编写通用性较好的测试用例
软件测试的现实挑战
测试的挑战性, 正确理解测试
- 完全测试程序是不可能的
- 软件测试是有风险的行为
- 测试无法显示潜伏的软件缺陷
- 并非所有的软件缺陷都需要修复
- 产品说明书从没有最终版本
- 软件测试员在产品小组中不受欢迎
- 不存在没有缺陷的软件
- 软件测试是一项讲究条理的技术专业
各种不同类型测试的定义及区别
- 黑盒测试: 无需了解 软件内部代码结构, 重视功能, 不关注具体的实现方式
- 白盒测试: 必须了解 软件内部代码结构, 重视实现的逻辑, 耗时更长, 无法考虑到所有情况
- 静态测试: 不运行代码
- 动态测试: 运行代码
你发现了一个缺陷, 但开发人员认为不是, 你如何处理
- 主动与开发人员沟通, 讲明缘由
- 向测试经理反应情况
- 即时跟进bug的修改状态
- 如果不是特别紧急的bug, 而产品急于上线, 可以先对bug进行记录, 在下一迭代周期提出bug
静态黑盒测试
需求规格说明书(spec)是什么?
- 需求规格说明书展现了软件功能的雏形
- 开发人员可以按照说明书, 有效制定自己的开发计划
- 让用户了解将要开发软件的功能是什么,如果用户有不满意的地方,可以快速改进
- 需求规格说明书不包括具体的编码要求,也不包括软件的具体功能操作步骤
静态黑盒测试需要耐心阅读文档, 具有想象力
动态黑盒测试
测试流程
- 建立状态转换图
- 减少要测试的状态及转换的数量
- 定义测试用例
- 执行重复, 压迫, 重负测试
测试工程师与测试经理的区别
- 测试工程师侧重进行具体测试任务的执行
- 测试经理侧重进行测试任务的调配
等价划分法
- 等价类划分是指把分步骤把海量(无限)的测试用例, 缩减的很小, 但过程同样有效
如果能够执行完美的黑盒测试, 那还需要白盒测试吗?
- 依然需要执行白盒测试, 因为结果正确, 不能表软件程序没有问题, 有可能是错误的程序得出了正确的结果
静态白盒测试
代码检查的流程和要求
- 同事审查
- 走查
- 检验
代码检查的具体方法
- 检测数据引用
- 检测数据声明
- 检测计算错误
- 检测比较错误
- 检测控制流程错误
- 检测子程序参数错误
- 检测输入输出错误
- 其他检查(是否使用外语, 是否考虑移植, 兼容性)
代码检测对提高软件质量的积极作用
- 尽早发现软件缺陷
- 规范编码风格
- 减少不必要的bug
静态白盒测试和软件开发调试有什么区别?
- 静态白盒测试: 测试人员根据软件程序,寻找软件缺陷
- 软件开发调试: 开发人员在开发过程中的操作
动态白盒测试
单元测试及集成测试的区别
- 单元测试是从单元模块进行测试, 自底向上
- 集成测试是从软件整体进行测试, 自顶向下
jUnit
- jUnit是常用的Java语言测试框架
配置测试与兼容性测试
概念
- 配置测试是指使用各种硬件来测试软件运行的过程
配置测试和兼容性测试主要的工作内容
- 配置测试:
- 确定所需的硬件类型
- 确定用哪些厂商的硬件, 型号和驱动程序可用
- 确定可能的硬件特此, 模式和选项
- 将确定后的硬件配置缩减为可控制的范围
- 明确与硬件配置有关的软件的唯一性特征
- 设计在每一种配置中执行的测试用例
- 在每种配置中执行测试
- 反复测试直到小组对结果满意为止
- 兼容性测试:
- 向后和向前兼容
- 测试多个版本的影响
- 测试高级和低级标准规范
- 数据共享兼容性
向上兼容和向下兼容的区别
- 向上(向前)兼容是指可以使用软件未来的版本
- 向下(向后)兼容是指可以使用软件以前的版本
工作量为什么会倍增
- 客观来讲, 每个模块都有多个选项, 而这些选项的排列组合, 会上涨多个数量级
- 只是单纯的软件本地化操作, 就要语言,文化, 内容, 数据格式, 数据兼容性等繁杂问题
外国语言测试
软件测试工程师不懂外语, 为什么还要参与外国语言版本的软件测试
- 懂各国语言的专家, 不一定了解软测试
- 测试工程师需要与语言专家配合共同完成测试
易用性测试和安全测试
基本概念
- 易用性测试: 易用性测试是指让用户使用软件时是否方便
- 应符合的标准规范: 直观, 一致, 灵活, 舒适, 正确, 实用
软件质量管理和CMM
基本概念
- 检查和评价当前软件开发的过程, 找出改进的方法, 以达到防止软件缺陷出现的目标
SQA是什么
- 软件质量保证
CMM是什么? 五个级别的基本定义?
能力成熟度模型(CMM)是一个行业标准, 用于定义和评价软件公司开发过程的成熟度, 提供怎样做才能提高软件质量的指导
- 1级: 初始的
- 2级: 可重复的
- 3级: 定义的
- 4级: 可管理的
- 5级: 不断优化的