问题标签 [defensive-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1208 浏览

c# - 如何将防御性编程技术结合在一起?

我想问你的问题很广泛,但同时也很具体。首先,我不得不说,我最感兴趣的是适用于 .net 环境的答案。

好吧,我想提高我生成的代码的级别。现在我主要使用 TDD 和静态代码分析来确保我的代码是正确的。最近我听了 Dino Esposito 关于代码合约的演讲,现在我想将它与其他技术结合使用。在听 Dino 的时候,我还记得Debug.Assert()and Trace.Assert()

具体来说,我会问几个问题:

  • 我应该如何编写合同和单元测试以相互补充?
  • 我应该在每种方法中使用代码契约还是只在公共方法中使用代码契约?
  • 我应该阻止使用Debug.Assert()吗?什么时候可以使用它们?(例如,请注意 .net 中的不变量仅在公共方法/属性退出时检查。那么,是否可以通过简单的方法在方法中间进行一些检查Assert()?)
  • 您能否向我推荐一个开源项目,其中所有这些技术都被正确使用,因为一张图片描绘了一千个单词?
0 投票
7 回答
238 浏览

c - C 语法问题

在 switch 语句的默认部分中放置中断是否被认为是错误的编码?我正在读的一本书说它是可选的,但老师算了用它。

0 投票
2 回答
3176 浏览

exception-handling - 防御性编程和异常处理

几天前,我在考试中有以下理论问题: (a) 在处理程序执行过程中可能发生的异常情况时,解释防御性编程的含义。例如,您可以参考课堂上看到的示例或使用伪代码来描述为防止某些情况发生而采取的步骤,例如在尝试读取文件时。[5 分]

(b) 概括地简要描述 Java 中异常处理的含义以及它与防御性编程有何不同。[5分]

我一直认为防御性编程是整个编程范式,异常处理是其中的一部分。在考试期间,我在“防御性编程”中写道,程序员在执行逻辑代码之前尝试找出所有可能的问题,然后从这个函数返回错误值(示例 0),而在异常处理中,潜在的错误发生并被捕获通过特殊机制,直接解释这些错误。这样对吗?正确答案应该是什么?

0 投票
3 回答
5956 浏览

java - GSON 漏洞或反序列化漏洞,以避免

我打算使用 gson 的 fromJson() 方法来解析来自浏览器的字符串。这样做是否有任何潜在的漏洞?我要转换的数据类型比较简单,一个列表和一个布尔值。但是由于 gson 使用反射,我有什么需要注意的吗?

例如,对于较旧的 jvm(6.24 之前的版本),可以对整数使用 DOS 攻击,导致整数解析器挂起。

一些聪明的 json 可以导致 gson 开始加载它应该是的类吗?

0 投票
5 回答
581 浏览

clojure - Clojure : Maps of Lists of Maps of ... 如何处理任何匿名数据结构

大家好:在 java 中,我们都有过使用我们的 ide 来“遍历”复杂数据类型深处的经验:

但是,在 Clojure 中,由于缺少静态类型,这变得非常重要。我们如何“防御”或 Clojure 对抗可能来自嵌套数据结构的复杂元素?

1) 对 clojure 数据结构深度的建议“限制”?

2) 处理深度嵌套的数据结构的常用习语,它可以防止错误,例如将列表误认为映射,或未能正确地小写/大写变量名?

如果我在这里听起来有点偏离范式,请原谅我......通过在 REPL 中不断测试,可能会有效地遏制此类错误。但是,我想知道是否有任何其他方法可以确保,在编译时,该代码尽可能正确(即单元测试、IDE / emacs 插件等...)

0 投票
2 回答
405 浏览

defensive-programming - 这是防御性编程吗?

我一直认为防御性编程是邪恶的(现在仍然如此),因为根据我的经验,防御性编程通常总是涉及基于不可预测结果的某种不合理的牺牲。例如,我见过很多人尝试对自己的同事进行防御性编码。他们会做一些事情“以防万一”代码稍后以某种方式发生变化。他们最终会以某种方式牺牲性能,或者他们会在所有情况下都求助于一些灵丹妙药。

这种特定的编码实践,算不算防御性编程?如果不是,这种做法会被称为什么?

维基百科将防御性编程定义为对不可预测的软件使用的保护,但并未指出针对其他程序员的代码完整性的防御性编程策略,所以我不确定它是否适用,也不知道这叫什么。

基本上,我希望能够以专业的方式与这样做的人争论并告诉他们他们所做的事情是错误的。我希望能够客观地反对这一点,因为它弊大于利。

0 投票
3 回答
1037 浏览

c - 验证输入文件的内容

我有这个防御性编程问题,我真的不知道如何解决。

我有这个函数,它将文件路径和表的大小(行/列计数)作为参数,我正在寻找更好的方法来验证输入文件。我假设这个函数的参数总是正确的。size表示存储在文件中的表的“较小的一面”:

例如 :

size = 2 是正确的,而

size = 2 不正确

我也希望能够拒绝这样的文件

size = 2(通过 fscanf 接受)

我希望能够拒绝的另一种文件类型是

大小 = 2

至于现在我唯一的安全措施是检查文件的元素是否真的是数字。

这是我到目前为止所做的代码:

我真的不知道从哪里开始以及如何开始,我并不是很精通 C,似乎存在很多功能和机制来做我想做的事情,但它们看起来都非常复杂,有些实际上比我的代码长假如。

如果有人能指出我正确的方向,那就太好了。

0 投票
9 回答
2144 浏览

c# - 在抛出异常的情况下,是否应该留下无法访问的中断?

在无论如何都抛出异常的情况下留下无法访问的中断语句是我的愚蠢吗?如果逻辑发生变化,我的防御部分想把它留在那里。我的另一部分不希望其他开发人员在我的代码上看到编译器警告(“检测到无法访问的代码”)。

该怎么办?

更新

我看到一些回复说在以后删除抛出会导致编译器错误。但是,简单地删除(或评论)抛出而不在它之后中断会堆叠案例,这可能是意想不到的行为。我并不是说这是一种可能的情况,但是……嗯,防御性编程是否只针对可能的情况?

0 投票
3 回答
3471 浏览

logging - 使用 Vala 进行日志记录

我是 Vala 编程的新手,并且有使用 Java 和 .NET 的经验,但我还没有找到任何有用的关于如何使用 Vala 登录的信息。是否有任何有用的日志记录工具,如 log4j 或 log4net,或者有什么建议的方式来登录 Vala,并扩展到多个日志记录级别,如错误、警告、调试和跟踪?那么像断言和合同这样的防御性编程呢?是否有任何或建议的方法来进行防御性编程并获得带有堆栈跟踪和精确根本原因的最有用的日志?谢谢你的建议。

0 投票
5 回答
203 浏览

.net - 防御性反多线程类实现

我有一个对多线程应用程序不安全的对象(以多种方式),我想提供内部检查以确保不会同时访问关键方法。

问题

我应该采用什么技术来检测和防止多个线程访问我的类?

跟踪消费者可能使用的所有方法、属性等的 Thread.ID 是否足够?