1. 人的天性
大多数——当然不是全部——软件 bug 源于我们自己犯的错误。虽然有些是因为软件编码工具和编译器发生了意外,但是大部分的错误得归咎于我们自己。
无论我们受到的 SDL 培训和安全工具有多么强大,只要我们还是人,我们就会犯错。如果你想问为什么电脑软件会有这么多的漏洞,归根到底是因为,人的天性就是容易犯错。
也就是说,我们在减少人为错误方面做得还不够。有很多程序员因为没有受到足够的 SDL 培训(有的甚至干脆就没有培训),所以根本就没有安全编程的理念。有时候我特别奇怪:有那么多的程序员以写安全软件为生,却居然不懂如何安全地编程。别不信,我敢打赌,你正在运行的银行安全软件中的 bug 不会比它能提供的保护措施少,搞不好甚至更多。
但是即使是那些经过严格训练的程序员还是不可避免出现 bug。举个例子,前不久有个自鸣得意的家伙发明的使用 HTML 标记字段确定颜色的缓冲区在浏览器中溢出了。不像以前还要输入 FFFFFh 之类的东西,黑客甚至可以直接执行颜色域的代码,从而导致浏览器过度消耗资源、缓冲区溢出。看到没有,这就是漏洞!而且很少会有人能预料到这种情况。
2. 不断增加的软件复杂性
就其本质而言,软件越复杂,就意味着代码行数越多。只要你在编程,那么即使你有多擅长写代码,也一定会有错误和 bug 出现。有人曾说,如果你能做到每 50 行代码中只出现一个错误,那你就已经做得相当好了。大多数程序员差不多每隔 5 至 15 行就会犯错。想象一下,这么说吧,一般性的 Linux 内核拥有超过 1500 万行的代码,有多少 bug 你自己算吧!
即使没有编码错误,互联网时代应用程序的整体互动性也是漏洞被攻击的途径。大多数程序员不得不和其他 API 协作,保存和检索文件,在多种设备上正常工作。所有这些过程都会增加被成功击破的概率。
而要防守的话,则需要写更多的代码,因为得抵御各种不同的攻击渠道。这么说吧,如果有一个只有 30 条汇编语言指令的恶意程序,那么针对相应的防守,你可能至少得写 50000 条汇编语言指令!
3. Fuzzers 也是人写出来的
新近冒出来的 Fuzzers 软件主要用于扫描软件漏洞。Fuzzers——以及其他用于寻找编码错误和漏洞的任何程序——都是人写出来的,还是这句话,是人就会犯错误。例如 Fuzzers 是不会发现颜色属性的缓冲区溢出这种情况的,这是因为我们在写 Fuzzers 的时候没有考虑这一方面。不过当我们意识到这一点并对 Fuzzers 进行更新之后,就能做到去查找各种类似的缓冲区溢出条件的字段。简而言之,我们要 Fuzzers 做什么,它才会去做什么。
4. 缺乏对供应商的问责
许多安全专家抱怨,只要我们不能找到证据起诉供应商的软件缺陷,我们就永远不会变得更安全。我赞同这一点,增加对供应商的问责有助于降低安全风险,但是同时却有可能会减缓进度。不过如果软件公司比现在更能担当起责任来,那么我想我们能在手机上、电脑上能自由自在冲浪的感觉会更爽。
但是成功源于功能和速度,而非安全。社会现状决定了我们必须牺牲一部分安全和保障去换取新鲜感。这不一定是坏事——因为能让我们成功得更快。但是这样一来我们就不得不承担这样做的后果。不过到目前为止,我们还是心甘情愿为了添加更酷的新鲜玩意儿而面对更多的风险。
5. 缺乏对黑客的问责
现实是上面没有一条能很快解决。但是软件出现漏洞就其本身而言,真不是什么大问题。说它脆弱是因为这些软件在面对恶意攻击的时候毫无抵挡之力。除非我们能制止黑客的猖獗行径,否则恶意软件将会一直困扰着我们。
为什么会有BUG?
Bug一词的原意是“臭虫”或“虫子”。但是现在,在电脑系统或程序中,如果隐藏着的一些未被发现的缺陷或问题,人们也叫它“bug”,这是怎么回事呢?
原来,第一代的计算机是由许多庞大且昂贵的真空管组成,并利用大量的电力来使真空管发光。可能正是由于计算机运行产生的光和热,引得一只小虫子(Bug)钻进了一支真空管内,导致整个计算机无法正常工作。研究人员费了半天时间,总算发现原因所在,把这只小虫子从真空管中取出后,计算机又恢复正常。后来,Bug这个名词就沿用下来,用来表示电脑系统或程序中隐藏的错误、缺陷、漏洞等问题。
1947年,计算机还是由机械式继电器和真空管驱动的,机器有房间那么大。体现当时技术水平的MarkⅡ,是由哈佛大学制造的一个庞然大物。当技术人员正在进行不整机运行时,它突然停止了工作。他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。
与Bug相对应,人们将发现Bug并加以纠正的过程叫做“Debug”(中文称作“调试”),意即“捉虫子”或“杀虫子”。
后来就直接用bug 在现在很多的软件测试中 都用Bug来说明那些问题。
“Bug”的创始人 赫柏的报告格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1945年的一天,赫柏对Harvard Mark II设置好17000个继电器进行编程后,她的工作却毁于一只飞进电脑造成短路的飞蛾。在报告中,赫柏用胶条贴上飞蛾,并把“bug”来表示“一个在电脑程序里的错误”,“Bug”这个说法一直沿用到今天。编辑本段游戏中的BUG
现在软件和游戏等越来越复杂,需要考虑到的东西很多.往往是在设计之初会有一些逻辑上的错误出现,导致软件或者游戏出错,或者出现了不是设计者想要的情景.这些都是bug.
其实所有的程序基本上都是于if来组成的逻辑.
就像人的脑子一样,你喜欢吃冰棒,但是为什么会喜欢吃,是因为天热,冰棒甜,你平常都吃着,...等等 .那么到了程序中,就变成,判断你吃不吃冰棒,那就要计算冰棒本身的一些特征,再结合你的一些喜好这些复杂的过程来得出你喜欢不喜欢吃冰棒这个结论.如果其中的一个原因没有考虑到,而这个原因又是致命的.那就导致结果的变化.比如你是因为看到别人喜欢吃,而你就喜欢吃了.程序中没有考虑到,那结果就是致命错误.这就是一个bug,没有考虑到那个因素.
为什么游戏会出现BUG
游戏本身也是软件之一 所谓的BUG是指软件本身功能不完善或者与用户需求不一致的地方 这是软件开发流程中不可避免的 因此才从程序员中衍生出一个新的职业 软件测试工程师 另外 只要是软件都有BUG 一个错别字 某处外观的错误 甚至使用不方便 都可以算缺陷 BUG不可避免 软件测试的目的也只是把BUG数量压制在一定曲线之内 让软件的功能 性能尽可能的完善 因为使用软件的用户给出的需求往往都是很不完善的 开发人员需要不断的与用户沟通 调研 进而使软件更接近用户的预期 而游戏软件的用户可以说数目庞大 想要统一需求很难 因此往往是按照游戏运行商的要求来做的
另外还有很重要的一点就是 游戏软件从开发到上线 往往周期都很短 有些时候赶工期有些BUG即使发现了 只要不影响上线都会延迟处理 每一个游戏都有内测 公测的过程 这些其实是软件测试流程的最后一步 包括玩家平时在玩游戏的时候都可以算成是软件测试中的贝塔测试
具体请参见软件测试系列的知识
软件测试中如何提交高质量bug
1、唯一性。一个bug说明一个问题,如果有能力的话,一个bug说明一类问题,这一类问题一定要能判断出是一条代码错误引起。 2、可重现。提供这个bug的精确步骤,使开发人员容易看懂。 3、一致性。bug描述及所有信息要前后一致,不可有歧义。 4、完整性。最好能抓图,一目了然;测试环境和特定条件一定要描述清楚,许多软件功能在通常情况下没有问题,而是在某种特定条件下会存在缺陷,所以软件缺陷描述不要忽视这些看似细节但又必要的特定条件。 5、简洁性。通过使用关键词,可以使软件缺陷的标题描述短小简练,又能准确解释产生缺陷的现象。 6、跟踪性。也许随着版本的变化,或者测试的深入,对bug有了新的认识或者新的判断,及时补充相关信息,能够提供给开发更有用的信息。 7、客观性。软件缺陷描述不要带有个人观点,不要对开发人员进行评价,软件缺陷报告是针对产品的。 其实在平时测试中,经常会遇到不能重现的bug,这些问题有不能提交bug,如果放过往往上线后出现的概率很大,问题也一般比较不可接受。所以我觉得对于重现不可重现的bug是做好测试很重要的能力。 1、保留信息。遇到问题,最好抓图,搜集错误日志,保留测试现场环境,一旦发现此问题不可重现,这些数据和信息将很重要。 2、提高意识。很多人在遇到这类问题时,往往觉得后来操作不可重现了,因此就忽视了。这样往往会把此类bug遗留到产品发布后。欠的帐总要还得。 3、自我分析。对于自己分析这类问题,其实对自己的提高是最大的。分析思路:环境问题和操作顺序。 4、寻求帮助。如果研发可以帮忙,并且研发是负责任的话,只有信息全,研发分析往往是最快的途径。如果研发忙或者不乐意做,也是不可厚非的。但就要寻求组内能力强的人员或者组内讨论分析,集中大家的力量往往可以事半功倍。 在我的经历中,通过上面的方法,几乎能把所有的不可重现的问题变成可重现的并且提交bug。
一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
1.和BUG对应的软件版本
2.开发的借口人员,测试人员
3.BUG的优先级
4.BUG的严重程度
5.BUG可能属于的模块
6.BUG的标题
7.BUG的描述
8.BUG的截图
9.BUG的状态
10.BUG的错误类型(数据,界面。。。。)
用百度知道刮卡的时候手机常常会卡顿,用其他软件的时候却不会,这是手机系统问题还是百度知道有bug?
一般都是这样子的,跟手机没有必要联系,我的也是,毕竟你刮开一定程度才会完全显示结果,系统不可能反应特别快
右上角给个采纳吧亲
怎么样测试手机软件容易出 奇异的BUG 或是稳定性
运行在手机里的软件由于平台和手机设备资源的限制,所以一般容易出bug的操作是功能交互或者是资源不足的情况下。在手机测试中最容易出error的测试方法是边界值测试,交互测试,错误值测试,中断测试(用另一个程序中断当前运行的程序)和返回测试(在运行程序的过程中有多级目录那种,不断地返回)。
这些方法是相对容易出error的测试方法,当然所测的手机情况不同,还需要你自己多总结总结。
简要列出bug的几种状态
1、New:(新的)
当某个“bug”被发现的时候(第一次),测试人员需要与项目负责人沟通以确认发现的的确是一个bug,如果被确认是一个bug,就将其记录下来,并将bug的状态设为New。
2、Assigned(已指派的)
当一个bug被指认为New之后,将其将给开发人员,开发人员将确认这是否是一个bug,如果是,开发组的负责人就将这个bug指定给某位开发人员处理,并将bug的状态设定为“Assigned”。
3、Open(打开的)
一旦开发人员开始处理bug的时候,他(她)就将这个bug的状态设置为“Open”,这表示开发人员正在处理这个“bug”。
4、Fixed(已修复的)
当开发人员进行处理(并认为已经解决)之后,他(她)就可以将这个bug的状态设置为“Fixed”并将其提交给开发组的负责人,然后开发组的负责人将这个bug返还给测试组。
5、Pending Reset(待在测试的)
当bug被返还到测试组后,我们将bug的状态设置为“Pending Reset”。
6、Reset(再测试)
测试组的负责人将bug指定给某位测试人员进行再测试,并将bug的状态设置为“Reset”。
扩展资料:
由于现代社会的发展,bug另有一种引申意义,用来形容某事物厉害的超乎想象,BUG可以使电脑系统崩溃、容易被施诈者攻击,现有修复漏洞的工具。
程序错误(英语:Bug),在程序设计中的术语,是指在软件运行中因为程序本身有错误而造成的功能不正常、体验不佳、死机、数据丢失、非正常中断等现象。
中文常称BUG为“缺陷”。而且,“缺陷”一词更能反映事情的本质。因为“臭虫”是从外面爬进去的,并非程序本身有问题。而程序本身存在的问题,是程序原来就具有的。因此,在这里将BUG翻译为“系统漏洞”更合适。
在程序运用中,特别是应用程序,会出现莫名其妙的警告,让普通用户丈二和尚----摸不着头脑,这些警告常被称作“BUG”。
游戏中的BUG,简单来说就是游戏程序的漏洞,游戏程序中的缺陷。游戏中有BUG是很正常的,尤其是在网络游戏中。即使所有的网络游戏都是经过封测、内测和公测这三个大的步骤,但由于游戏文件和游戏中的任务以及地图的不断更新和增加,难免会在游戏制作方面出现错误和偏差。
1.良性BUG
良性BUG即不会产生严重后果,甚至为玩家带来了利益的BUG。通常很多良性BUG被玩家们利用,方便游戏或副本,不过此举带有一定的作弊性,因此利用这种BUG来游戏是不值得提倡的。例如有些FPS游戏中可以卡入一些副本,从而使得不被击杀。
2.恶性BUG
恶性BUG即游戏中致命的,会对游戏过程及体验造成严重影响的BUG。例如正常操作中,由于执行文件冲突或错误不兼容而导致的系统自动退出或者服务器断开等等。
为了减少这种情况的发生,游戏制作方都在大力加强游戏的升级和补丁。如果BUG严重,网络游戏运营公司会采取回档处理,以减少玩家利用BUG或者玩家因为BUG而造成的损失。
参考资料:百度百科——bug
转载请注明出处51数据库 » 软件容易出现bug吗 为什么软件里总会有那么多Bug