说一下你的思考过程 Tell me what you think(编程测试)

简介:

有这样一个脑筋急转弯的题目,不要试图去网络上寻找答案,思考一下,然后告诉我你的思考过程,不一定要有结果,找到答案不一定是最重要的,我更关心你的思考过程:以下是文章原文出处http://www.taixiaomei.com/archives/94。文章回答的很精辟,不敢独自保留,在此分享出来,供大家欣赏。

  这一个等式很奇怪,0比2大,2比5大,5比0大,为什么?

  When you see the following inequality, what will be the reasone, in your opinion? Don’t try to find the answer from the internet. Just tell me your thinking process.

  0>2,  2>5,  5>0

  Responses to 说一下你的思考过程 Tell me what you think

  看到这个等式首先想到的是为什么是反的。然后就想肯定不是代表普通的数学比大小,因为有计算机背景,初步就想到是不是asc编码符的比大小。但是继续验证ASCII编码是不正确的,其本质还是数字的比大小,没有摆脱那个思维,换种思路,上面这个等式的0,2,5其实并不是看做数字来理解而是一种图形,比如0代表圆圈,那2和5又代表什么呢?

  还是说不通,但是可以肯定的是0,2,5各自代表着某种已定的特殊含义,这种含义又有某种特殊的联系,现在就是要找出这种联。

  有了新的数据,推翻了上一次的猜测。并且推出新的猜测:“0,2,5其实并不是看做数字来理解,0,2,5各自代表着某种已定的特殊含义,这种含义又有某种特殊的联系”,现在需要用新的数据来证明这种猜测是正确的。

  这种既定联系的范围太广了,光从这个等式提供的信息量有点少啊。

  这种状态是否似曾相识?你测试的时候,是否有过这样的时候,感觉毫无头绪,感觉效率很低,感觉没有思路。。。

  这个时候,不妨试着运用Defocused Thinking,尽量拓宽自己的思路、找更多的数据(data)。或者运用Alternative Thinking,先做些别的事情,过一些时间再回来接着测试,也许就有新的思路了

  很好,你找到了题目与圆在某一方面的相似性。但是这个就是那个“答案(bug)”了吗?你需要找到更多的数据,证明它就是你要找的

  “答案”是我们最终要找的东西;我们测试的时候,bug不也是我们要找的东西吗?答案,事先你并不知晓在哪里,你也事先不知道bug藏在哪里,否则就没有必要测试了。都是在解决问题,都是在找寻未知,测试的乐趣也在于此了!

  可以从软件质量和软件测试的角度来思考这个问题:

  0、2、5分别表示软件测试中发现的bug数。0>2, 2>5:没有bug的程序固然比有2个bug的程序的代码质量高;类推,2个bug的比5个bug的代码质量高;5>0:0个bug不代表程序没有bug!而只能说由于个人测试方法、测试思维和知识的局限性导致了某些bug无法发现。从这个角度来讲,发现5个bug的测试用例和方法显然比没发现bug的用例和方法对保证软件测试质量的价值和意义重大。从某种角度来说0bug意味着测试方案的失败而非程序质量的成功。事实上,世界上最优秀的程序员,也不敢保证他的代码100%正确无误!

  这是不是软件测试的博弈?

  Well, I think I’ve got the key.0:石头;2:剪刀;5:布。

  非常棒!终于找到了答案。说说我能想到的启发吧:

  - 做这种题目就是一个寻找未知的过程,测试也是一个寻找未知的过程。这个未知可能是bug、可能是系统真实的表现

  - 当你知道答案时,你可能觉得这也没有什么高深的,很容易理解,剪刀、石头、布嘛,换句话说,正向思考还是很容易的出这道题的,可是让你找答案时,就不是那么容易了,因为这时你得利用反向思考的方法,这就是测试的思维

  - 不同的人思维方式区别很大,决定是否能找到这个答案和人的思维方式、知识经验都有很大关系,思维方式可以通过训练提高、知识经验可以通过学习和实践累积。【是的,我是在说,思维方式可以后天训练提升,而不是先天就决定了的】

  -  所以多做做这种动脑筋的题目、多解解各种谜题、多做做拼图游戏、多玩玩魔法和数独等,都可以训练你的思维,包括边际思考能力、系统思考能力、逆向思考能力等等,这些都是你的学习能力

  - 学习能力提高了,不管是产品知识还是测试知识,当然都对你来说不是什么难事了,你也能区分出来何时学习产品知识、何时补充测试知识、应该补充什么知识、应该补充多少知识了

  - 测试中,我们经常可以使用溯因推理法(adbuctive inference),也就是假设性诱导法

  1、你获得一些数据,希望能够解释这个数据

  2、你想到数个可能的解释

  3、你寻求更多的数据帮助你解释或反驳每一个解释

  4、你选择最能帮助你解释所有其中重要的数据的解释

  5、或者,你没有找到一个最合理的解释,那么继续寻找更多的数据

  - 科学家们会经常使用溯因推理法,测试人员也经常使用溯因推理法,实际上有些研究表明科学家们的思考方式与测试人员非常相似,他们经常质疑其他人习以为常的 东西、他们经常做各种可能的假设然后去验证、他们会时而想到其他人想不到的方面,科学家们的发现发明不是因为科学家们都是天才、都有超人的智慧,而是因为 他们的思维方式。所以多读读科学、社会学、人文学、认知学,了解发现问题、解决问题的思考过程,对测试大有裨益。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
