如何在开发过程中减少 Bug?

爱因斯坦曾说过:“如果我有一个小时来解决一个关系到我生死的问题,我会花55分钟弄清楚问题是什么。一旦我知道了问题是什么,我可以在五分钟内解决它。”

虽然我们的软件开发过程并不涉及生死抉择,但它直接影响用户体验,并决定产品的方向。因此,程序员在开发过程中如何减少 Bug 反映了代码质量,并展示了他们的整体能力。

那么,我们如何在开发过程中有效减少 Bug 呢?

我认为我们应该从两个方面入手:业务层和代码层。

业务层

我们不详细讨论软件开发过程,直接看最重要的关键点:

需求讨论阶段

在需求讨论阶段,必须明确需求,并使测试、开发和产品团队达成共识。如果在早期阶段没有明确的问题,后期将导致无效的返工和不必要的争执,这在日常开发中尤为常见。因此,在软件开发的早期阶段,我们将经历三个阶段:“审查、反馈、评估”

开发完成阶段

开发完成后,程序员需要首先完成“自测”,即软件开发中的“冒烟测试”,以确保主要流程没有错误。否则,开发工程师提交代码后,测试工程师将难以进行有效的测试,导致资源的大量浪费。

一个更标准化的过程要求测试工程师在明确需求后编写“测试用例”。开发完成后,开发人员可以自行对照“测试用例”进行初步验证,然后提交代码进行测试。

这样做的好处不仅是确保“高质量的代码交付”,还可以减少测试工程师的工作量。为什么不这样做呢?

代码提交测试阶段

自测和代码提交测试有什么区别?从软件开发的角度来看,开发人员和测试人员在不同的阶段进行测试:

开发人员的“白盒测试”:

白盒测试是指通过使用源代码进行测试,而不使用用户界面来运行测试程序。这种测试需要通过代码的语法分析发现与算法、溢出、路径、条件等相关的内部编码缺陷或错误,然后进行修正。

测试工程师进行“黑盒测试”:

黑盒测试,也称为功能测试,是通过测试来检测每个功能是否可以正常使用。在测试中,程序被视为一个不能打开的黑盒子,完全不考虑程序的内部结构和特性,只对程序接口进行测试。

黑盒测试只检查程序功能是否按照需求规范文档正常使用,程序能否正确接收输入数据并生成正确的输出信息。黑盒测试关注外部程序结构,不考虑内部逻辑结构,主要针对软件接口和软件功能进行测试。

黑盒测试是一种从用户角度出发,以输入数据和输出数据之间的对应关系为起点进行的测试。

显然,如果外部特性的设计有问题或规范有错误,使用黑盒测试方法是无法发现的。黑盒测试主要针对软件的功能需求,主要试图发现以下类型的错误:

  • 功能不正确或缺失;

  • 接口错误;

  • 输入和输出错误;

  • 数据库访问错误;

  • 性能错误;

  • 初始化和终止错误。

代码层

在代码层面,我们需要从以下几个方面入手:

Eslint 避免低级语法问题

这显而易见。在编码过程中,识别问题,避免诸如逗号缺失、变量名称错误、大小写敏感等简单的语法错误。

边界处理

确保容错性,必要的空值检查,并解决代码边界问题。考虑如何处理不存在的数组或数组越界等场景。如何防止页面因数据丢失而崩溃?

单元测试

如果时间允许,进行彻底的单元测试。在每次编译代码或部署之前运行测试脚本,确保核心代码被测试覆盖,并尽量减少错误率。

积累为什么要谈积累?原因很简单:随着开发经验的增加,可能会遇到许多问题。通过细心地积累知识,许多错误可以在不知不觉中得到解决。否则,将不断陷入同一个陷阱,并在其中迷失。那么我们如何积累?

首先,当遇到无法立即解决的问题时,如果通过研究或向他人寻求帮助解决了问题,请务必记下在笔记本中,或者更好的是使用云笔记以便随时访问。

其次,构建函数库,通过封装常用方法进行不断完善。也许有一天会发现自己不知不觉地创建了自己的 Lodash 库。

最后,积累优秀的代码片段;“我们不生产代码,我们只是优秀代码的搬运工。”

学习

