可靠性测试就是为了评估产品在规定的寿命期间内,在预期的使用、运输或储存等所有环境下,保持功能可靠性而进行的活动。是将产品暴露在自然的或人工的环境条件下经受其作用,以评价产品在实际使用、运输和储存的环境条件下的性能,并分析研究环境因素的影响程度及其作用机理。通过使用各种环境试验设备模拟气候环境中的高温、低温、高温高湿以及温度变化等情况,加速反应产品在使用环境中的状况,来验证其是否达到在研发、设计、制造中预期的质量目标,从而对产品整体进行评估,以确定产品可靠性寿命。
测试可靠性是指运行应用程序,以便在部署系统之前发现并移除失败。因为通过应用程序的可选路径的不同组合非常多,所以在一个复杂应用程序中不可能找到所有的潜在失败。但是,可测试在正常使用情况下最可能的方案,然后验证该应用程序是否提供预期的服务。如果时间允许,可采用更复杂的测试以揭示更微小的缺陷。
组件压力测试
压力测试是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。利用组件压力测试,可隔离构成组件和服务、推断出它们公开的导航方法、函数方法和接口方法以及创建调用这些方法的测试前端。对于那些进入数据库服务器或一些其他组件的方法,可创建一个提供所需格式的哑元数据的后端。测试仪器在观察结果的同时,反复插入哑元数据。
这里的想法是在隔离的情况下,对每个组件施加远超过正常应用程序将经历的压力。例如,以尽可能快的速度使用 1 – 10,000,000 循环,查看是否有暴露的问题。单独测试每个 DLL 可帮助确定组件的失败总次数。
对于分布式 Web 应用程序,Microsoft 提供“Web 应用程序压力工具”。有关更多信息,请参见“Microsoft Web Application Stress Tool”(Microsoft Web 应用程序压力工具).如果您购买了 Visual Studio .NET 企业版,还会提供另一个名为 Application Center Test 的工具,它用来预览 Application Center 2000 中某些技术的介绍性信息。
集中压力测试
对每个单独的组件进行压力测试后,应对带有其所有组件和支持服务的整个应用程序进行压力测试。集中压力测试主要关注与其他服务、进程以及数据结构(来自内部组件和其他外部应用程序服务)的交互。
集中测试从最基础的功能测试开始。您需要知道编码路径和用户方案、了解用户试图做什么以及确定用户运用您的应用程序的所有方式。
测试脚本应根据预期的用法运行应用程序。例如,如果您的应用程序显示 Web 页,而且 99% 的客户只是搜索该站点、只有 1% 的客户将真正购买,这使得提供对搜索和其他浏览功能进行压力测试的测试脚本才有意义。当然,也应对购物车进行测试,但是预期的使用暗示搜索测试应在测试中占很大比重。
在日程和预算允许的范围内,应始终尽可能延长测试时间。不是测试几天或一周,而是要延续测试达一个月、一个季度或者一年之久,并查看应用程序在较长时期内的运行情况。
真实环境测试
在隔离的受保护的测试环境中可靠的软件,在真实环境的部署中可能并不可靠。虽然隔离测试在早期的可靠性测试进程中是有用的,但真实环境的测试环境才能确保并行应用程序不会彼此干扰。这种测试经常发现与其他应用程序之间的意外的导致失败的交互。
需要确保应用程序能够在真实环境中运行,即能够在具有所有预期客户事件配置文件的服务器空间中,使用最终配置条件运行。测试计划应包括在最终目标环境中或在尽可能接近目标环境的环境中运行应用程序。这一点通常可通过部分复制最终环境或小心地共享最终环境来完成。
随机破坏测试
测试可靠性的一个最简单的方法是使用随机输入。这种类型的测试通过提供虚假的不合逻辑的输入,努力使应用程序发生故障或挂起。输入可以是键盘或鼠标事件、程序消息流、Web 页、数据缓存或任何其他可强制进入应用程序的输入情况。应该使用随机破坏测试测试重要的错误路径,并公开软件中的错误。这种测试通过强制失败以便可以观察返回的错误处理来改进代码质量。
随机测试故意忽略程序行为的任何规范。如果该应用程序中断,则未通过测试。如果该应用程序不中断,则通过测试。这里的要点是随机测试可高度自动化,因为它完全不关心基础应用程序应该如何工作。
可能需要某种测试装备,以驱使混乱的、高压力的、不合逻辑的测试事件进入应用程序的接口中。Microsoft 使用名为“注射器”的工具,使得以将错误注射到任何 API 中,而无需访问源代码。“注射器”可用于:模拟资源失败,修改调用参数,注射损坏的数据,检查参数验证界限,插入定时延迟,以及执行许多其他功能。