形式化方法无用? - Hillel


许多程序员认为形式化方法是无用的,因为在软件中“规则就是代码”。如果您可以形式指定程序应该做什么,那么您需要拥有该程序!
大多数有这种想法的人都不熟悉 "形式规则(形式规范、formal specification) "到底是什么。
举个例子,您的产品需要在某个时候从 API 中提取数据。这只是几行代码而已。但有时调用会失败。如果有一个失败的请求,那么你需要重试,然后你需要做指数反推,直到一个极限,之后我们就抛错放弃了。
或者调用失败是因为API拒绝了它,根据几个错误中的一个,你的代码需要在重试之前做一些事情,或者可能完全放弃。也许你还需要在调用之前做一些验证。这都需要更多的代码。
然后,还有所有用于关注其他方面的代码:像日志代码、安全检查、将他们的传统数据格式变成你的传统数据格式、性能黑客等等。所有这些都是实施所必需的,这些只是你程序流程的一部分。
如果我们剥去所有的验证、日志、安全、优化、重试和错误处理代码,我们想要的实际的、基本的算法是什么?它是否真的有效,或者即使一切都实现得很完美,设计从一开始是否就有Bug?
这就是形式规则的内容。你将所有的复杂性浓缩为 "我们要么得到API数据,要么得不到API数据",这样你就可以停止考虑有关解析API的相关错误信息,从而专注于大的系统。
规则规范不是代码。
 
当然,后来你也可能发现 "解析API错误信息 "足够重要,以至于你想把它列入规则。而且你可以选择这样做。
关键字是 "选择"。你只需要指定对你来说很重要的东西。