可靠性测试的软件
也称软件的可靠性评估,指根据软件系统可靠性结构(单元与系统间可靠性关系)、寿命类型和各单元的可靠性试验信息,利用概率统计方法,评估出系统的可靠性特征量。
软件可靠性是软件系统在规定的时间内以及规定的环境条件下,完成规定功能的能力。
一般情况下,只能通过对软件系统进行测试来度量其可靠性。
测试可靠性是指运行应用程序,以便在部署系统之前发现并移除失败。
因为通过应用程序的可选路径的不同组合非常多,所以在一个复杂应用程序中不可能找到所有的潜在失败。
但是,可测试在正常使用情况下最可能的方案,然后验证该应用程序是否提供预期的服务。
如果时间允许,可采用更复杂的测试以揭示更微小的缺陷。
组件压力测试压力测试是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。
利用组件压力测试,可隔离构成组件和服务、推断出它们公开的导航方法、函数方法和接口方法以及创建调用这些方法的测试前端。
对于那些进入数据库服务器或一些其他组件的方法,可创建一个提供所需格式的哑元数据的后端。
测试仪器在观察结果的同时,反复插入哑元数据。
这里的想法是在隔离的情况下,对每个组件施加远超过正常应用程序将经历的压力。
例如,以尽可能快的速度使用 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 中,而无需访问源代码。
“注射器”可用于:模拟资源失败,修改调用参数,注射损坏的数据,检查参数验证界限,插入定时延迟,以及执行许多其他功能。
软件的可靠性包括正确性和什么性
软件的可靠性和安全性不是一个概念。
可靠性是指:软件在开发过后,经过严格的各种软件测试之后,尽量、最大限度地保证其运行的稳定性(例如:不会动不动就产生崩溃现象),而安全性是指你的软件在使用上是绝对保证安全、没有带有任何病毒代码(例如:蠕虫等)的程序。
如果你的软件被病毒感染了,那么它就不是一个具有安全性的软件,因为病毒具有扩散性。
软件可靠性的影响因素
软件可靠性是关于软件能够满足需求功能的性质,软件不能满足需求是因为软件中的差错引起了软件故障。
软件中有哪些可能的差错呢?软件差错是软件开发各阶段潜入的人为错误:1.需求分析定义错误。
如用户提出的需求不完整,用户需求的变更未及时消化,软件开发者和用户对需求的理解不同等等。
2.设计错误。
如处理的结构和算法错误,缺乏对特殊情况和错误处理的考虑等。
3.编码错误。
如语法错误,变量初始化错误等。
4.测试错误。
如数据准备错误,测试用例错误等。
5.文档错误。
如文档不齐全,文档相关内容不一致,文档版本不一致,缺乏完整性等。
从上游到下游,错误的影响是发散的,所以要尽量把错误消除在开发前期阶段。
错误引入软件的方式可归纳为两种特性:程序代码特性,开发过程特性。
程序代码一个最直观的特性是长度,另外还有算法和语句结构等,程序代码越长,结构越复杂,其可靠性越难保证。
开发过程特性包括采用的工程技术和使用的工具,也包括开发者个人的业务经历水平等。
除了软件可靠性外,影响可靠性的另一个重要因素是健壮性,对非法输入的容错能力。
所以提高可靠性从原理上看就是要减少错误和提高健壮性。
软件可靠性的定义
1983年美国IEEE计算机学会对“软件可靠性”作出了明确定义,此后该定义被美国标准化研究所接受为国家标准,1989年我国也接受该定义为国家标准。
该定义包括两方面的含义:(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;其中的概率是系统输入和系统使用的函数,也是软件中存在的故障的函数,系统输入将确定是否会遇到已存在的故障(如果故障存在的话)。
为什么要考虑软件系统的安全性和可靠性
软件质量:1、概括地说,软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”。
2、具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的隐含特征的程度。
3、影响软件质量的主要因素,这些因素是从管理角度对软件质量的度量。
4、可划分为三组,分别反应用户在使用软件产品时的三种观点。
正确性、健壮性、效率、完整性、可用性、风险(产品运行);可理解性、可维修性、灵活性、可测试性(产品修改);可移植性、可再用性、互运行性(产品转移)。