代码大全阅读笔记3

news/2025/10/30 18:55:11/文章来源:https://www.cnblogs.com/nytao/p/19177932

代码 “能跑起来” 只是最低要求,真正高质量的代码需要具备 “可靠性、可测试性、可维护性”。这一部分主要介绍如何通过测试、调试、代码评审等手段保障代码质量。​

  1. 测试:提前发现问题​
    书中强调,“测试不是编码后的补充,而是贯穿编码全过程的环节”。主要包括以下几种测试类型:​
    单元测试:针对 “最小的代码单元”(如函数、方法)进行测试,验证其在不同输入下的输出是否符合预期。例如,测试一个 “计算加法” 的函数add(a, b),需要验证add(1,2)=3、add(-1,1)=0、add(0,0)=0等场景。单元测试的核心价值是 “快速定位问题”—— 当单元测试失败时,能直接确定问题出在哪个函数,避免在整个系统中排查。​
    集成测试:测试多个模块之间的交互是否正常。例如,测试 “用户注册” 功能时,需要验证 “用户模块” 与 “数据库模块” 的交互(注册信息是否正确存入数据库)、“用户模块” 与 “短信模块” 的交互(是否发送注册成功短信)等。集成测试能发现模块之间接口不兼容、数据传递错误等问题。​
    测试驱动开发(TDD):一种 “先写测试,再写代码” 的开发模式。具体流程是:先根据需求编写单元测试(此时测试会失败,因为代码未实现),然后编写代码让测试通过,最后优化代码(重构)。TDD 的优势在于,能确保代码始终围绕 “需求目标” 展开,避免编写冗余代码,同时保证代码的可测试性。​
  2. 调试:高效定位与解决问题​
    即使经过充分测试,代码运行过程中仍可能出现问题(如 Bug、异常)。书中介绍了高效的调试方法:​
    重现问题:调试的第一步是 “稳定重现问题”。只有能稳定重现的问题,才能有针对性地分析原因。例如,用户反馈 “点击按钮后偶尔崩溃”,需要通过模拟用户操作、记录日志等方式,找到 “崩溃时的具体场景”(如输入数据、操作步骤),确保问题能反复出现。​
    定位根源:避免 “头痛医头,脚痛医脚”。例如,代码出现 “空指针异常”,不能只简单地在异常处加一个null判断,而应分析 “为什么会出现 null”(是参数传递错误,还是数据库查询返回 null 未处理?),从根源上解决问题。书中建议通过 “日志打印”“断点调试” 等方式,逐步跟踪代码执行流程,找到问题的核心原因。​
    记录调试过程:将调试过程中发现的问题、原因、解决方案记录下来,形成 “知识库”。这样不仅能避免后续重复踩坑,也能为团队其他成员提供参考。​
  3. 代码评审:团队协作提升质量​
    代码评审(Code Review,CR)是团队成员互相检查代码的过程,是保障代码质量的重要手段。书中给出了代码评审的核心建议:​
    明确评审重点:代码评审不是 “挑错大会”,而是 “共同提升代码质量”。评审重点应包括:代码是否符合规范、逻辑是否清晰、是否存在性能隐患、是否有足够的测试覆盖等,而非纠结于 “括号的位置”“变量名的细微差异” 等无关紧要的细节。​
    保持开放心态:评审者应提出建设性意见(如 “这里可以用常量替代魔法数字,提高可读性”),而非直接否定(如 “这段代码写得太差了”);被评审者应正视反馈,将其视为提升代码质量的机会,而非批评。​
    及时评审:代码评审应尽早进行(如开发者完成一个小功能后),此时代码量少,问题更容易发现,修改成本也更低。避免将代码堆积到项目后期再集中评审,导致问题集中爆发,难以修改。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Newton记录

1. 前言砚上三五笔,落墨鹧鸪啼本文用于记录:Nvidia-新仿真引擎Newton 如有不对,欢迎评论区指正! 2. 正文 2.1 overview2.2 WarpNvidia WarpCuda直接调用C,CPP接口,Warp提供了API for Cuda调用。 “Tile-based”是…

【备份】不知道什么时候写的IniReader.js

