㈠ 程序员为什么要一直改bug,不能一次性写好吗
软件可能在使用过程中没有任何问题,但不符合产品的预期下图源自“How projects really work?”,很形象的突出了客户需要的产品和最终得到的产品不一致。
所以软件想要变得成熟,Bug收集和处理机制是非常有必要的,比如:会影响客户使用的优先级高的Bug要优先修复。Bug是软件的影子,也是程序员的噩梦实际上不能存在没有bug的软件,Bug和软件如影随形。就像我们使用的Windows,穷尽无数优秀的软件工程师来设计给用户优秀的桌面体验,但也有各种层出不穷的bug。
程序员对Bug有多爱就有多恨,Bug无处不在,即使再牛逼的程序员也逃脱不了Bug的魔掌。想要完全避免Bug几乎是不可能的,所以也不在一次性就写好的程序。以上个人浅见,欢迎批评指正。认同我的看法,请点个赞再走,感谢!喜欢我的,请关注我,再次感谢!
㈡ 为什么程序员要一直改bug
即使是那些经过严格训练的程序员还是不可避免出现bug
软件越复杂,就意味着代码行数越多
只要你在编程,即使你很擅长写代码,也一定会有错误和bug出现
所以才有不断的优化和更新
㈢ 程序员为什么要一直改bug 不能一次性写好吗
程序写代码就像造一座大楼,如果即便经过严格的设计论证,装配高质量的部件,最后还有系统性地验收,让你去造这么一座大楼,你能保证不管是窗户安没安好,还是地基挖浅了挖深了,还是墙皮脱落,都一个问题没有?
回想早年的小程序,执行某一个具体的任务,明确的输入输出,一般是不会有bug的。
但现在的软件开发,早就已经不是一个人在战斗了,大部分的工程,开发规模5人左右居多,另外稍大的软件工程动辄几十人,更有甚者几百人的团队规模并行作业。你试想一下,要保证这么多人的产出都符合设计要求,势必需要合适的开发流程,需要更多的项目管理的技巧和方法。这就对个人以及团队的提出了非常高的要求了。
软件工程的方法论中,要求软件开发者尽可能多地在软件测试阶段发现bug,而不是交付之后。
但是楼主说的能不能让软件开发出来没有bug,我觉得把下面这几个事情做好,还是有可能的。
1、花尽可能多的时间,和客户沟通软件需求,了解每一项需求的用意。
2、确保软件需求不能随意变动,因为很多情况下一个需求的变化,程序会带来很多问题,有可能连底层结构都需要跟着一起变动。频繁的需求变动,加上开发周期和成本的约束,带来的结果就是软件质量的不可控。
3、确保软件测试质量,完成全覆盖测试,设计系统需要的全部用例并保证全部通过。
总结下,软件项目在实际开发过程中风险点还是很多的,通过合理的控制,可以降低和减少bug。但是软件本身是为人的需求而生,只要需求在变化,软件是永远都需要跟着去维护和更新的,所以只要有不可控的因素(需求分析,系统设计,系统详细设计,编码,单元测试,集成测试,系统测试,验收等)任何一个环节任何一个人产生问题,反映到最后的软件产品上就是一个bug。
另外Bug分很多类,一类是对用户来说不能正常使用,能被用户感知到的错误。一类是用户能正常使用,但是有各种异常的错误。一类是使用没有任何问题,但是不符合产品预期的问题。其他应该还有很多,这里我们一一讨论。
对用户来说不能正常使用,能被用户感知到的错误。
其中一种情况是程序员和测试人员的问题,所有功能在上线前,工程师和QA人员应该测试,回归完功能。能被用户感知到使用流程有问题的话,一定是相关人员能力或者线上意识某一方面欠缺,也是最不能容忍的。
另外一种情况是黑天鹅事件,什么网线被挖断,机房被炸,服务器爆炸什么的。。。。。。 ,这个说实话,出了在软件架构上做冗余,目前没有什么特别好的办法。
2. 用户能正常使用,但是在用户看不到的地方有各种异常的。
一个功能模块几乎不可能是独立的,它必然牵扯到其他模块。对于你所依赖的模块,你没办法保证这些模块是100%可用的。这个时候可能虽然有错误,但是只要不影响主要流程,我们依然可以正常使用。但这个时候对于外部依赖的异常处理,很考验工程师的能力。
举个例子,有可能你看到的点赞数比你实际收到的点赞数少。这个是由于点赞统计在什么时候失败了一次,某些用户可能认为这个是bug,但是其他可能不会在意(当你有10001赞的时候,你在意少了1个么?)
3. 使用没有任何问题,但是不符合产品预期
这个更多的是研发和产品经理对于需求理解的不一致。因为文字是有二义性的,况且人和人对相同文本的理解本来就可能出现偏差,这就导致了需求理解的不一致,最终导致了线上产品不符合预期。对于内部人员来说,这个也算BUG。
说了那么多,最主要的核心在于实现功能的是人。人不像机器,不可能不犯错;同样的,不可能存在没有bug的程序,像大家使用的windows,穷尽无数优秀的工程师,给予用户优秀的桌面体验的同时,也有你可能完全看不到的数千个bug。想要完全避免几乎是不可能的。所有也不存在一次性就写好的情况,鬼知道产品经理什么时候改需求呢~
㈣ 优秀的程序员是如何处理技术 Bug 的
从初入职场菜鸟到职场大咖,很多程序员在努力充实自己,有时候我们需要对自己进行一次能力定位,了解自己的优势和没有掌握的技术。芯学苑列出几点作为初入职场的新手评估自己,明了前进学习的方向。
1、技术能力(解决问题的能力)
这是非常重要的事;过硬的技术能让你得到面试机会,并在工作中游刃有余。当公司招聘一个java开发人员时,是会优先考虑能力因素的。在实际的项目开发中,一个程序员的技术能力等于其解决问题的能力。
如果拿一个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的数量和难度来衡量。一个程序员能基本无误的完成项目中的一个功能算是合格,但在此之前,他对项目的生产力为负,为他布置的任务,中间环节的沟通,修补bug的时间其实要多于自己直接完成该功能的时间的。能较好完成一个完整模块的程序员才算是较好的程序员,也是项目中的主要开发者。能独立完成整个项目才是优秀的程序员。
2、专业基础(知识的积累)
一个程序员的知识积累很大程度上决定了其解决问题的能力。知道如何编写代码是基本的技能,但是知道Java编程语言的原理,知道代码背后的算法将使你从人群中脱颖而出。
3、主流编程工具
今天,事实是,你不能成为一个样样都懂的人(杂而不精)。你必须选择你要掌握的工具。有时这是由工作的环境决定的,但是按照下面说的去做也是一个很好的选择:
构建工具:Maven或Gradle。
SCM:Git(不是GitHub。大不相同)。
构建自动化:Jenkins。
IDE:Netbeans或Eclipse——不仅用于编写代码,而且还从IDE中重构和调试代码。我遇到了很多没有如何从他们最喜欢的IDE调试的开发人员。
Bug跟踪:Bugzilla或Jira。
4、JSF的知识
应用程序服务器
所有Java开发人员应该知道如何在Apache Tomcat中部署。
当Glassfish开发停止时,下一个最好的事情是J Boss Wild Fly。
5、沟通的能力
沟通是我们做好一切事情的关键。我们必须与我们周围的环境保持互动,无论是在我们的私人还是职业生活中。一个良好的程序员知道如何在各种团体面表达自己。也许对你来说显而易见的东西在他人的角度来看并非如此。
从大的尺度(比如一个人的工作生涯)来看,一个程序员知识积累的多少只决定于其自学能力和他对编程本身的兴趣。
在一个分工明确的项目中,程序员需要理解产品,和领导沟通理解自己的任务,和同事们沟通以正确的方式进行合作。无论哪一个方面沟通出了问题都不是小事情,同时,程序员还需要正确的传达设计的实现难度,以及让别人正确的理解自己设计模块的接口。在不写文档时,正确的口头沟通非常重要,需要写文档时,良好的编辑能力也算做是沟通能力的一部分。
6、自学能力
这是一个非常重要的技能,在你自己的空闲时间学习新的技能。不要等待公司为你提供培训。你需要自己去学习新技术,提升自己在相关领域的水平。从Java后端开发到架构模式,总是有一些新事物值得学习。经常阅读博客和论坛,尝试加入本地聚会小组。你学到的东西可以帮助你的事业。知识刷新频率极快让人无法追赶的这个时代,难免会有超出自己知识范围的时候,此时你的自学能力决定了你能多快的完成任务。
7、良好的团队合作精神
无论是部分编程还是大型项目,所有开发人员都是作为团队的一部分在协同工作。你需要致力于团队的目的,或帮助新的团队成员克服障碍。不要存在这种“我只要做好我的本职工作,下班就直接回家”的态度。成为团队的一部分,帮助周围的同事,对自己的能力也是不小的提升。
就像拿破仑说的不想当元帅的士兵不是好士兵,追求参与一个大型软件系统的开发,是每个程序员的梦想。在此之前,应该学习更多的专业知识,达到优秀程序师的标准。最后希望各位程序员阅读本文后能够得到一些裨益,在这条路上走得更好。
㈤ 程序员为什么要一直改bug
程序写代码就像造一座大楼,包含有地基、楼层、窗户等。而且现在的软件开发,大多是团队合作,多人的合作产出都符合设计要求,势必需要合适的开发流程,需要更多的项目管理的技巧和方法。这就要求软件开发者尽可能多地在软件测试阶段发现bug,而不是交付之后。
另外Bug分很多类,一类是对用户来说不能正常使用,能被用户感知到的错误。一类是用户能正常使用,但是有各种异常的错误。一类是使用没有任何问题,但是不符合产品预期的问题。
1、对用户来说不能正常使用,能被用户感知到的错误。
其中一种情况是程序员和测试人员的问题,所有功能在上线前,工程师和QA人员应该测试,回归完功能。能被用户感知到使用流程有问题的话,一定是相关人员能力或者线上意识某一方面欠缺,也是最不能容忍的。
2. 用户能正常使用,但是在用户看不到的地方有各种异常的。
一个功能模块几乎不可能是独立的,它必然牵扯到其他模块。这个时候可能虽然有错误,但是只要不影响主要流程,我们依然可以正常使用。但这个时候对于外部依赖的异常处理,很考验工程师的能力。
3. 使用没有任何问题,但是不符合产品预期
这个更多的是研发和产品经理对于需求理解的不一致。因为文字是有二义性的,况且人和人对相同文本的理解本来就可能出现偏差,这就导致了需求理解的不一致,最终导致了线上产品不符合预期。对于内部人员来说,这个也算BUG。
㈥ 为什么有些出入职场的程序员,必须要经历加班修改bug的过程
我个人感觉不是所有职场的程序员都要经历加班修改的过程,就算不是程序员其他工作的人员也会经历。上班儿加班儿,这都是很正常。有的时候任务催的很急,肯定是要加班完成的。这些都是常识。只是职场的程序员加班。修改的比较多。程序员他进行的问题的解剖需求,各方面程序的分析运行也是非常多的。所以职场的程序员面对加班修改的经历会比较多。
以上的情况是想说通常加班的人如果偶尔的话还是可以理解的,毕竟现在的工作都会有时候加点班。就是出来工作的,又不是出来享福出来玩的。所以也不是说职场的程序员必须要经历加班修改,只是做的不对或者催稿的情况下会进行加班修改的过程。
㈦ 程序员改bug 问题是怎么改好的
其实程序员改bug也是有学问的。程序员改bug跟医生治病是一样一样的,无非一个是给机器看病,一个是给人看病。首先,一定要准确的定位引起bug的真正原因。定位问题,需要程序员去读代码,了解流程,弄明白来龙去脉。其次,定位bug源头之后,就需要去分析解决问题的方法。分析问题,需要综合相关知识,熟悉它所用到的一些机制,找到最佳解决方案。拿Android来说吧,比如修改wifi的bug,就需要弄清楚wifi的流程,stateMachine机制,消息机制,当然最基本的四大组建及其机制是必不可少的,哪里都有用到。然后,才是去coding。当然coding,也应该注意一些问题,比如,风格尽量和源码保持一致。Google那批程序员功底还是可以的。注释一定要清晰,包括作者,改动时间,以及原因。最后,要强调一点,改bug一定要彻底。不能改一个bug一起另外一个或者一堆bug。一定要避免这样的情况发生。我们公司就一个刚毕业没多久的程序员,改bug不彻底,只改了界面显示,弄的实际功能废掉。对于这样的代码,我只想说两个字:垃圾。另外,改bug要和相关模块的工程师讨论,因为他们或许就是这方面的专家,这样才能写出优秀的代码。
有的人改bug改了几个月,就会分开发的任务,或者层次更深一点的任务。有的人从进公司就一直改bug。不能否认公司方面有一定问题。但程序员也应该从自身方面找找问题。你写的代码是最高效的吗?你写的代码让别人很容易看懂吗?你写的bug让别人呲之以鼻还是赞叹不已?如果你做的不够好,就不要整天抱怨:“又让老子改bug,老子从进公司到现在都一直在改bug!”
㈧ 程序员遇到解决不了的bug怎么办
大部分程序员都有一个问题就是不太愿意测试自己的代码。他们草草的调式完成以后就认为工作结束,测试那是测试人员的工作。
1. 影响了程序员自己的声誉
2. 影响了产品的质量
3. 影响了客户的信任度
4. 这个时候再 DEBUG 难度增大了许多。
大的不说,就说多自己声誉的影响吧。如果你的程序总会有这样那样的 BUG ,你得到收益会减少,即使你写了很多代码。
程序员必须克服一些自身的致命缺点才能够从根本上解决这个问题。那么这个问题是什么?前面我们已经提到,程序员对自己的代码都非常宽容,认为那是正确的没有问题。实际上这种想法比较正常,程序是通过程序员思考和设计之后才写出来,程序员不会将自己认为不正确的东西写到代码里,而到这个时候都一直假设程序是正确的;但人非圣贤,怎么可能不犯错误来。实际上程序员在对待其他程序员时候的态度就很好,带着一种挑剔和学习的态度;但一旦对待自己的代码就很难这么做;这就是最致命的。程序员也必须对自己的代码带着挑剔和学习的态度;这个基础是假设自己的代码是错误的,然后需要做的是怎么样证明自己的代码是正确的。程序员自身可以在程序生成的每个阶段做这些工作:仔细的设计(这个时候画点时间是值得的,必须保证我们对自己的程序有清晰的轮廓后才能开始动手写)、编写代码时、单元测试(单元测试的重要性就不在赘婿了)、功能测试。
㈨ Java程序员怎样调试bug
前端调试技巧:浏览器按F12 可以观察控制台输出的变量,可以看请求的情况(请求路径、参数等) ,这些都是常用的,每个浏览器不同。一般都是火狐的firebug 和谷歌浏览器<br>console.log(var tem); //控制台打印变量<br>alert("tem"); //弹出框弹出变量后台调试:eclipse IDE就是在相对应的java代码处打断点,看变量值等