软考笔记--软件可靠性测试

一.软件可靠性测试概述

软件测试者可以使用很多方法进行软件测试,如按行为或结构来划分输入域的划分测试, 纯粹随机选择输入的随机测试,基于功能、路径、数据流或控制流的覆盖测试等。对于给定的 软件,每种测试方法都局限于暴露一定数量和一些类别的缺陷。通过这些测试能够查找、定位、 改正和消除某些缺陷,实现一定意义上的软件可靠性增长。但是,由于它们都是面向错误的测 试,测试所得的结果数据不能直接用于软件可靠性评价,必须经过一定的分析处理后方可使用 可靠性模型进行可靠性评价。

软件可靠性测试由可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果的分析等主要活动组成。

软件可靠性测试是一种有效的软件测试和软件可靠性评价技术。尽管软件可靠性测试也不能保证软件中残存的缺陷数最少,但经过软件可靠性测试可以保证软件的可靠性达到较高的要求,对于开发高可靠性与高安全性软件系统很有帮助.

二.定义软件运行剖面

定义运行剖面首先需要为软件的使用行为建模,建模可以采用马尔可夫链来完成。用马尔可夫链将输入域编码为一个代表用户观点的软件使用的状态集。弧用来连接状态并表示由各种激励导致的转换,这些激励可能由硬件、人机接口或其他软件等产生。将转换概率分配给每个弧,用来代表一个典型用户最有可能施加给系统的激励。这种类型的马尔可夫链是一个离散的有限状态集,这类模型可以用有向图或转换矩阵表示。

定义运行剖面的下一步是开发使用模型,明确需要测试的内容。软件系统可能会有许多用户和用户类别,每类用户都可能以不同的方式使用系统。开发使用模型涉及将输入域分层,有两种类型的分层形式:用户级分层和用法级分层。用户级分层依赖于谁或什么能激励系统;用法级分层依赖于在测试状态下系统能做什么。

一旦用户和用法模型被 开发出来,弧上的概率将被分配。这些概率估计主要是基于如下几个方面。

(1)从现有系统收集到的数据。 (2)与用户的交谈或对用户进行观察获得的信息。 (3)原型使用与测试分析的结果。 (4)相关领域专家的意见。

由于软件可靠性行为是相对于软件实际的运行剖面而言的,同一软件在不同运行剖面下其可靠性表现可能大不相同,所以用于可靠性测试准备的运行剖面的开发与定义必须充分分析和考虑软件的实际运行情况。软件可靠性测试假设每个操作的数据输入都有同样的发生错误的概率,这样最频繁出现的操作和输入将表现出最高的故障率。对于特定的操作环境这是正确的,但无法贯穿系统的全部操作集合。

三.可靠性测试用例设计

为了对软件可靠性进行良好的预计,必须在软件的运行域上对其进行测试。首先定义一个相应的剖面来镜像运行域,然后使用这个剖面驱动测试,这样可以使测试真实地反映软件的使用情况。 由于可能的输入几乎是无限的,测试必须从中选择出一些样本,即测试用例。测试用例要能够反映实际的使用情况,反映系统的运行剖面。将统计方法运用到运行剖面开发和测试用例生成中去,并为在运行剖面中的每个元素都定量地赋予一个发生概率值和关键因子,然后根据这些因素分配测试资源,挑选和生成测试用例。

设计测试用例就是针对特定功能或组合功能设计测试方案,并编写成文档。测试用例的选择既要有一般情况,也应有极限情况以及最大和最小的边界值情况。因为测试的目的是暴露应用软件中隐藏的缺陷,所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据,结合复杂的运行环境,在所有可能的输入条件和输出条件中确定测试数据,来检查应用软件是否都能产生正确的输出。

一个典型的测试用例应该包括下列组成部分。

(1)测试用例标识。

(2)被测对象。

(3)测试环境及条件。

(4)测试输入。

(5)操作步骤。

(6)预期输出。

(7)判断输出结果是否符合标准。

(8)测试对象的特殊需求。

由于可靠性测试的主要目的是评估软件系统的可靠性,因此,除了常规的测试用例集仍然适用外,还要着重考虑和可靠性密切相关的一些特殊情况。

四.可靠性测试的实施

在进行应用软件的可靠性测试前有必要检查软件需求与设计文档是否一致,检查软件开发过程中形成的文档的准确性、完整性以及与程序的一致性,检查所交付程序和数据以及相应的软件支持环境是否符合要求。

这些检查虽然增加了工作量,但对于在测试早期发现错误和提高软件的质量是非常必要的。 软件可靠性测试必须是受控测试,在运行此类测试时,为了保证统计数据的有效性,测试过程中的每个测试用例必须用相同的软件版本,新的软件版本意味着新测试的开始。

软件可靠性测试同样依赖于软件的可测试性。可靠性测试的难点就在于判断测试用例的运行是成功还是失败。在控制系统及类似的软件中,失效由详细说明、时间(通常是 CPU 时间或时钟时间)来客观地定义。而在一般应用系统中,失效的定义更主观些,它不仅依赖于程序是否符合规格说明的要求,也取决于指定的性能是否能够达到用户的期望,但是否达到期望没有确定的标准。在一些科学计算中,计算结果只能由计算机给出,在这种情况下,如果软件只是输出了错误的结果而不是整个系统发生失效,错误就不可能被发现。此时可以将测试分成两个阶段进行。第一阶段运行较少量的测试用例,并对照规范进行仔细检查。第二阶段再运行大量测试用例。第二阶段不用人工检查输出的每项内容,而是找失效现象,包括错误信息、断电、 崩溃和死机。也可把输出记录到文件中,采用搜索或过滤方法进行处理。如果软件有足够的可测试性,这种方法不会漏掉很多的严重失效。如果计算的正确性无法验证,就需要对软件进行一些形式化的证明。

软件可靠性数据是可靠性评价的基础。为了获得更多的可靠性数据,应该使用多台计算机同时运行软件,以增加累计运行时间。应该建立软件错误报告、分析与纠正措施系统。按照相关标准的要求,制定和实施软件错误报告和可靠性数据收集、保存、分析和处理的规程,完整、 准确地记录软件测试阶段的软件错误报告和收集可靠性数据。 用时间定义的软件可靠性数据可以分为4类,这4类数据可以互相转化,具体内容如下。

(1)失效时间数据:记录发生一次失效所累积经历的时间。

(2)失效间隔时间数据:记录本次失效与上一次失效间的间隔时间。

(3)分组时间内的失效数:记录某个时间区内发生了多少次失效。

(4)分组时间的累积失效数:记录到某个区间的累积失效数。

在测试过程中必须真实地进行记录,每个测试记录必须包含如下信息。

(1)测试时间。

(2)含有测试用例的测试说明或标识。

(3)所有与测试有关的测试结果,包括失效数据。

(4)测试人员。

相关推荐
冷眼看人间恩怨5 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon11 小时前
SpringBoot 整合 SQLite 数据库
笔记
西洼工作室13 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.13 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑14 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing16 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
尘觉16 小时前
算法的学习笔记—扑克牌顺子(牛客JZ61)
数据结构·笔记·学习·算法
bohu8317 小时前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口
初学者7.18 小时前
Webpack学习笔记(3)
笔记·学习·webpack
bohu8318 小时前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot