知识卡片
编译通过只证明语法合规不证明逻辑正确
内容
一段代码能通过强类型语言的编译检查,只能说明它满足了这门语言的语法规则,绝不等于它逻辑正确——类型系统能挡住的是把字符串传给期望整数的参数这类错误,挡不住业务逻辑本身写错。判断代码是否正确,唯一可靠的办法是让它经过覆盖这些正确性诉求的测试,而不是依赖编译器不报错这件事本身,强类型语言带来的更多是纪律和安全感,而非正确性的保证。
参考来源
- 位置:《架构之美》第14章《重读经典》14.2节《类型是隐式定义的》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0278.xhtml)
- 结论依据:原文明确引用"如果程序是以强静态类型的语言编译而成的,那么这仅仅说明它通过了某些测试。这意味着语法保证是正确的……但是不能仅因为代码通过了编译就保证它是正确的……正确性的唯一保证……就是它是否能通过保证程序正确性的所有测试"。
- 原始内容:如果程序是以强静态类型的语言编译而成的,那么这仅仅说明它通过了某些测试。这意味着语法保证是正确的……但是不能仅因为代码通过了编译就保证它是正确的……正确性的唯一保证,不论你使用的语言是强类型的或弱类型的,就是它是否能通过保证程序正确性的所有测试。