10天前
|
人工智能 自然语言处理 前端开发
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
CodeArena 是一个在线平台,用于测试和比较不同大型语言模型(LLM)的编程能力。通过实时显示多个 LLM 的代码生成过程和结果,帮助开发者选择适合的 LLM,并推动 LLM 技术的发展。
42 7
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
32 1
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
55 2
|
2月前
|
安全 网络安全 数据安全/隐私保护
Python渗透测试之流量分析:流量嗅探工具编程
Python渗透测试之流量分析:流量嗅探工具编程
55 0
|
4月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
68 2
|
4月前
|
存储 测试技术 数据库
Python接口自动化测试框架(练习篇)-- 函数编程(一)
本文通过实际的编程练习,讲解了面向过程编程的概念和应用,包括如何定义函数、处理文件读写以及实现用户注册功能,最终将这些过程封装成函数,体现了Python作为脚本语言的面向过程编程特性。
35 2
|
4月前
|
测试技术 Python
Python接口自动化测试框架(练习篇)-- 函数编程(二)
本文通过具体的编程练习,深入探讨了Python中的函数编程,包括如何定义函数、使用参数和返回值,以及函数式编程的技巧和应用,如使用lambda表达式和递归函数解决实际问题。
33 1
|
5月前
|
Java 数据库 Spring
Java编程问题之在测试中使用CGLIB创建代理类如何解决
Java编程问题之在测试中使用CGLIB创建代理类如何解决
|
6月前
|
算法 Linux 测试技术
Linux编程:测试-高效内存复制与随机数生成的性能
该文探讨了软件工程中的性能优化,重点关注内存复制和随机数生成。文章通过测试指出,`g_memmove`在内存复制中表现出显著优势,比简单for循环快约32倍。在随机数生成方面,`GRand`库在1000万次循环中的效率超过传统`rand()`。文中提供了测试代码和Makefile,建议在性能关键场景中使用`memcpy`、`g_memmove`以及高效的随机数生成库。
|
7月前
|
设计模式 并行计算 算法
代码之韵:高效编程的艺术深入理解软件自动化测试框架的设计与实现
【5月更文挑战第29天】在数字世界的构建中,编程不仅仅是一门科学,更是一种艺术。本文将探讨如何通过理解编程的本质、掌握设计模式、运用算法智慧以及持续的性能优化过程,来提升编程效率和代码质量。我们将从宏观的架构设计到微观的代码细节,剖析那些让代码更加优雅、高效且易于维护的技巧与实践。