与自身计算器结果不符的算例

我经营着一个家居装修成本计算器网站。

每个页面在四个地方显示成本:

我发现了一个重大 Bug。一个文字示例说项目成本为 $62,300。而小部件显示的同一项目成本却是 $56,779。

两者之间存在 $5,500 的差距。

这些数字并非随机产生的,而是源于不同的隐藏假设。文字说明假设更换了新的 HVAC(暖通空调)设备,而小部件则假设你会使用现有系统。两者本身都没错,但它们之间没有进行数据同步。

这是一个常见的错误。当你把同一个事实存储在两个地方时,它们就会产生偏差。你不仅仅是在复制内容,你是在复制数据。

我用一个我称之为“源头优先 (source-first)”的规则解决了这个问题。它包含两个部分。

第一部分:成本仅存在于一个地方。

我不再在文本和表格中手动输入数字。现在,计算器函数是唯一的来源。在构建过程中,表格和文字示例会直接从该函数中提取数字。如果函数发生变化,页面上的每个数字都会自动更新。由于数字的值完全相同,因此不可能出现不匹配的情况。

第二部分:每个数字都必须显示其来源。

成本数据并非永久事实,它会失效。我在每个计算中都添加了一个小的数据对象,显示:

这保证了数据的真实性。如果源数据错误,整个网站都会出错,但至少网站能保持一致。用户会立即注意到矛盾,而这会摧毁信任。

教训很简单:

我花了一整天的时间去删除数字,而不是编写数字。我的代码库变小了,而且它不再对用户撒谎。

Source: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9