我的编程空间,编程开发者的网络收藏夹
学习永远不晚

修复bug与解决问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

修复bug与解决问题

  这篇文章能读者更好地理解造成bug产生的一些问题,并相应地修复bug能够起到一些好的作用。希望对大家有用,所以大家要认真阅读噢~
  什么是bug?
  在软件工业中,一个bug可以代表任何形式的系统错误(NullPointerException、Http 404错误代码或是蓝屏……)、功能性错误(在我单击B的时候,系统本应执行Z,却最终执行了Y)、性能问题以及配置错误等等。
  在精益的术语中,一个bug必须能够按照下一节提到的定义进行清晰的表达,才能说它是一个问题。请相信我,我所见过的(和自己产生的)bug中,95%以上都不像是某种问题——性能问题或许是个常见的例外情况,但有趣的是,它们也是绩效的一部分,不是吗?

修复bug与解决问题_软件开发_计算机基础_网络工程师_编程学习网

  boss:那么,你需要多长时间来修复这个 bug?
  没有经验的程序员:给我一个小时?最多两个小时?我能马上搞定它!
  有经验的程序员:这么说吧,钓到一条鱼要多久我就要多久?
  要多少时间才能修复bug,事先是很难知道的,特别是如果你和这些代码还素不相识的话,情况就更加扑朔迷离了。要想修复问题得先知道问题的所在,而我们之所以无法准确估计时间是因为我们不知道需要多久才能发现症结的所在,只有清楚这一点,我们才能合理估计修复 bug 所需要花费的时间。不过,这个时候恐怕黄花菜都凉了。
  怎样从bug中分析问题所在?
  Bug的出现往往是系统中产生了更常见问题的一种症状,而对于精益团队来说,将这些症状与真正的问题相关联起来是至关重要的。可以这么说,正如米开朗基罗从大理石碎片中发现它的美丽,并最终打造成迷人的雕像一样,精益团队的任务(例如某些团队会将持续改进作为他们每日工作内容的一部分)就是发挥他们的洞察力,从大量的bug中发现问题,并将其抽取出来。实现这一点需要进行细致地分析,并将这些原始的问题转化为学习的机会。
  我发现了一种着手进行这种分析的良好方式,就是将所有bug分门别类,并且理解每个bug类别的权重。大多数情况下,某个bug类别就体现了造成某个现有问题的原因,或者它本身就是一个问题。这种关联性可以帮助你以正确的顺序处理这些问题,并首先从对整个操作绩效影响最大的问题开始解决。如果你仍然不确定应该从何处着手,那么优先解决质量问题是比较保险的做法。
  Steve McConnell 曾说过:“发现问题—理解问题—这就是程序员90%的工作。”很多bug都只需改动某一行代码即可。但是需要投入大量时间的是,后面还得指出怎么样才是正确的——就像我们在钓鱼的时候,得知道往哪里下诱饵,什么时候鱼儿容易上钩等等。
  话说bug有四种类型:第一种易寻易修复,第二种难寻易修复,第三种易寻难修复,第四种难寻难修复。最悲剧的就是最后一型的,不但“寻寻觅觅,凄凄凉凉戚戚”,哪怕终于千辛万苦滴水穿石,也只能在那边不由自主地抓耳挠腮,无奈叹一句“路漫漫其修远兮”。可以这么说,除非是新鲜出炉的代码,不然让你找bug就跟瞎子摸象一样——糊里糊涂,不知道归属于哪种bug类型。

  示例1:敏捷开发中的情景
  当时我在这个使用敏捷开发的团队中担任经理一职。和许多团队一样,我们团队也不是一个跨职能的团队(典型的Scrum-but),而是一个负责后台的团队。它在某个迭代内负责构建基础服务端软件,以便让应用团队在之后的迭代中使用这部分功能。
  我们按照Paretos原则(即80-20原则)对产生的bug进行了一些分析,并且找出了一个占总数约20%的bug类别:这些bug都是由应用团队所提出的,与我们团队所建立的后台软件所暴露的API对“隐式”这一概念的定义有关。当应用团队在使用我们提供的功能时,经常会发生遗漏了某些输入参数,或者是缺少了某些输出数据等问题……因此他们就会为我们创建一些bug,而我们的团队则会说:嘿!这个API已经隐式地表明了它不会返回这些数据。
  我们同时注意到了这些bug的持续时间,通常从创建直到关闭为止一共持续了大约4个星期。(在最好的情况下)在以一个月为周期的迭代的最后阶段会进行代码发布,客户端团队则可以在下一个迭代时使用这些代码。因此当客户端团队创建了bug,并指派给原来的开发者时,往往距离她开发那些代码时已经过去了两三个星期,开发者不得不再度拾起这段代码……
  为了处理这种情况,我们决定改变一下工作的方式,将相关人员组织在一起,而产生一个相关联、跨职能并且跨技能的团队。
  采用了新的方式之后,我们注意到这些“隐式API”相关的bug数量大幅下降了(约50%)。最令人欣慰的是,这种类型的bug的持续时间下降到了几个工作日以内。当然,这个数字有一定的水分,有些bug虽然被发现了,但是并没有记录下来,因为开发者们现在进行结对编程,于是许多bug直接在座位上就解决了。
  虽然成果是显著的,但我总感觉到还有些不适之处,却说不出究竟是哪里出了问题。之后不久我才发觉,从精益的角度来说,我们目前还有两个不足之处:
  首先,我们的系统中依然存在bug,因此我们不得不重复劳动,这使得整个开发系统出现了生产力的浪费。但是由于缺乏内建的质量标准,我们无法保证服务端开发者所开发的API不存在问题。此外,对于错误的处理也没有真正的标准,我们的解决手段就是:遇到问题就坐下来一起解决。
  尽管结果非常显著且令人振奋,但它与团队的每日绩效没并有什么直接的关联,团队也无法立即采取行动并在第二天直接看到结果。我们只是从宏观上在6个月结束后的发布中才能够看到这一效果:即在bug总数中与API相关的bug只占少数。因此我们看到:建立一个跨技能的团队确实能够在某种程度上改进质量,但我们还未能提供一种有效的方法,让我们能够每天监控它的情况,并采取相应的行动。
  示例2:精益开发中的情景
  时间转眼间过去了几年,我还是任职于同一家公司中,但目前的职位是项目主管及教练,负责一个大型的多团队、多种技术的敏捷项目的实施。某一个团队遇到了一个很有挑战的技术难题,他们要与某个大家都没有什么经验的技术进行整合。整个团队在过去的两个Sprint中没有交付任何用户故事,他们深陷于质量问题(例如bug)中难以自拨。当第二个Sprint结束后,依然没有任何完成的用户故事(比方说,按照我们对完成的定义来看,该用户故事在功能性需求上需要做到没有任何bug)可以交付。因此在回顾会议中,整个团队一致决定,将每周进行bug评审(在精益中称为红箱分析)。
  在第一次会议中,团队为所遇到的问题建立了一个Pareto模型。我们创建了一张表格,将bug类别放在一列里,bug的数量和bug ID则分别用余下的几列来表示。
  之后的目标是逐个排除每种bug类别背后的根本问题,首先从发生次数最频繁的开始。为了鼓励团队成员就这一话题展开交流,Scrum Master决定将这张Pareto表格贴在Scrum公告板与bug数量的旁边,并且每天对其进行更新。在每天早上的站立会议上,团队都会报告当前的bug情况,而新产生的bug都会按照其分类添加到该表格中。这种方式能够使团队更明显地意识到每日质量性能的变化情况,同时也是实现PDCA中的C——Check(检验)的一种良好方式。当问题被根除之后,这方面的bug应该至少在一周之内不复存在了。不过,某些时候还是会发生这些bug,而这也是需要学习的地方。
  举一个例子,该团队已经认识到了bug类别中有一种属于回归缺陷,即对软件的改动破坏了原本能够正常工作的特性。这种bug多数情况下发生在图形用户界面端,因为对这一部分进行自动化测试是非常困难的事。我们所找出的一个根本问题在于,初级程序员并不总是完全理解他们对代码的改动可能会造成的影响。对此问题的解决措施是在流程中加入一个新的步骤,在提交代码之前先让某个更资深的开发者进行代码复审。这一步骤大概只需要15分钟,但能够大幅降低回归缺陷出现的次数。此外还将对每次发布的bug数量进行每日评估(每天发布两次)。这种方式还能够提高初级开发者的技能水平。
  最终,所有的问题都得到了解决,结果是令人惊叹的:所有的问题都通过标准流程(在提交代码之前进行代码复审)得以一一根除。每日的bug数量直线下降,每个迭代周末能够提交的包括完整功能并且无bug的用户故事数量也在上升。3个月之后,该团队就从之前产生bug数量最多的困境中摇身一变,成为了整个项目中高质量、高效率团队的代名词。
  这种方式相比之前的方法显得更为精益。因为它对每日绩效(质量)和生产力(提交的用户故事数量)产生了直接的影响,并且为团队带来了新的操作标准。
  查找和修复 bug
  你知道“查找和修复 bug”意味着什么吗?没错,就是调试!不断的调试,无数次的调试!Paul Butcher 通过大量工作,总结出以下结构化的步骤:

  1. 明确目的。仔细查阅异常报告,确定是否是个 bug,找出各种有用的信息发现问题的症结,予以重现。再次检查是否与报告发生重复。如果发生重复,那看看曾经的相关人员是如何处理的。
  2. 准备工作——找出正确的代码,用排除法清理工作区域。
  3. 匹配测试环境。如果客户正在操作计算机配置,那么此过程可以跳跃。
  4. 明确代码的用途,确保现有测试工具一切正常。
  5. 好了,现在可以出发钓鱼去咯——重现和诊断错误。如果你不能做到重现,那你就不能证明你已经完成修复工作。
  6. 编写测试案例,或者通过现成的测试案例来捕获 bug。
  7. 进入修复模式——请务必确保不会影响到其他任何部分。但是,在开展修复工作之前,可能你还要包揽重构工作,因为只有这样,你才能无所顾忌地捣鼓代码。而且事后回归测试,还能确保你不会加入任何新的 bug。
  8. 整理代码。通过一步一步重构,让你的代码更易于理解,更安全。
  9. 找别人来审查一下,当局者迷旁观者清。
  10. 再次检查此修复过程。
  11. 试着不从主线出发,以检查这些 bug 是否会影响其他支线。合并这些变化,处理代码中的差异,回顾所有的审查和测试等工作。
  12. 思考。好好想一想哪里错了以及为什么错了?为什么你的修复会起效?这种类型的 bug 还会出现在哪里?如果一个 bug 需要耗费你很多时间,那么一定要好好弄清楚原因。此外,还需要思考的是,怎么做才能吸取经验教训,将来在类似的问题上不再栽跟头?以及,我们采用的方法、使用的工具是否还有可以改进的地方?以及这些 bug 的影响和严重程度。
  找到 bug,还是修复 bug,哪个需要更多时间?
  或许建立一个测试环境、重现问题和测试 bug 所需的时间,要远远多于找到 bug 和修复 bug 的时间。不过对于一小部分显而易见的 bug,找到它们很简单——不过修复起来可能就不尽如人意了。
  大部分的软件漏洞的来源在哪里?分析师认为,相较于修复,发现 bug(包括理解 bug 和重现 bug)所需时间更长。有研究表明,大多数的 bug(差不多有3/4)既易于发现又易于修复:5天或许更少(这是基于大规模实时系统通过重量级 SDLC、大量审查和测试得出的数据)。但是也有很恶心的bug,即便你可以轻轻松松揪到它,还是还得“呕心沥血”才能修复好。
  所以如果你打赌说你能很快修复bug,大多数情况下你还真没说错。不过当你打赌输了的时候,那么,嘿嘿,就意味着你有烦恼了。所以,下次,boss再问什么时候能修复bug,别再傻乎乎地回答“马上就能搞定”了。
  今天的分享就到这了,也不知道对大家有用不,如果有用的话,那就点个赞吧!如果哪部分知识点欠缺,欢迎各位朋友进行补充哦~更多精彩的内容,就在编程学习网教育,还不赶紧行动?等着你们哟~

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

修复bug与解决问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

修复bug与解决问题

  这篇文章能读者更好地理解造成bug产生的一些问题,并相应地修复bug能够起到一些好的作用。希望对大家有用,所以大家要认真阅读噢~  什么是bug?  在软件工业中,一个bug可以代表任何形式的系统错误(NullPointerException、Http 404错误代码或是蓝屏……)、功能
修复bug与解决问题
2024-04-18

yarn的bug问题怎么解决

本篇内容主要讲解“yarn的bug问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“yarn的bug问题怎么解决”吧!1、问题描述最近接手的几个项目包管理器用的是 yarn@v1.22.
2023-07-04

sql_mode详解,bug修复!!!!!

处理MySQL数据库工作中遇到关于sql_mode的情况,特学习记录一下废话不多说直接上错误提示,哈哈哈 bug开始!!!!INSERT INTO mmb_user (openid,mobile,wxmobile,password,age,realnm,nic
sql_mode详解,bug修复!!!!!
2015-08-30

解决mysql删除用户 bug的问题

作者在使用mysql添加用户的时候,发现用户名给我写错了 强迫症的我,必须要改过来,但是发现删除用户的时候,命令是成功的 但是在此创建同名用户的时候,会报错,网上查了很多,说这是mysql的官方bug,不知道是作者水平不够没能理解到那个bu
2022-05-23

如何解决React.memo引起的bug问题

这篇文章主要介绍如何解决React.memo引起的bug问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!与PureComponent不同的是PureComponent只是进行浅对比props来决定是否跳过更新数据这
2023-06-29

Win10预览版14316修复哪些bug? 已知和已修复问题汇总

微软今天向Insider快速通道用户推送了Win10一周年更新预览版14316,本次更新带来了大量全新特性,包括全黑主题、Ubuntu Bash原生支持、跨平台小娜提醒、电脑体验Continuum模式等。除此之外,本次更新还修复了一些Bug
2023-05-20

win7启动修复问题如何解决

这篇“win7启动修复问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win7启动修复问题如何解决”文章吧。win
2023-07-01

Ubuntu 修复Grub问题的解决方法

Ubuntu 修复Grub问题的解决方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。请几天破坏了GRUB,用LIVECD修复,用LIVECD进入图形界面,打开
2023-06-16

如何解决mysql删除用户的bug问题

这篇文章将为大家详细讲解有关如何解决mysql删除用户的bug问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。删除了user的用户之后 无法再次创造相同的用户名在mysql 数据库中有一张user表,可
2023-06-14

Win10 Mobile预览版14342修复Bug和已知问题汇总

5月17日消息,微软今天推送了微软今天推送了Win10 Mobile14342红石预览版,本次更新面向快速预览通道的用户,主要为Edge浏览器支持滑动返回和增加网页跳转App应用功能,除此之外还有海量的bug修复和已知问题。 一、bug修复
2023-05-20

springboot跨域问题带来的BUG怎么解决

这篇文章主要介绍了springboot跨域问题带来的BUG怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot跨域问题带来的BUG怎么解决文章都会有所收获,下面我们一起来看看吧。需求前端用
2023-06-27

windows7启动项修复问题怎么解决

修复Windows 7启动项问题的方法如下:1. 使用Windows 7安装光盘:- 插入Windows 7安装光盘并重启电脑。- 选择正确的语言设置、时区和键盘布局,然后点击“下一步”。- 在安装界面点击“修复您的计算机”。- 选择“使用
2023-08-08

AntDesign的Bug修复示例详解

这篇文章主要为大家介绍了AntDesign的Bug修复示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Win10 Mobile快速预览版14342.1003修复Bug和已知问题汇总

5月1php9日消息,微软今天推送了Win10 Mobile一周年更新预览版14342.1003,本次更新面向快速预览通道的用户,以下为本次更新的bug修复和已知问题。根据微软更新日志,1003版本android与5月17日微软推送的Win
2023-05-20

Android生存指南之:解Bug策略与思路问题的详解

现在维护和定制Android的需求越来越多,做的人也越来越多,而Google直接Release出来的源码中又有很多Bug和不合理的地方,特别是原生的应用,如Mms,Browser, Email, Contacts等。定制或做Android解
2022-06-06

windows无法修复dll丢失问题怎么解决

今天小编给大家分享一下windows无法修复dll丢失问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。解决方法1、
2023-07-04

编程热搜

  • 华为高级工程师认证费用
      华为高级工程师认证费用是多少?华为高级工程师认证要多少钱?华为高级工程师认证是华为认证体系中用于标识个人能力在某一技术领域达到高级工程师级别的证明,认证费用为200美金,通过考试取得的证书3年有效。  华为高级工程师认证费用是必修方向和选修方向的总和,其中必修方向认证费用为300美金,选修方向认证费用为180美金。
    华为高级工程师认证费用
  • 2024年初级软考上半年考试时间安排
    初级软考每年安排两次考试,2024年初级软考上半年考试时间已公布,2024年初级软考上半年考试时间为5月25-28日。2024年初级软考上半年报名时间及入口:根据往年各省初级软考报名时间来看,2024年上半年初级软考报名时间3月份开始,具体请考生关注全国各省2024上半年软考报名时间及入口汇总表,希赛小编将及时为大家更
    2024年初级软考上半年考试时间安排
  • HCIA证书和HCIE哪个比较好?
      HCIA证书和HCIE哪个比较好?华为认证包含三个等级,分别是HCIA(华为认证网络工程师)、HCIP(华为认证网络资深工程师)、HCIE(华为认证互联网专家)认证。  HCIA(Huawei Certified ICT Associate )即华为认证ICT工程师,是华为职业认证中用于标识个人能力在某一技术领域达
    HCIA证书和HCIE哪个比较好?
  • 教你在PPT中创建好看的镜像效果
      当我们在阅读杂志书刊,或者看电影的时候常常都会看到像下图一样的原图片与图片镜像的组合效果的图片,在很多的摄影作品中也会有,我们其实也可以在PPT中轻松实现这种应用于各大媒介的图文特效技巧,不信的话我们一起来学习一下,操作过程其实并不复杂!  下面我们就开始我们的具体操作步骤了,首先第一步,我们需要先打开PowerP
    教你在PPT中创建好看的镜像效果
  • 多媒体应用设计师可以提前交卷吗
      可以。但是多媒体应用设计师提前交卷有时间限制,根据软考的考场规则,按照人力资源和社会保障部文件规定,开考5分钟后应试人员一律禁止入场。专业技术人员资格考试原则上封闭2个小时,不足2小时的全程封闭。  软考多媒体应用设计师属于专业技术人员资格考试,专业技术人员资格考试原则上封闭2个小时,不足2小时的全程封闭。  根据
    多媒体应用设计师可以提前交卷吗
  • 全国计算机二级C语言程序设计章节练习题及答案(1)
      对于备考计算机二级C语言考试的考生可以多做试题,一方面了解往年考试题型,一方面熟悉往年考点。今天编程学习网小编给大家准备了全国计算机二级C语言程序设计章节练习题及答案(1),供考生们练习。  点击查看:全国计算机二级C语言程序设计章节练习题及答案汇总  判断题  ×1.C++语言和C语言都是面向对象的程序设
    全国计算机二级C语言程序设计章节练习题及答案(1)
  • 广西2024上半年计算机软考什么时候报名?
    广西2024上半年计算机软考3月25日开始报名,具体报名时间见全国各省2024上半年软考报名时间及入口汇总表。2024上半年广西软考考试采用网络报名的方式,考生在规定的报名时间内进入中国计算机技术职业资格网,点击页面右下方的报名入口,进入全国计算机技术与软件专业技术资格(水平)考试网上报名平台,选择“广西”入口后点击进
    广西2024上半年计算机软考什么时候报名?
  • 软考可以申请退税吗
      可以。软考证书是可以抵扣个税的,按照个税6项专项附加扣除标准,在取得软考证书的当年,可以按照3600元定额扣除。  软考证书可以抵扣个税,根据国务院印发的《个人所得税专项附加扣除暂行办法》,第三章继续教育包含三条,具体内容如下:  第八条 纳税人在中国境内接受学历(学位)继续教育的支出,在学历(学位)教育期间按照每
    软考可以申请退税吗
  • win10如何正确禁用IPv6网络协议
       在Windows Vista和Server 2008开始,微软包括本地支持的IPv6(互联网协议第6版),并默认启用。IPv6是新的计算机的地址协议,最终将取代IPv4这是目前最流行的标准。win10中默认开启了对IPv6协议的支持,但是会影响到系统运行速度和磁盘占有率等。除非你的网络有IPv
    win10如何正确禁用IPv6网络协议
  • 2020年数据库系统工程师上午真题及答案解析
      2019上半年数据库系统工程师考试已结束,今天编程学习网小编为大家整理了2020年数据库系统工程师上午真题及答案解析,以便大家了解2020下半年数据库系统工程师基础知识考试真题。  软考数据库系统工程师上午考试为基础知识,编程学习网小编为大家整理了2020年数据库系统工程师上午真题,想知道答案和解析的考生可以直接进入在线题
    2020年数据库系统工程师上午真题及答案解析

目录