简而言之:没有什么比从优秀的开源代码中学习更有趣的了!阅读优秀的源码不仅可以让我们学习作者的思想,还可以让我们站在他们的肩膀上走得更远!

结语

关于这样一个开放性的问题,每个人可能会有不同的意见,智者见智。每个人都有自己的观点和独特的方法。不管是黑猫还是白猫,只要能抓住老鼠就是好猫。对于程序员来说,任何可以减少 Bug 的方法都是好方法。

程序员常说:“没有代码,就没有 Bug。”

我们不应因为害怕犯错而减少编码,而是要勇敢地面对挑战,并在面对挫折时更加坚定。重要的是要理解,Bug 在日常开发中是不可避免的,只能尽量减少。当然,这不应该成为我们将 Bug 归咎于他人的借口。不断超越自我是走向永恒的关键。

最后:

vue2与vue3技巧合集

VueUse源码解读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/762051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[BUUCTF从零单排] Web方向 02.Web入门篇之『常见的搜集』解题思路(dirsearch工具详解)

这是作者新开的一个专栏《BUUCTF从零单排》,旨在从零学习CTF知识,方便更多初学者了解各种类型的安全题目,后续分享一定程度会对不同类型的题目进行总结,并结合CTF书籍和真实案例实践,希望对您有所帮助。当然&#xff0…

手把手教你考下39张免费亚马逊AWS证书和学习徽章

小李哥目前共考了39项亚马逊云(AWS)徽章,这也是普通用户可考的全部徽章。这篇文章会介绍如何报名、复习、通过这39张徽章提升云计算基本技能,了解全球第一大云厂亚马逊云科技前沿技术。这篇文章在领英爆🔥,有将近100k浏览量和11k的…

Linux:系统安全及应用

目录 一、系统账号管理 1.1、系统账号清理 1.2、密码安全控制 1.3、命令历史限制 二、限制su命令用户 三、PAM安全认证 四、sudo机制提升权限 4.1、sudo机制介绍 4.2、用户别名案例 4.3、启用sudo操作日志 4.4、其他案列sudo 4.5、开关机安全控制 4.6、限制更改GR…

root密码忘了怎么办(从系统引导过程解决)

目录 1.Linux系统密码忘记 2.系统引导过程 2.1 systemd 2.2 GRUB和GRUB2 2.3 运行级别 3.修复MBR扇区故障和GRUB引导故障 3.1 MBR扇区故障 3.2 GRUB引导故障 1.Linux系统密码忘记 我们在生活中经常遇到这类困扰,就是某个账号还是账户密码忘了,这…

Docker 部署 Nacos v2.3.2 版本

文章目录 Github官网文档Nacos 生态图Nacos Dockerdocker-compose.ymlapplication.propertiesNacos 官方示例 Github https://github.com/alibaba/nacos 官网 https://nacos.io/ 文档 https://nacos.io/docs/latest/what-is-nacos/ Nacos 生态图 Nacos Docker 镜像&…

《信创数据库沙龙上海站:共话发展,智启未来》

2024 年 6 月 29 日周六 14:00,信创数据库沙龙在上海市徐汇区建国西路 285 号科投大厦 13 楼金星厅成功举办。本次活动吸引了众多学术界和产业界的专家、学者以及技术爱好者参与。 活动中,多位嘉宾带来了精彩分享。薛晓刚探讨了 Oracle 在国内的前景&a…

Java全套智慧校园系统源码:微信小程序+电子班牌 让教育更智能化的一套数字化校园管理系统源码

Java全套智慧校园系统源码:微信小程序电子班牌 让教育更智能化的一套数字化校园管理系统源码 智慧校园管理系统是一种利用科技手段优化学校教育和管理的平台。它可以涵盖多个方面,例如教学、管理、服务等。其中包括智能化教室、智慧校园卡、校园安全监控…

基于flask的闪现、g对象、蓝图

【 一 】闪现(flash) # 1 flask中得闪现存放数据的地方,一旦取了,数据就没了-实现跨请求间传递数据 # 2 django中有没有类似的东西?message 消息框架# 3 基本使用1 设置:flash(欢迎你、欢迎来到澳门赌场&a…

Dns被莫名篡改的问题定位(笔记)

