探索式软件测试第三章局部探索式软件测试法“任何一个错综复杂的软件都与功能无异”---里奇·库拉维耶奇想不想测试软件?局部探索测试的好处不需要知道很多信息,就可以完成测试。重点把测试经验、专业知识、软件在操作环境下如何构建和运行的知识结合在一起,使我们在测试中做出正确决定。局部探索输入、状态、代码路径、用户数据、执行环境测试就是有所变,有所不变测试人员测试时必须回答如下问题软件运行时的表现是否符合设计预期?用户为了某个功能而购买软件,可是该软件是否实现了这个功能?软件运行时,是否足够快、足够安全、足够稳定,等等?我们用有限的测试时间测试一个庞大的系统,唯一希望就寄托在正确决定我们需要变动的输上。用户输入用户输入的基础知识1.什么是输入?输入是由环境产生的一种刺激,该刺激导致被测试的应用程序有所响应。2.输入的种类输入分为两类:原子输入、抽象输入。原子输入:单机按钮,字符串或整数等单个事件的操作(2,4,2048)。抽象输入:由相互关联的原子输入,合并成一个抽象输入(用“某个长度”表示1-32768之间的任何一个原子)。用户输入如何测试用户输入我们必须意识到我们正在测试的软件和其他软件并没有什么不同。1.文本输入基本原理接收输入→产生输出→存储数据→进行运算用户输入合法输入和非合法输入1.正向测试和逆向测试正向测试:测试程序是否可以正常工作逆向测试:测试使程序功能失效2.逆向测试—非合法输入—错误处理用户输入3.了解开发的心里和编写习惯开发人员不喜欢编写错误处理,更喜欢编写功能代码,往往对于错误处理草草了事。有些开发为了不打乱编写程序的逻辑,会跳过错误处理部分,完成功能后再补上。往往会忘记错误处理部分的编写。4.开发人员定义错误处理程序输入筛选器、输入检查、使用异常用户输入5.输入筛选器原理:用于防治非法的输入值被传递给应用软件的功能代码。输入屏蔽器把非法的输入排除在外,只把合法的输入值传给应用程序。测试点:是否正确的实现该功能?(非法输入值归非法范围,合法输入值归合法范围)是否可以绕过屏蔽器?(让非法输入值进入到系统或输入值进入系统后可以被修改)用户输入6.输入检查原理接受一个输入值,如果输入值合法,那么接着运行处理它,否则就产生一条错误消息并终止处理。测试点:抓住显示的错误信息内容,检查该信息是否显示正确。根据错误信息,有所启发,还会输入哪些值触发错误信息。用户输入7.异常处理代码原理:异常处理代码把整个列程当做一个整体,软件发生了错误,就会调用改代码进行处理。异常处理代码可以处理各种的软件状况,不局限于非法输入,但产生的错误信息比较笼统(如“发生错误”)。测试点:反复测试同一段函数,继续使用引发异常的输入数据或微改动看会不会出错。尝试运行其他地方,调用该函数的测试。连续不断的异常,会让程序彻底崩溃。出现错误,找出日志中存在的错误内容。用户输入常规输入还是非常规输入?1.定义常规输入:真实用户经常使用的输入值。非常规输入:在比较特殊情况下才会发生的或完全是机缘巧合才会发生的输入值。3.测试方法所有和Ctrl,Alt,ESC按键组合的字符。使用最终用户可能会使用的特殊字体。测试不同国家的语言以及特殊字符。一些特殊字符与软件运行的平台相关,根据软件运行平台的不同,找出相关的特殊字符,使用它们作为输入值。用户输入默认输入或用户提供的输入1.默认输入表单中存在的一些预先设置好的值测试点:需要检测设置的默认值是否为用户最常用的值。把默认值删除,留下空白的输入框进行提交。默认值接近的其他值测试。数值字段,输入比默认值大或小的数。字符字段,修改默认字符串头部几个字符,尾部几个字符,加上或删除几个字符。使用和默认字符串有相同长度但不同字符的字串。用户输入2.用户提供的输入测试点:在空白字段不输入字符或给某个API串一个Null的参数。如果是很多的输入字段(一个web表单输入员用户输入个人信息),显示出的错误信息会根据字段没有填而变化。用户输入使用输出来指导输入选择1.定义先明确自己希望软件会产生什么样反应,然后确定哪些输入会引发相应输出,然后在测试中使用这些输入值。2.输出的分类非法输出和合法输出3.方法:从输出结果来思考整个问题希望程序产生什么样的输出结果,然后参考所有的用户场景,看看如何去生成期望的结果。先观察输出结果,然后再选择新的输入并保证新的输出是重新计算后的结果或确保新的输出结果和原先不同。未被初始化状态的如何产生输出,已被初始化如何产生输出。测试被保存起来的输出结果,改变其值或功能测试该值是否在原有的值上被重新生成。状态软件状态基础知识软件的一个状态是状态空间中的一个点,由所有内部数据的取值来唯一确定。不断对软件输入,软件内部数据持续更新,不同的内部变量值导致软件处于不同的状态。状态如何测试软件状态使用状态信息来帮助寻找相关输入如果两个或更多个输入在某种程度上是相关联的,那么它应该放在一起测试。测试中,必须观察状态对结果的影响,一旦得到相关的输入和状态信息,就可以确定需要测试哪些输入组合,保证所有重要的情况和变化都被测试到。使用状态信息来辨识重要的输入序列当一个输入导致状态信息被更新时,多次使用同样的输入会导致一连串的状态变化,当状态变化被累加,就要考虑是否会溢出。代码路径1.定义一连串的代码语句,它起始于开始运行的语句,终止于运行结束的语句。2.导致代码路径变大的原因分支:程序→很多代码→一条代码的一个分支或多分支语句→很多代码路径测试人员必须明确知道有哪些分支,理解哪些输入会导致走这条分支。循环:循环可以导致代码路径变成无穷大用户数据测试数据含有的数据和软件真实用户使用的数据尽量相似。2.最好的方法连接真实数据库测试3.注意点当需要添加删除测试时,需要测试完成后还原数据。用户隐私不可泄露,谨慎处理数据。运行环境任何影响被测试软件行为的因素都是运行环境的一部分,测试时必须考虑到。1.运行环境操作系统、当前配置、进行交互的应用程序、影响被测软件运行的任何驱动、代码文件设置、网络情况、宽带性能。小结局部探索试测试•输入•状态•代码路径•用户数据•执行环境Ending!谢谢大家!