经常在网上看到XX又出bug之类的新闻,甚至有时候听到做程序员的朋友在吐槽bug。
那么,bug到底是什么?又如何会产生?
本文将分为三个方面回答这个问题。
一、什么是BUG?
二、Bug是如何出现的
三、用具体的例子概述一下bug
PS:这里是知科技,每日都会分享实用知识!一秒【关注】我吧!
【软件/网站/数码推荐】+【数码评测】+【实用科技知识】,每日不停更新!
什么是Bug?
- 产品说明书中规定要做的事情,而软件没有实现。
- 产品说明书中规定不要做的事情,而软件却实现了。
- 产品说明书中没有提到过的事情,而软件却实现了。
- 产品说明书中没有提到但是必须要做的事情,软件却没有实现。
- 软件很难理解,很难使用,速度超慢,测试人员站在最终用户的角度看到的问题是平常的但不是正确的。
- 注:产品说明书中没有提到但是必须要做的事情,软件却没有实现。软件实现了产品的功能,但是没有考虑软件在弱网络、低电量的情况下也能正常使用,而做出来的产品在弱网络或低电量的情况下报错,那么这也是一个bug。
简单来说:Bug就是程序设计之外的错误。
也可以这么理解:你这个程序设计得很好,把所有可能性都想了一遍,没有问题。
结果真正运行的时候有了自己没有想到的问题,且这种错误并不是必然出现的,甚至大部分时候是不会出现,程序可以正常运行,但是偶尔会出错。但是恰恰是这种偶尔出现的错误却很严重,甚至可以成为被他人利用的漏洞。
例如,你设计一个出勤软件,你计算一天的工作时间,这是下班时间减去上班时间。
但在设计时总有一些情况是你没有考虑到的。
例如你考虑,把没有按时上班的人当做缺勤处理。
但有些人临时请假,出现了两次上班,两次下班,你还是按照下班-上班 那就有问题。
还有一些人去上班,但到了第二天早上才下班。根据你的规定,这是缺勤。这就是一个bug。
最终的结果是,有些人统计的上班时间少了,有人被记为缺勤了。
另外,按照上班时间晚于规定时间者视为迟到,早于下班时间者视为提前下班。
那如果有人调休呢?
今天上上半天,过几天上下半天。实际上是一天,但是计算出来都是两天迟到或者早走。
当你在设计一个程序的时候,你认为可能发生的事情和实际发生的事情是不一样的。大多数时间,人们都在上下班路上,所以你的程序对大多数人来说是好的,但对那些在半夜下班的人来说就成了问题。这是一个意想不到的错误。
这就是程序设计之外的错误,这就是bug。
Bug是如何出现的
做一个程序主要分为三步:
- 与产品经理讨论确定功能(确定可以实施的设计图纸)
- 抽象出每个单独的组件(确定施工方案)
- 实现并结合相关构件完成施工(材料开始施工)
第一步:与产品经理讨论确定功能(主要为沟通方面的内容)
但沟通本身是一个代价高昂的过程,尤其是在责任明确的组织中。产品经理说了很多,而当实际去做的时候,你将不可避免地要翻阅需求原型、需求文档等等来重新理解它。这是一个非常危险的时刻。
比如像下面这个的答案是什么?
答案是17?
不对。
我猜你可能没注意到这些地方。
为了让你有深刻的印象,这个举例可能比较刻意和夸张一些,但是我想在你的身边,由于没注意到或者理解有误的现象肯定很常见。
沟通是相互的,这锅只让程序员背的话的确太委屈了点。
第二步:抽象出每个单独的组件(主要是个人抽象能力的体现)
但什么是抽象?抽象是“透过现象看本质”的能力,这种能力理论上可以无限增长。你拥有的信息越多,它就变得越强大,无限地接近100%,但永远不会真正100%,因为没有人知道100%是什么。
所以,当你没有那么多的信息时,抽象是不是不合理?不合理会导致什么?它不会直接困扰你,但会更容易困扰你。但是人不需要经历这样的成长过程吗?
可以说,掌握一种能力的背后是踩在无数的bug上。要么你在来这个组织之前就踩到了它,要么你在这个组织里踩到了它。结果,前者的工资也比后者高。
因此,如果你过于苛求而没有漏洞,你就是在扼杀每个人的成长机会,透支未来的可能性。人们变得非常保守,害怕尝试新事物。
但由于外部环境的不断变化,新事物总是需要被动接受(技术更新越来越快,趋势不可逆转)。然而,接受新事物的能力是无法锻炼的。在这种情况下,接触新事物的时候会有更多的问题(债务总是要偿还的)。
第三步:实现并结合相关构件完成施工(这就是实际的coding过程,而coding是一个主观的,完全由人主观掌控的事情。)
毕竟人不是机器,不犯错是不可能的,就像之前写文章时的错别字一样。
您可能会说,好吧,但有测试人员啊,测试的工作难道不是通过逆向思考来纠正程序员吗?
是的,但是引入测试只是降低了错误率,只是将不存在bug的可能性提高了小数位数
想要找到所有的问题是不现实的。至少在目前的情况下是这样的。为什么?因为代码的本质是逻辑的组合。
例如,如果一个完整的业务流程有10个链接,每个链接有3种可能性,那么系统的复杂性是多少?3 ^ 10 = 59049个分支(理论可能性的数量),100%覆盖这些场景的成本几乎是不可接受的。
然而,我们在实际系统中遇到的个别场景甚至更复杂。
事实上,每个操作系统都有漏洞,包括我们每天使用的一些最流行的系统(玩游戏的小伙伴们肯定熟悉“卡bug”这个词)。只是这些bug有没有被执行到,有没有被发现,被多少人发现而已。
用具体的例子概述一下bug
领导:修个房子。
程序员:好的,马上开始打地基!
领导:你看那隔壁那木房子就没有打地基,不要在小事上浪费时间,一个月水平面上面什么都看不到,你kpi不要了?
这是敏捷开发。
一层房子修好。
领导:我觉得两层楼的视野好,再加一层。
程序员:可是我们没有地基,重新打地基要时间……
领导:你一楼都修好了,照着再修个一模一样二楼很难?还要很多时间?
这是高速版本的迭代。
二楼修好。
领导:天天走路累死了,你再修个电梯。
程序员:可是……
领导:没什么可是的,地基不稳?就在房子边上搭个电梯就行了嘛,不稳拿根木棍撑一下,这都不懂?
这是版本优化。
电梯修好。
领导:我觉得顶楼再加个游泳池就好了。
程序员:这个结构行业翘楚的房子也不支持呀!
领导:那不正显得我们牛逼么?修快点,夏天要来了。
这是快速功能追加。
游泳池修好,看着摇摇欲坠的房子,程序员跑路了,领导找来新人继续。
领导:我觉得游泳池水不够满,你加点的,一楼光线不好你在墙上打个窗户。
新人:好的,没问题领导,马上加一桶水,马上砸墙
这是打补丁。
房子塌了,电梯倒了,游泳池垮了……
领导:真是个废物,就让他加桶水,居然能把房子弄倒了,你说这是多没用?
新人:我真的就加了桶水,我怎么知道为什么。
这是软件莫名崩溃。
看完这个例子,你应该能知道bug怎么产生了吧?
希望大家好好善待身边的程序员朋友,他们面对bug真的很脆弱!
这里是@知科技APP,一个只写实用知识的作者。
如果能帮到你,老铁们点击【关注】我一下呗!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.