进攻式和防御式编程

2023-09-21 14:21:50 浏览数 (1)

1.概要

Offensive Programming

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

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

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

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

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

代码语言:javascript复制
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复制
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

0 人点赞