【备份】不知道什么时候写的IniReader.jsfunction render(url,id) {const div = document.getElementById(id)var request = new XMLHttpRequest()request.open("get",url)request.send()var data = request…

CSS尺寸、盒子模型、定位、浮动与布局(Flex/Grid)

本文档系统介绍CSS核心布局知识,涵盖尺寸单位(px、em、rem、fr)及其使用原则;标准与怪异盒模型区别及box-sizing属性应用;position定位(static、relative、absolute、fixed、sticky)的特性与参考系;float浮动规…

通过中国信通院SQL质量管理最高等级评测,天翼云TeleDB引领数据库管理新标准!

近日,天翼云数据管理服务(DMS)顺利通过中国信息通信研究院“SQL质量管理平台分级基础能力检验”专项评测。依据《大数据 结构化查询语言(SQL)质量管理平台能力分级要求》标准,在SQL采集、审核、查询优化三大能力…

AtCoder Regular Contest 208 (Div. 2) 题解

ARC 208 题解Link A 我以为是一个贪心题。套路地,统计 \(f_i\) 表示第 \(i\) 位上 \(1\) 的个数,由于要求我们 \(\rm or\) 的值不能改变,也就是不能出现二进制下的退位和进位,以及当前位上 \(1\) 的个数必须 \(\ge…

第三十篇

今天是10月30日,上了数据结构和体育

代码大阅读笔记

设计是软件的 “骨架”,好的设计能让系统更易扩展、更易维护;反之,糟糕的设计会导致系统后期 “牵一发而动全身”。这一部分的核心是 “如何通过合理的设计,降低系统复杂度”。​模块化设计​ 模块化是将系统拆分为…

第2次软件基础作业

这个作业属于哪个课程 软件工程课程班级首页这个作业的目标 实现一个命令行文本计数统计程序姓名-学号 毛佳睿-2023329301078https://gitee.com/mjrk/wc-program.git

第二次软件基础作业

https://gitee.com/mjrk/wc-program.git

vs2017安装qt插件及安装qt插件后的设置

vs2017安装qt插件及安装qt插件后的设置来源:https://blog.csdn.net/blqzj214817/article/details/127347193作者:疯狂Delphi出处:https://www.cnblogs.com/FKdelphi/本文版权归作者和博客园共有,欢迎转载,但未经作…

实用指南:从0死磕全栈之Next.js Server Actions 入门实战:在服务端安全执行逻辑,告别 API 路由!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

KeyShot许可管理故障排除步骤

在使用KeyShot进行3D渲染时,有时可能会遇到许可证相关的问题,如许可证无法激活、许可证丢失或无法分配等。为了帮助您快速解决这些问题,本文将提供一份关于KeyShot许可管理故障排除步骤的宣传文章,确保您在面对许可…

各式各样的Attention - -一叶知秋

自注意力(Self-Attention)的计算复杂度问题Local Attention 🌟 一、为什么需要 Local Attention? 先回忆一下普通的 Self-Attention:每个词都要对序列中 所有其他词 计算注意力权重。如果句子长度是 n, 则计算量…

重塑生产力:天翼云全球首发RaaS,开启“机器人即服务”商业时代!

近日,GITEX Global 2025科技盛会在迪拜圆满落幕。中国电信以“连接智能未来,赋能数字生态”为主题,在这场全球科技盛宴中精彩亮相,全方位展示了其在云计算、物联网、视联网与数字安全等领域的尖端解决方案。会上,…

Python自然语言处理(NLP)入门

自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解和处理人类语言。Python因其简洁的语法和强大的库支持,成为了自然语言处理的首选语言之一。今天,我们…

【计算机视觉】分水岭搭建医学诊断

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

mysql和java获取经纬度的距离的两种方式

mysql和java获取经纬度的距离的两种方式mysql和java获取经纬度的距离的两种方式 T713802819052   取车距离:40333   还车距离:15303 根据订单号vlookup关联一下,单位是 米 1.java与mysql的计算公式是一一对…

SQL索引及调优

SQL索引及调优一:索引的含义及用法 ● 索引index:一种特殊的查找结构,它存储了表中特定列的值,并对这些值进行排序,同时保存了指向原表行数据的物理地址指针。 ● 先查索引,通过索引查表,提高查询效率。 ● 优点…

Sequence2Sequence - -一叶知秋

Sequence2SequenceSequence-to-Sequence(简称 Seq2Seq) 是一种用于序列到序列(Sequence → Sequence)映射任务的深度学习模型结构。 它最早由 Google 在 2014 年提出,用于 机器翻译(Machine Translation),后来…

Python列表 _ 创一个购物清单

Python列表 _ 创一个购物清单shopping_list = []shopping_list.append("键盘")shopping_list.append("键帽")print(shopping_list)print(shopping_list[0])print(len(shopping_list))price = [1,2…