高级编程范例(TSM_AdvPrPa)
尽管广泛存在,但当前主流的命令式面向对象编程范式(以测试为其主要质量保证方法)有其局限性。尽管它允许新手相对较快地编写程序,而且没有经过太多正式培训,但只要他们需要做一些非平凡的事情,这些程序就会变得复杂。这使得它们越来越难以编写和推理,使得提供比软件测试更好保证的保证方法变得难以处理。类似地,即使可以相对快速地编写软件测试,并且无需进行大量正式培训,但此类测试只能显示故障的存在,而不能显示故障的缺失。
很少有人意识到,除了命令式的、面向对象的编程和测试之外,还有许多其他选择。本课程将从对这些替代方案的广泛概述开始,然后重点关注其中之一,函数式编程,以及使用形式化方法来指定和证明函数式程序的正确性。
函数式编程是一种以简单、清晰和优雅为主要目标的编程方法。它是应用形式化数学和基于编程语言的技术来构建和验证计算机程序。尽管它有着悠久的历史,但最近受到了关注,因为它有潜力编写优雅、正确和高效的程序,一旦人们熟悉了它的基本概念,这些程序就更容易编写、编写和维护。它的简单性还允许使用高中数学中教授的技术来推理函数程序的正确性。这些技术不仅可以用于在纸上陈述和证明较小程序的功能正确性,还可以用于使用自动证明助手的大型系统。此类自动校对助手(例如Agda、Isabelle/HOL、Idris、Lean和Coq)本身就是函数编程的应用和进一步发展。
在本课程的最后一部分,我们将重点扩展到探索命令式、面向对象和函数式编程语言中的复杂类型系统。这些高级类型的系统可作为程序验证的有效工具,并已被证明可有效地识别和消除关键错误。