软件测试
19-软件测试
软件测试目标
向开发者和用户展示软件满足了需求,是一个合格的产品。(有效性测试)
找出软件中的缺陷和不足,测试的目标是发现尽可能多的缺陷而不是所有缺陷。。(缺陷测试)
验证与确认
验证:检测开发者是否用正确的技术开发系统。如“编程错误”,“设计思路错误”,“文档书写错误”。
确认:检查开发者是否建立了正确的系统,确保最终产品符合规格。如“需求文档是否反映需求”,“设计能否跟踪到需求”,“测试是否覆盖需求”。
桩程序:被测试部件的交互环境,扮演被调用的其他部件,用于自顶向下集成,下层的模块使用伪装的具有相同接口的桩测试上层。
驱动程序:被测试部件的执行环境,驱动和监控测试用例的执行过程并判定结果,用于自底向上集成,上层的模块使用伪装的相同接口的驱动测试下层。
缺陷、错误、失败的关系:
缺陷(defect/fault 故障):系统代码中不正确的地方。
错误(error):系统执行到缺陷代码,使得执行结果不符合预期且无法预测,表现出的不稳定状态。
失败(failure):错误的发生使得软件的功能失效。
缺陷如果不检测会长期存在,直到触发了特定条件被激活,就会出现错误,显示在终端输出上,最终导致系统功能失效的失败现象。
测试的层次划分
单元测试:对程序单元进行正确性检验,更关注代码的内部具体逻辑,常用的方法为白盒测试。
集成测试:对系统接口进行正确性检验,更关注软件组件之间的交互,集成依赖桩和驱动,集成策略有大爆炸和增量集成(自顶向下、自底向上,持续集成)
系统测试: 更关注整个系统的行为,评价系统功能需求和非功能需求以及系统与外界环境的交互。更关注不符合需求的缺陷和需求自身的内在缺陷。
测试目标:
功能测试:
确认观察到的被测试软件的行为是否满足软件需求规格说明。
α与β测试
在软件发布前,让小规模且有代表性的潜在用户试用。
α测试在开发机构处进行,开发人员和测试人员能记录使用中出现的问题。
β测试在用户处进行,开发人员和测试人员都不在场。
回归测试:变更系统后进行,重新执行测试过的系统用例子集,确保变更没有造成未预期的副作用。
验收测试:按照客户的需求检查系统。
性能测试:针对性能需求进行验证。
可靠性测试:验证和评价系统可靠性的测试。
压力测试:以最大负载或超过最大负载运行软件,验证软件的负载能力。
安全测试:验证系统内的安全保护机制不受非法入侵的能力。
测试技术
随机测试
根据软件工程师的直觉和经验,建立测试用例,也是实践中使用最为广泛的测试技术。
黑盒测试(基于规格的技术)
把测试对象看作一个黑盒子,完全基于输入和输出来判断测试对象的正确性。
测试方法:
等价类划分: 将输入域划分为若干子集,从每个子集中选取少数具有代表性的数据作为测试用例。
边界值分析:对等价类划分的补充,针对边界情况设计测试用例。
决策表:为复杂的逻辑判断设计测试用例。
状态转换:为输入输出与状态相关联的复杂测试对象设计测试用例
优点 :
不需要关注软件内部结构,测试效率高,基于软件开发文档,可以检验需求规格。
缺点:
代码覆盖率低,发现缺陷数量较少。
白盒测试 (基于代码的技术)
把测试对象看作是透明的,不关心测试对象的规格,针对测试对象的内部程序结构来设计测试用例。
测试方法:
语句覆盖:保证每一行代码都至少执行一次。
条件覆盖:保证每个判断的每个结果都至少满足一次。
路径覆盖:保证每条独立的执行路径都至少执行一次。
优点:
代码覆盖率高,发现缺陷数量较多。
缺点:
测试开销大,基于代码的测试,不能检验需求规格。
黑白盒测试的异同和优缺点:
定义,具体方法,优缺点。
测试活动
测试计划,测试设计,测试执行,测试评价。