Software / Theory - PKU€¦ ·...

43
裘宗燕 北京大学数学学院信息科学系 2009.10.30 软件理论 ——发展和现状

Transcript of Software / Theory - PKU€¦ ·...

Page 1: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 1

裘宗燕

北京大学数学学院信息科学系

2009.10.30

软件理论——发展和现状

Page 2: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 2

计算机和软件

计算机系统已成为支持人类社会活动和个人生活的基础设施中最重要的组成部分,各种各样的系统软件和应用软件在计算机系统中起着核心作用

生活当前社会里的每个人,每时每刻都在享受着一些计算机系统(本地的或远程的)提供的服务

计算机系统的工作已深入到我们工作生活的各个方面

现代化通讯系统完全由计算机系统和相应服务软件支撑

交通管理和控制,信号系统,乘车票证管理

校园管理,生活学习的许多方面都基于各种计算机化的系统

医疗器械、交通工具、生活器具的控制系统

等等等等

Page 3: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 3

软件!软件?

作为计算机系统的物理基础的硬件是通过大工业方式生产的“标准化”产品,没有多少不同种类。实现林林总总、丰

富多彩的服务,靠的是各种专门的软件系统

反过来,社会的正常运行、个人的正常生活,也越来越依靠各种计算机系统(及相应软件系统)的正常运转

假设相应的计算机系统出了问题,会怎么样?

如果你手机里的软件崩溃……

如果移动运营商的服务系统宕机……

如果食堂收费系统停止工作……

如果高速铁路信号系统出毛病……

如果核电站控制系统失灵……

Page 4: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 4

Page 5: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 5

软件的现状

下面条款取自某公司的软件产品说明书,该公司保证:

“本‘软件产品’自交货后九十日内大致符合随附书面材料所述的功能”,无论使用中出什么问题,公司责任只是下述两者之一“(a) 退还你的全部货款。(b) 修正或更换不符合 ... 的软件产品” 。公司“绝不就因使用或不能使用本‘软件产品’所发生的其他损害 ... 负赔偿责任,... 不论任何情况, ... 应付的责任总额,以您就‘软件产品’所实际已经支付的价款为限”

试想:如果其他生产厂商(例如家电厂商/建筑商/包子铺)的产品条款如此,我们会不会买其产品?

软件不可靠的另一典型证据:没有保险公司为软件保险,因为它们无法估计出险率和损失,无法估计保费

显然:软件的质量很不令人满意

Page 6: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 6

软件的现状

软件系统的不可靠、不安全已成为一种社会“共识”,软件系统可能出错被认为“理所当然”,就像是“天意”

作为现代社会的基础设施的重要部分,这种情况显然不应该容忍。社会需要可靠的软件,特别是关键性软件

软件开发的产出品可能是很复杂的软件系统,这种开发工作是一种完成复杂制品的工程

虽然1960年代软件危机出现后,人们就开始研究和倡导软

件开发的工程化方法。但到今天,软件本身不够安全可靠的局面并没有得到根本改观

将软件开发和软件工程与其他领域的工程做一些对比,或许能帮助我们看到出现这些情况的一些原因

Page 7: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 7

软件与建筑——对比

建筑:

建筑史:~10000年

大型建筑:2000~3000年

现代大型建筑:100多年

有很长时间的逐步发展

软件:

软件史:~60年

大型软件:~40年(IBM OS360)

现代大型软件:20+年

快速膨胀,没有足够的过渡时间

认识一个新工程领域需要时间来“试错”,“总结”和“提高”

所谓“提高”,就是从问题和实践中抽象出“理论”

建筑的力学理论:

基础层面:材料力学(1826年纳维“材料力学讲义”)

组合层面:结构力学(1864年麦克斯韦的一批定理 )

Page 8: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 8

工程需要理论

对于小型工程,没有理论支持也可能进行。例如千年不倒的赵州桥(但肯定,倒塌的桥梁要多得多)

现代大型建筑,必须有建筑力学理论的支持(超高层、大体量、复杂结构、大跨度、复杂地质条件、地震烈度、强风、特殊强度或形态要求等),没有理论无法设计

