是否必须检查前提条件?

Pin*_*Pin 18 design-by-contract

这些天我习惯于检查每个函数的每个前提条件,因为我从大学的一个OS编程课程中习惯了这个习惯.

另一方面,在软件工程课程中,我们被告知只应检查一个共同的前提条件,例如,如果一个函数委托给另一个函数,第一个函数应检查它们,但在第二个函数中再次检查它们是多余的.

我确实看到了冗余点,但我确实觉得总是检查它们更安全,而且你不必跟踪它们之前检查的位置.

这里的最佳做法是什么?

Jos*_*ris 11

我没有看到关于如何检查前置条件的"硬性和快速"规则,但我通常将其视为方法文档.如果它是公开范围的,我断言满足前提条件.这背后的逻辑是,范围要求您预期消费的范围更广,影响力更小.

就个人而言,将断言置于私有方法之外的努力是我为"关键任务"方法保留的,这些方法基本上是执行关键任务,受外部合规性要求约束,或者在发生关键任务时不可恢复的方法.例外.这些主要是"判断力".

节省的时间可以重新投入到彻底的单元和集成测试增强中,以尝试清除这些问题,并将工具放在适当的位置,以帮助强制执行输入断言的质量,因为它将被客户端使用,无论它是否属于你的控制与否.


Chr*_*isW 5

我认为这取决于团队的组织方式:检查来自团队外部的输入.

  • 检查最终用户的输入
  • 检查其他团队编写的软件组件的输入
  • 信任从您自己的组件/您自己的团队中收到的输入.

这样做的原因是支持和维护(即错误修复):当有错误报告时,您希望能够尽快知道哪个组件有问题,即哪个团队要分配错误.