来源:http://www.51testing.com
摘要
软件测试应该贯穿软件产品的整个研发周期,在不同的研发阶段,会有不同的测试方法和手段跟进。进行不同的测试来保障产品的质量。软件测试的分类有很多种,本文章就以一个产品开发的流程为时间线,分析在产品不同的研发阶段采用的不同的对应的测试方法和手段。本文只罗列出测试手段和方法,每种测试方法详细的测试过程由于篇幅受限,不详细探讨。
1、规格说明书审查
审查需求分析规格说明书是否完整、正确和清晰。这一步是最容易忽略却是很关键的一步。软件设计是基于用户需求的,充分理解用户的需求才能研发出与用户需求一致的产品。测试人员需要审查客户需求,为以后的测试计划和设计测试用例做准备。
2、系统和程序设计审查
按照需求规格说明书对系统结构的合理性、处理过程的正确性进行评价,也就是代码会审,需要研发与测试人员一起参加,通过阅读讨论来审查程序结构、代码风格、算法等。
3、单元测试
单元测试的对象是程序系统中的最小单元,模块或者组件。主要使用的测试方法为白盒测试,并在测试过程中尽可能地提高语句覆盖率、判断覆盖率、条件覆盖率。在测试过程中有时需要辅以黑盒测试。单元测试通常采取的手段有代码走读、静态分析和动态分析等。
4、集成测试
在单元测试的基础上,将模块按照设计要求组装起来同时进行测试。集成测试采用的手段与单元测试类似。不同的是其主要的目的是发现与模块之间的接口有关的问题。将各个模块之间集成起来的方法有多种,如自顶向下法、自底向上法、混合策略、大棒与三明治集成方法等。以下是各种集成方法的性能比较。
5、功能测试
功能测试多采用黑盒测试的方法,主要是根据产品规格说明书,来检测被测系统是否满足各方面功能的使用需求。在功能测试中,使用黑盒测试的方法时测试用例的设计很重要,通常需要用等价类划分法、边界值划分法、决策表、因果图等方法来设计高质量的测试用例。
6、系统测试
系统测试是将软件作为计算机系统的一部分,与计算机硬件、计算机的某些支持软件、数据、人员等系统元素结合起来,在实际运行环境下对计算机系统进行测试来发现软件潜在的问题。主要包括了以下测试:
6.1压力测试
长时间或者超大负荷地运行被测软件,来测试被测系统的性能、可靠性、稳定性等。了解被测系统的性能瓶颈。
6.2容量测试
分析被测系统的某项指标的极限值,如某个Web站点可以支持的并发用户的的访问量极限等。如果不能满足需求则需要进行改进。
6.3性能测试
性能测试又包含如下测试等:
基准测试
比较被测对象与已知的参照对象的负载和系统的性能。
竞争测试
测试被测对象对于多个用户对相同资源的请求的处理是否可以接受。
负载测试
测试和评估被测系统在不同负荷条件下操作极限的可接受性,包括负载和响应时间的特征。如果是分布式系统或者采用了负载均衡等技术,还需要测试负载平衡方法能否正常工作。
强度测试
测试系统遇到异常条件时按预期运行,如不充足的内存、不可用的服务或者硬件、过低的共享资源等。
6.4安全测试
测试系统对风法入侵的防范能力
6.5容错测试
测试被测系统出错时能否在指定时间内修正错误并重新启动系统、恢复数据等。对于需要人工干预的系统,还需要评估系统恢复时间是否在可接受范围以内。
6.6可靠性测试
测试系统在规定条件下的规定时间内完成规定功能的能力
6.7安装测试
检测被测系统是否能正确地安装,安装过程是否有明显和合理的提示信息、升级安装后原有程序是否能正常运行等。卸载后占用的系统资源是否全部释放、卸载后是否会影响其它软件的使用等。
7、验收测试
验收测试包含了以下测试
7.1用户界面和可用性测试
这便是我们常说的UI测试,主要检测用户界面是否符合标准和规范,是否满足直观性、一致性、灵活性、舒适性、正确性、实用性等。
7.2兼容性测试
验证软件之间是否能正确地交互和共享信息。包括对不同版本之间的兼容性测试。
7.3文档测试
对软件文档的正确性、完备性、可理解性进行检查。若有驱动文档则需要对驱动文档进行测试。
7.4α测试和β测试
α测试
公司内部人员模拟用户对软件产品进行测试。需要尽最大可能地涵盖所有的用户可能的操作。
β测试
公司组织各方面典型用户在日常工作中实际使用β版本,并要求用户报告异常情况,提出批评和意见等。然后再对β版本进行改进和完善。
8、其它测试
在软件研发过程中,纠正或修改缺陷后需要进行回归测试,即测试修改的部分是否会对原来的功能带来影响,是否会引入新的BUG。在集成测试后可能还需要进行确认测试,确认软件的功能和性能达到用户的合理期待。并再次审查用户需求。除此之外,由于平台不同,还有接口测试等其它未列出的测试。
结尾
以上是根据典型的研发过程进行的不同阶段的测试分析,目的是为了尽可能地涵盖大部分的测试方法手段。在实际的操作过程中,可能因平台等方面的不同而使用不同的测试策略和手段。实际上单元测试目前可能更多的需要研发人员来进行测试,或者在开发过程中以接口测试替代,较少进行单元测试。根据需求,实际研发时也可能会省去一些不必要的测试。本文的重点是尽可能地了解测试的过程和方法。这些方法和手段要么借助工具,编写脚本,要么使用自己开发的测试框架来实现,本文中不可能一一深入探讨。旨在对测试过程和方法手段有一个全面的了解。