程序运行bug和程序错误有什么区别呢

2024年06月22日 阅读 (53)

知乎上有篇文章,Bug是如何产生的?

程序运行bug和程序错误有什么区别呢(1)
程序运行bug和程序错误有什么区别呢(2)
程序运行bug和程序错误有什么区别呢(3)

程序员写代码的最高境界就是:一次写成, 没有bug

换句话说,程序员在通知提测前,利用测试、产品同学提供的完整用例,自测发现的Bug数为零。

初级程序员——能够解决一个问题,解决一个bug。

高级程序员——能够终结一个问题,终结一个bug。

程序错误(Bug),是指软件运行时因程序本身有错误而造成功能不正常、死机、数据丢失、非正常中断等现象。

有些程序错误会造成计算机安全隐患,此时叫漏洞。

有严重后果的错误会受到广泛关注。修补、改正软件程序错误的过程称为调试。

用bug来指错误一般有以下2个说法:

程序运行bug和程序错误有什么区别呢(4)

爱迪生的照片(大约1922年)

It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise—this thing gives out and then that "Bugs"—as such little faults and difficulties are called—show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.

翻译如下:

我的所有发明都如此。

第一步是直觉,然后灵光一闪,然后出现困难——这事发生了,然后“Bug”——这样称呼那些微小错误和困难——展现出来。

在明确到达商业成功或失败前必需数个月的密切关注、研究和劳动。

另外一个说法:

有一次Mark II突然宕机,整个团队都搞不清电脑为何不能正常运作。

经过大家深度挖掘,发现原来有飞蛾意外飞入一台电脑引起故障(如下图所示)。

程序运行bug和程序错误有什么区别呢(5)

团队很快排除错误,并在日志本记录这事。

因此,人们逐渐开始用“Bug”来称呼程序错误。

ID好处1降低开发成本2更好地安排开发周期3提高敏捷性4提高客户满意度5提高程序员的成就感

哲学家们喜欢用不同的方式解释世界,而问题在于我们如何来改变这个世界。

那零Bug代码是怎么写出来的呢?可以从以下五点去努力:

p.s.我们要有上游思维,从上游解决问题的成本会少很多。

在产业互联网时代,想要做好ToB端企业客户的生意,就要深度理解客户,从本质上抓住客户需求,客户需求就是我们讲的难关痛,可以从以下三个角度分析:

  • • 客户工作的现状是什么?
  • • 工作的难点、痛点有哪些?
  • • 客户的期望是什么?

其实很多时候,客户也不清楚他们究竟要的是什么?先把自己假想成用户,换位思考,看看我是用户,会如何使用这个功能。

需求分析的目标就是搞清楚用户真正想要的系统是什么以及存在哪些约束条件。

需求分析是软件开发的输入,“垃圾入,垃圾出”。

最后再考虑这个需求有哪些主干, 有哪些分支 ,在脑子里要形成一个知识框架。

当我们谈到架构的时候,一般是指两种类型的架构:业务架构IT架构,IT架构和技术架构必须紧密联系,通过业务架构来指导IT架构的设计,IT架构最终也必须服务于业务。

程序运行bug和程序错误有什么区别呢(6)

把功能划分成接口良好的模块,让每个模块各司其职,又能依靠良好的接口有效合作, 能极大减少Bug的产生。

这考验就是基本功了,没有速成大法,只有自己慢慢苦练。

架构师具备能力:理解业务,全局把控,选择合适技术,解决关键问题、指导研发落地实施

架构的本质就是对系统进行有序化的重构以符合当前业务的发展,并可以快速扩展

产品定义:能让内部工程师看到文档后,清楚需要实现的功能,性能是什么,验收标准是什么。

主要内容包含:

  1. 业务原型图。原型图是最理想的业务表达方式,能够直观地看到交互逻辑。好的原型图需要有基本的交互能力,细化到具体的字段,用例,以及为每一个角色的界面单独出具原型图。
  2. PRD 文档。详细的 PRD 文档,也可以作为业务承载物。
  3. 业务流程图。一些简单的流程图也可以作为业务承载物,不过需要注意粒度统一,建议以用例为维度设计流程图。
  4. 用例图。用例图是 UML 建模中极其重要的一种图形,如果有用例图非常有帮助。

验收标准,是描述产品验收时要满足的内容,是测试人员重点关注事项。

程序运行bug和程序错误有什么区别呢(7)

demo示例:验收清单

这是我最想说的,单元测试是开发人员的事情。

一定要保证每一行代码都被你执行过,不留任何死角。

利用好QA提供好的用例,进行自动化测试。

将业务实现分解至原子颗粒度,进行测试。

将测试的复杂度从笛卡尔的乘法降解至加法。

可以参考之前的文章:

1.再谈单元测试

2.程序员是如何减少测试次数的?

在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。

一些局部反映不出来的问题,在全局上很可能暴露出来。

很少代码是完全独立的,总是或多或少和别人扯上关系, 修改这样的代码就要小心了, 这也是个主要的Bug发生地。

P.S.

Arquillian集成了熟悉的测试框架,如JUnit 4TestNG 5,并允许使用现有的IDE启动测试。

并且由于其模块化设计,它能够运行AntMaven测试插件。

Arquillian目的是简化项目集成测试和功能测试的编写,让它们能像单元测试一样简单。

零Bug策略:要么立马修复,要么永远不改

零Bug代码会带来巨大的好处,开发完成,进入功能测试或者验收测试阶段以后, 成本会很低, 测试会很快, 因为基本上都是一次通过,没有bug 就不需要修改代码,返工的成本就不存在。

写出零Bug代码,或者接近于零Bug代码应该是每个程序员的追求。

P.S. 架构设计类别"图片的源码:

direction:rightstyle:{fill:Beigestroke:DarkBluestroke-width:9double-border:truefill-pattern:lines}架构设计类别-业务架构架构设计类别-IT架构IT架构-应用架构IT架构-数据架构IT架构-技术架构IT架构-基础设施架构

郑重声明:玄微运势的内容来自于对中国传统文化的解读,对于未来的预测仅供参考。