成熟的工程领域需要成熟理论的支持。建筑业有资质,达不到一定水平,禁止进入大型建筑设计领域

软件领域发展太快,软件的体量膨胀太迅速,理论的发展跟不上需要。我们对小型软件开发的认识还不够,却需要开发超大规模的复杂软件系统(~1亿行代码)

常规软件工程领域,主要研究软件开发过程和管理。这非常重要,但仅靠控制和管理不足以支持可靠软件的开发

Page 9: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 9

软件需要理论

任何重要的工程领域,都需要成熟的理论支持

建筑,机械,电子,……

汽车,航海,航空,……

能够支撑起社会运行基础设施的软件,也需要理论支持。但,软件理论是什么样的东西?

任何工程应用领域的基础理论体系,都是某种形式的“应用数学”。其中采用和各种成熟的数学技术和方法,但又特别

需要反映具体领域的特点。软件理论也不应该例外

其他领域的例子:

麦克斯韦的电磁学理论

A Mathematical Theory of Communication, Shannon

Page 10: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 10

软件理论

Mathematical Theory of Computation, Z. Manna, 1974可计算性,谓词逻辑

程序验证,流程图模式,程序的不动点理论

软件与数学的联系更加紧密

软件的表现形式就是一种抽象的符号形式的描述(无论用什么样的编程语言)。表现形式就像数学中的描述

软件意义的实现是通过一个有明确定义的基础机器(计算机可以看着一个数学系统),通过一系列的执行步骤,其每步行为都完全精确。就像数学里的演算

软件(本身)的行为不依赖于我们可能还没有完全认识的物理世界。像数学一样,它活动在另一个抽象的世界

不像其他工程,软件生产中没有从蓝图到物理实现的过程

Page 11: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 11

软件理论

软件理论大概应该分为若干方面:

基本层面:程序的理论,数据的理论

结构层面:有关执行过程的理论,有关软件结构的理论

软件开发过程的理论

几个方面都有了很多成果,软件结构方面最不清楚

程序:(几种)程序语义学,程序验证的理论,……

数据:抽象数据类型理论,类型理论,……

执行过程:进程代数,描述进程性质的时态逻辑,……

Page 12: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 12

软件理论

在其他科学与工程领域的理论研究中,使用的主要是连续数学,因此推动了数学中相关领域的发展

在计算机和软件领域,基本结构和过程都是离散的,同样也呈现出非常复杂的现象。连续数学在这里还没有发挥重要作用(明天?不知道!)

在计算机和软件领域,重要用到的和借鉴的数学是描述离散活动和离散现象的数学。最重要的基础

数理逻辑

集合论

代数的技术和方法(尚未看到经典的群/环/域等的大作用)

下面介绍软件理论中的一些情况

Page 13: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 13

程序的理论(1)程序是用某种具体编程语言写出的一段代码,但是

可以用不同的语言。不同描述方式之间的共性是什么?

可能有多种不同的具体书写形式。怎么说两个程序“等价”?

程序的表现形式“只是”表面现象(“语法糖衣”),程序的本质是它描述了某种“意义”

在实际中,作为“共性”意义也有所体现

在一种特定机器上,不同编程语言的程序,最终都被编译到同样一套汇编代码

微软现在采用的 .NET 框架中,所有编程语言都被编译到一种通用中间语言(CIL)

Page 14: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 14

程序的理论(2)汇编语言或者 CIL 太低级

不能反映不同程序具有同样意义的情况(不同的汇编程序或CIL 程序可能做同样的事)

难以直接对这种低级程序做推理(例如,对一个程序,要求断定运行中某个变量的值绝不会小于 0)

需要抽象的语义模型!为此需要有一种对程序执行的看法

对程序执行的一个看法是关注程序执行中状态的改变:程序的执行产生了一个状态序列

初始状态 …… 中间状态 …… 结束状态

Page 15: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 15

程序的理论(3)最简单的状态模型里,一个状态就是一个有限函数,它将当时一些变量名映射到它们的取值。例如

