今天看了看第一章 指导软件测试的故障模型,这一章主要从五部分进行介绍的:软件测试目的,理解软件行为,理解软件环境,理解软件能力。
一 软件测试目的
软件测试的动机有多种。想要通过测试确定所在机构是否接受该产品,这种测试为接受测试;想要通过测试确定某个产品是否满足实现标准,这种测试叫做符合性测试;想要通过测试确定某个产品是否易于实用,这种测试叫做可用性测试。此外还有性能测试,可靠性测试,健壮性测试等等。
这些测试的基本特征:
* 每种测试都要求测试员按照产品行为描述来实施。产品行为描述可以是书面的规格说明书、需求文档、产品文件或用户手册,源代码或可执行代码。
*每种测试都需要产品运行于真实或模拟环境下,运行产品功能把测试与代码评审和审查区别开来。代码评审和审查可以在产品编译和连接之前静态进行。
*每种测试都要求以系统方法展示产品功能性。说明测试结果是肯定或者否定的。不论占有多少文档,都要以智能方式展示软件功能。
用户和测试人员区别是测试人员具有明确目标。
二 理解软件行为
测试的难题是选择哪些进行测试,哪些不需要测试。最好的测试员应该有这种直觉,知道什么能使软件失效。这种直觉引导他们彻底全面的思考测试场景。使他们产生这种直觉的技术是故障模型(fault model),对于测试人员来说,重要的是能够构造出一个准确的故障模型,并在测试中使用该模型,确保能检查出隐错最可能隐藏的地方。
测试人员需要学习和吸收的故障模型是基于与受测软件相关的两个基本问题:
*熟悉软件操作的环境
*测试员必须理解其应用程序具有的能力。
三 理解软件环境
大多说软件系统的用户不一定是人。人们不能将输入直接提交给软件应用程序,而是利用硬件设备提交,输入由其设备驱动程序进行处理。这些输入传给操作系统的API层,直到API产生事件,表明测试中的应用程序已经接收到了,实际上,应用软件仅通过OS接收输入。
应用软件执行时所处的环境
操作系统内核提供内存、文件指针以及时间和日期函数的服务,文件系统提供二进制或文本格式存储的数据,UI实现从键盘、鼠标或其它设备获得得输入数据的API集合,
应用程序与环境产生交互的场景
*人类用户(觉得这个概念翻译的有点不贴切)
对于软件来说有两种界面:GUI和API
1、通过GUI控件提交输入
有两个关键问题:对数据传送控件进行测试(传送数据和事件);测试GUI控件的次序
2、通过程序提交输入
选择参数组合和API调用次序与选择GUI控件的顺序的差别是传送机制,即测试API的是程序,测试GUI的是键盘。
对于两种界面,测试人员面临同样难题,一个根本的问题是有太多的输入,输入组合和输入次序,而且全部应用。
*文件系统用户
对于测试人员来说,文件就是用户,其内容就是输入。
*操作系统用户
操作系统是直接与用户交互的唯一实体,她是所有实际用户与应用程序的中介,通过提供内存
例:windows的内核提供了1000个不同的函数。
系统界面的根本问题与人类界面的根本问题不同,系统输入是反应式的,系统输入不能由测试人员直接控制,而是由软件对用户输入做出反应。
*软件用户
和操作系统用户一样,使用外部软件来存储数据,为一个应用程序执行不同的任务,如应用程序可对外部关系数据库进行SQL查询或者使用API进行套接字编程,执行矩阵代数,处理字符串,或者执行任何可公共可重用的部分。
四 理解软件能力
书中有个比喻很形象生动,把软件测试比作战斗,软件测试人员则和战斗中的将军很相像,必须通晓敌人,知道敌人的实力(软件中的隐错),制定出攻击策略(软件测试用例)。