防御性编程几大基本原则
当开发人员遇到意外的错误无法修复时,他们会“添加一些防御性代码”来使代码更安全,更容易找到问题所在。有时候,仅仅这样做就能解决问题。他们会加强数据验证——确保检查输入和输出字段以及返回值。审查并改进错误处理——也许在“不可能”的情况周围添加一些检查。增加一些有用的日志记录和诊断功能。换句话说,这些本应该从一开始就存在的代码。
防御性编程的整个目的是为了防范你意想不到的错误。
——Steve McConnell,《代码大全》
防御性编程的几个基本原则在Steve McConnell经典著作《代码大全》中有详细解释:
保护你的代码免受“外部”传入的无效数据影响,无论你认为“外部”是指什么地方。这里指来自外部系统、用户、文件或模块/组件之外的任何数据。建立“壁垒”、“安全区域”或“信任边界”——边界之外的一切都是危险的,边界之内的一切都是安全的。在壁垒代码中,验证所有输入数据:检查所有输入参数的正确类型、长度和取值范围。再次检查限制和范围。
在检查完坏数据后,决定如何处理它。防御性编程并不意味着吞没错误或隐藏错误。它是关于在健壮性(如果遇到可处理的问题则继续运行)和正确性(永远不返回错误结果)之间做出权衡。选择一种处理坏数据的策略:立即返回错误并停止运行(快速失败),返回一个中立值,替换数据值等等。确保策略明确且一致。
不要假设你代码之外的函数调用或方法调用会按照广告所述正常工作。确保你理解并测试了周围外部API和库的错误处理机制。
使用断言来记录假设,并突出显示“不可能”的条件,至少在开发和测试阶段如此。这对于长期由不同人维护或高可靠性代码特别重要。
巧妙地添加诊断代码、日志记录和跟踪功能,以帮助解释运行时发生了什么问题,尤其是当遇到问题时。
标准化错误处理。决定如何处理“正常错误”或“预期错误”和警告,并始终保持一致。
只在需要时使用异常处理,并确保你对语言的异常处理机制了如指掌。将异常作为正常处理流程的一部分的程序会遭受经典意义上代码结构混乱的可读性和可维护性问题。
Michael Nygard在《发布!》中还提到了其他几个规则,比如永远不要无限期等待外部调用,尤其是远程调用。当出现问题时,无限期可能会很长时间。使用超时/重试逻辑以及他的断路器稳定模式来处理远程故障。
对于C和C++等编程语言,防御性编程还包括使用安全函数调用来避免缓冲区溢出和常见编码错误。
原文:https://swreflections.blogspot.com/2012/03/defensive-programming-being-just-enough.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
向量数据库领域又来一个很屌的项目,PostgresML
PostgresML是PostgreSQL的机器学习扩展,能让你使用SQL查询对文本和表格数据进行训练和推理。有了PostgresML,你可以将机器学习模型无缝集成到PostgreSQL数据库中,并利用尖端算法的强大功能高效处理数据。 执行自然语言处理任务,如情感分析、提问和回答、翻译、总结和文本生成 从 HuggingFace 模型 Hub 访问数千种最先进的语言模型,如 GPT-2、GPT-J 和 GPT-Neo 针对不同任务,在自己的文本数据上微调大型语言模型 将现有的 PostgreSQL 数据库用作向量数据库,从存储在数据库中的文本生成 embedding 针对文本数据操作: 翻译 SQL 查询 SELECT pgml.transform( 'translation_en_to_fr', inputs => ARRAY[ 'Welcome to the future!', 'Where have you been all this time?' ] ) AS french; 结果 french ---------------------------------...
- 下一篇
Firefox 会被淘汰吗?
近期关于 Firefox 的一篇文章引起了广泛讨论。作者表示,Firefox 正处于危险边缘,可能很快就会被淘汰。 来源 https://www.brycewray.com/posts/2023/11/firefox-brink/ 文章提到,根据美国政府网站的开发指南 (U.S. Web Design System, USWDS),如果 Firefox 的市场份额低于 2%(参考 analytics.usa.gov 的统计使用率),那么美国政府的网站可以不再兼容 Firefox。 过去 90 天,访问 analytics.usa.gov 的浏览器中 Chrome 占 49%,Safari 占 34.8%,Edge 8.5%,Firefox 只有 2.2 %——已经非常接近临界点。如果 Firefox 失去了美国政府网站的支持,这有可能在整个 Web 开发界产生涟漪效应。因为政府的决定会影响到无数企业,就像多米诺骨牌倒下一样,会有越来越多的网站跟随步伐不兼容 Firefox,导致 Firefox 处于淘汰边缘。 有人可能会问;“政府网站不兼容 Firefox 又怎样?这只是针对美国政府的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启