命令(例如赋值语句)改变状态。其抽象是什么?

一个命令就是一个变换(也是函数,是从状态到状态的函数,从有限函数到有限函数的函数)

例如,经过给 x 赋值 4,给 y 赋值 1 两个操作,状态变成:

也就是说,“x = 4; y = 1;” 的意义是一个函数,它作用于前

一状态,就得到后一状态

Page 16: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 16

程序的理论(4)“x = 4; y = 1;” 还可以作用于其他状态。实际上,它可以法地作用于所有的定义域包含变量 x 和 y 的状态(可以保

证这段代码正常执行的状态)

可以严格地用数学的方式把一段程序代码 P 的作用域定义清楚(将 P 看作一个状态映射)

要定义程序的意义,可能有多种不同途径。例如:

定义清楚任意一段程序的执行将会经过那些状态。为此需要说清楚基本命令所定义的操作,各种组合结构导致的操作序列。即,把程序的意义定义为它的操作过程

定义清楚任意一段程序所实现的状态映射:基本命令是基本映射,而各种组合结构是映射的组合

还有其他方式

Page 17: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 17

程序的理论(5)这里只讨论一种:将程序看作是状态映射。状态是函数:

一个状态 名字的集合 “值”集合 无定义

为描述状态变化,在状态上定义覆盖操作:

例:

Page 18: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 18

程序的理论(6)状态确定变量的值,进而也确定了表达式的意义

假定

我们有:

对常量,任何状态给出的都是它们的字面值

对一般表达式:

状态确定表达式的意义,因此也可以看作映射:

有些表达式无定义,如求值中出现除以0 等

Page 19: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 19

程序的理论(7)把程序看作是状态到状态的函数,是一种指称语义(denotational semantics)。基本想法由 C. Strachey 提出,D. Scott 完成其基础理论,并因此获图灵奖

指称语义要求定义一个语义指称函数,把程序映射到某种意清晰的数学对象(就像用中文解释英文)

状态的集合:

语义映射:

表达式的语义:

命令的语义:

假设只有整型表达式

Page 20: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 20

程序的理论(8)表达式的语义定义:

语句的语义定义:

Page 21: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 21

程序的理论(9)定义 while 语句的语义时遇到了问题。直接定义无意义:

正确定义需要“最小不动点”的概念,要证明最小不动点的

存在性。有关指称语义学的理论基础的工作主要就是证明了对单调连续函数,递归定义的最小不动点存在

这方面研究形成了有关“Domain Theory”的研究领域(实

际上是个数学领域)。有许多理论工作,这里不介绍了

Page 22: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 22

程序的理论(10)在程序语义基础上可以定义对程序进行推理的逻辑系统

Hoare 逻辑,是一套对程序进行推理的规则。需要把对程序

意义的要求用一对逻辑断言描述(可能还需要增加一些中间断言),利用这套规则可以把程序正确性的证明归结到一组谓词逻辑的公式

Dijkstra 的最弱前条件逻辑。与 Hoare 逻辑类似,但可以减

少一些中间断言

程序语义和验证方面最近的进展:

研究更复杂的程序的语义和验证问题。例如,操作数据结构的程序,面向对象的程序

利用已有的技术取验证一些复杂的程序,或有着复杂现象的程序。如验证操作系统的内核

Page 23: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 23

进程的理论

抽象地看,软件可看成一种离散的动力系统(dynamic systems),其行为表现为一些离散性的活动(事件)

如果只有顺序执行,这种行为是顺序的一系列事件

如果事件有可能同时发生,而一些事件之间存在顺序约束关系,系统的行为可以示成有一个起点的有向无环图

理解复杂系统的行为,可以设法去直接描述一个系统产生的事件序列或者事件图

虽然可以直接用画事件图的方式设计系统,但

这种图可能很大,甚至不是有穷图

图的层次太低,与人们思考和设计系统的方式距离太远

时常需要一个系统具有一集行为,画一集图更为不便

Page 24: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 24

进程代数(1)进程代数是软件理论研究的一个领域,其研究方法是

定义一个描述离散演化系统(进程)的语言

