昨晚是不是开箱有BUG啊,开箱不是伪随机序列发生器

我是一个Bug - 简书
我是一个Bug
本文翻译自
非常有趣,同时能够学习到很好的方法。
为了使我们的工作更有趣,当我们的软件中有一个问题的时候,我们叫它 Bug。
我比较支持在软件工程中给予Bug以更广的定义,我喜欢把它定义为和项目相关的所有事物。大部分人定义Bug使用特定的定义,比如Bug是缺陷,问题,软件开发交付件(需求,设计,代码等等)中被植入的异常,或是被弄错的或者被忽略的,以软件故障的形式呈现出来。有些异常/问题不一定会因为缺陷或者错误而导致的,有时候它只是意外行为,这种Bug的特定定义我认为是比较狭义的,因为重要的关注点是没有被定义进去的。
这些都是关注我(bug)的人
Audrey 是我们的SQA主管--他的团队负责找到Bug!
Yves-Alain 是我们的开发主管,他保证软件中不引入Bug,但如果有Bug引入了,他的团队处理他们。
Oliver是我们的产品经理,他和客户一起确定我们程序需要做的事情。Oliver帮助我们确定哪些Bug需要处理,哪些不需要。
在这种做决策的团队中三个不同的视角是非常有必要的,这些角色是SQA主管,开发主管,产品经理。
在这个决策会议中,决定Bug是否需要修复,决定保留这个Bug不修复(遗留问题),这种决定通常是修复这个Bug容易对软件引发破坏,决定把这些Bug遗留在产品中,通常是客户容易忽视和不会碰到的情况。一个决策团队应该是小型的,有效的团队,它的人员组成都是有能力做决策的人员。一个差的Bug决策团队充满了没有能力做决策的人,这些人需要叫上更多的人来一起做决定。尽管一个好的决策团队优势也需要另外的输入,但是他们很少需要其他人介入一起才能够做决策。
SQA 主管是QA的代表,他提供Bug的客观信息,同时,开发主管和产品经理讨论这些信息并作出决定,SQA主管不应该去插手决定Bug是否需要修改,他必须是中立的。
开发主管是开发团队的代表,他的工作是评估修改Bug的技术风险。
产品经理代表客户,他的工作是评估修改Bug对客户的风险。如果开发主管和产品经理经常吵哪些Bug应该修改,哪些不用修改,那么这个团队是低效率的。偶尔的争吵是正常的,正常情况下都应该很快达成一致。在偶尔的没能达成一致情况下,我偏重于考虑产品经理的意见,因为他是代表客户的,他才知道客户的需求。
Bug没有好坏
当我们发现Bug,我们不问这个Bug是好是坏。我们确定它是否重要,我们考虑他对系统会造成多大影响。
Bug的重要性(优先级)和对系统造成的影响(严重性)是独立的,优先级和重要性是分别定义的。遗留Bug的优先级和重要性评估通常是软件能否发布的重要条件。因此人们把他们放到了重要的位置,以至于不能够让实习生来填这些信息,我经常遇到这样的状况,测试人员提出优先级和重要性,但这不是最终解决办法。每个Bug适用于4象限中的一种。
Q1 紧急,重要
Q2 紧急,不重要
Q3 不紧急,重要
Q4 不紧急,不重要
对于Bug数量四象限分布的正确理解有利于测试人员有效评估测试活动的有效性。如果发现Q3,Q4的Bug分布远超Q1,Q2,那么测试团队应该转移战场测试其他模块或者转换一下测试方法。
但是一些Bug是重要的
我们直接关注重要的Bug我们怎么来报告一个重要的Bug,答案是他系了领带。优先级的划分取决于人员,资源,时间等等的约束。一个一般严重程度的Bug在项目中貌似是致命的,对于项目干系人来说它是高优先级的但是不严重。Bug的优先级随着商业环境或者技术的环境变化而变化。在上周觉得这个Bug很重要但是在这周就变得不重要了。如果客户已经决定不再需要某个特性,这个特性相关的Bug可能之前很重要但这之后就变得没有意义了。Bug的优先级和严重性要考虑商业环境。他们必须知道利益干系人是谁,客户是谁,技术限制是什么,设计驱动是什么等等。这时候他们需要用现有的知识来调整他们对新Bug的看法和刷新对老Bug的看法。
一些Bug容易对系统造成很大影响
我们经常关注这些危险的Bug
这些危险的Bug是严重等级高的Bug,这些Bug会使程序崩溃,更严重的是会破坏数据。就像优先级一样,严重等级随着商业环境而改变。
被蚊子咬也许没什么伤害
单一的小Bug看起来没什么危险
但是成群的蚊子就很可怕了
成百上千的小Bug同时出现就很可怕
大量Bug会激怒用户甚至使程序不可用,尽管单个Bug来说并不严重。
严重级别低的Bug如果影响了大量用户就会引发大量客服投诉。
被一个蜜蜂扎了只是一点点疼
同样的Bug可以在不同计算机程序中找到。在一个程序中这个Bug没什么破坏性
在帮助系统中文法错误不会影响任何人甚至不会让人觉察。
但如果你对蜜蜂过敏,那么它将会杀死你
但同样的Bug在不同程序中就是致命的。
在医疗软件中,一个语法错误比一个系统死机更具有灾难性的影响。如果医疗软件死机了,医生最多不用这个软件来诊断了,没人会受伤害。但是如果是一个语法错误,比如过去式和现在式混淆了,意味着影响了患者的就诊历史记录读取,这可是关乎生死的事情。
Bug喜欢聚集在潮湿肮脏的环境中
当我们急匆匆的开始够条件新的软件时,我们的办公室和程序就会陷入混乱。我们知道这会带来很多Bug。
糟糕的软件工程实践会陷入图中所示的困境,Bug满地。
Bug也存在于家附近,院子附近。
当我们愿意花些时间做一些清洁,我们的办公室和程序就会更加干净和整洁。
也许还会有一些友好的Bug。
修复Bug是一个业务上的决定,有时候修复Bug不见得会让你收益。
友好的Bug是那种不会影响到用户使用的Bug。只是这些Bug和需求不太相符合,但它并不坏。有时候客户非常熟悉的特性也许会是一个Bug,因为它不符合需求,其他一些只是程序中的细小差别并不影响客户使用,我们认为是友好的Bug。
AVT-710病人详情记录含有很多的Bug,但是人们可以避免它们。就算是包含有这些Bug,他也是一个可靠的产品。
有些Bug已经沉睡了很久
有时候我们是在程序用了很久之后才发现Bug的。
我们称这些Bug是沉睡的Bug。
在一定的时间内软件内部含有Bug,但这些Bug并没有暴露,当有一天软件上下文改变时Bug就暴露了。
经过经典的例子是Visio97, 他是在硬盘空间比当前需要的空间小的时候发生的,当在新的电脑(新电脑有很大的硬盘空间)安装Visio97时,安装程序会提示空间不足。为什么?因为Visio97采用32位的算法来计算剩余空间,在产品发布的时候,一点都没有问题。但是当新的有更大的硬盘空间出现的时候(此时已经硬盘空间已经不是32位算法),就出现问题了,数位被截断了,计算方法错误。这个Bug是沉睡的,因为它是因为在技术限制被突破后暴露的问题。
有时候软件的使用用途也会变,比如,Windows 的打印机(LaserJet2惠普打印机 )驱动是设计成打印表格的,驱动中的代码并不能处理彩色照片,这些驱动在那个时代是好用的,但是现在已经不可用了。
又或者软件的用户群是会变换的,比如今天软件是专家在用,没准有一天就是一般的民众在使用,这两个群体的需求和兴趣点可以不一样的哦,因此当专家用的时候并不是bug而在普通大众来说可能就是一个严重bug。
令人惊奇的是---我们幸运的发现一个蝴蝶
有时沉睡的Bug被唤醒来了。
如果我们幸运,这个Bug不会对系统有任何影响。
有时当沉睡的Bug被唤醒时,我们叫他“特性”。
当沉睡的Bug被唤醒时,他们成为系统的特性,不管你喜欢不喜欢。
当沉睡的Bug被唤醒时,它会有向后兼容性的问题,特别是Bug本身被依赖时。一个经典的例子是微软word的页白计算,在老版本中是计算错误的。当微软已经修复了这个Bug时,所有老版本的文件页边都会有些许的偏差。
我们的网很容易捕获这些蝴蝶。
当我们测试一个电脑程序时我们制定一个测试计划。
测试计划就像捕获Bug的网。
一些测试计划只能捕获明显的Bug。
测试计划聚焦不同粒度的Bug,取决于测试时间和预算,有时候我们希望发现尽可能多的风险尽管不是很深入,而不是深入的测试每个风险。网越细,测试的深度越深。
有些测试套叫做FAST,全称是 Functional Acceptance Simple Tests。这个测试只测试系统处理正常输入数据的能力,让我们对系统对正常输入的处理有信心,但是它不保证系统能够处理其他情况。**
但是这并不是我们的老朋友蚊子
一些测试计划 ---“网”非常好,能够捕获很小的蚊子(Bug)。
我们应该用什么样的网呢?
有时我们用一个测试计划来捕获大Bug,然后,如果我们还有时间,我们使用更细的网来捕获小Bug。
当我们被蚊子咬疼的时候,我们会拍打它,抓它
当Bug能否以简单直接的方式处理的时候,我们感觉是小小的。
抓一下能够减少疼痛但是也许药物可以更好解决问题。
Bug造成的小小影响通常可以通过改变人们的使用方法来解决。
Bug能够被修复,避免和忽略,如果Bug不能被修复,应该引导用户改变使用方法来避免Bug的发生。**
驱蚊水能够使蚊子远离我们
有时我们找到了很好地办法来避免一类的Bug。
有很多专用的技术可以发现特种类型的Bug。
一种好的办法是自我数据严重机制,对于特定数据输入,理解软件后能够定义出测试oracle。这是一种非常好的发现数据完整性Bug的办法。
但是如果蚊子是成群结队的,那么驱蚊水也无济于事。
然后我们发现这些特定类型的Bug有很多很多兄弟姐妹。
找到缓冲区溢出Bug的技术是很好的一种找Bug方式,但是他们不能找到计算错误类型的Bug。Bug的类型可远远不止缓冲区溢出一种类型。
同样的,通过自验数据完整性的校验技术,在有很多界面Bug或者业务逻辑Bug阻碍了数据达到数据处理模块时,不是最有效率和最有效果的。
网可以让蚊子隔离在网外。
我们知道很多在最开始的时候就阻止Bug进入到我们程序的办法。
所谓的办法包含软件工程中的三个重要工作流:配置管理,需求管理,测试管理。他们同时包含了开发规则,静态分析,代码检视,新代码的交叉检视,单元测试,好的开发实践,好的架构和一大堆其他的。
一些人使用昂贵的微波灭虫器。
很久以前有个骗子销售员卖给我们一个新鲜刺激的玩具,叫做“bug zapper”。
我们深信用了它所有bug都被消灭干净了。
工具提供商的销售人员有时会误导我们,让我们忽视了成本和收益以及它的易用性。
比如:他们会声称测试自动化工具会捕获动作和回放这些动作,并能够解决你的所有问题。
他们会说,用这个工具吧,他们能够发现程序的所有问题。最初这会打动你,但是这些类型的工具要求大量的编程并且不能解决任何问题,甚至带来很大的维护成本,简直是一个噩梦。
工具提供商还会声称你需要一个需求跟踪工具,它将减少成本,但是工具本身就需要钱购买。减少成本的应该是建立起需求管理的规则。
微波灭虫器看起来很酷
最开始“bug zapper”貌似能够处理一些重要的Bug。
但是实际上并不能确保赶走蚊子。
但是Bug很快就有免疫力了,他们避开了bug zapper,我们连买bug zapper的钱都收不回来。
喷雾杀虫剂也许是个解决办法。
当我们修改Bug的时候一定要小心。
但是这样可能不仅仅的蚊子受到伤害了
但我们修改Bug的时候我们也许会引入其他Bug。
有时候解决办法比问题还糟糕,修改一个Bug也许会引入其他Bug,导致错误的系统行为。又或者Bug在功能层面完美的解决掉了,但是像性能,可靠性,可用性,可维护性等等受到了影响。
我们通过设计摆脱困境
但我们开始新的项目,我们深入思考如何避免引入Bug。
我们能够一开始就在一个干净整洁的办公室,开始新的想法吗?
软件工程的三个基本流程非常重要:需求管理,配置管理,测试管理。
如果这些被深入理解并遵循执行了,那么因为流程混乱导致的Bug将会很少,尽管因为项目风险造成的缺陷还是有,但是因为糟糕的项目管理造成的Bug将会很少。
或者搬到离森林更远的地方
我们用新的方式来编程。
尝试用新的技术和方法来规避问题是一个双刃剑的做法,比如,为了规避开发一个高风险模块,有时我们使用了第三方的中间件。这个可以完全规避开发中的问题,但是结果是引入了集成其他软件带来的风险。
当然,我们可以躲在里面,度过冬天
当我们不知道该做些什么的时候,我们可以坐下来,等到一切都平息了下来
有时候最好的办法是停下来,看看我们的全景图。取代****静待和编码,还有挥之不去的担忧,我们应该花时间去理解需求和识别有用的技术,工具,技巧,和过程。否则你会解决错误的问题。
有时一个项目本身是没必要的,曾经我帮助一个开发团队理清了需求,里面有很多不符合的需求,最终项目取消了。这个项目一开始就不应该启动,如果他们在最开始就花时间了解了这些问题的话,项目就不会启动了。
用烟熏走蜜蜂
我们用很多方法来处理Bug
我们可以把它吓走,它们并没有死,但是已经被规避了。
有时候暴露越多的Bug是一个好事情因为我们能否感知他们的存在。
有时候你可能无法隔离或修复它们,并且会存在很长时间,但是你知道他们在什么地方。
比如,有些公司在产品发布之前会开展激动人心的活动叫做Bug追击活动。员工周末加班利用****所有他们能想到的办法来****发现产品缺陷;这些Bug很可能在产品发布前不会修复或者隔离开,但是公司知道这些Bug存在。
Noel Nyman 发明了一种测试叫做猴子测试,一种随机测试技术,****探讨了应用程序随机输入,并用随机输入的方法找出Bug。这种测试一般是自动化执行的,****它能找到生僻的Bug,测试人员可能从来不会发现。
摆脱了地毯
我们摆动一下,使得这些Bug被甩到其他地方。
给房子消毒
这个比较好的处理他们的方法。
我们修复它并且确保他们不会爬到其他地方。
蜘蛛利用网来捕获Bug
我朋友James通过设置assertions执行程序来捕获Bug。
断言测试方法不管程序是在执行中处于什么状态,比如,当一个文件在被写入之前是opened状态,如果断言是否定的判决,那么开发人员就会认为是一个Bug。
在单元测试和早期的系统测试中,断言是快速发现Bug的有效方法。但是,断言并不能提供业务决策需要的信息。如果断言跳出来了,程序也就停止运行了。在系统测试的后期中,这意味着直到Bug被修复我们才能继续测试,如果这些Bug是一般的缺陷,那么时间将耗费在这个上面,因此断言在这个阶段应该退出舞台,断言更不适合存在于要发布的一个商用版本中。
青蛙喜欢Bug
人们在工作中积极的关注Bug,我们热衷于寻找Bug。
青蛙吃掉Bug
当我们真正的找到Bug时,我们修复他们。
是否需要修复Bug取决于业务环境。就像青蛙的胃只能容纳一定量的Bug,我们的开发团队也没有那么多的时间,精力,钱来修复所有的Bug。因此Bug的重要性和优先级需要定义以便做投入产出比分析以便确定哪些Bug是值得修改的。
不修复Bug的成本是对用户电脑的影响,大量投诉电话,公司的声誉等等。一些深藏的缺陷的修复带来的是 另一个Bug被植入的风险或是发现更多的缺陷的机会丢失,开发时间和精力的耗费,降低可用性,性能等质量目标的机会。
青蛙只能吃那么点Bug
我们一次修复一个Bug,当Bug很多的时候,我们分发给很多人来一起修复。
Bug想躲开青蛙
显然的,当我们修复Bug的时候,Bug尝试避开我们。
Bug通过迷彩色来伪装自己
有时候我们就算Bug近在眼前,却不能找到Bug的解决方法。
有很多种Bug伪装的方法。一种是普通模式,比如,在登陆之前抛出异常的Bug,在测试中,测试人员会直接登录系统而忽视这个Bug,不知不觉就漏过去了。这种情况下测试人员没有把这个当成一个Bug,长此以往,就被忽略了。
另一种是一个Bug被另一个Bug给掩盖了,比如,在一个数据库系统中,返回了一个错误的查询的Bug可以被查询报告的Bug给掩盖了。
还有一种是小Bug(或者是众多小Bug)掩盖了大的Bug,比如一个灾难性的错误被用户接口的错误掩盖,因为程序执行中根本跑不到这段代码。这也是为什么在bug修复之后需要重新测试的原因,他确保没有其他的Bug还遗留在系统中
但是青蛙也可以
有时候我们也需要默默地等待Bug现身
一些bug可以很好被系统检测到,对于这些Bug,比如BoundsChecker 安装了就可以观察到系统的行为,包括不适合的系统资源侵入使用和内存泄露等。
还有一些Bug可以通过模糊测试来发现,为了找出浏览器兼容性的Bug,只要通过不同浏览器来测试就可以暴露这些Bug。
越多的青蛙可以处理越多的Bug
曾经我们确信可以通过增加人手就可以找出和修复所有的Bug。
但是这么多的青蛙在同一个地方是一个大问题。
但是这无济于事,因为这让我们陷入混乱和困惑。
当发现一个Bug的时候你应该怎么办
当我们发现一个Bug,或者一箩筐的Bug,我们集合起来开个Bug评审会。
我是一个Bug:把它收集到一个罐子里,顶部有孔,我们研究它。
我们仔细的研究Bug。
我们怎么抓住Bug,他重要吗?他的破坏性有多大?
我们观察:我们是如何发现这个Bug的?是否需要现在就修复它?它的破坏性有多大?
有些Bug是我们的朋友
如果我们足够幸运的话,我们可以把这些友好型的Bug放在程序里面很长一段时间。
有些Bug是只要我们远离它就可以的。
如果我们用不同的方式来使用这个程序,我们可以避免这些Bug的触发。
有时候我们可以提供更好的程序使用方式,而不是去修复Bug,在没有时间回归测试的情况下这一点特别对,因为修复一个Bug很可能带来更多的Bug。
踩住蚂蚁山尖可以避免蚂蚁过来。
有时候是堵住洞迫使蚂蚁出来。
然后一段时候后放开
让问题转移到另外的地方。
热补丁并不能解决问题,第一次就应该修复它。
和蚂蚁共存并不见得就是很坏的情况。
在我们决定把Bug遗留的时候。
一般我们在桌上吃晚餐,而不是在地上。
我们必须清楚地知道程序将会如何被使用。
考虑程序将被如何使用,就算是同一个程序也可能被不同的人用不同的方式使用。一个Bug对一种用户来说是致命的,对于另一类用户来说是无关紧要的。
如果你必须处理它们。
当我们决定处理一个bug
我们很自豪的修复这个Bug,我们专业的,严格的检查Bug已经修复。
回归测试经常用于确保Bug已经被修复了,并且没有其他Bug被引入程序。
你想着你已经完成了。
最重要的问题是我们要问自己我们是不是已经完成了我们的工作。
是时候让某些人使用的我们的程序了吗?
能发布了吗?
我们看着我们的已知的Bug。
我发现软件工程师的一个基本问题:如何知道你已经完成任务了。很多开发人员开始开发的时候并不知道这个问题的答案。
答案有好有坏,一种情况是开发人员觉得要下班回家的时候就是完成任务了,他们快速的完成任务就进入到开发的下个环节,我发现这样的结果就是糟糕的质量。如果我们获取到需求管理,配置管理,测试管理的相关信息再来回答这个问题可能会更好。
回答好这个问题也许需要获取到某种程序的代码覆盖率,静态分析结果,质量属性情况如可用性,可靠性,可维护性等的信息。
但是为了问出这个基本的问题,准出标准必须精确定义并且达成共识。比如,用单元测试来作为准出条件,会问到"我已经实现了这个单元/模块的代码了吗?准备好移交给其他人员了吗" 如果单元测试的很模糊的,它很可能(大多数情况下就是)是不可控的准出条件,因为开发人员没有正确理解这个单元代码意图。这种情况下,当开发人员使用单元测试的结果来决定这个单元的代码是否开发完成,他是基于一个错误的假定的。
这也就是我们需要在项目或者一个特定任务中要有共同的语言,有套共同遵循的规则,比如准入准出条件,通过这种方式,项目中的人都知道在项目中扮演什么角色,应该遵循哪些规则。
当有一个Bug遗留时
我们问自己它的重要性如何,它对系统影响有多大。
同样Bug也在看着我们。
Bug确定是可以和我们共存的。
当我们确定遗留的Bug可以和我们共存的时候,我们确定我们的工作已经完成了
至少到现在为止
至少到现在为止
我们停止测试并且可以洗洗睡了。
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
1、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。 兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。 兼容测试的重点是,对兼容环境的...
文章来自:http://blog.csdn.net/mj813/article/details/ 问:你在测试中发现了一个
bug ,但是开发经理认为这不是一个
bug ,你应该怎样解决。首先,将问题提交到缺陷管理库里面进行备案。然后,要获取判断的依据和...
1.问:你在测试中发现了一个
bug ,但是开发经理认为这不是一个
bug ,你应该怎样解决。 首先,将问题提交到缺陷管理库里面进行备案。 然后,要获取判断的依据和标准: 根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接...
这样的夜晚,安静的让我想再听一听你讲的故事!
晚自习下了之后,一阵又一阵的喧闹散尽,我才起身将做完的那套四级题合上,顺手塞进已挎在肩上的书包里,戴上耳机,关了灯,走出自修室。迈着缓慢的步子从六楼到一楼,空旷的楼道里,除了我,没有别人,正因为这段小距离没有了白...
题目 给一个有序数组,将数组中连续的数字的变成range的形式 分析 这道题居然是medium难度的让我大跌眼镜。一遍扫描就可以了,具体看代码 代码
容祺智能无人机在森林防火中,主要用于森林防火日常巡查,森林火灾火情监控和辅助救援等应急工作。可通过搭载的遥感设备进行日常巡查,监控森林火灾火情,找出高温火点等应急救援工作,尽量将森林火灾扼杀在萌芽状态。 无人机森林防火应用特性: 1、全碳纤维结构设计实现工业三防,环境适应性...
看了不少风靡全球的英国美国电视剧和电影,小小的抒发一下自己的感受… 19、美剧
个人觉得美剧突出体现热情奔放,个性真诚,对爱与情与性的坦白解读。剧情总在无情无尽的爱与恨,人性的善于恶之间纠缠,再加上时常出乎预料,但看多了也会无聊和疲惫。比如说越狱,那么多季那么多集...
每每想佯装着以开玩笑的口吻对他说一句:你不爱我了,才发现他是真的不爱我了。。。
这是苏慢慢最近常常挂在嘴边的话。
她并不是最近才失恋。确切来说,她失恋两年不足但一年绝对绰绰有余。按照常人的步伐,此时应该已经步入情感复原期了,但不像常人的苏慢慢偏不。这么一对比,她的疼痛...为什么每次产生的伪随机数都是一样的?
[问题点数:20分,结帖人gkd_0000]
本版专家分:6
结帖率 100%
CSDN今日推荐
本版专家分:8130
本版专家分:3020
2006年7月 C/C++大版内专家分月排行榜第三
本版专家分:3269
本版专家分:139644
2007年 总版技术专家分年内排行榜第八2006年 总版技术专家分年内排行榜第八
2007年7月 C/C++大版内专家分月排行榜第一2007年6月 C/C++大版内专家分月排行榜第一2007年5月 C/C++大版内专家分月排行榜第一2007年4月 C/C++大版内专家分月排行榜第一2007年3月 C/C++大版内专家分月排行榜第一2007年2月 C/C++大版内专家分月排行榜第一2007年1月 C/C++大版内专家分月排行榜第一2006年12月 C/C++大版内专家分月排行榜第一2006年11月 C/C++大版内专家分月排行榜第一2006年9月 C/C++大版内专家分月排行榜第一2006年8月 C/C++大版内专家分月排行榜第一2006年7月 C/C++大版内专家分月排行榜第一2006年6月 C/C++大版内专家分月排行榜第一2006年5月 C/C++大版内专家分月排行榜第一2006年4月 C/C++大版内专家分月排行榜第一2006年3月 C/C++大版内专家分月排行榜第一2005年8月 C/C++大版内专家分月排行榜第一
2007年8月 C/C++大版内专家分月排行榜第二2006年10月 C/C++大版内专家分月排行榜第二
2006年1月 C/C++大版内专家分月排行榜第三2005年7月 C/C++大版内专家分月排行榜第三
本版专家分:5729
本版专家分:13200
2006年7月 C/C++大版内专家分月排行榜第二
2006年8月 C/C++大版内专家分月排行榜第三
本版专家分:6
结帖率 100%
本版专家分:6
结帖率 100%
本版专家分:5
匿名用户不能发表回复!|
CSDN今日推荐后使用快捷导航没有帐号?
欢迎您来到凯恩之角,奈非天!
查看: 9824 - 回复: 80
帖子:379符文:12
本帖最后由 MangoSun 于
20:16 编辑
前言:文章有点长,麻烦请给点耐心。单纯脸派学院的朋友绕道吧。我知道开这篇绝逼有人说是讲废话,即便我把随身硬盘里EXCEL的数据贴上来,照样有人觉得这是废话,但我相信没人愿意自己消化没整理的数据,贴了只是装逼罢了。其实破解及研究游戏机制也是个极有乐趣的事啦。至少我这么想的。
特此强调发文用意:
1.帮助那些搜集不出基础套装、个别传奇的朋友
2.帮助理解随机机制,减少、避免脸黑的时间浪费与纠结
3.想知道马上出上限远古炉子的玩家,建议你去主机板专区,有惊喜
4.休闲探讨游戏机制
基于昨天500个碎片...连赌出5个勇者无畏戒指..就在几秒内
如果掉落是随机,我来试算以下概率:
假设掉出此戒指的几率为 0.001% ,我连续性出5个的概率为 0.001% 的5次方 = 0.001%
我他妈这是中马票了~妈我在这!!
墨菲定律告诉我们,只要有几率发生的是就一定会发生。
但是为何版上各位小伙伴都遭遇不止一次的连续出一种东西的经验呢?
因此我忽然特别想分享一个我从暗黑2一路玩到暗黑3的数据及分析搜集,想想以前我是个比哥布林更哥布林的暗黑脑粉,打游戏一个字“刷”
曾经开excel统计掉落近1年,每天撸10小时以上的暗黑,到今天...论坛新人想贡献一些不靠谱分析给非洲难民们,欧洲人请速速离开。
先前广为讨论的角色掉落列表理论出现,这理论完全不违背暗黑初期等级掉落设计的范畴。
假设我出生1级...我的传奇掉落池为0,所以我在不升级情况下是死也打不到传奇的。
随着我的等级提升,我的掉落列表完全是跟着我的等级以及职业解锁,而程序员只要在传奇池内植入随机筛选公式,便可简单的在3个随机公式中提出我的掉落奖赏:
1.roll出掉落的品质
2.roll出该品质的品项及属性种类(随机池内所允许的种类,包含职业掉落几率)
3.roll出此品项的属性数值
那为什么始终打不到某样东西而某些基础设定极低几率的东西我却老打到?
为了解决随机带来的噩梦,增加游戏体验度程序员降低了某些物品基础掉落的门槛
于是不止一种的掉落设计理论诞生了,而每项的随机里面其实物品预设几率不同
其实一场游戏中我们体验到的不是只有单一的掉落模式,首先我想先介绍初始的世界掉落的筛选方式
10:07 上传
大家应该不陌生吧?很多游戏应用了这种伪随机,而底下的指针就是个按顺序快速移动当你启动落点时,决定它停在什么位置。
没人叫你现在杀他嘛?等个两秒行不行??出传奇啊、哥!!!
此游戏你看不到时间轴。这样能更好的控制几率的准确性,所有的非完全随机皆基于此方式的延伸。这种随机其实是落点时间轴的方式。有点像俄罗斯轮盘...
所以我们谈到的几率高低,都只是落点长度的区别。以下的探讨皆基于此时间轴以及指针的移动分析。
当初暗黑1~2代时,游戏开发者设计了基础的筛选轴,而暗黑,甚至暴雪公司的游戏,皆沿用这样的基础做伪随机掉落,我们以下分三类介绍:
1.一般掉落轴:
各颜色长度会依照踢罐子.开箱.翻尸体.打精英而变动。世界掉落轴的稀有物可以靠公开游戏界面的“宝石启动“改变,相信老暗黑迷不陌生,但宝石启动不影响BOSS的轴变动,所以开启宝石成功以后,都去刷爆奶牛关求光。
2.BOSS/精英掉落轴:
09:53 上传
暗黑2里按章节来区分有机会能获得的装备种类越后面章节筛选池子越大。
3.物品品项筛选轴:
20:24 上传
当你第一次筛选到了传奇,你会进入第二筛选,就是传奇种类的筛选,当然也有人认为第二次的筛选不存在,而是直接存在于BOSS或一般掉落轴里,因为超稀有传奇的掉落跟你打什么怪是无关的,后期大家流行刷第4章或奶牛关的金闪闪“暴躁外皮”出超稀有的几率比BOSS高得多,这也间接说明第二次筛选跟超稀有无关。但本人认为单纯是跑图速度问题导致在效率上取舍,舍弃了较长的传奇轴,用次数堆叠几率..因为打一场巴尔的时间,我可以刷5场暴躁外皮,而当时第2章的墨菲斯托的掉落池里是没有超稀有传奇的。(例如:鹰号角.风之力.祖父...等等)
但玩过暗黑2的基友都有过这个经验,这超稀有传奇也许你刷个几年看不到,本人5年暗黑生涯超稀有装备只打过1把风之力,圣骑士套装两件,冠军剑一把.....祖父见都没见过。
期初暗黑3仍沿用了2代的方式,并且残忍的把boss掉落轴拿掉,导致掉落非常的坑,理由只是粑粑觉得刷boss不酷,甚至把传奇设计成废柴。当然这导致了开卖三个月游戏弃坑了一半玩家,团队也被撤换了...
基于这些失败粑粑决定让玩家更能体验掉落快感(其实只是想卖掉资料片),于是在这样的掉落框架下加入了其他可变量的掉落轴弥补”打不到宝的怨声。
以下介绍暗黑三资料片独有的新掉落机制:
1. 低保的传奇随机模式:
低保的产生方式有以下两种,但其中一种一直没公开过,以下介绍:
A.长时间未登录奖赏,简称“打宝蜜月期”:
这部分粑粑未公开但一直是沿用2代的潜规则,只是方式不同,不算新机制。2代时创立新角色刚刚满级会有打宝蜜月期,而暗黑三则是在你长时间未登录游戏后,下次登录是有个短暂的“打宝蜜月期”。这时间你踢打腾甩各种姿势开光...客官自行尝试
B.随游戏时间递增的掉落率:
官方蓝贴对于低保的描述为上图所示,并且在掉落出任意传奇后重置低保几率。
10:24 上传
但实际上的低保是这样的,他是一个完全独立于世界掉落之外的“额外掉落”,这个轴是个零和游戏,只有掉与不掉。你不难发现,时常打一组金闪闪的时候,打出了掉落物品数预设以外的传奇物品,游戏一到低保的极限时间,基本上摸个罐子都会掉落传奇,然而“除了低保掉落外,所有世界掉落均不会影响、重置低保”。
10:47 上传
但掉出什么样的低保,完全依照传奇品项初始几率轴以及传奇轴两项来筛选,比如粗糙靴长度10mm,炉子0.1mm,所以就是按东西好坏明显体验掉落难度,缺点是这就像玩彩票,一家欢喜百家愁。但至少能得到传奇。
2. 赌博的低保及时间轴:
赌博的传奇池别于世界掉落,你能制定部位缩小池的部位进行落点,加上职业掉落85%,某些部位池的范围极小,自然出现套装概率就大了。外加赌博的筛选指池小,也就是每件物品轴长大,所以你很可能因为手点的快,不断在这时间拿到一种传奇物品。而赌博的轴是这样运作的,此物品一直未赌出传奇,你的低保会提升。不同部位的购买会是互相无关的,但提升是并行的。你可以尝试赌鞋子直到出现任意传奇后立即换赌个腰带,你会发现同样数量的碎片能拿到更多不同部位的传奇。因为不同部位的赌博不会重置低保几率。而你坚持赌同一部位...很可能你500碎片换一个垃圾。
所以赌博技巧为:
1.赌套装适用,因为池集合小。
2.赌到传奇换部位,因为掉落轴新开但低保不重置,此时间的传奇几率大。
3. 角色的掉落池筛选模式:
角色满级后,系统会给你一个传奇池,但这池不完整,不过池给什么完全看角色当初创建时的脸黑白,池里预设了好物品,你能更高几率获得它。随着你随机到的第一样该传奇开始,你的池会加入此物品,在此范围的roll优先于世界随机掉落。不在列表里的,你只能靠那个不知道几位小数点的几率去赌。
所以打不到某物品时有两个方案:
1.提高巅峰等级慢慢打高层提高稀有掉落,土法炼钢!
2.重练角色赌池的初始集合,测试初始集合建议在1~70级+50场小秘境内评估。(评估方式为超稀有物品的第2件掉落间隔)
4.宝房的筛选:
所谓宝房的来由源自于暗黑2的宝石启动小彩蛋,某些房间的启动能掉落“传奇品质”的基础率不同,但暗黑3的方式不太一样,他运作不是单纯基于你所开的游戏,而是独立按章节以及秘境重置,很多人认为打第一场密境的传奇掉落可以测试是否为宝房,但事实上每一次重开的密境,都重置了掉落传奇基数,如过你在短时间很快获得3样的传奇,请尽量撸完这整场密境。但别以为从此高大上,因为只是传奇“多了”!
然而,轴的启动点,也就是快照点的理解是很重要的,以暗黑三来说,打boss、踢罐子、开箱、杀金闪闪、砍白怪、赌博同一种物品、等等都会启动各自的掉落轴。轴是以时间为单位,但是变换项目的间隔小至0.1秒或更低,举例来说:池子里面只有10样物品,所以你在10秒周期内1秒换1项,如果池子有100样物品,你10秒内每样物品的周期就只有0.1秒。因为
池的集合越大、轴的启动数越多,看起来越随机,相反的,池的集合越小、启动越少,重复的几率就越发明显。而不同的时间轴变换物品的时间周期是依序并且并行。
举个例子:
1.赌博我选了赌身体部位,不是因为便宜而是因为基于身体部位的传奇种类少,所以锁定特定品项较容易,相对武器就池子大,所以不易锁定。这就是集合大小影响的伪随机。
2.赌博我先赌了头部,开光以后立马换赌靴子,马上又开光了换赌手套,这样比我在同一件种类上坚持收益来得好。屡试不爽。当我掌握到了时间轴的顺序,我赌出光不再靠运气。这就是启动时间轴的数量大小影响的伪随机。
掌握掉落的特性,可以帮助自己人物的快速成型。介绍这些机制不代表你明天就投胎成欧洲涅法雷姆,因为你能控制时间轴以及掉落池池子的地方只有以下三点:
1.找出角色掉落列表
2.最快收集套装
3.快速搜集传奇
但是你无法决定乱数的属性,所以对于获取池较大的武器来说,开出好武器已经不易,还得看脸roll素质。
无论如何,希望此篇不负责任攻略能帮助广大基友降低搜集难度了,我们有志气,做不成欧洲人,也别当泰瑞尔,是吧!?
==============================================================
最后解释数据计算的证明:
因为这里解释的理论是取样方式对于计算机的应用,较为晦涩。无兴趣者请直接跳过。
在点评里有人指出“取种”精确到ms,其实计时器的精确于取种无关,关键是此游戏编程时的取种方式。
首先,必须强调:计算机的随机取样器编程,基本都是伪随机数生成器(PRNG)。以下以“问与答”说明到底为什么玩家操作后容易直观地发觉差异性。
Q:为什么我打到的装备时常有规律性?换个角色玩又规律掉落其他某物品?
A:随机数生成器是这样的,基本上为了防弊,所有的掉落随机种子的取得绝对不会是在玩家的客户端以用 户按键command事件来生产,外加打怪时将会启动大量的取种运算,由客户端取种会造成严重延迟(类似怪死了东西N秒后才生成),所以取种一定是在服务器端完成,也就是使用timer控件编程,取种时间将变得有规律性。所以当样本量较小的时候,比方说赌博特定部位,更能看出重复及规律。
实际举例吧:
假设游戏会掉落10样物品,每样物品的系统取样间隔为1秒,我们的取样区间为10秒一个循环,服务器的取样系数算出来为11秒(为了简化理解这样假设,实际种子获得后还会计算随机参数,但有一定规律存在),也就是说每次抽样的落点都会是不同物品,
这样我们就明白了。由于服务器自行运算随机种子是由计时/计数器完成,那么物品的出现将会形成规律,加上暗黑的装备样本量小,某些物品又被设置成高掉落与低掉落,占用取样间隔不仅影响高掉落物品本身,也影响低掉落物品,满足某种循环或取样次数时,你就发现了规律。而取种系数在你角色生成同时便决定了。往后你只要打怪时,服务器那端只要下指令抽取你的“取种系数”封包,经过一番牛逼的计算生成了你个人的随机掉落。只要有系数算式存在,必然有落点规律。
Q:有角色掉落列表的存在吗?
A:其实角色列表真实面貌就是服务器取种时使用的计算参数...
今天电脑要模拟随机,必须在每次系统抽样落点有个独立算式的生成,否则会更远离简单抽样原则...
简单说服务端不能使用由玩家发出击杀封包的落点来计算,原因是以数据库方式试出了规律后,就可做掉落破解了啊!
这取决於暴雪使用绑定在角色的偽随机码是几位数,但位数够大也不能解决样本过小的问题,依然是循环抽样的很明显啊。而一般编程均使用逆转法抽样(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。此种方法原理简单、编程方便、适用性较為广。缺点是用此法其基础是均匀分布,均匀分布PRNG的优劣决定了整个随机数体系的优劣。而粑粑蓝帖早已承认过掉落不均等。每样物品的区间在此情形下造成了循环。而循环导因的参数是角色生成时所成型的。
再者有版友回复此法的存在悖论为的“布尔值的增加导致运算不易”,以此证明无列表存在。
其实,这情形只在取种时定义由用户端command事件才会造成运算压力,若是服务器端运算,那就是使用timer,而timer是由计算机时钟记数器来精确控制时间间隔的控件,时间间隔相同的情况下,记数器前后的值之差相同,这样时钟取值就是呈线性规律的,所以随机种子是呈线性规律的,生成的随机数也是有规律的。要验证这个推导很简单,当你网路延迟时,画面停摆,这时你的DOT伤害不能杀死怪或者不应有掉落现象,但卡帧结束后,你可以看到快速的回溯播放包含怪物死亡和掉落画面早已形成。这足够说明取种為服务器端的timer了。而玩家这段就是简单释出各种动作指令还有连线时的参数登录。
组图打开中,请稍候......
&这篇文章开篇应该先着重讲述一下薛定谔的猫的理论,在此基础上展开,文章瞬间高大上了&
&麻烦楼主先把掉落品质和掉落概率分清楚讲好了再发帖,再错误的方向努力结果就是来搞笑么&
&虽然看不懂,不过毕竟楼主下了很大功夫,大家不要太苛责了.......
我能说我更新之后出了7把粪撸没有远古么!有掉落列表有个蛋用!&
&基本都是废话&
&基本废话- -随机算法取种本身就可以精确到ms级,更不谈传说中的真随机数:网络延迟了&
&这是什么狗屁结论。&
先给金币,等你补图
http://tw.battle.net/d3/zh/profile/Mango-3211/hero/
帖子:379符文:12
我直接统一回复信与不信的人吧!玄学没有,只有计算机应用
Q:为什么我打到的装备时常有规律性?换个角色玩又规律掉落其他某物品?
A:随机数生成器是这样的,基本上为了防弊,所有的掉落随机种子的取得绝对不会是在玩家的客户端以用 户按键command事件来生产,外加打怪时将会启动大量的取种运算,由客户端取种会造成严重延迟(类似怪死了东西N秒后才生成),所以取种一定是在服务器端完成,也就是使用timer控件编程,取种时间将变得有规律性。所以当样本量较小的时候,比方说赌博特定部位,更能看出重复及规律。
实际举例吧:
假设游戏会掉落10样物品,每样物品的系统取样间隔为1秒,我们的取样区间为10秒一个循环,服务器的取样系数算出来为11秒(为了简化理解这样假设,实际种子获得后还会计算随机参数,但有一定规律存在),也就是说每次抽样的落点都会是不同物品,
这样我们就明白了。由于服务器自行运算随机种子是由计时/计数器完成,那么物品的出现将会形成规律,加上暗黑的装备样本量小,某些物品又被设置成高掉落与低掉落,占用取样间隔不仅影响高掉落物品本身,也影响低掉落物品,满足某种循环或取样次数时,你就发现了规律。而取种系数在你角色生成同时便决定了。往后你只要打怪时,服务器那端只要下指令抽取你的“取种系数”封包,经过一番牛逼的计算生成了你个人的随机掉落。只要有系数算式存在,必然有落点规律。
http://tw.battle.net/d3/zh/profile/Mango-3211/hero/
帖子:433符文:3
说实话我语文不好,没领悟
&小蒜头鼻子&
http://us.battle.net/d3/en/profile/samurai/hero/
帖子:379符文:12
本帖最后由 MangoSun 于
22:38 编辑
图档有残缺...今天累了...明天再补...缺图了难怪有人看不懂
http://tw.battle.net/d3/zh/profile/Mango-3211/hero/
帖子:16374符文:6
有一点我一直没搞清楚,低保肯定有。但高限有没有?我总感觉刷再快,一段时间内出光总数也不会多很多。
帖子:1333符文:20
玩了舰娘就知道 都是玄学
http://cn.battle.net/d3/en/profile/Bruceyang-5741/hero/much to learn,much to do
帖子:379符文:12
本帖最后由 MangoSun 于
22:37 编辑
有一点我一直没搞清楚,低保肯定有。但高限有没有?我总感觉刷再快,一段时间内出光总数也不会多很多。
低保出了机率就重置...用赌博测试最好...请多准备碎片和纸笔
http://tw.battle.net/d3/zh/profile/Mango-3211/hero/
帖子:276符文:3
先标记一下在看,,
http://tw.battle.net/d3/zh/profile/Alex-22173/hero/
帖子:82符文:4
观看原始暗黑文明是如何产生的。。。围观山顶洞人们。。。
帖子:60符文:2
看完了感觉我的焚炉长度只有1nm
(其实我只想问问签名栏应该怎么弄)
帖子:280符文:2
50+秘境评估后,难不成刷不到好东西就删号重建?
http://us.battle.net/d3/en/profile/FunkyMonk-17485/hero/
帖子:18符文:2
说真的我觉得看了好像明白了些什么但也似乎完全没弄明白
http://us.battle.net/d3/en/profile/Edward-6684/hero/
帖子:345符文:2
看上去很屌,实际全是废话
http://kr.battle.net/d3/en/profile/%E5%BE%B7%E5%B7%9D%E5%AE%B6%E5%BA%B7-3541/hero/
帖子:93符文:2
太深奥 看不懂&&我只是想要星铁
帖子:304符文:4
有好几次,赌博的时候点非常快的时候,会出现两个同样的传奇,而且词缀都一样,数值非常接近。从概率来讲基本不可能,伪随机可能性相当高。传奇,种类,数值有可能都是以时间轴移动的模式。
http://us.battle.net/d3/en/profile/racerandom-1489/hero/
http://us.battle.net/d3/en/profile/racerandom-1489/hero/
http://us.battle.net/d3/en/profile/racerandom-1489/hero/
帖子:379符文:12
看完了感觉我的焚炉长度只有1nm
(其实我只想问问签名栏应该怎么弄)
新人任务有教学
http://tw.battle.net/d3/zh/profile/Mango-3211/hero/
您需要登录后才可以回帖
回帖后跳转到最后一页
拥有完善的论坛资料
凯恩·开荒者
凯恩之角金币纪念勋章:二阶
凯恩·创造者
凯恩之角金币纪念勋章:五阶
注册满一周年
凯恩之角赛季纪念勋章
凯恩·感谢有你
凯恩之角金币纪念勋章:一阶
Powered by

我要回帖

更多关于 伪随机码 的文章

 

随机推荐