背景
说到软件测试,人脑是最好的测试工具。当我们测试软件时,我们处理信息,解决问题,做出决定,并创造新的想法。作为测试工程师,我们应该意识到不同的思维类型,以便我们能够将它们与不同的情况联系起来。例如,当我们看设计图时,我们需要进行分析。当我们思考方案时,我们需要以抽象的方式思考。 不同的测试活动需要不同的思维过程。出于这个原因,能够为每项活动 "开启 "不同的思维模式是很重要的。
软件测试背景下的思维类型
让我们研究一下不同的思维类型,以及每种思维类型如何在软件测试和各种测试活动的背景下应用:
1. 创造性思维或横向思维
创造性思维意味着以一种新的方式看待事物。它是 "跳出盒子思考 "的定义。在创造性思维中,我们打破既定的理论、规则和程序,以一种新的和富有想象力的方式做事。例如,在测试的背景下,这可能是当我们应用新的测试技术时,例如成对测试技术,以减少排列组合的数量但增加覆盖率。
2. 分析性思维
分析性思维是指将一个整体分离成其基本部分的能力,以检查各部分及其关系。它涉及到以一种逻辑的、循序渐进的方式来思考,将一个更大的信息系统分解成其各个部分。
例如,当我们看建筑图时,试图找出通过系统和各个组成部分的路径。一个很好的例子是,当我们分析当用户提交一个表格,而请求被发送到一个与数据库通信的API时,会发生什么。
3. 批判性思维
批判性思维是一种通过仔细分析事物以确定其有效性或准确性的推理能力。它是关于成为一个积极的学习者而不是一个被动的信息接受者。批判性思维可能是测试中最重要的思维类型。作为测试人员,我们应该总是质疑想法和假设,而不是接受它们的表面价值。例如,当看一个用户故事时,我们可以对接受标准提出问题,而不是接受他们给我们的。
4. 具象化思维
具象化思维是指理解和应用事实性知识的能力。它与抽象思维相反。具体思考的人喜欢遵循指示,有详细的计划。他们讨厌任何模糊或模棱两可的东西。因此,具体思维的人更喜欢用清单和电子表格来工作。在测试的背景下,这是测试人员要求在开始测试之前应该存在所有的指示。例如,一些测试人员在用户故事中定义了所有的验收标准后才会开始测试。
5. 抽象思维
与具体思维相反,抽象思维指的是对实际不存在的事物的思考能力。以抽象方式思考的软件测试人员会关注想法和信息的更广泛的意义,而不是具体的细节。例如,在测试和故事梳理会议的背景下,具有抽象思维能力的测试人员可以想出有趣的测试方案。测试人员不只是阅读验收标准,而是看一个用户故事,并试图找出它与系统的其他部分的关系或影响。
6. 发散性思维
发散性思维指的是通过探索许多可能的解决方案,努力找到一个可行的方案,从而产生创造性的想法的能力。它涉及到将各种来源的事实和数据汇集在一起,然后应用逻辑和知识来做决定。在做探索性测试时,我们应用神谕和启发式方法,并根据我们以前的经验做出判断。
7. 聚合思维
聚合思维是指以某种有组织的、合乎逻辑的方式将一个主题的一些不同片段或观点放在一起,以找到一个单一的答案的能力。例如,当我们试图找到一个缺陷的根本原因时,我们会收集相关信息并提取必要的数据。
8. 序列式思维
顺序(线性)思维是指以规定的方式有序地处理信息的能力。它涉及到一步一步的进展,在采取另一个步骤之前,必须获得一个步骤的回应。在软件测试的背景下,这与我们按照预定的步骤和预期的结果的脚本相关。
9. 整体性思维
整体(非线性)思维是看到大局的能力,并认识到各组成部分如何形成更大的系统。它涉及到在多个方向上扩展你的思维过程,而不是只在一个方向上。在测试的背景下,这就是我们进行集成或系统测试的时候。
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/