Questions tagged «defensive-programming»

16
我是否应该现在添加冗余代码,以防将来可能需要?
对与错,我目前认为我应该始终尝试使我的代码尽可能地健壮,即使这意味着添加我知道现在将无用的冗余代码/检查,但是它们可能是下线的x年。 例如,我目前正在开发具有以下代码的移动应用程序: public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - This will be the case if …

14
TDD是否会使防御性编程变得多余?
今天,我与一位同事进行了有趣的讨论。 我是一名防御性程序员。我认为必须始终遵循“ 类必须确保其对象在从类外部进行交互时具有有效状态 ”的规则。该规则的原因是该类不知道其用户是谁,并且在以非法方式与之交互时,它应该可以预见地失败。我认为该规则适用于所有阶层。 在今天我进行讨论的特定情况下,我编写了代码来验证构造函数的参数正确(例如,整数参数必须大于0),并且如果不满足前提条件,则会引发异常。另一方面,我的同事认为这种检查是多余的,因为单元测试应该捕获该类的任何不正确使用。此外,他认为防御性编程验证也应该进行单元测试,因此防御性编程会增加很多工作,因此对于TDD并不是最佳的。 TDD是否能够取代防御性编程,这是真的吗?结果是否不需要参数验证(并不是我的意思是用户输入)?还是两种技术相辅相成?

4
if('constant'== $ variable)与if($ variable =='constant')
最近,我已经在PHP中进行了大量工作,尤其是在WordPress框架中。我注意到许多形式的代码: if ( 1 == $options['postlink'] ) 我本来希望看到的地方: if ( $options['postlink'] == 1 ) 这是某些语言/框架中的约定吗?是否有任何理由使前一种方法比后者更好(从处理角度,解析角度甚至人的角度来看)? 还是仅仅是口味问题?我一直认为执行测试时会更好,因为针对某个常量测试的变量项位于左侧。似乎更好地映射了我们用自然语言提出问题的方式:“如果蛋糕是巧克力”而不是“如果巧克力是蛋糕”。

10
什么定义了健壮的代码?
我的教授在谈到“健壮”的代码时一直引用这个Java示例: if (var == true) { ... } else if (var == false) { ... } else { ... } 他声称“健壮的代码”意味着您的程序考虑了所有可能性,并且没有错误之类的东西-所有情况都由代码处理并导致有效状态,因此为“ else”。 但是,我对此表示怀疑。如果变量是布尔值,那么在逻辑上不可能使用第三状态时检查第三状态的意义何在? “没有这样的错误”似乎也很荒谬;即使是Google应用程序,也会直接向用户显示错误,而不是无声地吞下错误或以某种方式将其视为有效状态。很好-我想知道什么时候出了问题。似乎很宣称应用程序永远不会有任何错误。 那么“健壮代码” 的实际定义是什么?

7
即使我知道该方法无法返回错误的输入,我也应该验证方法调用的返回值吗?
我想知道我是否应该通过验证方法调用的返回值是否符合我的期望来进行防御,即使我知道我正在调用的方法将满足此类期望也是如此。 给予 User getUser(Int id) { User temp = new User(id); temp.setName("John"); return temp; } 我应该做吗 void myMethod() { User user = getUser(1234); System.out.println(user.getName()); } 要么 void myMethod() { User user = getUser(1234); // Validating Preconditions.checkNotNull(user, "User can not be null."); Preconditions.checkNotNull(user.getName(), "User's name can not be null."); System.out.println(user.getName()); } …


3
我需要处理通过反射调用私有方法的情况吗?
创建库时,当不是由同一类的其他方法调用,而是由其他库通过反射调用时,我是否必须确保私有方法必须按预期工作? 例如,如果私有方法private DoSomething(int number)期望: number 是一个非零的正整数,并且: 私有变量string abc不是null也不是空字符串, 和完全的,丑陋的失败,如果这两个条件不匹配,我必须处理这些故障,即使我知道,在类的所有方法将 always¹分配非空值abc调用之前DoSomething,并通过这种积极的非零整数方法? 换句话说,不是通过反射进行不安全调用保护的代码可以被认为是低质量代码,还是属于使用反射来确保调用不会中断任何内容的调用方? 注意:我的问题仅涵盖一组标准库。这不包括必须高度安全的代码(即,当有人可能通过使用反射来使其表现出意外行为或崩溃时感兴趣)。 ¹因为正确记录了该类,所以因为有足够的单元测试来确保任何其他开发人员都不会破坏此方法,等等。

4
我们应该如何防御?
我们已经在一些代码上运行了Pex,并且一直在显示一些好东西(好东西,但是要在生产之前显示它们!)。 但是,Pex的优点之一是它不一定会停止尝试查找问题。 我们发现的一个方面是,在传递字符串时,我们没有检查空字符串。 所以我们改变了: if (inputString == null) 至 if (string.IsNullOrEmpty(inputString)) // *** 这解决了最初的问题。但是,当我们再次运行Pex时,它决定: inputString = "\0"; 造成了问题。然后 inputString = "\u0001"; 我们已经决定,如果遇到默认情况,可以使用默认值// ***,并且很高兴看到由任何其他奇数输入引起的异常(并对其进行处理)。 够了吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.