浅谈什么叫做防御性编程

176 阅读3分钟

欢迎关注我的公众号:程序员技术成长之路

最近各个互联网公司好像都有宕机的风险,然后进行一波裁员的风波。好像没有发生这样的公司都不是叫做互联网大厂了,作为互联网大厂的一个小小码农,很有危机感啊,万一一不小心失业的风就吹过你的面前就难受了,今天我们就来谈谈如何增强自己核心能力,如何提高编码能力,减少编写程序的错误性,提高程序的高可用。在这里我们就不得提到一项能力--防御性编程,下面就来讲述一下什么叫做防御性编程 

图片

 防御性编程(Defensive Programming)是一种软件开发中的编程方法论,目的在于确保程序在各种非预期和意外的情况下仍然能够正确地执行。这种编程风格强调对潜在错误进行预判和预防,不仅仅依赖于软件的设计和形式上的正确性,而是通过一定的技术手段保证程序的鲁棒性(robustness)和稳定性。那么如何进行防御性编程呢? 

 一、不能相信任何外部输入数据

检查所有的输入数据,确保它们满足预期的格式和范围。对于不合法或可疑的输入要做出适当的反应,例如拒绝、替换、转义或返回错误信息等。防范注入攻击,比如SQL注入,通过参数化查询或使用安全的API。

二、使用断言

在代码中插入断言(assertions)来检查在某个点上的某个条件必须为真。如果条件为假,程序通常会抛出错误或异常,提示开发者此处存在问题。

三、异常处理

  • 正确使用异常处理可以捕获和处理在运行时可能发生的错误,防止异常情况导致程序崩溃或状态异常。

  • 确保异常安全性,防止异常导致资源泄露或不一致状态。

四、代码审查和单元测试

  • 通过代码审查来检查潜在的问题。

  • 写单元测试来验证每个部分的功能,并确保在修改后依然正常工作。

五、限制和降级策略

  • 对资源使用设置限制,比如内存和文件句柄的使用。

  • 设计降级策略,当某些服务不可用时,提供备选的功能。

六、避免依赖外部环境

  • 使代码尽量不依赖于外部环境的具体配置,比如文件路径、环境变量等。

  • 对长时间运行或依赖外部资源的操作设置超时,防止系统挂起等待。

七、重视代码相关部署和安全

  • 使用版本控制系统来管理代码变更,追踪问题和恢复到稳定状态。

  • 定期备份重要数据,并确保能够从备份中快速恢复。

 防御性编程是一种预先设想和应对潜在错误与异常情况的编程方法,它至关重要因为它提升软件的稳定性和可靠性,确保用户体验的连续性,减少系统崩溃的风险,增强数据安全防范能力,以及降低长期的维护成本,同时帮助软件满足法规和行业标准。通过这种方法,开发者能编写出更健壮、易维护和高质量的程序,增强软件对于未知错误和意外情况的抵抗力。