定义一套系统演化规则(语义规则)

研究这样描述的系统的行为(做什么,等价性等等)

下面简单介绍 CSP(C.A.R. Hoare)进程代数。参考材料:Communicating Sequential Process

若干约定:

小写字母开头的单词表示事件,如 x, y, z

用 A, B, C 等表示事件集合

大写字母开头的单词表示进程,如 P, Q, R

STOP 是一个特殊进程,它什么也不做

Page 25: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 25

进程代数(2)基本进程表示称为前缀表示,如

(a P) 表示事件 a 之后的行为如进程 P

例:(coin STOP) 描述一个进程,它收一个硬币后停止,

是一个不好的自动售货机

例:(coin (choc (coin (choc STOP))))卖两块巧克力后停止

下面假定 右结合,上面进程可以重新写成

coin choc coin choc STOP

严格写法需要定义进程的“字母表”,P 的字母表用 αP 表上述进程的字母表是 {coin, choc}

Page 26: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 26

进程代数(3)仅有上面描述方式只能定义最简单的顺序进程。要提高语言的表达能力,需要引进新的进程组合方式和定义方式

首先允许递归定义。例如

CLOCK = (tick CLOCK)

定义了一个具有无穷行为的进程。可以推演它的行为:

CLOCK= (tick CLOCK)= (tick (tick CLOCK))= ... ...

并不是每个递归式都是有效定义(有效,可以非形式地认为是“确实定义了某种活动”)。例如 P = P 就没定义任何

东西。需要考虑什么样的定义有效

Page 27: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 27

进程代数(4)有一个前缀表示开始的进程,称为“带卫的进程”

命题:假定 F(X) 是一个带卫表达式,其中包含进程名 X,而 A 是进程 F 的字母表,那么 X = F(X) 有唯一解。也就

说,它定义了一个唯一的进程

在上述命题条件下,用 µX:A . F(X) 表示这个唯一解

显然 X = F(X) 的解也是 Y = F(Y) 的解

例:

CLOCK = µX:{tick} . (tick X)

VMS = µX:{coin, choc} . (coin choc X)

是一部能不断卖巧克力的售货机

Page 28: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 28

进程代数(5)要扩充语言的能力,需要引进新的进程构造手段

选择(choice)是一种构造方式,用于构造具有多种可能

行为的进程。例如

(a P | b Q)

的行为是首先发生事件 a 或 b,而后分别像 P 或 Q。其后续行

为依赖于第一个发生的事件

例:

VMCT = µX . (coin (choc X | toffee X))

选择的一般形式是

(a1 P1 | ... | ak Pk)

注意:这里不能结合,如 (a P | (b Q | c R)) 不合法

Page 29: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 29

进程代数(6)可以研究所定义的进程的性质,得到一些等价定律

例如:

(a P | b Q) = (b Q | a P)

(a P) ≠ STOP

可以按照定义一个证明

还可以定义更多的进程组合符,如

最重要的一个是并发组合符 P || Q

可以定义两个进程并行执行,以及它们在某些事件上同步(这些事件必须两者同时执行)

可以发现,并行进程有可能死锁(相互等待得不到对方协作),还可能出现其他不正常行为

Page 30: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 30

进程代数(7)进程的行为可以用它们的迹(traces)表示

迹就是事件的序列。例如,<a, b, c> 表示一个包含了三个顺序发生的事件的迹。<> 是空迹

例:VMS = µX:{coin, choc} . (coin choc X) 售出两块巧克力时的迹是 <coin, choc, coin, choc>

迹实际上就是串,可以定义各种迹的操作

拼接:<a, b> ^ <c, d> = < a, b, c, d>

可以发现拼接操作的一些定律

限制:t ↑ A,迹 t 中属于集 A 的事件按原顺序排列而成的迹

*:A*,A 中事件的任意序列形成的迹(事件可任意次出现)

等等

Page 31: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 31

进程代数(8)进程的迹:一个进程可能产生的事件序列(迹)表示它的行为,可以定义进程 P 的迹集合 traces(P)

traces(STOP) = {<>}

