前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >进攻式和防御式编程

进攻式和防御式编程

作者头像
JusterZhu
发布2023-09-21 14:21:50
发布2023-09-21 14:21:50
45200
代码可运行
举报
文章被收录于专栏:JusterZhuJusterZhu
运行总次数:0
代码可运行

1.概要

Offensive Programming

"进攻式编程",指的是一种编程策略,它与传统的防御性编程策略(程序员负责防止或处理可能发生的错误和异常)不同。

在 Offense Programming 中,程序员会故意引入可控制的错误和异常,在实际运行过程中激活这些错误和异常,以验证系统的健壮性和错误处理能力。通过这种方式,可以提前暴露出软件中的漏洞和问题,使得程序员可以在早期就进行修复。

以下是进攻式编程策略的几个关键方面:

  1. 故意引入错误:程序员故意在代码中引入错误或异常情况,以测试系统如何对其进行处理。
  2. 主动触发错误:在某些情况下,进攻式编程可以包括主动尝试触发可能存在的错误,以便更早地发现问题。
  3. 检查系统反应:观察系统如何对于故意引入的错误或异常进行响应,进而了解系统的弱点,并且改善这些弱点。

需要注意的是,虽然进攻式编程策略可以帮助提前发现问题,但在某些环境中可能并不适用,因为这可能会导致程序在生产环境中出错。因此,使用进攻式编程时需要谨慎考虑。

代码语言:javascript
代码运行次数:0
运行
复制
public void PrintStringOffensively(string input)
{
    // Assume input should never be null or empty.
    // If it is, something has gone wrong and we want to know about it.
    Debug.Assert(!string.IsNullOrEmpty(input), "Input should not be null or empty!");

    Console.WriteLine(input);
}

Defensive Programming

即防御性编程,是一种预防错误发生的编程策略。它的主要思想是:代码应该能够在预期之外的条件下也能正常运行,并且能够处理可能会出现的各种错误情况。

以下是防御性编程策略的几个关键方面:

  1. 输入验证:始终验证函数或方法的输入参数,确保它们在预期的范围或类型内。
  2. 异常处理:使用 try...catch 或相应的错误处理结构来捕获和处理可能出现的异常,以防止程序崩溃。
  3. 代码简洁清晰:编写可读、可维护的代码,使得你的代码易于理解,便于调试和测试。
  4. 日志记录:详细记录程序的运行过程,以便在出现问题时可以轻松地追踪和诊断。
  5. 单元测试:编写单元测试并持续运行它们,以确保代码修改不会引入新的错误。
代码语言:javascript
代码运行次数:0
运行
复制
public void PrintStringDefensively(string input)
{
    // Check if input is null or empty
    if (string.IsNullOrEmpty(input))
    {
        Console.WriteLine("Invalid input!");
        return;
    }

    Console.WriteLine(input);
}

总结

个人感受在编写业务代码时用到防御式编程思想会更多一点,为保证程序的高可用性。而在设计框架或者底层时则使用进攻式编程更多,参数不可用或非法会导致框架不能正常使用,但是对使用者会造成“到处报错”的感受。

其他参考

https://programmingduck.com/articles/defensive-programming

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-21 06:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.概要
    • Offensive Programming
    • Defensive Programming
    • 总结
    • 其他参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档