引言:最近发现用户的多台机器上出现了Dns被莫名修改的问题,从系统事件上看并未能正常确定到是那个具体软件所为,现在的需求就是确定和定位哪个软件具体所为。 解决思路: 首先到IPv4设置页面对Dns进行设置:通过ProcExp…

昇思25天学习打卡营第8天|MindSpore-SSD目标检测

SSD目标检测介绍 SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上,SSD对于输入尺寸300x300的网络,达到74.3%mAP(mean Average Precision)以及59FPS;对于512x512的网络,达到了76.9%mAP ,超…

短视频电商源码怎么选择

随着移动互联网的迅猛发展,短视频电商成为了一种热门的商业模式。很多商家和创业者都希望能够快速搭建一个短视频电商平台来推广和销售自己的产品。然而,选择合适的短视频电商源码并不是一件容易的事情。在选择之前,有一些关键因素需要考虑。…

STC8/32 软硬件I2C通讯方式扫描I2C设备地址

STC8/32 软硬件I2C通讯方式扫描I2C设备地址 📄主要用于检测挂载在I2C总线上的设备。在驱动I2C设备之前,如果能扫描到该设备,说明通讯设备可以连接的上,在提前未知I2C地址的情况下,可以方便后面的驱动代码的完善。 🔬扫描测试效果:(测试mpu6050以及ssd1306 i2c oled )…

本科学历|艺术创业公司经理限定美国西部访问学者申请成功

U经理属于自费访学,本科学历,无文章及课题,但有较丰富的艺术创意及艺术教育实际操作经验,要求申美国西部地区的学校。最终我们为其获得俄勒冈州立大学访问学者邀请函。之前拟定的申请设想全部实现:西部地区、专业契合、…

【Lua小知识】Vscode中Emmylua插件大量报错的解决方法

起因 Vscode写Lua用的好好的,最近突然出现了大量报错。 看报错是有未定义的全局变量,这里查日志才发现是由于0.7.5版本新增诊断启用配置,所以导致了原先好的代码,现在出现了大量的报错。 解决方案一 最直接的方法当然是在配置中直…

【单片机毕业设计选题24040】-基于STM32的蓝牙防丢器设计

系统功能: 系统上电后显示“欢迎使用蓝牙防丢系统请稍后”两秒钟显示正常界面,如果蓝牙正常连接OLED显示Connected, 蓝牙未连接则显示DisConnected同时蜂鸣器报警 蓝牙正常连接后在APP上每隔三秒显示一个Connected 系统功能框图: 主要功能模块原理图: 电源时钟…

CSS|04 复合选择器伪类选择器属性选择器美化超链接

基本选择器:见上篇基本选择器 复合选择器选择器1,选择器2{属性:值;} 多元素选择器,同时匹配选择器1和选择器2,多个选择器之间用逗号分隔举例: p,h1,h2{margin:0px;}E F{属性:值;} 后代元素选择器,匹配所有属于E元素后…

【Python机器学习】模型评估与改进——分组交叉验证

分组交叉验证是非常常见的一种交叉验证策略,它适用于数据中的分组高度相关时。比如我们想构建一个从人脸图片中识别情感的系统,并且收集了100个人的照片的数据集,其中每个人都进行了多次拍摄,分别展示了不同的情感。我们的目标是构…

Python 文件操作

文件编码 将文件的内容翻译为二进制 文件操作 打开文件 open函数 语法: open(name, mode, encoding)name:文件名的字符串,可以包含具体路径。若没有路径,则默认为与py文件位于同一层 mode:打开文件的模式&#xf…

PP-JITTER \RMS-JITTER 及其他Jitter解析

Jitter概念 Jitter(抖动)是从时域评价时钟信号质量的重要参数。 首先要明确的是它是一个统计量,因此有标准差(均方根,rms)和范围(峰峰值,p2p); 然后根据样本的类型可以划分成不同的分类,如Jabs(absolute jitter)、Jp(period jitter)、Jc2c(cycle-to-cycle ji…

Forecasting from LiDAR via Future Object Detection

Forecasting from LiDAR via Future Object Detection 基础信息 论文:cvpr2022paper https://openaccess.thecvf.com/content/CVPR2022/papers/Peri_Forecasting_From_LiDAR_via_Future_Object_Detection_CVPR_2022_paper.pdfgithub:https://github.co…
最新文章