traces(coin STOP) = {<>, <coin>}

traces(CLOCK) = traces(µX . tick X) = {tick}*

traces(VMS) = {s | s = <coin, choc>n or s = <coin, choc>n ^<coin>}

我们可以定义一套规则,计算任意进程的迹集合

有关进程的迹集合,也可以证明许多定律。如

traces(a P) = traces(a) ^ traces(P)

traces(a P | b Q) = traces(a P) U traces(b Q)

Page 32: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 32

进程代数(9)基于进程的迹,可以对进程的行为提出要求(系统规范,specification)。例如

售货机每次收钱后,必须或者吐货或者退钱

对于一个待设计的复杂系统,开发之前应该首先考虑其行为必须满足的各种性质(写出系统的规范)。开发出系统后,需要验证它是否真的行为正确(满足规范)

进程代数已经被大量用于描述实际系统的抽象行为,而后通过严格的形式化检查,检查系统设计是否存在问题

这方面一种重要技术是“模型检查”(model checking),

进程代数经常用作系统的建模工具。对广泛接受的进程代数系统(例如 CSP),人们开发了自动检查工具

Page 33: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 33

进程代数(10)其他重要的进程代数系统包括 ACP(Begstra),CCS(Milner),Pi 演算(Milner)等

各种进程代数已经被大量用于做各种复杂系统,主要是并行系统的建模和验证

