软件测试中除了根据测试用例和测试说明书进行测试外,还需要进行随机测试(Ad-hoctesting),主要是根据测试者的经验对软件进行功能和性能抽查。
简介
随机测试是根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。 随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例(TestCase)没有覆盖到的部分。另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试(Regressivetesting)一起进行。
随机测试
理论上,每一个被测软件版本都需要执行随机测试,尤其对于最后的将要发布的版本更要重视随机测试。随机测试最好由具有丰富测试经验的熟悉被测软件的测试人员进行测试。对于被测试的软件越熟悉,执行随机测试越容易。只有不断的积累测试经验,包括具体的测试执行和对缺陷跟踪记录的分析,不断总结,才能提高。
定义步骤
软件测试即为了发现程序中的错误而执行程序的过程。软件测试是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)、完全度(completeness)和质量(quality)的软件过程;是SQA(softwarequalityassurance)的重要子域。
汽车电子软件随机测试
软件测试主要工作内容是验证(verification)和确认(validation),下面分别给出其概念:
验证
验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情(Dotherightthing)。确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;程序正确性的形式证明,即采用形式理论证明程序符号设一计规约规定的过程;评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。
确认
确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件以正确的方式来做了这个事件(Doitright)
随机测试
静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;
动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。
软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。
目标
测试是为了发现程序中的错误而执行程序的过程;
好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
成功的测试是发现了至今为止尚未发现的错误的测试。
相关说明
在软件测试中除了根据测试用例和测试说明书进行测试外,还需要进行随机测试(Ad-hoctesting)。随机测试主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。 随机测试有这样一些缺点:
随机测试算法实例
测试往往不太真实;
不能达到一定的覆盖率;
许多测试都是冗余的;
需要使用同样的随机数种子才能重建测试。
基本原则
测试的原则: 1、应把“尽早和不断地进行软件测试”作为软件开发者的座右铭,实践证明单元测试能够尽早发现问题,减少后期测试的错误量。可以采用Junit和Jtest来辅助进行单元测试。
随机测试相关技术指标
2、测试用例应由测试输入数据、测试执行步骤和与之对应的预期输出结果三部分组成。
3、应当避免由程序员检查自己的程序。(指后期系统测试阶段,不包括单元测试)
4、测试用例的设计要确保能覆盖所有可能路径。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。不合理的输入条件是指异常的,临界的,可能引起问题的输入条件。
5、充分注意测试中的群集现象。经验表明,测试后程序残存的错误数目与该程序中已发现的错误数目或检错率成正比。应该对错误群集的程序段进行重点测试。
6、严格执行测试计划,排除测试的随意性。测试计划应包括:所测软件的功能,输入和输出,测试内容,各项测试的进度安排,资源要求,测试资料,测试工具,测试用例的选择,测试的控制方法和过程,系统的配置方式,跟踪规则,调试规则,以及回归测试的规定等等以及评价标准。
7、应当对每一个测试结果做全面的检查。
8、妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
软件测试的对象:软件测试并不单纯等同于程序测试。软件测试应该贯穿整个软件定义与开发整个期间。因此需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应该是软件测试(评审)的对象。在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节发生了问题都可能在软件测试中表现出来。
术语解释
branchcoverage--分支覆盖
通过测试执行到的分支的百分比。 branchoutcome--分支结果
软件伪随机测试生成方法
见判定结果(decisionoutcome)
branchpoint--分支点
见判定(decision)
branchtesting--分支测试
通过执行分支结果来设计测试用例的一种方法。
BreadthTesting--广度测试
在测试中测试一个产品的所有功能,但是不测试更细节的特性。
bug--缺陷
capture/playbacktool--捕获/回放工具
参考capture/replaytool
Capture/ReplayTool--捕获/回放工具
一种测试工具,能够捕获在测试过程中传递给软件的输入,并且能够在以后的时间中,重复这个执行的过程。这类工具一般在GUI测试中用的较多。
CASE--计算机辅助软件工程(computeraidedsoftwareengineering)
用于支持软件开发的一个自动化系统。
CAST--计算机辅助测试
伪随机测试生成在混合电路参数测试中
在测试过程中使用计算机软件工具进行辅助的测试。
cause-effectgraph--因果图
一个图形,用来表示输入(原因)与结果之间的关系,可以被用来设计测试用例。
certification--证明
一个过程,用于确定一个系统或组件与特定的需求相一致。
changecontrol--变更控制
一个用于计算机系统或系统数据修改的过程,该过程是质量保证程序的一个关键子集,需要被明确的描述。
codeaudit--代码审计
由一个人、组或工具对源代码进行的一个独立的评审,以验证其与设计规格、程序标准的一致性。正确性和有效性也会被评价。
CodeCoverage--代码覆盖率
一种分析方法,用于确定在一个测试套执行后,软件的哪些部分被执行到了,哪些部分没有被执行到。
CodeInspection--代码检视
一个正式的同行评审手段,在该评审中,作者的同行根据检查表对程序的逻辑进行提问,并检查其与编码规范的一致性。
CodeWalkthrough--代码走读
一个非正式的同行评审手段,在该评审中,代码被使用一些简单的测试用例进行人工执行,程序变量的状态被手工分析,以分析程序的逻辑和假设。
code-basedtesting--基于代码的测试
根据从实现中引出的目标设计测试用例。
codingstandards--编程规范
一些编程方面需要遵循的标准,包括命名方式、排版格式等内容。