Java 支持并行,但正确的并行程序很不好写。有人开发了JCSP(Communicating Sequential Processes for Java,http://www.cs.kent.ac.uk/projects/ofa/jcsp/),是基于 CSP 设计的一个支持写 Java 并发程序的库

Page 34: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 34

基于软件理论的形式化软件开发

基于软件理论研究的一种颠覆性建议是从根本上改变软件开发方式,提倡严格的基于形式化方法的软件开发过程

这种想法在程序设计层面上的总结形成了一批著作,包括Dijstra 的“Discipline of Programming”,Gries 的“The Science of Programming”,后来 Morgan 的“Programming from Specification”(中文版:从规范出发的程序设计,2002)等。这些著作倡导一种严格的程序推导方法,强调“断言”、“不变式”、“前后条件”、“规范”等在程序设计中的重要作用

在软件系统开发的层面上,这方面的典型是 J-R Abrial 开发的 B 方法(The B Book,中文版:B 方法,2004)

下面简单介绍 B 方法的一些情况

Page 35: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 35

形式化软件开发(1)B 方法中软件开发的基本单位是“抽象机”,类似于人们常说的“抽象数据类型”或者“对象”,其中封装了一批数据定

义和一些与之相关的操作

在软件开发的早期,“抽象机”中的数据表示为抽象的数学

对象,如集合和关系(二元或多元关系)。例如

基本集合:

常量和属性:

Page 36: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 36

形式化软件开发(2)定义变量,用谓词描述变量的的性质和相互关系:

操作作用于这些抽象数据对象,可能改变它们的状态

利用工具(可能需要人工交互)证明这样设计的一组抽象机是一致的,任何操作都不破坏不变式

针对各高层抽象机开发更接近系统实现的抽象机(精化),并证明所做的精化抽象机满足原抽象机的性质

系统最终完成后自动生成某语言的代码,完成开发

Page 37: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 37

形式化软件开发(3)这种开发方法能行吗?

B 方法是在开发巴黎地铁信号系统的过程中发展起来的,后来又用于开发巴黎的若干地铁/机场自动车的驾驶系统

另外,最近人们基于另一工具 Spark-Ada,用类似方法开发英国的空中交通管制系统 iForce

IEEE CS 的会刊 Computer 2009 年9月刊的专集就是有关形式化软件开发。其中 J-R Abrial 的文章:Faultless Systems: Yes We Can! 如果有兴趣可以去看看

在我的网页上“形式化方法”课程页中,翻译了 J-R Abrial 在 2006 年国际软件工程大会上的特邀报告“工业开发中的形式化方法,成就、问题和未来”。有兴趣可以去看看:http://www.is.pku.edu.cn/~qzy/fm/

Page 38: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 38

软件理论的实践

软件理论研究,至少可以追溯到 1967 年 Floyd 的论文“Assigning Meanings to Programs”,或者更早的McCarthy 有关 Lisp 语言语义的研究

目前软件理论已有许多实践,其中发展的认识已深入到软件实践领域的方方面面。

常规软件实践已经融入了许多理论元素

许多面向实际的教材和著作都讨论断言、前/后条件、循环不

变式和数据不变式等理论术语和技术的价值和作用

在 UML 等广泛采用的建模和描述工具里包含大量理论元素,如:断言、状态、状态机、状态转换、约束和约束语言OCL、不变式(不变量)、前/后条件等

人们提出了基于契约的编程等,并用于软件实践

Page 39: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 39

软件理论的实践

国外一些有关计算机系统开发的规范性文件强调在某些类软件的开发过程中应用形式化方法的必要性。特别是安全攸关(safety-critical)和生命攸关(life-critical)系统,

如核电站监控系统、武器系统、交通控制、医疗设备等

形式化理论在硬件领域有许多应用,例如:

90 年代 Moore 等人为 AMD 证明了 K5 浮点除法的正确性,

其形式化验证公司为硬件厂商做了许多验证工作

模型检查在硬件领域得到广泛应用,已成为标准技术

一些软件和计算机规范采用了形式化方法描述。例如:

RBAC 2004规范中采用了规范语言 Z 描述

W3C 的 WSDL 2.0规范(Z 描述,2005),W3C 的XQuery 1.0 and XPath 2.0(结构化操作语义,2005)

Page 40: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 40

软件理论的实践

基于软件理论的成果和方法研究各种复杂的系统问题

研究各种网络规范和安全规范,发现了一些漏洞

研究程序设计语言和其他复杂软件规范的理论模型和语义

基于理论模型的程序分析技术,对现有软件或者按常规方法开发的软件的检查技术

研究用软件理论成果支持常规软件开发过程的技术,例如“自动测试用例生成”

验证已有的复杂软件系统。例如验证操作系统内核。前几天有个报告“8000Line, One Kernel, 0 Bug”,介绍了验证 OS 内核 L4 的工作。微软的团队验证了一个约100万行的基础

作系统

Page 41: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 41

一些情况

1994年英特尔公司奔腾处理器发现浮点除法错。随后几年

各大硬件公司大量招聘研究形式化方法的高级专业人员

今天常规硬件设计工具都包含了基于形式化理论的验证工具

形式化验证已经成为硬件设计中不可或缺的必要步骤

微软是软件业老大(虽对它褒贬不一)。近年一些情况:

在若干研究院建立了研究软件理论的队伍。把软件理论方面的一批重要人物收入囊中:Hoare,Milner,Lamport 等

开发了一些实用工具,例如 SLIM(支持设备驱动开发)。

要求工程开发的软件都要用一些基于理论的工具检查

开发了一些实验性的基于程序理论的系统,如 Spec#。组织

队伍验证自己的几个关键性软件(部分)

组织了 Verified Software 研讨会(2009.10,北京)

Page 42: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 42

展望

软件理论的未来发展将为可靠软件系统提供更好的保证

目前对软件的理论的认识还很初步,需要很长时间的研究、开发和整理

由于软件的复杂性,软件理论的应用必须有良好的工具的支持。目前有关的工具系统还非常初步,远不如支持常规开发过程的工具成熟。人们对于需要什么样的工具的认识也在发展之中

软件理论不可能解决由于软件的复杂性带来的所有问题,但它是我们认识软件、处理软件复杂性的基础支撑

软件理论与良好的开发过程管理、更加成熟有效的开发技术和优秀的开发人员相结合,可能使我们未来的复杂软件系统变得更为可靠和安全

Page 43: Software / Theory - PKU€¦ · 的功能”,无论使用中出什么问题,公司责任只是下述两者之 ... 大型软件:~40年(ibm os360 ) 现代大型软件:20+年

软件理论 裘宗燕 北京大学数学学院信息科学系 2009.10.30 / 43

谢谢!

欢迎提问